diff --git a/03-EnterDirectX/App.ico b/03-EnterDirectX/App.ico new file mode 100644 index 0000000..3a5525f Binary files /dev/null and b/03-EnterDirectX/App.ico differ diff --git a/03-EnterDirectX/AssemblyInfo.cs b/03-EnterDirectX/AssemblyInfo.cs new file mode 100644 index 0000000..bf44131 --- /dev/null +++ b/03-EnterDirectX/AssemblyInfo.cs @@ -0,0 +1,59 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: System.CLSCompliant(true)] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/03-EnterDirectX/DirectXLists.cs b/03-EnterDirectX/DirectXLists.cs new file mode 100644 index 0000000..6242246 --- /dev/null +++ b/03-EnterDirectX/DirectXLists.cs @@ -0,0 +1,234 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + +namespace EnterDirectX { + /// + /// Summary description for DirectXLists. + /// + public class DirectXLists { + private static int FrameRate, LastFrameRate, LastTick; + + private DirectXLists() {} + + public static int CalcFrameRate() { + // Frame rate calculation + if(System.Environment.TickCount - LastTick >= 1000) { + LastFrameRate = FrameRate; + FrameRate = 0; + LastTick = System.Environment.TickCount; + } + FrameRate++; + return LastFrameRate; + } + + public static string DisplayModeName(Format modeFormat) { + return modeFormat.ToString(); + } + + public static void ListGeneralCaps(Caps devCaps, ListBox listCaps) { + listCaps.Items.Add(" ----- General Caps ------------------------"); + if(devCaps.MaxActiveLights == -1) { + listCaps.Items.Add("Maximum Active Lights: Unlimited"); + } + else { + listCaps.Items.Add("Maximum Active Lights: " + devCaps.MaxActiveLights); + } + if(devCaps.MaxPointSize == 1) { + listCaps.Items.Add("Device does not support point size control"); + } + else { + listCaps.Items.Add("Maximum point primitive size: " + devCaps.MaxPointSize); + } + listCaps.Items.Add("Maximum Primitives in each DrawPrimitives call: " + devCaps.MaxPrimitiveCount); + listCaps.Items.Add("Maximum textures simultaneously bound: " + devCaps.MaxSimultaneousTextures); + listCaps.Items.Add("Maximum Texture aspect ratio: " + devCaps.MaxTextureAspectRatio); + listCaps.Items.Add("Maximum Texture size: " + devCaps.MaxTextureWidth + "x" + devCaps.MaxTextureHeight); + listCaps.Items.Add("Maximum matrixes blending: " + devCaps.MaxVertexBlendMatrices); + listCaps.Items.Add("Maximum vertex shaders registers: " + devCaps.MaxVertexShaderConst); + } + + public static void ListTextureCaps(TextureCaps textureCaps, ListBox listCaps) { + listCaps.Items.Add(" ----- Texture Caps ------------------------"); + if(textureCaps.SupportsPerspective) { + listCaps.Items.Add("Perspective correction texturing is supported. "); + } + if(textureCaps.SupportsPower2) { + listCaps.Items.Add("All textures must have widths and heights specified as powers of 2. " + + "This requirement does not apply to either cube textures or volume textures. "); + } + if(textureCaps.SupportsAlpha) { + listCaps.Items.Add("Alpha in texture pixels is supported. "); + } + if(textureCaps.SupportsSquareOnly) { + listCaps.Items.Add("All textures must be square. "); + } + if(textureCaps.SupportsTextureRepeatNotScaledBySize) { + listCaps.Items.Add("Texture indices are not scaled by the texture size prior to interpolation. "); + } + if(textureCaps.SupportsAlphaPalette) { + listCaps.Items.Add("Device can draw alpha from texture palettes. "); + } + if(textureCaps.SupportsNonPower2Conditional) { + listCaps.Items.Add("Conditionally supports the use of textures with dimensions that are not powers of 2.. "); + } + if(textureCaps.SupportsProjected) { + listCaps.Items.Add("Supports the projected texture transformation flag. "); + } + if(textureCaps.SupportsCubeMap) { + listCaps.Items.Add("Supports cube textures. "); + } + if(textureCaps.SupportsVolumeMap) { + listCaps.Items.Add("Device supports volume textures. "); + } + if(textureCaps.SupportsMipMap) { + listCaps.Items.Add("Device supports mipmapped textures. "); + } + if(textureCaps.SupportsMipVolumeMap) { + listCaps.Items.Add("Device supports mipmapped textures. "); + } + if(textureCaps.SupportsMipCubeMap) { + listCaps.Items.Add("Device supports mipmapped cube textures. "); + } + if(textureCaps.SupportsCubeMapPower2) { + listCaps.Items.Add("Device requires that cube texture maps have dimensions specified as powers of 2. "); + } + if(textureCaps.SupportsVolumeMapPower2) { + listCaps.Items.Add("Device requires that volume texture maps have dimensions specified as powers of 2. "); + } + } + + public static void ListRasterCaps(RasterCaps rasterCaps, ListBox listCaps) { + listCaps.Items.Add(" ----- Rasterizer Caps ------------------------"); + if(rasterCaps.SupportsDither) { + listCaps.Items.Add("The device can dither to improve color resolution."); + } + + + if(rasterCaps.SupportsZBufferTest) { + listCaps.Items.Add("The device can perform z-test operations."); + } + + if(rasterCaps.SupportsFogVertex) { + listCaps.Items.Add("The device calculates the fog value during the lighting operation using the D3DTLVERTEX. "); + } + + if(rasterCaps.SupportsFogTable) { + listCaps.Items.Add("The device calculates the fog value by referring to a lookup table."); + } + + if(rasterCaps.SupportsMipMapLevelOfDetailBias) { + listCaps.Items.Add("The device supports level-of-detail (LOD) bias adjustments. "); + } + + if(rasterCaps.SupportsDepthBias) { + listCaps.Items.Add("The device supports depth bias values."); + } + + if(rasterCaps.SupportsZBufferLessHsr) { + listCaps.Items.Add("The device can perform hidden-surface removal (HSR) without requiring the allocation of a depth-buffer"); + } + + if(rasterCaps.SupportsFogRange) { + listCaps.Items.Add("The device supports range-based fog."); + } + + if(rasterCaps.SupportsAnisotropy) { + listCaps.Items.Add("The device supports anisotropic filtering."); + } + + if(rasterCaps.SupportsWBuffer) { + listCaps.Items.Add("The device supports depth buffering using w. "); + } + + if(rasterCaps.SupportsWFog) { + listCaps.Items.Add("The device supports w-based fog. "); + } + + if(rasterCaps.SupportsZFog) { + listCaps.Items.Add("The device supports z-based fog. "); + } + + if(rasterCaps.SupportsColorPerspective) { + listCaps.Items.Add("The device iterates colors perspective correct."); + } + } + + public static void ListDriverCaps(DriverCaps driverCaps, ListBox listCaps) { + listCaps.Items.Add(" ----- Driver Caps ------------------------"); + if(driverCaps.SupportsDynamicTextures) { + listCaps.Items.Add("The driver support Dynamic textures"); + } + + if(driverCaps.CanCalibrateGamma) { + listCaps.Items.Add("The driver can automatically adjust the gamma ramp"); + } + + if(driverCaps.SupportsFullscreenGamma) { + listCaps.Items.Add("The driver supports dynamic gamma ramp adjustment in full-screen mode. "); + } + } + + public static void ListDevCaps(DeviceCaps devCaps, ListBox listCaps) { + listCaps.Items.Add(" ----- Device Caps ------------------------"); + + if(devCaps.SupportsExecuteSystemMemory) { + listCaps.Items.Add("Device can use execute buffers from system memory."); + } + if(devCaps.SupportsExecuteVideoMemory) { + listCaps.Items.Add("Device can use execute buffers from video memory. "); + } + if(devCaps.SupportsTransformedVertexSystemMemory) { + listCaps.Items.Add("Device can use buffers from system memory for transformed and lit vertices. "); + } + if(devCaps.SupportsTransformedVertexVideoMemory) { + listCaps.Items.Add("Device can use buffers from video memory for transformed and lit vertices. "); + } + if(devCaps.SupportsTextureSystemMemory) { + listCaps.Items.Add("Device can retrieve textures from system memory. "); + } + if(devCaps.SupportsTextureVideoMemory) { + listCaps.Items.Add("Device can retrieve textures from device memory."); + } + if(devCaps.SupportsDrawPrimitivesTransformedVertex) { + listCaps.Items.Add("Device exports a DrawPrimitives-aware hardware abstraction layer (HAL)."); + } + if(devCaps.CanRenderAfterFlip) { + listCaps.Items.Add("Device can queue rendering commands after a page flip."); + } + if(devCaps.SupportsTextureNonLocalVideoMemory) { + listCaps.Items.Add("Device can retrieve textures from nonlocal video memory. "); + } + if(devCaps.SupportsSeparateTextureMemories) { + listCaps.Items.Add("Device is texturing from separate memory pools. "); + } + if(devCaps.SupportsHardwareTransformAndLight) { + listCaps.Items.Add("Device can support transformation and lighting in hardware. "); + } + if(devCaps.CanDrawSystemToNonLocal) { + listCaps.Items.Add("Device supports blits from system-memory textures to nonlocal video-memory textures. "); + } + if(devCaps.SupportsHardwareRasterization) { + listCaps.Items.Add("Device has hardware acceleration for scene rasterization. "); + } + if(devCaps.SupportsPureDevice) { + listCaps.Items.Add("Device can support rasterization, transform, lighting, and shading in hardware. "); + } + if(devCaps.SupportsQuinticRtPatches) { + listCaps.Items.Add("Device supports quintic béziers and B-splines."); + } + if(devCaps.SupportsRtPatches) { + listCaps.Items.Add("Device supports high-order surfaces. "); + } + if(devCaps.SupportsRtPatchHandleZero) { + listCaps.Items.Add("High-order surfaces can be drawn efficiently using a handle value of 0. "); + } + if(devCaps.SupportsNPatches) { + listCaps.Items.Add("Device supports N patches. "); + } + } + } +} diff --git a/03-EnterDirectX/EnterDirectX.csproj b/03-EnterDirectX/EnterDirectX.csproj new file mode 100644 index 0000000..367ace2 --- /dev/null +++ b/03-EnterDirectX/EnterDirectX.csproj @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/03-EnterDirectX/EnterDirectX.sln b/03-EnterDirectX/EnterDirectX.sln new file mode 100644 index 0000000..6450893 --- /dev/null +++ b/03-EnterDirectX/EnterDirectX.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnterDirectX", "EnterDirectX.csproj", "{8A6C5071-CD17-4F18-BCF3-7FD680A11FAE}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8A6C5071-CD17-4F18-BCF3-7FD680A11FAE}.Debug.ActiveCfg = Debug|.NET + {8A6C5071-CD17-4F18-BCF3-7FD680A11FAE}.Debug.Build.0 = Debug|.NET + {8A6C5071-CD17-4F18-BCF3-7FD680A11FAE}.Release.ActiveCfg = Release|.NET + {8A6C5071-CD17-4F18-BCF3-7FD680A11FAE}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/03-EnterDirectX/FST.cs b/03-EnterDirectX/FST.cs new file mode 100644 index 0000000..cbd1f33 --- /dev/null +++ b/03-EnterDirectX/FST.cs @@ -0,0 +1,190 @@ +Imports Microsoft.DirectX.Direct3D +Imports Microsoft.DirectX + +Public Class FullScreenTest + Inherits System.Windows.Forms.Form + Public EndTest As Boolean = False + Dim NUM_VERTS = 4 + Dim objDirect3DDevice As Device = Nothing + Dim vertBuffer As VertexBuffer = Nothing + Dim Textures(10) As Texture + + ' Simple textured vertices constant and structure + Public Const fvf_CUSTOMVERTEX As VertexFormats = VertexFormats.Transformed Or VertexFormats.Texture1 + + Private Structure CUSTOMVERTEX + Public X As Single + Public Y As Single + Public Z As Single + Public rhw As Single + Public tu As Single + Public tv As Single + End Structure + + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Private Sub InitializeComponent() + ' + 'FullScreenTest + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15) + Me.ClientSize = New System.Drawing.Size(1344, 856) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None + Me.KeyPreview = True + Me.Name = "FullScreenTest" + Me.Text = "TestFullScreen" + Me.TopMost = True + Me.WindowState = System.Windows.Forms.FormWindowState.Maximized + + End Sub + +#End Region + + Private Sub TestWindow_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown + If e.KeyCode = Keys.Escape Then + EndTest = True + End If + End Sub + Private Sub FullScreenTest_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown + EndTest = True + End Sub + + + Public Sub DisposeD3D() + On Error Resume Next ' We are leaving, ignore any errors + Dim i As Integer + + + For i = 0 To 9 + If Not (Textures(i) Is Nothing) Then Textures(i).Dispose() + Textures(i) = Nothing + Next + + If Not (vertBuffer Is Nothing) Then vertBuffer.Dispose() + vertBuffer = Nothing + + If Not (objDirect3DDevice Is Nothing) Then objDirect3DDevice.Dispose() + objDirect3DDevice = Nothing + End Sub + + Public Function InitD3D(ByVal WinHandle As IntPtr) As Boolean + Dim DispMode As DisplayMode + Dim objDirect3Dpp As PresentParameters + + DispMode = Manager.Adapters(Manager.Adapters.Default.Adapter).CurrentDisplayMode + ' Define the presentation parameters + objDirect3Dpp = New PresentParameters + objDirect3Dpp.BackBufferFormat = DispMode.Format + objDirect3Dpp.BackBufferWidth = DispMode.Width + objDirect3Dpp.BackBufferHeight = DispMode.Height + objDirect3Dpp.SwapEffect = SwapEffect.Discard + ' Try to create the device + Try + objDirect3DDevice = New Device(Manager.Adapters.Default.Adapter, _ + DeviceType.Hardware, WinHandle, CreateFlags.SoftwareVertexProcessing, _ + objDirect3Dpp) + objDirect3DDevice.VertexFormat = fvf_CUSTOMVERTEX + InitD3D = True + Catch + InitD3D = False + End Try + ' Dispose the used objects + End Function + + Public Function CreateTextures() As Boolean + Dim verts As CustomVertex() + Dim i As Integer + + Try + For i = 1 To 10 + Textures(i - 1) = TextureLoader.FromFile(objDirect3DDevice, Application.StartupPath + "\Walk" & CStr(i) & ".bmp") + Next + vertBuffer = New VertexBuffer(GetType(CustomVertex), NUM_VERTS, objDirect3DDevice, _ + Usage.WriteOnly, fvf_CUSTOMVERTEX, Pool.Default) + verts = vertBuffer.Lock(0, 0) + SquareVertices(verts) + vertBuffer.Unlock() + Return True + Catch + Return False + End Try + End Function + + Private Sub SquareVertices(ByVal vertices As CUSTOMVERTEX()) + Dim mode As DisplayMode = Manager.Adapters(Manager.Adapters.Default.Adapter).CurrentDisplayMode + + + ' Create a square, composed of 2 triangles, taking all the screen + vertices(0) = CreateFlexVertex(0, 0, 0, 1, 0, 0) + vertices(1) = CreateFlexVertex(mode.Width, 0, 0, 1, 1, 0) + vertices(2) = CreateFlexVertex(0, mode.Height, 0, 1, 0, 1) + vertices(3) = CreateFlexVertex(mode.Width, mode.Height, 0, 1, 1, 1) + End Sub + + Private Function CreateFlexVertex(ByRef X As Single, ByRef Y As Single, ByRef Z As Single, ByRef rhw As Single, ByRef tu As Single, ByRef tv As Single) As CUSTOMVERTEX + CreateFlexVertex.X = X + CreateFlexVertex.Y = Y + CreateFlexVertex.Z = Z + CreateFlexVertex.rhw = rhw + CreateFlexVertex.tu = tu + CreateFlexVertex.tv = tv + End Function + + Public Sub Render() + Static x As Integer = 0 + + If (objDirect3DDevice Is Nothing) Then Return + + objDirect3DDevice.Clear(ClearFlags.Target, Color.FromArgb(0, 0, 255).ToArgb, 1.0F, 0) + objDirect3DDevice.BeginScene() + + ' Show one texture a time, in order to create the illusion of a walking guy + objDirect3DDevice.SetTexture(0, Textures(x)) + x += 1 + If x = 10 Then x = 0 + + objDirect3DDevice.SetStreamSource(0, vertBuffer, 0) + objDirect3DDevice.DrawPrimitives(PrimitiveType.TriangleStrip, 0, NUM_VERTS - 2) + objDirect3DDevice.EndScene() + + Try + objDirect3DDevice.Present() + Catch + End Try + End Sub + + Private Sub FullScreenTest_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing + EndTest = True + DisposeD3D() + End Sub + +End Class + + diff --git a/03-EnterDirectX/FullScreenTest.cs b/03-EnterDirectX/FullScreenTest.cs new file mode 100644 index 0000000..e313ae2 --- /dev/null +++ b/03-EnterDirectX/FullScreenTest.cs @@ -0,0 +1,193 @@ +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace EnterDirectX { + public class FullScreenTest: System.Windows.Forms.Form { + private bool endTest = false; + + public bool EndTest { + get { return endTest; } + } + + int numVerts = 4; + Device device = null; + VertexBuffer vertBuffer = null; + Texture[] textures = new Texture[10]; + private static int x = 0; + + // Simple textured vertices constant and structure + private const VertexFormats customVertex = VertexFormats.Transformed|VertexFormats.Texture1; + + private struct CustomVertex { + public float X; + public float Y; + public float Z; + public float rhw; + public float tu; + public float tv; + } + + + #region " Windows Form Designer generated code " + + public FullScreenTest() : base() { + + //This call is required by the Windows Form Designer. + InitializeComponent(); + + //Add any initialization after the InitializeComponent() call + + } + + //Form overrides dispose to clean up the component list. + protected override void Dispose(bool disposing) { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + //Required by the Windows Form Designer + private System.ComponentModel.IContainer components; + + //NOTE: The following procedure is required by the Windows Form Designer + //It can be modified using the Windows Form Designer. + //Do not modify it using the code editor. + [System.Diagnostics.DebuggerStepThrough] + private void InitializeComponent() { + // + // FullScreenTest + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(1119, 741); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.KeyPreview = true; + this.Name = "FullScreenTest"; + this.Text = "TestFullScreen"; + this.TopMost = true; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.FullScreenTest_KeyDown); + this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.FullScreenTest_MouseDown); + this.Closing += new System.ComponentModel.CancelEventHandler(this.FullScreenTest_Closing); + + } + + #endregion + + private void FullScreenTest_KeyDown(object sender, KeyEventArgs e) { + if (e.KeyCode==Keys.Escape) { + endTest = true; + } + } + private void FullScreenTest_MouseDown(object sender, MouseEventArgs e) { + endTest = true; + } + + + public void DisposeD3D() { + for(int i=0; i<=9; i++) { + if ((textures[i] != null)) {textures[i].Dispose();} + textures[i] = null; + } + + if ((vertBuffer != null)) {vertBuffer.Dispose();} + vertBuffer = null; + + if ((device != null)) {device.Dispose();} + device = null; + } + + public bool InitD3D(System.IntPtr winHandle) { + DisplayMode DispMode = Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode; + PresentParameters presentParams = new PresentParameters(); + // Define the presentation parameters + presentParams.BackBufferFormat = DispMode.Format; + presentParams.BackBufferWidth = DispMode.Width; + presentParams.BackBufferHeight = DispMode.Height; + presentParams.SwapEffect = SwapEffect.Discard; + // Try to create the device + try { + device = new Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, winHandle, CreateFlags.SoftwareVertexProcessing, presentParams); + device.VertexFormat = customVertex; + return true; + } + catch { + return false; + } + } + + public bool CreateTextures() { + CustomVertex[] verts; + try { + for(int i=1; i<=10; i++) { + textures[i-1] = TextureLoader.FromFile(device, Application.StartupPath+@"\..\..\Images\Walk"+i.ToString()+".bmp"); + } + vertBuffer = new VertexBuffer(typeof(CustomVertex), numVerts, + device, Usage.WriteOnly, customVertex, Pool.Default); + verts = vertBuffer.Lock(0, 0) as CustomVertex[]; + SquareVertices(verts); + vertBuffer.Unlock(); + return true; + } + catch { + return false; + } + } + + private void SquareVertices(CustomVertex[] vertices) { + DisplayMode mode = Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode; + // Create a square, composed of 2 triangles, taking all the screen + vertices[0] = CreateFlexVertex(0, 0, 0, 1, 0, 0); + vertices[1] = CreateFlexVertex(mode.Width, 0, 0, 1, 1, 0); + vertices[2] = CreateFlexVertex(0, mode.Height, 0, 1, 0, 1); + vertices[3] = CreateFlexVertex(mode.Width, mode.Height, 0, 1, 1, 1); + } + + private CustomVertex CreateFlexVertex(float X, float Y, float Z, float rhw, float tu, float tv) { + CustomVertex cv; + cv.X = X; + cv.Y = Y; + cv.Z = Z; + cv.rhw = rhw; + cv.tu = tu; + cv.tv = tv; + return cv; + } + + public void Render() { + if ((device==null)) {return;} + + device.Clear(ClearFlags.Target, Color.FromArgb(0, 0, 255).ToArgb(), 1.0F, 0); + device.BeginScene(); + + // Show one texture a time, in order to create the illusion of a walking guy + device.SetTexture(0, textures[x]); + x = (x == 9) ? 0 : x+1; //If x is 9, set to 0, otherwise increment x + device.SetStreamSource(0, vertBuffer, 0); + device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, numVerts-2); + device.EndScene(); + try { + device.Present(); + } + catch { + } + } + + private void FullScreenTest_Closing(object sender, System.ComponentModel.CancelEventArgs e) { + endTest = true; + DisposeD3D(); + } + } +} + + + + diff --git a/03-EnterDirectX/FullScreenTest.resx b/03-EnterDirectX/FullScreenTest.resx new file mode 100644 index 0000000..e78abba --- /dev/null +++ b/03-EnterDirectX/FullScreenTest.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + (Default) + + + False + + + False + + + FullScreenTest + + + 8, 8 + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/03-EnterDirectX/Images/TranspSample.bmp b/03-EnterDirectX/Images/TranspSample.bmp new file mode 100644 index 0000000..4c8d620 Binary files /dev/null and b/03-EnterDirectX/Images/TranspSample.bmp differ diff --git a/03-EnterDirectX/Images/walk1.bmp b/03-EnterDirectX/Images/walk1.bmp new file mode 100644 index 0000000..6ad476c Binary files /dev/null and b/03-EnterDirectX/Images/walk1.bmp differ diff --git a/03-EnterDirectX/Images/walk10.bmp b/03-EnterDirectX/Images/walk10.bmp new file mode 100644 index 0000000..d5dde5d Binary files /dev/null and b/03-EnterDirectX/Images/walk10.bmp differ diff --git a/03-EnterDirectX/Images/walk2.bmp b/03-EnterDirectX/Images/walk2.bmp new file mode 100644 index 0000000..0a142c7 Binary files /dev/null and b/03-EnterDirectX/Images/walk2.bmp differ diff --git a/03-EnterDirectX/Images/walk3.bmp b/03-EnterDirectX/Images/walk3.bmp new file mode 100644 index 0000000..020e9d8 Binary files /dev/null and b/03-EnterDirectX/Images/walk3.bmp differ diff --git a/03-EnterDirectX/Images/walk4.bmp b/03-EnterDirectX/Images/walk4.bmp new file mode 100644 index 0000000..726f025 Binary files /dev/null and b/03-EnterDirectX/Images/walk4.bmp differ diff --git a/03-EnterDirectX/Images/walk5.bmp b/03-EnterDirectX/Images/walk5.bmp new file mode 100644 index 0000000..55fac3c Binary files /dev/null and b/03-EnterDirectX/Images/walk5.bmp differ diff --git a/03-EnterDirectX/Images/walk6.bmp b/03-EnterDirectX/Images/walk6.bmp new file mode 100644 index 0000000..3686271 Binary files /dev/null and b/03-EnterDirectX/Images/walk6.bmp differ diff --git a/03-EnterDirectX/Images/walk7.bmp b/03-EnterDirectX/Images/walk7.bmp new file mode 100644 index 0000000..5ad82ab Binary files /dev/null and b/03-EnterDirectX/Images/walk7.bmp differ diff --git a/03-EnterDirectX/Images/walk8.bmp b/03-EnterDirectX/Images/walk8.bmp new file mode 100644 index 0000000..f21c4e3 Binary files /dev/null and b/03-EnterDirectX/Images/walk8.bmp differ diff --git a/03-EnterDirectX/Images/walk9.bmp b/03-EnterDirectX/Images/walk9.bmp new file mode 100644 index 0000000..b0f66a4 Binary files /dev/null and b/03-EnterDirectX/Images/walk9.bmp differ diff --git a/03-EnterDirectX/LightControl.cs b/03-EnterDirectX/LightControl.cs new file mode 100644 index 0000000..4624dd2 --- /dev/null +++ b/03-EnterDirectX/LightControl.cs @@ -0,0 +1,764 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace EnterDirectX { + /// + /// Summary description for LC. + /// + public class LightControl : System.Windows.Forms.Form { + #region class components for Windows Form + internal System.Windows.Forms.TabControl TabControl1; + internal System.Windows.Forms.TabPage Vertex1; + internal System.Windows.Forms.GroupBox GroupBox1; + internal System.Windows.Forms.Label lblBlue1; + internal System.Windows.Forms.NumericUpDown Blue1; + internal System.Windows.Forms.Label lblGreen1; + internal System.Windows.Forms.NumericUpDown Green1; + internal System.Windows.Forms.Label lblRed1; + internal System.Windows.Forms.NumericUpDown Red1; + internal System.Windows.Forms.TabPage Vertex2; + internal System.Windows.Forms.GroupBox GroupBox2; + internal System.Windows.Forms.Label lblBlue2; + internal System.Windows.Forms.NumericUpDown Blue2; + internal System.Windows.Forms.Label lblGreen2; + internal System.Windows.Forms.NumericUpDown Green2; + internal System.Windows.Forms.Label LblRed2; + internal System.Windows.Forms.NumericUpDown Red2; + internal System.Windows.Forms.TabPage Vertex3; + internal System.Windows.Forms.GroupBox GroupBox3; + internal System.Windows.Forms.Label lblBlue3; + internal System.Windows.Forms.NumericUpDown Blue3; + internal System.Windows.Forms.Label lblGreen3; + internal System.Windows.Forms.NumericUpDown Green3; + internal System.Windows.Forms.Label lblRed3; + internal System.Windows.Forms.NumericUpDown Red3; + internal System.Windows.Forms.TabPage Vertex4; + internal System.Windows.Forms.GroupBox GroupBox4; + internal System.Windows.Forms.Label lblBlue4; + internal System.Windows.Forms.NumericUpDown Blue4; + internal System.Windows.Forms.Label lblGreen4; + internal System.Windows.Forms.NumericUpDown Green4; + internal System.Windows.Forms.Label lblRed4; + internal System.Windows.Forms.NumericUpDown Red4; + #endregion + + private System.ComponentModel.Container components = null; + private static int x = 0; + private bool endTest = false; + + public bool EndTest { + get { return endTest; } + } + + private Device device; + private int numVerts = 4; + private VertexBuffer vertBuffer; + private const int numTextures = 10; + private Texture[] textures = new Texture[numTextures]; + private const VertexFormats customVertex = VertexFormats.Transformed | + VertexFormats.Diffuse | + VertexFormats.Texture1; + private struct CustomVertex { + public float X; + public float Y; + public float Z; + public float rhw; + public int color; + public float tu; + public float tv; + } + + + public LightControl() { + InitializeComponent(); + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.TabControl1 = new System.Windows.Forms.TabControl(); + this.Vertex1 = new System.Windows.Forms.TabPage(); + this.GroupBox1 = new System.Windows.Forms.GroupBox(); + this.lblBlue1 = new System.Windows.Forms.Label(); + this.Blue1 = new System.Windows.Forms.NumericUpDown(); + this.lblGreen1 = new System.Windows.Forms.Label(); + this.Green1 = new System.Windows.Forms.NumericUpDown(); + this.lblRed1 = new System.Windows.Forms.Label(); + this.Red1 = new System.Windows.Forms.NumericUpDown(); + this.Vertex2 = new System.Windows.Forms.TabPage(); + this.GroupBox2 = new System.Windows.Forms.GroupBox(); + this.lblBlue2 = new System.Windows.Forms.Label(); + this.Blue2 = new System.Windows.Forms.NumericUpDown(); + this.lblGreen2 = new System.Windows.Forms.Label(); + this.Green2 = new System.Windows.Forms.NumericUpDown(); + this.LblRed2 = new System.Windows.Forms.Label(); + this.Red2 = new System.Windows.Forms.NumericUpDown(); + this.Vertex3 = new System.Windows.Forms.TabPage(); + this.GroupBox3 = new System.Windows.Forms.GroupBox(); + this.lblBlue3 = new System.Windows.Forms.Label(); + this.Blue3 = new System.Windows.Forms.NumericUpDown(); + this.lblGreen3 = new System.Windows.Forms.Label(); + this.Green3 = new System.Windows.Forms.NumericUpDown(); + this.lblRed3 = new System.Windows.Forms.Label(); + this.Red3 = new System.Windows.Forms.NumericUpDown(); + this.Vertex4 = new System.Windows.Forms.TabPage(); + this.GroupBox4 = new System.Windows.Forms.GroupBox(); + this.lblBlue4 = new System.Windows.Forms.Label(); + this.Blue4 = new System.Windows.Forms.NumericUpDown(); + this.lblGreen4 = new System.Windows.Forms.Label(); + this.Green4 = new System.Windows.Forms.NumericUpDown(); + this.lblRed4 = new System.Windows.Forms.Label(); + this.Red4 = new System.Windows.Forms.NumericUpDown(); + this.TabControl1.SuspendLayout(); + this.Vertex1.SuspendLayout(); + this.GroupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.Blue1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red1)).BeginInit(); + this.Vertex2.SuspendLayout(); + this.GroupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.Blue2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red2)).BeginInit(); + this.Vertex3.SuspendLayout(); + this.GroupBox3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.Blue3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red3)).BeginInit(); + this.Vertex4.SuspendLayout(); + this.GroupBox4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.Blue4)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green4)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red4)).BeginInit(); + this.SuspendLayout(); + // + // TabControl1 + // + this.TabControl1.Controls.Add(this.Vertex1); + this.TabControl1.Controls.Add(this.Vertex2); + this.TabControl1.Controls.Add(this.Vertex3); + this.TabControl1.Controls.Add(this.Vertex4); + this.TabControl1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.TabControl1.Location = new System.Drawing.Point(0, 0); + this.TabControl1.Name = "TabControl1"; + this.TabControl1.SelectedIndex = 0; + this.TabControl1.Size = new System.Drawing.Size(256, 184); + this.TabControl1.TabIndex = 9; + // + // Vertex1 + // + this.Vertex1.Controls.Add(this.GroupBox1); + this.Vertex1.Location = new System.Drawing.Point(4, 24); + this.Vertex1.Name = "Vertex1"; + this.Vertex1.Size = new System.Drawing.Size(248, 156); + this.Vertex1.TabIndex = 0; + this.Vertex1.Text = "Vertex 1"; + // + // GroupBox1 + // + this.GroupBox1.Controls.Add(this.lblBlue1); + this.GroupBox1.Controls.Add(this.Blue1); + this.GroupBox1.Controls.Add(this.lblGreen1); + this.GroupBox1.Controls.Add(this.Green1); + this.GroupBox1.Controls.Add(this.lblRed1); + this.GroupBox1.Controls.Add(this.Red1); + this.GroupBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.GroupBox1.Location = new System.Drawing.Point(32, 8); + this.GroupBox1.Name = "GroupBox1"; + this.GroupBox1.Size = new System.Drawing.Size(184, 144); + this.GroupBox1.TabIndex = 2; + this.GroupBox1.TabStop = false; + this.GroupBox1.Text = "Color"; + // + // lblBlue1 + // + this.lblBlue1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblBlue1.Location = new System.Drawing.Point(8, 106); + this.lblBlue1.Name = "lblBlue1"; + this.lblBlue1.Size = new System.Drawing.Size(80, 24); + this.lblBlue1.TabIndex = 5; + this.lblBlue1.Text = "Blue"; + // + // Blue1 + // + this.Blue1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Blue1.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Blue1.Location = new System.Drawing.Point(96, 104); + this.Blue1.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Blue1.Name = "Blue1"; + this.Blue1.Size = new System.Drawing.Size(56, 29); + this.Blue1.TabIndex = 4; + this.Blue1.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // lblGreen1 + // + this.lblGreen1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblGreen1.Location = new System.Drawing.Point(8, 66); + this.lblGreen1.Name = "lblGreen1"; + this.lblGreen1.Size = new System.Drawing.Size(80, 24); + this.lblGreen1.TabIndex = 3; + this.lblGreen1.Text = "Green"; + // + // Green1 + // + this.Green1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Green1.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Green1.Location = new System.Drawing.Point(96, 64); + this.Green1.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Green1.Name = "Green1"; + this.Green1.Size = new System.Drawing.Size(56, 29); + this.Green1.TabIndex = 2; + this.Green1.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // lblRed1 + // + this.lblRed1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblRed1.Location = new System.Drawing.Point(8, 26); + this.lblRed1.Name = "lblRed1"; + this.lblRed1.Size = new System.Drawing.Size(80, 24); + this.lblRed1.TabIndex = 1; + this.lblRed1.Text = "Red"; + // + // Red1 + // + this.Red1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Red1.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Red1.Location = new System.Drawing.Point(96, 24); + this.Red1.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Red1.Name = "Red1"; + this.Red1.Size = new System.Drawing.Size(56, 29); + this.Red1.TabIndex = 0; + this.Red1.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // Vertex2 + // + this.Vertex2.Controls.Add(this.GroupBox2); + this.Vertex2.Location = new System.Drawing.Point(4, 24); + this.Vertex2.Name = "Vertex2"; + this.Vertex2.Size = new System.Drawing.Size(248, 156); + this.Vertex2.TabIndex = 1; + this.Vertex2.Text = "Vertex2"; + this.Vertex2.Visible = false; + // + // GroupBox2 + // + this.GroupBox2.Controls.Add(this.lblBlue2); + this.GroupBox2.Controls.Add(this.Blue2); + this.GroupBox2.Controls.Add(this.lblGreen2); + this.GroupBox2.Controls.Add(this.Green2); + this.GroupBox2.Controls.Add(this.LblRed2); + this.GroupBox2.Controls.Add(this.Red2); + this.GroupBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.GroupBox2.Location = new System.Drawing.Point(32, 8); + this.GroupBox2.Name = "GroupBox2"; + this.GroupBox2.Size = new System.Drawing.Size(184, 144); + this.GroupBox2.TabIndex = 3; + this.GroupBox2.TabStop = false; + this.GroupBox2.Text = "Color"; + // + // lblBlue2 + // + this.lblBlue2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblBlue2.Location = new System.Drawing.Point(8, 106); + this.lblBlue2.Name = "lblBlue2"; + this.lblBlue2.Size = new System.Drawing.Size(80, 24); + this.lblBlue2.TabIndex = 5; + this.lblBlue2.Text = "Blue"; + // + // Blue2 + // + this.Blue2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Blue2.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Blue2.Location = new System.Drawing.Point(96, 104); + this.Blue2.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Blue2.Name = "Blue2"; + this.Blue2.Size = new System.Drawing.Size(56, 29); + this.Blue2.TabIndex = 4; + this.Blue2.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // lblGreen2 + // + this.lblGreen2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblGreen2.Location = new System.Drawing.Point(8, 66); + this.lblGreen2.Name = "lblGreen2"; + this.lblGreen2.Size = new System.Drawing.Size(80, 24); + this.lblGreen2.TabIndex = 3; + this.lblGreen2.Text = "Green"; + // + // Green2 + // + this.Green2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Green2.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Green2.Location = new System.Drawing.Point(96, 64); + this.Green2.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Green2.Name = "Green2"; + this.Green2.Size = new System.Drawing.Size(56, 29); + this.Green2.TabIndex = 2; + this.Green2.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // LblRed2 + // + this.LblRed2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.LblRed2.Location = new System.Drawing.Point(8, 26); + this.LblRed2.Name = "LblRed2"; + this.LblRed2.Size = new System.Drawing.Size(80, 24); + this.LblRed2.TabIndex = 1; + this.LblRed2.Text = "Red"; + // + // Red2 + // + this.Red2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Red2.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Red2.Location = new System.Drawing.Point(96, 24); + this.Red2.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Red2.Name = "Red2"; + this.Red2.Size = new System.Drawing.Size(56, 29); + this.Red2.TabIndex = 0; + this.Red2.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // Vertex3 + // + this.Vertex3.Controls.Add(this.GroupBox3); + this.Vertex3.Location = new System.Drawing.Point(4, 24); + this.Vertex3.Name = "Vertex3"; + this.Vertex3.Size = new System.Drawing.Size(248, 156); + this.Vertex3.TabIndex = 2; + this.Vertex3.Text = "Vertex 3"; + this.Vertex3.Visible = false; + // + // GroupBox3 + // + this.GroupBox3.Controls.Add(this.lblBlue3); + this.GroupBox3.Controls.Add(this.Blue3); + this.GroupBox3.Controls.Add(this.lblGreen3); + this.GroupBox3.Controls.Add(this.Green3); + this.GroupBox3.Controls.Add(this.lblRed3); + this.GroupBox3.Controls.Add(this.Red3); + this.GroupBox3.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.GroupBox3.Location = new System.Drawing.Point(32, 8); + this.GroupBox3.Name = "GroupBox3"; + this.GroupBox3.Size = new System.Drawing.Size(184, 144); + this.GroupBox3.TabIndex = 3; + this.GroupBox3.TabStop = false; + this.GroupBox3.Text = "Color"; + // + // lblBlue3 + // + this.lblBlue3.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblBlue3.Location = new System.Drawing.Point(8, 106); + this.lblBlue3.Name = "lblBlue3"; + this.lblBlue3.Size = new System.Drawing.Size(80, 24); + this.lblBlue3.TabIndex = 5; + this.lblBlue3.Text = "Blue"; + // + // Blue3 + // + this.Blue3.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Blue3.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Blue3.Location = new System.Drawing.Point(96, 104); + this.Blue3.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Blue3.Name = "Blue3"; + this.Blue3.Size = new System.Drawing.Size(56, 29); + this.Blue3.TabIndex = 4; + this.Blue3.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // lblGreen3 + // + this.lblGreen3.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblGreen3.Location = new System.Drawing.Point(8, 66); + this.lblGreen3.Name = "lblGreen3"; + this.lblGreen3.Size = new System.Drawing.Size(80, 24); + this.lblGreen3.TabIndex = 3; + this.lblGreen3.Text = "Green"; + // + // Green3 + // + this.Green3.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Green3.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Green3.Location = new System.Drawing.Point(96, 64); + this.Green3.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Green3.Name = "Green3"; + this.Green3.Size = new System.Drawing.Size(56, 29); + this.Green3.TabIndex = 2; + this.Green3.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // lblRed3 + // + this.lblRed3.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblRed3.Location = new System.Drawing.Point(8, 26); + this.lblRed3.Name = "lblRed3"; + this.lblRed3.Size = new System.Drawing.Size(80, 24); + this.lblRed3.TabIndex = 1; + this.lblRed3.Text = "Red"; + // + // Red3 + // + this.Red3.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Red3.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Red3.Location = new System.Drawing.Point(96, 24); + this.Red3.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Red3.Name = "Red3"; + this.Red3.Size = new System.Drawing.Size(56, 29); + this.Red3.TabIndex = 0; + this.Red3.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // Vertex4 + // + this.Vertex4.Controls.Add(this.GroupBox4); + this.Vertex4.Location = new System.Drawing.Point(4, 24); + this.Vertex4.Name = "Vertex4"; + this.Vertex4.Size = new System.Drawing.Size(248, 156); + this.Vertex4.TabIndex = 3; + this.Vertex4.Text = "Vertex 4"; + this.Vertex4.Visible = false; + // + // GroupBox4 + // + this.GroupBox4.Controls.Add(this.lblBlue4); + this.GroupBox4.Controls.Add(this.Blue4); + this.GroupBox4.Controls.Add(this.lblGreen4); + this.GroupBox4.Controls.Add(this.Green4); + this.GroupBox4.Controls.Add(this.lblRed4); + this.GroupBox4.Controls.Add(this.Red4); + this.GroupBox4.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.GroupBox4.Location = new System.Drawing.Point(32, 8); + this.GroupBox4.Name = "GroupBox4"; + this.GroupBox4.Size = new System.Drawing.Size(184, 144); + this.GroupBox4.TabIndex = 3; + this.GroupBox4.TabStop = false; + this.GroupBox4.Text = "Color"; + // + // lblBlue4 + // + this.lblBlue4.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblBlue4.Location = new System.Drawing.Point(8, 106); + this.lblBlue4.Name = "lblBlue4"; + this.lblBlue4.Size = new System.Drawing.Size(80, 24); + this.lblBlue4.TabIndex = 5; + this.lblBlue4.Text = "Blue"; + // + // Blue4 + // + this.Blue4.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Blue4.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Blue4.Location = new System.Drawing.Point(96, 104); + this.Blue4.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Blue4.Name = "Blue4"; + this.Blue4.Size = new System.Drawing.Size(56, 29); + this.Blue4.TabIndex = 4; + this.Blue4.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // lblGreen4 + // + this.lblGreen4.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblGreen4.Location = new System.Drawing.Point(8, 66); + this.lblGreen4.Name = "lblGreen4"; + this.lblGreen4.Size = new System.Drawing.Size(80, 24); + this.lblGreen4.TabIndex = 3; + this.lblGreen4.Text = "Green"; + // + // Green4 + // + this.Green4.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Green4.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Green4.Location = new System.Drawing.Point(96, 64); + this.Green4.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Green4.Name = "Green4"; + this.Green4.Size = new System.Drawing.Size(56, 29); + this.Green4.TabIndex = 2; + this.Green4.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // lblRed4 + // + this.lblRed4.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblRed4.Location = new System.Drawing.Point(8, 26); + this.lblRed4.Name = "lblRed4"; + this.lblRed4.Size = new System.Drawing.Size(80, 24); + this.lblRed4.TabIndex = 1; + this.lblRed4.Text = "Red"; + // + // Red4 + // + this.Red4.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Red4.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Red4.Location = new System.Drawing.Point(96, 24); + this.Red4.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Red4.Name = "Red4"; + this.Red4.Size = new System.Drawing.Size(56, 29); + this.Red4.TabIndex = 0; + this.Red4.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // LightControl + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(256, 182); + this.Controls.Add(this.TabControl1); + this.Name = "LightControl"; + this.Text = "LC"; + this.Closing += new System.ComponentModel.CancelEventHandler(this.LightControl_Closing); + this.TabControl1.ResumeLayout(false); + this.Vertex1.ResumeLayout(false); + this.GroupBox1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.Blue1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red1)).EndInit(); + this.Vertex2.ResumeLayout(false); + this.GroupBox2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.Blue2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red2)).EndInit(); + this.Vertex3.ResumeLayout(false); + this.GroupBox3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.Blue3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red3)).EndInit(); + this.Vertex4.ResumeLayout(false); + this.GroupBox4.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.Blue4)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green4)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red4)).EndInit(); + this.ResumeLayout(false); + + } + #endregion + + //Dispose of any used resources + public void DisposeD3D() { + DisposeVertices(); + for (int i = 0; i < numTextures; i++) + if (textures[i] != null) { + textures[i].Dispose(); + textures[i] = null; + } + if (device != null) { + device.Dispose(); + device = null; + } + } + + public void DisposeVertices() { + if (vertBuffer != null) { + vertBuffer.Dispose(); + vertBuffer = null; + } + } + + public bool InitD3D(IntPtr winHandle) { + DisplayMode dispMode = + Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode; + PresentParameters presentParams = new PresentParameters(); + //Define the presentation parameters + presentParams.Windowed = true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.BackBufferFormat = dispMode.Format; + try { + device = new Device(Manager.Adapters.Default.Adapter, + DeviceType.Hardware, winHandle, + CreateFlags.SoftwareVertexProcessing,presentParams); + device.VertexFormat = customVertex; + return true; + } + catch { + return false; + } + } + + + public bool CreateTextures() { + try { + for (int i = 1; i <= numTextures; i++) + textures[i-1] = TextureLoader.FromFile(device, Application.StartupPath + @"\..\..\Images\Walk" + i.ToString() + ".bmp"); + return CreateVertices(); + } + catch { + return false; + } + } + + public bool CreateVertices() { + CustomVertex[] verts; + + try { + //If the vertex buffer was previously created, dispose them + DisposeVertices(); + + vertBuffer = new VertexBuffer(typeof(CustomVertex), numVerts, device, Usage.WriteOnly, customVertex, Pool.Default); + verts = vertBuffer.Lock(0, 0) as CustomVertex[]; + SquareVertices(verts); + vertBuffer.Unlock(); + return true; + } + catch { + return false; + } + } + + private void SquareVertices(CustomVertex[] vertices) { + // Create a square, composed of 2 triangles + vertices[0] = CreateFlexVertex(60, 60, 0, 1, Color.FromArgb((int)Red1.Value, (int)Green1.Value, (int)Blue1.Value), 0, 0); + vertices[1] = CreateFlexVertex(240, 60, 0, 1, Color.FromArgb((int)Red2.Value, (int)Green2.Value, (int)Blue2.Value), 1, 0); + vertices[2] = CreateFlexVertex(60, 240, 0, 1, Color.FromArgb((int)Red3.Value, (int)Green3.Value, (int)Blue3.Value), 0, 1); + vertices[3] = CreateFlexVertex(240, 240, 0, 1, Color.FromArgb((int)Red4.Value, (int)Green4.Value, (int)Blue4.Value), 1, 1); + } + + + + private CustomVertex CreateFlexVertex(float X, float Y, float Z, float rhw, Color color, float tu, float tv) { + CustomVertex custVertex = new CustomVertex(); + custVertex.X = X; + custVertex.Y = Y; + custVertex.Z = Z; + custVertex.rhw = rhw; + custVertex.color = color.ToArgb(); + custVertex.tu = tu; + custVertex.tv = tv; + return custVertex; + } + + public void Render() { + if(device == null) return; + + device.Clear(ClearFlags.Target, Color.FromArgb(0, 0, 255).ToArgb(), 1.0F, 0); + device.BeginScene(); + // Show one texture a time, in order to create the illusion of a walking guy + device.SetTexture(0, textures[x]); + x = (x == 9) ? 0 : x+1; //If x is 9, set to 0, otherwise increment x + device.SetStreamSource(0, vertBuffer, 0); + device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, numVerts - 2); + device.EndScene(); + try { + device.Present(); + } + catch { + } + } + + private void LightControl_Closing(object sender, System.ComponentModel.CancelEventArgs e) { + DisposeD3D(); + endTest = true; + + } + + private void Color_TextChanged(object sender, System.EventArgs e) { + CreateVertices(); + } + + } +} + diff --git a/03-EnterDirectX/LightControl.resx b/03-EnterDirectX/LightControl.resx new file mode 100644 index 0000000..dcb6cec --- /dev/null +++ b/03-EnterDirectX/LightControl.resx @@ -0,0 +1,508 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + False + + + True + + + Assembly + + + Private + + + 8, 8 + + + False + + + True + + + True + + + Private + + + Assembly + + + 8, 8 + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + True + + + True + + + Private + + + Assembly + + + 8, 8 + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + True + + + True + + + Private + + + Assembly + + + 8, 8 + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + True + + + True + + + Private + + + Assembly + + + 8, 8 + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + Private + + + False + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + (Default) + + + False + + + False + + + LightControl + + + 8, 8 + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/03-EnterDirectX/LightControlOld.cs b/03-EnterDirectX/LightControlOld.cs new file mode 100644 index 0000000..26ee9dd --- /dev/null +++ b/03-EnterDirectX/LightControlOld.cs @@ -0,0 +1,641 @@ +Imports Microsoft.DirectX +Imports Microsoft.DirectX.Direct3D + +Public Class LightControl + Inherits System.Windows.Forms.Form +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Friend WithEvents TabControl1 As System.Windows.Forms.TabControl + Friend WithEvents Vertex1 As System.Windows.Forms.TabPage + Friend WithEvents Vertex2 As System.Windows.Forms.TabPage + Friend WithEvents Vertex3 As System.Windows.Forms.TabPage + Friend WithEvents Vertex4 As System.Windows.Forms.TabPage + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents lblBlue1 As System.Windows.Forms.Label + Friend WithEvents lblGreen1 As System.Windows.Forms.Label + Friend WithEvents lblRed1 As System.Windows.Forms.Label + Friend WithEvents GroupBox2 As System.Windows.Forms.GroupBox + Friend WithEvents GroupBox3 As System.Windows.Forms.GroupBox + Friend WithEvents GroupBox4 As System.Windows.Forms.GroupBox + Friend WithEvents Red1 As System.Windows.Forms.NumericUpDown + Friend WithEvents Green2 As System.Windows.Forms.NumericUpDown + Friend WithEvents Red2 As System.Windows.Forms.NumericUpDown + Friend WithEvents Blue1 As System.Windows.Forms.NumericUpDown + Friend WithEvents Green1 As System.Windows.Forms.NumericUpDown + Friend WithEvents lblBlue2 As System.Windows.Forms.Label + Friend WithEvents BLue2 As System.Windows.Forms.NumericUpDown + Friend WithEvents lblGreen2 As System.Windows.Forms.Label + Friend WithEvents LblRed2 As System.Windows.Forms.Label + Friend WithEvents lblBlue3 As System.Windows.Forms.Label + Friend WithEvents Blue3 As System.Windows.Forms.NumericUpDown + Friend WithEvents lblGreen3 As System.Windows.Forms.Label + Friend WithEvents Green3 As System.Windows.Forms.NumericUpDown + Friend WithEvents lblRed3 As System.Windows.Forms.Label + Friend WithEvents Red3 As System.Windows.Forms.NumericUpDown + Friend WithEvents lblBlue4 As System.Windows.Forms.Label + Friend WithEvents Blue4 As System.Windows.Forms.NumericUpDown + Friend WithEvents lblGreen4 As System.Windows.Forms.Label + Friend WithEvents lblRed4 As System.Windows.Forms.Label + Friend WithEvents Green4 As System.Windows.Forms.NumericUpDown + Friend WithEvents Red4 As System.Windows.Forms.NumericUpDown + Private Sub InitializeComponent() + Me.TabControl1 = New System.Windows.Forms.TabControl + Me.Vertex1 = New System.Windows.Forms.TabPage + Me.GroupBox1 = New System.Windows.Forms.GroupBox + Me.lblBlue1 = New System.Windows.Forms.Label + Me.Blue1 = New System.Windows.Forms.NumericUpDown + Me.lblGreen1 = New System.Windows.Forms.Label + Me.Green1 = New System.Windows.Forms.NumericUpDown + Me.lblRed1 = New System.Windows.Forms.Label + Me.Red1 = New System.Windows.Forms.NumericUpDown + Me.Vertex2 = New System.Windows.Forms.TabPage + Me.GroupBox2 = New System.Windows.Forms.GroupBox + Me.lblBlue2 = New System.Windows.Forms.Label + Me.BLue2 = New System.Windows.Forms.NumericUpDown + Me.lblGreen2 = New System.Windows.Forms.Label + Me.Green2 = New System.Windows.Forms.NumericUpDown + Me.LblRed2 = New System.Windows.Forms.Label + Me.Red2 = New System.Windows.Forms.NumericUpDown + Me.Vertex3 = New System.Windows.Forms.TabPage + Me.GroupBox3 = New System.Windows.Forms.GroupBox + Me.lblBlue3 = New System.Windows.Forms.Label + Me.Blue3 = New System.Windows.Forms.NumericUpDown + Me.lblGreen3 = New System.Windows.Forms.Label + Me.Green3 = New System.Windows.Forms.NumericUpDown + Me.lblRed3 = New System.Windows.Forms.Label + Me.Red3 = New System.Windows.Forms.NumericUpDown + Me.Vertex4 = New System.Windows.Forms.TabPage + Me.GroupBox4 = New System.Windows.Forms.GroupBox + Me.lblBlue4 = New System.Windows.Forms.Label + Me.Blue4 = New System.Windows.Forms.NumericUpDown + Me.lblGreen4 = New System.Windows.Forms.Label + Me.Green4 = New System.Windows.Forms.NumericUpDown + Me.lblRed4 = New System.Windows.Forms.Label + Me.Red4 = New System.Windows.Forms.NumericUpDown + Me.TabControl1.SuspendLayout() + Me.Vertex1.SuspendLayout() + Me.GroupBox1.SuspendLayout() + CType(Me.Blue1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Green1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Red1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.Vertex2.SuspendLayout() + Me.GroupBox2.SuspendLayout() + CType(Me.BLue2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Green2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Red2, System.ComponentModel.ISupportInitialize).BeginInit() + Me.Vertex3.SuspendLayout() + Me.GroupBox3.SuspendLayout() + CType(Me.Blue3, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Green3, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Red3, System.ComponentModel.ISupportInitialize).BeginInit() + Me.Vertex4.SuspendLayout() + Me.GroupBox4.SuspendLayout() + CType(Me.Blue4, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Green4, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.Red4, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'TabControl1 + ' + Me.TabControl1.Controls.AddRange(New System.Windows.Forms.Control() {Me.Vertex1, Me.Vertex2, Me.Vertex3, Me.Vertex4}) + Me.TabControl1.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.TabControl1.Location = New System.Drawing.Point(8, 8) + Me.TabControl1.Name = "TabControl1" + Me.TabControl1.SelectedIndex = 0 + Me.TabControl1.Size = New System.Drawing.Size(264, 192) + Me.TabControl1.TabIndex = 8 + ' + 'Vertex1 + ' + Me.Vertex1.Controls.AddRange(New System.Windows.Forms.Control() {Me.GroupBox1}) + Me.Vertex1.Location = New System.Drawing.Point(4, 24) + Me.Vertex1.Name = "Vertex1" + Me.Vertex1.Size = New System.Drawing.Size(256, 164) + Me.Vertex1.TabIndex = 0 + Me.Vertex1.Text = "Vertex 1" + ' + 'GroupBox1 + ' + Me.GroupBox1.Controls.AddRange(New System.Windows.Forms.Control() {Me.lblBlue1, Me.Blue1, Me.lblGreen1, Me.Green1, Me.lblRed1, Me.Red1}) + Me.GroupBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox1.Location = New System.Drawing.Point(32, 8) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(184, 144) + Me.GroupBox1.TabIndex = 2 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Color" + ' + 'lblBlue1 + ' + Me.lblBlue1.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblBlue1.Location = New System.Drawing.Point(8, 106) + Me.lblBlue1.Name = "lblBlue1" + Me.lblBlue1.Size = New System.Drawing.Size(80, 24) + Me.lblBlue1.TabIndex = 5 + Me.lblBlue1.Text = "Blue" + ' + 'Blue1 + ' + Me.Blue1.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Blue1.Increment = New Decimal(New Integer() {5, 0, 0, 0}) + Me.Blue1.Location = New System.Drawing.Point(96, 104) + Me.Blue1.Maximum = New Decimal(New Integer() {255, 0, 0, 0}) + Me.Blue1.Name = "Blue1" + Me.Blue1.Size = New System.Drawing.Size(56, 29) + Me.Blue1.TabIndex = 4 + ' + 'lblGreen1 + ' + Me.lblGreen1.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGreen1.Location = New System.Drawing.Point(8, 66) + Me.lblGreen1.Name = "lblGreen1" + Me.lblGreen1.Size = New System.Drawing.Size(80, 24) + Me.lblGreen1.TabIndex = 3 + Me.lblGreen1.Text = "Green" + ' + 'Green1 + ' + Me.Green1.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Green1.Increment = New Decimal(New Integer() {5, 0, 0, 0}) + Me.Green1.Location = New System.Drawing.Point(96, 64) + Me.Green1.Maximum = New Decimal(New Integer() {255, 0, 0, 0}) + Me.Green1.Name = "Green1" + Me.Green1.Size = New System.Drawing.Size(56, 29) + Me.Green1.TabIndex = 2 + ' + 'lblRed1 + ' + Me.lblRed1.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblRed1.Location = New System.Drawing.Point(8, 26) + Me.lblRed1.Name = "lblRed1" + Me.lblRed1.Size = New System.Drawing.Size(80, 24) + Me.lblRed1.TabIndex = 1 + Me.lblRed1.Text = "Red" + ' + 'Red1 + ' + Me.Red1.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Red1.Increment = New Decimal(New Integer() {5, 0, 0, 0}) + Me.Red1.Location = New System.Drawing.Point(96, 24) + Me.Red1.Maximum = New Decimal(New Integer() {255, 0, 0, 0}) + Me.Red1.Name = "Red1" + Me.Red1.Size = New System.Drawing.Size(56, 29) + Me.Red1.TabIndex = 0 + ' + 'Vertex2 + ' + Me.Vertex2.Controls.AddRange(New System.Windows.Forms.Control() {Me.GroupBox2}) + Me.Vertex2.Location = New System.Drawing.Point(4, 24) + Me.Vertex2.Name = "Vertex2" + Me.Vertex2.Size = New System.Drawing.Size(256, 164) + Me.Vertex2.TabIndex = 1 + Me.Vertex2.Text = "Vertex2" + ' + 'GroupBox2 + ' + Me.GroupBox2.Controls.AddRange(New System.Windows.Forms.Control() {Me.lblBlue2, Me.BLue2, Me.lblGreen2, Me.Green2, Me.LblRed2, Me.Red2}) + Me.GroupBox2.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox2.Location = New System.Drawing.Point(32, 8) + Me.GroupBox2.Name = "GroupBox2" + Me.GroupBox2.Size = New System.Drawing.Size(184, 144) + Me.GroupBox2.TabIndex = 3 + Me.GroupBox2.TabStop = False + Me.GroupBox2.Text = "Color" + ' + 'lblBlue2 + ' + Me.lblBlue2.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblBlue2.Location = New System.Drawing.Point(8, 106) + Me.lblBlue2.Name = "lblBlue2" + Me.lblBlue2.Size = New System.Drawing.Size(80, 24) + Me.lblBlue2.TabIndex = 5 + Me.lblBlue2.Text = "Blue" + ' + 'BLue2 + ' + Me.BLue2.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.BLue2.Increment = New Decimal(New Integer() {5, 0, 0, 0}) + Me.BLue2.Location = New System.Drawing.Point(96, 104) + Me.BLue2.Maximum = New Decimal(New Integer() {255, 0, 0, 0}) + Me.BLue2.Name = "BLue2" + Me.BLue2.Size = New System.Drawing.Size(56, 29) + Me.BLue2.TabIndex = 4 + ' + 'lblGreen2 + ' + Me.lblGreen2.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGreen2.Location = New System.Drawing.Point(8, 66) + Me.lblGreen2.Name = "lblGreen2" + Me.lblGreen2.Size = New System.Drawing.Size(80, 24) + Me.lblGreen2.TabIndex = 3 + Me.lblGreen2.Text = "Green" + ' + 'Green2 + ' + Me.Green2.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Green2.Increment = New Decimal(New Integer() {5, 0, 0, 0}) + Me.Green2.Location = New System.Drawing.Point(96, 64) + Me.Green2.Maximum = New Decimal(New Integer() {255, 0, 0, 0}) + Me.Green2.Name = "Green2" + Me.Green2.Size = New System.Drawing.Size(56, 29) + Me.Green2.TabIndex = 2 + ' + 'LblRed2 + ' + Me.LblRed2.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.LblRed2.Location = New System.Drawing.Point(8, 26) + Me.LblRed2.Name = "LblRed2" + Me.LblRed2.Size = New System.Drawing.Size(80, 24) + Me.LblRed2.TabIndex = 1 + Me.LblRed2.Text = "Red" + ' + 'Red2 + ' + Me.Red2.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Red2.Increment = New Decimal(New Integer() {5, 0, 0, 0}) + Me.Red2.Location = New System.Drawing.Point(96, 24) + Me.Red2.Maximum = New Decimal(New Integer() {255, 0, 0, 0}) + Me.Red2.Name = "Red2" + Me.Red2.Size = New System.Drawing.Size(56, 29) + Me.Red2.TabIndex = 0 + ' + 'Vertex3 + ' + Me.Vertex3.Controls.AddRange(New System.Windows.Forms.Control() {Me.GroupBox3}) + Me.Vertex3.Location = New System.Drawing.Point(4, 24) + Me.Vertex3.Name = "Vertex3" + Me.Vertex3.Size = New System.Drawing.Size(256, 164) + Me.Vertex3.TabIndex = 2 + Me.Vertex3.Text = "Vertex 3" + ' + 'GroupBox3 + ' + Me.GroupBox3.Controls.AddRange(New System.Windows.Forms.Control() {Me.lblBlue3, Me.Blue3, Me.lblGreen3, Me.Green3, Me.lblRed3, Me.Red3}) + Me.GroupBox3.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox3.Location = New System.Drawing.Point(32, 8) + Me.GroupBox3.Name = "GroupBox3" + Me.GroupBox3.Size = New System.Drawing.Size(184, 144) + Me.GroupBox3.TabIndex = 3 + Me.GroupBox3.TabStop = False + Me.GroupBox3.Text = "Color" + ' + 'lblBlue3 + ' + Me.lblBlue3.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblBlue3.Location = New System.Drawing.Point(8, 106) + Me.lblBlue3.Name = "lblBlue3" + Me.lblBlue3.Size = New System.Drawing.Size(80, 24) + Me.lblBlue3.TabIndex = 5 + Me.lblBlue3.Text = "Blue" + ' + 'Blue3 + ' + Me.Blue3.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Blue3.Increment = New Decimal(New Integer() {5, 0, 0, 0}) + Me.Blue3.Location = New System.Drawing.Point(96, 104) + Me.Blue3.Maximum = New Decimal(New Integer() {255, 0, 0, 0}) + Me.Blue3.Name = "Blue3" + Me.Blue3.Size = New System.Drawing.Size(56, 29) + Me.Blue3.TabIndex = 4 + ' + 'lblGreen3 + ' + Me.lblGreen3.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGreen3.Location = New System.Drawing.Point(8, 66) + Me.lblGreen3.Name = "lblGreen3" + Me.lblGreen3.Size = New System.Drawing.Size(80, 24) + Me.lblGreen3.TabIndex = 3 + Me.lblGreen3.Text = "Green" + ' + 'Green3 + ' + Me.Green3.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Green3.Increment = New Decimal(New Integer() {5, 0, 0, 0}) + Me.Green3.Location = New System.Drawing.Point(96, 64) + Me.Green3.Maximum = New Decimal(New Integer() {255, 0, 0, 0}) + Me.Green3.Name = "Green3" + Me.Green3.Size = New System.Drawing.Size(56, 29) + Me.Green3.TabIndex = 2 + ' + 'lblRed3 + ' + Me.lblRed3.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblRed3.Location = New System.Drawing.Point(8, 26) + Me.lblRed3.Name = "lblRed3" + Me.lblRed3.Size = New System.Drawing.Size(80, 24) + Me.lblRed3.TabIndex = 1 + Me.lblRed3.Text = "Red" + ' + 'Red3 + ' + Me.Red3.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Red3.Increment = New Decimal(New Integer() {5, 0, 0, 0}) + Me.Red3.Location = New System.Drawing.Point(96, 24) + Me.Red3.Maximum = New Decimal(New Integer() {255, 0, 0, 0}) + Me.Red3.Name = "Red3" + Me.Red3.Size = New System.Drawing.Size(56, 29) + Me.Red3.TabIndex = 0 + ' + 'Vertex4 + ' + Me.Vertex4.Controls.AddRange(New System.Windows.Forms.Control() {Me.GroupBox4}) + Me.Vertex4.Location = New System.Drawing.Point(4, 24) + Me.Vertex4.Name = "Vertex4" + Me.Vertex4.Size = New System.Drawing.Size(256, 164) + Me.Vertex4.TabIndex = 3 + Me.Vertex4.Text = "Vertex 4" + ' + 'GroupBox4 + ' + Me.GroupBox4.Controls.AddRange(New System.Windows.Forms.Control() {Me.lblBlue4, Me.Blue4, Me.lblGreen4, Me.Green4, Me.lblRed4, Me.Red4}) + Me.GroupBox4.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.GroupBox4.Location = New System.Drawing.Point(32, 8) + Me.GroupBox4.Name = "GroupBox4" + Me.GroupBox4.Size = New System.Drawing.Size(184, 144) + Me.GroupBox4.TabIndex = 3 + Me.GroupBox4.TabStop = False + Me.GroupBox4.Text = "Color" + ' + 'lblBlue4 + ' + Me.lblBlue4.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblBlue4.Location = New System.Drawing.Point(8, 106) + Me.lblBlue4.Name = "lblBlue4" + Me.lblBlue4.Size = New System.Drawing.Size(80, 24) + Me.lblBlue4.TabIndex = 5 + Me.lblBlue4.Text = "Blue" + ' + 'Blue4 + ' + Me.Blue4.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Blue4.Increment = New Decimal(New Integer() {5, 0, 0, 0}) + Me.Blue4.Location = New System.Drawing.Point(96, 104) + Me.Blue4.Maximum = New Decimal(New Integer() {255, 0, 0, 0}) + Me.Blue4.Name = "Blue4" + Me.Blue4.Size = New System.Drawing.Size(56, 29) + Me.Blue4.TabIndex = 4 + ' + 'lblGreen4 + ' + Me.lblGreen4.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblGreen4.Location = New System.Drawing.Point(8, 66) + Me.lblGreen4.Name = "lblGreen4" + Me.lblGreen4.Size = New System.Drawing.Size(80, 24) + Me.lblGreen4.TabIndex = 3 + Me.lblGreen4.Text = "Green" + ' + 'Green4 + ' + Me.Green4.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Green4.Increment = New Decimal(New Integer() {5, 0, 0, 0}) + Me.Green4.Location = New System.Drawing.Point(96, 64) + Me.Green4.Maximum = New Decimal(New Integer() {255, 0, 0, 0}) + Me.Green4.Name = "Green4" + Me.Green4.Size = New System.Drawing.Size(56, 29) + Me.Green4.TabIndex = 2 + ' + 'lblRed4 + ' + Me.lblRed4.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblRed4.Location = New System.Drawing.Point(8, 26) + Me.lblRed4.Name = "lblRed4" + Me.lblRed4.Size = New System.Drawing.Size(80, 24) + Me.lblRed4.TabIndex = 1 + Me.lblRed4.Text = "Red" + ' + 'Red4 + ' + Me.Red4.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Red4.Increment = New Decimal(New Integer() {5, 0, 0, 0}) + Me.Red4.Location = New System.Drawing.Point(96, 24) + Me.Red4.Maximum = New Decimal(New Integer() {255, 0, 0, 0}) + Me.Red4.Name = "Red4" + Me.Red4.Size = New System.Drawing.Size(56, 29) + Me.Red4.TabIndex = 0 + ' + 'LightControl + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) + Me.ClientSize = New System.Drawing.Size(282, 206) + Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.TabControl1}) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle + Me.KeyPreview = True + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "LightControl" + Me.Text = "Light Control" + Me.TabControl1.ResumeLayout(False) + Me.Vertex1.ResumeLayout(False) + Me.GroupBox1.ResumeLayout(False) + CType(Me.Blue1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Green1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Red1, System.ComponentModel.ISupportInitialize).EndInit() + Me.Vertex2.ResumeLayout(False) + Me.GroupBox2.ResumeLayout(False) + CType(Me.BLue2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Green2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Red2, System.ComponentModel.ISupportInitialize).EndInit() + Me.Vertex3.ResumeLayout(False) + Me.GroupBox3.ResumeLayout(False) + CType(Me.Blue3, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Green3, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Red3, System.ComponentModel.ISupportInitialize).EndInit() + Me.Vertex4.ResumeLayout(False) + Me.GroupBox4.ResumeLayout(False) + CType(Me.Blue4, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Green4, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.Red4, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + +#End Region + Public EndTest As Boolean = False + Dim objDirect3DDevice As Device = Nothing + Dim vertBuffer As VertexBuffer = Nothing + Dim Textures(10) As Texture + + ' Flexible Vertex format for light test + Public Const fvf_CUSTOMVERTEX As VertexFormats = VertexFormats.Transformed Or VertexFormats.Diffuse Or VertexFormats.Texture1 + + Dim NUM_VERTS = 4 + + Private Structure CUSTOMVERTEX + Public X As Single + Public Y As Single + Public Z As Single + Public rhw As Single + Public color As Integer + Public tu As Single + Public tv As Single + End Structure + + 'Dispose of any used resources + Public Sub DisposeD3D() + On Error Resume Next ' We are leaving, ignore any errors + Dim i As Integer + disposeVertices() + For i = 0 To 9 + If Not (Textures(i) Is Nothing) Then Textures(i).Dispose() + Textures(i) = Nothing + Next + + If Not (objDirect3DDevice Is Nothing) Then objDirect3DDevice.Dispose() + objDirect3DDevice = Nothing + End Sub + + Public Sub disposeVertices() + If Not (vertBuffer Is Nothing) Then vertBuffer.Dispose() + vertBuffer = Nothing + End Sub + + + Public Function InitD3D(ByVal WinHandle As IntPtr) As Boolean + Dim DispMode As DisplayMode + Dim objDirect3Dpp As PresentParameters + + DispMode = Manager.Adapters(Manager.Adapters.Default.Adapter).CurrentDisplayMode + ' Define the presentation parameters + objDirect3Dpp = New PresentParameters + objDirect3Dpp.Windowed = True + objDirect3Dpp.SwapEffect = SwapEffect.Discard + objDirect3Dpp.BackBufferFormat = DispMode.Format + ' Try to create the device + Try + objDirect3DDevice = New Device(Manager.Adapters.Default.Adapter, _ + DeviceType.Hardware, WinHandle, CreateFlags.SoftwareVertexProcessing, _ + objDirect3Dpp) + ' Define which type of vertex will be used + objDirect3DDevice.VertexFormat = fvf_CUSTOMVERTEX + InitD3D = True + Catch + InitD3D = False + End Try + ' Dispose the used objects + DispMode = Nothing + objDirect3Dpp = Nothing + End Function + + Public Function CreateTextures() As Boolean + Dim verts As CustomVertex() + Dim i As Integer + + Try + For i = 1 To 10 + Textures(i - 1) = TextureLoader.FromFile(objDirect3DDevice, Application.StartupPath + "\Walk" & CStr(i) & ".bmp") + Next + If Not CreateVertices() Then + Return False + Else + Return True + End If + Catch + Return False + End Try + + End Function + + Public Function CreateVertices() As Boolean + Dim verts As CustomVertex() + Try + ' If the vertex buffer was previously created, dispose them + disposeVertices() + + vertBuffer = New VertexBuffer(GetType(CustomVertex), NUM_VERTS, objDirect3DDevice, Usage.WriteOnly, fvf_CUSTOMVERTEX, Pool.Default) + verts = vertBuffer.Lock(0, 0) + SquareVertices(verts) + vertBuffer.Unlock() + Return True + Catch + Return False + End Try + End Function + + Private Sub SquareVertices(ByVal vertices As CUSTOMVERTEX()) + ' Create a square, composed of 2 triangles + vertices(0) = CreateFlexVertex(60, 60, 0, 1, Color.FromArgb(Red1.Value, Green1.Value, Blue1.Value), 0, 0) + vertices(1) = CreateFlexVertex(240, 60, 0, 1, Color.FromArgb(Red2.Value, Green2.Value, BLue2.Value), 1, 0) + vertices(2) = CreateFlexVertex(60, 240, 0, 1, Color.FromArgb(Red3.Value, Green3.Value, Blue3.Value), 0, 1) + vertices(3) = CreateFlexVertex(240, 240, 0, 1, Color.FromArgb(Red4.Value, Green4.Value, Blue4.Value), 1, 1) + End Sub + + + Private Function CreateFlexVertex(ByRef X As Single, ByRef Y As Single, ByRef Z As Single, ByRef rhw As Single, ByRef Color As Color, ByRef tu As Single, ByRef tv As Single) As CUSTOMVERTEX + CreateFlexVertex.X = X + CreateFlexVertex.Y = Y + CreateFlexVertex.Z = Z + CreateFlexVertex.rhw = rhw + CreateFlexVertex.color = Color.ToArgb + CreateFlexVertex.tu = tu + CreateFlexVertex.tv = tv + End Function + + + Public Sub Render() + Static x As Integer = 0 + + If (objDirect3DDevice Is Nothing) Then Return + + objDirect3DDevice.Clear(ClearFlags.Target, Color.FromArgb(0, 0, 255).ToArgb, 1.0F, 0) + objDirect3DDevice.BeginScene() + ' Show one texture a time, in order to create the illusion of a walking guy + objDirect3DDevice.SetTexture(0, Textures(x)) + x += 1 + If x = 10 Then x = 0 + + objDirect3DDevice.SetStreamSource(0, vertBuffer, 0) + objDirect3DDevice.DrawPrimitives(PrimitiveType.TriangleStrip, 0, NUM_VERTS - 2) + objDirect3DDevice.EndScene() + + Try + objDirect3DDevice.Present() + Catch + End Try + End Sub + + + Private Sub MatrixControl_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown + If e.KeyCode = Keys.Escape Then + EndTest = True + End If + End Sub + + + Private Sub LightControl_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing + DisposeD3D() + EndTest = True + End Sub + + Private Sub Color_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Red1.TextChanged, Red2.TextChanged, Red3.TextChanged, Red4.TextChanged, Blue1.TextChanged, BLue2.TextChanged, Blue3.TextChanged, Blue4.TextChanged, Green1.TextChanged, Green2.TextChanged, Green3.TextChanged, Green4.TextChanged + CreateVertices() + End Sub +End Class + + + diff --git a/03-EnterDirectX/LightTest.cs b/03-EnterDirectX/LightTest.cs new file mode 100644 index 0000000..28af236 --- /dev/null +++ b/03-EnterDirectX/LightTest.cs @@ -0,0 +1,73 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + +namespace EnterDirectX { + + public class LightTest: + System.Windows.Forms.Form { + #region " Windows Form Designer generated code " + + public LightTest() : base() { + + //This call is required by the Windows Form Designer. + InitializeComponent(); + + //Add any initialization after the InitializeComponent() call + + } + + //Form overrides dispose to clean up the component list. + protected override void Dispose(bool disposing) { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + //Required by the Windows Form Designer + private System.ComponentModel.IContainer components; + + //NOTE: The following procedure is required by the Windows Form Designer + //It can be modified using the Windows Form Designer. + //Do not modify it using the code editor. + [System.Diagnostics.DebuggerStepThrough] + private void InitializeComponent() { + // + // LightTest + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(385, 350); + this.ControlBox = false; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.KeyPreview = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "LightTest"; + this.ShowInTaskbar = false; + this.Text = "Light Test Window"; + this.TopMost = true; + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.LightTestWindow_KeyDown); + + } + + #endregion + private bool endTest = false; + + public bool EndTest { + get { return endTest; } + } + + private void LightTestWindow_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { + if (e.KeyCode==Keys.Escape) { + endTest = true; + } + } + + } + +} \ No newline at end of file diff --git a/03-EnterDirectX/LightTest.resx b/03-EnterDirectX/LightTest.resx new file mode 100644 index 0000000..1812ed7 --- /dev/null +++ b/03-EnterDirectX/LightTest.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + LightTest + + + True + + + Private + + \ No newline at end of file diff --git a/03-EnterDirectX/MatrixControl.cs b/03-EnterDirectX/MatrixControl.cs new file mode 100644 index 0000000..97d5f51 --- /dev/null +++ b/03-EnterDirectX/MatrixControl.cs @@ -0,0 +1,615 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace EnterDirectX { + /// + /// Summary description for MatrixControl. + /// + public class MatrixControl : System.Windows.Forms.Form { + #region Form Components + + internal System.Windows.Forms.Label lblRotZ; + internal System.Windows.Forms.Label lblRotY; + internal System.Windows.Forms.Label LblRotX; + internal System.Windows.Forms.CheckBox chkAuto; + internal System.Windows.Forms.GroupBox grpTranslation; + internal System.Windows.Forms.Label lblTranY; + internal System.Windows.Forms.Label lblTranZ; + internal System.Windows.Forms.Label lblTranX; + internal System.Windows.Forms.Label lblScaX; + internal System.Windows.Forms.Label lblScaY; + internal System.Windows.Forms.Label lblScaZ; + #endregion + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + private bool endTest = false; + + public bool EndTest { + get { return endTest; } + } + + private Device device = null; + private static int x = 0; + + private VertexBuffer vertBuffer = null; + private Texture[] textures = new Texture[10]; + internal System.Windows.Forms.TrackBar RotationX; + internal System.Windows.Forms.TrackBar RotationY; + internal System.Windows.Forms.TrackBar RotationZ; + internal System.Windows.Forms.TrackBar TranslationX; + internal System.Windows.Forms.TrackBar TranslationY; + internal System.Windows.Forms.TrackBar TranslationZ; + internal System.Windows.Forms.TrackBar ScaleX; + internal System.Windows.Forms.TrackBar ScaleY; + internal System.Windows.Forms.TrackBar ScaleZ; + private System.Windows.Forms.GroupBox grpRotation; + private System.Windows.Forms.GroupBox grpScale; + + // Simple textured vertices constant and structure + private const VertexFormats customVertex = VertexFormats.Position | VertexFormats.Texture1; + private int numVerts = 36; + + public MatrixControl() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // + // TODO: Add any constructor code after InitializeComponent call + // + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + public void DisposeD3D() { + for(int i = 0; i < 10; i++) { + if(textures[i] != null) { + textures[i].Dispose(); + textures[i] = null; + } + } + + if(vertBuffer != null) { + vertBuffer.Dispose(); + vertBuffer = null; + } + + if(device != null) { + device.Dispose(); + device = null; + } + } + + public bool InitD3D(IntPtr winHandle) { + DisplayMode DispMode = + Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode; + PresentParameters presentParams = new PresentParameters(); + // Define the presentation parameters + presentParams.Windowed = true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.BackBufferFormat = DispMode.Format; + presentParams.EnableAutoDepthStencil = true; + presentParams.AutoDepthStencilFormat = DepthFormat.D16; + // Try to create the device + try { + device = new Device(Manager.Adapters.Default.Adapter, + DeviceType.Hardware, winHandle, + CreateFlags.SoftwareVertexProcessing, presentParams); + // Turn off culling => front and back of the triangles are visible + device.RenderState.CullMode = Cull.None; + // Turn off D3D lighting + device.RenderState.Lighting = false; + // Turn on ZBuffer + device.RenderState.ZBufferEnable = true; + device.VertexFormat = customVertex; + // Set the Projection Matrix to use a orthogonal view + device.Transform.Projection = Matrix.OrthoLH(300, 200, -200, +200); + return true; + } + catch { + return false; + } + } + + public bool CreateCube() { + try { + string txName; + for(int i=1; i<=10; i++) { + txName = Application.StartupPath+@"\..\..\Images\Walk"+i.ToString()+".bmp"; + textures[i-1] = + TextureLoader.FromFile(device, txName); + } + vertBuffer = new VertexBuffer(typeof(CustomVertex.PositionTextured), numVerts, device, Usage.WriteOnly, CustomVertex.PositionTextured.Format, Pool.Default); + vertBuffer.Created += new EventHandler(this.OnVertexBufferCreate); + OnVertexBufferCreate(vertBuffer, null); + return true; + } + catch { + return false; + } + } + + + private void OnVertexBufferCreate(object sender, EventArgs e) { + VertexBuffer buffer = (VertexBuffer)sender; + CustomVertex.PositionTextured[] verts = new CustomVertex.PositionTextured[numVerts]; + // 1st facet --------------------------------------------------------- + //triangle 1 + verts[0] = new CustomVertex.PositionTextured(0, 0, 0, 0, 0); + verts[1] = new CustomVertex.PositionTextured(90, 0, 0, 1, 0); + verts[2] = new CustomVertex.PositionTextured(0, 90, 0, 0, 1); + + //triangle 2 + verts[3] = new CustomVertex.PositionTextured(0, 90, 0, 0, 1); + verts[4] = new CustomVertex.PositionTextured(90, 0, 0, 1, 0); + verts[5] = new CustomVertex.PositionTextured(90, 90, 0, 1, 1); + + // 2nd facet --------------------------------------------------------- + //triangle 1 + verts[6] = new CustomVertex.PositionTextured(90, 0, 0, 0, 0); + verts[7] = new CustomVertex.PositionTextured(90, 90, 0, 1, 0); + verts[8] = new CustomVertex.PositionTextured(90, 0, 90, 0, 1); + + //triangle 2 + verts[9] = new CustomVertex.PositionTextured(90, 0, 90, 0, 1); + verts[10] = new CustomVertex.PositionTextured(90, 90, 0, 1, 0); + verts[11] = new CustomVertex.PositionTextured(90, 90, 90, 1, 1); + + // 3rd facet --------------------------------------------------------- + //triangle 1 + verts[12] = new CustomVertex.PositionTextured(0, 0, 0, 0, 0); + verts[13] = new CustomVertex.PositionTextured(90, 0, 0, 1, 0); + verts[14] = new CustomVertex.PositionTextured(0, 0, 90, 0, 1); + + //triangle 2 + verts[15] = new CustomVertex.PositionTextured(0, 0, 90, 0, 1); + verts[16] = new CustomVertex.PositionTextured(90, 0, 0, 1, 0); + verts[17] = new CustomVertex.PositionTextured(90, 0, 90, 1, 1); + + + // 4th facet --------------------------------------------------------- + //triangle 1 + verts[18] = new CustomVertex.PositionTextured(0, 0, 0, 0, 0); + verts[19] = new CustomVertex.PositionTextured(0, 90, 0, 1, 0); + verts[20] = new CustomVertex.PositionTextured(0, 0, 90, 0, 1); + + //triangle 2 + verts[21] = new CustomVertex.PositionTextured(0, 0, 90, 0, 1); + verts[22] = new CustomVertex.PositionTextured(0, 90, 0, 1, 0); + verts[23] = new CustomVertex.PositionTextured(0, 90, 90, 1, 1); + + // 5th facet --------------------------------------------------------- + //triangle 1 + verts[24] = new CustomVertex.PositionTextured(0, 0, 90, 0, 0); + verts[25] = new CustomVertex.PositionTextured(90, 0, 90, 1, 0); + verts[26] = new CustomVertex.PositionTextured(0, 90, 90, 0, 1); + + //triangle 2 + verts[27] = new CustomVertex.PositionTextured(0, 90, 90, 0, 1); + verts[28] = new CustomVertex.PositionTextured(90, 0, 90, 1, 0); + verts[29] = new CustomVertex.PositionTextured(90, 90, 90, 1, 1); + + // 6th facet --------------------------------------------------------- + //triangle 1 + verts[30] = new CustomVertex.PositionTextured(0, 90, 0, 0, 0); + verts[31] = new CustomVertex.PositionTextured(90, 90, 0, 1, 0); + verts[32] = new CustomVertex.PositionTextured(0, 90, 90, 0, 1); + + //triangle 2 + verts[33] = new CustomVertex.PositionTextured(0, 90, 90, 0, 1); + verts[34] = new CustomVertex.PositionTextured(90, 90, 0, 1, 0); + verts[35] = new CustomVertex.PositionTextured(90, 90, 90, 1, 1); + + buffer.SetData(verts, 0, LockFlags.None); + } + + public void Render() { + int Tick; + if ((device==null)) return; + + // Move the cube automatically + if (chkAuto.Checked) { + Tick = Environment.TickCount; + device.Transform.World = Matrix.RotationAxis( + new Vector3((float)Math.Cos((double)Tick/3000.0F), 1, + (float)Math.Sin((double)Tick/3000.0F)), Tick/3000.0F); + } + device.Clear(ClearFlags.Target|ClearFlags.ZBuffer, Color.FromArgb(255, 0, 0, 255), 1.0F, 0); + device.BeginScene(); + + // Show one texture a time, in order to create the illusion of a walking guy + device.SetTexture(0, textures[x]); + x = (x == 9) ? 0 : x+1; //If x is 9, set to 0, otherwise increment x + device.SetStreamSource(0, vertBuffer, 0); + + device.DrawPrimitives(PrimitiveType.TriangleList, 0, numVerts/3); + device.EndScene(); + try { + device.Present(); + } + catch { + // This can lead to an error if the window is closed while the scene is being rendered + } + } + + private void Transformations_ValueChanged(object sender, System.EventArgs e) { + if(device != null) { + device.Transform.World = Matrix.Identity; + RotationMatrices((float)RotationX.Value, (float)RotationY.Value, (float)RotationZ.Value); + TranslationMatrices((float)TranslationX.Value, (float)TranslationY.Value, (float)TranslationZ.Value); + ScaleMatrices((float)ScaleX.Value, (float)ScaleY.Value, (float)ScaleZ.Value); + } + } + + //The following functions create the transformation matrices for each operation + public void RotationMatrices(float x, float y, float z) { + device.Transform.World = Matrix.Multiply(device.Transform.World, Matrix.RotationX((float)(x * Math.PI / 180))); + device.Transform.World = Matrix.Multiply(device.Transform.World, Matrix.RotationY((float)(y * Math.PI / 180))); + device.Transform.World = Matrix.Multiply(device.Transform.World, Matrix.RotationZ((float)(z * Math.PI / 180))); + } + + public void TranslationMatrices(float x, float y, float z) { + device.Transform.World = Matrix.Multiply(device.Transform.World, Matrix.Translation(x, y, z)); + } + + public void ScaleMatrices(float x, float y, float z) { + device.Transform.World = Matrix.Multiply(device.Transform.World, Matrix.Scaling(x / 100, y / 100, z / 100)); + } + + private void MatrixControl_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { + if(e.KeyCode == Keys.Escape) { + endTest = true; + } + } + + private void chkAuto_CheckedChanged(object sender, System.EventArgs e) { + // Forces the execution of the Transformations_ValueChanged event + Transformations_ValueChanged(sender, e); + } + + private void MatrixControl_Closing(object sender, System.ComponentModel.CancelEventArgs e) { + DisposeD3D(); + endTest = true; + } + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.lblRotZ = new System.Windows.Forms.Label(); + this.lblRotY = new System.Windows.Forms.Label(); + this.LblRotX = new System.Windows.Forms.Label(); + this.chkAuto = new System.Windows.Forms.CheckBox(); + this.grpTranslation = new System.Windows.Forms.GroupBox(); + this.lblTranY = new System.Windows.Forms.Label(); + this.lblTranZ = new System.Windows.Forms.Label(); + this.lblTranX = new System.Windows.Forms.Label(); + this.TranslationX = new System.Windows.Forms.TrackBar(); + this.TranslationY = new System.Windows.Forms.TrackBar(); + this.TranslationZ = new System.Windows.Forms.TrackBar(); + this.lblScaX = new System.Windows.Forms.Label(); + this.lblScaY = new System.Windows.Forms.Label(); + this.lblScaZ = new System.Windows.Forms.Label(); + this.RotationX = new System.Windows.Forms.TrackBar(); + this.RotationY = new System.Windows.Forms.TrackBar(); + this.RotationZ = new System.Windows.Forms.TrackBar(); + this.grpRotation = new System.Windows.Forms.GroupBox(); + this.ScaleX = new System.Windows.Forms.TrackBar(); + this.ScaleY = new System.Windows.Forms.TrackBar(); + this.ScaleZ = new System.Windows.Forms.TrackBar(); + this.grpScale = new System.Windows.Forms.GroupBox(); + this.grpTranslation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.TranslationX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.TranslationY)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.TranslationZ)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RotationX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RotationY)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RotationZ)).BeginInit(); + this.grpRotation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScaleX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScaleY)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScaleZ)).BeginInit(); + this.grpScale.SuspendLayout(); + this.SuspendLayout(); + // + // lblRotZ + // + this.lblRotZ.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblRotZ.Location = new System.Drawing.Point(8, 128); + this.lblRotZ.Name = "lblRotZ"; + this.lblRotZ.Size = new System.Drawing.Size(80, 24); + this.lblRotZ.TabIndex = 5; + this.lblRotZ.Text = "Z Axis"; + // + // lblRotY + // + this.lblRotY.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblRotY.Location = new System.Drawing.Point(8, 80); + this.lblRotY.Name = "lblRotY"; + this.lblRotY.Size = new System.Drawing.Size(80, 24); + this.lblRotY.TabIndex = 3; + this.lblRotY.Text = "Y Axis"; + // + // LblRotX + // + this.LblRotX.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.LblRotX.Location = new System.Drawing.Point(8, 32); + this.LblRotX.Name = "LblRotX"; + this.LblRotX.Size = new System.Drawing.Size(80, 24); + this.LblRotX.TabIndex = 1; + this.LblRotX.Text = "X Axis"; + // + // chkAuto + // + this.chkAuto.Location = new System.Drawing.Point(16, 216); + this.chkAuto.Name = "chkAuto"; + this.chkAuto.Size = new System.Drawing.Size(88, 24); + this.chkAuto.TabIndex = 8; + this.chkAuto.Text = "Auto Move"; + this.chkAuto.CheckedChanged += new System.EventHandler(this.chkAuto_CheckedChanged); + // + // grpTranslation + // + this.grpTranslation.Controls.Add(this.lblTranY); + this.grpTranslation.Controls.Add(this.lblTranZ); + this.grpTranslation.Controls.Add(this.lblTranX); + this.grpTranslation.Controls.Add(this.TranslationX); + this.grpTranslation.Controls.Add(this.TranslationY); + this.grpTranslation.Controls.Add(this.TranslationZ); + this.grpTranslation.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.grpTranslation.Location = new System.Drawing.Point(256, 0); + this.grpTranslation.Name = "grpTranslation"; + this.grpTranslation.Size = new System.Drawing.Size(272, 176); + this.grpTranslation.TabIndex = 5; + this.grpTranslation.TabStop = false; + this.grpTranslation.Text = "Translation"; + // + // lblTranY + // + this.lblTranY.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblTranY.Location = new System.Drawing.Point(16, 80); + this.lblTranY.Name = "lblTranY"; + this.lblTranY.Size = new System.Drawing.Size(80, 24); + this.lblTranY.TabIndex = 9; + this.lblTranY.Text = "Y Axis"; + // + // lblTranZ + // + this.lblTranZ.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblTranZ.Location = new System.Drawing.Point(16, 128); + this.lblTranZ.Name = "lblTranZ"; + this.lblTranZ.Size = new System.Drawing.Size(80, 24); + this.lblTranZ.TabIndex = 11; + this.lblTranZ.Text = "Z Axis"; + // + // lblTranX + // + this.lblTranX.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblTranX.Location = new System.Drawing.Point(16, 32); + this.lblTranX.Name = "lblTranX"; + this.lblTranX.Size = new System.Drawing.Size(80, 24); + this.lblTranX.TabIndex = 7; + this.lblTranX.Text = "X Axis"; + // + // TranslationX + // + this.TranslationX.LargeChange = 90; + this.TranslationX.Location = new System.Drawing.Point(88, 32); + this.TranslationX.Maximum = 200; + this.TranslationX.Minimum = -200; + this.TranslationX.Name = "TranslationX"; + this.TranslationX.Size = new System.Drawing.Size(176, 45); + this.TranslationX.TabIndex = 9; + this.TranslationX.TickFrequency = 10; + this.TranslationX.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // TranslationY + // + this.TranslationY.LargeChange = 90; + this.TranslationY.Location = new System.Drawing.Point(88, 80); + this.TranslationY.Maximum = 200; + this.TranslationY.Minimum = -200; + this.TranslationY.Name = "TranslationY"; + this.TranslationY.Size = new System.Drawing.Size(176, 45); + this.TranslationY.TabIndex = 10; + this.TranslationY.TickFrequency = 10; + this.TranslationY.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // TranslationZ + // + this.TranslationZ.LargeChange = 10; + this.TranslationZ.Location = new System.Drawing.Point(88, 128); + this.TranslationZ.Maximum = 200; + this.TranslationZ.Minimum = -200; + this.TranslationZ.Name = "TranslationZ"; + this.TranslationZ.Size = new System.Drawing.Size(176, 45); + this.TranslationZ.TabIndex = 10; + this.TranslationZ.TickFrequency = 10; + this.TranslationZ.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // lblScaX + // + this.lblScaX.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblScaX.Location = new System.Drawing.Point(8, 24); + this.lblScaX.Name = "lblScaX"; + this.lblScaX.Size = new System.Drawing.Size(64, 24); + this.lblScaX.TabIndex = 13; + this.lblScaX.Text = "X Axis"; + // + // lblScaY + // + this.lblScaY.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblScaY.Location = new System.Drawing.Point(80, 24); + this.lblScaY.Name = "lblScaY"; + this.lblScaY.Size = new System.Drawing.Size(64, 24); + this.lblScaY.TabIndex = 15; + this.lblScaY.Text = "Y Axis"; + // + // lblScaZ + // + this.lblScaZ.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblScaZ.Location = new System.Drawing.Point(152, 24); + this.lblScaZ.Name = "lblScaZ"; + this.lblScaZ.Size = new System.Drawing.Size(64, 24); + this.lblScaZ.TabIndex = 17; + this.lblScaZ.Text = "Z Axis"; + // + // RotationX + // + this.RotationX.LargeChange = 90; + this.RotationX.Location = new System.Drawing.Point(80, 32); + this.RotationX.Maximum = 360; + this.RotationX.Name = "RotationX"; + this.RotationX.Size = new System.Drawing.Size(176, 45); + this.RotationX.TabIndex = 9; + this.RotationX.TickFrequency = 10; + this.RotationX.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // RotationY + // + this.RotationY.LargeChange = 90; + this.RotationY.Location = new System.Drawing.Point(80, 80); + this.RotationY.Maximum = 360; + this.RotationY.Name = "RotationY"; + this.RotationY.Size = new System.Drawing.Size(176, 45); + this.RotationY.TabIndex = 10; + this.RotationY.TickFrequency = 10; + this.RotationY.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // RotationZ + // + this.RotationZ.CausesValidation = false; + this.RotationZ.LargeChange = 90; + this.RotationZ.Location = new System.Drawing.Point(80, 128); + this.RotationZ.Maximum = 360; + this.RotationZ.Name = "RotationZ"; + this.RotationZ.Size = new System.Drawing.Size(176, 45); + this.RotationZ.TabIndex = 10; + this.RotationZ.TabStop = false; + this.RotationZ.TickFrequency = 10; + this.RotationZ.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // grpRotation + // + this.grpRotation.Controls.Add(this.LblRotX); + this.grpRotation.Controls.Add(this.RotationY); + this.grpRotation.Controls.Add(this.RotationZ); + this.grpRotation.Controls.Add(this.RotationX); + this.grpRotation.Controls.Add(this.lblRotZ); + this.grpRotation.Controls.Add(this.lblRotY); + this.grpRotation.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.grpRotation.Location = new System.Drawing.Point(0, 0); + this.grpRotation.Name = "grpRotation"; + this.grpRotation.Size = new System.Drawing.Size(256, 176); + this.grpRotation.TabIndex = 11; + this.grpRotation.TabStop = false; + this.grpRotation.Text = "Rotation"; + // + // ScaleX + // + this.ScaleX.Location = new System.Drawing.Point(16, 56); + this.ScaleX.Maximum = 200; + this.ScaleX.Minimum = 1; + this.ScaleX.Name = "ScaleX"; + this.ScaleX.Orientation = System.Windows.Forms.Orientation.Vertical; + this.ScaleX.Size = new System.Drawing.Size(45, 144); + this.ScaleX.TabIndex = 12; + this.ScaleX.TickFrequency = 10; + this.ScaleX.Value = 1; + this.ScaleX.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // ScaleY + // + this.ScaleY.Location = new System.Drawing.Point(88, 56); + this.ScaleY.Maximum = 200; + this.ScaleY.Minimum = 1; + this.ScaleY.Name = "ScaleY"; + this.ScaleY.Orientation = System.Windows.Forms.Orientation.Vertical; + this.ScaleY.Size = new System.Drawing.Size(45, 144); + this.ScaleY.TabIndex = 12; + this.ScaleY.TickFrequency = 10; + this.ScaleY.Value = 1; + this.ScaleY.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // ScaleZ + // + this.ScaleZ.Location = new System.Drawing.Point(160, 56); + this.ScaleZ.Maximum = 200; + this.ScaleZ.Minimum = 1; + this.ScaleZ.Name = "ScaleZ"; + this.ScaleZ.Orientation = System.Windows.Forms.Orientation.Vertical; + this.ScaleZ.Size = new System.Drawing.Size(45, 144); + this.ScaleZ.TabIndex = 12; + this.ScaleZ.TickFrequency = 10; + this.ScaleZ.Value = 1; + this.ScaleZ.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // grpScale + // + this.grpScale.Controls.Add(this.ScaleX); + this.grpScale.Controls.Add(this.ScaleZ); + this.grpScale.Controls.Add(this.lblScaX); + this.grpScale.Controls.Add(this.lblScaY); + this.grpScale.Controls.Add(this.ScaleY); + this.grpScale.Controls.Add(this.lblScaZ); + this.grpScale.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.grpScale.Location = new System.Drawing.Point(128, 176); + this.grpScale.Name = "grpScale"; + this.grpScale.Size = new System.Drawing.Size(232, 208); + this.grpScale.TabIndex = 18; + this.grpScale.TabStop = false; + this.grpScale.Text = "Scale"; + // + // MatrixControl + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(544, 398); + this.Controls.Add(this.grpScale); + this.Controls.Add(this.grpRotation); + this.Controls.Add(this.chkAuto); + this.Controls.Add(this.grpTranslation); + this.Name = "MatrixControl"; + this.Text = "MatrixControl"; + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.MatrixControl_KeyDown); + this.Closing += new System.ComponentModel.CancelEventHandler(this.MatrixControl_Closing); + this.grpTranslation.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.TranslationX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.TranslationY)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.TranslationZ)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RotationX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RotationY)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RotationZ)).EndInit(); + this.grpRotation.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ScaleX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScaleY)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScaleZ)).EndInit(); + this.grpScale.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + } +} \ No newline at end of file diff --git a/03-EnterDirectX/MatrixControl.resx b/03-EnterDirectX/MatrixControl.resx new file mode 100644 index 0000000..a313358 --- /dev/null +++ b/03-EnterDirectX/MatrixControl.resx @@ -0,0 +1,355 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Private + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + MatrixControl + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/03-EnterDirectX/MatrixTest.cs b/03-EnterDirectX/MatrixTest.cs new file mode 100644 index 0000000..7d87df5 --- /dev/null +++ b/03-EnterDirectX/MatrixTest.cs @@ -0,0 +1,77 @@ + +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + +namespace EnterDirectX { + public class MatrixTest: + System.Windows.Forms.Form { + #region " Windows Form Designer generated code " + + public MatrixTest() : base() { + + //This call is required by the Windows Form Designer. + InitializeComponent(); + + //Add any initialization after the InitializeComponent() call + + } + + //Form overrides dispose to clean up the component list. + protected override void Dispose(bool disposing) { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + //Required by the Windows Form Designer + private System.ComponentModel.IContainer components; + + //NOTE: The following procedure is required by the Windows Form Designer + //It can be modified using the Windows Form Designer. + //Do not modify it using the code editor. + [System.Diagnostics.DebuggerStepThrough] + private void InitializeComponent() { + // + // MatrixTest + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(362, 328); + this.ControlBox = false; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.KeyPreview = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "MatrixTest"; + this.ShowInTaskbar = false; + this.Text = "MatrixTestWindow"; + this.TopMost = true; + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.MatrixTest_KeyDown); + this.Closing += new System.ComponentModel.CancelEventHandler(this.MatrixTest_Closing); + + } + + #endregion + private bool endTest = false; + + public bool EndTest { + get { return endTest; } + } + + private void MatrixTest_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { + if (e.KeyCode==Keys.Escape) { + endTest = true; + } + } + + private void MatrixTest_Closing(object sender, System.ComponentModel.CancelEventArgs e) { + + } + + } +} diff --git a/03-EnterDirectX/MatrixTest.resx b/03-EnterDirectX/MatrixTest.resx new file mode 100644 index 0000000..388aea5 --- /dev/null +++ b/03-EnterDirectX/MatrixTest.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + True + + + MatrixTest + + + Private + + \ No newline at end of file diff --git a/03-EnterDirectX/TransparentTest.cs b/03-EnterDirectX/TransparentTest.cs new file mode 100644 index 0000000..9b2d228 --- /dev/null +++ b/03-EnterDirectX/TransparentTest.cs @@ -0,0 +1,252 @@ +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace EnterDirectX { + /// + /// Summary description for TransparentTest. + /// + public class TransparentTest : System.Windows.Forms.Form { + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + private static int x = 0; + private const int numVerts = 4; + private const int numTextures = 10; + private bool endTest = false; + + public bool EndTest { + get { return endTest; } + } + + private Device device = null; + + private VertexBuffer vertBuffer = null; + private VertexBuffer TranspVertBuffer = null; + private Texture[] textures = new Texture[10]; + private Texture TranspTexture; + + // Simple textured vertices constant and structure + private const VertexFormats customVertexFlags = VertexFormats.Transformed | VertexFormats.Texture1; + + private struct CustomVertex { + public float X; + public float Y; + public float Z; + public float rhw; + public float tu; + public float tv; + } + + public TransparentTest() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // + // TODO: Add any constructor code after InitializeComponent call + // + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + //Dispose of any used resources + public void DisposeD3D() { + for (int i = 0; i < numTextures; i++) + if (textures[i] != null) { + textures[i].Dispose(); + textures[i] = null; + } + if (vertBuffer != null) { + vertBuffer.Dispose(); + vertBuffer = null; + } + if (TranspVertBuffer != null) { + TranspVertBuffer.Dispose(); + TranspVertBuffer = null; + } + if (device != null) { + device.Dispose(); + device = null; + } + } + + public bool InitD3D(IntPtr winHandle) { + DisplayMode DispMode = + Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode; + PresentParameters presentParams = new PresentParameters(); + //Define the presentation parameters + presentParams.Windowed = true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.BackBufferFormat = DispMode.Format; + //try to create the device + try { + device = new Device(Manager.Adapters.Default.Adapter, + DeviceType.Hardware, winHandle, + CreateFlags.SoftwareVertexProcessing,presentParams); + //Tells the device which is the format of our custom vertices + device.VertexFormat = customVertexFlags; + device.RenderState.Lighting = false; + device.RenderState.SourceBlend = Blend.SourceAlpha; + device.RenderState.DestinationBlend = Blend.InvSourceAlpha; + device.RenderState.AlphaBlendEnable = true; + return true; + } + catch { + return false; + } + } + + + public bool CreateTextures() { + CustomVertex[] verts; + //We will use blue as the transparent color + Color colorKeyVal = Color.FromArgb(255, 0, 0, 255); + try { + //Load the walking guy textures + string textureFile; + for(int i=1; i<=10; i++) { + textureFile = Application.StartupPath + @"\..\..\Images\walk" + i.ToString() + ".bmp"; + textures[i-1] = TextureLoader.FromFile(device, textureFile); + } + //Load the transparent texture + TranspTexture = TextureLoader.FromFile(device, + Application.StartupPath + @"\..\..\Images\TranspSample.bmp", + 64, 64, D3DX.Default, 0, Format.Unknown, Pool.Managed, Filter.Point, Filter.Point, + colorKeyVal.ToArgb()); + + vertBuffer = new VertexBuffer(typeof(CustomVertex), + numVerts, device, Usage.WriteOnly, customVertexFlags, Pool.Default); + verts = vertBuffer.Lock(0, 0) as CustomVertex[]; + SquareVertices(verts); + vertBuffer.Unlock(); + return true; + } + catch { + return false; + } + } + + private void SquareVertices(CustomVertex[] vertices) { + // Create a square, composed of 2 triangles + vertices[0] = CreateFlexVertex(60, 60, 0, 1, 0, 0); + vertices[1] = CreateFlexVertex(240, 60, 0, 1, 1, 0); + vertices[2] = CreateFlexVertex(60, 240, 0, 1, 0, 1); + vertices[3] = CreateFlexVertex(240, 240, 0, 1, 1, 1); + } + + public bool CreateTransparentVertices(float x, float y) { + CustomVertex[] verts; + try { + // If the vertex buffer was previously created, dispose them + if(TranspVertBuffer != null) TranspVertBuffer.Dispose(); + + TranspVertBuffer = new VertexBuffer(typeof(CustomVertex), + numVerts, device, Usage.WriteOnly, customVertexFlags, Pool.Default); + + verts = TranspVertBuffer.Lock(0, 0) as CustomVertex[]; + TranspVertices(x, y, verts); + TranspVertBuffer.Unlock(); + return true; + } + catch { + return false; + } + } + + private void TranspVertices(float X, float Y, CustomVertex[] vertices) { + // Create a square, composed of 2 triangles. Our transparent texture is 42 pixels wide and 60 long + vertices[0] = CreateFlexVertex(X, Y, 0, 1, 0, 0); + vertices[1] = CreateFlexVertex(X + 42, Y, 0, 1, 1, 0); + vertices[2] = CreateFlexVertex(X, Y + 60, 0, 1, 0, 1); + vertices[3] = CreateFlexVertex(X + 42, Y + 60, 0, 1, 1, 1); + } + + private CustomVertex CreateFlexVertex(float X, float Y, float Z, float rhw, float tu, float tv) { + CustomVertex custVertex = new CustomVertex(); + custVertex.X = X; + custVertex.Y = Y; + custVertex.Z = Z; + custVertex.rhw = rhw; + custVertex.tu = tu; + custVertex.tv = tv; + return custVertex; + } + + public void Render() { + if(device == null) return; + + device.Clear(ClearFlags.Target, Color.FromArgb(0, 0, 255).ToArgb(), 1.0F, 0); + device.BeginScene(); + // Show one texture a time, in order to create the illusion of a walking guy + device.SetTexture(0, textures[x]); + x = (x == 9) ? 0 : x+1; //If x is 9, set to 0, otherwise increment x + device.SetStreamSource(0, vertBuffer, 0); + device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, numVerts - 2); + device.SetTexture(0, TranspTexture); + device.SetStreamSource(0, TranspVertBuffer, 0); + device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, numVerts - 2); + + device.EndScene(); + try { + device.Present(); + } + catch { + } + } + + private void TransparentTest_Closing(object sender, System.ComponentModel.CancelEventArgs e) { + endTest = true; + DisposeD3D(); + } + + private void TransparentTest_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { + if(e.KeyCode == Keys.Escape) { + endTest = true; + } + } + + private void TransparentTest_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { + CreateTransparentVertices(e.X, e.Y); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + // + // TransparentTest + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(346, 312); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "TransparentTest"; + this.Text = "TransparentTest"; + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TransparentTest_KeyDown); + this.Closing += new System.ComponentModel.CancelEventHandler(this.TransparentTest_Closing); + this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.TransparentTest_MouseMove); + + } + #endregion + + } +} diff --git a/03-EnterDirectX/TransparentTest.resx b/03-EnterDirectX/TransparentTest.resx new file mode 100644 index 0000000..d45a9ad --- /dev/null +++ b/03-EnterDirectX/TransparentTest.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + True + + + Private + + + TransparentTest + + \ No newline at end of file diff --git a/03-EnterDirectX/WindowTest.cs b/03-EnterDirectX/WindowTest.cs new file mode 100644 index 0000000..7d54d4e --- /dev/null +++ b/03-EnterDirectX/WindowTest.cs @@ -0,0 +1,208 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace EnterDirectX { + /// + /// Summary description for wt. + /// + public class WindowTest : System.Windows.Forms.Form { + private bool endTest = false; + + public bool EndTest { + get { return endTest; } + } + + private int numVerts = 4; + private Device device = null; + private VertexBuffer vertBuffer = null; + private Texture[] textures = new Texture[10]; + private System.ComponentModel.Container components = null; + private static int x = 0; + // Simple textured vertices constant and structure + private const VertexFormats customVertexFlags = VertexFormats.Transformed | VertexFormats.Texture1; + private struct CustomVertex { + public float X; + public float Y; + public float Z; + public float rhw; + public float tu; + public float tv; + } + + /// + /// Required designer variable. + /// + + public WindowTest() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // + // TODO: Add any constructor code after InitializeComponent call + // + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + DisposeD3D(); + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + // + // WindowTest + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(292, 273); + this.Name = "WindowTest"; + this.Text = "WindowTest"; + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.WindowTest_KeyDown); + this.Closing += new System.ComponentModel.CancelEventHandler(this.WindowTest_Closing); + + } + #endregion + + private void WindowTest_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { + if(e.KeyCode == Keys.Escape) { + endTest = true; + } + } + + private void WindowTest_Closing(object sender, System.ComponentModel.CancelEventArgs e) { + endTest = true; + DisposeD3D(); + } + + public void DisposeD3D() { + for(int i = 0; i < 10; i++) { + if(textures[i] != null) { + textures[i].Dispose(); + textures[i] = null; + } + } + if(vertBuffer != null) { + vertBuffer.Dispose(); + vertBuffer = null; + } + if(device != null) { + device.Dispose(); + device = null; + } + } + + public bool InitD3D(IntPtr winHandle) { + DisplayMode dispMode = + Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode; + PresentParameters presentParams= new PresentParameters(); + // Define the presentation parameters + presentParams.Windowed = true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.BackBufferFormat = dispMode.Format; + // Try to create the device + try { + device = new Device( + Manager.Adapters.Default.Adapter, + DeviceType.Hardware, + winHandle, + CreateFlags.SoftwareVertexProcessing, + presentParams); + device.VertexFormat = customVertexFlags; + return true; + } + catch { + return false; + } + } + + public bool CreateTextures() { + CustomVertex[] verts; + try { + string textureFile; + // Load the textures, named from "walk1.bmp" to "walk10.bmp" + for(int i=1; i<=10; i++) { + textureFile = Application.StartupPath + @"\..\..\Images\walk" + i.ToString() + ".bmp"; + textures[i-1] = TextureLoader.FromFile(device, textureFile); + } + // Define the vertex buffer to hold our custom vertices + vertBuffer = new VertexBuffer(typeof(CustomVertex), + numVerts, device, Usage.WriteOnly, customVertexFlags, Pool.Default); + // Locks the memory, which will return the array to be filled + verts = vertBuffer.Lock(0, 0) as CustomVertex[]; + // Defines the vertices + SquareVertices(verts); + // Unlock the buffer, which will save our vertex information to the device + vertBuffer.Unlock(); + return true; + } + catch { + return false; + } + } + + private void SquareVertices(CustomVertex[] vertices) { + // Create a square, composed of 2 triangles + vertices[0] = CreateFlexVertex(60, 60, 0, 1, 0, 0); + vertices[1] = CreateFlexVertex(240, 60, 0, 1, 1, 0); + vertices[2] = CreateFlexVertex(60, 240, 0, 1, 0, 1); + vertices[3] = CreateFlexVertex(240, 240, 0, 1, 1, 1); + } + + private CustomVertex CreateFlexVertex(float X, float Y, float Z, float rhw, float tu, float tv) { + CustomVertex cv = new CustomVertex(); + cv.X = X; + cv.Y = Y; + cv.Z = Z; + cv.rhw = rhw; + cv.tu = tu; + cv.tv = tv; + return cv; + } + + public void Render() { + if(device == null) { + return; + } + // Clears the device with blue color + device.Clear(ClearFlags.Target, Color.FromArgb(0, 0, 255).ToArgb(), 1.0F, 0); + device.BeginScene(); + + // Show one texture a time, in order to create the illusion of a walking guy + device.SetTexture(0, textures[x]); + x = (x == 9) ? 0 : x+1; //If x is 9, set to 0, otherwise increment x + // Define which vertex buffer should be used + device.SetStreamSource(0, vertBuffer, 0); + device.VertexFormat = customVertexFlags; + // Draw the vertices of the vertex buffer, rendering them as a + // triangle strip, using the given texture + device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, numVerts - 2); + device.EndScene(); + + // Using an extra try-catch will prevent any errors if the device was disposed + try { + // Present the rendered scene + device.Present(); + } + catch { + } + } + } +} diff --git a/03-EnterDirectX/WindowTest.resx b/03-EnterDirectX/WindowTest.resx new file mode 100644 index 0000000..18d848a --- /dev/null +++ b/03-EnterDirectX/WindowTest.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + True + + + Private + + + WindowTest + + \ No newline at end of file diff --git a/03-EnterDirectX/WindowTestold.cs b/03-EnterDirectX/WindowTestold.cs new file mode 100644 index 0000000..600bd5a --- /dev/null +++ b/03-EnterDirectX/WindowTestold.cs @@ -0,0 +1,199 @@ +Imports Microsoft.DirectX.Direct3D +Imports Microsoft.DirectX +Imports System.Drawing + +Public Class WindowTest + Inherits System.Windows.Forms.Form + +#Region " Windows Form Designer generated code " + + Public Sub New() + MyBase.New() + + 'This call is required by the Windows Form Designer. + InitializeComponent() + + 'Add any initialization after the InitializeComponent() call + + End Sub + + 'Form overrides dispose to clean up the component list. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing Then + If Not (components Is Nothing) Then + components.Dispose() + End If + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + Private Sub InitializeComponent() + ' + 'WindowTest + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) + Me.ClientSize = New System.Drawing.Size(320, 286) + Me.KeyPreview = True + Me.Name = "WindowTest" + Me.Text = "Test Windowed Mode" + + End Sub + +#End Region + + Public EndTest As Boolean = False + Dim objDirect3DDevice As Device = Nothing + + + Dim NUM_VERTS = 4 + Dim vertBuffer As VertexBuffer = Nothing + Dim Textures(10) As Texture + + ' Simple textured vertices constant and structure + Public Const FVF_CUSTOMVERTEX As VertexFormats = VertexFormats.Transformed Or VertexFormats.Texture1 + + Private Structure CUSTOMVERTEX + Public X As Single + Public Y As Single + Public Z As Single + Public rhw As Single + Public tu As Single + Public tv As Single + End Structure + + + Private Sub TestWindow_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown + If e.KeyCode = Keys.Escape Then + EndTest = True + End If + End Sub + + + Public Sub DisposeD3D() + On Error Resume Next ' We are leaving, ignore any errors + Dim i As Integer + + For i = 0 To 9 + If Not (Textures(i) Is Nothing) Then Textures(i).Dispose() + Textures(i) = Nothing + Next + + If Not (vertBuffer Is Nothing) Then vertBuffer.Dispose() + vertBuffer = Nothing + + If Not (objDirect3DDevice Is Nothing) Then objDirect3DDevice.Dispose() + objDirect3DDevice = Nothing + End Sub + + Public Function InitD3D(ByVal WinHandle As IntPtr) As Boolean + Dim DispMode As DisplayMode + Dim objDirect3Dpp As PresentParameters + + DispMode = Manager.Adapters(Manager.Adapters.Default.Adapter).CurrentDisplayMode + ' Define the presentation parameters + objDirect3Dpp = New PresentParameters + objDirect3Dpp.Windowed = True + objDirect3Dpp.SwapEffect = SwapEffect.Discard + objDirect3Dpp.BackBufferFormat = DispMode.Format + ' Try to create the device + Try + objDirect3DDevice = New Device(Manager.Adapters.Default.Adapter, _ + DeviceType.Hardware, WinHandle, CreateFlags.SoftwareVertexProcessing, _ + objDirect3Dpp) + objDirect3DDevice.VertexFormat = FVF_CUSTOMVERTEX + InitD3D = True + Catch + InitD3D = False + End Try + ' Dispose the used objects + DispMode = Nothing + objDirect3Dpp = Nothing + End Function + + Public Function CreateTextures() As Boolean + Dim verts As CustomVertex() + Dim i As Integer + + Try + ' Load the textures, named from "walk1.bmp" ro "walk10.bmp" + For i = 1 To 10 + Textures(i - 1) = TextureLoader.FromFile(objDirect3DDevice, Application.StartupPath + "\Walk" & CStr(i) & ".bmp") + Next + + ' Define the vertex buffer to hold our custom vertices + vertBuffer = New VertexBuffer(GetType(CustomVertex), NUM_VERTS, objDirect3DDevice, Usage.WriteOnly, FVF_CUSTOMVERTEX, Pool.Default) + ' Locks the memory, which will return the array to be filled + verts = vertBuffer.Lock(0, 0) + ' Defines the vertices + SquareVertices(verts) + ' Unlock the buffer, which will save our vertex information to the device + vertBuffer.Unlock() + + Return True + Catch + Return False + End Try + End Function + + Private Sub SquareVertices(ByVal vertices As CUSTOMVERTEX()) + ' Create a square, composed of 2 triangles + vertices(0) = CreateFlexVertex(60, 60, 0, 1, 0, 0) + vertices(1) = CreateFlexVertex(240, 60, 0, 1, 1, 0) + vertices(2) = CreateFlexVertex(60, 240, 0, 1, 0, 1) + vertices(3) = CreateFlexVertex(240, 240, 0, 1, 1, 1) + End Sub + + Private Function CreateFlexVertex(ByRef X As Single, ByRef Y As Single, ByRef Z As Single, ByRef rhw As Single, ByRef tu As Single, ByRef tv As Single) As CUSTOMVERTEX + CreateFlexVertex.X = X + CreateFlexVertex.Y = Y + CreateFlexVertex.Z = Z + CreateFlexVertex.rhw = rhw + CreateFlexVertex.tu = tu + CreateFlexVertex.tv = tv + End Function + + + Public Sub Render() + Static x As Integer = 0 + + If (objDirect3DDevice Is Nothing) Then Return + + ' Clears the device with blue color + objDirect3DDevice.Clear(ClearFlags.Target, Color.FromArgb(0, 0, 255).ToArgb, 1.0F, 0) + objDirect3DDevice.BeginScene() + + ' Show one texture a time, in order to create the illusion of a walking guy + objDirect3DDevice.SetTexture(0, Textures(x)) + x += 1 + If x = 10 Then x = 0 + ' Define which vertex buffer should be used + objDirect3DDevice.SetStreamSource(0, vertBuffer, 0) + objDirect3DDevice.VertexFormat = FVF_CUSTOMVERTEX + ' Draw the vertices of the vertex buffer, rendering them as a + ' triangle strip, using the given texture + objDirect3DDevice.DrawPrimitives(PrimitiveType.TriangleStrip, 0, NUM_VERTS - 2) + objDirect3DDevice.EndScene() + + ' Using an extra try-catch will prevent any errors if the device was disposed + Try + ' Present the rendered scene + objDirect3DDevice.Present() + Catch + End Try + + End Sub + + + Private Sub WindowTest_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing + EndTest = True + DisposeD3D() + End Sub +End Class + + diff --git a/03-EnterDirectX/WindowTestold.resx b/03-EnterDirectX/WindowTestold.resx new file mode 100644 index 0000000..7047705 --- /dev/null +++ b/03-EnterDirectX/WindowTestold.resx @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + WindowTest + + \ No newline at end of file diff --git a/03-EnterDirectX/frmDirectX.cs b/03-EnterDirectX/frmDirectX.cs new file mode 100644 index 0000000..e57f88b --- /dev/null +++ b/03-EnterDirectX/frmDirectX.cs @@ -0,0 +1,548 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + +namespace EnterDirectX { + /// + /// Summary description for FrmDirectX. + /// + public class FrmDirectX : System.Windows.Forms.Form { + internal System.Windows.Forms.Button CmdClose; + internal System.Windows.Forms.Button CmdTransparency; + internal System.Windows.Forms.Button CmdLight; + internal System.Windows.Forms.Button CmdMatrix; + internal System.Windows.Forms.Button CmdFullScreen; + internal System.Windows.Forms.Button CmdWindow; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + private System.Windows.Forms.ListBox AdaptersListBox; + private System.Windows.Forms.ListBox DevicesListBox; + private System.Windows.Forms.ListBox DisplayModesListBox; + private System.Windows.Forms.ListBox DeviceCapsListBox; + private System.Windows.Forms.Label DeviceCapsLabel; + private System.Windows.Forms.Label ResolutionsLabel; + private System.Windows.Forms.Label DevicesLabel; + private System.Windows.Forms.Label AdaptersLabel; + internal System.Windows.Forms.GroupBox TestsGroup; + + Device device; + + public FrmDirectX() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // + // TODO: Add any constructor code after InitializeComponent call + // + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.CmdClose = new System.Windows.Forms.Button(); + this.AdaptersListBox = new System.Windows.Forms.ListBox(); + this.DevicesListBox = new System.Windows.Forms.ListBox(); + this.DisplayModesListBox = new System.Windows.Forms.ListBox(); + this.DeviceCapsLabel = new System.Windows.Forms.Label(); + this.ResolutionsLabel = new System.Windows.Forms.Label(); + this.DevicesLabel = new System.Windows.Forms.Label(); + this.AdaptersLabel = new System.Windows.Forms.Label(); + this.DeviceCapsListBox = new System.Windows.Forms.ListBox(); + this.TestsGroup = new System.Windows.Forms.GroupBox(); + this.CmdTransparency = new System.Windows.Forms.Button(); + this.CmdLight = new System.Windows.Forms.Button(); + this.CmdMatrix = new System.Windows.Forms.Button(); + this.CmdFullScreen = new System.Windows.Forms.Button(); + this.CmdWindow = new System.Windows.Forms.Button(); + this.TestsGroup.SuspendLayout(); + this.SuspendLayout(); + // + // CmdClose + // + this.CmdClose.Location = new System.Drawing.Point(536, 296); + this.CmdClose.Name = "CmdClose"; + this.CmdClose.Size = new System.Drawing.Size(88, 29); + this.CmdClose.TabIndex = 34; + this.CmdClose.Text = "Close"; + this.CmdClose.Click += new System.EventHandler(this.CmdClose_Click); + // + // AdaptersListBox + // + this.AdaptersListBox.Location = new System.Drawing.Point(8, 32); + this.AdaptersListBox.Name = "AdaptersListBox"; + this.AdaptersListBox.Size = new System.Drawing.Size(160, 95); + this.AdaptersListBox.TabIndex = 35; + this.AdaptersListBox.SelectedIndexChanged += new System.EventHandler(this.AdaptersListBox_SelectedIndexChanged); + // + // DevicesListBox + // + this.DevicesListBox.Location = new System.Drawing.Point(8, 160); + this.DevicesListBox.Name = "DevicesListBox"; + this.DevicesListBox.Size = new System.Drawing.Size(160, 95); + this.DevicesListBox.TabIndex = 36; + this.DevicesListBox.SelectedIndexChanged += new System.EventHandler(this.DevicesListBox_SelectedIndexChanged); + // + // DisplayModesListBox + // + this.DisplayModesListBox.HorizontalScrollbar = true; + this.DisplayModesListBox.Location = new System.Drawing.Point(8, 288); + this.DisplayModesListBox.Name = "DisplayModesListBox"; + this.DisplayModesListBox.Size = new System.Drawing.Size(160, 95); + this.DisplayModesListBox.TabIndex = 37; + // + // DeviceCapsLabel + // + this.DeviceCapsLabel.AutoSize = true; + this.DeviceCapsLabel.BackColor = System.Drawing.Color.Transparent; + this.DeviceCapsLabel.Cursor = System.Windows.Forms.Cursors.Default; + this.DeviceCapsLabel.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.DeviceCapsLabel.ForeColor = System.Drawing.SystemColors.ControlText; + this.DeviceCapsLabel.Location = new System.Drawing.Point(184, 8); + this.DeviceCapsLabel.Name = "DeviceCapsLabel"; + this.DeviceCapsLabel.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.DeviceCapsLabel.Size = new System.Drawing.Size(101, 16); + this.DeviceCapsLabel.TabIndex = 29; + this.DeviceCapsLabel.Text = "Device Capabilities:"; + // + // ResolutionsLabel + // + this.ResolutionsLabel.AutoSize = true; + this.ResolutionsLabel.BackColor = System.Drawing.Color.Transparent; + this.ResolutionsLabel.Cursor = System.Windows.Forms.Cursors.Default; + this.ResolutionsLabel.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.ResolutionsLabel.ForeColor = System.Drawing.SystemColors.ControlText; + this.ResolutionsLabel.Location = new System.Drawing.Point(8, 264); + this.ResolutionsLabel.Name = "ResolutionsLabel"; + this.ResolutionsLabel.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.ResolutionsLabel.Size = new System.Drawing.Size(79, 16); + this.ResolutionsLabel.TabIndex = 28; + this.ResolutionsLabel.Text = "Display Modes:"; + // + // DevicesLabel + // + this.DevicesLabel.AutoSize = true; + this.DevicesLabel.BackColor = System.Drawing.Color.Transparent; + this.DevicesLabel.Cursor = System.Windows.Forms.Cursors.Default; + this.DevicesLabel.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.DevicesLabel.ForeColor = System.Drawing.SystemColors.ControlText; + this.DevicesLabel.Location = new System.Drawing.Point(3, 141); + this.DevicesLabel.Name = "DevicesLabel"; + this.DevicesLabel.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.DevicesLabel.TabIndex = 27; + this.DevicesLabel.Text = "Rendering Devices:"; + // + // AdaptersLabel + // + this.AdaptersLabel.AutoSize = true; + this.AdaptersLabel.BackColor = System.Drawing.Color.Transparent; + this.AdaptersLabel.Cursor = System.Windows.Forms.Cursors.Default; + this.AdaptersLabel.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.AdaptersLabel.ForeColor = System.Drawing.SystemColors.ControlText; + this.AdaptersLabel.Location = new System.Drawing.Point(8, 8); + this.AdaptersLabel.Name = "AdaptersLabel"; + this.AdaptersLabel.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.AdaptersLabel.Size = new System.Drawing.Size(51, 16); + this.AdaptersLabel.TabIndex = 26; + this.AdaptersLabel.Text = "Adapters:"; + // + // DeviceCapsListBox + // + this.DeviceCapsListBox.BackColor = System.Drawing.SystemColors.Window; + this.DeviceCapsListBox.Cursor = System.Windows.Forms.Cursors.Default; + this.DeviceCapsListBox.Font = new System.Drawing.Font("Verdana", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.DeviceCapsListBox.ForeColor = System.Drawing.SystemColors.WindowText; + this.DeviceCapsListBox.HorizontalScrollbar = true; + this.DeviceCapsListBox.ItemHeight = 12; + this.DeviceCapsListBox.Location = new System.Drawing.Point(184, 32); + this.DeviceCapsListBox.Name = "DeviceCapsListBox"; + this.DeviceCapsListBox.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.DeviceCapsListBox.Size = new System.Drawing.Size(336, 352); + this.DeviceCapsListBox.TabIndex = 30; + // + // TestsGroup + // + this.TestsGroup.Controls.Add(this.CmdTransparency); + this.TestsGroup.Controls.Add(this.CmdLight); + this.TestsGroup.Controls.Add(this.CmdMatrix); + this.TestsGroup.Controls.Add(this.CmdFullScreen); + this.TestsGroup.Controls.Add(this.CmdWindow); + this.TestsGroup.Location = new System.Drawing.Point(528, 32); + this.TestsGroup.Name = "TestsGroup"; + this.TestsGroup.Size = new System.Drawing.Size(106, 233); + this.TestsGroup.TabIndex = 35; + this.TestsGroup.TabStop = false; + this.TestsGroup.Text = "Tests"; + // + // CmdTransparency + // + this.CmdTransparency.Location = new System.Drawing.Point(13, 104); + this.CmdTransparency.Name = "CmdTransparency"; + this.CmdTransparency.Size = new System.Drawing.Size(87, 37); + this.CmdTransparency.TabIndex = 28; + this.CmdTransparency.Text = "Transparency"; + this.CmdTransparency.Click += new System.EventHandler(this.CmdTransparency_Click); + // + // CmdLight + // + this.CmdLight.Location = new System.Drawing.Point(13, 187); + this.CmdLight.Name = "CmdLight"; + this.CmdLight.Size = new System.Drawing.Size(87, 29); + this.CmdLight.TabIndex = 27; + this.CmdLight.Text = "Light"; + this.CmdLight.Click += new System.EventHandler(this.CmdLight_Click); + // + // CmdMatrix + // + this.CmdMatrix.Location = new System.Drawing.Point(13, 150); + this.CmdMatrix.Name = "CmdMatrix"; + this.CmdMatrix.Size = new System.Drawing.Size(87, 28); + this.CmdMatrix.TabIndex = 26; + this.CmdMatrix.Text = "Matrix "; + this.CmdMatrix.Click += new System.EventHandler(this.CmdMatrix_Click); + // + // CmdFullScreen + // + this.CmdFullScreen.Location = new System.Drawing.Point(13, 66); + this.CmdFullScreen.Name = "CmdFullScreen"; + this.CmdFullScreen.Size = new System.Drawing.Size(87, 29); + this.CmdFullScreen.TabIndex = 25; + this.CmdFullScreen.Text = "Full Screen"; + this.CmdFullScreen.Click += new System.EventHandler(this.CmdFullScreen_Click); + // + // CmdWindow + // + this.CmdWindow.Location = new System.Drawing.Point(13, 27); + this.CmdWindow.Name = "CmdWindow"; + this.CmdWindow.Size = new System.Drawing.Size(87, 27); + this.CmdWindow.TabIndex = 24; + this.CmdWindow.Text = "Window"; + this.CmdWindow.Click += new System.EventHandler(this.CmdWindow_Click); + // + // FrmDirectX + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(640, 398); + this.Controls.Add(this.CmdClose); + this.Controls.Add(this.AdaptersListBox); + this.Controls.Add(this.DevicesListBox); + this.Controls.Add(this.DisplayModesListBox); + this.Controls.Add(this.DeviceCapsLabel); + this.Controls.Add(this.ResolutionsLabel); + this.Controls.Add(this.DevicesLabel); + this.Controls.Add(this.AdaptersLabel); + this.Controls.Add(this.DeviceCapsListBox); + this.Controls.Add(this.TestsGroup); + this.Name = "FrmDirectX"; + this.Text = "FrmDirectX"; + this.Closing += new System.ComponentModel.CancelEventHandler(this.FrmDirectX_Closing); + this.Load += new System.EventHandler(this.FrmDirectX_Load); + this.TestsGroup.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() { + Application.Run(new FrmDirectX()); + } + + public void ListAdapters() { + // Add each adapter to the LstAdapters listbox + foreach(AdapterInformation info in Manager.Adapters) { + AdaptersListBox.Items.Add(info.Information.Description); + } + // Select the first availiable index, in order to fire the change event + AdaptersListBox.SelectedIndex = 0; + } + + public void ListDevices(int adapter) { + Caps deviceCaps = Manager.GetDeviceCaps(adapter, DeviceType.Reference); + + // Add each supported device to the DevicesListBox listbox + DevicesListBox.Items.Clear(); + // The Reference Rasterizer will always be supported + DevicesListBox.Items.Add("Reference Rasterizer (REF)"); + + // If there's no error when getting the HAL capabilities, + // then we have a hardware acceleration board installed + try { + deviceCaps = Manager.GetDeviceCaps(adapter, DeviceType.Hardware); + DevicesListBox.Items.Add("Hardware Acceleration (HAL)"); + } + catch { + } + // Select the first available index, in order to fire the change event + DevicesListBox.SelectedIndex = 0; + } + + private void FrmDirectX_Load(object sender, System.EventArgs e) { + // Fill the Adapters list + ListAdapters(); + } + + private void FrmDirectX_Closing(object sender, CancelEventArgs e) { + + if(device != null) { + device.Dispose(); + } + device = null; + } + + private void CmdWindow_Click(object sender, System.EventArgs e) { + using (WindowTest windowTest = new WindowTest()) { + + windowTest.Show(); + + // Initialize Direct3D and the device object + if(!windowTest.InitD3D(windowTest.Handle)) { + MessageBox.Show("Could not initialize Direct3D."); + windowTest.Dispose(); + return; + } + else { + // Load the textures and create the square to show them + if(!windowTest.CreateTextures()) { + MessageBox.Show("Could not initialize vertices and textures."); + return; + } + } + + // Uncomment the lines below to see a smooth walking man + //int desiredFrameRate = 10; + //int lastTick = 0; + while(!windowTest.EndTest) { + // Force a Frame rate of 10 frames to second on maximum + //if(System.Environment.TickCount - lastTick >= 1000 / desiredFrameRate) { + windowTest.Render(); + // Frame rate calculation + windowTest.Text = "Window Test. Frame rate: " + DirectXLists.CalcFrameRate().ToString(); + //lastTick = System.Environment.TickCount; + //} + Application.DoEvents(); + } + } + } + + private void CmdFullScreen_Click(object sender, System.EventArgs e) { + using (FullScreenTest fullScreenTest = new FullScreenTest()) { + fullScreenTest.Show(); + + // Initialize Direct3D and the device object + if(!fullScreenTest.InitD3D(fullScreenTest.Handle)) { + MessageBox.Show("Could not initialize Direct3D."); + fullScreenTest.Dispose(); + return; + } + else { + // Load the textures and create the square to show them + if(!fullScreenTest.CreateTextures()) { + MessageBox.Show("Could not initialize vertices and textures."); + fullScreenTest.DisposeD3D(); + fullScreenTest.Dispose(); + return; + } + } + + // If we have no errors, then enter the rendering loop + while(!fullScreenTest.EndTest) { + try { + fullScreenTest.Render(); + Application.DoEvents(); + } + catch { + // Ignore any errors that may arise when the window close + } + } + } + } + + private void CmdTransparency_Click(object sender, System.EventArgs e) { + using (TransparentTest transparentTest = new TransparentTest()) { + transparentTest.Show(); + + // Initialize Direct3D and the device object + if(!transparentTest.InitD3D(transparentTest.Handle)) { + MessageBox.Show("Could not initialize Direct3D."); + transparentTest.Dispose(); + return; + } + else { + // Load the textures and create the square to show them + if(!(transparentTest.CreateTextures() && transparentTest.CreateTransparentVertices(0, 0))) { + MessageBox.Show("Could not initialize vertices and textures."); + transparentTest.DisposeD3D(); + transparentTest.Dispose(); + return; + } + } + + // If we have no errors, then enter the rendering loop + while(!transparentTest.EndTest) { + transparentTest.Render(); + // Frame rate calculation + transparentTest.Text = + "Transparency Test. Frame rate: " + DirectXLists.CalcFrameRate().ToString(); + Application.DoEvents(); + } + } + } + + private void CmdMatrix_Click(object sender, System.EventArgs e) { + using (MatrixControl matrixControl = new MatrixControl()) { + MatrixTest matrixTest = new MatrixTest(); + matrixControl.Show(); + matrixTest.Show(); + + // Initialize Direct3D and the device object + if(!matrixControl.InitD3D(matrixTest.Handle)) { + MessageBox.Show("Could not initialize Direct3D."); + matrixControl.Dispose(); + return; + } + else { + // Load the textures and create the cube to show them + if(!matrixControl.CreateCube()) { + MessageBox.Show("Could not initialize geometry."); + matrixControl.DisposeD3D(); + matrixControl.Dispose(); + return; + } + } + + // Start with a simple rotation, to position the cube more nicely; + // and with no scale (100% of the original size) + + matrixControl.RotationX.Value = 45; + matrixControl.RotationY.Value = 45; + matrixControl.RotationZ.Value = 45; + matrixControl.ScaleX.Value = 100; + matrixControl.ScaleY.Value = 100; + matrixControl.ScaleZ.Value = 100; + + // Ends the test if ESC is pressed in any of the 2 windows + while(!matrixControl.EndTest && !matrixTest.EndTest) { + matrixControl.Render(); + // Frame rate calculation + matrixTest.Text = "Matrix Tests. Frame Rate: " + DirectXLists.CalcFrameRate().ToString(); + Application.DoEvents(); + } + matrixTest.Close(); + } + } + + private void CmdLight_Click(object sender, System.EventArgs e) { + LightControl winLightControl = new LightControl(); + using (LightTest lightTest = new LightTest()) { + + winLightControl.Show(); + lightTest.Show(); + + // Initialize Direct3D and the device object + if(!winLightControl.InitD3D(lightTest.Handle)) { + MessageBox.Show("Could not initialize Direct3D."); + winLightControl.Dispose(); + } + else { + // Load the textures and create the vertices + if(!winLightControl.CreateTextures()) { + MessageBox.Show("Could not initialize the textures and vertices."); + winLightControl.DisposeD3D(); + winLightControl.Dispose(); + } + } + + // Start with full white light in all vertices + + winLightControl.Red1.Value = 255; + winLightControl.Green1.Value = 255; + winLightControl.Blue1.Value = 255; + winLightControl.Red2.Value = 255; + winLightControl.Green2.Value = 255; + winLightControl.Blue2.Value = 255; + winLightControl.Red3.Value = 255; + winLightControl.Green3.Value = 255; + winLightControl.Blue3.Value = 255; + winLightControl.Red4.Value = 255; + winLightControl.Green4.Value = 255; + winLightControl.Blue4.Value = 255; + + + // Ends the test if ESC is pressed in any of the 2 windows + while(!winLightControl.EndTest && !lightTest.EndTest) { + winLightControl.Render(); + // Frame rate calculation + lightTest.Text = "Light Test. Frame Rate: " + DirectXLists.CalcFrameRate().ToString(); + Application.DoEvents(); + } + } + } + + private void CmdClose_Click(object sender, System.EventArgs e) { + this.Close(); + } + + private void AdaptersListBox_SelectedIndexChanged(object sender, System.EventArgs e) { + // Update the devices list every time a new adapter is chosen + ListDevices(AdaptersListBox.SelectedIndex); + } + + private void DevicesListBox_SelectedIndexChanged(object sender, System.EventArgs e) { + // The first entry in DevicesListBox is the Reference Rasterizer + DeviceType deviceType = (DevicesListBox.SelectedIndex == 0) ? DeviceType.Reference : DeviceType.Hardware; + ListDisplayModes(AdaptersListBox.SelectedIndex, deviceType, Format.X8R8G8B8); + ListDisplayModes(AdaptersListBox.SelectedIndex, deviceType, Format.X1R5G5B5); + ListDisplayModes(AdaptersListBox.SelectedIndex, deviceType, Format.R5G6B5); + ListDeviceCaps(AdaptersListBox.SelectedIndex, deviceType); + } + + private void ListDisplayModes(int adapter, DeviceType renderer, Format adapterFormat) { + DisplayModesListBox.Items.Clear(); + foreach(DisplayMode dispMode in Manager.Adapters[adapter].SupportedDisplayModes) { + // Check to see if the display mode is supported by the device + if(Manager.CheckDeviceType(adapter, renderer, dispMode.Format, dispMode.Format, false)) { + // Fill the display modes list with the width, height, the mode name and the refresh rate + DisplayModesListBox.Items.Add(dispMode.Width + "x" + dispMode.Height + + " ( " + dispMode.Format.ToString() + " - " + + dispMode.RefreshRate + "Khz)"); + } + } + } + + private void ListDeviceCaps(int adapter, DeviceType deviceType) { + DeviceCapsListBox.Items.Clear(); + Caps caps = Manager.GetDeviceCaps(adapter, deviceType); + DirectXLists.ListGeneralCaps(caps, DeviceCapsListBox); + DirectXLists.ListDevCaps(caps.DeviceCaps, DeviceCapsListBox); + DirectXLists.ListDriverCaps(caps.DriverCaps, DeviceCapsListBox); + DirectXLists.ListRasterCaps(caps.RasterCaps, DeviceCapsListBox); + DirectXLists.ListTextureCaps(caps.TextureCaps, DeviceCapsListBox); + } + } +} diff --git a/03-EnterDirectX/frmDirectX.resx b/03-EnterDirectX/frmDirectX.resx new file mode 100644 index 0000000..2adb5f4 --- /dev/null +++ b/03-EnterDirectX/frmDirectX.resx @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + False + + + Assembly + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + FrmDirectX + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/1488.html b/1488.html new file mode 100644 index 0000000..9f23afd --- /dev/null +++ b/1488.html @@ -0,0 +1,13 @@ +Chapter 1 .Nettrix: GDI+ and Collision Detection
+Chapter 2 .Netterpillars: Artificial Intelligence and Sprites
+Chapter 3 Managed DirectX First Steps: Direct3D Basics and DirectX vs. GDI+
+Chapter 4 Space Donuts: Sprites Revisited
+Chapter 5 Spacewar!
+Chapter 6 Spacewar3D: Meshes and Buffers and Textures, Oh My!
+Chapter 7 Adding Visual Effects to Spacewar3D
+Epilogue Taking Your Next Steps
+Bonus Chapter Porting .Nettrix to Pocket PC
+Appendix A Suggested Reading
+Appendix B Motivations in Games
+Appendix C How Do I Make Games?
+Appendix D Guidelines for Developing Successful Games \ No newline at end of file diff --git a/1489.pdf b/1489.pdf new file mode 100644 index 0000000..39b423b Binary files /dev/null and b/1489.pdf differ diff --git a/1498.pdf b/1498.pdf new file mode 100644 index 0000000..1ae04a7 Binary files /dev/null and b/1498.pdf differ diff --git a/1916.html b/1916.html new file mode 100644 index 0000000..1810a8b --- /dev/null +++ b/1916.html @@ -0,0 +1,217 @@ +C# Eratta
+ + +========================================================================
+ +Chapter 1, Page 5
+
+private PicSourcePaint...
+ +should say
+ +private void PicSourcePaint...
+ + +========================================================================
+ +Chapter 1: Page 6
+
+Graphics graph = new Graphics();
+ +This line isn't legal code. The correct code is
+ +Graphics graph;
+ +And the Graphics object must be obtained from a preexisting context.
+ + +Also, this line:
+ +graphics = Graphics.FromHwnd(picSource.Handle);
+ +should be
+ +graphics = Graphics.FromImage(picSource.Image);
+ (also note that .Image is capitalized, unlike the code sample in the
+middle of page 6)
+ + +========================================================================
+ +Chapter 1, Page 7
+
+linGrBrush = new Drawing2D.LinearGradientBrush(...)
+ +is missing a semicolon. The last line should say
+ + Color.FromArgb(255, 0, 0, 255)); //Blue
+ + + +========================================================================
+ +Chapter 1, Page 8
+
+brushSquare.SurroundColors = new Color(){Color.FromArgb(255,0,0,255)};
+ + should be
+ +brushSquare.SurroundColors = new Color[]{Color.FromArgb(255,0,0,255)};
+ + +And...
+ +Graph.FillPath(brushSquare, graphPath);
+ +should be
+ +graph.FillPath(brushSquare, graphPath);
+ + +========================================================================
+ +Chapter 1, Page 10
+
+if(Dx > (r1.extentX+r2.extentX) && (Dy > (r1.extentY+r2.extentY))...
+ +should be
+ +if((Dx < (r1.extentX+r2.extentX)) && (Dy < (r1.extentY+r2.extentY))
+ //overlap
+else
+ //no overlap
+ + +========================================================================
+ +Chapter 1, Page 16
+
+Some readers have indicated that the Implementation of CircleIntersect at the bottom of Page 18 is erroneous,
+indicating that the call to Math.Sqr (squaring function) should be Math.Sqrt (Square root). This is not an error.
+Kind of. The error is that we should have used Math.Pow. Math.Sqr isn't a valid function. In addition, the return
+result:
+ return (Radius*Radius) < dist;
+should be
+ return dist < (Radius*Radius);
+ +In order to simplify understanding this collision test, I've added a class and an Nunit test harness to help.
+The class is AxisAlignedBoundingBox and the test is AABBTest. Please refer to this code instead of the code
+snippets on page 16.
+ +========================================================================
+ +Chapter 1, Page 19
+
+Figure 1-17 says
+ +Dividing a screen into 64 zones
+ + should say
+ +Dividing a screen into 256 zones
+ +========================================================================
+ + + +Chapter 1, Page 22
+
+The extension to Arvo's algorithm on this page is incorrect. Adding a Z axis
+check to the AxisAlignedBoundingBox and test code (mentioned above) will yield
+correct results.
+ +========================================================================
+ +Chapter 1, Page 34
+
+square.Draw(picBackground.Handle);
+ +should be
+ +square.Show(picBackground.Handle);
+ + +========================================================================
+ +Chapter 1, Page 35
+
+square.Draw(picBackground.Handle);
+ +should be
+ +square.Show(picBackground.Handle);
+ + +========================================================================
+ +Chapter 1, Page 38
+
+case BlockTypes.Square:
+ square1.Location = new Point(Location.X, Location.Y);
+ square2.Location = new Point(Location.X+squareSize, Location.Y);
+ square3.Location = new Point(Location.X, Location.Y+squareSize);
+ square4.Location = new Point(Location.X+squareSize, Location.Y+squareSize);
+ break;
+ +should be
+ +case BlockTypes.Square:
+ square1.Location = new Point(location.X, location.Y);
+ square2.Location = new Point(location.X+squareSize, location.Y);
+ square3.Location = new Point(location.X, location.Y+squareSize);
+ square4.Location = new Point(location.X+squareSize, location.Y+squareSize);
+ break;
+ + +========================================================================
+ +Chapter 1,Pages 39-42
+
+squareN.location
+ +should be
+ +squareN.Location
+ +========================================================================
+ +Chapter 1, page 49
+
+private void CmdStart_Click event handler must have this value set somewhere
+in the method:
+ CmdStart.Enabled = false;
+ +========================================================================
+ +Chapter 6, pg 294
+
+The new SDK simply returns an identical reference to a mesh if you call Mesh.Clean and nothing changes,
+so these lines of code:
+ +tempMesh = Mesh.Clean(CleanType.Optimization, systemMemoryMesh, adjacencyBuffer, adjacencyBuffer, out errorString);
+systemMemoryMesh.Dispose();
+systemMemoryMesh = tempMesh;
+ +Will yield a nulled SystemMemoryMesh if Mesh.Clean does nothing. You must explicitly check to verify that the meshes
+are identical by using the Equals method:
+ +tempMesh = Mesh.Clean(CleanType.Optimization, systemMemoryMesh, adjacencyBuffer, adjacencyBuffer, out errorString);
+if (tempMesh != systemMemoryMesh) {
+ systemMemoryMesh.Dispose();
+ systemMemoryMesh = tempMesh;
+}
+ +========================================================================
+ + +Chapter 6, pg 295
+
+The Managed DirectX mesh flag OptimizeAttrSort has been changed to OptimizeAttributeSort to conform to Microsoft
+coding standards.
+ +========================================================================
+ +Chapter 6/7
+
+The shell code for the Spacewar3D game used the PureDevice flag when creating the device caps. This resulted in
+very strange side-effects or non-functional programs. That flag has been terminated with prejudice.
diff --git a/9781590593196.jpg b/9781590593196.jpg new file mode 100644 index 0000000..8dae9db Binary files /dev/null and b/9781590593196.jpg differ diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..c37cf3b --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,27 @@ +Freeware License, some rights reserved + +Copyright (c) 2004 David Weller, Alexandre Santos Lobao, and Ellen Hatton + +Permission is hereby granted, free of charge, to anyone obtaining a copy +of this software and associated documentation files (the "Software"), +to work with the Software within the limits of freeware distribution and fair use. +This includes the rights to use, copy, and modify the Software for personal use. +Users are also allowed and encouraged to submit corrections and modifications +to the Software for the benefit of other users. + +It is not allowed to reuse, modify, or redistribute the Software for +commercial use in any way, or for a user’s educational materials such as books +or blog articles without prior permission from the copyright holder. + +The above copyright notice and this permission notice need to be included +in all copies or substantial portions of the software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS OR APRESS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..59fb11b --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +#Apress Source Code + +This repository accompanies [*Beginning .NET Game Programming in C#*](http://www.apress.com/9781590593196) by David Weller, Alexandre Santos Lobao, and Ellen Hatton (Apress, 2004). + +![Cover image](9781590593196.jpg) + +Download the files as a zip using the green button, or clone the repository to your machine using Git. + +##Releases + +Release v1.0 corresponds to the code in the published book, without corrections or updates. + +##Contributions + +See the file Contributing.md for more information on how you can contribute to this repository. diff --git a/Source Code updated 08-12-05/AABBTest/AABBTest.csproj b/Source Code updated 08-12-05/AABBTest/AABBTest.csproj new file mode 100644 index 0000000..221b39f --- /dev/null +++ b/Source Code updated 08-12-05/AABBTest/AABBTest.csproj @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/AABBTest/AABBTest.sln b/Source Code updated 08-12-05/AABBTest/AABBTest.sln new file mode 100644 index 0000000..0229fab --- /dev/null +++ b/Source Code updated 08-12-05/AABBTest/AABBTest.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AABBTest", "AABBTest.csproj", "{C844067B-842A-4271-919F-3E21201C0DED}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {C844067B-842A-4271-919F-3E21201C0DED}.Debug.ActiveCfg = Debug|.NET + {C844067B-842A-4271-919F-3E21201C0DED}.Debug.Build.0 = Debug|.NET + {C844067B-842A-4271-919F-3E21201C0DED}.Release.ActiveCfg = Release|.NET + {C844067B-842A-4271-919F-3E21201C0DED}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/AABBTest/App.ico b/Source Code updated 08-12-05/AABBTest/App.ico new file mode 100644 index 0000000..3a5525f Binary files /dev/null and b/Source Code updated 08-12-05/AABBTest/App.ico differ diff --git a/Source Code updated 08-12-05/AABBTest/AssemblyInfo.cs b/Source Code updated 08-12-05/AABBTest/AssemblyInfo.cs new file mode 100644 index 0000000..9f89a32 --- /dev/null +++ b/Source Code updated 08-12-05/AABBTest/AssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/Source Code updated 08-12-05/AABBTest/Test1.cs b/Source Code updated 08-12-05/AABBTest/Test1.cs new file mode 100644 index 0000000..d104657 --- /dev/null +++ b/Source Code updated 08-12-05/AABBTest/Test1.cs @@ -0,0 +1,33 @@ +using System; +using NUnit.Framework; +using AxisAlignedBoundingBox; +namespace AABBTest { + + [TestFixture] + public class SimpleTest { + protected AABB testBox1; + + [SetUp] public void Init() { + testBox1 = new AABB(2,2,6,6); + } + + [Test] public void OutsideCircle() { + bool result = testBox1.CircleIntersect(8,8,1); + // forced false result + Assert.IsFalse(result, "Expected False."); + } + + [Test] public void InsideCircle() { + bool result = testBox1.CircleIntersect(3,3,1); + Assert.IsTrue(result, "Expected True."); + } + [Test] public void OnCircle() { + bool result = testBox1.CircleIntersect(2,2,1); + Assert.IsTrue(result, "Expected True."); + } + [Test] public void OverlapsCircle() { + bool result = testBox1.CircleIntersect(7,7,1.5f); + Assert.IsTrue(result, "Expected True."); + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/AxisAlignedBoundingBox/AABB.cs b/Source Code updated 08-12-05/AxisAlignedBoundingBox/AABB.cs new file mode 100644 index 0000000..3fd601d --- /dev/null +++ b/Source Code updated 08-12-05/AxisAlignedBoundingBox/AABB.cs @@ -0,0 +1,59 @@ +using System; +using System.Drawing; + +namespace AxisAlignedBoundingBox +{ + /// + /// Summary description for Class1. + /// + public struct AABB + { + private float topLeftX, topLeftY; //Coordinate top left of the box + private float bottomRightX, bottomRightY; //Coordinate lower right of the box + private float boxMinX, boxMaxX, boxMinY, boxMaxY; + + //Constructor + public AABB (float tlX, float tlY, float brX, float brY) { + topLeftX = tlX; + topLeftY = tlY; + bottomRightX = brX; + bottomRightY = brY; + if (topLeftX < bottomRightX) { + boxMinX = topLeftX; + boxMaxX = bottomRightX; + } else { + boxMaxX = topLeftX; + boxMinX = bottomRightX; + } + if (topLeftY < bottomRightY) { + boxMinY = topLeftY; + boxMaxY = bottomRightY; + } else { + boxMaxY = topLeftY; + boxMinY = bottomRightY; + } + } + + public float MaxX { get { return boxMaxX; } } + public float MinX { get { return boxMinX; } } + public float MaxY { get { return boxMaxY; } } + public float MinY { get { return boxMinY; } } + + public bool CircleIntersect (float CircleCenterX, float CircleCenterY, float Radius) { + double dist = 0; + //Check x axis. If Circle is outside box limits, add to distance. + if (CircleCenterX < this.MinX) + dist += Math.Pow(CircleCenterX - this.MinX, 2.0); + else if (CircleCenterX > this.MaxX) + dist += Math.Pow(CircleCenterX - this.MaxX, 2.0); + //Check y axis. If Circle is outside box limits, add to distance. + if (CircleCenterY < this.MinY) + dist += Math.Pow(CircleCenterY - this.MinY, 2.0); + else if (CircleCenterY > this.MaxY) + dist += Math.Pow(CircleCenterY - this.MaxY, 2.0); + //Now that distances along x and y axis are added, check if the square + //of the Circle's radius is longer and return the boolean result. + return dist < (Radius*Radius); + } + } +} diff --git a/Source Code updated 08-12-05/AxisAlignedBoundingBox/AssemblyInfo.cs b/Source Code updated 08-12-05/AxisAlignedBoundingBox/AssemblyInfo.cs new file mode 100644 index 0000000..9f89a32 --- /dev/null +++ b/Source Code updated 08-12-05/AxisAlignedBoundingBox/AssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/Source Code updated 08-12-05/AxisAlignedBoundingBox/AxisAlignedBoundingBox.csproj b/Source Code updated 08-12-05/AxisAlignedBoundingBox/AxisAlignedBoundingBox.csproj new file mode 100644 index 0000000..6193cec --- /dev/null +++ b/Source Code updated 08-12-05/AxisAlignedBoundingBox/AxisAlignedBoundingBox.csproj @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/AxisAlignedBoundingBox/AxisAlignedBoundingBox.sln b/Source Code updated 08-12-05/AxisAlignedBoundingBox/AxisAlignedBoundingBox.sln new file mode 100644 index 0000000..c84e707 --- /dev/null +++ b/Source Code updated 08-12-05/AxisAlignedBoundingBox/AxisAlignedBoundingBox.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AxisAlignedBoundingBox", "AxisAlignedBoundingBox.csproj", "{6A8D9A45-45E4-4407-9939-BDE53EB74D26}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {6A8D9A45-45E4-4407-9939-BDE53EB74D26}.Debug.ActiveCfg = Debug|.NET + {6A8D9A45-45E4-4407-9939-BDE53EB74D26}.Debug.Build.0 = Debug|.NET + {6A8D9A45-45E4-4407-9939-BDE53EB74D26}.Release.ActiveCfg = Release|.NET + {6A8D9A45-45E4-4407-9939-BDE53EB74D26}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/EnterDirectX/App.ico b/Source Code updated 08-12-05/EnterDirectX/App.ico new file mode 100644 index 0000000..3a5525f Binary files /dev/null and b/Source Code updated 08-12-05/EnterDirectX/App.ico differ diff --git a/Source Code updated 08-12-05/EnterDirectX/AssemblyInfo.cs b/Source Code updated 08-12-05/EnterDirectX/AssemblyInfo.cs new file mode 100644 index 0000000..bf44131 --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/AssemblyInfo.cs @@ -0,0 +1,59 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: System.CLSCompliant(true)] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/Source Code updated 08-12-05/EnterDirectX/DirectXLists.cs b/Source Code updated 08-12-05/EnterDirectX/DirectXLists.cs new file mode 100644 index 0000000..6242246 --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/DirectXLists.cs @@ -0,0 +1,234 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + +namespace EnterDirectX { + /// + /// Summary description for DirectXLists. + /// + public class DirectXLists { + private static int FrameRate, LastFrameRate, LastTick; + + private DirectXLists() {} + + public static int CalcFrameRate() { + // Frame rate calculation + if(System.Environment.TickCount - LastTick >= 1000) { + LastFrameRate = FrameRate; + FrameRate = 0; + LastTick = System.Environment.TickCount; + } + FrameRate++; + return LastFrameRate; + } + + public static string DisplayModeName(Format modeFormat) { + return modeFormat.ToString(); + } + + public static void ListGeneralCaps(Caps devCaps, ListBox listCaps) { + listCaps.Items.Add(" ----- General Caps ------------------------"); + if(devCaps.MaxActiveLights == -1) { + listCaps.Items.Add("Maximum Active Lights: Unlimited"); + } + else { + listCaps.Items.Add("Maximum Active Lights: " + devCaps.MaxActiveLights); + } + if(devCaps.MaxPointSize == 1) { + listCaps.Items.Add("Device does not support point size control"); + } + else { + listCaps.Items.Add("Maximum point primitive size: " + devCaps.MaxPointSize); + } + listCaps.Items.Add("Maximum Primitives in each DrawPrimitives call: " + devCaps.MaxPrimitiveCount); + listCaps.Items.Add("Maximum textures simultaneously bound: " + devCaps.MaxSimultaneousTextures); + listCaps.Items.Add("Maximum Texture aspect ratio: " + devCaps.MaxTextureAspectRatio); + listCaps.Items.Add("Maximum Texture size: " + devCaps.MaxTextureWidth + "x" + devCaps.MaxTextureHeight); + listCaps.Items.Add("Maximum matrixes blending: " + devCaps.MaxVertexBlendMatrices); + listCaps.Items.Add("Maximum vertex shaders registers: " + devCaps.MaxVertexShaderConst); + } + + public static void ListTextureCaps(TextureCaps textureCaps, ListBox listCaps) { + listCaps.Items.Add(" ----- Texture Caps ------------------------"); + if(textureCaps.SupportsPerspective) { + listCaps.Items.Add("Perspective correction texturing is supported. "); + } + if(textureCaps.SupportsPower2) { + listCaps.Items.Add("All textures must have widths and heights specified as powers of 2. " + + "This requirement does not apply to either cube textures or volume textures. "); + } + if(textureCaps.SupportsAlpha) { + listCaps.Items.Add("Alpha in texture pixels is supported. "); + } + if(textureCaps.SupportsSquareOnly) { + listCaps.Items.Add("All textures must be square. "); + } + if(textureCaps.SupportsTextureRepeatNotScaledBySize) { + listCaps.Items.Add("Texture indices are not scaled by the texture size prior to interpolation. "); + } + if(textureCaps.SupportsAlphaPalette) { + listCaps.Items.Add("Device can draw alpha from texture palettes. "); + } + if(textureCaps.SupportsNonPower2Conditional) { + listCaps.Items.Add("Conditionally supports the use of textures with dimensions that are not powers of 2.. "); + } + if(textureCaps.SupportsProjected) { + listCaps.Items.Add("Supports the projected texture transformation flag. "); + } + if(textureCaps.SupportsCubeMap) { + listCaps.Items.Add("Supports cube textures. "); + } + if(textureCaps.SupportsVolumeMap) { + listCaps.Items.Add("Device supports volume textures. "); + } + if(textureCaps.SupportsMipMap) { + listCaps.Items.Add("Device supports mipmapped textures. "); + } + if(textureCaps.SupportsMipVolumeMap) { + listCaps.Items.Add("Device supports mipmapped textures. "); + } + if(textureCaps.SupportsMipCubeMap) { + listCaps.Items.Add("Device supports mipmapped cube textures. "); + } + if(textureCaps.SupportsCubeMapPower2) { + listCaps.Items.Add("Device requires that cube texture maps have dimensions specified as powers of 2. "); + } + if(textureCaps.SupportsVolumeMapPower2) { + listCaps.Items.Add("Device requires that volume texture maps have dimensions specified as powers of 2. "); + } + } + + public static void ListRasterCaps(RasterCaps rasterCaps, ListBox listCaps) { + listCaps.Items.Add(" ----- Rasterizer Caps ------------------------"); + if(rasterCaps.SupportsDither) { + listCaps.Items.Add("The device can dither to improve color resolution."); + } + + + if(rasterCaps.SupportsZBufferTest) { + listCaps.Items.Add("The device can perform z-test operations."); + } + + if(rasterCaps.SupportsFogVertex) { + listCaps.Items.Add("The device calculates the fog value during the lighting operation using the D3DTLVERTEX. "); + } + + if(rasterCaps.SupportsFogTable) { + listCaps.Items.Add("The device calculates the fog value by referring to a lookup table."); + } + + if(rasterCaps.SupportsMipMapLevelOfDetailBias) { + listCaps.Items.Add("The device supports level-of-detail (LOD) bias adjustments. "); + } + + if(rasterCaps.SupportsDepthBias) { + listCaps.Items.Add("The device supports depth bias values."); + } + + if(rasterCaps.SupportsZBufferLessHsr) { + listCaps.Items.Add("The device can perform hidden-surface removal (HSR) without requiring the allocation of a depth-buffer"); + } + + if(rasterCaps.SupportsFogRange) { + listCaps.Items.Add("The device supports range-based fog."); + } + + if(rasterCaps.SupportsAnisotropy) { + listCaps.Items.Add("The device supports anisotropic filtering."); + } + + if(rasterCaps.SupportsWBuffer) { + listCaps.Items.Add("The device supports depth buffering using w. "); + } + + if(rasterCaps.SupportsWFog) { + listCaps.Items.Add("The device supports w-based fog. "); + } + + if(rasterCaps.SupportsZFog) { + listCaps.Items.Add("The device supports z-based fog. "); + } + + if(rasterCaps.SupportsColorPerspective) { + listCaps.Items.Add("The device iterates colors perspective correct."); + } + } + + public static void ListDriverCaps(DriverCaps driverCaps, ListBox listCaps) { + listCaps.Items.Add(" ----- Driver Caps ------------------------"); + if(driverCaps.SupportsDynamicTextures) { + listCaps.Items.Add("The driver support Dynamic textures"); + } + + if(driverCaps.CanCalibrateGamma) { + listCaps.Items.Add("The driver can automatically adjust the gamma ramp"); + } + + if(driverCaps.SupportsFullscreenGamma) { + listCaps.Items.Add("The driver supports dynamic gamma ramp adjustment in full-screen mode. "); + } + } + + public static void ListDevCaps(DeviceCaps devCaps, ListBox listCaps) { + listCaps.Items.Add(" ----- Device Caps ------------------------"); + + if(devCaps.SupportsExecuteSystemMemory) { + listCaps.Items.Add("Device can use execute buffers from system memory."); + } + if(devCaps.SupportsExecuteVideoMemory) { + listCaps.Items.Add("Device can use execute buffers from video memory. "); + } + if(devCaps.SupportsTransformedVertexSystemMemory) { + listCaps.Items.Add("Device can use buffers from system memory for transformed and lit vertices. "); + } + if(devCaps.SupportsTransformedVertexVideoMemory) { + listCaps.Items.Add("Device can use buffers from video memory for transformed and lit vertices. "); + } + if(devCaps.SupportsTextureSystemMemory) { + listCaps.Items.Add("Device can retrieve textures from system memory. "); + } + if(devCaps.SupportsTextureVideoMemory) { + listCaps.Items.Add("Device can retrieve textures from device memory."); + } + if(devCaps.SupportsDrawPrimitivesTransformedVertex) { + listCaps.Items.Add("Device exports a DrawPrimitives-aware hardware abstraction layer (HAL)."); + } + if(devCaps.CanRenderAfterFlip) { + listCaps.Items.Add("Device can queue rendering commands after a page flip."); + } + if(devCaps.SupportsTextureNonLocalVideoMemory) { + listCaps.Items.Add("Device can retrieve textures from nonlocal video memory. "); + } + if(devCaps.SupportsSeparateTextureMemories) { + listCaps.Items.Add("Device is texturing from separate memory pools. "); + } + if(devCaps.SupportsHardwareTransformAndLight) { + listCaps.Items.Add("Device can support transformation and lighting in hardware. "); + } + if(devCaps.CanDrawSystemToNonLocal) { + listCaps.Items.Add("Device supports blits from system-memory textures to nonlocal video-memory textures. "); + } + if(devCaps.SupportsHardwareRasterization) { + listCaps.Items.Add("Device has hardware acceleration for scene rasterization. "); + } + if(devCaps.SupportsPureDevice) { + listCaps.Items.Add("Device can support rasterization, transform, lighting, and shading in hardware. "); + } + if(devCaps.SupportsQuinticRtPatches) { + listCaps.Items.Add("Device supports quintic béziers and B-splines."); + } + if(devCaps.SupportsRtPatches) { + listCaps.Items.Add("Device supports high-order surfaces. "); + } + if(devCaps.SupportsRtPatchHandleZero) { + listCaps.Items.Add("High-order surfaces can be drawn efficiently using a handle value of 0. "); + } + if(devCaps.SupportsNPatches) { + listCaps.Items.Add("Device supports N patches. "); + } + } + } +} diff --git a/Source Code updated 08-12-05/EnterDirectX/EnterDirectX.csproj b/Source Code updated 08-12-05/EnterDirectX/EnterDirectX.csproj new file mode 100644 index 0000000..367ace2 --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/EnterDirectX.csproj @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/EnterDirectX/EnterDirectX.sln b/Source Code updated 08-12-05/EnterDirectX/EnterDirectX.sln new file mode 100644 index 0000000..6450893 --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/EnterDirectX.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnterDirectX", "EnterDirectX.csproj", "{8A6C5071-CD17-4F18-BCF3-7FD680A11FAE}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {8A6C5071-CD17-4F18-BCF3-7FD680A11FAE}.Debug.ActiveCfg = Debug|.NET + {8A6C5071-CD17-4F18-BCF3-7FD680A11FAE}.Debug.Build.0 = Debug|.NET + {8A6C5071-CD17-4F18-BCF3-7FD680A11FAE}.Release.ActiveCfg = Release|.NET + {8A6C5071-CD17-4F18-BCF3-7FD680A11FAE}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/EnterDirectX/FullScreenTest.cs b/Source Code updated 08-12-05/EnterDirectX/FullScreenTest.cs new file mode 100644 index 0000000..f30b612 --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/FullScreenTest.cs @@ -0,0 +1,193 @@ +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace EnterDirectX { + public class FullScreenTest: System.Windows.Forms.Form { + private bool endTest = false; + + public bool EndTest { + get { return endTest; } + } + + int numVerts = 4; + Device device = null; + VertexBuffer vertBuffer = null; + Texture[] textures = new Texture[10]; + private static int x = 0; + + // Simple textured vertices constant and structure + private const VertexFormats customVertex = VertexFormats.Transformed|VertexFormats.Texture1; + + private struct CustomVertex { + public float X; + public float Y; + public float Z; + public float rhw; + public float tu; + public float tv; + } + + + #region " Windows Form Designer generated code " + + public FullScreenTest() : base() { + + //This call is required by the Windows Form Designer. + InitializeComponent(); + + //Add any initialization after the InitializeComponent() call + + } + + //Form overrides dispose to clean up the component list. + protected override void Dispose(bool disposing) { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + //Required by the Windows Form Designer + private System.ComponentModel.IContainer components; + + //NOTE: The following procedure is required by the Windows Form Designer + //It can be modified using the Windows Form Designer. + //Do not modify it using the code editor. + [System.Diagnostics.DebuggerStepThrough] + private void InitializeComponent() { + // + // FullScreenTest + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(1119, 741); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.KeyPreview = true; + this.Name = "FullScreenTest"; + this.Text = "TestFullScreen"; + this.TopMost = true; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.FullScreenTest_KeyDown); + this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.FullScreenTest_MouseDown); + this.Closing += new System.ComponentModel.CancelEventHandler(this.FullScreenTest_Closing); + + } + + #endregion + + private void FullScreenTest_KeyDown(object sender, KeyEventArgs e) { + if (e.KeyCode==Keys.Escape) { + endTest = true; + } + } + private void FullScreenTest_MouseDown(object sender, MouseEventArgs e) { + endTest = true; + } + + + public void DisposeD3D() { + for(int i=0; i<=9; i++) { + if ((textures[i] != null)) {textures[i].Dispose();} + textures[i] = null; + } + + if ((vertBuffer != null)) {vertBuffer.Dispose();} + vertBuffer = null; + + if ((device != null)) {device.Dispose();} + device = null; + } + + public bool InitD3D(System.IntPtr winHandle) { + DisplayMode DispMode = Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode; + PresentParameters presentParams = new PresentParameters(); + // Define the presentation parameters + presentParams.BackBufferFormat = DispMode.Format; + presentParams.BackBufferWidth = DispMode.Width; + presentParams.BackBufferHeight = DispMode.Height; + presentParams.SwapEffect = SwapEffect.Discard; + // Try to create the device + try { + device = new Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, winHandle, CreateFlags.SoftwareVertexProcessing, presentParams); + device.VertexFormat = customVertex; + return true; + } + catch { + return false; + } + } + + public bool CreateTextures() { + CustomVertex[] verts; + try { + for(int i=1; i<=10; i++) { + textures[i-1] = TextureLoader.FromFile(device, Application.StartupPath+"\\Walk"+i.ToString()+".bmp"); + } + vertBuffer = new VertexBuffer(typeof(CustomVertex), numVerts, + device, Usage.WriteOnly, customVertex, Pool.Default); + verts = vertBuffer.Lock(0, 0) as CustomVertex[]; + SquareVertices(verts); + vertBuffer.Unlock(); + return true; + } + catch { + return false; + } + } + + private void SquareVertices(CustomVertex[] vertices) { + DisplayMode mode = Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode; + // Create a square, composed of 2 triangles, taking all the screen + vertices[0] = CreateFlexVertex(0, 0, 0, 1, 0, 0); + vertices[1] = CreateFlexVertex(mode.Width, 0, 0, 1, 1, 0); + vertices[2] = CreateFlexVertex(0, mode.Height, 0, 1, 0, 1); + vertices[3] = CreateFlexVertex(mode.Width, mode.Height, 0, 1, 1, 1); + } + + private CustomVertex CreateFlexVertex(float X, float Y, float Z, float rhw, float tu, float tv) { + CustomVertex cv; + cv.X = X; + cv.Y = Y; + cv.Z = Z; + cv.rhw = rhw; + cv.tu = tu; + cv.tv = tv; + return cv; + } + + public void Render() { + if ((device==null)) {return;} + + device.Clear(ClearFlags.Target, Color.FromArgb(0, 0, 255).ToArgb(), 1.0F, 0); + device.BeginScene(); + + // Show one texture a time, in order to create the illusion of a walking guy + device.SetTexture(0, textures[x]); + x = (x == 9) ? 0 : x+1; //If x is 9, set to 0, otherwise increment x + device.SetStreamSource(0, vertBuffer, 0); + device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, numVerts-2); + device.EndScene(); + try { + device.Present(); + } + catch { + } + } + + private void FullScreenTest_Closing(object sender, System.ComponentModel.CancelEventArgs e) { + endTest = true; + DisposeD3D(); + } + } +} + + + + diff --git a/Source Code updated 08-12-05/EnterDirectX/FullScreenTest.resx b/Source Code updated 08-12-05/EnterDirectX/FullScreenTest.resx new file mode 100644 index 0000000..e78abba --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/FullScreenTest.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + (Default) + + + False + + + False + + + FullScreenTest + + + 8, 8 + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/EnterDirectX/LightControl.cs b/Source Code updated 08-12-05/EnterDirectX/LightControl.cs new file mode 100644 index 0000000..ff0a76e --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/LightControl.cs @@ -0,0 +1,764 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace EnterDirectX { + /// + /// Summary description for LC. + /// + public class LightControl : System.Windows.Forms.Form { + #region class components for Windows Form + internal System.Windows.Forms.TabControl TabControl1; + internal System.Windows.Forms.TabPage Vertex1; + internal System.Windows.Forms.GroupBox GroupBox1; + internal System.Windows.Forms.Label lblBlue1; + internal System.Windows.Forms.NumericUpDown Blue1; + internal System.Windows.Forms.Label lblGreen1; + internal System.Windows.Forms.NumericUpDown Green1; + internal System.Windows.Forms.Label lblRed1; + internal System.Windows.Forms.NumericUpDown Red1; + internal System.Windows.Forms.TabPage Vertex2; + internal System.Windows.Forms.GroupBox GroupBox2; + internal System.Windows.Forms.Label lblBlue2; + internal System.Windows.Forms.NumericUpDown Blue2; + internal System.Windows.Forms.Label lblGreen2; + internal System.Windows.Forms.NumericUpDown Green2; + internal System.Windows.Forms.Label LblRed2; + internal System.Windows.Forms.NumericUpDown Red2; + internal System.Windows.Forms.TabPage Vertex3; + internal System.Windows.Forms.GroupBox GroupBox3; + internal System.Windows.Forms.Label lblBlue3; + internal System.Windows.Forms.NumericUpDown Blue3; + internal System.Windows.Forms.Label lblGreen3; + internal System.Windows.Forms.NumericUpDown Green3; + internal System.Windows.Forms.Label lblRed3; + internal System.Windows.Forms.NumericUpDown Red3; + internal System.Windows.Forms.TabPage Vertex4; + internal System.Windows.Forms.GroupBox GroupBox4; + internal System.Windows.Forms.Label lblBlue4; + internal System.Windows.Forms.NumericUpDown Blue4; + internal System.Windows.Forms.Label lblGreen4; + internal System.Windows.Forms.NumericUpDown Green4; + internal System.Windows.Forms.Label lblRed4; + internal System.Windows.Forms.NumericUpDown Red4; + #endregion + + private System.ComponentModel.Container components = null; + private static int x = 0; + private bool endTest = false; + + public bool EndTest { + get { return endTest; } + } + + private Device device; + private int numVerts = 4; + private VertexBuffer vertBuffer; + private const int numTextures = 10; + private Texture[] textures = new Texture[numTextures]; + private const VertexFormats customVertex = VertexFormats.Transformed | + VertexFormats.Diffuse | + VertexFormats.Texture1; + private struct CustomVertex { + public float X; + public float Y; + public float Z; + public float rhw; + public int color; + public float tu; + public float tv; + } + + + public LightControl() { + InitializeComponent(); + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.TabControl1 = new System.Windows.Forms.TabControl(); + this.Vertex1 = new System.Windows.Forms.TabPage(); + this.GroupBox1 = new System.Windows.Forms.GroupBox(); + this.lblBlue1 = new System.Windows.Forms.Label(); + this.Blue1 = new System.Windows.Forms.NumericUpDown(); + this.lblGreen1 = new System.Windows.Forms.Label(); + this.Green1 = new System.Windows.Forms.NumericUpDown(); + this.lblRed1 = new System.Windows.Forms.Label(); + this.Red1 = new System.Windows.Forms.NumericUpDown(); + this.Vertex2 = new System.Windows.Forms.TabPage(); + this.GroupBox2 = new System.Windows.Forms.GroupBox(); + this.lblBlue2 = new System.Windows.Forms.Label(); + this.Blue2 = new System.Windows.Forms.NumericUpDown(); + this.lblGreen2 = new System.Windows.Forms.Label(); + this.Green2 = new System.Windows.Forms.NumericUpDown(); + this.LblRed2 = new System.Windows.Forms.Label(); + this.Red2 = new System.Windows.Forms.NumericUpDown(); + this.Vertex3 = new System.Windows.Forms.TabPage(); + this.GroupBox3 = new System.Windows.Forms.GroupBox(); + this.lblBlue3 = new System.Windows.Forms.Label(); + this.Blue3 = new System.Windows.Forms.NumericUpDown(); + this.lblGreen3 = new System.Windows.Forms.Label(); + this.Green3 = new System.Windows.Forms.NumericUpDown(); + this.lblRed3 = new System.Windows.Forms.Label(); + this.Red3 = new System.Windows.Forms.NumericUpDown(); + this.Vertex4 = new System.Windows.Forms.TabPage(); + this.GroupBox4 = new System.Windows.Forms.GroupBox(); + this.lblBlue4 = new System.Windows.Forms.Label(); + this.Blue4 = new System.Windows.Forms.NumericUpDown(); + this.lblGreen4 = new System.Windows.Forms.Label(); + this.Green4 = new System.Windows.Forms.NumericUpDown(); + this.lblRed4 = new System.Windows.Forms.Label(); + this.Red4 = new System.Windows.Forms.NumericUpDown(); + this.TabControl1.SuspendLayout(); + this.Vertex1.SuspendLayout(); + this.GroupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.Blue1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red1)).BeginInit(); + this.Vertex2.SuspendLayout(); + this.GroupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.Blue2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red2)).BeginInit(); + this.Vertex3.SuspendLayout(); + this.GroupBox3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.Blue3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red3)).BeginInit(); + this.Vertex4.SuspendLayout(); + this.GroupBox4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.Blue4)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green4)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red4)).BeginInit(); + this.SuspendLayout(); + // + // TabControl1 + // + this.TabControl1.Controls.Add(this.Vertex1); + this.TabControl1.Controls.Add(this.Vertex2); + this.TabControl1.Controls.Add(this.Vertex3); + this.TabControl1.Controls.Add(this.Vertex4); + this.TabControl1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.TabControl1.Location = new System.Drawing.Point(0, 0); + this.TabControl1.Name = "TabControl1"; + this.TabControl1.SelectedIndex = 0; + this.TabControl1.Size = new System.Drawing.Size(256, 184); + this.TabControl1.TabIndex = 9; + // + // Vertex1 + // + this.Vertex1.Controls.Add(this.GroupBox1); + this.Vertex1.Location = new System.Drawing.Point(4, 24); + this.Vertex1.Name = "Vertex1"; + this.Vertex1.Size = new System.Drawing.Size(248, 156); + this.Vertex1.TabIndex = 0; + this.Vertex1.Text = "Vertex 1"; + // + // GroupBox1 + // + this.GroupBox1.Controls.Add(this.lblBlue1); + this.GroupBox1.Controls.Add(this.Blue1); + this.GroupBox1.Controls.Add(this.lblGreen1); + this.GroupBox1.Controls.Add(this.Green1); + this.GroupBox1.Controls.Add(this.lblRed1); + this.GroupBox1.Controls.Add(this.Red1); + this.GroupBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.GroupBox1.Location = new System.Drawing.Point(32, 8); + this.GroupBox1.Name = "GroupBox1"; + this.GroupBox1.Size = new System.Drawing.Size(184, 144); + this.GroupBox1.TabIndex = 2; + this.GroupBox1.TabStop = false; + this.GroupBox1.Text = "Color"; + // + // lblBlue1 + // + this.lblBlue1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblBlue1.Location = new System.Drawing.Point(8, 106); + this.lblBlue1.Name = "lblBlue1"; + this.lblBlue1.Size = new System.Drawing.Size(80, 24); + this.lblBlue1.TabIndex = 5; + this.lblBlue1.Text = "Blue"; + // + // Blue1 + // + this.Blue1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Blue1.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Blue1.Location = new System.Drawing.Point(96, 104); + this.Blue1.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Blue1.Name = "Blue1"; + this.Blue1.Size = new System.Drawing.Size(56, 29); + this.Blue1.TabIndex = 4; + this.Blue1.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // lblGreen1 + // + this.lblGreen1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblGreen1.Location = new System.Drawing.Point(8, 66); + this.lblGreen1.Name = "lblGreen1"; + this.lblGreen1.Size = new System.Drawing.Size(80, 24); + this.lblGreen1.TabIndex = 3; + this.lblGreen1.Text = "Green"; + // + // Green1 + // + this.Green1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Green1.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Green1.Location = new System.Drawing.Point(96, 64); + this.Green1.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Green1.Name = "Green1"; + this.Green1.Size = new System.Drawing.Size(56, 29); + this.Green1.TabIndex = 2; + this.Green1.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // lblRed1 + // + this.lblRed1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblRed1.Location = new System.Drawing.Point(8, 26); + this.lblRed1.Name = "lblRed1"; + this.lblRed1.Size = new System.Drawing.Size(80, 24); + this.lblRed1.TabIndex = 1; + this.lblRed1.Text = "Red"; + // + // Red1 + // + this.Red1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Red1.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Red1.Location = new System.Drawing.Point(96, 24); + this.Red1.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Red1.Name = "Red1"; + this.Red1.Size = new System.Drawing.Size(56, 29); + this.Red1.TabIndex = 0; + this.Red1.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // Vertex2 + // + this.Vertex2.Controls.Add(this.GroupBox2); + this.Vertex2.Location = new System.Drawing.Point(4, 24); + this.Vertex2.Name = "Vertex2"; + this.Vertex2.Size = new System.Drawing.Size(248, 156); + this.Vertex2.TabIndex = 1; + this.Vertex2.Text = "Vertex2"; + this.Vertex2.Visible = false; + // + // GroupBox2 + // + this.GroupBox2.Controls.Add(this.lblBlue2); + this.GroupBox2.Controls.Add(this.Blue2); + this.GroupBox2.Controls.Add(this.lblGreen2); + this.GroupBox2.Controls.Add(this.Green2); + this.GroupBox2.Controls.Add(this.LblRed2); + this.GroupBox2.Controls.Add(this.Red2); + this.GroupBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.GroupBox2.Location = new System.Drawing.Point(32, 8); + this.GroupBox2.Name = "GroupBox2"; + this.GroupBox2.Size = new System.Drawing.Size(184, 144); + this.GroupBox2.TabIndex = 3; + this.GroupBox2.TabStop = false; + this.GroupBox2.Text = "Color"; + // + // lblBlue2 + // + this.lblBlue2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblBlue2.Location = new System.Drawing.Point(8, 106); + this.lblBlue2.Name = "lblBlue2"; + this.lblBlue2.Size = new System.Drawing.Size(80, 24); + this.lblBlue2.TabIndex = 5; + this.lblBlue2.Text = "Blue"; + // + // Blue2 + // + this.Blue2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Blue2.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Blue2.Location = new System.Drawing.Point(96, 104); + this.Blue2.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Blue2.Name = "Blue2"; + this.Blue2.Size = new System.Drawing.Size(56, 29); + this.Blue2.TabIndex = 4; + this.Blue2.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // lblGreen2 + // + this.lblGreen2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblGreen2.Location = new System.Drawing.Point(8, 66); + this.lblGreen2.Name = "lblGreen2"; + this.lblGreen2.Size = new System.Drawing.Size(80, 24); + this.lblGreen2.TabIndex = 3; + this.lblGreen2.Text = "Green"; + // + // Green2 + // + this.Green2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Green2.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Green2.Location = new System.Drawing.Point(96, 64); + this.Green2.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Green2.Name = "Green2"; + this.Green2.Size = new System.Drawing.Size(56, 29); + this.Green2.TabIndex = 2; + this.Green2.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // LblRed2 + // + this.LblRed2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.LblRed2.Location = new System.Drawing.Point(8, 26); + this.LblRed2.Name = "LblRed2"; + this.LblRed2.Size = new System.Drawing.Size(80, 24); + this.LblRed2.TabIndex = 1; + this.LblRed2.Text = "Red"; + // + // Red2 + // + this.Red2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Red2.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Red2.Location = new System.Drawing.Point(96, 24); + this.Red2.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Red2.Name = "Red2"; + this.Red2.Size = new System.Drawing.Size(56, 29); + this.Red2.TabIndex = 0; + this.Red2.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // Vertex3 + // + this.Vertex3.Controls.Add(this.GroupBox3); + this.Vertex3.Location = new System.Drawing.Point(4, 24); + this.Vertex3.Name = "Vertex3"; + this.Vertex3.Size = new System.Drawing.Size(248, 156); + this.Vertex3.TabIndex = 2; + this.Vertex3.Text = "Vertex 3"; + this.Vertex3.Visible = false; + // + // GroupBox3 + // + this.GroupBox3.Controls.Add(this.lblBlue3); + this.GroupBox3.Controls.Add(this.Blue3); + this.GroupBox3.Controls.Add(this.lblGreen3); + this.GroupBox3.Controls.Add(this.Green3); + this.GroupBox3.Controls.Add(this.lblRed3); + this.GroupBox3.Controls.Add(this.Red3); + this.GroupBox3.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.GroupBox3.Location = new System.Drawing.Point(32, 8); + this.GroupBox3.Name = "GroupBox3"; + this.GroupBox3.Size = new System.Drawing.Size(184, 144); + this.GroupBox3.TabIndex = 3; + this.GroupBox3.TabStop = false; + this.GroupBox3.Text = "Color"; + // + // lblBlue3 + // + this.lblBlue3.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblBlue3.Location = new System.Drawing.Point(8, 106); + this.lblBlue3.Name = "lblBlue3"; + this.lblBlue3.Size = new System.Drawing.Size(80, 24); + this.lblBlue3.TabIndex = 5; + this.lblBlue3.Text = "Blue"; + // + // Blue3 + // + this.Blue3.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Blue3.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Blue3.Location = new System.Drawing.Point(96, 104); + this.Blue3.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Blue3.Name = "Blue3"; + this.Blue3.Size = new System.Drawing.Size(56, 29); + this.Blue3.TabIndex = 4; + this.Blue3.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // lblGreen3 + // + this.lblGreen3.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblGreen3.Location = new System.Drawing.Point(8, 66); + this.lblGreen3.Name = "lblGreen3"; + this.lblGreen3.Size = new System.Drawing.Size(80, 24); + this.lblGreen3.TabIndex = 3; + this.lblGreen3.Text = "Green"; + // + // Green3 + // + this.Green3.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Green3.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Green3.Location = new System.Drawing.Point(96, 64); + this.Green3.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Green3.Name = "Green3"; + this.Green3.Size = new System.Drawing.Size(56, 29); + this.Green3.TabIndex = 2; + this.Green3.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // lblRed3 + // + this.lblRed3.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblRed3.Location = new System.Drawing.Point(8, 26); + this.lblRed3.Name = "lblRed3"; + this.lblRed3.Size = new System.Drawing.Size(80, 24); + this.lblRed3.TabIndex = 1; + this.lblRed3.Text = "Red"; + // + // Red3 + // + this.Red3.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Red3.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Red3.Location = new System.Drawing.Point(96, 24); + this.Red3.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Red3.Name = "Red3"; + this.Red3.Size = new System.Drawing.Size(56, 29); + this.Red3.TabIndex = 0; + this.Red3.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // Vertex4 + // + this.Vertex4.Controls.Add(this.GroupBox4); + this.Vertex4.Location = new System.Drawing.Point(4, 24); + this.Vertex4.Name = "Vertex4"; + this.Vertex4.Size = new System.Drawing.Size(248, 156); + this.Vertex4.TabIndex = 3; + this.Vertex4.Text = "Vertex 4"; + this.Vertex4.Visible = false; + // + // GroupBox4 + // + this.GroupBox4.Controls.Add(this.lblBlue4); + this.GroupBox4.Controls.Add(this.Blue4); + this.GroupBox4.Controls.Add(this.lblGreen4); + this.GroupBox4.Controls.Add(this.Green4); + this.GroupBox4.Controls.Add(this.lblRed4); + this.GroupBox4.Controls.Add(this.Red4); + this.GroupBox4.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.GroupBox4.Location = new System.Drawing.Point(32, 8); + this.GroupBox4.Name = "GroupBox4"; + this.GroupBox4.Size = new System.Drawing.Size(184, 144); + this.GroupBox4.TabIndex = 3; + this.GroupBox4.TabStop = false; + this.GroupBox4.Text = "Color"; + // + // lblBlue4 + // + this.lblBlue4.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblBlue4.Location = new System.Drawing.Point(8, 106); + this.lblBlue4.Name = "lblBlue4"; + this.lblBlue4.Size = new System.Drawing.Size(80, 24); + this.lblBlue4.TabIndex = 5; + this.lblBlue4.Text = "Blue"; + // + // Blue4 + // + this.Blue4.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Blue4.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Blue4.Location = new System.Drawing.Point(96, 104); + this.Blue4.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Blue4.Name = "Blue4"; + this.Blue4.Size = new System.Drawing.Size(56, 29); + this.Blue4.TabIndex = 4; + this.Blue4.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // lblGreen4 + // + this.lblGreen4.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblGreen4.Location = new System.Drawing.Point(8, 66); + this.lblGreen4.Name = "lblGreen4"; + this.lblGreen4.Size = new System.Drawing.Size(80, 24); + this.lblGreen4.TabIndex = 3; + this.lblGreen4.Text = "Green"; + // + // Green4 + // + this.Green4.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Green4.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Green4.Location = new System.Drawing.Point(96, 64); + this.Green4.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Green4.Name = "Green4"; + this.Green4.Size = new System.Drawing.Size(56, 29); + this.Green4.TabIndex = 2; + this.Green4.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // lblRed4 + // + this.lblRed4.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblRed4.Location = new System.Drawing.Point(8, 26); + this.lblRed4.Name = "lblRed4"; + this.lblRed4.Size = new System.Drawing.Size(80, 24); + this.lblRed4.TabIndex = 1; + this.lblRed4.Text = "Red"; + // + // Red4 + // + this.Red4.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Red4.Increment = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.Red4.Location = new System.Drawing.Point(96, 24); + this.Red4.Maximum = new System.Decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Red4.Name = "Red4"; + this.Red4.Size = new System.Drawing.Size(56, 29); + this.Red4.TabIndex = 0; + this.Red4.ValueChanged += new System.EventHandler(this.Color_TextChanged); + // + // LightControl + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(256, 182); + this.Controls.Add(this.TabControl1); + this.Name = "LightControl"; + this.Text = "LC"; + this.Closing += new System.ComponentModel.CancelEventHandler(this.LightControl_Closing); + this.TabControl1.ResumeLayout(false); + this.Vertex1.ResumeLayout(false); + this.GroupBox1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.Blue1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red1)).EndInit(); + this.Vertex2.ResumeLayout(false); + this.GroupBox2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.Blue2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red2)).EndInit(); + this.Vertex3.ResumeLayout(false); + this.GroupBox3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.Blue3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red3)).EndInit(); + this.Vertex4.ResumeLayout(false); + this.GroupBox4.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.Blue4)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Green4)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Red4)).EndInit(); + this.ResumeLayout(false); + + } + #endregion + + //Dispose of any used resources + public void DisposeD3D() { + DisposeVertices(); + for (int i = 0; i < numTextures; i++) + if (textures[i] != null) { + textures[i].Dispose(); + textures[i] = null; + } + if (device != null) { + device.Dispose(); + device = null; + } + } + + public void DisposeVertices() { + if (vertBuffer != null) { + vertBuffer.Dispose(); + vertBuffer = null; + } + } + + public bool InitD3D(IntPtr winHandle) { + DisplayMode dispMode = + Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode; + PresentParameters presentParams = new PresentParameters(); + //Define the presentation parameters + presentParams.Windowed = true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.BackBufferFormat = dispMode.Format; + try { + device = new Device(Manager.Adapters.Default.Adapter, + DeviceType.Hardware, winHandle, + CreateFlags.SoftwareVertexProcessing,presentParams); + device.VertexFormat = customVertex; + return true; + } + catch { + return false; + } + } + + + public bool CreateTextures() { + try { + for (int i = 1; i <= numTextures; i++) + textures[i-1] = TextureLoader.FromFile(device, Application.StartupPath + @"\Walk" + i.ToString() + ".bmp"); + return CreateVertices(); + } + catch { + return false; + } + } + + public bool CreateVertices() { + CustomVertex[] verts; + + try { + //If the vertex buffer was previously created, dispose them + DisposeVertices(); + + vertBuffer = new VertexBuffer(typeof(CustomVertex), numVerts, device, Usage.WriteOnly, customVertex, Pool.Default); + verts = vertBuffer.Lock(0, 0) as CustomVertex[]; + SquareVertices(verts); + vertBuffer.Unlock(); + return true; + } + catch { + return false; + } + } + + private void SquareVertices(CustomVertex[] vertices) { + // Create a square, composed of 2 triangles + vertices[0] = CreateFlexVertex(60, 60, 0, 1, Color.FromArgb((int)Red1.Value, (int)Green1.Value, (int)Blue1.Value), 0, 0); + vertices[1] = CreateFlexVertex(240, 60, 0, 1, Color.FromArgb((int)Red2.Value, (int)Green2.Value, (int)Blue2.Value), 1, 0); + vertices[2] = CreateFlexVertex(60, 240, 0, 1, Color.FromArgb((int)Red3.Value, (int)Green3.Value, (int)Blue3.Value), 0, 1); + vertices[3] = CreateFlexVertex(240, 240, 0, 1, Color.FromArgb((int)Red4.Value, (int)Green4.Value, (int)Blue4.Value), 1, 1); + } + + + + private CustomVertex CreateFlexVertex(float X, float Y, float Z, float rhw, Color color, float tu, float tv) { + CustomVertex custVertex = new CustomVertex(); + custVertex.X = X; + custVertex.Y = Y; + custVertex.Z = Z; + custVertex.rhw = rhw; + custVertex.color = color.ToArgb(); + custVertex.tu = tu; + custVertex.tv = tv; + return custVertex; + } + + public void Render() { + if(device == null) return; + + device.Clear(ClearFlags.Target, Color.FromArgb(0, 0, 255).ToArgb(), 1.0F, 0); + device.BeginScene(); + // Show one texture a time, in order to create the illusion of a walking guy + device.SetTexture(0, textures[x]); + x = (x == 9) ? 0 : x+1; //If x is 9, set to 0, otherwise increment x + device.SetStreamSource(0, vertBuffer, 0); + device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, numVerts - 2); + device.EndScene(); + try { + device.Present(); + } + catch { + } + } + + private void LightControl_Closing(object sender, System.ComponentModel.CancelEventArgs e) { + DisposeD3D(); + endTest = true; + + } + + private void Color_TextChanged(object sender, System.EventArgs e) { + CreateVertices(); + } + + } +} + diff --git a/Source Code updated 08-12-05/EnterDirectX/LightControl.resx b/Source Code updated 08-12-05/EnterDirectX/LightControl.resx new file mode 100644 index 0000000..dcb6cec --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/LightControl.resx @@ -0,0 +1,508 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + False + + + True + + + Assembly + + + Private + + + 8, 8 + + + False + + + True + + + True + + + Private + + + Assembly + + + 8, 8 + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + True + + + True + + + Private + + + Assembly + + + 8, 8 + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + True + + + True + + + Private + + + Assembly + + + 8, 8 + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + True + + + True + + + Private + + + Assembly + + + 8, 8 + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + Private + + + False + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + (Default) + + + False + + + False + + + LightControl + + + 8, 8 + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/EnterDirectX/LightTest.cs b/Source Code updated 08-12-05/EnterDirectX/LightTest.cs new file mode 100644 index 0000000..28af236 --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/LightTest.cs @@ -0,0 +1,73 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + +namespace EnterDirectX { + + public class LightTest: + System.Windows.Forms.Form { + #region " Windows Form Designer generated code " + + public LightTest() : base() { + + //This call is required by the Windows Form Designer. + InitializeComponent(); + + //Add any initialization after the InitializeComponent() call + + } + + //Form overrides dispose to clean up the component list. + protected override void Dispose(bool disposing) { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + //Required by the Windows Form Designer + private System.ComponentModel.IContainer components; + + //NOTE: The following procedure is required by the Windows Form Designer + //It can be modified using the Windows Form Designer. + //Do not modify it using the code editor. + [System.Diagnostics.DebuggerStepThrough] + private void InitializeComponent() { + // + // LightTest + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(385, 350); + this.ControlBox = false; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.KeyPreview = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "LightTest"; + this.ShowInTaskbar = false; + this.Text = "Light Test Window"; + this.TopMost = true; + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.LightTestWindow_KeyDown); + + } + + #endregion + private bool endTest = false; + + public bool EndTest { + get { return endTest; } + } + + private void LightTestWindow_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { + if (e.KeyCode==Keys.Escape) { + endTest = true; + } + } + + } + +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/EnterDirectX/LightTest.resx b/Source Code updated 08-12-05/EnterDirectX/LightTest.resx new file mode 100644 index 0000000..1812ed7 --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/LightTest.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + LightTest + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/EnterDirectX/MatrixControl.cs b/Source Code updated 08-12-05/EnterDirectX/MatrixControl.cs new file mode 100644 index 0000000..b9262f4 --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/MatrixControl.cs @@ -0,0 +1,615 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace EnterDirectX { + /// + /// Summary description for MatrixControl. + /// + public class MatrixControl : System.Windows.Forms.Form { + #region Form Components + + internal System.Windows.Forms.Label lblRotZ; + internal System.Windows.Forms.Label lblRotY; + internal System.Windows.Forms.Label LblRotX; + internal System.Windows.Forms.CheckBox chkAuto; + internal System.Windows.Forms.GroupBox grpTranslation; + internal System.Windows.Forms.Label lblTranY; + internal System.Windows.Forms.Label lblTranZ; + internal System.Windows.Forms.Label lblTranX; + internal System.Windows.Forms.Label lblScaX; + internal System.Windows.Forms.Label lblScaY; + internal System.Windows.Forms.Label lblScaZ; + #endregion + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + private bool endTest = false; + + public bool EndTest { + get { return endTest; } + } + + private Device device = null; + private static int x = 0; + + private VertexBuffer vertBuffer = null; + private Texture[] textures = new Texture[10]; + internal System.Windows.Forms.TrackBar RotationX; + internal System.Windows.Forms.TrackBar RotationY; + internal System.Windows.Forms.TrackBar RotationZ; + internal System.Windows.Forms.TrackBar TranslationX; + internal System.Windows.Forms.TrackBar TranslationY; + internal System.Windows.Forms.TrackBar TranslationZ; + internal System.Windows.Forms.TrackBar ScaleX; + internal System.Windows.Forms.TrackBar ScaleY; + internal System.Windows.Forms.TrackBar ScaleZ; + private System.Windows.Forms.GroupBox grpRotation; + private System.Windows.Forms.GroupBox grpScale; + + // Simple textured vertices constant and structure + private const VertexFormats customVertex = VertexFormats.Position | VertexFormats.Texture1; + private int numVerts = 36; + + public MatrixControl() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // + // TODO: Add any constructor code after InitializeComponent call + // + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + public void DisposeD3D() { + for(int i = 0; i < 10; i++) { + if(textures[i] != null) { + textures[i].Dispose(); + textures[i] = null; + } + } + + if(vertBuffer != null) { + vertBuffer.Dispose(); + vertBuffer = null; + } + + if(device != null) { + device.Dispose(); + device = null; + } + } + + public bool InitD3D(IntPtr winHandle) { + DisplayMode DispMode = + Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode; + PresentParameters presentParams = new PresentParameters(); + // Define the presentation parameters + presentParams.Windowed = true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.BackBufferFormat = DispMode.Format; + presentParams.EnableAutoDepthStencil = true; + presentParams.AutoDepthStencilFormat = DepthFormat.D16; + // Try to create the device + try { + device = new Device(Manager.Adapters.Default.Adapter, + DeviceType.Hardware, winHandle, + CreateFlags.SoftwareVertexProcessing, presentParams); + // Turn off culling => front and back of the triangles are visible + device.RenderState.CullMode = Cull.None; + // Turn off D3D lighting + device.RenderState.Lighting = false; + // Turn on ZBuffer + device.RenderState.ZBufferEnable = true; + device.VertexFormat = customVertex; + // Set the Projection Matrix to use a orthogonal view + device.Transform.Projection = Matrix.OrthoLH(300, 200, -200, +200); + return true; + } + catch { + return false; + } + } + + public bool CreateCube() { + try { + string txName; + for(int i=1; i<=10; i++) { + txName = Application.StartupPath+"\\Walk"+i.ToString()+".bmp"; + textures[i-1] = + TextureLoader.FromFile(device, txName); + } + vertBuffer = new VertexBuffer(typeof(CustomVertex.PositionTextured), numVerts, device, Usage.WriteOnly, CustomVertex.PositionTextured.Format, Pool.Default); + vertBuffer.Created += new EventHandler(this.OnVertexBufferCreate); + OnVertexBufferCreate(vertBuffer, null); + return true; + } + catch { + return false; + } + } + + + private void OnVertexBufferCreate(object sender, EventArgs e) { + VertexBuffer buffer = (VertexBuffer)sender; + CustomVertex.PositionTextured[] verts = new CustomVertex.PositionTextured[numVerts]; + // 1st facet --------------------------------------------------------- + //triangle 1 + verts[0] = new CustomVertex.PositionTextured(0, 0, 0, 0, 0); + verts[1] = new CustomVertex.PositionTextured(90, 0, 0, 1, 0); + verts[2] = new CustomVertex.PositionTextured(0, 90, 0, 0, 1); + + //triangle 2 + verts[3] = new CustomVertex.PositionTextured(0, 90, 0, 0, 1); + verts[4] = new CustomVertex.PositionTextured(90, 0, 0, 1, 0); + verts[5] = new CustomVertex.PositionTextured(90, 90, 0, 1, 1); + + // 2nd facet --------------------------------------------------------- + //triangle 1 + verts[6] = new CustomVertex.PositionTextured(90, 0, 0, 0, 0); + verts[7] = new CustomVertex.PositionTextured(90, 90, 0, 1, 0); + verts[8] = new CustomVertex.PositionTextured(90, 0, 90, 0, 1); + + //triangle 2 + verts[9] = new CustomVertex.PositionTextured(90, 0, 90, 0, 1); + verts[10] = new CustomVertex.PositionTextured(90, 90, 0, 1, 0); + verts[11] = new CustomVertex.PositionTextured(90, 90, 90, 1, 1); + + // 3rd facet --------------------------------------------------------- + //triangle 1 + verts[12] = new CustomVertex.PositionTextured(0, 0, 0, 0, 0); + verts[13] = new CustomVertex.PositionTextured(90, 0, 0, 1, 0); + verts[14] = new CustomVertex.PositionTextured(0, 0, 90, 0, 1); + + //triangle 2 + verts[15] = new CustomVertex.PositionTextured(0, 0, 90, 0, 1); + verts[16] = new CustomVertex.PositionTextured(90, 0, 0, 1, 0); + verts[17] = new CustomVertex.PositionTextured(90, 0, 90, 1, 1); + + + // 4th facet --------------------------------------------------------- + //triangle 1 + verts[18] = new CustomVertex.PositionTextured(0, 0, 0, 0, 0); + verts[19] = new CustomVertex.PositionTextured(0, 90, 0, 1, 0); + verts[20] = new CustomVertex.PositionTextured(0, 0, 90, 0, 1); + + //triangle 2 + verts[21] = new CustomVertex.PositionTextured(0, 0, 90, 0, 1); + verts[22] = new CustomVertex.PositionTextured(0, 90, 0, 1, 0); + verts[23] = new CustomVertex.PositionTextured(0, 90, 90, 1, 1); + + // 5th facet --------------------------------------------------------- + //triangle 1 + verts[24] = new CustomVertex.PositionTextured(0, 0, 90, 0, 0); + verts[25] = new CustomVertex.PositionTextured(90, 0, 90, 1, 0); + verts[26] = new CustomVertex.PositionTextured(0, 90, 90, 0, 1); + + //triangle 2 + verts[27] = new CustomVertex.PositionTextured(0, 90, 90, 0, 1); + verts[28] = new CustomVertex.PositionTextured(90, 0, 90, 1, 0); + verts[29] = new CustomVertex.PositionTextured(90, 90, 90, 1, 1); + + // 6th facet --------------------------------------------------------- + //triangle 1 + verts[30] = new CustomVertex.PositionTextured(0, 90, 0, 0, 0); + verts[31] = new CustomVertex.PositionTextured(90, 90, 0, 1, 0); + verts[32] = new CustomVertex.PositionTextured(0, 90, 90, 0, 1); + + //triangle 2 + verts[33] = new CustomVertex.PositionTextured(0, 90, 90, 0, 1); + verts[34] = new CustomVertex.PositionTextured(90, 90, 0, 1, 0); + verts[35] = new CustomVertex.PositionTextured(90, 90, 90, 1, 1); + + buffer.SetData(verts, 0, LockFlags.None); + } + + public void Render() { + int Tick; + if ((device==null)) return; + + // Move the cube automatically + if (chkAuto.Checked) { + Tick = Environment.TickCount; + device.Transform.World = Matrix.RotationAxis( + new Vector3((float)Math.Cos((double)Tick/3000.0F), 1, + (float)Math.Sin((double)Tick/3000.0F)), Tick/3000.0F); + } + device.Clear(ClearFlags.Target|ClearFlags.ZBuffer, Color.FromArgb(255, 0, 0, 255), 1.0F, 0); + device.BeginScene(); + + // Show one texture a time, in order to create the illusion of a walking guy + device.SetTexture(0, textures[x]); + x = (x == 9) ? 0 : x+1; //If x is 9, set to 0, otherwise increment x + device.SetStreamSource(0, vertBuffer, 0); + + device.DrawPrimitives(PrimitiveType.TriangleList, 0, numVerts/3); + device.EndScene(); + try { + device.Present(); + } + catch { + // This can lead to an error if the window is closed while the scene is being rendered + } + } + + private void Transformations_ValueChanged(object sender, System.EventArgs e) { + if(device != null) { + device.Transform.World = Matrix.Identity; + RotationMatrices((float)RotationX.Value, (float)RotationY.Value, (float)RotationZ.Value); + TranslationMatrices((float)TranslationX.Value, (float)TranslationY.Value, (float)TranslationZ.Value); + ScaleMatrices((float)ScaleX.Value, (float)ScaleY.Value, (float)ScaleZ.Value); + } + } + + //The following functions create the transformation matrices for each operation + public void RotationMatrices(float x, float y, float z) { + device.Transform.World = Matrix.Multiply(device.Transform.World, Matrix.RotationX((float)(x * Math.PI / 180))); + device.Transform.World = Matrix.Multiply(device.Transform.World, Matrix.RotationY((float)(y * Math.PI / 180))); + device.Transform.World = Matrix.Multiply(device.Transform.World, Matrix.RotationZ((float)(z * Math.PI / 180))); + } + + public void TranslationMatrices(float x, float y, float z) { + device.Transform.World = Matrix.Multiply(device.Transform.World, Matrix.Translation(x, y, z)); + } + + public void ScaleMatrices(float x, float y, float z) { + device.Transform.World = Matrix.Multiply(device.Transform.World, Matrix.Scaling(x / 100, y / 100, z / 100)); + } + + private void MatrixControl_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { + if(e.KeyCode == Keys.Escape) { + endTest = true; + } + } + + private void chkAuto_CheckedChanged(object sender, System.EventArgs e) { + // Forces the execution of the Transformations_ValueChanged event + Transformations_ValueChanged(sender, e); + } + + private void MatrixControl_Closing(object sender, System.ComponentModel.CancelEventArgs e) { + DisposeD3D(); + endTest = true; + } + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.lblRotZ = new System.Windows.Forms.Label(); + this.lblRotY = new System.Windows.Forms.Label(); + this.LblRotX = new System.Windows.Forms.Label(); + this.chkAuto = new System.Windows.Forms.CheckBox(); + this.grpTranslation = new System.Windows.Forms.GroupBox(); + this.lblTranY = new System.Windows.Forms.Label(); + this.lblTranZ = new System.Windows.Forms.Label(); + this.lblTranX = new System.Windows.Forms.Label(); + this.TranslationX = new System.Windows.Forms.TrackBar(); + this.TranslationY = new System.Windows.Forms.TrackBar(); + this.TranslationZ = new System.Windows.Forms.TrackBar(); + this.lblScaX = new System.Windows.Forms.Label(); + this.lblScaY = new System.Windows.Forms.Label(); + this.lblScaZ = new System.Windows.Forms.Label(); + this.RotationX = new System.Windows.Forms.TrackBar(); + this.RotationY = new System.Windows.Forms.TrackBar(); + this.RotationZ = new System.Windows.Forms.TrackBar(); + this.grpRotation = new System.Windows.Forms.GroupBox(); + this.ScaleX = new System.Windows.Forms.TrackBar(); + this.ScaleY = new System.Windows.Forms.TrackBar(); + this.ScaleZ = new System.Windows.Forms.TrackBar(); + this.grpScale = new System.Windows.Forms.GroupBox(); + this.grpTranslation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.TranslationX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.TranslationY)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.TranslationZ)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RotationX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RotationY)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RotationZ)).BeginInit(); + this.grpRotation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ScaleX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScaleY)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScaleZ)).BeginInit(); + this.grpScale.SuspendLayout(); + this.SuspendLayout(); + // + // lblRotZ + // + this.lblRotZ.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblRotZ.Location = new System.Drawing.Point(8, 128); + this.lblRotZ.Name = "lblRotZ"; + this.lblRotZ.Size = new System.Drawing.Size(80, 24); + this.lblRotZ.TabIndex = 5; + this.lblRotZ.Text = "Z Axis"; + // + // lblRotY + // + this.lblRotY.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblRotY.Location = new System.Drawing.Point(8, 80); + this.lblRotY.Name = "lblRotY"; + this.lblRotY.Size = new System.Drawing.Size(80, 24); + this.lblRotY.TabIndex = 3; + this.lblRotY.Text = "Y Axis"; + // + // LblRotX + // + this.LblRotX.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.LblRotX.Location = new System.Drawing.Point(8, 32); + this.LblRotX.Name = "LblRotX"; + this.LblRotX.Size = new System.Drawing.Size(80, 24); + this.LblRotX.TabIndex = 1; + this.LblRotX.Text = "X Axis"; + // + // chkAuto + // + this.chkAuto.Location = new System.Drawing.Point(16, 216); + this.chkAuto.Name = "chkAuto"; + this.chkAuto.Size = new System.Drawing.Size(88, 24); + this.chkAuto.TabIndex = 8; + this.chkAuto.Text = "Auto Move"; + this.chkAuto.CheckedChanged += new System.EventHandler(this.chkAuto_CheckedChanged); + // + // grpTranslation + // + this.grpTranslation.Controls.Add(this.lblTranY); + this.grpTranslation.Controls.Add(this.lblTranZ); + this.grpTranslation.Controls.Add(this.lblTranX); + this.grpTranslation.Controls.Add(this.TranslationX); + this.grpTranslation.Controls.Add(this.TranslationY); + this.grpTranslation.Controls.Add(this.TranslationZ); + this.grpTranslation.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.grpTranslation.Location = new System.Drawing.Point(256, 0); + this.grpTranslation.Name = "grpTranslation"; + this.grpTranslation.Size = new System.Drawing.Size(272, 176); + this.grpTranslation.TabIndex = 5; + this.grpTranslation.TabStop = false; + this.grpTranslation.Text = "Translation"; + // + // lblTranY + // + this.lblTranY.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblTranY.Location = new System.Drawing.Point(16, 80); + this.lblTranY.Name = "lblTranY"; + this.lblTranY.Size = new System.Drawing.Size(80, 24); + this.lblTranY.TabIndex = 9; + this.lblTranY.Text = "Y Axis"; + // + // lblTranZ + // + this.lblTranZ.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblTranZ.Location = new System.Drawing.Point(16, 128); + this.lblTranZ.Name = "lblTranZ"; + this.lblTranZ.Size = new System.Drawing.Size(80, 24); + this.lblTranZ.TabIndex = 11; + this.lblTranZ.Text = "Z Axis"; + // + // lblTranX + // + this.lblTranX.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblTranX.Location = new System.Drawing.Point(16, 32); + this.lblTranX.Name = "lblTranX"; + this.lblTranX.Size = new System.Drawing.Size(80, 24); + this.lblTranX.TabIndex = 7; + this.lblTranX.Text = "X Axis"; + // + // TranslationX + // + this.TranslationX.LargeChange = 90; + this.TranslationX.Location = new System.Drawing.Point(88, 32); + this.TranslationX.Maximum = 200; + this.TranslationX.Minimum = -200; + this.TranslationX.Name = "TranslationX"; + this.TranslationX.Size = new System.Drawing.Size(176, 45); + this.TranslationX.TabIndex = 9; + this.TranslationX.TickFrequency = 10; + this.TranslationX.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // TranslationY + // + this.TranslationY.LargeChange = 90; + this.TranslationY.Location = new System.Drawing.Point(88, 80); + this.TranslationY.Maximum = 200; + this.TranslationY.Minimum = -200; + this.TranslationY.Name = "TranslationY"; + this.TranslationY.Size = new System.Drawing.Size(176, 45); + this.TranslationY.TabIndex = 10; + this.TranslationY.TickFrequency = 10; + this.TranslationY.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // TranslationZ + // + this.TranslationZ.LargeChange = 10; + this.TranslationZ.Location = new System.Drawing.Point(88, 128); + this.TranslationZ.Maximum = 200; + this.TranslationZ.Minimum = -200; + this.TranslationZ.Name = "TranslationZ"; + this.TranslationZ.Size = new System.Drawing.Size(176, 45); + this.TranslationZ.TabIndex = 10; + this.TranslationZ.TickFrequency = 10; + this.TranslationZ.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // lblScaX + // + this.lblScaX.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblScaX.Location = new System.Drawing.Point(8, 24); + this.lblScaX.Name = "lblScaX"; + this.lblScaX.Size = new System.Drawing.Size(64, 24); + this.lblScaX.TabIndex = 13; + this.lblScaX.Text = "X Axis"; + // + // lblScaY + // + this.lblScaY.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblScaY.Location = new System.Drawing.Point(80, 24); + this.lblScaY.Name = "lblScaY"; + this.lblScaY.Size = new System.Drawing.Size(64, 24); + this.lblScaY.TabIndex = 15; + this.lblScaY.Text = "Y Axis"; + // + // lblScaZ + // + this.lblScaZ.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lblScaZ.Location = new System.Drawing.Point(152, 24); + this.lblScaZ.Name = "lblScaZ"; + this.lblScaZ.Size = new System.Drawing.Size(64, 24); + this.lblScaZ.TabIndex = 17; + this.lblScaZ.Text = "Z Axis"; + // + // RotationX + // + this.RotationX.LargeChange = 90; + this.RotationX.Location = new System.Drawing.Point(80, 32); + this.RotationX.Maximum = 360; + this.RotationX.Name = "RotationX"; + this.RotationX.Size = new System.Drawing.Size(176, 45); + this.RotationX.TabIndex = 9; + this.RotationX.TickFrequency = 10; + this.RotationX.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // RotationY + // + this.RotationY.LargeChange = 90; + this.RotationY.Location = new System.Drawing.Point(80, 80); + this.RotationY.Maximum = 360; + this.RotationY.Name = "RotationY"; + this.RotationY.Size = new System.Drawing.Size(176, 45); + this.RotationY.TabIndex = 10; + this.RotationY.TickFrequency = 10; + this.RotationY.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // RotationZ + // + this.RotationZ.CausesValidation = false; + this.RotationZ.LargeChange = 90; + this.RotationZ.Location = new System.Drawing.Point(80, 128); + this.RotationZ.Maximum = 360; + this.RotationZ.Name = "RotationZ"; + this.RotationZ.Size = new System.Drawing.Size(176, 45); + this.RotationZ.TabIndex = 10; + this.RotationZ.TabStop = false; + this.RotationZ.TickFrequency = 10; + this.RotationZ.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // grpRotation + // + this.grpRotation.Controls.Add(this.LblRotX); + this.grpRotation.Controls.Add(this.RotationY); + this.grpRotation.Controls.Add(this.RotationZ); + this.grpRotation.Controls.Add(this.RotationX); + this.grpRotation.Controls.Add(this.lblRotZ); + this.grpRotation.Controls.Add(this.lblRotY); + this.grpRotation.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.grpRotation.Location = new System.Drawing.Point(0, 0); + this.grpRotation.Name = "grpRotation"; + this.grpRotation.Size = new System.Drawing.Size(256, 176); + this.grpRotation.TabIndex = 11; + this.grpRotation.TabStop = false; + this.grpRotation.Text = "Rotation"; + // + // ScaleX + // + this.ScaleX.Location = new System.Drawing.Point(16, 56); + this.ScaleX.Maximum = 200; + this.ScaleX.Minimum = 1; + this.ScaleX.Name = "ScaleX"; + this.ScaleX.Orientation = System.Windows.Forms.Orientation.Vertical; + this.ScaleX.Size = new System.Drawing.Size(45, 144); + this.ScaleX.TabIndex = 12; + this.ScaleX.TickFrequency = 10; + this.ScaleX.Value = 1; + this.ScaleX.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // ScaleY + // + this.ScaleY.Location = new System.Drawing.Point(88, 56); + this.ScaleY.Maximum = 200; + this.ScaleY.Minimum = 1; + this.ScaleY.Name = "ScaleY"; + this.ScaleY.Orientation = System.Windows.Forms.Orientation.Vertical; + this.ScaleY.Size = new System.Drawing.Size(45, 144); + this.ScaleY.TabIndex = 12; + this.ScaleY.TickFrequency = 10; + this.ScaleY.Value = 1; + this.ScaleY.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // ScaleZ + // + this.ScaleZ.Location = new System.Drawing.Point(160, 56); + this.ScaleZ.Maximum = 200; + this.ScaleZ.Minimum = 1; + this.ScaleZ.Name = "ScaleZ"; + this.ScaleZ.Orientation = System.Windows.Forms.Orientation.Vertical; + this.ScaleZ.Size = new System.Drawing.Size(45, 144); + this.ScaleZ.TabIndex = 12; + this.ScaleZ.TickFrequency = 10; + this.ScaleZ.Value = 1; + this.ScaleZ.ValueChanged += new System.EventHandler(this.Transformations_ValueChanged); + // + // grpScale + // + this.grpScale.Controls.Add(this.ScaleX); + this.grpScale.Controls.Add(this.ScaleZ); + this.grpScale.Controls.Add(this.lblScaX); + this.grpScale.Controls.Add(this.lblScaY); + this.grpScale.Controls.Add(this.ScaleY); + this.grpScale.Controls.Add(this.lblScaZ); + this.grpScale.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.grpScale.Location = new System.Drawing.Point(128, 176); + this.grpScale.Name = "grpScale"; + this.grpScale.Size = new System.Drawing.Size(232, 208); + this.grpScale.TabIndex = 18; + this.grpScale.TabStop = false; + this.grpScale.Text = "Scale"; + // + // MatrixControl + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(544, 398); + this.Controls.Add(this.grpScale); + this.Controls.Add(this.grpRotation); + this.Controls.Add(this.chkAuto); + this.Controls.Add(this.grpTranslation); + this.Name = "MatrixControl"; + this.Text = "MatrixControl"; + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.MatrixControl_KeyDown); + this.Closing += new System.ComponentModel.CancelEventHandler(this.MatrixControl_Closing); + this.grpTranslation.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.TranslationX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.TranslationY)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.TranslationZ)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RotationX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RotationY)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RotationZ)).EndInit(); + this.grpRotation.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ScaleX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScaleY)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScaleZ)).EndInit(); + this.grpScale.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/EnterDirectX/MatrixControl.resx b/Source Code updated 08-12-05/EnterDirectX/MatrixControl.resx new file mode 100644 index 0000000..a313358 --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/MatrixControl.resx @@ -0,0 +1,355 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Private + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + MatrixControl + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/EnterDirectX/MatrixTest.cs b/Source Code updated 08-12-05/EnterDirectX/MatrixTest.cs new file mode 100644 index 0000000..7d87df5 --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/MatrixTest.cs @@ -0,0 +1,77 @@ + +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + +namespace EnterDirectX { + public class MatrixTest: + System.Windows.Forms.Form { + #region " Windows Form Designer generated code " + + public MatrixTest() : base() { + + //This call is required by the Windows Form Designer. + InitializeComponent(); + + //Add any initialization after the InitializeComponent() call + + } + + //Form overrides dispose to clean up the component list. + protected override void Dispose(bool disposing) { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + //Required by the Windows Form Designer + private System.ComponentModel.IContainer components; + + //NOTE: The following procedure is required by the Windows Form Designer + //It can be modified using the Windows Form Designer. + //Do not modify it using the code editor. + [System.Diagnostics.DebuggerStepThrough] + private void InitializeComponent() { + // + // MatrixTest + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(362, 328); + this.ControlBox = false; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.KeyPreview = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "MatrixTest"; + this.ShowInTaskbar = false; + this.Text = "MatrixTestWindow"; + this.TopMost = true; + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.MatrixTest_KeyDown); + this.Closing += new System.ComponentModel.CancelEventHandler(this.MatrixTest_Closing); + + } + + #endregion + private bool endTest = false; + + public bool EndTest { + get { return endTest; } + } + + private void MatrixTest_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { + if (e.KeyCode==Keys.Escape) { + endTest = true; + } + } + + private void MatrixTest_Closing(object sender, System.ComponentModel.CancelEventArgs e) { + + } + + } +} diff --git a/Source Code updated 08-12-05/EnterDirectX/MatrixTest.resx b/Source Code updated 08-12-05/EnterDirectX/MatrixTest.resx new file mode 100644 index 0000000..388aea5 --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/MatrixTest.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + True + + + MatrixTest + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/EnterDirectX/TransparentTest.cs b/Source Code updated 08-12-05/EnterDirectX/TransparentTest.cs new file mode 100644 index 0000000..b878be1 --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/TransparentTest.cs @@ -0,0 +1,252 @@ +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace EnterDirectX { + /// + /// Summary description for TransparentTest. + /// + public class TransparentTest : System.Windows.Forms.Form { + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + private static int x = 0; + private const int numVerts = 4; + private const int numTextures = 10; + private bool endTest = false; + + public bool EndTest { + get { return endTest; } + } + + private Device device = null; + + private VertexBuffer vertBuffer = null; + private VertexBuffer TranspVertBuffer = null; + private Texture[] textures = new Texture[10]; + private Texture TranspTexture; + + // Simple textured vertices constant and structure + private const VertexFormats customVertexFlags = VertexFormats.Transformed | VertexFormats.Texture1; + + private struct CustomVertex { + public float X; + public float Y; + public float Z; + public float rhw; + public float tu; + public float tv; + } + + public TransparentTest() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // + // TODO: Add any constructor code after InitializeComponent call + // + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + //Dispose of any used resources + public void DisposeD3D() { + for (int i = 0; i < numTextures; i++) + if (textures[i] != null) { + textures[i].Dispose(); + textures[i] = null; + } + if (vertBuffer != null) { + vertBuffer.Dispose(); + vertBuffer = null; + } + if (TranspVertBuffer != null) { + TranspVertBuffer.Dispose(); + TranspVertBuffer = null; + } + if (device != null) { + device.Dispose(); + device = null; + } + } + + public bool InitD3D(IntPtr winHandle) { + DisplayMode DispMode = + Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode; + PresentParameters presentParams = new PresentParameters(); + //Define the presentation parameters + presentParams.Windowed = true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.BackBufferFormat = DispMode.Format; + //try to create the device + try { + device = new Device(Manager.Adapters.Default.Adapter, + DeviceType.Hardware, winHandle, + CreateFlags.SoftwareVertexProcessing,presentParams); + //Tells the device which is the format of our custom vertices + device.VertexFormat = customVertexFlags; + device.RenderState.Lighting = false; + device.RenderState.SourceBlend = Blend.SourceAlpha; + device.RenderState.DestinationBlend = Blend.InvSourceAlpha; + device.RenderState.AlphaBlendEnable = true; + return true; + } + catch { + return false; + } + } + + + public bool CreateTextures() { + CustomVertex[] verts; + //We will use blue as the transparent color + Color colorKeyVal = Color.FromArgb(255, 0, 0, 255); + try { + //Load the walking guy textures + for(int i=1; i<=10; i++) { + textures[i-1] = TextureLoader.FromFile( + device, + Application.StartupPath + @"\walk" + i.ToString() + ".bmp"); + } + //Load the transparent texture + TranspTexture = TextureLoader.FromFile(device, + Application.StartupPath + @"\TranspSample.bmp", + 64, 64, D3DX.Default, 0, Format.Unknown, Pool.Managed, Filter.Point, Filter.Point, + colorKeyVal.ToArgb()); + + vertBuffer = new VertexBuffer(typeof(CustomVertex), + numVerts, device, Usage.WriteOnly, customVertexFlags, Pool.Default); + verts = vertBuffer.Lock(0, 0) as CustomVertex[]; + SquareVertices(verts); + vertBuffer.Unlock(); + return true; + } + catch { + return false; + } + } + + private void SquareVertices(CustomVertex[] vertices) { + // Create a square, composed of 2 triangles + vertices[0] = CreateFlexVertex(60, 60, 0, 1, 0, 0); + vertices[1] = CreateFlexVertex(240, 60, 0, 1, 1, 0); + vertices[2] = CreateFlexVertex(60, 240, 0, 1, 0, 1); + vertices[3] = CreateFlexVertex(240, 240, 0, 1, 1, 1); + } + + public bool CreateTransparentVertices(float x, float y) { + CustomVertex[] verts; + try { + // If the vertex buffer was previously created, dispose them + if(TranspVertBuffer != null) TranspVertBuffer.Dispose(); + + TranspVertBuffer = new VertexBuffer(typeof(CustomVertex), + numVerts, device, Usage.WriteOnly, customVertexFlags, Pool.Default); + + verts = TranspVertBuffer.Lock(0, 0) as CustomVertex[]; + TranspVertices(x, y, verts); + TranspVertBuffer.Unlock(); + return true; + } + catch { + return false; + } + } + + private void TranspVertices(float X, float Y, CustomVertex[] vertices) { + // Create a square, composed of 2 triangles. Our transparent texture is 42 pixels wide and 60 long + vertices[0] = CreateFlexVertex(X, Y, 0, 1, 0, 0); + vertices[1] = CreateFlexVertex(X + 42, Y, 0, 1, 1, 0); + vertices[2] = CreateFlexVertex(X, Y + 60, 0, 1, 0, 1); + vertices[3] = CreateFlexVertex(X + 42, Y + 60, 0, 1, 1, 1); + } + + private CustomVertex CreateFlexVertex(float X, float Y, float Z, float rhw, float tu, float tv) { + CustomVertex custVertex = new CustomVertex(); + custVertex.X = X; + custVertex.Y = Y; + custVertex.Z = Z; + custVertex.rhw = rhw; + custVertex.tu = tu; + custVertex.tv = tv; + return custVertex; + } + + public void Render() { + if(device == null) return; + + device.Clear(ClearFlags.Target, Color.FromArgb(0, 0, 255).ToArgb(), 1.0F, 0); + device.BeginScene(); + // Show one texture a time, in order to create the illusion of a walking guy + device.SetTexture(0, textures[x]); + x = (x == 9) ? 0 : x+1; //If x is 9, set to 0, otherwise increment x + device.SetStreamSource(0, vertBuffer, 0); + device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, numVerts - 2); + device.SetTexture(0, TranspTexture); + device.SetStreamSource(0, TranspVertBuffer, 0); + device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, numVerts - 2); + + device.EndScene(); + try { + device.Present(); + } + catch { + } + } + + private void TransparentTest_Closing(object sender, System.ComponentModel.CancelEventArgs e) { + endTest = true; + DisposeD3D(); + } + + private void TransparentTest_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { + if(e.KeyCode == Keys.Escape) { + endTest = true; + } + } + + private void TransparentTest_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { + CreateTransparentVertices(e.X, e.Y); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + // + // TransparentTest + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(346, 312); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "TransparentTest"; + this.Text = "TransparentTest"; + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TransparentTest_KeyDown); + this.Closing += new System.ComponentModel.CancelEventHandler(this.TransparentTest_Closing); + this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.TransparentTest_MouseMove); + + } + #endregion + + } +} diff --git a/Source Code updated 08-12-05/EnterDirectX/TransparentTest.resx b/Source Code updated 08-12-05/EnterDirectX/TransparentTest.resx new file mode 100644 index 0000000..d45a9ad --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/TransparentTest.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + True + + + Private + + + TransparentTest + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/EnterDirectX/WindowTest.cs b/Source Code updated 08-12-05/EnterDirectX/WindowTest.cs new file mode 100644 index 0000000..1a850e5 --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/WindowTest.cs @@ -0,0 +1,208 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace EnterDirectX { + /// + /// Summary description for wt. + /// + public class WindowTest : System.Windows.Forms.Form { + private bool endTest = false; + + public bool EndTest { + get { return endTest; } + } + + private int numVerts = 4; + private Device device = null; + private VertexBuffer vertBuffer = null; + private Texture[] textures = new Texture[10]; + private System.ComponentModel.Container components = null; + private static int x = 0; + // Simple textured vertices constant and structure + private const VertexFormats customVertexFlags = VertexFormats.Transformed | VertexFormats.Texture1; + private struct CustomVertex { + public float X; + public float Y; + public float Z; + public float rhw; + public float tu; + public float tv; + } + + /// + /// Required designer variable. + /// + + public WindowTest() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // + // TODO: Add any constructor code after InitializeComponent call + // + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + DisposeD3D(); + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + // + // WindowTest + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(292, 273); + this.Name = "WindowTest"; + this.Text = "WindowTest"; + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.WindowTest_KeyDown); + this.Closing += new System.ComponentModel.CancelEventHandler(this.WindowTest_Closing); + + } + #endregion + + private void WindowTest_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { + if(e.KeyCode == Keys.Escape) { + endTest = true; + } + } + + private void WindowTest_Closing(object sender, System.ComponentModel.CancelEventArgs e) { + endTest = true; + DisposeD3D(); + } + + public void DisposeD3D() { + for(int i = 0; i < 10; i++) { + if(textures[i] != null) { + textures[i].Dispose(); + textures[i] = null; + } + } + if(vertBuffer != null) { + vertBuffer.Dispose(); + vertBuffer = null; + } + if(device != null) { + device.Dispose(); + device = null; + } + } + + public bool InitD3D(IntPtr winHandle) { + DisplayMode dispMode = + Manager.Adapters[Manager.Adapters.Default.Adapter].CurrentDisplayMode; + PresentParameters presentParams= new PresentParameters(); + // Define the presentation parameters + presentParams.Windowed = true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.BackBufferFormat = dispMode.Format; + // Try to create the device + try { + device = new Device( + Manager.Adapters.Default.Adapter, + DeviceType.Hardware, + winHandle, + CreateFlags.SoftwareVertexProcessing, + presentParams); + device.VertexFormat = customVertexFlags; + return true; + } + catch { + return false; + } + } + + public bool CreateTextures() { + CustomVertex[] verts; + try { + string textureFile; + // Load the textures, named from "walk1.bmp" to "walk10.bmp" + for(int i=1; i<=10; i++) { + textureFile = Application.StartupPath + @"\walk" + i.ToString() + ".bmp"; + textures[i-1] = TextureLoader.FromFile(device, textureFile); + } + // Define the vertex buffer to hold our custom vertices + vertBuffer = new VertexBuffer(typeof(CustomVertex), + numVerts, device, Usage.WriteOnly, customVertexFlags, Pool.Default); + // Locks the memory, which will return the array to be filled + verts = vertBuffer.Lock(0, 0) as CustomVertex[]; + // Defines the vertices + SquareVertices(verts); + // Unlock the buffer, which will save our vertex information to the device + vertBuffer.Unlock(); + return true; + } + catch { + return false; + } + } + + private void SquareVertices(CustomVertex[] vertices) { + // Create a square, composed of 2 triangles + vertices[0] = CreateFlexVertex(60, 60, 0, 1, 0, 0); + vertices[1] = CreateFlexVertex(240, 60, 0, 1, 1, 0); + vertices[2] = CreateFlexVertex(60, 240, 0, 1, 0, 1); + vertices[3] = CreateFlexVertex(240, 240, 0, 1, 1, 1); + } + + private CustomVertex CreateFlexVertex(float X, float Y, float Z, float rhw, float tu, float tv) { + CustomVertex cv = new CustomVertex(); + cv.X = X; + cv.Y = Y; + cv.Z = Z; + cv.rhw = rhw; + cv.tu = tu; + cv.tv = tv; + return cv; + } + + public void Render() { + if(device == null) { + return; + } + // Clears the device with blue color + device.Clear(ClearFlags.Target, Color.FromArgb(0, 0, 255).ToArgb(), 1.0F, 0); + device.BeginScene(); + + // Show one texture a time, in order to create the illusion of a walking guy + device.SetTexture(0, textures[x]); + x = (x == 9) ? 0 : x+1; //If x is 9, set to 0, otherwise increment x + // Define which vertex buffer should be used + device.SetStreamSource(0, vertBuffer, 0); + device.VertexFormat = customVertexFlags; + // Draw the vertices of the vertex buffer, rendering them as a + // triangle strip, using the given texture + device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, numVerts - 2); + device.EndScene(); + + // Using an extra try-catch will prevent any errors if the device was disposed + try { + // Present the rendered scene + device.Present(); + } + catch { + } + } + } +} diff --git a/Source Code updated 08-12-05/EnterDirectX/WindowTest.resx b/Source Code updated 08-12-05/EnterDirectX/WindowTest.resx new file mode 100644 index 0000000..18d848a --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/WindowTest.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + True + + + Private + + + WindowTest + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/EnterDirectX/bin/TranspSample.bmp b/Source Code updated 08-12-05/EnterDirectX/bin/TranspSample.bmp new file mode 100644 index 0000000..4c8d620 Binary files /dev/null and b/Source Code updated 08-12-05/EnterDirectX/bin/TranspSample.bmp differ diff --git a/Source Code updated 08-12-05/EnterDirectX/bin/walk1.bmp b/Source Code updated 08-12-05/EnterDirectX/bin/walk1.bmp new file mode 100644 index 0000000..6ad476c Binary files /dev/null and b/Source Code updated 08-12-05/EnterDirectX/bin/walk1.bmp differ diff --git a/Source Code updated 08-12-05/EnterDirectX/bin/walk10.bmp b/Source Code updated 08-12-05/EnterDirectX/bin/walk10.bmp new file mode 100644 index 0000000..d5dde5d Binary files /dev/null and b/Source Code updated 08-12-05/EnterDirectX/bin/walk10.bmp differ diff --git a/Source Code updated 08-12-05/EnterDirectX/bin/walk2.bmp b/Source Code updated 08-12-05/EnterDirectX/bin/walk2.bmp new file mode 100644 index 0000000..0a142c7 Binary files /dev/null and b/Source Code updated 08-12-05/EnterDirectX/bin/walk2.bmp differ diff --git a/Source Code updated 08-12-05/EnterDirectX/bin/walk3.bmp b/Source Code updated 08-12-05/EnterDirectX/bin/walk3.bmp new file mode 100644 index 0000000..020e9d8 Binary files /dev/null and b/Source Code updated 08-12-05/EnterDirectX/bin/walk3.bmp differ diff --git a/Source Code updated 08-12-05/EnterDirectX/bin/walk4.bmp b/Source Code updated 08-12-05/EnterDirectX/bin/walk4.bmp new file mode 100644 index 0000000..726f025 Binary files /dev/null and b/Source Code updated 08-12-05/EnterDirectX/bin/walk4.bmp differ diff --git a/Source Code updated 08-12-05/EnterDirectX/bin/walk5.bmp b/Source Code updated 08-12-05/EnterDirectX/bin/walk5.bmp new file mode 100644 index 0000000..55fac3c Binary files /dev/null and b/Source Code updated 08-12-05/EnterDirectX/bin/walk5.bmp differ diff --git a/Source Code updated 08-12-05/EnterDirectX/bin/walk6.bmp b/Source Code updated 08-12-05/EnterDirectX/bin/walk6.bmp new file mode 100644 index 0000000..3686271 Binary files /dev/null and b/Source Code updated 08-12-05/EnterDirectX/bin/walk6.bmp differ diff --git a/Source Code updated 08-12-05/EnterDirectX/bin/walk7.bmp b/Source Code updated 08-12-05/EnterDirectX/bin/walk7.bmp new file mode 100644 index 0000000..5ad82ab Binary files /dev/null and b/Source Code updated 08-12-05/EnterDirectX/bin/walk7.bmp differ diff --git a/Source Code updated 08-12-05/EnterDirectX/bin/walk8.bmp b/Source Code updated 08-12-05/EnterDirectX/bin/walk8.bmp new file mode 100644 index 0000000..f21c4e3 Binary files /dev/null and b/Source Code updated 08-12-05/EnterDirectX/bin/walk8.bmp differ diff --git a/Source Code updated 08-12-05/EnterDirectX/bin/walk9.bmp b/Source Code updated 08-12-05/EnterDirectX/bin/walk9.bmp new file mode 100644 index 0000000..b0f66a4 Binary files /dev/null and b/Source Code updated 08-12-05/EnterDirectX/bin/walk9.bmp differ diff --git a/Source Code updated 08-12-05/EnterDirectX/frmDirectX.cs b/Source Code updated 08-12-05/EnterDirectX/frmDirectX.cs new file mode 100644 index 0000000..e57f88b --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/frmDirectX.cs @@ -0,0 +1,548 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + +namespace EnterDirectX { + /// + /// Summary description for FrmDirectX. + /// + public class FrmDirectX : System.Windows.Forms.Form { + internal System.Windows.Forms.Button CmdClose; + internal System.Windows.Forms.Button CmdTransparency; + internal System.Windows.Forms.Button CmdLight; + internal System.Windows.Forms.Button CmdMatrix; + internal System.Windows.Forms.Button CmdFullScreen; + internal System.Windows.Forms.Button CmdWindow; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + private System.Windows.Forms.ListBox AdaptersListBox; + private System.Windows.Forms.ListBox DevicesListBox; + private System.Windows.Forms.ListBox DisplayModesListBox; + private System.Windows.Forms.ListBox DeviceCapsListBox; + private System.Windows.Forms.Label DeviceCapsLabel; + private System.Windows.Forms.Label ResolutionsLabel; + private System.Windows.Forms.Label DevicesLabel; + private System.Windows.Forms.Label AdaptersLabel; + internal System.Windows.Forms.GroupBox TestsGroup; + + Device device; + + public FrmDirectX() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // + // TODO: Add any constructor code after InitializeComponent call + // + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.CmdClose = new System.Windows.Forms.Button(); + this.AdaptersListBox = new System.Windows.Forms.ListBox(); + this.DevicesListBox = new System.Windows.Forms.ListBox(); + this.DisplayModesListBox = new System.Windows.Forms.ListBox(); + this.DeviceCapsLabel = new System.Windows.Forms.Label(); + this.ResolutionsLabel = new System.Windows.Forms.Label(); + this.DevicesLabel = new System.Windows.Forms.Label(); + this.AdaptersLabel = new System.Windows.Forms.Label(); + this.DeviceCapsListBox = new System.Windows.Forms.ListBox(); + this.TestsGroup = new System.Windows.Forms.GroupBox(); + this.CmdTransparency = new System.Windows.Forms.Button(); + this.CmdLight = new System.Windows.Forms.Button(); + this.CmdMatrix = new System.Windows.Forms.Button(); + this.CmdFullScreen = new System.Windows.Forms.Button(); + this.CmdWindow = new System.Windows.Forms.Button(); + this.TestsGroup.SuspendLayout(); + this.SuspendLayout(); + // + // CmdClose + // + this.CmdClose.Location = new System.Drawing.Point(536, 296); + this.CmdClose.Name = "CmdClose"; + this.CmdClose.Size = new System.Drawing.Size(88, 29); + this.CmdClose.TabIndex = 34; + this.CmdClose.Text = "Close"; + this.CmdClose.Click += new System.EventHandler(this.CmdClose_Click); + // + // AdaptersListBox + // + this.AdaptersListBox.Location = new System.Drawing.Point(8, 32); + this.AdaptersListBox.Name = "AdaptersListBox"; + this.AdaptersListBox.Size = new System.Drawing.Size(160, 95); + this.AdaptersListBox.TabIndex = 35; + this.AdaptersListBox.SelectedIndexChanged += new System.EventHandler(this.AdaptersListBox_SelectedIndexChanged); + // + // DevicesListBox + // + this.DevicesListBox.Location = new System.Drawing.Point(8, 160); + this.DevicesListBox.Name = "DevicesListBox"; + this.DevicesListBox.Size = new System.Drawing.Size(160, 95); + this.DevicesListBox.TabIndex = 36; + this.DevicesListBox.SelectedIndexChanged += new System.EventHandler(this.DevicesListBox_SelectedIndexChanged); + // + // DisplayModesListBox + // + this.DisplayModesListBox.HorizontalScrollbar = true; + this.DisplayModesListBox.Location = new System.Drawing.Point(8, 288); + this.DisplayModesListBox.Name = "DisplayModesListBox"; + this.DisplayModesListBox.Size = new System.Drawing.Size(160, 95); + this.DisplayModesListBox.TabIndex = 37; + // + // DeviceCapsLabel + // + this.DeviceCapsLabel.AutoSize = true; + this.DeviceCapsLabel.BackColor = System.Drawing.Color.Transparent; + this.DeviceCapsLabel.Cursor = System.Windows.Forms.Cursors.Default; + this.DeviceCapsLabel.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.DeviceCapsLabel.ForeColor = System.Drawing.SystemColors.ControlText; + this.DeviceCapsLabel.Location = new System.Drawing.Point(184, 8); + this.DeviceCapsLabel.Name = "DeviceCapsLabel"; + this.DeviceCapsLabel.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.DeviceCapsLabel.Size = new System.Drawing.Size(101, 16); + this.DeviceCapsLabel.TabIndex = 29; + this.DeviceCapsLabel.Text = "Device Capabilities:"; + // + // ResolutionsLabel + // + this.ResolutionsLabel.AutoSize = true; + this.ResolutionsLabel.BackColor = System.Drawing.Color.Transparent; + this.ResolutionsLabel.Cursor = System.Windows.Forms.Cursors.Default; + this.ResolutionsLabel.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.ResolutionsLabel.ForeColor = System.Drawing.SystemColors.ControlText; + this.ResolutionsLabel.Location = new System.Drawing.Point(8, 264); + this.ResolutionsLabel.Name = "ResolutionsLabel"; + this.ResolutionsLabel.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.ResolutionsLabel.Size = new System.Drawing.Size(79, 16); + this.ResolutionsLabel.TabIndex = 28; + this.ResolutionsLabel.Text = "Display Modes:"; + // + // DevicesLabel + // + this.DevicesLabel.AutoSize = true; + this.DevicesLabel.BackColor = System.Drawing.Color.Transparent; + this.DevicesLabel.Cursor = System.Windows.Forms.Cursors.Default; + this.DevicesLabel.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.DevicesLabel.ForeColor = System.Drawing.SystemColors.ControlText; + this.DevicesLabel.Location = new System.Drawing.Point(3, 141); + this.DevicesLabel.Name = "DevicesLabel"; + this.DevicesLabel.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.DevicesLabel.TabIndex = 27; + this.DevicesLabel.Text = "Rendering Devices:"; + // + // AdaptersLabel + // + this.AdaptersLabel.AutoSize = true; + this.AdaptersLabel.BackColor = System.Drawing.Color.Transparent; + this.AdaptersLabel.Cursor = System.Windows.Forms.Cursors.Default; + this.AdaptersLabel.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.AdaptersLabel.ForeColor = System.Drawing.SystemColors.ControlText; + this.AdaptersLabel.Location = new System.Drawing.Point(8, 8); + this.AdaptersLabel.Name = "AdaptersLabel"; + this.AdaptersLabel.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.AdaptersLabel.Size = new System.Drawing.Size(51, 16); + this.AdaptersLabel.TabIndex = 26; + this.AdaptersLabel.Text = "Adapters:"; + // + // DeviceCapsListBox + // + this.DeviceCapsListBox.BackColor = System.Drawing.SystemColors.Window; + this.DeviceCapsListBox.Cursor = System.Windows.Forms.Cursors.Default; + this.DeviceCapsListBox.Font = new System.Drawing.Font("Verdana", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.DeviceCapsListBox.ForeColor = System.Drawing.SystemColors.WindowText; + this.DeviceCapsListBox.HorizontalScrollbar = true; + this.DeviceCapsListBox.ItemHeight = 12; + this.DeviceCapsListBox.Location = new System.Drawing.Point(184, 32); + this.DeviceCapsListBox.Name = "DeviceCapsListBox"; + this.DeviceCapsListBox.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.DeviceCapsListBox.Size = new System.Drawing.Size(336, 352); + this.DeviceCapsListBox.TabIndex = 30; + // + // TestsGroup + // + this.TestsGroup.Controls.Add(this.CmdTransparency); + this.TestsGroup.Controls.Add(this.CmdLight); + this.TestsGroup.Controls.Add(this.CmdMatrix); + this.TestsGroup.Controls.Add(this.CmdFullScreen); + this.TestsGroup.Controls.Add(this.CmdWindow); + this.TestsGroup.Location = new System.Drawing.Point(528, 32); + this.TestsGroup.Name = "TestsGroup"; + this.TestsGroup.Size = new System.Drawing.Size(106, 233); + this.TestsGroup.TabIndex = 35; + this.TestsGroup.TabStop = false; + this.TestsGroup.Text = "Tests"; + // + // CmdTransparency + // + this.CmdTransparency.Location = new System.Drawing.Point(13, 104); + this.CmdTransparency.Name = "CmdTransparency"; + this.CmdTransparency.Size = new System.Drawing.Size(87, 37); + this.CmdTransparency.TabIndex = 28; + this.CmdTransparency.Text = "Transparency"; + this.CmdTransparency.Click += new System.EventHandler(this.CmdTransparency_Click); + // + // CmdLight + // + this.CmdLight.Location = new System.Drawing.Point(13, 187); + this.CmdLight.Name = "CmdLight"; + this.CmdLight.Size = new System.Drawing.Size(87, 29); + this.CmdLight.TabIndex = 27; + this.CmdLight.Text = "Light"; + this.CmdLight.Click += new System.EventHandler(this.CmdLight_Click); + // + // CmdMatrix + // + this.CmdMatrix.Location = new System.Drawing.Point(13, 150); + this.CmdMatrix.Name = "CmdMatrix"; + this.CmdMatrix.Size = new System.Drawing.Size(87, 28); + this.CmdMatrix.TabIndex = 26; + this.CmdMatrix.Text = "Matrix "; + this.CmdMatrix.Click += new System.EventHandler(this.CmdMatrix_Click); + // + // CmdFullScreen + // + this.CmdFullScreen.Location = new System.Drawing.Point(13, 66); + this.CmdFullScreen.Name = "CmdFullScreen"; + this.CmdFullScreen.Size = new System.Drawing.Size(87, 29); + this.CmdFullScreen.TabIndex = 25; + this.CmdFullScreen.Text = "Full Screen"; + this.CmdFullScreen.Click += new System.EventHandler(this.CmdFullScreen_Click); + // + // CmdWindow + // + this.CmdWindow.Location = new System.Drawing.Point(13, 27); + this.CmdWindow.Name = "CmdWindow"; + this.CmdWindow.Size = new System.Drawing.Size(87, 27); + this.CmdWindow.TabIndex = 24; + this.CmdWindow.Text = "Window"; + this.CmdWindow.Click += new System.EventHandler(this.CmdWindow_Click); + // + // FrmDirectX + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(640, 398); + this.Controls.Add(this.CmdClose); + this.Controls.Add(this.AdaptersListBox); + this.Controls.Add(this.DevicesListBox); + this.Controls.Add(this.DisplayModesListBox); + this.Controls.Add(this.DeviceCapsLabel); + this.Controls.Add(this.ResolutionsLabel); + this.Controls.Add(this.DevicesLabel); + this.Controls.Add(this.AdaptersLabel); + this.Controls.Add(this.DeviceCapsListBox); + this.Controls.Add(this.TestsGroup); + this.Name = "FrmDirectX"; + this.Text = "FrmDirectX"; + this.Closing += new System.ComponentModel.CancelEventHandler(this.FrmDirectX_Closing); + this.Load += new System.EventHandler(this.FrmDirectX_Load); + this.TestsGroup.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() { + Application.Run(new FrmDirectX()); + } + + public void ListAdapters() { + // Add each adapter to the LstAdapters listbox + foreach(AdapterInformation info in Manager.Adapters) { + AdaptersListBox.Items.Add(info.Information.Description); + } + // Select the first availiable index, in order to fire the change event + AdaptersListBox.SelectedIndex = 0; + } + + public void ListDevices(int adapter) { + Caps deviceCaps = Manager.GetDeviceCaps(adapter, DeviceType.Reference); + + // Add each supported device to the DevicesListBox listbox + DevicesListBox.Items.Clear(); + // The Reference Rasterizer will always be supported + DevicesListBox.Items.Add("Reference Rasterizer (REF)"); + + // If there's no error when getting the HAL capabilities, + // then we have a hardware acceleration board installed + try { + deviceCaps = Manager.GetDeviceCaps(adapter, DeviceType.Hardware); + DevicesListBox.Items.Add("Hardware Acceleration (HAL)"); + } + catch { + } + // Select the first available index, in order to fire the change event + DevicesListBox.SelectedIndex = 0; + } + + private void FrmDirectX_Load(object sender, System.EventArgs e) { + // Fill the Adapters list + ListAdapters(); + } + + private void FrmDirectX_Closing(object sender, CancelEventArgs e) { + + if(device != null) { + device.Dispose(); + } + device = null; + } + + private void CmdWindow_Click(object sender, System.EventArgs e) { + using (WindowTest windowTest = new WindowTest()) { + + windowTest.Show(); + + // Initialize Direct3D and the device object + if(!windowTest.InitD3D(windowTest.Handle)) { + MessageBox.Show("Could not initialize Direct3D."); + windowTest.Dispose(); + return; + } + else { + // Load the textures and create the square to show them + if(!windowTest.CreateTextures()) { + MessageBox.Show("Could not initialize vertices and textures."); + return; + } + } + + // Uncomment the lines below to see a smooth walking man + //int desiredFrameRate = 10; + //int lastTick = 0; + while(!windowTest.EndTest) { + // Force a Frame rate of 10 frames to second on maximum + //if(System.Environment.TickCount - lastTick >= 1000 / desiredFrameRate) { + windowTest.Render(); + // Frame rate calculation + windowTest.Text = "Window Test. Frame rate: " + DirectXLists.CalcFrameRate().ToString(); + //lastTick = System.Environment.TickCount; + //} + Application.DoEvents(); + } + } + } + + private void CmdFullScreen_Click(object sender, System.EventArgs e) { + using (FullScreenTest fullScreenTest = new FullScreenTest()) { + fullScreenTest.Show(); + + // Initialize Direct3D and the device object + if(!fullScreenTest.InitD3D(fullScreenTest.Handle)) { + MessageBox.Show("Could not initialize Direct3D."); + fullScreenTest.Dispose(); + return; + } + else { + // Load the textures and create the square to show them + if(!fullScreenTest.CreateTextures()) { + MessageBox.Show("Could not initialize vertices and textures."); + fullScreenTest.DisposeD3D(); + fullScreenTest.Dispose(); + return; + } + } + + // If we have no errors, then enter the rendering loop + while(!fullScreenTest.EndTest) { + try { + fullScreenTest.Render(); + Application.DoEvents(); + } + catch { + // Ignore any errors that may arise when the window close + } + } + } + } + + private void CmdTransparency_Click(object sender, System.EventArgs e) { + using (TransparentTest transparentTest = new TransparentTest()) { + transparentTest.Show(); + + // Initialize Direct3D and the device object + if(!transparentTest.InitD3D(transparentTest.Handle)) { + MessageBox.Show("Could not initialize Direct3D."); + transparentTest.Dispose(); + return; + } + else { + // Load the textures and create the square to show them + if(!(transparentTest.CreateTextures() && transparentTest.CreateTransparentVertices(0, 0))) { + MessageBox.Show("Could not initialize vertices and textures."); + transparentTest.DisposeD3D(); + transparentTest.Dispose(); + return; + } + } + + // If we have no errors, then enter the rendering loop + while(!transparentTest.EndTest) { + transparentTest.Render(); + // Frame rate calculation + transparentTest.Text = + "Transparency Test. Frame rate: " + DirectXLists.CalcFrameRate().ToString(); + Application.DoEvents(); + } + } + } + + private void CmdMatrix_Click(object sender, System.EventArgs e) { + using (MatrixControl matrixControl = new MatrixControl()) { + MatrixTest matrixTest = new MatrixTest(); + matrixControl.Show(); + matrixTest.Show(); + + // Initialize Direct3D and the device object + if(!matrixControl.InitD3D(matrixTest.Handle)) { + MessageBox.Show("Could not initialize Direct3D."); + matrixControl.Dispose(); + return; + } + else { + // Load the textures and create the cube to show them + if(!matrixControl.CreateCube()) { + MessageBox.Show("Could not initialize geometry."); + matrixControl.DisposeD3D(); + matrixControl.Dispose(); + return; + } + } + + // Start with a simple rotation, to position the cube more nicely; + // and with no scale (100% of the original size) + + matrixControl.RotationX.Value = 45; + matrixControl.RotationY.Value = 45; + matrixControl.RotationZ.Value = 45; + matrixControl.ScaleX.Value = 100; + matrixControl.ScaleY.Value = 100; + matrixControl.ScaleZ.Value = 100; + + // Ends the test if ESC is pressed in any of the 2 windows + while(!matrixControl.EndTest && !matrixTest.EndTest) { + matrixControl.Render(); + // Frame rate calculation + matrixTest.Text = "Matrix Tests. Frame Rate: " + DirectXLists.CalcFrameRate().ToString(); + Application.DoEvents(); + } + matrixTest.Close(); + } + } + + private void CmdLight_Click(object sender, System.EventArgs e) { + LightControl winLightControl = new LightControl(); + using (LightTest lightTest = new LightTest()) { + + winLightControl.Show(); + lightTest.Show(); + + // Initialize Direct3D and the device object + if(!winLightControl.InitD3D(lightTest.Handle)) { + MessageBox.Show("Could not initialize Direct3D."); + winLightControl.Dispose(); + } + else { + // Load the textures and create the vertices + if(!winLightControl.CreateTextures()) { + MessageBox.Show("Could not initialize the textures and vertices."); + winLightControl.DisposeD3D(); + winLightControl.Dispose(); + } + } + + // Start with full white light in all vertices + + winLightControl.Red1.Value = 255; + winLightControl.Green1.Value = 255; + winLightControl.Blue1.Value = 255; + winLightControl.Red2.Value = 255; + winLightControl.Green2.Value = 255; + winLightControl.Blue2.Value = 255; + winLightControl.Red3.Value = 255; + winLightControl.Green3.Value = 255; + winLightControl.Blue3.Value = 255; + winLightControl.Red4.Value = 255; + winLightControl.Green4.Value = 255; + winLightControl.Blue4.Value = 255; + + + // Ends the test if ESC is pressed in any of the 2 windows + while(!winLightControl.EndTest && !lightTest.EndTest) { + winLightControl.Render(); + // Frame rate calculation + lightTest.Text = "Light Test. Frame Rate: " + DirectXLists.CalcFrameRate().ToString(); + Application.DoEvents(); + } + } + } + + private void CmdClose_Click(object sender, System.EventArgs e) { + this.Close(); + } + + private void AdaptersListBox_SelectedIndexChanged(object sender, System.EventArgs e) { + // Update the devices list every time a new adapter is chosen + ListDevices(AdaptersListBox.SelectedIndex); + } + + private void DevicesListBox_SelectedIndexChanged(object sender, System.EventArgs e) { + // The first entry in DevicesListBox is the Reference Rasterizer + DeviceType deviceType = (DevicesListBox.SelectedIndex == 0) ? DeviceType.Reference : DeviceType.Hardware; + ListDisplayModes(AdaptersListBox.SelectedIndex, deviceType, Format.X8R8G8B8); + ListDisplayModes(AdaptersListBox.SelectedIndex, deviceType, Format.X1R5G5B5); + ListDisplayModes(AdaptersListBox.SelectedIndex, deviceType, Format.R5G6B5); + ListDeviceCaps(AdaptersListBox.SelectedIndex, deviceType); + } + + private void ListDisplayModes(int adapter, DeviceType renderer, Format adapterFormat) { + DisplayModesListBox.Items.Clear(); + foreach(DisplayMode dispMode in Manager.Adapters[adapter].SupportedDisplayModes) { + // Check to see if the display mode is supported by the device + if(Manager.CheckDeviceType(adapter, renderer, dispMode.Format, dispMode.Format, false)) { + // Fill the display modes list with the width, height, the mode name and the refresh rate + DisplayModesListBox.Items.Add(dispMode.Width + "x" + dispMode.Height + + " ( " + dispMode.Format.ToString() + " - " + + dispMode.RefreshRate + "Khz)"); + } + } + } + + private void ListDeviceCaps(int adapter, DeviceType deviceType) { + DeviceCapsListBox.Items.Clear(); + Caps caps = Manager.GetDeviceCaps(adapter, deviceType); + DirectXLists.ListGeneralCaps(caps, DeviceCapsListBox); + DirectXLists.ListDevCaps(caps.DeviceCaps, DeviceCapsListBox); + DirectXLists.ListDriverCaps(caps.DriverCaps, DeviceCapsListBox); + DirectXLists.ListRasterCaps(caps.RasterCaps, DeviceCapsListBox); + DirectXLists.ListTextureCaps(caps.TextureCaps, DeviceCapsListBox); + } + } +} diff --git a/Source Code updated 08-12-05/EnterDirectX/frmDirectX.resx b/Source Code updated 08-12-05/EnterDirectX/frmDirectX.resx new file mode 100644 index 0000000..2adb5f4 --- /dev/null +++ b/Source Code updated 08-12-05/EnterDirectX/frmDirectX.resx @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + Private + + + False + + + Assembly + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + False + + + Assembly + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + FrmDirectX + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/NetterPillars/AINetterpillar.cs b/Source Code updated 08-12-05/NetterPillars/AINetterpillar.cs new file mode 100644 index 0000000..2439216 --- /dev/null +++ b/Source Code updated 08-12-05/NetterPillars/AINetterpillar.cs @@ -0,0 +1,116 @@ +using System; +using System.Drawing; +namespace Netterpillars { + public class AINetterpillar : GameEngine { + // Controls how random the netterpillar will move + private int RandomPercent = 5; + + public Sprite.CompassDirections ChooseNetterpillarDirection(Point currentLocation, Sprite.CompassDirections currentDirection) { + Sprite.CompassDirections ChooseNetterpillarDirection_result = (Sprite.CompassDirections)0; + GameObjects BestObject; + GameObjects NextObject = (GameObjects)0; + + switch(currentDirection) { + case Sprite.CompassDirections.East: + NextObject = arrGameField[currentLocation.X+1, currentLocation.Y]; + break; + case Sprite.CompassDirections.West: + NextObject = arrGameField[currentLocation.X-1, currentLocation.Y]; + break; + case Sprite.CompassDirections.South: + NextObject = arrGameField[currentLocation.X, currentLocation.Y+1]; + break; + case Sprite.CompassDirections.North: + NextObject = arrGameField[currentLocation.X, currentLocation.Y-1]; + break; + } + + //Pick the lowest value - Mushroom or empty + BestObject = (GameObjects)Math.Min(Math.Min(Math.Min((int)arrGameField[currentLocation.X+1, currentLocation.Y], (int)arrGameField[currentLocation.X-1, currentLocation.Y]), (int)arrGameField[currentLocation.X, currentLocation.Y+1]), (int)arrGameField[currentLocation.X, currentLocation.Y-1]); + + // If the current direction is equal the best direction, stay in current direction + if (NextObject==BestObject) { + ChooseNetterpillarDirection_result = currentDirection; + } + else { + // Select the direction of the best object + if (BestObject == arrGameField[currentLocation.X+1, currentLocation.Y]) { + ChooseNetterpillarDirection_result = Sprite.CompassDirections.East; + } + else if (BestObject == arrGameField[currentLocation.X-1, currentLocation.Y]) { + ChooseNetterpillarDirection_result = Sprite.CompassDirections.West; + } + else if (BestObject == arrGameField[currentLocation.X, currentLocation.Y+1]) { + ChooseNetterpillarDirection_result = Sprite.CompassDirections.South; + } + else if (BestObject == arrGameField[currentLocation.X, currentLocation.Y-1]) { + ChooseNetterpillarDirection_result = Sprite.CompassDirections.North; + } + } + + ChooseNetterpillarDirection_result = RandomDirection(currentLocation, ChooseNetterpillarDirection_result); + return ChooseNetterpillarDirection_result; + } + + private static Random rand = new Random(); + public Sprite.CompassDirections RandomDirection(Point currentLocation, Sprite.CompassDirections chooseCompassDirections) { + Sprite.CompassDirections RandomDirection_result; + int x = rand.Next(0, 100); //Rnd(1)*100; + + RandomDirection_result = chooseCompassDirections; + if (x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Config + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/NetterPillars/GameEngine.cs b/Source Code updated 08-12-05/NetterPillars/GameEngine.cs new file mode 100644 index 0000000..ed2106c --- /dev/null +++ b/Source Code updated 08-12-05/NetterPillars/GameEngine.cs @@ -0,0 +1,300 @@ +using System; +using System.Drawing; +namespace Netterpillars { + public class GameEngine { + + public enum GameFieldSizes { + Small = 2, + Medium = 1, + Big = 0 + }; + + public enum MushroomQuantity { + Few = 2, + JustRight = 1, + Many = 0 + }; + + public int Width = 25; + public int Height = 25; + private GameFieldSizes size = GameFieldSizes.Medium; + private MushroomQuantity mushrooms = MushroomQuantity.JustRight; + public static Image BackgroundImage; + + // This array and enum controls the object collision + protected static GameObjects[,] arrGameField; + protected enum GameObjects { + Mushroom = 0, + Empty = 1, + //Spider = 2 + Branch = 3, + Netterpillar = 4 + }; + + + private System.IntPtr ScreenWinHandle; + + // Game objects + private Branch[] branches; + + private Mushroom objMushrooms; + private int MushroomNumber = 75; + + public Netterpillar[] netterPillars = new Netterpillar[4]; + public int NetterpillarNumber = 1; + public Netterpillar Player1; + + //Controls the game end + public bool GameOver; + public bool Paused; + + // This properties are defined as property procedures, and + // they use the enumerations above as property types + public GameFieldSizes Size { + get { return size; } + set { + size = value; + switch(value) { + case GameFieldSizes.Small: + Width = 15; + Height = 15; + break; + case GameFieldSizes.Medium: + Width = 25; + Height = 25; + break; + case GameFieldSizes.Big: + Width = 40; + Height = 30; + break; + } + } + } + + public MushroomQuantity Mushrooms { + get { + return mushrooms; + } + set { + mushrooms = value; + switch(value) { + case MushroomQuantity.Few: + MushroomNumber = 25; + break; + case MushroomQuantity.JustRight: + MushroomNumber = 75; + break; + case MushroomQuantity.Many: + MushroomNumber = 125; + break; + } + + if (Size==GameFieldSizes.Medium) { + MushroomNumber *= 2; + } + else if(Size==GameFieldSizes.Big) { + MushroomNumber *= 3; + } + } + } + + public void MoveNetterpillars() { + int incX = 0; int incY = 0; + + for(int i=0; i + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + + Qk32qQMAAAAAAHYAAAAoAAAAIAMAAFgCAAABAAQAAAAAAAAAAAASCwAAEgsAABAAAAAQAAAAAAAA/4AA + AP//AAD/AACA/4AAgP8AgAD/AAD//4CAAP//AP//AICA/4CAgP8A/wD///8A/8DAwP8A/////////xAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBCqqqAQEBAQEBAQEBAQEBCqqqoQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGqqqEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQ3d3d0BAQEBAQEBrd3d2gEBAQEBCt3d3QEBCt3d2gEBAQEBrd3doQEBAQGv////2gEN3d2hAQEBAQqv + /////aEBAQEBAQEBDd3doQEBAQEN3d2hAQEBAQEK3//////aAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCv////oBAQEBAQEN////0QEBAQ + EBr///8QEB3///oQEBAQEN///6AQEBCt//////+gH///0BAQEBCv///////9oBAQEBAQEK////AQEBAQ + r///0BAQEBAa//////////oQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEB3////6EBAQEBAQH/////oQEBAQEK////AQEN///6AQEBAQHf//+h + AQEK////////+g///9EBAQEN//////////oBAQEBAQHf///6AQEBAd////EBAQEB3///////////0QEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EN/////QEBAQEBAa/////6AQEBAQGv///xAQHf//+hAQEBAQ3///oBAQH/////////0f///QEBAQ3/// + ////////oBAQEBAQ////+hAQEBD////6EBAQHf////////////0QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/////8QEBAQEBCv/////RAQEB + AQr///8BAQ3///oBAQEBAd///6EBAa//////3f//r///0QEBCv/////d3/////oBAQEBCv////0BAQEK + /////QEBAa/////aqqrf////oQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAa//////oQEBAQEB3/////8BAQEBAa////EBAd///6EBAQEBDf//+g + EBD////9oBAa/////9AQEK////+gEBDf////EBAQEB3/////EBAQGv////8QEBD////6EBAQEN///9AQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + Df/////6AQEBAQEP//////oBAQEBCv///wEBDf//+gEBAQEB3///oQEK////0QEBAa/////RAQHf///6 + AQEBCv///9EBAQEP/////6EBAQ3/////oQEK3///oQEBAQEP///6AQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB///////RAQEBAQr//////6EBAQ + EBr///8QEB3///oQEBAQEN///6AQHf///xAQEBAa////0BAa////oBAQEBDf///6EBAQr/////+gEBAf + /////6AQEBAaqhAQEBAQHf//+hAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQGv//////8BAQEBAd///////QEBAQEK////AQEN///6AQEBAQHf//+h + AQ////0BAQEBCv///9EBCv///wEBAQEBD////QEBAa//////0QEBr//////RAQEBAQEBAQEBAQ3///oB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + r///////oBAQEBDf//////8QEBAQGv///xAQHf//+hAQEBAQ3///oBCv///6EBAQEBDf///QEB////0Q + EBAQEB////0QEBD///////AQEK//////8BAQEBAQEBAQEBCv///6EBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAd///////6EBAQEK////////oQEB + AQr///8BAQ3///oBAQEBAd///6EB3///+gEBAQEBr///0QGv///6AQEBAQEK////oQEK////r//6AQHf + //rf//oBAQEBAQEBAQqv////+gEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBD////d///QEBAQGv///6///6AQEBAa////EBAd///6EBAQEBDf//+g + EN////AQEBAQEK///9AQr///+hAQEBAQGv///6AQGv///R//+hAQ///6r//9EBAQEBAQqq3///////AQ + EBAQEBAQEBAQEB3///AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEK + ////2v//8QEBAQ3///8P///RAQEBCv///wEBDf//+gEBAQEB3///oQHf///xAQEBAQGv///RAa////oB + AQEBAQr///+hAQ3///oN//0BCv//8a///wEBAQEK3//////////RAQEBAQEBAQEBAQEN///xAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGv///6D///oQEBAf///9Gv//8BAQ + EBr///8QEB3///oQEBAQEN///6AQ3///8BAQEBAQr///0BCv///6EBAQEBAa////oBCv///6Gv//EBr/ + /9Af//+gEBAa3///////////oBAQEBAQEBAQEBAQHf//8BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQ3///+h3//6AQEBr///+gr///oBAQEK////AQEN///6AQEBAQHf//+h + Af////EBAQEBAa///9EBr///8QEBAQEBCv///6EBr///0Qr//6EN//+hDf//0QEBr///////////2gEB + AQEBAQEBAQEBAQ3///EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf + ///9EK///RAQEK////oQ///6EBAQGv///xAQHf///RAQEBAQ3///oBD////wEBAQEBCv///QEK////oQ + EBAQEBr///+gEN///9AQ//+gr///oBr//9AQEN///////////RAQEBAQEBAQEBAQEBAd///wEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBr////QGv//8BAQHf///RAd///wEB + AQr///8BAQ3///0BAQEBAd///6EB3///8QEBAQEBr///0QGv///6AQEBAQEK////oQH///+hAd//0a// + /wEB///6AQr/////////2qEBAQEBAQEBAQEBAQEBDf//8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEN////oQH///oBAQ////0BCv//+gEBAa////EBAd////EBAQEBDf//+g + EN////oQEBAQEK///9AQr///+hAQEBAQGv///xAa////EBCv//Cv//0QEN//+hAf//////3aoBAQEBAQ + EBAQEBAQEBAQEB3///AQHd/QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQHf + ///xAQ3//6EBCv///6EBr///oQEBCv///wEBDf///6EBAQEB3///oQGv///6AQEBAQGv///RAQ////0B + AQEBAQ3///8BDf///QEBr//63//6AQGv//0Br////9oBAQEBAQEBAQEBAQEBAQEBAQEN///xDf///9EB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAa////0BAa///QEB3///+gEB///9AQ + EBr///8QEB3///+gEBAQEP///6AQr///+hAQEBAQ3///0BAd////EBAQEBAf///9EB////oQEB3//f// + +hAQr///EK////oQEBAQEBAQEBAa3//6EBAa///aHf///d/////9EBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBCv///6EBCv//8QEN///9AQEN///xAQEK////AQEN////8QEBAQr///+h + AQ////0BAQEBAf///9EBCv///6EBAQEBr///+gGv///6AQEN//////EBAQ///6Gv///RAQEBAQEBAQEB + Aa3//wEBD//9oQ3//////////wEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB3/ + //+gEBD///oQr///+hAQGv//+hAQGv///xAQHf////2gEBAd////oBAd////oBAQEB3////QEBDf///w + EBAQGv///9AQr///0BAQGv/////QEBAd///Qr///oBAQEBDdqqAQEBAd///QEN///RAd/////aDf///Q + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP////AQEB3//6Aa////oBAQr///oB + AQr///8BAQ3///3/+gEB3////wEBCv////oBAQHf////0QEBr////6EBAa////+hAf///9EBAQr///// + oQEBCv//8Q///9EBAQEK///9AQEBCt//+gr//9oBDf///9EBDf//8QEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQr////RAQEK///RDf///wEBAQ///9EBAa////EBAd///6//////////0Q + EBDf////2qqt/////9AQEB3/////2q3////9EBr///+gEBAQ3////6AQEBD///od///9oBAQr///+hAQ + EBCv//+v//+gEB3///0QEBDf//0QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAa// + //oBAQGv//8B////0QEBAd///wEBCv///wEBDf//8a/////////6AQEBr//////////////RAQEB3/// + ////////8QEK////AQEBAd////8BAQEB3//6Cv/////d//////EB//EBDf/////9AQEN///xAQEBr//9 + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBDf///6EBAQH///qv///6AQEBCv//+g + EBr///8QEB3///od////////0BAQEBr////////9r///0BAQEB3//////////xAQHf///RAQEBCv///9 + EBAQEK///RCv//////////2gHxAfEBrf////2hAQHf//8BAQEB///xAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEB////8QEBAQ3//6r///+hAQEBr///oQEK////AQEN///xAd//////+gEB + AQEB3///////+q///9EBAQEB3////////9EBAQ////oBAQEBr///+gEBAQGv//8BCv/////////6AfHx + 8fEB3////9EBAQ3///EBAQEP//8BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGv// + /9AQEBAa///d///9EBAQEB////AQGv///xAQHf//+hAa/////6AQEBAQEBr//////6Cv///QEBAQEBrd + /////9oQEBCv///wEBAQEB////oQEBAQH///oBAa///////6EBDw/xDwEK////+gEBAd///wEBAQH/// + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ3///+hAQEBCv///////QEBAQEN///6 + AQGqqqoBAQGqqqEBAQrd2qEBAQEBAQEBrd///6EBr///0QEBAQEBAaqt2qEBAQEBqqqqoQEBAQEKqqqh + AQEBAQqqqgEBAQqt3dqqAQEB8fHx8QEP////AQEBDf//8QEBAQ///wEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAd////oBAQEBD///////oQEBAQGv//+hAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEK///9AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB+q + rxAQr////6AQEB3///AQEBAf//8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/// + /wEBAQEB3//////xAQEBAQr///0BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGv///RAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB//EBAd/////RAQEN///xAQEBD/// + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEK////0QEBAQEK//////0BAQEBAQ//// + EBCqqqoQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQr///0BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBrf////2hAQHf///RAQEN///RAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQHf///6AQEBAQGv/////6EBAQEBAd///6EK////AQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAa///9EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEN//////0BAQ3////RAQH///0BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ//// + +hAQEBAQH/////+gEBAQEBCv//+gGv///xAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCv///QEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQr///r///oBAd/////RAd///w + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCv////EBAQEBAQ3/////AQEBAQEBr/// + 0Qr///8BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBr///0QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBCt//+gr//9oBDf//////////0QEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBr////QEBAQEBAa/////RAQEBAQEB3///Aa////EBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEK///9AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EB3//9AQ3//9EB3//////////RAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEN//// + oQEBAQEBCv////oBAQEBAQEN///6Cv///wEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGv///RAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGt//8BAQ///aEN///x3////9EB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH////6AQEBAQEBD////6EBAQEBAQGv// + +hr///8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQr///0BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAa3//6EBAa///aHf//8B3f/90QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQrf////////2gEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGtAQHa + AQrRAdoBCv/6AQ2hAQHf/9EBCt/9oQGv//oBCtEBAQ/9AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQGt///////////////aAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQr6AQ/RAa8BD6EK+qr6Ad0BAd+hrdEN+q + qvoQ/aCvoBr6EBDdoBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBrf//////// + //////////2gEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAa+hCv+hCvEB+gHdAQrxD9EBD6EBr6GqAQH9CvoBCvEK+gEB+gEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAa3//////////////////////9oBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCvoB3d + 0BrwEPoa+hAQoB3QEK+gEB/QEBAa+h3QEBr6GvoQEPoQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEK3/////////////////////////8BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBr6GvqvEK8QH6CvoBAQEN0QGvAQEP0QHd + /9EP0QEK+gr6AQH6AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAa3///////////// + //////////////+hAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEK+g3xD6GvAQ+hr6EBAQHfAQr6AQHdCv/aoQHdAQGvoa+hAQ+hAQH/8QEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEK3/////////////////////////////0BAQ8B8QHxAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGvofoB + 3QrxAfoB+gEB0Q3xAa+hAQ+h3wEBAQrxAQr6CvoBAfoBAfEB8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQH///////////////////////////////EBAfEPDw8BAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQrxr6EK8a8BD6EN8QHfAd/RAd8BCvoN0Q + Gtoa+hAf0Br6EBD6EB8fHx8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf//////////////// + ///////////////wEBDwH/r/EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAa8N8QENqvEB+gEN2t+hDa36Ad/d+gGv+t/RAa/d3wGt/dqt/doPD/EPAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBDf//////////////////////////////+gEP/68BDwEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCvr6AQ + GvrwEKoQEK3aEBqgqhAaqqAQEK3aEBAaqqAQrf2qqv2qHx8fHxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEB3///////////////////////////////0QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBr98BAQH98QEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQH6AQH6AQH6qvEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEK//////////////// + ////////////////AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEK/9EBAQ3/AQ2hAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ36oQ2hAQH/8QEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQrfAQEP///////////////////////////////6AQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGt2gEB + Aa3RAdoBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQr9AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBrf/9AQHf///////////////////////////////RAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ///aEBAQEBAQEBAQEBAQEBAQrf///RAQr/////////////// + ////////////////8BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAf////2hAQEBAQEBAQEBAQEBrf////8BAQ////////////////////////////////EBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD//////9oQEBAQEBAQEBAa + 3///////0BAd///////////////////////////////6EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB3////////9oBAQEBAQGt//////////EBCv////////////// + /////////////////QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEK////////////3d3d3f///////////6EBD///////////////////////////////8QEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP//////////////////// + /////////QEB////////////////////////////////oQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/////////////////////////////8QEN////////////// + /////////////////9AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQ3/////////////////////////////AQGv///////////////////////////////xAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAa//////////////////// + /////////6AQH///////////////////////////////8BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/////////////////////////////RAQ3///////////// + //////////////////oBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBDf////////////////////////////8BAa///////////////////////////////9EBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBr/////////////////// + //////////oBAf///////////////////////////////wEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB/////////////////////////////9EBD///////////// + //////////////////8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEP/////////////////////////////wEB3///////////////////////////////oQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQHf////////////////// + //////////8QEK///////////////////////////////9AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQr/////////////////////////////oQEP//////////// + ///////////////////xAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQ/////////////////////////////9AQHf//////////////////////////////+hAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAd////////////////// + ///////////xAQr///////////////////////////////0BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCv////////////////////////////+hAQ//////////// + ////////////////////EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBD/////////////////////////////0BAf///////////////////////////////6EBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB////////////////// + ////////////EBDf///////////////////////////////QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEN/////////////////////////////wEBr/////////// + ////////////////////8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQGv////////////////////////////+gEB////////////////////////////////AQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH///////////////// + ////////////0QEN///////////////////////////////6AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ3/////////////////////////////AQGv////////// + /////////////////////RAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAa/////////////////////////////6AQH///////////////////////////////8BAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf//////////////// + /////////////RAQ///////////////d3d3d3///////////oBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBDf////////////////////////////8BAd////////// + /9oBAQEBAQEBCt///////9EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBr/////////////////////////////oBCv/////////aAQEBAQEBAQEBAQrd/////wEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB//////////////// + /////////////9EBD///////0QEBAQEBAQEBAQEBAQEK3f//8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/////////////////////////////wEB3/////0BAQ + EBAQEBAQEBAQEBAQEBCt/9AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQHf////////////////////////////8QEK////0QEBAQEBCt3f/////d2hAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQr/////////////// + //////////////oQEP//0BAQEBAa3////////////92gEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ/////////////////////////////9AQEP0QEBAQrf + //////////////////2hAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAd/////////////////////////////xAQEBAQEK3//////////////////////9oQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBDf////////////// + //////////////+hAQEBAa3/////////////////////////0QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBr/////////////////////////////0BAQEK3///// + //////////////////////8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEB/////////////////////////////wEBAQH/////////////////////////////8QEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEN////////////// + //////////////AQEBAf//////////////////////////////AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGv//////////////////////////2hAQEB3/////// + ///////////////////////xAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQGt////////////////////////0QEBAQEN///////////////////////////////RAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBrf////////// + //////////2hAQEBAQGv//////////////////////////////8BAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAa3/////////////////2gEBAQEBAQH/////// + ////////////////////////0BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEK3////////////9oBAQEBAf0BAQ////////////////////////////////EB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCq3f// + ////2hAQEBAQGt//oBAd///////////////////////////////wEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBDd0BAQEBAQEBAQEBAQEBAQEBCt///9EBCv////// + ////////////////////////8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEB///9oQEBAQEBAQEBAQEBAQEK3////wEBD///////////////////////////////0Q + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/////9oBAQEB + AQEBAQEBCt//////+gEB3///////////////////////////////AQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGv///////aAQEBAQEBAQrf////////0QEK////// + /////////////////////////xAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQH///////////3d3d3d////////////AQEP///////////////////////////////R + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ//////////// + /////////////////6AQH///////////////////////////////0BAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAd/////////////////////////////RAQ3///// + //////////////////////////EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBCv////////////////////////////8BAa///////////////////////////////w + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/////////// + //////////////////EBAf///////////////////////////////wEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB/////////////////////////////6EBDf//// + //////////////////////////8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEN/////////////////////////////QEBr/////////////////////////////// + 0QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGv////////// + //////////////////8QEB///////////////////////////////9AQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/////////////////////////////oQEP//// + ///////////////////////////xAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQ3////////////////////////////9AQHf////////////////////////////// + 8BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAa////////// + ///////////////////xAQr///////////////////////////////8BAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf////////////////////////////8BAQ//// + ////////////////////////////EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBD/////////////////////////////oBAd////////////////////////////// + /wEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB3///////// + ///////////////////9EBCv///////////////////////////////QEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEK/////////////////////////////wEBD/// + ////////////////////////////8QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEP////////////////////////////+gEB////////////////////////////// + //AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQHf//////// + ////////////////////0QEN///////////////////////////////9AQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQr/////////////////////////////AQGv// + /////////////////////////////RAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQ/////////////////////////////6AQH///////////////////////////// + //8BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf//////// + /////////////////////RAQ3///////////////////////////////0BAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBDf////////////////////////////8BAa// + //////////////////////////////EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBr/////////////////////////////oBAf//////////////////////////// + ///wEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB//////// + /////////////////////9EBDf////////////2hAQEBCt///////////QEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEN/////////////////////////////wEBr/ + /////////RAQEBAQEBAQEK3///////0QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQGv////////////////////////////+gEB////////0QEBAQEBAQEBAQEBAd// + ////AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/////// + //////////////////////0QEP//////0BAQEBAQEBAQEBAQEBAQHf///xAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ//////////////////////////////AQHf + ////0QEBAQEBAQEBAQEBAQEBAQEB3/EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAd/////////////////////////////6AQr///2hAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCv////// + ///////////////////////RAQ//2gEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/////////////////////////////0BAa + 2hAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEB3/////////////////////////////oBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEN////// + ///////////////////////9EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGv/////////////////////////////QEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQH/////////////////////////////0QEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ3///// + //////////////////////+hAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ//////////////////////////+gEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAa3////////////////////////aAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGt// + ///////////////////aEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBrf/////////////////aAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAa3/////////////3aEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBrd///////doBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBABAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ + EBAQEBAQEBAQEBAQEBAQEBAQAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB + AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ== + + + + + /9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwg + JC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIy + MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAHgAlgDASIAAhEBAxEB/8QA + HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh + MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVW + V1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG + x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF + BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV + YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq + 8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD0EpSeUc1aAFLgYr81PWK4TFO6CnsQKiLUwA03vTgM0/ZxTAaG + pwemkUYpAP30bs00CnAUgGkU3bzUhFNAoAAtNK1KBTTQBEF5qXfgU3BxTCDQBIHpS9RgUpWgA381IJOK + gINKAaAJGeoyeaQ0maoCRWxUgbioFqQA0gHk0BqSkIxSsBJuzSMM1GGxTw1ADdtKOKcTxUZNICXdS5qu + GOafk4oETK1PDcVXUmpRQA4tTS1IwqLdzQBITTaQGlpgOzinBqiJpA3NAFgNSluKjUUp6VIAzUmajY03 + dxQBLuphGajLU4NTAXbzT1GKQHigtTGO3YppambsmlpgOFKW4ptNINACM2aaDzSNSZoAmV6cZOKgFKQa + AHb+aeHqEA08LQA4vRvyKYRSAHNABt5pwWlwcU4UgEK03bzUpFMIoAAKduxSAUpFABvpC9IRSYoAC1M7 + 0/FO2cUAMFO6imkYpQ1ACFM0zyjmrCkGn4GKAKoSirJAopARh6UvUAJqQUwGsxNNHWpSoo2gUwBRTzTQ + cU7NMBhBpuDUvFBApARjNLnmlNNpAPzxSio8GnCmBJmmE0Gmd6AHg8UhFAprGgBR1p45qHPNPDe9ACkU + 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 + + + + frmGameField + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/NetterPillars/GameOver.cs b/Source Code updated 08-12-05/NetterPillars/GameOver.cs new file mode 100644 index 0000000..c44ee94 --- /dev/null +++ b/Source Code updated 08-12-05/NetterPillars/GameOver.cs @@ -0,0 +1,260 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +namespace Netterpillars { + public class GameOver : System.Windows.Forms.Form { + public GameOver() : base() { + //This call is required by the Windows Form Designer. + InitializeComponent(); + + //Add any initialization after the InitializeComponent() call + } + + //Form overrides dispose to clean up the component list. + protected override void Dispose(bool disposing) { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + internal System.Windows.Forms.Button Button1; + internal System.Windows.Forms.Label Label1; + internal System.Windows.Forms.GroupBox grpStats; + internal System.Windows.Forms.Label LblPlayer1; + internal System.Windows.Forms.Label LblPlayer2; + internal System.Windows.Forms.Label LblPlayer3; + internal System.Windows.Forms.Label LblPlayer4; + internal System.Windows.Forms.Label LblPlayer4Is; + internal System.Windows.Forms.Label LblPlayer3Is; + internal System.Windows.Forms.Label LblPlayer2Is; + internal System.Windows.Forms.Label LblPlayer1Is; + internal System.Windows.Forms.Label LblPlayer4Length; + internal System.Windows.Forms.Label LblPlayer3Length; + internal System.Windows.Forms.Label LblPlayer2Length; + internal System.Windows.Forms.Label LblPlayer1Length; + + //Required by the Windows Form Designer + private System.ComponentModel.IContainer components = new System.ComponentModel.Container(); + + //NOTE: The following procedure is required by the Windows Form Designer + //It can be modified using the Windows Form Designer. + //Do not modify it using the code editor. + [System.Diagnostics.DebuggerStepThrough] + private void InitializeComponent() { + this.Button1 = new System.Windows.Forms.Button(); + this.Label1 = new System.Windows.Forms.Label(); + this.grpStats = new System.Windows.Forms.GroupBox(); + this.LblPlayer4Length = new System.Windows.Forms.Label(); + this.LblPlayer3Length = new System.Windows.Forms.Label(); + this.LblPlayer2Length = new System.Windows.Forms.Label(); + this.LblPlayer1Length = new System.Windows.Forms.Label(); + this.LblPlayer4Is = new System.Windows.Forms.Label(); + this.LblPlayer3Is = new System.Windows.Forms.Label(); + this.LblPlayer2Is = new System.Windows.Forms.Label(); + this.LblPlayer1Is = new System.Windows.Forms.Label(); + this.LblPlayer4 = new System.Windows.Forms.Label(); + this.LblPlayer3 = new System.Windows.Forms.Label(); + this.LblPlayer2 = new System.Windows.Forms.Label(); + this.LblPlayer1 = new System.Windows.Forms.Label(); + this.grpStats.SuspendLayout(); + this.SuspendLayout(); + // + // Button1 + // + this.Button1.DialogResult = System.Windows.Forms.DialogResult.OK; + this.Button1.Location = new System.Drawing.Point(120, 224); + this.Button1.Name = "Button1"; + this.Button1.Size = new System.Drawing.Size(75, 24); + this.Button1.TabIndex = 0; + this.Button1.Text = "OK"; + // + // Label1 + // + this.Label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.Label1.Location = new System.Drawing.Point(40, 24); + this.Label1.Name = "Label1"; + this.Label1.Size = new System.Drawing.Size(240, 32); + this.Label1.TabIndex = 1; + this.Label1.Text = "Game Over !"; + this.Label1.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // grpStats + // + this.grpStats.Controls.AddRange(new System.Windows.Forms.Control[] { + this.LblPlayer4Length, + this.LblPlayer3Length, + this.LblPlayer2Length, + this.LblPlayer1Length, + this.LblPlayer4Is, + this.LblPlayer3Is, + this.LblPlayer2Is, + this.LblPlayer1Is, + this.LblPlayer4, + this.LblPlayer3, + this.LblPlayer2, + this.LblPlayer1}); + this.grpStats.Location = new System.Drawing.Point(32, 64); + this.grpStats.Name = "grpStats"; + this.grpStats.Size = new System.Drawing.Size(288, 152); + this.grpStats.TabIndex = 2; + this.grpStats.TabStop = false; + this.grpStats.Text = "Stats"; + // + // LblPlayer4Length + // + this.LblPlayer4Length.Location = new System.Drawing.Point(176, 120); + this.LblPlayer4Length.Name = "LblPlayer4Length"; + this.LblPlayer4Length.Size = new System.Drawing.Size(88, 24); + this.LblPlayer4Length.TabIndex = 11; + this.LblPlayer4Length.Text = "0"; + // + // LblPlayer3Length + // + this.LblPlayer3Length.Location = new System.Drawing.Point(176, 88); + this.LblPlayer3Length.Name = "LblPlayer3Length"; + this.LblPlayer3Length.Size = new System.Drawing.Size(96, 24); + this.LblPlayer3Length.TabIndex = 10; + this.LblPlayer3Length.Text = "0"; + // + // LblPlayer2Length + // + this.LblPlayer2Length.Location = new System.Drawing.Point(176, 56); + this.LblPlayer2Length.Name = "LblPlayer2Length"; + this.LblPlayer2Length.Size = new System.Drawing.Size(80, 16); + this.LblPlayer2Length.TabIndex = 9; + this.LblPlayer2Length.Text = "0"; + // + // LblPlayer1Length + // + this.LblPlayer1Length.Location = new System.Drawing.Point(176, 24); + this.LblPlayer1Length.Name = "LblPlayer1Length"; + this.LblPlayer1Length.Size = new System.Drawing.Size(88, 16); + this.LblPlayer1Length.TabIndex = 8; + this.LblPlayer1Length.Text = "0"; + // + // LblPlayer4Is + // + this.LblPlayer4Is.Location = new System.Drawing.Point(88, 120); + this.LblPlayer4Is.Name = "LblPlayer4Is"; + this.LblPlayer4Is.Size = new System.Drawing.Size(96, 24); + this.LblPlayer4Is.TabIndex = 7; + this.LblPlayer4Is.Text = "Comp./Human"; + // + // LblPlayer3Is + // + this.LblPlayer3Is.Location = new System.Drawing.Point(88, 88); + this.LblPlayer3Is.Name = "LblPlayer3Is"; + this.LblPlayer3Is.Size = new System.Drawing.Size(104, 24); + this.LblPlayer3Is.TabIndex = 6; + this.LblPlayer3Is.Text = "Comp./Human"; + // + // LblPlayer2Is + // + this.LblPlayer2Is.Location = new System.Drawing.Point(88, 56); + this.LblPlayer2Is.Name = "LblPlayer2Is"; + this.LblPlayer2Is.Size = new System.Drawing.Size(88, 16); + this.LblPlayer2Is.TabIndex = 5; + this.LblPlayer2Is.Text = "Comp./Human"; + // + // LblPlayer1Is + // + this.LblPlayer1Is.Location = new System.Drawing.Point(88, 24); + this.LblPlayer1Is.Name = "LblPlayer1Is"; + this.LblPlayer1Is.Size = new System.Drawing.Size(96, 16); + this.LblPlayer1Is.TabIndex = 4; + this.LblPlayer1Is.Text = "Comp./Human"; + // + // LblPlayer4 + // + this.LblPlayer4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.LblPlayer4.Location = new System.Drawing.Point(16, 120); + this.LblPlayer4.Name = "LblPlayer4"; + this.LblPlayer4.Size = new System.Drawing.Size(88, 24); + this.LblPlayer4.TabIndex = 3; + this.LblPlayer4.Text = "Player 4"; + // + // LblPlayer3 + // + this.LblPlayer3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.LblPlayer3.Location = new System.Drawing.Point(16, 88); + this.LblPlayer3.Name = "LblPlayer3"; + this.LblPlayer3.Size = new System.Drawing.Size(96, 24); + this.LblPlayer3.TabIndex = 2; + this.LblPlayer3.Text = "Player 3"; + // + // LblPlayer2 + // + this.LblPlayer2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.LblPlayer2.Location = new System.Drawing.Point(16, 56); + this.LblPlayer2.Name = "LblPlayer2"; + this.LblPlayer2.Size = new System.Drawing.Size(80, 16); + this.LblPlayer2.TabIndex = 1; + this.LblPlayer2.Text = "Player 2"; + // + // LblPlayer1 + // + this.LblPlayer1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.LblPlayer1.Location = new System.Drawing.Point(16, 24); + this.LblPlayer1.Name = "LblPlayer1"; + this.LblPlayer1.Size = new System.Drawing.Size(88, 16); + this.LblPlayer1.TabIndex = 0; + this.LblPlayer1.Text = "Player 1"; + // + // GameOver + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(346, 266); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.grpStats, + this.Label1, + this.Button1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "GameOver"; + this.Text = ".Netterpillars"; + this.Load += new System.EventHandler(this.GameOver_Load); + this.grpStats.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + + private void GameOver_Load(System.Object sender, System.EventArgs e) { + + LblPlayer1Length.Text = MainGame.netterpillarGameEngine.netterPillars[0].NetterBodyLength.ToString(); + LblPlayer1Is.Text = (MainGame.netterpillarGameEngine.netterPillars[0].IsComputer ? "Computer" : "Human"); + + if (MainGame.netterpillarGameEngine.netterPillars[1]!=null) { + LblPlayer2Length.Text = MainGame.netterpillarGameEngine.netterPillars[1].NetterBodyLength.ToString(); + LblPlayer2Is.Text = (MainGame.netterpillarGameEngine.netterPillars[1].IsComputer ? "Computer" : "Human"); + } + else { + LblPlayer2Length.Text = "-"; + LblPlayer2Is.Text = "-"; + } + + if (MainGame.netterpillarGameEngine.netterPillars[2]!=null) { + LblPlayer3Length.Text = MainGame.netterpillarGameEngine.netterPillars[2].NetterBodyLength.ToString(); + LblPlayer3Is.Text = (MainGame.netterpillarGameEngine.netterPillars[2].IsComputer ? "Computer" : "Human"); + } + else { + LblPlayer3Length.Text = "-"; + LblPlayer3Is.Text = "-"; + } + + if (MainGame.netterpillarGameEngine.netterPillars[3]!=null) { + LblPlayer4Length.Text = MainGame.netterpillarGameEngine.netterPillars[3].NetterBodyLength.ToString(); + LblPlayer4Is.Text = (MainGame.netterpillarGameEngine.netterPillars[3].IsComputer ? "Computer" : "Human"); + } + else { + LblPlayer4Length.Text = "-"; + LblPlayer4Is.Text = "-"; + } + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/NetterPillars/GameOver.resx b/Source Code updated 08-12-05/NetterPillars/GameOver.resx new file mode 100644 index 0000000..2c9919c --- /dev/null +++ b/Source Code updated 08-12-05/NetterPillars/GameOver.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + Assembly + + + GameOver + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/NetterPillars/Images/HorBranchEnd.gif b/Source Code updated 08-12-05/NetterPillars/Images/HorBranchEnd.gif new file mode 100644 index 0000000..87eb6f9 Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/HorBranchEnd.gif differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/HorBranchMiddle.gif b/Source Code updated 08-12-05/NetterPillars/Images/HorBranchMiddle.gif new file mode 100644 index 0000000..4e2190a Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/HorBranchMiddle.gif differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/HorBranchStart.gif b/Source Code updated 08-12-05/NetterPillars/Images/HorBranchStart.gif new file mode 100644 index 0000000..4048c68 Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/HorBranchStart.gif differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/NetterBody.gif b/Source Code updated 08-12-05/NetterPillars/Images/NetterBody.gif new file mode 100644 index 0000000..856e71b Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/NetterBody.gif differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/NetterHeadE.gif b/Source Code updated 08-12-05/NetterPillars/Images/NetterHeadE.gif new file mode 100644 index 0000000..4fe4a85 Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/NetterHeadE.gif differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/NetterHeadN.gif b/Source Code updated 08-12-05/NetterPillars/Images/NetterHeadN.gif new file mode 100644 index 0000000..47c490e Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/NetterHeadN.gif differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/NetterHeadS.GIF b/Source Code updated 08-12-05/NetterPillars/Images/NetterHeadS.GIF new file mode 100644 index 0000000..3011295 Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/NetterHeadS.GIF differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/NetterHeadW.gif b/Source Code updated 08-12-05/NetterPillars/Images/NetterHeadW.gif new file mode 100644 index 0000000..4403113 Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/NetterHeadW.gif differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/PlayerNetterBody.GIF b/Source Code updated 08-12-05/NetterPillars/Images/PlayerNetterBody.GIF new file mode 100644 index 0000000..4c4485a Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/PlayerNetterBody.GIF differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/PlayerNetterHeadE.GIF b/Source Code updated 08-12-05/NetterPillars/Images/PlayerNetterHeadE.GIF new file mode 100644 index 0000000..9889ff0 Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/PlayerNetterHeadE.GIF differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/PlayerNetterHeadN.GIF b/Source Code updated 08-12-05/NetterPillars/Images/PlayerNetterHeadN.GIF new file mode 100644 index 0000000..a916524 Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/PlayerNetterHeadN.GIF differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/PlayerNetterHeadS.gif b/Source Code updated 08-12-05/NetterPillars/Images/PlayerNetterHeadS.gif new file mode 100644 index 0000000..213bfa8 Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/PlayerNetterHeadS.gif differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/PlayerNetterHeadW.GIF b/Source Code updated 08-12-05/NetterPillars/Images/PlayerNetterHeadW.GIF new file mode 100644 index 0000000..d763aca Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/PlayerNetterHeadW.GIF differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/Splash Spider.jpg b/Source Code updated 08-12-05/NetterPillars/Images/Splash Spider.jpg new file mode 100644 index 0000000..a18e755 Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/Splash Spider.jpg differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/VertBranchEnd.gif b/Source Code updated 08-12-05/NetterPillars/Images/VertBranchEnd.gif new file mode 100644 index 0000000..6adadcf Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/VertBranchEnd.gif differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/VertBranchMiddle.gif b/Source Code updated 08-12-05/NetterPillars/Images/VertBranchMiddle.gif new file mode 100644 index 0000000..4100d98 Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/VertBranchMiddle.gif differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/VertBranchStart.gif b/Source Code updated 08-12-05/NetterPillars/Images/VertBranchStart.gif new file mode 100644 index 0000000..9e2f0dc Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/VertBranchStart.gif differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/mushroom.gif b/Source Code updated 08-12-05/NetterPillars/Images/mushroom.gif new file mode 100644 index 0000000..11ba69f Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/mushroom.gif differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/spider.gif b/Source Code updated 08-12-05/NetterPillars/Images/spider.gif new file mode 100644 index 0000000..7024b05 Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/spider.gif differ diff --git a/Source Code updated 08-12-05/NetterPillars/Images/splash.jpg b/Source Code updated 08-12-05/NetterPillars/Images/splash.jpg new file mode 100644 index 0000000..fe2a1b5 Binary files /dev/null and b/Source Code updated 08-12-05/NetterPillars/Images/splash.jpg differ diff --git a/Source Code updated 08-12-05/NetterPillars/Main.cs b/Source Code updated 08-12-05/NetterPillars/Main.cs new file mode 100644 index 0000000..c72b8ad --- /dev/null +++ b/Source Code updated 08-12-05/NetterPillars/Main.cs @@ -0,0 +1,58 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +namespace Netterpillars { + class MainGame { + public static GameEngine netterpillarGameEngine; + + private static AINetterpillar objAINetterpillar = new AINetterpillar(); + + public static void Main(string [] args) { + Splash WinSplash; + GameField WinGameField; + GameOver WinGameOver = new GameOver(); + int LastTick=0; int DesiredFrameRate = 10; + + // Create the game engine object + netterpillarGameEngine = new GameEngine(); + WinSplash = new Splash(); + + while ( WinSplash.ShowDialog()==DialogResult.OK) { + WinGameField = new GameField(); + WinGameField.Show(); + Application.DoEvents(); + //Creates a copy of the background image to allow erasing the sprites + GameEngine.BackgroundImage = (Image)WinGameField.PicGameField.Image.Clone(); + netterpillarGameEngine.CreateGameField(WinGameField.PicGameField.Handle); + while ( !netterpillarGameEngine.GameOver) { + if (!netterpillarGameEngine.Paused) { + // EXTRA: Force a Frame rate of 10 frames to second on maximum + if (System.Environment.TickCount-LastTick>=1000/DesiredFrameRate) { + MoveComputerCharacters(); + netterpillarGameEngine.Render(); + LastTick = System.Environment.TickCount; + } + } + Application.DoEvents(); + } + WinGameOver.ShowDialog(); + WinGameField.Dispose(); + } + netterpillarGameEngine = null; + WinSplash.Dispose(); + WinGameOver.Dispose(); + } + + public static void MoveComputerCharacters() { + //Move the Netterpillars + for(int i=0; i=1; i--) { + NetterBody[i].Location = NetterBody[i-1].Location; + } + + NetterBody[0].Location = Location; + NetterBody[0].Draw(winHandle); + + NetterBodyLength++; + // Updates the Netterpillar head position + Location = new Point(x, y); + + //Clear the mushroom + Erase(winHandle); + + // Draw the Netterpillar head + Draw(winHandle); + // Reset the direction controller variable + directionSet = false; + } + + + public void Move(int x, int y, System.IntPtr winHandle) { + // Erase the last part of the body + NetterBody[NetterBodyLength-1].Erase(winHandle); + + // Updates the whole bodys position and then the head position + for(int i=NetterBodyLength-1; i>=1; i--) { + NetterBody[i].Location = NetterBody[i-1].Location; + } + NetterBody[0].Location = Location; + Location = new Point(x, y); + + // Redraws only the first part of the body and the head + NetterBody[0].Draw(winHandle); + + //We don't need to erase the netterpillar head, since the body will cover it + Draw(winHandle); + // Reset the direction controller variable + directionSet = false; + } + + + public new void Draw(System.IntPtr winHandle) { + switch(Direction) { + case Sprite.CompassDirections.East: + base.Draw(NetterHeadE, winHandle); + break; + case Sprite.CompassDirections.South: + base.Draw(NetterHeadS, winHandle); + break; + case Sprite.CompassDirections.West: + base.Draw(NetterHeadW, winHandle); + break; + case Sprite.CompassDirections.North: + base.Draw(NetterHeadN, winHandle); + break; + } + + for(int i=0; i + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/NetterPillars/Netterpillars.sln b/Source Code updated 08-12-05/NetterPillars/Netterpillars.sln new file mode 100644 index 0000000..ae01495 --- /dev/null +++ b/Source Code updated 08-12-05/NetterPillars/Netterpillars.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Netterpillars", "Netterpillars.csproj", "{A5E9A7E4-DF15-427B-93A6-3ED71A0C933F}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {A5E9A7E4-DF15-427B-93A6-3ED71A0C933F}.Debug.ActiveCfg = Debug|.NET + {A5E9A7E4-DF15-427B-93A6-3ED71A0C933F}.Debug.Build.0 = Debug|.NET + {A5E9A7E4-DF15-427B-93A6-3ED71A0C933F}.Release.ActiveCfg = Release|.NET + {A5E9A7E4-DF15-427B-93A6-3ED71A0C933F}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/NetterPillars/Splash.cs b/Source Code updated 08-12-05/NetterPillars/Splash.cs new file mode 100644 index 0000000..2b57d3f --- /dev/null +++ b/Source Code updated 08-12-05/NetterPillars/Splash.cs @@ -0,0 +1,112 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +namespace Netterpillars { + public class Splash : System.Windows.Forms.Form { + internal System.Windows.Forms.Button cmdConfig; + internal System.Windows.Forms.Button cmdExit; + internal System.Windows.Forms.Button cmdStart; + + public Splash() : base() { + //This call is required by the Windows Form Designer. + InitializeComponent(); + + //Add any initialization after the InitializeComponent() call + } + + //Form overrides dispose to clean up the component list. + protected override void Dispose(bool disposing) { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + internal System.Windows.Forms.PictureBox PicGameField; + private System.ComponentModel.IContainer components = new System.ComponentModel.Container(); + + //Required by the Windows Form Designer + + //NOTE: The following procedure is required by the Windows Form Designer + //It can be modified using the Windows Form Designer. + //Do not modify it using the code editor. + [System.Diagnostics.DebuggerStepThrough] + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Splash)); + this.PicGameField = new System.Windows.Forms.PictureBox(); + this.cmdConfig = new System.Windows.Forms.Button(); + this.cmdStart = new System.Windows.Forms.Button(); + this.cmdExit = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // PicGameField + // + this.PicGameField.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.PicGameField.Image = ((System.Drawing.Bitmap)(resources.GetObject("PicGameField.Image"))); + this.PicGameField.Location = new System.Drawing.Point(9, 9); + this.PicGameField.Name = "PicGameField"; + this.PicGameField.Size = new System.Drawing.Size(524, 370); + this.PicGameField.TabIndex = 0; + this.PicGameField.TabStop = false; + // + // cmdConfig + // + this.cmdConfig.Font = new System.Drawing.Font("Comic Sans MS", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.cmdConfig.Location = new System.Drawing.Point(205, 394); + this.cmdConfig.Name = "cmdConfig"; + this.cmdConfig.Size = new System.Drawing.Size(112, 37); + this.cmdConfig.TabIndex = 1; + this.cmdConfig.Text = "&Config"; + this.cmdConfig.Click += new System.EventHandler(this.cmdConfig_Click); + // + // cmdStart + // + this.cmdStart.DialogResult = System.Windows.Forms.DialogResult.OK; + this.cmdStart.Font = new System.Drawing.Font("Comic Sans MS", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.cmdStart.Location = new System.Drawing.Point(51, 394); + this.cmdStart.Name = "cmdStart"; + this.cmdStart.Size = new System.Drawing.Size(112, 37); + this.cmdStart.TabIndex = 1; + this.cmdStart.Text = "&Start !"; + // + // cmdExit + // + this.cmdExit.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cmdExit.Font = new System.Drawing.Font("Comic Sans MS", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.cmdExit.Location = new System.Drawing.Point(343, 394); + this.cmdExit.Name = "cmdExit"; + this.cmdExit.Size = new System.Drawing.Size(113, 37); + this.cmdExit.TabIndex = 2; + this.cmdExit.Text = "&Exit"; + // + // Splash + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cmdExit; + this.ClientSize = new System.Drawing.Size(542, 440); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.cmdExit, + this.cmdStart, + this.cmdConfig, + this.PicGameField}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.KeyPreview = true; + this.Name = "Splash"; + this.Text = ".Netterpillars"; + this.ResumeLayout(false); + + } + #endregion + + private void cmdConfig_Click(System.Object sender, System.EventArgs e) { + Config WinConfig; + WinConfig = new Config(); + WinConfig.ShowDialog(); + WinConfig.Dispose(); + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/NetterPillars/Splash.resx b/Source Code updated 08-12-05/NetterPillars/Splash.resx new file mode 100644 index 0000000..3446ab4 --- /dev/null +++ b/Source Code updated 08-12-05/NetterPillars/Splash.resx @@ -0,0 +1,591 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Assembly + + + + /9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwg + JC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIy + MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGGAkUDASIAAhEBAxEB/8QA + HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh + MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVW + V1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG + x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF + BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV + YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE + hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq + 8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDv85NKFP1p6x880/YMYr80R6pEOBnmlwaeU9aTb61QyMrSiPrm + pQMUuBjjrQAwD/OKdS00mkAjU3pQTk0YosAA4pysBTdppNpo5QJt4p4cYqvtNOwQKOUCUuM09SCKrdKc + GI61PKBZJHrULjjNJvzQTnijlAZSU8gCkwBT5QGnmmMDU+BQVBoSAgUGpADS4A6U4DFOwDStIVNPJxTC + 3PNNIBCMc0xsntTwwJpxAocQIFBzVhF4qM4BzS+ZilygTbKaRzURnI6UeaT1o5QJgOlL0FRCSjfkUcoD + 2IpqnmmFqbuI5o5QLS9qfkYqmJ6eJvcUKIrErVHikMmaaXp8oWHYoI4pA+KXcCKOUYwjBpV4pSQaTPpS + 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 + + + + Assembly + + + Assembly + + + Assembly + + + frmSplash + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/NetterPillars/Sprite.cs b/Source Code updated 08-12-05/NetterPillars/Sprite.cs new file mode 100644 index 0000000..b14a8e3 --- /dev/null +++ b/Source Code updated 08-12-05/NetterPillars/Sprite.cs @@ -0,0 +1,100 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using System.Drawing.Imaging; +namespace Netterpillars { + public class Sprite : GameEngine { + // Images path and size, to be used by the child classes + public const string IMAGE_PATH = "Images"; + public const int IMAGE_SIZE = 15; + + protected Bitmap Source; + public CompassDirections Direction; + public Point Location; + public ScaleSizes Scale = ScaleSizes.Sprite; + + public enum ScaleSizes { + Pixel = 1, + Sprite = IMAGE_SIZE + }; + + public enum CompassDirections { + North = 1, + NorthEast = 2, + East = 3, + SouthEast = 4, + South = 5, + SouthWest = 6, + West = 7, + NorthWest = 8 + }; + + public Sprite() { + // this empty constructor is to be used by the child classes when they + // want to implement everything from the ground up + } + // + public Sprite(string strImageName) { + Source = Load(strImageName); + } + + public Sprite(string strImageName, Point point) { + Source = Load(strImageName); + Location = point; + } + + public Bitmap Load(string strImageName) { + Bitmap Load_result; + Color BackColor; + + try { + Load_result = (Bitmap)Bitmap.FromFile(strImageName); + // The transparent color (keycolor) was not informed, then it will be the color of the first pixel + BackColor = Load_result.GetPixel(0, 0); + Load_result.MakeTransparent(BackColor); + } + catch { + MessageBox.Show("An image file was not found."+Keys.Enter+"Please make sure that the file "+strImageName+" exists.", ".Netterpillars", MessageBoxButtons.OK, MessageBoxIcon.Stop); + Load_result = null; + } + return Load_result; + } + + public Bitmap Load(string strImageName, Color keycolor) { + Bitmap Load_result; + try { + Load_result = (Bitmap)Bitmap.FromFile(strImageName); + Load_result.MakeTransparent(keycolor); + } + catch { + MessageBox.Show("An image file was not found."+Keys.Enter+"Please make sure that the file "+strImageName+" exists.", ".Netterpillars", MessageBoxButtons.OK, MessageBoxIcon.Stop); + Load_result = null; + } + return Load_result; + } + + public Sprite(string strImageNamem, Color keycolor) { + Load(strImageNamem, keycolor); + } + + + // This overloads is intended to be used by objects that need more than one bitmap (animated sprites) + public void Draw(Image Source, System.IntPtr winHandle) { + Graphics graphBack = Graphics.FromHwnd(winHandle); + graphBack.DrawImageUnscaled(Source, Location.X * (int)Scale, Location.Y*(int)Scale); + graphBack.Dispose(); + } + + public void Erase(System.IntPtr winHandle) { + Graphics graphBack = Graphics.FromHwnd(winHandle); + graphBack.DrawImage(BackgroundImage, new Rectangle(Location.X*(int)Scale, Location.Y*(int)Scale, IMAGE_SIZE, IMAGE_SIZE), new Rectangle(Location.X*(int)Scale, Location.Y*(int)Scale, IMAGE_SIZE, IMAGE_SIZE), GraphicsUnit.Pixel); + graphBack.Dispose(); + } + + public void Draw(System.IntPtr winHandle) { + Graphics graphBack = Graphics.FromHwnd(winHandle); + graphBack.DrawImageUnscaled(Source, Location.X*(int)Scale, Location.Y*(int)Scale); + graphBack.Dispose(); + } + } +} diff --git a/Source Code updated 08-12-05/NetterPillars/licenses.licx b/Source Code updated 08-12-05/NetterPillars/licenses.licx new file mode 100644 index 0000000..6f1310e --- /dev/null +++ b/Source Code updated 08-12-05/NetterPillars/licenses.licx @@ -0,0 +1,7 @@ +System.Windows.Forms.PictureBox, System.Windows.Forms, Version=1.0.2411.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 +System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=1.0.2411.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 +System.Windows.Forms.DomainUpDown, System.Windows.Forms, Version=1.0.2411.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 +System.Windows.Forms.Label, System.Windows.Forms, Version=1.0.2411.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 +System.Windows.Forms.Button, System.Windows.Forms, Version=1.0.2411.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 +System.Windows.Forms.Form, System.Windows.Forms, Version=1.0.2411.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 +System.Windows.Forms.Timer, System.Windows.Forms, Version=1.0.2411.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/Source Code updated 08-12-05/Nettrix/AssemblyInfo.cs b/Source Code updated 08-12-05/Nettrix/AssemblyInfo.cs new file mode 100644 index 0000000..7a40628 --- /dev/null +++ b/Source Code updated 08-12-05/Nettrix/AssemblyInfo.cs @@ -0,0 +1,31 @@ +using System.Reflection; +using System.Runtime.InteropServices; + + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. + +// Review the values of the assembly attributes + +[assembly:AssemblyTitle("")] +[assembly:AssemblyDescription("")] +[assembly:AssemblyCompany("")] +[assembly:AssemblyProduct("")] +[assembly:AssemblyCopyright("")] +[assembly:AssemblyTrademark("")] +[assembly: System.CLSCompliant(true)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersion("1.0.*")] + + diff --git a/Source Code updated 08-12-05/Nettrix/Block.cs b/Source Code updated 08-12-05/Nettrix/Block.cs new file mode 100644 index 0000000..4acbff0 --- /dev/null +++ b/Source Code updated 08-12-05/Nettrix/Block.cs @@ -0,0 +1,389 @@ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; + +namespace Nettrix { + public class Block { + + public enum BlockTypes { + Undefined = 0, + Square = 1, + Line = 2, + J = 3, + L = 4, + T = 5, + Z = 6, + S = 7 + }; + private BlockTypes blockType; + + public BlockTypes BlockType { + get { return blockType; } + set { blockType = value; } + } + + public enum RotationDirections { + North = 1, + East = 2, + South = 3, + West = 4 + }; + + private RotationDirections statusRotation = RotationDirections.North; + + public RotationDirections StatusRotation { + get { return statusRotation; } + set { statusRotation = value; } + } + + // The colors of each block type + private Color[] backColors = {Color.Empty, Color.Red, Color.Blue, Color.Red, Color.Yellow, Color.Green, Color.White, Color.Black}; + private Color[] foreColors = {Color.Empty, Color.Purple, Color.LightBlue, Color.Yellow, Color.Red, Color.LightGreen, Color.Black, Color.White}; + + + // The 4 squares that compose the block + private Square square1; + private Square square2; + private Square square3; + private Square square4; + + public Square Square1 { + get { return square1; } + set { square1 = value; } + } + + public Square Square2 { + get { return square2; } + set { square2 = value; } + } + + public Square Square3 { + get { return square3; } + set { square3 = value; } + } + + public Square Square4 { + get { return square4; } + set { square4 = value; } + } + + private const int squareSize = GameField.SquareSize; + private static Random random = new Random(); + + public int Top() { + return Math.Min(square1.Location.Y, Math.Min(square2.Location.Y, + Math.Min(square3.Location.Y, square4.Location.Y))); + } + + public Block(Point location, BlockTypes newBlockType) { + // Create the new block + if (newBlockType==BlockTypes.Undefined) { + BlockType = (BlockTypes)(random.Next(7)) + 1; + //BlockType = BlockTypes.Line; //force line block for testing + } + else { + BlockType = newBlockType; + } + // Create each of the squares of the block + // Set the square colors, based on the block type + square1 = new Square(new Size(squareSize, squareSize), backColors[(int)BlockType], foreColors[(int)BlockType]); + square2 = new Square(new Size(squareSize, squareSize), backColors[(int)BlockType], foreColors[(int)BlockType]); + square3 = new Square(new Size(squareSize, squareSize), backColors[(int)BlockType], foreColors[(int)BlockType]); + square4 = new Square(new Size(squareSize, squareSize), backColors[(int)BlockType], foreColors[(int)BlockType]); + + // Set the squares positions based on the block type + switch(BlockType) { + case BlockTypes.Square: + square1.Location = new Point(location.X, location.Y); + square2.Location = new Point(location.X+squareSize, location.Y); + square3.Location = new Point(location.X, location.Y+squareSize); + square4.Location = new Point(location.X+squareSize, location.Y+squareSize); + break; + case BlockTypes.Line: + square1.Location = new Point(location.X, location.Y); + square2.Location = new Point(location.X, location.Y+squareSize); + square3.Location = new Point(location.X, location.Y+2*squareSize); + square4.Location = new Point(location.X, location.Y+3*squareSize); + break; + case BlockTypes.J: + square1.Location = new Point(location.X+squareSize, location.Y); + square2.Location = new Point(location.X+squareSize, location.Y+squareSize); + square3.Location = new Point(location.X+squareSize, location.Y+2*squareSize); + square4.Location = new Point(location.X, location.Y+2*squareSize); + break; + case BlockTypes.L: + square1.Location = new Point(location.X, location.Y); + square2.Location = new Point(location.X, location.Y+squareSize); + square3.Location = new Point(location.X, location.Y+2*squareSize); + square4.Location = new Point(location.X+squareSize, location.Y+2*squareSize); + break; + case BlockTypes.T: + square1.Location = new Point(location.X, location.Y); + square2.Location = new Point(location.X+squareSize, location.Y); + square3.Location = new Point(location.X+2*squareSize, location.Y); + square4.Location = new Point(location.X+squareSize, location.Y+squareSize); + break; + case BlockTypes.Z: + square1.Location = new Point(location.X, location.Y); + square2.Location = new Point(location.X+squareSize, location.Y); + square3.Location = new Point(location.X+squareSize, location.Y+squareSize); + square4.Location = new Point(location.X+2*squareSize, location.Y+squareSize); + break; + case BlockTypes.S: + square1.Location = new Point(location.X, location.Y+squareSize); + square2.Location = new Point(location.X+squareSize, location.Y+squareSize); + square3.Location = new Point(location.X+squareSize, location.Y); + square4.Location = new Point(location.X+2*squareSize, location.Y); + break; + } + } + + public void Rotate() { + // Store the current block position + Point OldPosition1 = square1.Location; + Point OldPosition2 = square2.Location; + Point OldPosition3 = square3.Location; + Point OldPosition4 = square4.Location; + RotationDirections OldStatusRotation = StatusRotation; + Hide(GameField.WinHandle); + + // Rotate the blocks + switch(BlockType) { + case BlockTypes.Square: + // Do nothing. Squares don't rotate. + break; + case BlockTypes.Line: + // Rotate all squares around square 2 + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square3.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + square4.Location = new Point(square2.Location.X+2*squareSize, square2.Location.Y); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square3.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + square4.Location = new Point(square2.Location.X, square2.Location.Y+2*squareSize); + break; + } + break; + case BlockTypes.J: + // Rotate all squares around square 3 + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square3.Location.X, square3.Location.Y-squareSize); + square2.Location = new Point(square3.Location.X+squareSize, square3.Location.Y); + square4.Location = new Point(square3.Location.X+2*squareSize, square3.Location.Y); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.South; + square1.Location = new Point(square3.Location.X+squareSize, square3.Location.Y); + square2.Location = new Point(square3.Location.X, square3.Location.Y+squareSize); + square4.Location = new Point(square3.Location.X, square3.Location.Y+2*squareSize); + break; + case RotationDirections.South: + StatusRotation = RotationDirections.West; + square1.Location = new Point(square3.Location.X, square3.Location.Y+squareSize); + square2.Location = new Point(square3.Location.X-squareSize, square3.Location.Y); + square4.Location = new Point(square3.Location.X-2*squareSize, square3.Location.Y); + break; + case RotationDirections.West: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square3.Location.X-squareSize, square3.Location.Y); + square2.Location = new Point(square3.Location.X, square3.Location.Y-squareSize); + square4.Location = new Point(square3.Location.X, square3.Location.Y-2*squareSize); + break; + } + break; + case BlockTypes.L: + // Rotate all squares around square 3 + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square3.Location.X+squareSize, square3.Location.Y); + square2.Location = new Point(square3.Location.X+2*squareSize, square3.Location.Y); + square4.Location = new Point(square3.Location.X, square3.Location.Y+squareSize); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.South; + square1.Location = new Point(square3.Location.X-squareSize, square3.Location.Y); + square2.Location = new Point(square3.Location.X, square3.Location.Y+squareSize); + square4.Location = new Point(square3.Location.X, square3.Location.Y+2*squareSize); + break; + case RotationDirections.South: + StatusRotation = RotationDirections.West; + square1.Location = new Point(square3.Location.X-2*squareSize, square3.Location.Y); + square2.Location = new Point(square3.Location.X-squareSize, square3.Location.Y); + square4.Location = new Point(square3.Location.X, square3.Location.Y-squareSize); + break; + case RotationDirections.West: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square3.Location.X, square3.Location.Y-2*squareSize); + square2.Location = new Point(square3.Location.X, square3.Location.Y-squareSize); + square4.Location = new Point(square3.Location.X+squareSize, square3.Location.Y); + break; + } + break; + case BlockTypes.T: + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square3.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + square4.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.South; + square1.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + square3.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square4.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + break; + case RotationDirections.South: + StatusRotation = RotationDirections.West; + square1.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + square3.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square4.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + break; + case RotationDirections.West: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square3.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + square4.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + break; + } + break; + case BlockTypes.Z: + // Rotate all squares around square 2 + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square3.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square4.Location = new Point(square2.Location.X-squareSize, square2.Location.Y+squareSize); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square3.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + square4.Location = new Point(square2.Location.X+squareSize, square2.Location.Y+squareSize); + break; + } + break; + case BlockTypes.S: + // Rotate all squares around square 2 + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square3.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + square4.Location = new Point(square2.Location.X+squareSize, square2.Location.Y+squareSize); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square3.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square4.Location = new Point(square2.Location.X+squareSize, square2.Location.Y-squareSize); + break; + } + break; + } + + // After rotating the squares, test if they overlap other squares. + // If so, return to original position + if (!(GameField.IsEmpty(square1.Location.X/squareSize, square1.Location.Y/squareSize)&&GameField.IsEmpty(square2.Location.X/squareSize, square2.Location.Y/squareSize)&&GameField.IsEmpty(square3.Location.X/squareSize, square3.Location.Y/squareSize)&&GameField.IsEmpty(square4.Location.X/squareSize, square4.Location.Y/squareSize))) { + StatusRotation = OldStatusRotation; + square1.Location = OldPosition1; + square2.Location = OldPosition2; + square3.Location = OldPosition3; + square4.Location = OldPosition4; + } + Show(GameField.WinHandle); + } + + public bool Down() { + // If there's no block below the current one, go down + if (GameField.IsEmpty(square1.Location.X/squareSize, square1.Location.Y/squareSize+1)&&GameField.IsEmpty(square2.Location.X/squareSize, square2.Location.Y/squareSize+1)&&GameField.IsEmpty(square3.Location.X/squareSize, square3.Location.Y/squareSize+1)&&GameField.IsEmpty(square4.Location.X/squareSize, square4.Location.Y/squareSize+1)) { + // Hide the block (in the previous position) + Hide(GameField.WinHandle); + // Update the block position + square1.Location = new Point(square1.Location.X, square1.Location.Y+squareSize); + square2.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + square3.Location = new Point(square3.Location.X, square3.Location.Y+squareSize); + square4.Location = new Point(square4.Location.X, square4.Location.Y+squareSize); + // Draw the block in the new position + Show(GameField.WinHandle); + return true; + } + else { + // If there's a block below the current one, doesn't go down + // -> put it on the array that controls the game and return FALSE + GameField.StopSquare(square1, square1.Location.X/squareSize, square1.Location.Y/squareSize); + GameField.StopSquare(square2, square2.Location.X/squareSize, square2.Location.Y/squareSize); + GameField.StopSquare(square3, square3.Location.X/squareSize, square3.Location.Y/squareSize); + GameField.StopSquare(square4, square4.Location.X/squareSize, square4.Location.Y/squareSize); + return false; + } + } + + public bool Right() { + // If there's no block to the right of the current one, go right + if (GameField.IsEmpty(square1.Location.X/squareSize+1, square1.Location.Y/squareSize)&&GameField.IsEmpty(square2.Location.X/squareSize+1, square2.Location.Y/squareSize)&&GameField.IsEmpty(square3.Location.X/squareSize+1, square3.Location.Y/squareSize)&&GameField.IsEmpty(square4.Location.X/squareSize+1, square4.Location.Y/squareSize)) { + // Hide the block (in the previous position) + Hide(GameField.WinHandle); + // Update the block position + square1.Location = new Point(square1.Location.X+squareSize, square1.Location.Y); + square2.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + square3.Location = new Point(square3.Location.X+squareSize, square3.Location.Y); + square4.Location = new Point(square4.Location.X+squareSize, square4.Location.Y); + // Draw the block in the new position + Show(GameField.WinHandle); + return true; + } + else { + // If there's a block to the right of the current one, + // doesn't go right and return FALSE + return false; + } + } + + public bool Left() { + // If there's no block to the left of the current one, go left + if (GameField.IsEmpty(square1.Location.X/squareSize-1, square1.Location.Y/squareSize)&&GameField.IsEmpty(square2.Location.X/squareSize-1, square2.Location.Y/squareSize)&&GameField.IsEmpty(square3.Location.X/squareSize-1, square3.Location.Y/squareSize)&&GameField.IsEmpty(square4.Location.X/squareSize-1, square4.Location.Y/squareSize)) { + // Hide the block (in the previous position) + Hide(GameField.WinHandle); + // Update the block position + square1.Location = new Point(square1.Location.X-squareSize, square1.Location.Y); + square2.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square3.Location = new Point(square3.Location.X-squareSize, square3.Location.Y); + square4.Location = new Point(square4.Location.X-squareSize, square4.Location.Y); + // Draw the block in the new position + Show(GameField.WinHandle); + return true; + } + else { + // If there's a block to the left of the current one, + // doesn't go left and return FALSE + return false; + } + } + + // Draws each square of the block on the game field + public void Show(System.IntPtr winHandle) { + square1.Show(winHandle); + square2.Show(winHandle); + square3.Show(winHandle); + square4.Show(winHandle); + } + + // Hides each square of the block on the game field + public void Hide(System.IntPtr winHandle) { + square1.Hide(winHandle); + square2.Hide(winHandle); + square3.Hide(winHandle); + square4.Hide(winHandle); + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Nettrix/GameField.cs b/Source Code updated 08-12-05/Nettrix/GameField.cs new file mode 100644 index 0000000..00088ca --- /dev/null +++ b/Source Code updated 08-12-05/Nettrix/GameField.cs @@ -0,0 +1,106 @@ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +namespace Nettrix { + public class GameField { + // The game field witdth will be exactly 16 bits (2 bytes) + public const int Width = 16; + public const int Height = 30; + // The Size of each square + public const int SquareSize = 10; + + private static Square[,] arrGameField = new Square[Width, Height]; + private static int[] arrBitGameField = new int[Height]; + public static System.IntPtr WinHandle; + public static Color BackColor; + + private const int bitEmpty = 0x0; //00000000 0000000 + private const int bitFull = 0xFFFF; //11111111 1111111 + + + // x goes from 0 to Width -1 + // y goes from 0 to Height -1 + public static bool IsEmpty(int x, int y) { + // If the Y or X is beyond the game field, return false + if ((y<0||y>=Height)||(x<0||x>=Width)) { + return false; + } + // Test the Xth bit of the Yth line of the game field + else if((arrBitGameField[y] & (1<= 0) { + // stops the loop when the blank lines are reached + if (arrBitGameField[y]==bitEmpty) y = 0; + + // If all the bits of the line are set, then increment the + // counter to clear the line and move all above lines down + if (arrBitGameField[y]==bitFull) { + CheckLines_result++; + + // Move all next lines down + for(int index = y; index >= 0; index--) { + // if the current line is NOT the first of the game field, + // copy the line above + if (index>0) { + // Copy the bits from the line above + arrBitGameField[index] = arrBitGameField[index-1]; + + // Copy each of the squares from the line above + for(int x=0; x=0; y--) + if (arrBitGameField[y]!=bitEmpty) + for(int x=Width-1; x>=0; x--) + if (arrGameField[x, y] != null) arrGameField[x, y].Show(WinHandle); + } + + public static void Reset() { + // Clean the game field + for(int i=Height; i<=0; i--) { + // Clear the lines + arrBitGameField[i] = bitEmpty; + for(int x=0; x + /// Summary description for . + /// + public class NetTrix : System.Windows.Forms.Form { + internal System.Windows.Forms.PictureBox PicBackground; + internal System.Windows.Forms.Label lblScore; + internal System.Windows.Forms.Button CmdStart; + internal System.Windows.Forms.PictureBox PicNextBlock; + internal System.Windows.Forms.Label LblNextBlock; + internal System.Windows.Forms.Label lblScoreValue; + internal System.Windows.Forms.Timer tmrGameClock; + private System.ComponentModel.IContainer components; + private bool stillProcessing = false; + private int score = 0; + private Block CurrentBlock; + private Block NextBlock; + + public NetTrix() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + // + // TODO: Add any constructor code after InitializeComponent call + // + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); + this.PicBackground = new System.Windows.Forms.PictureBox(); + this.lblScore = new System.Windows.Forms.Label(); + this.CmdStart = new System.Windows.Forms.Button(); + this.PicNextBlock = new System.Windows.Forms.PictureBox(); + this.LblNextBlock = new System.Windows.Forms.Label(); + this.lblScoreValue = new System.Windows.Forms.Label(); + this.tmrGameClock = new System.Windows.Forms.Timer(this.components); + this.SuspendLayout(); + // + // PicBackground + // + this.PicBackground.BackColor = System.Drawing.SystemColors.ControlDark; + this.PicBackground.Location = new System.Drawing.Point(0, 0); + this.PicBackground.Name = "PicBackground"; + this.PicBackground.Size = new System.Drawing.Size(149, 321); + this.PicBackground.TabIndex = 0; + this.PicBackground.TabStop = false; + // + // lblScore + // + this.lblScore.Location = new System.Drawing.Point(161, 5); + this.lblScore.Name = "lblScore"; + this.lblScore.Size = new System.Drawing.Size(76, 18); + this.lblScore.TabIndex = 3; + this.lblScore.Text = "Score:"; + // + // CmdStart + // + this.CmdStart.Location = new System.Drawing.Point(160, 144); + this.CmdStart.Name = "CmdStart"; + this.CmdStart.Size = new System.Drawing.Size(68, 25); + this.CmdStart.TabIndex = 9; + this.CmdStart.Text = "Start!"; + this.CmdStart.Click += new System.EventHandler(this.CmdStart_Click); + // + // PicNextBlock + // + this.PicNextBlock.BackColor = System.Drawing.Color.DarkGray; + this.PicNextBlock.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.PicNextBlock.Location = new System.Drawing.Point(160, 72); + this.PicNextBlock.Name = "PicNextBlock"; + this.PicNextBlock.Size = new System.Drawing.Size(75, 64); + this.PicNextBlock.TabIndex = 6; + this.PicNextBlock.TabStop = false; + // + // LblNextBlock + // + this.LblNextBlock.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.LblNextBlock.Location = new System.Drawing.Point(160, 48); + this.LblNextBlock.Name = "LblNextBlock"; + this.LblNextBlock.Size = new System.Drawing.Size(76, 16); + this.LblNextBlock.TabIndex = 7; + this.LblNextBlock.Text = "Next Block:"; + // + // lblScoreValue + // + this.lblScoreValue.Location = new System.Drawing.Point(160, 31); + this.lblScoreValue.Name = "lblScoreValue"; + this.lblScoreValue.Size = new System.Drawing.Size(76, 18); + this.lblScoreValue.TabIndex = 8; + this.lblScoreValue.Text = "0"; + this.lblScoreValue.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // tmrGameClock + // + this.tmrGameClock.Interval = 330; + this.tmrGameClock.Tick += new System.EventHandler(this.tmrGameClock_Tick); + // + // NetTrix + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(246, 318); + this.Controls.Add(this.CmdStart); + this.Controls.Add(this.PicNextBlock); + this.Controls.Add(this.LblNextBlock); + this.Controls.Add(this.lblScoreValue); + this.Controls.Add(this.lblScore); + this.Controls.Add(this.PicBackground); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "NetTrix"; + this.Text = ".NETTrix"; + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.NetTrix_KeyDown); + this.Load += new System.EventHandler(this.NetTrix_Load); + this.Activated += new System.EventHandler(this.NetTrix_Activated); + this.ResumeLayout(false); + + } + #endregion + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() { + Application.Run(new NetTrix()); + } + + private void tmrGameClock_Tick(object sender, System.EventArgs e) { + int erasedLines; + + if (stillProcessing) return; + stillProcessing = true; + + //Manage the falling block + if (!CurrentBlock.Down()) { + if (CurrentBlock.Top() == 0) { + tmrGameClock.Enabled = false; + CmdStart.Enabled = true; + MessageBox.Show("GAME OVER", ".NETTrix", MessageBoxButtons.OK, MessageBoxIcon.Stop); + stillProcessing = false; + return; + } + //increase score based on # of deleted lines + erasedLines = GameField.CheckLines(); + if (erasedLines > 0) { + score += 100 * erasedLines; + lblScoreValue.Text = score.ToString(); + //Clear the game field and force the window to re-paint + PicBackground.Invalidate(); + Application.DoEvents(); + GameField.Redraw(); + } + + //Replace the current block... + CurrentBlock = new Block(new Point(GameField.SquareSize*6,0), NextBlock.BlockType); + CurrentBlock.Show(PicBackground.Handle); + + //Create the Next block + NextBlock.Hide(PicNextBlock.Handle); + NextBlock = new Block(new Point(20,10), Block.BlockTypes.Undefined); + NextBlock.Show(PicNextBlock.Handle); + } + stillProcessing = false; + } + + private void CmdStart_Click(object sender, System.EventArgs e) { + tmrGameClock.Enabled = true; + CmdStart.Enabled = false; + lblScoreValue.Text = "0"; + + // Clean the game field + PicBackground.Invalidate(); + Application.DoEvents(); + GameField.Reset(); + GameField.Redraw(); + + // Create and show the current and next blocks + CurrentBlock = new Block(new Point(GameField.SquareSize * 6, 50), Block.BlockTypes.Undefined); + CurrentBlock.Show(PicBackground.Handle); + + NextBlock = new Block(new Point(20, 10), Block.BlockTypes.Undefined); + NextBlock.Show(PicNextBlock.Handle); + } + + private void NetTrix_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { + switch(e.KeyCode) { + case Keys.Right: CurrentBlock.Right();break; + case Keys.Left : CurrentBlock.Left();break; + case Keys.Up : CurrentBlock.Rotate();break; + case Keys.Down : CurrentBlock.Down();break; + case Keys.Escape: + tmrGameClock.Enabled = !tmrGameClock.Enabled; + if (tmrGameClock.Enabled) + this.Text = ".NETTrix"; + else + this.Text = ".NETTrix -- Press 'Esc' to Continue"; + break; + default: break; + } + Invalidate(); + } + + private void NetTrix_Load(object sender, System.EventArgs e) { + GameField.BackColor = PicBackground.BackColor; + GameField.WinHandle = PicBackground.Handle; + //Adjusts the Size of the form and position of controls based on the class constants + //On the window height, sums the Size of the window title bar + Height = GameField.Height * GameField.SquareSize + (Height - ClientSize.Height) + 3; //3=border width + Width = GameField.Width * GameField.SquareSize + 120; + PicBackground.Height = GameField.Height * GameField.SquareSize + 4; + PicBackground.Width = GameField.Width * GameField.SquareSize + 4; + PicNextBlock.Left = GameField.Width * GameField.SquareSize + 12; + LblNextBlock.Left = GameField.Width * GameField.SquareSize + 12; + lblScore.Left = GameField.Width * GameField.SquareSize + 12; + lblScoreValue.Left = GameField.Width * GameField.SquareSize + 12; + CmdStart.Left = GameField.Width * GameField.SquareSize + 12; + // + //Block - Creates the first block and the first NEXT block + // + GameField.WinHandle = PicBackground.Handle; + GameField.BackColor = PicBackground.BackColor; + } + + private void NetTrix_Activated(object sender, System.EventArgs e) { + // This event occurs when the window receives back the focus after losing it to another window + // So, we redraw the whole game field + // Clear the game field + PicBackground.Invalidate(); + Application.DoEvents(); + GameField.Redraw(); + if (NextBlock != null) + NextBlock.Show(PicNextBlock.Handle); + } + } +} diff --git a/Source Code updated 08-12-05/Nettrix/NetTrix.resx b/Source Code updated 08-12-05/Nettrix/NetTrix.resx new file mode 100644 index 0000000..f2d8d45 --- /dev/null +++ b/Source Code updated 08-12-05/Nettrix/NetTrix.resx @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + Private + + + 17, 17 + + + Assembly + + + False + + + (Default) + + + False + + + False + + + 2, 2 + + + True + + + 80 + + + True + + + Private + + + NetTrix + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Nettrix/Nettrix.csproj b/Source Code updated 08-12-05/Nettrix/Nettrix.csproj new file mode 100644 index 0000000..5d7e10d --- /dev/null +++ b/Source Code updated 08-12-05/Nettrix/Nettrix.csproj @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/Nettrix/Nettrix.sln b/Source Code updated 08-12-05/Nettrix/Nettrix.sln new file mode 100644 index 0000000..9936748 --- /dev/null +++ b/Source Code updated 08-12-05/Nettrix/Nettrix.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nettrix", "Nettrix.csproj", "{838D1B4E-CB6C-4446-9A6F-AD1F7ADCDE59}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {838D1B4E-CB6C-4446-9A6F-AD1F7ADCDE59}.Debug.ActiveCfg = Debug|.NET + {838D1B4E-CB6C-4446-9A6F-AD1F7ADCDE59}.Debug.Build.0 = Debug|.NET + {838D1B4E-CB6C-4446-9A6F-AD1F7ADCDE59}.Release.ActiveCfg = Release|.NET + {838D1B4E-CB6C-4446-9A6F-AD1F7ADCDE59}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/Nettrix/Square.cs b/Source Code updated 08-12-05/Nettrix/Square.cs new file mode 100644 index 0000000..f77c192 --- /dev/null +++ b/Source Code updated 08-12-05/Nettrix/Square.cs @@ -0,0 +1,83 @@ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +namespace Nettrix { + public class Square { + private Point squareLocation; + + public Point Location { + get { return squareLocation; } + set { squareLocation = value; } + } + + private Size squareSize; + + public Size Size { + get { return squareSize; } + set { squareSize = value; } + } + + private Color foregroundColor; + + public Color ForeColor { + get { return foregroundColor; } + set { foregroundColor = value; } + } + + private Color backgroundColor; + + public Color BackColor { + get { return backgroundColor; } + set { backgroundColor = value; } + } + + + // Draws a rectangle with gradient path using the properties above + public void Show(System.IntPtr winHandle) { + // If we wish to draw a simple solid triangle with a coloured border, we can use: + // GameGraphics.FillRectangle(New SolidBrush(ForeColor), Location.X, Location.Y, Size.Width, Size.Height) + // GameGraphics.FillRectangle(New SolidBrush(BackColor), Location.X + 1, Location.Y + 1, Size.Width - 2, Size.Height - 2) + Graphics GameGraphics; + GraphicsPath graphPath; + PathGradientBrush brushSquare; + Color[] surroundColor; + Rectangle rectSquare; + + // Gets the Graphics object of the background picture + GameGraphics = Graphics.FromHwnd(winHandle); + + // Create a path consisting of one rectangle + graphPath = new GraphicsPath(); + rectSquare = new Rectangle(Location.X, Location.Y, Size.Width, Size.Height); + graphPath.AddRectangle(rectSquare); + + // Creates the gradient brush which will draw the square + // Note: Theres one center color and an array of border colors + brushSquare = new PathGradientBrush(graphPath); + brushSquare.CenterColor = ForeColor; + surroundColor = new Color[]{BackColor}; + brushSquare.SurroundColors = surroundColor; + + // Finally draws the square + GameGraphics.FillPath(brushSquare, graphPath); + } + + public void Hide(System.IntPtr winHandle) { + Graphics GameGraphics; + Rectangle rectSquare; + + // Gets the Graphics object of the background picture + GameGraphics = Graphics.FromHwnd(winHandle); + + // Since we are working in a solid background, we can just draw a solid rectangle in order to "hide" the current square + rectSquare = new Rectangle(Location.X, Location.Y, Size.Width, Size.Height); + GameGraphics.FillRectangle(new SolidBrush(GameField.BackColor), rectSquare); + } + + public Square(Size initialSize, Color initialBackColor, Color initialForeColor) { + Size = initialSize; + BackColor = initialBackColor; + ForeColor = initialForeColor; + } + } +} diff --git a/Source Code updated 08-12-05/PocketNettrix/AssemblyInfo.cs b/Source Code updated 08-12-05/PocketNettrix/AssemblyInfo.cs new file mode 100644 index 0000000..1b3bd70 --- /dev/null +++ b/Source Code updated 08-12-05/PocketNettrix/AssemblyInfo.cs @@ -0,0 +1,51 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified - the assembly cannot be signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. +// (*) If the key file and a key name attributes are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP - that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the file is installed into the CSP and used. +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/Source Code updated 08-12-05/PocketNettrix/Block.cs b/Source Code updated 08-12-05/PocketNettrix/Block.cs new file mode 100644 index 0000000..d70af64 --- /dev/null +++ b/Source Code updated 08-12-05/PocketNettrix/Block.cs @@ -0,0 +1,389 @@ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; + +namespace PocketNettrix { + public class Block { + + public enum BlockTypes { + Undefined = 0, + Square = 1, + Line = 2, + J = 3, + L = 4, + T = 5, + Z = 6, + S = 7 + }; + private BlockTypes blockType; + + public BlockTypes BlockType { + get { return blockType; } + set { blockType = value; } + } + + public enum RotationDirections { + North = 1, + East = 2, + South = 3, + West = 4 + }; + + private RotationDirections statusRotation = RotationDirections.North; + + public RotationDirections StatusRotation { + get { return statusRotation; } + set { statusRotation = value; } + } + + // The colors of each block type + private Color[] backColors = {Color.Empty, Color.Red, Color.Blue, Color.Red, Color.Yellow, Color.Green, Color.White, Color.Black}; + private Color[] foreColors = {Color.Empty, Color.Purple, Color.LightBlue, Color.Yellow, Color.Red, Color.LightGreen, Color.Black, Color.White}; + + + // The 4 squares that compose the block + private Square square1; + private Square square2; + private Square square3; + private Square square4; + + public Square Square1 { + get { return square1; } + set { square1 = value; } + } + + public Square Square2 { + get { return square2; } + set { square2 = value; } + } + + public Square Square3 { + get { return square3; } + set { square3 = value; } + } + + public Square Square4 { + get { return square4; } + set { square4 = value; } + } + + private const int squareSize = GameField.SquareSize; + private static Random random = new Random(); + + public int Top() { + return Math.Min(square1.Location.Y, Math.Min(square2.Location.Y, + Math.Min(square3.Location.Y, square4.Location.Y))); + } + + public Block(Point location, BlockTypes newBlockType) { + // Create the new block + if (newBlockType==BlockTypes.Undefined) { + //BlockType = (BlockTypes)(random.Next(7)) + 1; + BlockType = BlockTypes.Line; //force line block for testing + } + else { + BlockType = newBlockType; + } + // Create each of the squares of the block + // Set the square colors, based on the block type + square1 = new Square(new Size(squareSize, squareSize), backColors[(int)BlockType], foreColors[(int)BlockType]); + square2 = new Square(new Size(squareSize, squareSize), backColors[(int)BlockType], foreColors[(int)BlockType]); + square3 = new Square(new Size(squareSize, squareSize), backColors[(int)BlockType], foreColors[(int)BlockType]); + square4 = new Square(new Size(squareSize, squareSize), backColors[(int)BlockType], foreColors[(int)BlockType]); + + // Set the squares positions based on the block type + switch(BlockType) { + case BlockTypes.Square: + square1.Location = new Point(location.X, location.Y); + square2.Location = new Point(location.X+squareSize, location.Y); + square3.Location = new Point(location.X, location.Y+squareSize); + square4.Location = new Point(location.X+squareSize, location.Y+squareSize); + break; + case BlockTypes.Line: + square1.Location = new Point(location.X, location.Y); + square2.Location = new Point(location.X, location.Y+squareSize); + square3.Location = new Point(location.X, location.Y+2*squareSize); + square4.Location = new Point(location.X, location.Y+3*squareSize); + break; + case BlockTypes.J: + square1.Location = new Point(location.X+squareSize, location.Y); + square2.Location = new Point(location.X+squareSize, location.Y+squareSize); + square3.Location = new Point(location.X+squareSize, location.Y+2*squareSize); + square4.Location = new Point(location.X, location.Y+2*squareSize); + break; + case BlockTypes.L: + square1.Location = new Point(location.X, location.Y); + square2.Location = new Point(location.X, location.Y+squareSize); + square3.Location = new Point(location.X, location.Y+2*squareSize); + square4.Location = new Point(location.X+squareSize, location.Y+2*squareSize); + break; + case BlockTypes.T: + square1.Location = new Point(location.X, location.Y); + square2.Location = new Point(location.X+squareSize, location.Y); + square3.Location = new Point(location.X+2*squareSize, location.Y); + square4.Location = new Point(location.X+squareSize, location.Y+squareSize); + break; + case BlockTypes.Z: + square1.Location = new Point(location.X, location.Y); + square2.Location = new Point(location.X+squareSize, location.Y); + square3.Location = new Point(location.X+squareSize, location.Y+squareSize); + square4.Location = new Point(location.X+2*squareSize, location.Y+squareSize); + break; + case BlockTypes.S: + square1.Location = new Point(location.X, location.Y+squareSize); + square2.Location = new Point(location.X+squareSize, location.Y+squareSize); + square3.Location = new Point(location.X+squareSize, location.Y); + square4.Location = new Point(location.X+2*squareSize, location.Y); + break; + } + } + + public void Rotate() { + // Store the current block position + Point OldPosition1 = square1.Location; + Point OldPosition2 = square2.Location; + Point OldPosition3 = square3.Location; + Point OldPosition4 = square4.Location; + RotationDirections OldStatusRotation = StatusRotation; + Hide(GameField.GraphBackground); + + // Rotate the blocks + switch(BlockType) { + case BlockTypes.Square: + // Do nothing. Squares don't rotate. + break; + case BlockTypes.Line: + // Rotate all squares around square 2 + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square3.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + square4.Location = new Point(square2.Location.X+2*squareSize, square2.Location.Y); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square3.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + square4.Location = new Point(square2.Location.X, square2.Location.Y+2*squareSize); + break; + } + break; + case BlockTypes.J: + // Rotate all squares around square 3 + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square3.Location.X, square3.Location.Y-squareSize); + square2.Location = new Point(square3.Location.X+squareSize, square3.Location.Y); + square4.Location = new Point(square3.Location.X+2*squareSize, square3.Location.Y); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.South; + square1.Location = new Point(square3.Location.X+squareSize, square3.Location.Y); + square2.Location = new Point(square3.Location.X, square3.Location.Y+squareSize); + square4.Location = new Point(square3.Location.X, square3.Location.Y+2*squareSize); + break; + case RotationDirections.South: + StatusRotation = RotationDirections.West; + square1.Location = new Point(square3.Location.X, square3.Location.Y+squareSize); + square2.Location = new Point(square3.Location.X-squareSize, square3.Location.Y); + square4.Location = new Point(square3.Location.X-2*squareSize, square3.Location.Y); + break; + case RotationDirections.West: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square3.Location.X-squareSize, square3.Location.Y); + square2.Location = new Point(square3.Location.X, square3.Location.Y-squareSize); + square4.Location = new Point(square3.Location.X, square3.Location.Y-2*squareSize); + break; + } + break; + case BlockTypes.L: + // Rotate all squares around square 3 + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square3.Location.X+squareSize, square3.Location.Y); + square2.Location = new Point(square3.Location.X+2*squareSize, square3.Location.Y); + square4.Location = new Point(square3.Location.X, square3.Location.Y+squareSize); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.South; + square1.Location = new Point(square3.Location.X-squareSize, square3.Location.Y); + square2.Location = new Point(square3.Location.X, square3.Location.Y+squareSize); + square4.Location = new Point(square3.Location.X, square3.Location.Y+2*squareSize); + break; + case RotationDirections.South: + StatusRotation = RotationDirections.West; + square1.Location = new Point(square3.Location.X-2*squareSize, square3.Location.Y); + square2.Location = new Point(square3.Location.X-squareSize, square3.Location.Y); + square4.Location = new Point(square3.Location.X, square3.Location.Y-squareSize); + break; + case RotationDirections.West: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square3.Location.X, square3.Location.Y-2*squareSize); + square2.Location = new Point(square3.Location.X, square3.Location.Y-squareSize); + square4.Location = new Point(square3.Location.X+squareSize, square3.Location.Y); + break; + } + break; + case BlockTypes.T: + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square3.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + square4.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.South; + square1.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + square3.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square4.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + break; + case RotationDirections.South: + StatusRotation = RotationDirections.West; + square1.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + square3.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square4.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + break; + case RotationDirections.West: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square3.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + square4.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + break; + } + break; + case BlockTypes.Z: + // Rotate all squares around square 2 + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square3.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square4.Location = new Point(square2.Location.X-squareSize, square2.Location.Y+squareSize); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square3.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + square4.Location = new Point(square2.Location.X+squareSize, square2.Location.Y+squareSize); + break; + } + break; + case BlockTypes.S: + // Rotate all squares around square 2 + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square3.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + square4.Location = new Point(square2.Location.X+squareSize, square2.Location.Y+squareSize); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square3.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square4.Location = new Point(square2.Location.X+squareSize, square2.Location.Y-squareSize); + break; + } + break; + } + + // After rotating the squares, test if they overlap other squares. + // If so, return to original position + if (!(GameField.IsEmpty(square1.Location.X/squareSize, square1.Location.Y/squareSize)&&GameField.IsEmpty(square2.Location.X/squareSize, square2.Location.Y/squareSize)&&GameField.IsEmpty(square3.Location.X/squareSize, square3.Location.Y/squareSize)&&GameField.IsEmpty(square4.Location.X/squareSize, square4.Location.Y/squareSize))) { + StatusRotation = OldStatusRotation; + square1.Location = OldPosition1; + square2.Location = OldPosition2; + square3.Location = OldPosition3; + square4.Location = OldPosition4; + } + Show(GameField.GraphBackground); + } + + public bool Down() { + // If there's no block below the current one, go down + if (GameField.IsEmpty(square1.Location.X/squareSize, square1.Location.Y/squareSize+1)&&GameField.IsEmpty(square2.Location.X/squareSize, square2.Location.Y/squareSize+1)&&GameField.IsEmpty(square3.Location.X/squareSize, square3.Location.Y/squareSize+1)&&GameField.IsEmpty(square4.Location.X/squareSize, square4.Location.Y/squareSize+1)) { + // Hide the block (in the previous position) + Hide(GameField.GraphBackground); + // Update the block position + square1.Location = new Point(square1.Location.X, square1.Location.Y+squareSize); + square2.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + square3.Location = new Point(square3.Location.X, square3.Location.Y+squareSize); + square4.Location = new Point(square4.Location.X, square4.Location.Y+squareSize); + // Draw the block in the new position + Show(GameField.GraphBackground); + return true; + } + else { + // If there's a block below the current one, doesn't go down + // -> put it on the array that controls the game and return FALSE + GameField.StopSquare(square1, square1.Location.X/squareSize, square1.Location.Y/squareSize); + GameField.StopSquare(square2, square2.Location.X/squareSize, square2.Location.Y/squareSize); + GameField.StopSquare(square3, square3.Location.X/squareSize, square3.Location.Y/squareSize); + GameField.StopSquare(square4, square4.Location.X/squareSize, square4.Location.Y/squareSize); + return false; + } + } + + public bool Right() { + // If there's no block to the right of the current one, go right + if (GameField.IsEmpty(square1.Location.X/squareSize+1, square1.Location.Y/squareSize)&&GameField.IsEmpty(square2.Location.X/squareSize+1, square2.Location.Y/squareSize)&&GameField.IsEmpty(square3.Location.X/squareSize+1, square3.Location.Y/squareSize)&&GameField.IsEmpty(square4.Location.X/squareSize+1, square4.Location.Y/squareSize)) { + // Hide the block (in the previous position) + Hide(GameField.GraphBackground); + // Update the block position + square1.Location = new Point(square1.Location.X+squareSize, square1.Location.Y); + square2.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + square3.Location = new Point(square3.Location.X+squareSize, square3.Location.Y); + square4.Location = new Point(square4.Location.X+squareSize, square4.Location.Y); + // Draw the block in the new position + Show(GameField.GraphBackground); + return true; + } + else { + // If there's a block to the right of the current one, + // doesn't go right and return FALSE + return false; + } + } + + public bool Left() { + // If there's no block to the left of the current one, go left + if (GameField.IsEmpty(square1.Location.X/squareSize-1, square1.Location.Y/squareSize)&&GameField.IsEmpty(square2.Location.X/squareSize-1, square2.Location.Y/squareSize)&&GameField.IsEmpty(square3.Location.X/squareSize-1, square3.Location.Y/squareSize)&&GameField.IsEmpty(square4.Location.X/squareSize-1, square4.Location.Y/squareSize)) { + // Hide the block (in the previous position) + Hide(GameField.GraphBackground); + // Update the block position + square1.Location = new Point(square1.Location.X-squareSize, square1.Location.Y); + square2.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square3.Location = new Point(square3.Location.X-squareSize, square3.Location.Y); + square4.Location = new Point(square4.Location.X-squareSize, square4.Location.Y); + // Draw the block in the new position + Show(GameField.GraphBackground); + return true; + } + else { + // If there's a block to the left of the current one, + // doesn't go left and return FALSE + return false; + } + } + + // Draws each square of the block on the game field + public void Show(Graphics g) { + square1.Show(g); + square2.Show(g); + square3.Show(g); + square4.Show(g); + } + + // Hides each square of the block on the game field + public void Hide(Graphics g) { + square1.Hide(g); + square2.Hide(g); + square3.Hide(g); + square4.Hide(g); + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/PocketNettrix/Form1.cs b/Source Code updated 08-12-05/PocketNettrix/Form1.cs new file mode 100644 index 0000000..2a329cd --- /dev/null +++ b/Source Code updated 08-12-05/PocketNettrix/Form1.cs @@ -0,0 +1,57 @@ +using System; +using System.Drawing; +using System.Collections; +using System.Windows.Forms; +using System.Data; + +namespace PocketNettrix +{ + /// + /// Summary description for Form1. + /// + public class Form1 : System.Windows.Forms.Form + { + private System.Windows.Forms.MainMenu mainMenu1; + + public Form1() + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // + // TODO: Add any constructor code after InitializeComponent call + // + } + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) + { + base.Dispose( disposing ); + } + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.mainMenu1 = new System.Windows.Forms.MainMenu(); + this.Menu = this.mainMenu1; + this.Text = "Form1"; + + } + #endregion + + /// + /// The main entry point for the application. + /// + + static void Main() + { + Application.Run(new Form1()); + } + } +} diff --git a/Source Code updated 08-12-05/PocketNettrix/Form1.resx b/Source Code updated 08-12-05/PocketNettrix/Form1.resx new file mode 100644 index 0000000..25763cd --- /dev/null +++ b/Source Code updated 08-12-05/PocketNettrix/Form1.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Windows.Forms.Design.CFResXResourceReader, System.CF.Design, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + System.Windows.Forms.Design.CFResXResourceWriter, System.CF.Design, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + diff --git a/Source Code updated 08-12-05/PocketNettrix/GameField.cs b/Source Code updated 08-12-05/PocketNettrix/GameField.cs new file mode 100644 index 0000000..8f296dd --- /dev/null +++ b/Source Code updated 08-12-05/PocketNettrix/GameField.cs @@ -0,0 +1,134 @@ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; +namespace PocketNettrix { + public class GameField { + // The game field witdth will be exactly 16 bits (2 bytes) + public const int Width = 16; + public const int Height = 30; + // The Size of each square + public const int SquareSize = 10; + + private static Square[,] arrGameField = new Square[Width, Height]; + private static int[] arrBitGameField = new int[Height]; + public static Color BackColor; + + private const int bitEmpty = 0x0; //00000000 0000000 + private const int bitFull = 0xFFFF; //11111111 1111111 + + //Update to Pocket PC - Create rectangles to store the screen position + public static Rectangle rectBackground; + public static Rectangle rectNextBlock; + + // Update to Pocket PC - New Global Graphics objects + public static Graphics GraphNextBlock; + public static Graphics GraphBackground; + + // x goes from 0 to Width -1 + // y goes from 0 to Height -1 + public static bool IsEmpty(int x, int y) { + // If the Y or X is beyond the game field, return false + if ((y<0||y>=Height)||(x<0||x>=Width)) { + return false; + } + // Test the Xth bit of the Yth line of the game field + else if((arrBitGameField[y] & (1<= 0) { + // stops the loop when the blank lines are reached + if (arrBitGameField[y]==bitEmpty) y = 0; + + // If all the bits of the line are set, then increment the + // counter to clear the line and move all above lines down + if (arrBitGameField[y]==bitFull) { + CheckLines_result++; + + // Move all next lines down + for(int index = y; index >= 0; index--) { + // if the current line is NOT the first of the game field, + // copy the line above + if (index>0) { + // Copy the bits from the line above + arrBitGameField[index] = arrBitGameField[index-1]; + + // Copy each of the squares from the line above + for(int x=0; x=0; y--) + if (arrBitGameField[y]!=bitEmpty) + for(int x=Width-1; x>=0; x--) + if (arrGameField[x, y] != null) arrGameField[x, y].Show(GraphBackground); + } + + public static void Reset() { + // Clean the game field + for(int i=Height; i<=0; i--) { + // Clear the lines + arrBitGameField[i] = bitEmpty; + for(int x=0; x + /// Summary description for . + /// + public class NetTrix : System.Windows.Forms.Form { + internal System.Windows.Forms.PictureBox PicBackground; + internal System.Windows.Forms.Label lblScore; + internal System.Windows.Forms.Button CmdStart; + internal System.Windows.Forms.PictureBox PicNextBlock; + internal System.Windows.Forms.Label LblNextBlock; + internal System.Windows.Forms.Label lblScoreValue; + internal System.Windows.Forms.Timer tmrGameClock; +// private System.ComponentModel.IContainer components; + private bool stillProcessing = false; + private int score = 0; + private Block CurrentBlock; + private System.Windows.Forms.Button leftButton; + private System.Windows.Forms.Button rotateButton; + private System.Windows.Forms.Button rightButton; + private System.Windows.Forms.Button downButton; + private Block NextBlock; + + public NetTrix() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + // + // TODO: Add any constructor code after InitializeComponent call + // + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { +// if(components != null) { +// components.Dispose(); +// } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.PicBackground = new System.Windows.Forms.PictureBox(); + this.lblScore = new System.Windows.Forms.Label(); + this.CmdStart = new System.Windows.Forms.Button(); + this.PicNextBlock = new System.Windows.Forms.PictureBox(); + this.LblNextBlock = new System.Windows.Forms.Label(); + this.lblScoreValue = new System.Windows.Forms.Label(); + this.tmrGameClock = new System.Windows.Forms.Timer(); + this.leftButton = new System.Windows.Forms.Button(); + this.rotateButton = new System.Windows.Forms.Button(); + this.rightButton = new System.Windows.Forms.Button(); + this.downButton = new System.Windows.Forms.Button(); + // + // PicBackground + // + this.PicBackground.Size = new System.Drawing.Size(149, 321); + // + // lblScore + // + this.lblScore.Location = new System.Drawing.Point(161, 5); + this.lblScore.Size = new System.Drawing.Size(76, 18); + this.lblScore.Text = "Score:"; + // + // CmdStart + // + this.CmdStart.Location = new System.Drawing.Point(168, 144); + this.CmdStart.Size = new System.Drawing.Size(68, 25); + this.CmdStart.Text = "Start!"; + this.CmdStart.Click += new System.EventHandler(this.CmdStart_Click); + // + // PicNextBlock + // + this.PicNextBlock.Location = new System.Drawing.Point(168, 72); + this.PicNextBlock.Size = new System.Drawing.Size(75, 64); + // + // LblNextBlock + // + this.LblNextBlock.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold); + this.LblNextBlock.Location = new System.Drawing.Point(160, 48); + this.LblNextBlock.Size = new System.Drawing.Size(76, 16); + this.LblNextBlock.Text = "Next Block:"; + // + // lblScoreValue + // + this.lblScoreValue.Location = new System.Drawing.Point(160, 31); + this.lblScoreValue.Size = new System.Drawing.Size(76, 18); + this.lblScoreValue.Text = "0"; + this.lblScoreValue.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // tmrGameClock + // + this.tmrGameClock.Tick += new System.EventHandler(this.tmrGameClock_Tick); + // + // leftButton + // + this.leftButton.Location = new System.Drawing.Point(168, 224); + this.leftButton.Size = new System.Drawing.Size(24, 24); + this.leftButton.Text = "<"; + this.leftButton.Click += new System.EventHandler(this.leftButton_Click); + // + // rotateButton + // + this.rotateButton.Location = new System.Drawing.Point(176, 192); + this.rotateButton.Size = new System.Drawing.Size(56, 24); + this.rotateButton.Text = "Rotate"; + this.rotateButton.Click += new System.EventHandler(this.rotateButton_Click); + // + // rightButton + // + this.rightButton.Location = new System.Drawing.Point(216, 224); + this.rightButton.Size = new System.Drawing.Size(24, 24); + this.rightButton.Text = ">"; + this.rightButton.Click += new System.EventHandler(this.rightButton_Click); + // + // downButton + // + this.downButton.Location = new System.Drawing.Point(192, 248); + this.downButton.Size = new System.Drawing.Size(24, 24); + this.downButton.Text = "\\/"; + this.downButton.Click += new System.EventHandler(this.downButton_Click); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + // + // NetTrix + // + this.ClientSize = new System.Drawing.Size(246, 318); + this.Controls.Add(this.leftButton); + this.Controls.Add(this.CmdStart); + this.Controls.Add(this.PicNextBlock); + this.Controls.Add(this.LblNextBlock); + this.Controls.Add(this.lblScoreValue); + this.Controls.Add(this.lblScore); + this.Controls.Add(this.PicBackground); + this.Controls.Add(this.rotateButton); + this.Controls.Add(this.rightButton); + this.Controls.Add(this.downButton); + this.Text = ".NETTrix"; + //this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.NetTrix_KeyDown); + this.Load += new System.EventHandler(this.NetTrix_Load); + + } + #endregion + + /// + /// The main entry point for the application. + /// + static void Main() { + Application.Run(new NetTrix()); + } + + private void tmrGameClock_Tick(object sender, System.EventArgs e) { + if (stillProcessing) return; + stillProcessing = true; + //Manage the falling block + if (!CurrentBlock.Down()) { + //Update to Pocket PC: Update the score value + score += 5; + lblScoreValue.Text = score.ToString(); + if (CurrentBlock.Top() == 0) { + tmrGameClock.Enabled = false; + CmdStart.Enabled = true; + //Update to Pocket PC: Changed box icon + MessageBox.Show("GAME OVER", "NETTrix", MessageBoxButtons.OK, MessageBoxIcon.Hand,MessageBoxDefaultButton.Button1); + stillProcessing = false; + return; + } + //increase score based on # of deleted lines + int erasedLines = GameField.CheckLines(); + if (erasedLines > 0) { + score += 100 * erasedLines; + lblScoreValue.Text = score.ToString(); + //Update to Pocket PC: Use Clear/Redraw + GameField.Clear(); + GameField.Redraw(); + } + //Replace the current block... + CurrentBlock = new Block(new Point(GameField.SquareSize*6,0), NextBlock.BlockType); + CurrentBlock.Show(GameField.GraphBackground); + //Create the Next block + NextBlock.Hide(GameField.GraphNextBlock); + NextBlock = new Block(new Point(20,10), Block.BlockTypes.Undefined); + NextBlock.Show(GameField.GraphNextBlock); + PicNextBlock.Invalidate(); + } + PicBackground.Invalidate(); + stillProcessing = false; + } + + private void CmdStart_Click(object sender, System.EventArgs e) { + tmrGameClock.Enabled = true; + CmdStart.Enabled = false; + lblScoreValue.Text = "0"; + + // Clean the game field + GameField.Reset(); + // Update to Pocket PC: we must draw the blank screen, instead of simply + // invalidating a picture box image + GameField.Clear(); + + // Create and show the current and next blocks + CurrentBlock = new Block(new Point(GameField.SquareSize * 6, 50), Block.BlockTypes.Undefined); + CurrentBlock.Show(GameField.GraphBackground); + + NextBlock = new Block(new Point(20, 10), Block.BlockTypes.Undefined); + NextBlock.Show(GameField.GraphNextBlock); + + PicBackground.Invalidate(); + PicNextBlock.Invalidate(); + } + + private void NetTrix_Load(object sender, System.EventArgs e) { + //Adjusts the Size of the form and position of controls based on the class constants + //On the window height, sums the Size of the window title bar + Height = GameField.Height * GameField.SquareSize + (Height - ClientSize.Height) + 3; //3=border width + Width = GameField.Width * GameField.SquareSize + 120; + PicBackground.Height = GameField.Height * GameField.SquareSize + 4; + PicBackground.Width = GameField.Width * GameField.SquareSize + 4; + PicNextBlock.Left = GameField.Width * GameField.SquareSize + 12; + LblNextBlock.Left = GameField.Width * GameField.SquareSize + 12; + lblScore.Left = GameField.Width * GameField.SquareSize + 12; + lblScoreValue.Left = GameField.Width * GameField.SquareSize + 12; + CmdStart.Left = GameField.Width * GameField.SquareSize + 12; + + //Update to Pocket PC: move the new buttons according to the square size too + this.leftButton.Left = GameField.Width * GameField.SquareSize + 12; + this.rightButton.Left = GameField.Width * GameField.SquareSize + 12 + leftButton.Width * 2; + this.rotateButton.Left = GameField.Width * GameField.SquareSize + 12 + leftButton.Width; + this.downButton.Left = GameField.Width * GameField.SquareSize + 12 + leftButton.Width; + + // Update to Pocket PC: The images must be explicitly created + PicBackground.Image = new Bitmap(PicBackground.Width, PicBackground.Height); + PicNextBlock.Image = new Bitmap(PicNextBlock.Width, PicNextBlock.Height); + + //Update to Pocket PC: The initialize function will create the + // buffers and Graphics objects used to draw on the screen + GameField.Initialize(this, PicBackground, PicNextBlock); + } + + private void rotateButton_Click(object sender, System.EventArgs e) { + //Don't do anything if timer isn't enabled + if (tmrGameClock.Enabled) CurrentBlock.Rotate(); + } + + private void leftButton_Click(object sender, System.EventArgs e) { + //Don't do anything if timer isn't enabled + if (tmrGameClock.Enabled) CurrentBlock.Left(); + } + + private void rightButton_Click(object sender, System.EventArgs e) { + //Don't do anything if timer isn't enabled + if (tmrGameClock.Enabled) CurrentBlock.Right(); + } + + private void downButton_Click(object sender, System.EventArgs e) { + //Don't do anything if timer isn't enabled + if (tmrGameClock.Enabled) CurrentBlock.Down(); + } + } +} diff --git a/Source Code updated 08-12-05/PocketNettrix/PocketNetTrix.resx b/Source Code updated 08-12-05/PocketNettrix/PocketNetTrix.resx new file mode 100644 index 0000000..ac330b6 --- /dev/null +++ b/Source Code updated 08-12-05/PocketNettrix/PocketNetTrix.resx @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Windows.Forms.Design.CFResXResourceReader, System.CF.Design, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + System.Windows.Forms.Design.CFResXResourceWriter, System.CF.Design, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + False + + + Private + + + Assembly + + + Private + + + 17, 17 + + + Assembly + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + NetTrix + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/PocketNettrix/PocketNettrix.csdproj b/Source Code updated 08-12-05/PocketNettrix/PocketNettrix.csdproj new file mode 100644 index 0000000..1183d26 --- /dev/null +++ b/Source Code updated 08-12-05/PocketNettrix/PocketNettrix.csdproj @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/PocketNettrix/PocketNettrix.sln b/Source Code updated 08-12-05/PocketNettrix/PocketNettrix.sln new file mode 100644 index 0000000..9472c9c --- /dev/null +++ b/Source Code updated 08-12-05/PocketNettrix/PocketNettrix.sln @@ -0,0 +1,23 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{20D4826A-C6FA-45DB-90F4-C717570B9F32}") = "PocketNettrix", "PocketNettrix.csdproj", "{DACE6351-19C1-416F-9217-54D632048582}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DACE6351-19C1-416F-9217-54D632048582}.Debug.ActiveCfg = Debug|Pocket PC + {DACE6351-19C1-416F-9217-54D632048582}.Debug.Build.0 = Debug|Pocket PC + {DACE6351-19C1-416F-9217-54D632048582}.Debug.Deploy.0 = Debug|Pocket PC + {DACE6351-19C1-416F-9217-54D632048582}.Release.ActiveCfg = Release|Pocket PC + {DACE6351-19C1-416F-9217-54D632048582}.Release.Build.0 = Release|Pocket PC + {DACE6351-19C1-416F-9217-54D632048582}.Release.Deploy.0 = Release|Pocket PC + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/PocketNettrix/Square.cs b/Source Code updated 08-12-05/PocketNettrix/Square.cs new file mode 100644 index 0000000..23c1687 --- /dev/null +++ b/Source Code updated 08-12-05/PocketNettrix/Square.cs @@ -0,0 +1,51 @@ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +namespace PocketNettrix { + public class Square { + private Point squareLocation; + + public Point Location { + get { return squareLocation; } + set { squareLocation = value; } + } + + private Size squareSize; + + public Size Size { + get { return squareSize; } + set { squareSize = value; } + } + + private Color foregroundColor; + + public Color ForeColor { + get { return foregroundColor; } + set { foregroundColor = value; } + } + + private Color backgroundColor; + + public Color BackColor { + get { return backgroundColor; } + set { backgroundColor = value; } + } + + + public void Show(Graphics g) { + g.FillRectangle(new SolidBrush(backgroundColor), Location.X, Location.Y, Size.Width, Size.Height); + g.DrawRectangle(new Pen(foregroundColor),Location.X, Location.Y, Size.Width-1, Size.Height-1); + } + + public void Hide(Graphics g) { + g.FillRectangle(new SolidBrush(GameField.BackColor), + new Rectangle(Location.X, Location.Y, Size.Width, Size.Height)); + } + + public Square(Size initialSize, Color initialBackColor, Color initialForeColor) { + Size = initialSize; + BackColor = initialBackColor; + ForeColor = initialForeColor; + } + } +} diff --git a/Source Code updated 08-12-05/PocketNettrix/old_Block.cs b/Source Code updated 08-12-05/PocketNettrix/old_Block.cs new file mode 100644 index 0000000..d70af64 --- /dev/null +++ b/Source Code updated 08-12-05/PocketNettrix/old_Block.cs @@ -0,0 +1,389 @@ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; + +namespace PocketNettrix { + public class Block { + + public enum BlockTypes { + Undefined = 0, + Square = 1, + Line = 2, + J = 3, + L = 4, + T = 5, + Z = 6, + S = 7 + }; + private BlockTypes blockType; + + public BlockTypes BlockType { + get { return blockType; } + set { blockType = value; } + } + + public enum RotationDirections { + North = 1, + East = 2, + South = 3, + West = 4 + }; + + private RotationDirections statusRotation = RotationDirections.North; + + public RotationDirections StatusRotation { + get { return statusRotation; } + set { statusRotation = value; } + } + + // The colors of each block type + private Color[] backColors = {Color.Empty, Color.Red, Color.Blue, Color.Red, Color.Yellow, Color.Green, Color.White, Color.Black}; + private Color[] foreColors = {Color.Empty, Color.Purple, Color.LightBlue, Color.Yellow, Color.Red, Color.LightGreen, Color.Black, Color.White}; + + + // The 4 squares that compose the block + private Square square1; + private Square square2; + private Square square3; + private Square square4; + + public Square Square1 { + get { return square1; } + set { square1 = value; } + } + + public Square Square2 { + get { return square2; } + set { square2 = value; } + } + + public Square Square3 { + get { return square3; } + set { square3 = value; } + } + + public Square Square4 { + get { return square4; } + set { square4 = value; } + } + + private const int squareSize = GameField.SquareSize; + private static Random random = new Random(); + + public int Top() { + return Math.Min(square1.Location.Y, Math.Min(square2.Location.Y, + Math.Min(square3.Location.Y, square4.Location.Y))); + } + + public Block(Point location, BlockTypes newBlockType) { + // Create the new block + if (newBlockType==BlockTypes.Undefined) { + //BlockType = (BlockTypes)(random.Next(7)) + 1; + BlockType = BlockTypes.Line; //force line block for testing + } + else { + BlockType = newBlockType; + } + // Create each of the squares of the block + // Set the square colors, based on the block type + square1 = new Square(new Size(squareSize, squareSize), backColors[(int)BlockType], foreColors[(int)BlockType]); + square2 = new Square(new Size(squareSize, squareSize), backColors[(int)BlockType], foreColors[(int)BlockType]); + square3 = new Square(new Size(squareSize, squareSize), backColors[(int)BlockType], foreColors[(int)BlockType]); + square4 = new Square(new Size(squareSize, squareSize), backColors[(int)BlockType], foreColors[(int)BlockType]); + + // Set the squares positions based on the block type + switch(BlockType) { + case BlockTypes.Square: + square1.Location = new Point(location.X, location.Y); + square2.Location = new Point(location.X+squareSize, location.Y); + square3.Location = new Point(location.X, location.Y+squareSize); + square4.Location = new Point(location.X+squareSize, location.Y+squareSize); + break; + case BlockTypes.Line: + square1.Location = new Point(location.X, location.Y); + square2.Location = new Point(location.X, location.Y+squareSize); + square3.Location = new Point(location.X, location.Y+2*squareSize); + square4.Location = new Point(location.X, location.Y+3*squareSize); + break; + case BlockTypes.J: + square1.Location = new Point(location.X+squareSize, location.Y); + square2.Location = new Point(location.X+squareSize, location.Y+squareSize); + square3.Location = new Point(location.X+squareSize, location.Y+2*squareSize); + square4.Location = new Point(location.X, location.Y+2*squareSize); + break; + case BlockTypes.L: + square1.Location = new Point(location.X, location.Y); + square2.Location = new Point(location.X, location.Y+squareSize); + square3.Location = new Point(location.X, location.Y+2*squareSize); + square4.Location = new Point(location.X+squareSize, location.Y+2*squareSize); + break; + case BlockTypes.T: + square1.Location = new Point(location.X, location.Y); + square2.Location = new Point(location.X+squareSize, location.Y); + square3.Location = new Point(location.X+2*squareSize, location.Y); + square4.Location = new Point(location.X+squareSize, location.Y+squareSize); + break; + case BlockTypes.Z: + square1.Location = new Point(location.X, location.Y); + square2.Location = new Point(location.X+squareSize, location.Y); + square3.Location = new Point(location.X+squareSize, location.Y+squareSize); + square4.Location = new Point(location.X+2*squareSize, location.Y+squareSize); + break; + case BlockTypes.S: + square1.Location = new Point(location.X, location.Y+squareSize); + square2.Location = new Point(location.X+squareSize, location.Y+squareSize); + square3.Location = new Point(location.X+squareSize, location.Y); + square4.Location = new Point(location.X+2*squareSize, location.Y); + break; + } + } + + public void Rotate() { + // Store the current block position + Point OldPosition1 = square1.Location; + Point OldPosition2 = square2.Location; + Point OldPosition3 = square3.Location; + Point OldPosition4 = square4.Location; + RotationDirections OldStatusRotation = StatusRotation; + Hide(GameField.GraphBackground); + + // Rotate the blocks + switch(BlockType) { + case BlockTypes.Square: + // Do nothing. Squares don't rotate. + break; + case BlockTypes.Line: + // Rotate all squares around square 2 + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square3.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + square4.Location = new Point(square2.Location.X+2*squareSize, square2.Location.Y); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square3.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + square4.Location = new Point(square2.Location.X, square2.Location.Y+2*squareSize); + break; + } + break; + case BlockTypes.J: + // Rotate all squares around square 3 + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square3.Location.X, square3.Location.Y-squareSize); + square2.Location = new Point(square3.Location.X+squareSize, square3.Location.Y); + square4.Location = new Point(square3.Location.X+2*squareSize, square3.Location.Y); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.South; + square1.Location = new Point(square3.Location.X+squareSize, square3.Location.Y); + square2.Location = new Point(square3.Location.X, square3.Location.Y+squareSize); + square4.Location = new Point(square3.Location.X, square3.Location.Y+2*squareSize); + break; + case RotationDirections.South: + StatusRotation = RotationDirections.West; + square1.Location = new Point(square3.Location.X, square3.Location.Y+squareSize); + square2.Location = new Point(square3.Location.X-squareSize, square3.Location.Y); + square4.Location = new Point(square3.Location.X-2*squareSize, square3.Location.Y); + break; + case RotationDirections.West: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square3.Location.X-squareSize, square3.Location.Y); + square2.Location = new Point(square3.Location.X, square3.Location.Y-squareSize); + square4.Location = new Point(square3.Location.X, square3.Location.Y-2*squareSize); + break; + } + break; + case BlockTypes.L: + // Rotate all squares around square 3 + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square3.Location.X+squareSize, square3.Location.Y); + square2.Location = new Point(square3.Location.X+2*squareSize, square3.Location.Y); + square4.Location = new Point(square3.Location.X, square3.Location.Y+squareSize); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.South; + square1.Location = new Point(square3.Location.X-squareSize, square3.Location.Y); + square2.Location = new Point(square3.Location.X, square3.Location.Y+squareSize); + square4.Location = new Point(square3.Location.X, square3.Location.Y+2*squareSize); + break; + case RotationDirections.South: + StatusRotation = RotationDirections.West; + square1.Location = new Point(square3.Location.X-2*squareSize, square3.Location.Y); + square2.Location = new Point(square3.Location.X-squareSize, square3.Location.Y); + square4.Location = new Point(square3.Location.X, square3.Location.Y-squareSize); + break; + case RotationDirections.West: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square3.Location.X, square3.Location.Y-2*squareSize); + square2.Location = new Point(square3.Location.X, square3.Location.Y-squareSize); + square4.Location = new Point(square3.Location.X+squareSize, square3.Location.Y); + break; + } + break; + case BlockTypes.T: + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square3.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + square4.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.South; + square1.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + square3.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square4.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + break; + case RotationDirections.South: + StatusRotation = RotationDirections.West; + square1.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + square3.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square4.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + break; + case RotationDirections.West: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square3.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + square4.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + break; + } + break; + case BlockTypes.Z: + // Rotate all squares around square 2 + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square3.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square4.Location = new Point(square2.Location.X-squareSize, square2.Location.Y+squareSize); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square3.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + square4.Location = new Point(square2.Location.X+squareSize, square2.Location.Y+squareSize); + break; + } + break; + case BlockTypes.S: + // Rotate all squares around square 2 + switch(StatusRotation) { + case RotationDirections.North: + StatusRotation = RotationDirections.East; + square1.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square3.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + square4.Location = new Point(square2.Location.X+squareSize, square2.Location.Y+squareSize); + break; + case RotationDirections.East: + StatusRotation = RotationDirections.North; + square1.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square3.Location = new Point(square2.Location.X, square2.Location.Y-squareSize); + square4.Location = new Point(square2.Location.X+squareSize, square2.Location.Y-squareSize); + break; + } + break; + } + + // After rotating the squares, test if they overlap other squares. + // If so, return to original position + if (!(GameField.IsEmpty(square1.Location.X/squareSize, square1.Location.Y/squareSize)&&GameField.IsEmpty(square2.Location.X/squareSize, square2.Location.Y/squareSize)&&GameField.IsEmpty(square3.Location.X/squareSize, square3.Location.Y/squareSize)&&GameField.IsEmpty(square4.Location.X/squareSize, square4.Location.Y/squareSize))) { + StatusRotation = OldStatusRotation; + square1.Location = OldPosition1; + square2.Location = OldPosition2; + square3.Location = OldPosition3; + square4.Location = OldPosition4; + } + Show(GameField.GraphBackground); + } + + public bool Down() { + // If there's no block below the current one, go down + if (GameField.IsEmpty(square1.Location.X/squareSize, square1.Location.Y/squareSize+1)&&GameField.IsEmpty(square2.Location.X/squareSize, square2.Location.Y/squareSize+1)&&GameField.IsEmpty(square3.Location.X/squareSize, square3.Location.Y/squareSize+1)&&GameField.IsEmpty(square4.Location.X/squareSize, square4.Location.Y/squareSize+1)) { + // Hide the block (in the previous position) + Hide(GameField.GraphBackground); + // Update the block position + square1.Location = new Point(square1.Location.X, square1.Location.Y+squareSize); + square2.Location = new Point(square2.Location.X, square2.Location.Y+squareSize); + square3.Location = new Point(square3.Location.X, square3.Location.Y+squareSize); + square4.Location = new Point(square4.Location.X, square4.Location.Y+squareSize); + // Draw the block in the new position + Show(GameField.GraphBackground); + return true; + } + else { + // If there's a block below the current one, doesn't go down + // -> put it on the array that controls the game and return FALSE + GameField.StopSquare(square1, square1.Location.X/squareSize, square1.Location.Y/squareSize); + GameField.StopSquare(square2, square2.Location.X/squareSize, square2.Location.Y/squareSize); + GameField.StopSquare(square3, square3.Location.X/squareSize, square3.Location.Y/squareSize); + GameField.StopSquare(square4, square4.Location.X/squareSize, square4.Location.Y/squareSize); + return false; + } + } + + public bool Right() { + // If there's no block to the right of the current one, go right + if (GameField.IsEmpty(square1.Location.X/squareSize+1, square1.Location.Y/squareSize)&&GameField.IsEmpty(square2.Location.X/squareSize+1, square2.Location.Y/squareSize)&&GameField.IsEmpty(square3.Location.X/squareSize+1, square3.Location.Y/squareSize)&&GameField.IsEmpty(square4.Location.X/squareSize+1, square4.Location.Y/squareSize)) { + // Hide the block (in the previous position) + Hide(GameField.GraphBackground); + // Update the block position + square1.Location = new Point(square1.Location.X+squareSize, square1.Location.Y); + square2.Location = new Point(square2.Location.X+squareSize, square2.Location.Y); + square3.Location = new Point(square3.Location.X+squareSize, square3.Location.Y); + square4.Location = new Point(square4.Location.X+squareSize, square4.Location.Y); + // Draw the block in the new position + Show(GameField.GraphBackground); + return true; + } + else { + // If there's a block to the right of the current one, + // doesn't go right and return FALSE + return false; + } + } + + public bool Left() { + // If there's no block to the left of the current one, go left + if (GameField.IsEmpty(square1.Location.X/squareSize-1, square1.Location.Y/squareSize)&&GameField.IsEmpty(square2.Location.X/squareSize-1, square2.Location.Y/squareSize)&&GameField.IsEmpty(square3.Location.X/squareSize-1, square3.Location.Y/squareSize)&&GameField.IsEmpty(square4.Location.X/squareSize-1, square4.Location.Y/squareSize)) { + // Hide the block (in the previous position) + Hide(GameField.GraphBackground); + // Update the block position + square1.Location = new Point(square1.Location.X-squareSize, square1.Location.Y); + square2.Location = new Point(square2.Location.X-squareSize, square2.Location.Y); + square3.Location = new Point(square3.Location.X-squareSize, square3.Location.Y); + square4.Location = new Point(square4.Location.X-squareSize, square4.Location.Y); + // Draw the block in the new position + Show(GameField.GraphBackground); + return true; + } + else { + // If there's a block to the left of the current one, + // doesn't go left and return FALSE + return false; + } + } + + // Draws each square of the block on the game field + public void Show(Graphics g) { + square1.Show(g); + square2.Show(g); + square3.Show(g); + square4.Show(g); + } + + // Hides each square of the block on the game field + public void Hide(Graphics g) { + square1.Hide(g); + square2.Hide(g); + square3.Hide(g); + square4.Hide(g); + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/PocketNettrix/old_GameField.cs b/Source Code updated 08-12-05/PocketNettrix/old_GameField.cs new file mode 100644 index 0000000..09273df --- /dev/null +++ b/Source Code updated 08-12-05/PocketNettrix/old_GameField.cs @@ -0,0 +1,136 @@ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; +namespace PocketNettrix { + public class GameField { + // The game field witdth will be exactly 16 bits (2 bytes) + public const int Width = 16; + public const int Height = 30; + // The Size of each square + public const int SquareSize = 10; + + private static Square[,] arrGameField = new Square[Width, Height]; + private static int[] arrBitGameField = new int[Height]; + public static Color BackColor; + + private const int bitEmpty = 0x0; //00000000 0000000 + private const int bitFull = 0xFFFF; //11111111 1111111 + + //Update to Pocket PC - Create rectangles to store the screen position + public static Rectangle rectBackground; + public static Rectangle rectNextBlock; + + // Update to Pocket PC - New Global Graphics objects + public static Graphics GraphNextBlock; + public static Graphics GraphBackground; + + // x goes from 0 to Width -1 + // y goes from 0 to Height -1 + public static bool IsEmpty(int x, int y) { + // If the Y or X is beyond the game field, return false + if ((y<0||y>=Height)||(x<0||x>=Width)) { + return false; + } + // Test the Xth bit of the Yth line of the game field + else if((arrBitGameField[y] & (1<= 0) { + // stops the loop when the blank lines are reached + if (arrBitGameField[y]==bitEmpty) y = 0; + + // If all the bits of the line are set, then increment the + // counter to clear the line and move all above lines down + if (arrBitGameField[y]==bitFull) { + CheckLines_result++; + + // Move all next lines down + for(int index = y; index >= 0; index--) { + // if the current line is NOT the first of the game field, + // copy the line above + if (index>0) { + // Copy the bits from the line above + arrBitGameField[index] = arrBitGameField[index-1]; + + // Copy each of the squares from the line above + for(int x=0; x=0; y--) + if (arrBitGameField[y]!=bitEmpty) + for(int x=Width-1; x>=0; x--) + if (arrGameField[x, y] != null) arrGameField[x, y].Show(GraphBackground); + } + + public static void Reset() { + // Clean the game field + for(int i=Height; i<=0; i--) { + // Clear the lines + arrBitGameField[i] = bitEmpty; + for(int x=0; x + + + + + diff --git a/Source Code updated 08-12-05/SimpleSprite/HighResolutionTimer.cs b/Source Code updated 08-12-05/SimpleSprite/HighResolutionTimer.cs new file mode 100644 index 0000000..9a0749e --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/HighResolutionTimer.cs @@ -0,0 +1,111 @@ +using System; +using System.Runtime.InteropServices; + +namespace SimpleSprite { + /// + /// Summary description for HighResolutionTimer. + /// + public class HighResolutionTimer { + [System.Security.SuppressUnmanagedCodeSecurity] + [DllImport("kernel32")] + private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); + + [System.Security.SuppressUnmanagedCodeSecurity] + [DllImport("kernel32")] + private static extern bool QueryPerformanceCounter(ref long PerformanceCount); + + private bool timerInitialized = false; + private bool usingQPF = false; + private bool timerStopped = true; + private long ticksPerSecond = 0; + private long stopTime = 0; + private long lastElapsedTime = 0; + private long baseTime = 0; // Set when timer is started or reset + private long timeNow = 0; + private double elapsedTime = 0.0; + + public HighResolutionTimer() { + timerInitialized = true; + + usingQPF = QueryPerformanceFrequency(ref ticksPerSecond); + if (usingQPF) + ticksPerSecond = ticksPerSecond; + else + throw new Exception("Timer init failure -- no QueryPerformanceCounter"); + } + + + public void Reset() { + QueryPerformanceCounter(ref timeNow); + baseTime = timeNow; + lastElapsedTime = timeNow; + stopTime = 0; + timerStopped = false; + } + + public void Start() { + if (stopTime != 0) + timeNow = stopTime; + else + QueryPerformanceCounter(ref timeNow); + + if (timerStopped) + baseTime += timeNow - stopTime; + stopTime = 0; + lastElapsedTime = timeNow; + timerStopped = false; + } + + public void Stop() { + QueryPerformanceCounter(ref timeNow); + stopTime = timeNow; + lastElapsedTime = timeNow; + timerStopped = true; + } + + public long Frequency{ + get { return ticksPerSecond; } + } + + public void Advance() { + stopTime += ticksPerSecond/10; + } + + public float AbsoluteTime { + get { + if (stopTime != 0) + timeNow = stopTime; + else + QueryPerformanceCounter(ref timeNow); + return (float) (timeNow / (double) ticksPerSecond); + } + } + + public float ApplicationTime { + get { + return TimeDelta(baseTime); + } + } + + public float ElapsedTime { + get { + return TimeDelta(lastElapsedTime); + } + } + + private float TimeDelta(float refTime) { + QueryPerformanceCounter(ref timeNow); + elapsedTime = (double) (timeNow - refTime) / (double) ticksPerSecond; + lastElapsedTime = timeNow; + return (float)elapsedTime; + } + + public float PeekTime { + get { + long peek = 0; + QueryPerformanceCounter(ref peek); + return (float) (peek - lastElapsedTime) / (float) ticksPerSecond; + } + } + } +} diff --git a/Source Code updated 08-12-05/SimpleSprite/Media/_sgbak/bounce.wav.2003-12-20.08-38-24.1093 b/Source Code updated 08-12-05/SimpleSprite/Media/_sgbak/bounce.wav.2003-12-20.08-38-24.1093 new file mode 100644 index 0000000..33bd786 Binary files /dev/null and b/Source Code updated 08-12-05/SimpleSprite/Media/_sgbak/bounce.wav.2003-12-20.08-38-24.1093 differ diff --git a/Source Code updated 08-12-05/SimpleSprite/Media/_sgbak/bounce.wav.2004-06-02.20-32-45.3125 b/Source Code updated 08-12-05/SimpleSprite/Media/_sgbak/bounce.wav.2004-06-02.20-32-45.3125 new file mode 100644 index 0000000..33bd786 Binary files /dev/null and b/Source Code updated 08-12-05/SimpleSprite/Media/_sgbak/bounce.wav.2004-06-02.20-32-45.3125 differ diff --git a/Source Code updated 08-12-05/SimpleSprite/Media/_sgbak/donuts.bmp.2003-12-20.08-38-24.1875 b/Source Code updated 08-12-05/SimpleSprite/Media/_sgbak/donuts.bmp.2003-12-20.08-38-24.1875 new file mode 100644 index 0000000..fab9987 Binary files /dev/null and b/Source Code updated 08-12-05/SimpleSprite/Media/_sgbak/donuts.bmp.2003-12-20.08-38-24.1875 differ diff --git a/Source Code updated 08-12-05/SimpleSprite/Media/_sgbak/donuts.bmp.2004-06-02.20-32-45.3906 b/Source Code updated 08-12-05/SimpleSprite/Media/_sgbak/donuts.bmp.2004-06-02.20-32-45.3906 new file mode 100644 index 0000000..fab9987 Binary files /dev/null and b/Source Code updated 08-12-05/SimpleSprite/Media/_sgbak/donuts.bmp.2004-06-02.20-32-45.3906 differ diff --git a/Source Code updated 08-12-05/SimpleSprite/Media/bounce.wav b/Source Code updated 08-12-05/SimpleSprite/Media/bounce.wav new file mode 100644 index 0000000..33bd786 Binary files /dev/null and b/Source Code updated 08-12-05/SimpleSprite/Media/bounce.wav differ diff --git a/Source Code updated 08-12-05/SimpleSprite/Media/donuts.bmp b/Source Code updated 08-12-05/SimpleSprite/Media/donuts.bmp new file mode 100644 index 0000000..fab9987 Binary files /dev/null and b/Source Code updated 08-12-05/SimpleSprite/Media/donuts.bmp differ diff --git a/Source Code updated 08-12-05/SimpleSprite/MediaUtilities.cs b/Source Code updated 08-12-05/SimpleSprite/MediaUtilities.cs new file mode 100644 index 0000000..d356939 --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/MediaUtilities.cs @@ -0,0 +1,38 @@ +using System; +using System.IO; +using System.Configuration; + +namespace SimpleSprite +{ + /// + /// Summary description for MediaUtilities. + /// + public class MediaUtilities + { +// private static string defaultPath = @"..\..\media\"; + private static string mediaPath = ConfigurationSettings.AppSettings.Get("MediaPath"); + + public MediaUtilities() { + } + + public static string FindFile(string filename) { + return FindFile(mediaPath, filename); + } + + public static string FindFile(string path, string filename) { + // First try to load the file in the full path + string fullName = AppendDirectorySeparator(path) + filename; + if (File.Exists(fullName)) + return fullName; + else + throw new FileNotFoundException("Could not find this file.", filename); + } + + private static string AppendDirectorySeparator(string pathname) { + if (!pathname.EndsWith(@"\")) + return pathname + @"\"; + else + return pathname; + } + } +} diff --git a/Source Code updated 08-12-05/SimpleSprite/SimpleSprite.csproj b/Source Code updated 08-12-05/SimpleSprite/SimpleSprite.csproj new file mode 100644 index 0000000..9c96dd5 --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/SimpleSprite.csproj @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/SimpleSprite/SimpleSprite.sln b/Source Code updated 08-12-05/SimpleSprite/SimpleSprite.sln new file mode 100644 index 0000000..e4b8f42 --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/SimpleSprite.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleSprite", "SimpleSprite.csproj", "{AFD7C5C8-1621-460E-AF07-FCF733FF30D6}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {AFD7C5C8-1621-460E-AF07-FCF733FF30D6}.Debug.ActiveCfg = Debug|.NET + {AFD7C5C8-1621-460E-AF07-FCF733FF30D6}.Debug.Build.0 = Debug|.NET + {AFD7C5C8-1621-460E-AF07-FCF733FF30D6}.Release.ActiveCfg = Release|.NET + {AFD7C5C8-1621-460E-AF07-FCF733FF30D6}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/SimpleSprite/Step1.cs b/Source Code updated 08-12-05/SimpleSprite/Step1.cs new file mode 100644 index 0000000..d66e7a0 --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/Step1.cs @@ -0,0 +1,129 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.Data; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace SimpleSprite { + /// + /// Summary description for Step1. + /// + public class Step1 : System.Windows.Forms.Form { + private TileSet tileSet; + private Texture tileSheet; + private Rectangle tilePosition; + private Vector3 spritePosition; + private Vector3 spriteCenter; + + private Device device; + + private System.ComponentModel.Container components = null; + public Step1() { + InitializeComponent(); + + this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true); + this.Text = "Simple Sprite : Step 1"; + } + + protected override void Dispose( bool disposing ) { + if( disposing ) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + // + // Step1 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(640, 480); + this.Name = "Step1"; + this.Text = "Step1"; + } + #endregion + + [STAThread] + public static void Main() { + using (Step1 frm = new Step1()) { + frm.Show(); + frm.InitializeGraphics(); + Application.Run(frm); //triggers OnPaint event, which is main loop + } + Application.Exit(); + } + + private void InitializeGraphics() { + try { + PresentParameters presentParams = new PresentParameters(); + presentParams.Windowed = true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.BackBufferFormat = Format.Unknown; + presentParams.AutoDepthStencilFormat = DepthFormat.D16; + presentParams.EnableAutoDepthStencil = true; + + // Store the default adapter + int adapterOrdinal = Manager.Adapters.Default.Adapter; + CreateFlags flags = CreateFlags.SoftwareVertexProcessing; + + // Check to see if we can use a pure hardware device + Caps caps = Manager.GetDeviceCaps(adapterOrdinal, DeviceType.Hardware); + + // Do we support hardware vertex processing? + if (caps.DeviceCaps.SupportsHardwareTransformAndLight) + // Replace the software vertex processing + flags = CreateFlags.HardwareVertexProcessing; + + // Do we support a pure device? + if (caps.DeviceCaps.SupportsPureDevice) + flags |= CreateFlags.PureDevice; + + device = new Device(0, DeviceType.Hardware, this, flags, presentParams); + device.DeviceReset += new System.EventHandler(this.OnResetDevice); + OnResetDevice(device, null); + + tileSheet = TextureLoader.FromFile(device, MediaUtilities.FindFile("donuts.bmp"), 1024, 1024, + 1, 0,Format.A8R8G8B8, Pool.Managed, Filter.Point, Filter.Point, (unchecked((int)0xff000000))); + //Uncomment these lines to see the spite border areas + // donutTexture = TextureLoader.FromFile(device, MediaUtilities.FindFile("donuts.bmp"), 1024, 1024, + // 1, 0,Format.A8R8G8B8, Pool.Managed, Filter.Point, Filter.Point, 0); + + tileSet = new TileSet(tileSheet, 0, 0, 6, 5, 32, 32); + tilePosition = new Rectangle(tileSet.XOrigin, tileSet.YOrigin,tileSet.ExtentX*2, tileSet.ExtentY*2); + + } + catch (DirectXException) { + // Catch any errors and return a failure + } + } + + + public void OnResetDevice(object sender, EventArgs e) { + Device device = (Device)sender; + } + + protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { + spritePosition = new Vector3(200f, 200f, 0f); + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + device.BeginScene(); + using (Sprite sprite = new Sprite(device)) { + sprite.Begin(SpriteFlags.AlphaBlend); + //render sprites here + sprite.End(); + } + device.EndScene(); + device.Present(); + this.Invalidate(); + } + } +} diff --git a/Source Code updated 08-12-05/SimpleSprite/Step1.resx b/Source Code updated 08-12-05/SimpleSprite/Step1.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/Step1.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/SimpleSprite/Step2.cs b/Source Code updated 08-12-05/SimpleSprite/Step2.cs new file mode 100644 index 0000000..e6a33b0 --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/Step2.cs @@ -0,0 +1,145 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.Data; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace SimpleSprite +{ + /// + /// Summary description for Step2. + /// + public class Step2 : System.Windows.Forms.Form + { + private TileSet tileSet; + private Texture tileSheet; + private Rectangle tilePosition; + private Vector3 spritePosition; + private Vector3 spriteCenter; + + private Device device; + + private System.ComponentModel.Container components = null; + public Step2() + { + InitializeComponent(); + + this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true); + this.Text = "Simple Sprite: Step 2"; + } + + protected override void Dispose( bool disposing ) + { + if( disposing ) + { + if (components != null) + { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + // + // Step2 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(640, 480); + this.Name = "Step2"; + this.Text = "Step2"; + } + #endregion + + [STAThread] + public static void Main() + { + using (Step2 frm = new Step2()) + { + frm.Show(); + frm.InitializeGraphics(); + Application.Run(frm); //triggers OnPaint event, which is main loop + } + Application.Exit(); + } + + private void InitializeGraphics() + { + try + { + PresentParameters presentParams = new PresentParameters(); + presentParams.Windowed = true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.BackBufferFormat = Format.Unknown; + presentParams.AutoDepthStencilFormat = DepthFormat.D16; + presentParams.EnableAutoDepthStencil = true; + + // Store the default adapter + int adapterOrdinal = Manager.Adapters.Default.Adapter; + CreateFlags flags = CreateFlags.SoftwareVertexProcessing; + + // Check to see if we can use a pure hardware device + Caps caps = Manager.GetDeviceCaps(adapterOrdinal, DeviceType.Hardware); + + // Do we support hardware vertex processing? + if (caps.DeviceCaps.SupportsHardwareTransformAndLight) + // Replace the software vertex processing + flags = CreateFlags.HardwareVertexProcessing; + + // Do we support a pure device? + if (caps.DeviceCaps.SupportsPureDevice) + flags |= CreateFlags.PureDevice; + + device = new Device(0, DeviceType.Hardware, this, flags, presentParams); + device.DeviceReset += new System.EventHandler(this.OnResetDevice); + OnResetDevice(device, null); + + tileSheet = TextureLoader.FromFile(device, MediaUtilities.FindFile("donuts.bmp"), 1024, 1024, + 1, 0,Format.A8R8G8B8, Pool.Managed, Filter.Point, Filter.Point, (unchecked((int)0xff000000))); + //Uncomment these lines to see the spite border areas + // donutTexture = TextureLoader.FromFile(device, MediaUtilities.FindFile("donuts.bmp"), 1024, 1024, + // 1, 0,Format.A8R8G8B8, Pool.Managed, Filter.Point, Filter.Point, 0); + + tileSet = new TileSet(tileSheet, 0, 0, 6, 5, 32, 32); + tilePosition = new Rectangle(tileSet.XOrigin, tileSet.YOrigin,tileSet.ExtentX*2, tileSet.ExtentY*2); + + } + catch (DirectXException) + { + // Catch any errors and return a failure + } + } + + + public void OnResetDevice(object sender, EventArgs e) + { + Device device = (Device)sender; + } + + protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) + { + spritePosition = new Vector3(200f, 200f, 0f); + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + device.BeginScene(); + using (Sprite sprite = new Sprite(device)) + { + sprite.Begin(SpriteFlags.AlphaBlend); + sprite.Draw(tileSet.Texture, tilePosition, spriteCenter, spritePosition, + Color.FromArgb(255,255,255,255)); + sprite.End(); + } + device.EndScene(); + device.Present(); + this.Invalidate(); + } + } +} diff --git a/Source Code updated 08-12-05/SimpleSprite/Step2.resx b/Source Code updated 08-12-05/SimpleSprite/Step2.resx new file mode 100644 index 0000000..8eb8b17 --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/Step2.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + Step2 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/SimpleSprite/Step3.cs b/Source Code updated 08-12-05/SimpleSprite/Step3.cs new file mode 100644 index 0000000..c0aa8ac --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/Step3.cs @@ -0,0 +1,159 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.Data; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace SimpleSprite { + /// + /// Summary description for Step3. + /// + public class Step3 : System.Windows.Forms.Form { + private const float frameRate = 1f/30f; //30 times a second + private TileSet tileSet; + private Texture tileSheet; + private Rectangle tilePosition; + + //Sprite state data + private Vector3 spritePosition; + private Vector3 spriteCenter; + private int frame; + private float frameTrigger; //accumulates elapsed time + + private HighResolutionTimer hrt = new HighResolutionTimer(); + private float deltaTime; + + + private Device device; + + private System.ComponentModel.Container components = null; + public Step3() { + InitializeComponent(); + + this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true); + this.Text = "Simple Sprite: Step 3"; + } + + protected override void Dispose( bool disposing ) { + if( disposing ) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + // + // Step3 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(640, 480); + this.Name = "Step3"; + this.Text = "Step3"; + } + #endregion + + [STAThread] + public static void Main() { + using (Step3 frm = new Step3()) { + frm.Show(); + frm.InitializeGraphics(); + Application.Run(frm); //triggers OnPaint event, which is main loop + } + Application.Exit(); + } + + private void InitializeGraphics() { + try { + PresentParameters presentParams = new PresentParameters(); + presentParams.Windowed = true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.BackBufferFormat = Format.Unknown; + presentParams.AutoDepthStencilFormat = DepthFormat.D16; + presentParams.EnableAutoDepthStencil = true; + + // Store the default adapter + int adapterOrdinal = Manager.Adapters.Default.Adapter; + CreateFlags flags = CreateFlags.SoftwareVertexProcessing; + + // Check to see if we can use a pure hardware device + Caps caps = Manager.GetDeviceCaps(adapterOrdinal, DeviceType.Hardware); + + // Do we support hardware vertex processing? + if (caps.DeviceCaps.SupportsHardwareTransformAndLight) + // Replace the software vertex processing + flags = CreateFlags.HardwareVertexProcessing; + + // Do we support a pure device? + if (caps.DeviceCaps.SupportsPureDevice) + flags |= CreateFlags.PureDevice; + + device = new Device(0, DeviceType.Hardware, this, flags, presentParams); + device.DeviceReset += new System.EventHandler(this.OnResetDevice); + OnResetDevice(device, null); + + tileSheet = TextureLoader.FromFile(device, MediaUtilities.FindFile("donuts.bmp"), 1024, 1024, + 1, 0,Format.A8R8G8B8, Pool.Managed, Filter.Point, Filter.Point, (unchecked((int)0xff000000))); + //Uncomment these lines to see the spite border areas + // donutTexture = TextureLoader.FromFile(device, MediaUtilities.FindFile("donuts.bmp"), 1024, 1024, + // 1, 0,Format.A8R8G8B8, Pool.Managed, Filter.Point, Filter.Point, 0); + + tileSet = new TileSet(tileSheet, 0, 0, 6, 5, 32, 32); + tilePosition = new Rectangle(tileSet.XOrigin, tileSet.YOrigin,tileSet.ExtentX*2, tileSet.ExtentY*2); + + hrt.Start(); + + } + catch (DirectXException) { + // Catch any errors and return a failure + } + } + + + public void OnResetDevice(object sender, EventArgs e) { + Device device = (Device)sender; + } + + protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { + deltaTime = hrt.ElapsedTime; + UpdateSprite(deltaTime); + spritePosition = new Vector3(200f, 200f, 0f); + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + device.BeginScene(); + using (Sprite sprite = new Sprite(device)) { + sprite.Begin(SpriteFlags.AlphaBlend); + sprite.Draw(tileSet.Texture, tilePosition, spriteCenter, spritePosition, + Color.FromArgb(255,255,255,255)); + sprite.End(); + } + device.EndScene(); + device.Present(); + this.Invalidate(); + } + + public virtual void UpdateSprite(float DeltaTime) { + frameTrigger += DeltaTime; + //Do we move to the next frame? + if (frameTrigger >= frameRate) { + frameTrigger = 0f; + frame++; + if (frame == tileSet.NumberFrameColumns * tileSet.NumberFrameRows) + frame = 0; //loop to beginning + } + //Now change the location of the image + tilePosition.X = tileSet.XOrigin + + ( (int)frame % tileSet.NumberFrameColumns ) * tileSet.ExtentX*2; + tilePosition.Y = tileSet.YOrigin + + ( (int)frame / tileSet.NumberFrameColumns) * tileSet.ExtentY*2; + } + } +} diff --git a/Source Code updated 08-12-05/SimpleSprite/Step3.resx b/Source Code updated 08-12-05/SimpleSprite/Step3.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/Step3.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/SimpleSprite/Step4.cs b/Source Code updated 08-12-05/SimpleSprite/Step4.cs new file mode 100644 index 0000000..228c88e --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/Step4.cs @@ -0,0 +1,194 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.Data; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + +namespace SimpleSprite { + /// + /// Summary description for Step4. + /// + public class Step4 : System.Windows.Forms.Form { + private const float frameRate = 1f/1f; //30 times a second + private TileSet tileSet; + private Texture tileSheet; + private Rectangle tilePosition; + + //Sprite state data + private Vector3 spritePosition = new Vector3(200f, 200f, 0f); + private Vector3 spriteCenter; + private Vector3 spriteVelocity = new Vector3(100.0f, 100.0f, 0.0f); + private float angle = 0.0f; //directional angle of the sprite + private int frame; + private float frameTrigger; //accumulates elapsed time + + private HighResolutionTimer hrt = new HighResolutionTimer(); + private float deltaTime; + + private int PrevXOffset = -1; + private int PrevYOffset = -1; + + private Device device; + + private System.ComponentModel.Container components = null; + public Step4() { + InitializeComponent(); + + this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true); + this.Text = "Simple Sprite: Step 4"; + } + + protected override void Dispose( bool disposing ) { + if( disposing ) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + // + // Step4 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(640, 480); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "Step4"; + this.Text = "Step4"; + + } + #endregion + + [STAThread] + public static void Main() { + using (Step4 frm = new Step4()) { + frm.Show(); + frm.InitializeGraphics(); + Application.Run(frm); //triggers OnPaint event, which is main loop + } + Application.Exit(); + } + + private void InitializeGraphics() { + try { + PresentParameters presentParams = new PresentParameters(); + presentParams.Windowed = true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.BackBufferFormat = Format.Unknown; + presentParams.AutoDepthStencilFormat = DepthFormat.D16; + presentParams.EnableAutoDepthStencil = true; + + // Store the default adapter + int adapterOrdinal = Manager.Adapters.Default.Adapter; + CreateFlags flags = CreateFlags.SoftwareVertexProcessing; + + // Check to see if we can use a pure hardware device + Caps caps = Manager.GetDeviceCaps(adapterOrdinal, DeviceType.Hardware); + + // Do we support hardware vertex processing? + if (caps.DeviceCaps.SupportsHardwareTransformAndLight) + // Replace the software vertex processing + flags = CreateFlags.HardwareVertexProcessing; + + // Do we support a pure device? + if (caps.DeviceCaps.SupportsPureDevice) + flags |= CreateFlags.PureDevice; + + device = new Device(0, DeviceType.Hardware, this, flags, presentParams); + device.DeviceReset += new System.EventHandler(this.OnResetDevice); + OnResetDevice(device, null); + + tileSheet = TextureLoader.FromFile(device, MediaUtilities.FindFile("donuts.bmp"), 1024, 1024, + 1, 0,Format.A8R8G8B8, Pool.Managed, Filter.Point, Filter.Point, (unchecked((int)0xff000000))); + //Uncomment these lines to see the spite border areas + // donutTexture = TextureLoader.FromFile(device, MediaUtilities.FindFile("donuts.bmp"), 1024, 1024, + // 1, 0,Format.A8R8G8B8, Pool.Managed, Filter.Point, Filter.Point, 0); + + tileSet = new TileSet(tileSheet, 0, 0, 6, 5, 32, 32); + tilePosition = new Rectangle(tileSet.XOrigin, tileSet.YOrigin,tileSet.ExtentX*2, tileSet.ExtentY*2); + + hrt.Start(); + + } + catch (DirectXException) { + // Catch any errors and return a failure + } + } + + + public void OnResetDevice(object sender, EventArgs e) { + Device device = (Device)sender; + } + + protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { + deltaTime = hrt.ElapsedTime; + UpdateSprite(deltaTime); + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + device.BeginScene(); + using (Sprite sprite = new Sprite(device)) { + sprite.Begin(SpriteFlags.None); + //Set rotation center for sprite + spriteCenter.X = spritePosition.X + tileSet.ExtentX; + spriteCenter.Y = spritePosition.Y + tileSet.ExtentY; + + //Spin, Shift, Stretch :-) + sprite.Transform = Matrix.RotationZ(angle) * Matrix.Translation(spriteCenter); + sprite.Draw(tileSet.Texture, tilePosition, spriteCenter, spritePosition, + Color.FromArgb(255,255,255,255)); + sprite.End(); + } + device.EndScene(); + device.Present(); + this.Invalidate(); + } + + public virtual void UpdateSprite(float DeltaTime) { + frameTrigger += DeltaTime; + //Do we move to the next frame? + if (frameTrigger >= frameRate) { + frameTrigger = 0f; + frame++; + if (frame == tileSet.NumberFrameColumns * tileSet.NumberFrameRows) + frame = 0; //loop to beginning + } + //Now change the location of the image + int Xoffset = ((int)frame % tileSet.NumberFrameColumns ) * tileSet.ExtentX*2; + int Yoffset = ((int)frame / tileSet.NumberFrameColumns) * tileSet.ExtentY*2; + + tilePosition.X = tileSet.XOrigin + Xoffset; + tilePosition.Y = tileSet.YOrigin + Yoffset; + + if ((PrevXOffset != Xoffset) || (PrevYOffset != Yoffset)) { + Console.Write("Tileposition.X (" + tilePosition.X + ") = " + tileSet.XOrigin + " + " + Xoffset); + Console.WriteLine(", Tileposition.Y (" + tilePosition.Y + ") = " + tileSet.YOrigin + " + " + Yoffset); + } + + PrevXOffset = Xoffset; + PrevYOffset = Yoffset; + + //update sprite position + spritePosition.X += spriteVelocity.X * DeltaTime; + spritePosition.Y += spriteVelocity.Y * DeltaTime; + + angle += DeltaTime; + + //bounce sprite if it tries to go outside window + if (spritePosition.X > (this.Width-(tileSet.ExtentX*2)) || spritePosition.X < 0) { + spriteVelocity.X *= -1; + } + if (spritePosition.Y > (this.Height-(tileSet.ExtentY*2)) || spritePosition.Y < 0) { + spriteVelocity.Y *= -1; + } + + } + } +} diff --git a/Source Code updated 08-12-05/SimpleSprite/Step4.resx b/Source Code updated 08-12-05/SimpleSprite/Step4.resx new file mode 100644 index 0000000..e6e33b2 --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/Step4.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + Step4 + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/SimpleSprite/Step5.cs b/Source Code updated 08-12-05/SimpleSprite/Step5.cs new file mode 100644 index 0000000..f6d5d02 --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/Step5.cs @@ -0,0 +1,213 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.Data; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; +using Microsoft.DirectX.Direct3D; +using DI = Microsoft.DirectX.DirectInput; +using D3D = Microsoft.DirectX.Direct3D; + +namespace SimpleSprite { + /// + /// Summary description for Step5. + /// + public class Step5 : System.Windows.Forms.Form { + private const float frameRate = 1f/30f; //30 times a second + private const float spinRate = 0.1f; + private TileSet tileSet; + private Texture tileSheet; + private Rectangle tilePosition; + + //Sprite state data + private Vector3 spritePosition = new Vector3(200f, 200f, 0f); + private Vector3 spriteCenter; + private Vector3 spriteVelocity = new Vector3(100.0f, 100.0f, 0.0f); + private float angle = 0.0f; //directional angle of the sprite + private int frame; + private float frameTrigger; //accumulates elapsed time + + private HighResolutionTimer hrt = new HighResolutionTimer(); + private float deltaTime; + + + private D3D.Device device; + private DI.Device kbd; + + private System.ComponentModel.Container components = null; + public Step5() { + InitializeComponent(); + + this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true); + this.Text = "Simple Sprite: Step 5"; + } + + protected override void Dispose( bool disposing ) { + if( disposing ) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + // + // Step5 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(640, 480); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "Step5"; + this.Text = "Step5"; + + } + #endregion + + [STAThread] + public static void Main() { + using (Step5 frm = new Step5()) { + frm.Show(); + frm.InitializeGraphics(); + Application.Run(frm); //triggers OnPaint event, which is main loop + } + Application.Exit(); + } + + private void InitializeGraphics() { + try { + PresentParameters presentParams = new PresentParameters(); + presentParams.Windowed = true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.BackBufferFormat = Format.Unknown; + presentParams.AutoDepthStencilFormat = DepthFormat.D16; + presentParams.EnableAutoDepthStencil = true; + + // Store the default adapter + int adapterOrdinal = D3D.Manager.Adapters.Default.Adapter; + CreateFlags flags = CreateFlags.SoftwareVertexProcessing; + + // Check to see if we can use a pure hardware device + Caps caps = D3D.Manager.GetDeviceCaps(adapterOrdinal, D3D.DeviceType.Hardware); + + // Do we support hardware vertex processing? + if (caps.DeviceCaps.SupportsHardwareTransformAndLight) + // Replace the software vertex processing + flags = CreateFlags.HardwareVertexProcessing; + + // Do we support a pure device? + if (caps.DeviceCaps.SupportsPureDevice) + flags |= CreateFlags.PureDevice; + + device = new D3D.Device(0, D3D.DeviceType.Hardware, this, flags, presentParams); + device.DeviceReset += new System.EventHandler(this.OnResetDevice); + OnResetDevice(device, null); + + tileSheet = TextureLoader.FromFile(device, MediaUtilities.FindFile("donuts.bmp"), 1024, 1024, + 1, 0,Format.A8R8G8B8, Pool.Managed, Filter.Point, Filter.Point, (unchecked((int)0xff000000))); + //Uncomment these lines to see the spite border areas + // donutTexture = TextureLoader.FromFile(device, MediaUtilities.FindFile("donuts.bmp"), 1024, 1024, + // 1, 0,Format.A8R8G8B8, Pool.Managed, Filter.Point, Filter.Point, 0); + + tileSet = new TileSet(tileSheet, 0, 0, 6, 5, 32, 32); + tilePosition = new Rectangle(tileSet.XOrigin, tileSet.YOrigin,tileSet.ExtentX*2, tileSet.ExtentY*2); + + //set up DirectInput keyboard device... + kbd = new DI.Device(SystemGuid.Keyboard); + kbd.SetCooperativeLevel(this, + DI.CooperativeLevelFlags.Background | DI.CooperativeLevelFlags.NonExclusive ); + kbd.Acquire(); + + hrt.Start(); + + } + catch (DirectXException) { + // Catch any errors and return a failure + } + } + + + public void OnResetDevice(object sender, EventArgs e) { + D3D.Device device = (D3D.Device)sender; + } + + protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { + deltaTime = hrt.ElapsedTime; + ProcessInputState(); + UpdateSprite(deltaTime); + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + device.BeginScene(); + using (Sprite sprite = new Sprite(device)) { + sprite.Begin(SpriteFlags.None); + //Set rotation center for sprite + spriteCenter.X = spritePosition.X + tileSet.ExtentX; + spriteCenter.Y = spritePosition.Y + tileSet.ExtentY; + + //Spin, Shift, Stretch :-) + sprite.Transform = Matrix.RotationZ(angle) * Matrix.Translation(spriteCenter); + sprite.Draw(tileSet.Texture, tilePosition, spriteCenter, spritePosition, + Color.FromArgb(255,255,255,255)); + sprite.End(); + } + device.EndScene(); + device.Present(); + this.Invalidate(); + } + + public virtual void UpdateSprite(float DeltaTime) { + frameTrigger += DeltaTime; + //Do we move to the next frame? + if (frameTrigger >= frameRate) { + frameTrigger = 0f; + frame++; + if (frame == tileSet.NumberFrameColumns * tileSet.NumberFrameRows) + frame = 0; //loop to beginning + } + //Now change the location of the image + tilePosition.X = tileSet.XOrigin + + ( (int)frame % tileSet.NumberFrameColumns ) * tileSet.ExtentX*2; + tilePosition.Y = tileSet.YOrigin + + ( (int)frame / tileSet.NumberFrameColumns) * tileSet.ExtentY*2; + + //update sprite position + spritePosition.X += spriteVelocity.X * DeltaTime; + spritePosition.Y += spriteVelocity.Y * DeltaTime; + + //angle += DeltaTime; + + //bounce sprite if it tries to go outside window + if (spritePosition.X > (this.Width-(tileSet.ExtentX*2)) || spritePosition.X < 0) { + spriteVelocity.X *= -1; + } + if (spritePosition.Y > (this.Height-(tileSet.ExtentY*2)) || spritePosition.Y < 0) { + spriteVelocity.Y *= -1; + } + } + + protected void ProcessInputState() { + foreach (Key k in kbd.GetPressedKeys()) { + if (k == Key.Left) { + //Turn counterclockwise + angle -= spinRate; + } + if (k == Key.Right) { + //turn clockwise + angle += spinRate; + } + if (k == Key.Escape) { + kbd.Unacquire(); //release the keyboard device + kbd.Dispose(); + Application.Exit(); + } + } + } + + } +} diff --git a/Source Code updated 08-12-05/SimpleSprite/Step5.resx b/Source Code updated 08-12-05/SimpleSprite/Step5.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/Step5.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/SimpleSprite/Step6.cs b/Source Code updated 08-12-05/SimpleSprite/Step6.cs new file mode 100644 index 0000000..e55b0c7 --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/Step6.cs @@ -0,0 +1,217 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.Data; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; +using Microsoft.DirectX.Direct3D; +using Microsoft.DirectX.DirectSound; +using DI = Microsoft.DirectX.DirectInput; +using D3D = Microsoft.DirectX.Direct3D; +using DS = Microsoft.DirectX.DirectSound; + +namespace SimpleSprite { + /// + /// Summary description for Step6. + /// + public class Step6 : System.Windows.Forms.Form { + private const float frameRate = 1f/30f; //30 times a second + private const float spinRate = 0.1f; + private TileSet tileSet; + private Texture tileSheet; + private Rectangle tilePosition; + + //Sprite state data + private Vector3 spritePosition = new Vector3(200f, 200f, 0f); + private Vector3 spriteCenter; + private Vector3 spriteVelocity = new Vector3(100.0f, 100.0f, 0.0f); + private float angle = 0.0f; //directional angle of the sprite + private int frame; + private float frameTrigger; //accumulates elapsed time + + private HighResolutionTimer hrt = new HighResolutionTimer(); + private float deltaTime; + + + private D3D.Device device; + private DI.Device kbd; + private DS.Device snd; + private DS.SecondaryBuffer bounce; + + private System.ComponentModel.Container components = null; + public Step6() { + InitializeComponent(); + + this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true); + this.Text = "Simple Sprite: Step 6"; + } + + protected override void Dispose( bool disposing ) { + if( disposing ) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + // + // Step6 + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(640, 480); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "Step6"; + this.Text = "Step6"; + + } + #endregion + + [STAThread] + public static void Main() { + using (Step6 frm = new Step6()) { + frm.Show(); + frm.InitializeGraphics(); + Application.Run(frm); //triggers OnPaint event, which is main loop + } + Application.Exit(); + } + + private void InitializeGraphics() { + try { + PresentParameters presentParams = new PresentParameters(); + presentParams.Windowed = true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.BackBufferFormat = Format.Unknown; + presentParams.AutoDepthStencilFormat = DepthFormat.D16; + presentParams.EnableAutoDepthStencil = true; + + // Store the default adapter + int adapterOrdinal = D3D.Manager.Adapters.Default.Adapter; + CreateFlags flags = CreateFlags.SoftwareVertexProcessing; + + // Check to see if we can use a pure hardware device + D3D.Caps caps = D3D.Manager.GetDeviceCaps(adapterOrdinal, D3D.DeviceType.Hardware); + + // Do we support hardware vertex processing? + if (caps.DeviceCaps.SupportsHardwareTransformAndLight) + // Replace the software vertex processing + flags = CreateFlags.HardwareVertexProcessing; + + // Do we support a pure device? + if (caps.DeviceCaps.SupportsPureDevice) + flags |= CreateFlags.PureDevice; + + device = new D3D.Device(0, D3D.DeviceType.Hardware, this, flags, presentParams); + device.DeviceReset += new System.EventHandler(this.OnResetDevice); + OnResetDevice(device, null); + + tileSheet = TextureLoader.FromFile(device, MediaUtilities.FindFile("donuts.bmp"), 1024, 1024, + 1, 0,Format.A8R8G8B8, Pool.Managed, Filter.Point, Filter.Point, (unchecked((int)0xff000000))); + + tileSet = new TileSet(tileSheet, 0, 0, 6, 5, 32, 32); + tilePosition = new Rectangle(tileSet.XOrigin, tileSet.YOrigin,tileSet.ExtentX*2, tileSet.ExtentY*2); + + //set up DirectInput keyboard device... + kbd = new DI.Device(SystemGuid.Keyboard); + kbd.SetCooperativeLevel(this, + DI.CooperativeLevelFlags.Background | DI.CooperativeLevelFlags.NonExclusive ); + kbd.Acquire(); + + //Set up DirectSound device and buffers + snd = new DS.Device(); + snd.SetCooperativeLevel(this, DS.CooperativeLevel.Normal); + bounce = new DS.SecondaryBuffer(MediaUtilities.FindFile("bounce.wav"), snd); + + hrt.Start(); + } + catch (DirectXException) { + // Catch any errors and return a failure + } + } + + + public void OnResetDevice(object sender, EventArgs e) { + D3D.Device device = (D3D.Device)sender; + } + + protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { + deltaTime = hrt.ElapsedTime; + ProcessInputState(); + UpdateSprite(deltaTime); + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + device.BeginScene(); + using (Sprite sprite = new Sprite(device)) { + sprite.Begin(SpriteFlags.None); + //Set rotation center for sprite + spriteCenter.X = spritePosition.X + tileSet.ExtentX; + spriteCenter.Y = spritePosition.Y + tileSet.ExtentY; + + //Spin, Shift, Stretch :-) + sprite.Transform = Matrix.RotationZ(angle) * Matrix.Translation(spriteCenter); + sprite.Draw(tileSet.Texture, tilePosition, spriteCenter, spritePosition, + Color.FromArgb(255,255,255,255)); + sprite.End(); + } + device.EndScene(); + device.Present(); + this.Invalidate(); + } + + public virtual void UpdateSprite(float DeltaTime) { + frameTrigger += DeltaTime; + //Do we move to the next frame? + if (frameTrigger >= frameRate) { + frameTrigger = 0f; + frame++; + if (frame == tileSet.NumberFrameColumns * tileSet.NumberFrameRows) + frame = 0; //loop to beginning + } + //Now change the location of the image + tilePosition.X = tileSet.XOrigin + + ( (int)frame % tileSet.NumberFrameColumns ) * tileSet.ExtentX*2; + tilePosition.Y = tileSet.YOrigin + + ( (int)frame / tileSet.NumberFrameColumns) * tileSet.ExtentY*2; + + //update sprite position + spritePosition.X += spriteVelocity.X * DeltaTime; + spritePosition.Y += spriteVelocity.Y * DeltaTime; + + //bounce sprite if it tries to go outside window + if (spritePosition.X > (this.Width-(tileSet.ExtentX*2)) || spritePosition.X < 0) { + spriteVelocity.X *= -1; + bounce.Play(0, DS.BufferPlayFlags.Default); + } + if (spritePosition.Y > (this.Height-(tileSet.ExtentY*2)) || spritePosition.Y < 0) { + spriteVelocity.Y *= -1; + bounce.Play(0, DS.BufferPlayFlags.Default); + } + } + + protected void ProcessInputState() { + foreach (Key k in kbd.GetPressedKeys()) { + if (k == Key.Left) { + //Turn counterclockwise + angle -= spinRate; + } + if (k == Key.Right) { + //turn clockwise + angle += spinRate; + } + if (k == Key.Escape) { + kbd.Unacquire(); //release the keyboard device + kbd.Dispose(); + Application.Exit(); + } + } + } + } +} diff --git a/Source Code updated 08-12-05/SimpleSprite/Step6.resx b/Source Code updated 08-12-05/SimpleSprite/Step6.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/Step6.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/SimpleSprite/TileSet.cs b/Source Code updated 08-12-05/SimpleSprite/TileSet.cs new file mode 100644 index 0000000..c550688 --- /dev/null +++ b/Source Code updated 08-12-05/SimpleSprite/TileSet.cs @@ -0,0 +1,86 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + /// + /// Summary description for TileSet. + /// + +namespace SimpleSprite +{ + public class TileSet + { + private Texture texture; + + public Texture Texture + { + get + { + return texture; + } + } + private int xOrigin; + + public int XOrigin + { + get + { + return xOrigin; + } + } + private int yOrigin; + + public int YOrigin + { + get + { + return yOrigin; + } + } + private int numberFrameRows; + + public int NumberFrameRows + { + get + { + return numberFrameRows; + } + } + private int numberFrameColumns; + + public int NumberFrameColumns + { + get + { + return numberFrameColumns; + } + } + private int extentX; + public int ExtentX + { + get + { + return extentX; + } + } + + private int extentY; + public int ExtentY + { + get + { + return extentY; + } + } + + public TileSet(Texture tex, int StartX, int StartY, int RowCount, int ColumnCount, int ExtentX, int ExtentY) + { + xOrigin = StartX; + yOrigin = StartY; + extentX = ExtentX; + extentY = ExtentY; + numberFrameRows = RowCount; + numberFrameColumns = ColumnCount; + texture = tex; + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/SimpleSprite/bounce.wav b/Source Code updated 08-12-05/SimpleSprite/bounce.wav new file mode 100644 index 0000000..33bd786 Binary files /dev/null and b/Source Code updated 08-12-05/SimpleSprite/bounce.wav differ diff --git a/Source Code updated 08-12-05/SimpleSprite/donuts.bmp b/Source Code updated 08-12-05/SimpleSprite/donuts.bmp new file mode 100644 index 0000000..fab9987 Binary files /dev/null and b/Source Code updated 08-12-05/SimpleSprite/donuts.bmp differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/App.config b/Source Code updated 08-12-05/SpaceDonuts/App.config new file mode 100644 index 0000000..4452b4d --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Source Code updated 08-12-05/SpaceDonuts/BasicSprite.cs b/Source Code updated 08-12-05/SpaceDonuts/BasicSprite.cs new file mode 100644 index 0000000..acc8be3 --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/BasicSprite.cs @@ -0,0 +1,288 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using D3D = Microsoft.DirectX.Direct3D; +using System.Drawing; + +namespace SpaceDonuts { + + public class BasicSprite { + protected TileSet tiles; //reference to the sprite's tile set + protected float zAngle = 0.0f; //in angles, not radians + protected float visualAngle = 0f; //used to rotate sprite visually (in radians) + protected bool visuallyRotates = false; //indicates if the sprite rotates along the visualAngle + protected int currentFrame=0; //Current frame of the sprite's animation + protected float scale = 1.0f; //used to scale the sprite + protected Rectangle tilePosition; + protected Vector3 center = new Vector3( 0f, 0f, 0f ); + protected Vector3 position = new Vector3( 0f, 0f, 0f ); + protected int collisionxExtent; + protected int collisionyExtent; + protected bool canCollide = false; + protected float frameRate = 1.0f/30.0f; //30 times per second + protected float frameTrigger = 0.0f; //time until next frame is shown + protected float animationSpeed = 0.0f; //how fast to show the frames + protected int totalFrames; + protected Vector2 velocity = new Vector2(0f, 0f); + protected bool isVisible = true; + protected float delay = 0f; //sets sprite startup delay + protected float duration = 0f; //sets sprite lifespan (in seconds) + protected bool limitedDuration = false; //indicates that sprite has a limited lifespan + protected bool durationEnded= false; //indicates that the life of the sprite is over + + public bool DurationOver { + get { + return durationEnded; + } + set { + durationEnded = value; + } + } + + public bool VisuallyRotates { + get { + return visuallyRotates; + } + set { + visuallyRotates = value; + } + } + + public bool Visible { + get { + return isVisible; + } + set { + isVisible = value; + } + } + public float StartDelay { + get { + return delay; + } + set { + delay = value; + isVisible = false; + } + } + + public int Frame { + get { + return currentFrame; + } + set { + currentFrame = value; + } + } + + public float Scale { + get { + return scale; + } + set { + scale = value; + } + } + + public TileSet Tiles { + get { + return tiles; + } + set { + tiles = value; + } + } + + public float Angle { + get { + return Geometry.RadianToDegree(zAngle); + } + set { + zAngle = Geometry.DegreeToRadian(value); + } + } + + public int CollisionxExtent { + get { + return collisionxExtent; + } + set { + collisionxExtent = value; + } + } + public int CollisionyExtent { + get { + return collisionyExtent; + } + set { + collisionyExtent = value; + } + } + + public bool CanCollide { + get { + return canCollide; + } + set { + canCollide = value; + } + } + + public float FrameRate { + get { + return frameRate; + } + set { + frameRate = value; + } + } + public float AnimationSpeed { + get { + return animationSpeed; + } + set { + animationSpeed = value; + } + } + + public float Velocity { + get { + return velocity.Length(); + } + set { + velocity.X = (float)Math.Cos(zAngle) * value; + velocity.Y = (float)Math.Sin(zAngle) * value; + } + } + + public float VelocityX { + get { + return velocity.X; + } + set { + velocity.X = value; + } + } + + public float VelocityY { + get { + return velocity.Y; + } + set { + velocity.Y = value; + } + } + + public float PositionX { + get { + return position.X; + } + set { + position.X = value; + } + } + public float PositionY { + get { + return position.Y; + } + set { + position.Y = value; + } + } + + public BasicSprite() {} + + public BasicSprite(TileSet ts) { + if (ts != null) { + collisionxExtent = ts.ExtentX; + collisionyExtent = ts.ExtentY; + tilePosition = new Rectangle(ts.XOrigin,ts.YOrigin,ts.ExtentX*2,ts.ExtentY*2); + tiles = ts; + animationSpeed = 1.0f; + totalFrames = ts.NumberFrameColumns * ts.NumberFrameRows; + } + else + throw new Exception("Cannot create sprite without valid tile set"); + } + + public void LimitLifespan(float Duration) { + duration = Duration; + limitedDuration = true; + } + + public virtual void NextFrame() { + currentFrame = ++currentFrame % totalFrames; + } + + public virtual void PrevFrame() { + if (currentFrame == 0) + currentFrame = totalFrames-1; + else + currentFrame = --currentFrame % totalFrames; + } + + public virtual void Draw(Sprite d3dSprite) { + if (isVisible) { + + //Set rotation center for sprite + center.X = position.X + tiles.ExtentX; + center.Y = position.Y + tiles.ExtentY; + + //Spin, Shift, Stretch :-) + d3dSprite.Transform = Matrix.RotationZ(visualAngle) * Matrix.Translation(center) * Matrix.Scaling(scale,scale,1.0f); + + d3dSprite.Draw(tiles.Texture, tilePosition, + center, position, Color.FromArgb(255,255,255,255)); + } + } + + public virtual void Update(float DeltaTime) { + //Handle any delay times that are set + if (delay > 0f) { + delay -= DeltaTime; + if (delay <= 0f) { + delay = 0f; + isVisible = true; + } + } + else { + if (limitedDuration) { + duration -= DeltaTime; + if (duration <= 0f) { + durationEnded = true; + return; + } + } + + frameTrigger += DeltaTime * animationSpeed; + //Do we move to the next frame? + if (frameTrigger >= frameRate) { + NextFrame(); + frameTrigger = 0f; + } + + tilePosition.X = tiles.XOrigin + ( (int)currentFrame % tiles.NumberFrameColumns ) * tiles.ExtentX*2; + tilePosition.Y = tiles.YOrigin + ( (int)currentFrame / tiles.NumberFrameColumns) * tiles.ExtentY*2; + + //Now apply motion + position.X += velocity.X * DeltaTime; + position.Y += velocity.Y * DeltaTime; + } + } + + public virtual void BoundaryCheck(Rectangle boundingBox) { + // Angle of reflection = angle of incidence, measured from the + // surface normal. So for perpendicular surfaces, all we have to do + // is negate the current angle. + int height = boundingBox.Height - this.Tiles.ExtentY*2; + int width = boundingBox.Width - this.Tiles.ExtentX*2; + if (this.PositionX > (width) || this.PositionX < 0) { + this.VelocityX *= -1; + } + if (this.PositionY > (height) || this.PositionY < 0) { + this.VelocityY *= -1; + } + } + + } +} diff --git a/Source Code updated 08-12-05/SpaceDonuts/BulletSprite.cs b/Source Code updated 08-12-05/SpaceDonuts/BulletSprite.cs new file mode 100644 index 0000000..98d407f --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/BulletSprite.cs @@ -0,0 +1,37 @@ +using System; +using System.Drawing; +using Microsoft.DirectX.Direct3D; +namespace SpaceDonuts { + public class BulletSprite : BasicSprite { + + public BulletSprite(TileSet ts) : base(ts) { + this.VisuallyRotates = true; + } + + public new float Angle { + get { + return Geometry.RadianToDegree(zAngle); + } + set { + zAngle = Geometry.DegreeToRadian(value); + visualAngle = zAngle; + } + } + + public override void BoundaryCheck(Rectangle boundingBox) { + // Angle of reflection = angle of incidence, measured from the + // surface normal. So for perpendicular surfaces, all we have to do + // is negate the current angle. + int height = boundingBox.Height - this.Tiles.ExtentY*2; + int width = boundingBox.Width - this.Tiles.ExtentX*2; + if (this.PositionX > (width) || this.PositionX < 0) { + this.Angle = -this.Angle; + this.VelocityX *= -1; + } + if (this.PositionY > (height) || this.PositionY < 0) { + this.Angle = -this.Angle; + this.VelocityY *= -1; + } + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/SpaceDonuts/CubeSprite.cs b/Source Code updated 08-12-05/SpaceDonuts/CubeSprite.cs new file mode 100644 index 0000000..d27e8e4 --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/CubeSprite.cs @@ -0,0 +1,8 @@ +namespace SpaceDonuts { + /// + /// Summary description for CubeSprite. + /// + public class CubeSprite : BasicSprite { + public CubeSprite(TileSet ts) : base(ts) {} + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/SpaceDonuts/DonutSprite.cs b/Source Code updated 08-12-05/SpaceDonuts/DonutSprite.cs new file mode 100644 index 0000000..1db176d --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/DonutSprite.cs @@ -0,0 +1,8 @@ +namespace SpaceDonuts { + /// + /// Summary description for DonutSprite. + /// + public class DonutSprite : BasicSprite { + public DonutSprite(TileSet ts) : base(ts) {} + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/SpaceDonuts/HighResolutionTimer.cs b/Source Code updated 08-12-05/SpaceDonuts/HighResolutionTimer.cs new file mode 100644 index 0000000..ec12305 --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/HighResolutionTimer.cs @@ -0,0 +1,111 @@ +using System; +using System.Runtime.InteropServices; + +namespace SpaceDonuts { + /// + /// Summary description for HighResolutionTimer. + /// + public class HighResolutionTimer { + [System.Security.SuppressUnmanagedCodeSecurity] + [DllImport("kernel32")] + private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); + + [System.Security.SuppressUnmanagedCodeSecurity] + [DllImport("kernel32")] + private static extern bool QueryPerformanceCounter(ref long PerformanceCount); + + private bool timerInitialized = false; + private bool usingQPF = false; + private bool timerStopped = true; + private long ticksPerSecond = 0; + private long stopTime = 0; + private long lastElapsedTime = 0; + private long baseTime = 0; // Set when timer is started or reset + private long timeNow = 0; + private double elapsedTime = 0.0; + + public HighResolutionTimer() { + timerInitialized = true; + + usingQPF = QueryPerformanceFrequency(ref ticksPerSecond); + if (usingQPF) + ticksPerSecond = ticksPerSecond; + else + throw new Exception("Timer init failure -- no QueryPerformanceCounter"); + } + + + public void Reset() { + QueryPerformanceCounter(ref timeNow); + baseTime = timeNow; + lastElapsedTime = timeNow; + stopTime = 0; + timerStopped = false; + } + + public void Start() { + if (stopTime != 0) + timeNow = stopTime; + else + QueryPerformanceCounter(ref timeNow); + + if (timerStopped) + baseTime += timeNow - stopTime; + stopTime = 0; + lastElapsedTime = timeNow; + timerStopped = false; + } + + public void Stop() { + QueryPerformanceCounter(ref timeNow); + stopTime = timeNow; + lastElapsedTime = timeNow; + timerStopped = true; + } + + public long Frequency{ + get { return ticksPerSecond; } + } + + public void Advance() { + stopTime += ticksPerSecond/10; + } + + public float AbsoluteTime { + get { + if (stopTime != 0) + timeNow = stopTime; + else + QueryPerformanceCounter(ref timeNow); + return (float) (timeNow / (double) ticksPerSecond); + } + } + + public float ApplicationTime { + get { + return TimeDelta(baseTime); + } + } + + public float ElapsedTime { + get { + return TimeDelta(lastElapsedTime); + } + } + + private float TimeDelta(float refTime) { + QueryPerformanceCounter(ref timeNow); + elapsedTime = (double) (timeNow - refTime) / (double) ticksPerSecond; + lastElapsedTime = timeNow; + return (float)elapsedTime; + } + + public float PeekTime { + get { + long peek = 0; + QueryPerformanceCounter(ref peek); + return (float) (peek - lastElapsedTime) / (float) ticksPerSecond; + } + } + } +} diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/bangbang.wav.2004-07-04.17-21-28.2812 b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/bangbang.wav.2004-07-04.17-21-28.2812 new file mode 100644 index 0000000..84cf9e1 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/bangbang.wav.2004-07-04.17-21-28.2812 differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/bounce.wav.2004-07-04.17-21-28.1250 b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/bounce.wav.2004-07-04.17-21-28.1250 new file mode 100644 index 0000000..33bd786 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/bounce.wav.2004-07-04.17-21-28.1250 differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/c_bang.wav.2004-07-04.17-21-28.1093 b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/c_bang.wav.2004-07-04.17-21-28.1093 new file mode 100644 index 0000000..4dc29b9 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/c_bang.wav.2004-07-04.17-21-28.1093 differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/d_bang.wav.2004-07-04.17-21-27.9062 b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/d_bang.wav.2004-07-04.17-21-27.9062 new file mode 100644 index 0000000..f6c6658 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/d_bang.wav.2004-07-04.17-21-27.9062 differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/donuts.bmp.2004-07-04.17-21-28.1875 b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/donuts.bmp.2004-07-04.17-21-28.1875 new file mode 100644 index 0000000..fab9987 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/donuts.bmp.2004-07-04.17-21-28.1875 differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/gunfire.wav.2004-07-04.17-21-28.0781 b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/gunfire.wav.2004-07-04.17-21-28.0781 new file mode 100644 index 0000000..44b37b1 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/gunfire.wav.2004-07-04.17-21-28.0781 differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/hum.wav.2004-07-04.17-21-28.0468 b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/hum.wav.2004-07-04.17-21-28.0468 new file mode 100644 index 0000000..dae8d35 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/hum.wav.2004-07-04.17-21-28.0468 differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/level.wav.2004-07-04.17-21-28.0312 b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/level.wav.2004-07-04.17-21-28.0312 new file mode 100644 index 0000000..f2b171c Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/level.wav.2004-07-04.17-21-28.0312 differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/p_bang.wav.2004-07-04.17-21-27.9375 b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/p_bang.wav.2004-07-04.17-21-27.9375 new file mode 100644 index 0000000..46fbc71 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/p_bang.wav.2004-07-04.17-21-27.9375 differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/rev.wav.2004-07-04.17-21-28.0625 b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/rev.wav.2004-07-04.17-21-28.0625 new file mode 100644 index 0000000..6b81b2a Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/rev.wav.2004-07-04.17-21-28.0625 differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/s_bang.wav.2004-07-04.17-21-27.9843 b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/s_bang.wav.2004-07-04.17-21-27.9843 new file mode 100644 index 0000000..ed1efb1 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/s_bang.wav.2004-07-04.17-21-27.9843 differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/shield.wav.2004-07-04.17-21-27.8750 b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/shield.wav.2004-07-04.17-21-27.8750 new file mode 100644 index 0000000..25eb74f Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/shield.wav.2004-07-04.17-21-27.8750 differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/shipappear.wav.2003-12-29.00-26-38.7812 b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/shipappear.wav.2003-12-29.00-26-38.7812 new file mode 100644 index 0000000..a956ff0 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/shipappear.wav.2003-12-29.00-26-38.7812 differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/shipappear.wav.2004-07-04.17-21-28.2500 b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/shipappear.wav.2004-07-04.17-21-28.2500 new file mode 100644 index 0000000..a956ff0 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/shipappear.wav.2004-07-04.17-21-28.2500 differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/skid.wav.2004-07-04.17-21-27.9687 b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/skid.wav.2004-07-04.17-21-27.9687 new file mode 100644 index 0000000..de0ea3d Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/_sgbak/skid.wav.2004-07-04.17-21-27.9687 differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/bangbang.wav b/Source Code updated 08-12-05/SpaceDonuts/Media/bangbang.wav new file mode 100644 index 0000000..84cf9e1 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/bangbang.wav differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/bounce.wav b/Source Code updated 08-12-05/SpaceDonuts/Media/bounce.wav new file mode 100644 index 0000000..33bd786 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/bounce.wav differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/c_bang.wav b/Source Code updated 08-12-05/SpaceDonuts/Media/c_bang.wav new file mode 100644 index 0000000..4dc29b9 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/c_bang.wav differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/d_bang.wav b/Source Code updated 08-12-05/SpaceDonuts/Media/d_bang.wav new file mode 100644 index 0000000..f6c6658 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/d_bang.wav differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/donuts.bmp b/Source Code updated 08-12-05/SpaceDonuts/Media/donuts.bmp new file mode 100644 index 0000000..fab9987 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/donuts.bmp differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/gunfire.wav b/Source Code updated 08-12-05/SpaceDonuts/Media/gunfire.wav new file mode 100644 index 0000000..44b37b1 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/gunfire.wav differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/hum.wav b/Source Code updated 08-12-05/SpaceDonuts/Media/hum.wav new file mode 100644 index 0000000..dae8d35 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/hum.wav differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/level.wav b/Source Code updated 08-12-05/SpaceDonuts/Media/level.wav new file mode 100644 index 0000000..f2b171c Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/level.wav differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/p_bang.wav b/Source Code updated 08-12-05/SpaceDonuts/Media/p_bang.wav new file mode 100644 index 0000000..46fbc71 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/p_bang.wav differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/rev.wav b/Source Code updated 08-12-05/SpaceDonuts/Media/rev.wav new file mode 100644 index 0000000..6b81b2a Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/rev.wav differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/s_bang.wav b/Source Code updated 08-12-05/SpaceDonuts/Media/s_bang.wav new file mode 100644 index 0000000..ed1efb1 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/s_bang.wav differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/shield.wav b/Source Code updated 08-12-05/SpaceDonuts/Media/shield.wav new file mode 100644 index 0000000..25eb74f Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/shield.wav differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/shipappear.wav b/Source Code updated 08-12-05/SpaceDonuts/Media/shipappear.wav new file mode 100644 index 0000000..a956ff0 Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/shipappear.wav differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/Media/skid.wav b/Source Code updated 08-12-05/SpaceDonuts/Media/skid.wav new file mode 100644 index 0000000..de0ea3d Binary files /dev/null and b/Source Code updated 08-12-05/SpaceDonuts/Media/skid.wav differ diff --git a/Source Code updated 08-12-05/SpaceDonuts/MediaUtilities.cs b/Source Code updated 08-12-05/SpaceDonuts/MediaUtilities.cs new file mode 100644 index 0000000..4cd8ed2 --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/MediaUtilities.cs @@ -0,0 +1,37 @@ +using System; +using System.IO; +using System.Configuration; + +namespace SpaceDonuts +{ + /// + /// Summary description for MediaUtilities. + /// + public class MediaUtilities + { + private static string mediaPath = ConfigurationSettings.AppSettings.Get("MediaPath"); + + public MediaUtilities() { + } + + public static string FindFile(string filename) { + return FindFile(mediaPath, filename); + } + + public static string FindFile(string path, string filename) { + // First try to load the file in the full path + string fullName = AppendDirectorySeparator(path) + filename; + if (File.Exists(fullName)) + return fullName; + else + throw new FileNotFoundException("Could not find this file.", filename); + } + + private static string AppendDirectorySeparator(string pathname) { + if (!pathname.EndsWith(@"\")) + return pathname + @"\"; + else + return pathname; + } + } +} diff --git a/Source Code updated 08-12-05/SpaceDonuts/NixieSprite.cs b/Source Code updated 08-12-05/SpaceDonuts/NixieSprite.cs new file mode 100644 index 0000000..4a60b46 --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/NixieSprite.cs @@ -0,0 +1,30 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using D3D = Microsoft.DirectX.Direct3D; +using System.Drawing; + +namespace SpaceDonuts { + /// + /// Summary description for CubeSprite. + /// + public class NixieSprite : BasicSprite { + + Rectangle nixiePosition; + + public enum NixieCharacters { + Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine, L, E, V, Mute + } + + public NixieSprite(TileSet ts) : base(ts) { + nixiePosition = new Rectangle(ts.XOrigin,ts.YOrigin,ts.ExtentX*2,ts.ExtentY*2); + nixiePosition.Y = ts.YOrigin; //this value never changes + } + + public void Draw(Sprite d3dSprite, NixieCharacters nixie, Vector3 displayPosition) { + nixiePosition.X = tiles.XOrigin + ( (int)nixie % tiles.NumberFrameColumns ) * tiles.ExtentX*2; + d3dSprite.Draw(tiles.Texture, nixiePosition, + new Vector3(), displayPosition, Color.FromArgb(255,255,255,255)); + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/SpaceDonuts/PyramidSprite.cs b/Source Code updated 08-12-05/SpaceDonuts/PyramidSprite.cs new file mode 100644 index 0000000..73ee2a8 --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/PyramidSprite.cs @@ -0,0 +1,8 @@ +namespace SpaceDonuts { + /// + /// Summary description for PyramidSprite. + /// + public class PyramidSprite : BasicSprite { + public PyramidSprite(TileSet ts) : base(ts) {} + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/SpaceDonuts/ShipSprite.cs b/Source Code updated 08-12-05/SpaceDonuts/ShipSprite.cs new file mode 100644 index 0000000..2eec5a9 --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/ShipSprite.cs @@ -0,0 +1,38 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using D3D = Microsoft.DirectX.Direct3D; +using System.Drawing; +namespace SpaceDonuts { + public class ShipSprite : BasicSprite { + + private float angleIncrement = 360f/40f; //40 frames in ship + private const float thrustAmount = 4f; + + public ShipSprite(TileSet ts) : base(ts) { + this.AnimationSpeed = 0f; //ship only moves from user input + this.Frame = 10; //aligns ship direction to 0 radians + } + + public override void NextFrame() { + currentFrame = ++currentFrame % totalFrames; + this.Angle = this.Frame * angleIncrement - 90; + } + + public override void PrevFrame() { + if (currentFrame == 0) + currentFrame = totalFrames-1; + else + currentFrame = --currentFrame % totalFrames; + this.Angle = this.Frame * angleIncrement - 90; + } + + public void Thrust() { + Vector2 thrustVector = new Vector2( + (float)Math.Cos(zAngle), + (float)Math.Sin(zAngle)); + velocity += thrustVector * thrustAmount; + + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/SpaceDonuts/SoundBuffer.cs b/Source Code updated 08-12-05/SpaceDonuts/SoundBuffer.cs new file mode 100644 index 0000000..207018b --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/SoundBuffer.cs @@ -0,0 +1,72 @@ +using System; +using System.Configuration; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectSound; +using Buffer = Microsoft.DirectX.DirectSound.SecondaryBuffer; +using Device = Microsoft.DirectX.DirectSound.Device; + +namespace SpaceDonuts { + /// + /// A single sound buffer for use by the SoundHandler class. + /// + public class SoundBuffer { + Buffer buffer; + Sounds thisSound; + bool looping; + bool lastValue; + + public SoundBuffer(Device soundDevice, string filename, Sounds thisSound, bool looping) { + this.thisSound = thisSound; + this.looping = looping; + + try { + buffer = new SecondaryBuffer(filename, soundDevice); + } + catch (Exception e) { + throw new Exception(String.Format("Error opening {0}", filename), e); + } + } + + public Sounds Sound { + get { + return thisSound; + } + } + + public int Volume { + get { + return buffer.Volume; + } + set { + buffer.Volume = value; + } + } + + public void Play(bool on) { + // looping sounds don't get restarted + if (looping) { + if (on) { + if (!lastValue) { + buffer.SetCurrentPosition(1000); + buffer.Play(0,BufferPlayFlags.Looping); + } + } + else { + buffer.Stop(); + } + lastValue = on; + } + else { + if (on) { + buffer.SetCurrentPosition(0); + buffer.Play(0,BufferPlayFlags.Default); + } + } + } + + public void Stop() { + if(buffer != null) + buffer.Stop(); + } + } +} diff --git a/Source Code updated 08-12-05/SpaceDonuts/SoundHandler.cs b/Source Code updated 08-12-05/SpaceDonuts/SoundHandler.cs new file mode 100644 index 0000000..96ac36a --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/SoundHandler.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections; +using System.Drawing; +using System.Windows.Forms; +using System.IO; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectSound; +using Buffer = Microsoft.DirectX.DirectSound.SecondaryBuffer; + +namespace SpaceDonuts { + public class SoundHandler { + + private Device soundDevice = null; + ArrayList sounds = new ArrayList(); + Sounds lastSound; + + public SoundHandler(Control owner) { + soundDevice = new Device(); + soundDevice.SetCooperativeLevel(owner, CooperativeLevel.Priority); + CreateSoundBuffers(); + } + + void AddBuffer(string filename, Sounds thisSound, bool looping) { + sounds.Add(new SoundBuffer(soundDevice,filename,thisSound,looping)); + } + + void CreateSoundBuffers() { + //Buffers must be created in same order as the enumerated type "Sounds" + AddBuffer(MediaUtilities.FindFile("shipappear.wav"), Sounds.ShipAppear, false); + AddBuffer(MediaUtilities.FindFile("shield.wav"), Sounds.ShipShield, false); + AddBuffer(MediaUtilities.FindFile("gunfire.wav"), Sounds.ShipFire, false); + AddBuffer(MediaUtilities.FindFile("bangbang.wav"), Sounds.ShipExplode, false); + AddBuffer(MediaUtilities.FindFile("rev.wav"), Sounds.ShipThrust, false); + AddBuffer(MediaUtilities.FindFile("skid.wav"), Sounds.ShipBrake, false); + AddBuffer(MediaUtilities.FindFile("bounce.wav"), Sounds.ShipBounce, false); + AddBuffer(MediaUtilities.FindFile("hum.wav"), Sounds.ShipHum, true); + AddBuffer(MediaUtilities.FindFile("level.wav"), Sounds.LevelStart, false); + AddBuffer(MediaUtilities.FindFile("d_bang.wav"), Sounds.DonutExplode, false); + AddBuffer(MediaUtilities.FindFile("p_bang.wav"), Sounds.PyramidExplode, false); + AddBuffer(MediaUtilities.FindFile("d_bang.wav"), Sounds.CubeExplode, false); //should be c_bang + AddBuffer(MediaUtilities.FindFile("p_bang.wav"), Sounds.SphereExplode, false); //should be s_bang + } + + public void Play(Sounds soundsToPlay) { + // check each enum value. If that value is set, play the sound... + foreach (SoundBuffer buffer in sounds) { + bool on = ((buffer.Sound & soundsToPlay) != 0); + buffer.Play(on); + } + lastSound = soundsToPlay; + } + } +} diff --git a/Source Code updated 08-12-05/SpaceDonuts/Sounds.cs b/Source Code updated 08-12-05/SpaceDonuts/Sounds.cs new file mode 100644 index 0000000..4edbaae --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/Sounds.cs @@ -0,0 +1,19 @@ +using System; +namespace SpaceDonuts { + [Flags] + public enum Sounds { + ShipAppear = 0x00000001, //shipappear.wav + ShipShield = 0x00000002, //shield.wav + ShipFire = 0x00000004, //gunfire.wav + ShipExplode = 0x00000008, //bangbang.wav + ShipThrust = 0x00000010, //rev.wav + ShipBrake = 0x00000020, //skid.wav + ShipBounce = 0x00000040, //bounce.wav + ShipHum = 0x00000080, //hum.wav + LevelStart = 0x00000100, //level.wav + DonutExplode = 0x00000200, //d_bang.wav + PyramidExplode = 0x00000400, //p_bang.wav + CubeExplode = 0x00000800, //c_bang.wav + SphereExplode = 0x00001000, //s_bang.wav + } +} diff --git a/Source Code updated 08-12-05/SpaceDonuts/SpaceDonuts.csproj b/Source Code updated 08-12-05/SpaceDonuts/SpaceDonuts.csproj new file mode 100644 index 0000000..7f7d6ed --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/SpaceDonuts.csproj @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/SpaceDonuts/SpaceDonuts.sln b/Source Code updated 08-12-05/SpaceDonuts/SpaceDonuts.sln new file mode 100644 index 0000000..5f96373 --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/SpaceDonuts.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpaceDonuts", "SpaceDonuts.csproj", "{C48F07AB-3EAB-4F4D-8662-D83E75073853}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {C48F07AB-3EAB-4F4D-8662-D83E75073853}.Debug.ActiveCfg = Debug|.NET + {C48F07AB-3EAB-4F4D-8662-D83E75073853}.Debug.Build.0 = Debug|.NET + {C48F07AB-3EAB-4F4D-8662-D83E75073853}.Release.ActiveCfg = Release|.NET + {C48F07AB-3EAB-4F4D-8662-D83E75073853}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/SpaceDonuts/SphereSprite.cs b/Source Code updated 08-12-05/SpaceDonuts/SphereSprite.cs new file mode 100644 index 0000000..1f5e09d --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/SphereSprite.cs @@ -0,0 +1,8 @@ +namespace SpaceDonuts { + /// + /// Summary description for SphereSprite. + /// + public class SphereSprite : BasicSprite { + public SphereSprite(TileSet ts) : base(ts) {} + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/SpaceDonuts/SpriteManager.cs b/Source Code updated 08-12-05/SpaceDonuts/SpriteManager.cs new file mode 100644 index 0000000..0dfd0a8 --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/SpriteManager.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections; +using System.Drawing; +using Microsoft.DirectX; +using D3D = Microsoft.DirectX.Direct3D; + +namespace SpaceDonuts { + /// + /// Handles management (life/death/updating) of sprites, also handles simple collision detection + /// + public class SpriteManager { + private ArrayList sprites; + + public delegate void HandleCollision(BasicSprite sprite1, BasicSprite sprite2); + public event HandleCollision OnCollisionDetected; + + Rectangle world = new Rectangle(0,0,640,480); + private bool bounceSprites = true; + + public SpriteManager() { + sprites = new ArrayList(); + } + + public void Clear() { + sprites = new ArrayList(); + } + + public void AddSprite(BasicSprite TargetSprite) { + sprites.Add(TargetSprite); + } + + public void Update(float DeltaTime) { + for (int i = 0; i < sprites.Count; i++) { + BasicSprite sprite = (BasicSprite)sprites[i]; + sprite.Update(DeltaTime); + if (sprite.DurationOver) + sprites.RemoveAt(i); + else + if (bounceSprites) sprite.BoundaryCheck(world); + } + } + + public void Draw(D3D.Device device) { + using (D3D.Sprite d3dSprite = new D3D.Sprite(device)) { + d3dSprite.Begin(D3D.SpriteFlags.AlphaBlend); + foreach (BasicSprite sprite in sprites) { + sprite.Draw(d3dSprite); + } + d3dSprite.End(); + } + } + + public void CollisionTest() { + //iterate through first half of sprites for complete collision coverage + for (int i = 0; i < sprites.Count ; i++) { + BasicSprite sprite1 = (BasicSprite)sprites[i]; + if (sprite1.CanCollide && sprite1.Visible) { + int sprite1Height = sprite1.CollisionyExtent; + int sprite1Width = sprite1.CollisionxExtent; + for (int j = 0; j < sprites.Count; j++) { + BasicSprite sprite2 = (BasicSprite)sprites[j]; + if (sprite2.Visible && !sprite2.CanCollide) { //don't check two collidable sprites + int sprite2Height = sprite2.CollisionyExtent; + int sprite2Width = sprite2.CollisionxExtent; + //Simple AABB Collision Check + float deltaX = Math.Abs(sprite1.PositionX-sprite2.PositionX); + float deltaY = Math.Abs(sprite1.PositionY-sprite2.PositionY); + if ((deltaX <= (sprite2Width + sprite1Width) && + (deltaY <= (sprite2Height + sprite1Height) ) )) { + OnCollisionDetected(sprite1, sprite2); //invoke delegate + } + } + } + } + } + } + } +} diff --git a/Source Code updated 08-12-05/SpaceDonuts/TileSet.cs b/Source Code updated 08-12-05/SpaceDonuts/TileSet.cs new file mode 100644 index 0000000..e5fadc7 --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/TileSet.cs @@ -0,0 +1,66 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +namespace SpaceDonuts { + public class TileSet { + private Texture texture; + + public Texture Texture { + get { + return texture; + } + } + private int xOrigin; + + public int XOrigin { + get { + return xOrigin; + } + } + private int yOrigin; + + public int YOrigin { + get { + return yOrigin; + } + } + private int numberFrameRows; + + public int NumberFrameRows { + get { + return numberFrameRows; + } + } + private int numberFrameColumns; + + public int NumberFrameColumns { + get { + return numberFrameColumns; + } + } + private int xExtent; + + public int ExtentX { + get { + return xExtent; + } + } + + private int yExtent; + public int ExtentY { + get { + return yExtent; + } + } + + public TileSet(Texture tex, int StartX, int StartY, int RowCount, int ColumnCount, int xWidth, int yHeight) { + xOrigin = StartX; + yOrigin = StartY; + xExtent = xWidth; + yExtent = yHeight; + numberFrameRows = RowCount; + numberFrameColumns = ColumnCount; + texture = tex; + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/SpaceDonuts/main.cs b/Source Code updated 08-12-05/SpaceDonuts/main.cs new file mode 100644 index 0000000..1b9f2be --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/main.cs @@ -0,0 +1,438 @@ +using System; +using System.Drawing; +using System.Threading; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; +using DI = Microsoft.DirectX.DirectInput; +using Microsoft.DirectX.Direct3D; +using D3D = Microsoft.DirectX.Direct3D; +using Microsoft.DirectX.DirectSound; +using DS = Microsoft.DirectX.DirectSound; +using Container = System.ComponentModel.Container; +using System.Windows.Forms; +/// +/// The main windows form for the application. +/// +namespace SpaceDonuts { + public class MainClass : System.Windows.Forms.Form{ + + private int screenWidth = 800; + private int screenHeight = 600; + + private String TileSetFileName = "donuts.bmp"; + private TileSet donutTileSet; + private TileSet pyramidTileSet; + private TileSet cubeTileSet; + private TileSet sphereTileSet; + private TileSet shipTileSet; + private TileSet nixiesTileSet; + private TileSet bulletTileSet; + + private Texture donutTexture; + private BasicSprite s; //temp holder for sprite creation + private ShipSprite ship; //reference to our ship + + private D3D.Device device; + private DI.Device kbd; + + internal HighResolutionTimer hrt = new HighResolutionTimer(); + private SpriteManager sm; + private System.ComponentModel.Container components = null; + private float deltaTime; + + //Bullet state data + private float lastBullet; + private const float bulletSpacing = 0.01f; + private const double bulletFireRadius = 22.6f; + + private Random rnd = new Random(); //no fancy seeding + + //Scorekeeping data + private int totalScore = 0; + private int livesRemaining = 2; + private int gameLevel = 0; + private int totalTargets = 0; + private const int maxScoreDigits = 8; + private const int maxLevelDigits = 3; + + private Sounds gameSounds; + private Sounds shipSounds; + private SoundHandler soundHandler; + + public MainClass() { + InitializeComponent(); + + this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true); + this.Text = "Space Donuts"; + sm = new SpriteManager(); + } + + protected override void Dispose( bool disposing ) { + if( disposing ) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + // + // MainClass + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(640, 480); + this.Name = "MainClass"; + this.Text = "Form1"; + } + #endregion + + [STAThread] + public static void Main() { + using (MainClass frm = new MainClass()) { + frm.Show(); + frm.Initialize(); + Application.Run(frm); //triggers OnPaint event, which is main loop + } + Application.Exit(); + } + + private void CollisionHandler(BasicSprite s1, BasicSprite s2) { + //Check to see if a bullet or ship is hitting a target object + BasicSprite collidable; + BasicSprite target; + + if ((s1.GetType() == typeof(ShipSprite)) || (s1.GetType() == typeof(BulletSprite))) { + collidable = s1; + target = s2; + } + else { + collidable = s2; + target = s1; + } + + //remove the bullet/ship from collision checking and take off list + collidable.Visible = false; //will be ignored for future collisions + collidable.DurationOver = true; //will be removed at next update + //if it was a ship, take away a life and restart the ship + if (collidable.GetType() == typeof(ShipSprite)) { + shipSounds = Sounds.ShipExplode; + ship.Visible = false; + //remove the ship from the sprite manager + ship.DurationOver = true; + //subtract a life + livesRemaining--; + //now make a new ship + NewShip(); + } + //Blow up object + Destroy(target); + } + + private void Destroy(BasicSprite sprite) { + totalTargets--; + gameSounds = 0; //clear out game sounds + //sprite type should be: donut, pyramid, cube, or sphere + if (sprite.GetType() == typeof(DonutSprite)) { + for(int i = 0; i < 3; i++) { + s = new PyramidSprite(pyramidTileSet); + s.PositionY = sprite.PositionY; + s.PositionX = sprite.PositionX; + s.Angle = (float)rnd.Next(0, 359); + s.Velocity = (float) rnd.Next(30, 200); + sm.AddSprite(s); + totalTargets++; + gameSounds |= Sounds.DonutExplode; + } + totalScore += 10; + } + else if (sprite.GetType() == typeof(PyramidSprite)) { + for(int i = 0; i < 2; i++) { + s = new CubeSprite(cubeTileSet); + s.PositionY = sprite.PositionY; + s.PositionX = sprite.PositionX; + s.Angle = (float)rnd.Next(0, 359); + s.Velocity = (float) rnd.Next(30, 200); + s.Visible = true; + sm.AddSprite(s); + totalTargets++; + gameSounds |= Sounds.PyramidExplode; + } + totalScore += 20; + } + else if (sprite.GetType() == typeof(CubeSprite)) { + for(int i = 0; i < 2; i++) { + s = new SphereSprite(sphereTileSet); + s.PositionY = sprite.PositionY; + s.PositionX = sprite.PositionX; + s.Angle = (float)rnd.Next(0, 359); + s.Velocity = (float) rnd.Next(50, 200); + sm.AddSprite(s); + totalTargets++; + gameSounds |= Sounds.CubeExplode; + } + totalScore += 10; + } + else if (sprite.GetType() == typeof(SphereSprite)) { + totalScore += 10; + gameSounds |= Sounds.SphereExplode; + } + sprite.Visible = false; //will be ignored for future collisions + sprite.DurationOver = true; //will be removed at next update + } + + private void Initialize() { + try { + //Common DirectX setup calls... + PresentParameters presentParams = new PresentParameters(); + presentParams.Windowed = true; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.BackBufferFormat = Format.Unknown; + presentParams.AutoDepthStencilFormat = DepthFormat.D16; + presentParams.EnableAutoDepthStencil = true; + + // Store the default adapter + int adapterOrdinal = D3D.Manager.Adapters.Default.Adapter; + CreateFlags flags = CreateFlags.SoftwareVertexProcessing; + + // Check to see if we can use a pure hardware device + D3D.Caps caps = D3D.Manager.GetDeviceCaps(adapterOrdinal, D3D.DeviceType.Hardware); + + // Do we support hardware vertex processing? + if (caps.DeviceCaps.SupportsHardwareTransformAndLight) + // Replace the software vertex processing + flags = CreateFlags.HardwareVertexProcessing; + + device = new D3D.Device(0, D3D.DeviceType.Hardware, this, flags, presentParams); + device.DeviceReset += new System.EventHandler(this.OnResetDevice); + OnResetDevice(device, null); + + //Space Donuts setup + donutTexture = TextureLoader.FromFile(device, MediaUtilities.FindFile(TileSetFileName), 1024, 1024, + 1, 0,Format.A8R8G8B8, Pool.Managed, Filter.Point, Filter.Point, (unchecked((int)0xff000000))); + + donutTileSet = new TileSet(donutTexture, 0, 0, 6, 5, 32, 32); + pyramidTileSet = new TileSet(donutTexture, 0, 384, 4, 10, 16, 16); + sphereTileSet = new TileSet(donutTexture, 0, 512, 2, 20, 8, 8); + cubeTileSet = new TileSet(donutTexture, 0, 544, 2, 20, 8, 8); + shipTileSet = new TileSet(donutTexture, 0, 576, 4, 10, 16, 16); + nixiesTileSet = new TileSet(donutTexture, 0, 832, 1, 14, 8, 8); + bulletTileSet = new TileSet(donutTexture, 304, 832, 1, 1, 8, 2); + + //set up DirectInput keyboard device... + kbd = new DI.Device(SystemGuid.Keyboard); + kbd.SetCooperativeLevel(this, + DI.CooperativeLevelFlags.Background | DI.CooperativeLevelFlags.NonExclusive); + kbd.Acquire(); + + soundHandler = new SoundHandler(this); + + sm.OnCollisionDetected += new SpriteManager.HandleCollision(this.CollisionHandler); + + hrt.Start(); + } + catch (DirectXException e) { + Console.WriteLine("Exception is " + e.ErrorString); + // Catch any errors and return a failure + } + } + + private void NewShip() { + ship = new ShipSprite(shipTileSet); + ship.CollisionxExtent = 8; //make collision box smaller + ship.CollisionyExtent = 8; + ship.PositionY = (float)this.Height/2; + ship.PositionX = (float)this.Width/2; + ship.Velocity = 0f; + ship.CanCollide = true; + ship.Angle = 0; + ship.StartDelay = 2f; //delay start for 2 seconds + ship.AnimationSpeed = 0f; //ship only moves from user input + ship.Frame = 10; //aligns ship direction to 0 radians + sm.AddSprite(ship); + shipSounds = Sounds.ShipAppear | Sounds.ShipHum; + } + + + private void NewLevel() { + gameLevel++; + //Reset game sounds + shipSounds = Sounds.ShipHum; + gameSounds = Sounds.LevelStart; + soundHandler.Play(shipSounds | gameSounds); + DisplayLevel(gameLevel); + //Remove all sprites from the sprite manager's list + sm.Clear(); + //Create new entities + NewShip(); + for(int i = 0; i < gameLevel; i++) { + s = new DonutSprite(donutTileSet); + s.CollisionxExtent = 24; //make collision box smaller + s.CollisionyExtent = 24; + s.PositionY = rnd.Next(donutTileSet.ExtentY*4, this.Height-donutTileSet.ExtentY*4); + s.PositionX = rnd.Next(donutTileSet.ExtentX*4, this.Width-donutTileSet.ExtentX*4); + s.Angle = (float)rnd.Next(10, 350); + s.Velocity = (float) rnd.Next(75, 150); + s.CanCollide = false; + totalTargets++; + sm.AddSprite(s); + } + shipSounds = 0; + gameSounds = 0; + hrt.Reset(); + } + + public void DisplayLevel(int level) { + int characterStart = 30; + int characterSpacing = 15; + Vector3 displayPosition = + new Vector3((float)this.Width/2 - characterStart, (float)this.Height/2, 0f); + int digit; + NixieSprite nixie = new NixieSprite(nixiesTileSet); + + //Render the level indicator + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); + device.BeginScene(); + using (D3D.Sprite d3dSprite = new D3D.Sprite(device)) { + d3dSprite.Begin(D3D.SpriteFlags.AlphaBlend); + + //Show the letter L + nixie.Draw(d3dSprite, NixieSprite.NixieCharacters.L, displayPosition); + + //Show the letter E + displayPosition.X -= characterSpacing; + nixie.Draw(d3dSprite, NixieSprite.NixieCharacters.E, displayPosition); + + //Show the letter V + displayPosition.X -= characterSpacing; + nixie.Draw(d3dSprite, NixieSprite.NixieCharacters.V, displayPosition); + + //Show the letter E + displayPosition.X -= characterSpacing; + nixie.Draw(d3dSprite, NixieSprite.NixieCharacters.E, displayPosition); + + //Show the letter L + displayPosition.X -= characterSpacing; + nixie.Draw(d3dSprite, NixieSprite.NixieCharacters.L, displayPosition); + + displayPosition.X = (float)this.Width/2 + 40; + for (int digitCount = 1; digitCount <= maxLevelDigits; digitCount++) { + digit = level % 10; + level /= 10; + nixie.Draw(d3dSprite, (NixieSprite.NixieCharacters)digit, displayPosition); + displayPosition.X -= characterSpacing; + } + d3dSprite.End(); + } + device.EndScene(); + device.Present(); + Thread.Sleep(3000); //wait for 3 seconds + } + + public void OnResetDevice(object sender, EventArgs e) { + D3D.Device device = (D3D.Device)sender; + } + + protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { + //Update game state + if (totalTargets == 0) NewLevel(); + if ((gameSounds|shipSounds) != 0) { + soundHandler.Play(gameSounds | shipSounds); + shipSounds = Sounds.ShipHum; + gameSounds = 0; + } + deltaTime = hrt.ElapsedTime; + ProcessInputState(deltaTime); //get keyboard input + sm.Update(deltaTime); + sm.CollisionTest(); + + //Render the images + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + device.BeginScene(); + sm.Draw(device); + WriteScore(device, totalScore); + device.EndScene(); + device.Present(); + this.Invalidate(); + } + + protected void ProcessInputState(float delta) { + foreach (Key k in kbd.GetPressedKeys()) { + if (k == Key.Space && ship.Visible) { + //Fire guns + lastBullet += delta; + if (lastBullet > bulletSpacing) { + BulletSprite bullet = new BulletSprite(bulletTileSet); + //Calculate bullet start position, outside ship boundaries + float radAngle = Geometry.DegreeToRadian(ship.Angle); + int yOffset = (int) ( bulletFireRadius * Math.Sin((double)radAngle)); + int xOffset = (int) ( bulletFireRadius * Math.Cos((double)radAngle)); + bullet.PositionY = (ship.PositionY) + shipTileSet.ExtentY + yOffset; + //the -4 below is a small nudge to center up the bullets + bullet.PositionX = (ship.PositionX) + shipTileSet.ExtentX + xOffset - 4; + bullet.Angle = ship.Angle; + bullet.Velocity = 150f; + bullet.AnimationSpeed = 0f; + bullet.CanCollide = true; + bullet.LimitLifespan(2f); //only 2 seconds to live + sm.AddSprite(bullet); + lastBullet = 0f; + if (totalScore > 0) totalScore--; //lose a point for each bullet + shipSounds |= Sounds.ShipFire; + } + } + if (k == Key.Left) ship.PrevFrame(); + if (k == Key.Right) ship.NextFrame(); + if (k == Key.Up) { + ship.Thrust(); + shipSounds |= Sounds.ShipThrust; + } + if (k == Key.Down) { + //Put on the brakes! + ship.VelocityX = 0f; + ship.VelocityY = 0f; + shipSounds |= Sounds.ShipBrake; + } + if (k == Key.Escape) { + kbd.Unacquire(); //release the keyboard device + kbd.Dispose(); + Application.Exit(); + } + if (k == Key.Home) { + //resets ship to starting position + ship.PositionY = (float)this.Height/2; + ship.PositionX = (float)this.Width/2; + ship.VelocityX = 0f; + ship.VelocityY = 0f; + ship.Angle = 0.0f; + ship.Frame = 10; + } + //if (k == Key.D) sm.ShowList(); + } + } + + public void WriteScore(D3D.Device device, int score) { + Rectangle nixiePosition = new Rectangle(nixiesTileSet.XOrigin,nixiesTileSet.YOrigin,nixiesTileSet.ExtentX*2,nixiesTileSet.ExtentY*2); + int digit; + using (D3D.Sprite d3dSprite = new D3D.Sprite(device)) { + d3dSprite.Begin(D3D.SpriteFlags.AlphaBlend); + for (int digitCount = 1; digitCount <= maxScoreDigits; digitCount++) { + digit = score % 10; + score /= 10; + nixiePosition.X = nixiesTileSet.XOrigin + ( digit % nixiesTileSet.NumberFrameColumns ) * nixiesTileSet.ExtentX*2; + nixiePosition.Y = nixiesTileSet.YOrigin; //we know it's only one row + Vector3 position = new Vector3((float)this.Width/2 - digitCount*nixiesTileSet.ExtentX*2, + (float)this.Height-60f, 0f); + d3dSprite.Draw(nixiesTileSet.Texture, nixiePosition, + new Vector3(), position, Color.FromArgb(255,255,255,255)); + } + d3dSprite.End(); + } + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/SpaceDonuts/main.resx b/Source Code updated 08-12-05/SpaceDonuts/main.resx new file mode 100644 index 0000000..a60a454 --- /dev/null +++ b/Source Code updated 08-12-05/SpaceDonuts/main.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + MainClass + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar2/AssemblyInfo.cs b/Source Code updated 08-12-05/Spacewar2/AssemblyInfo.cs new file mode 100644 index 0000000..3ef2107 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/AssemblyInfo.cs @@ -0,0 +1,11 @@ +using System; +using System.Reflection; +using System.Security; +using System.Security.Permissions; +using System.Runtime.InteropServices; + +[assembly:CLSCompliant(false)] +[assembly: AssemblyVersionAttribute("1.0.14.1")] +[assembly:FileIOPermission(SecurityAction.RequestMinimum)] +[assembly:ComVisible(false)] + diff --git a/Source Code updated 08-12-05/Spacewar2/Constants.cs b/Source Code updated 08-12-05/Spacewar2/Constants.cs new file mode 100644 index 0000000..5d45913 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/Constants.cs @@ -0,0 +1,53 @@ +using System; + +namespace SpaceWar { + /// + /// GamePlay constants. You can tune the game by adjusting these values. + /// + sealed public class Constants { + static public Random random = new Random((int) DateTime.Now.Ticks); + + public const int RotateSteps = 60; // number of steps to rotate ship. + public const float ShipSize = 3f; + public const float EngineThrust = 0.3f; + public const int DyingCycle = 20; + public const int DeadCycleWait = 30; + public const int HyperChargeWait = 10; + public const int HyperCycleWait = 2; + public const float HyperSuccessFactor = 0.8f; // initial success factor + public const float HyperSuccessDegradation = 0.1f; // degradation per use... + public const float ShipCollisionLimit = 20f; + + public const int ShotLifetime = 35; + public const int NumShots = 6; + public const float ShotVelocity = 20f; + public const int ShotDeltaCycles = 3; + public const int ShotInitialMove = 3; // times to update shot so it shows up outside the ship... + public const int ShotCollisionLimit = 12; + + public const int SunSize = 20; + public const float SunCollisionLimit = 25f; + + public const int LetterSize = 5; + public const int LetterSpacing = 8; + public const int ScoreVerticalSpacing = 20; + public const int ScoreXOrigin = 30; + public const int ScoreYOrigin = 30; + public const int ScoreOffset = 100; // offset of score from name... + + public const bool ShotGravity = true; + public const bool ShotAddShipVelocity = false; + public const int ShotSunCollisionLimit = 25; + + public const int ShipSunCreationDistance = 200; + + public const int NumStars = 60; + public const int StarColorFull = 0x0000FF; + public const int StarColorDim = 0x000044; + + public const long RemoteTickTimeout = 5; // five seconds... + + private Constants() { + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/DPlayConnect.cs b/Source Code updated 08-12-05/Spacewar2/DPlayConnect.cs new file mode 100644 index 0000000..e0e11ae --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/DPlayConnect.cs @@ -0,0 +1,254 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; +using System.Runtime.InteropServices; + + + + +/// +/// The connection wizard will allow our users to pick a service provider, +/// and then connect to an existing application, or create a new one as the host. +/// +public class ConnectWizard { + private Peer peerObject; + private Address deviceAddress; + + private ChooseServiceProviderForm serviceProviderForm; + private CreateJoinForm createJoinForm; + + private Guid serviceProviderGuid; + private string username; + private string samplename; + private bool isInSession = false; + private bool isHost = false; + private int port = 0; + + private Guid applicationGuid; + + + + + /// + /// Constructor + /// + /// + /// + /// + public ConnectWizard(Peer peer, Guid application, string sampleName) { + peerObject = peer; + applicationGuid = application; + samplename = sampleName; + } + + + + + /// + /// The guid for the current service provider + /// + public Guid ServiceProvider { + get { + return serviceProviderGuid; } + set { + serviceProviderGuid = value; } + } + + + + + /// + /// The game's default port number + /// + public int DefaultPort { + get { + return port; } + set { + port = value; } + } + + + + + /// + /// Am I the host + /// + public bool IsHost { + get { + return isHost; } + set { + isHost = value; } + } + + + + + /// + /// The username + /// + public string Username { + get { + return username; } + set { + username = value; } + } + + + + + /// + /// The sample name + /// + public string SampleName { + get { + return samplename; } + } + + + + + /// + /// The applications guid + /// + public Guid ApplicationGuid { + get { + return applicationGuid; } + } + + + + + /// + /// Are we in a session + /// + public bool InSession { + get { return isInSession; } + set { isInSession = value; } + } + + + + + /// + /// Returns true if the given provider requires a port component + /// + /// ServiceProvider Guid + /// + static public bool ProviderRequiresPort(Guid provider) { + return (provider != Address.ServiceProviderSerial && + provider != Address.ServiceProviderModem && + provider != Address.ServiceProviderBlueTooth); + } + + + + + /// + /// Handler for when our form is disposed + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createJoinForm) + createJoinForm = null; + + if (sender == serviceProviderForm) + serviceProviderForm = null; + } + + + + + /// + /// Set the user information + /// + public void SetUserInfo() { + //Before we call host, let's actually call SetPeerInformation + PlayerInformation myinformation = new PlayerInformation(); + myinformation.Name = username; + + peerObject.SetPeerInformation(myinformation, SyncFlags.PeerInformation); + } + + + + + /// + /// Show the service providers form + /// + /// True if a service provider was picked, false otherwise + public bool DoShowServiceProviders() { + if (serviceProviderForm == null) { + username = null; + serviceProviderForm = new ChooseServiceProviderForm(peerObject,this); + serviceProviderForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (serviceProviderForm.ShowDialog() == DialogResult.OK) + return true; + + // The didn't hit ok + return false; + } + + + + + /// + /// Show the create or join screen + /// + /// True if we will be in a session, false otherwise + public bool DoCreateJoinGame() { + if (deviceAddress != null) + deviceAddress.Dispose(); + + deviceAddress = new Address(); + + if (createJoinForm != null) + createJoinForm.Dispose(); + + createJoinForm = new CreateJoinForm(peerObject, deviceAddress, this); + createJoinForm.Disposed += new System.EventHandler(this.FormDisposed); + + //Set the address's service provider (this will be the device address) + deviceAddress.ServiceProvider = serviceProviderGuid; + DialogResult drCreateJoin = createJoinForm.ShowDialog(); + if (drCreateJoin == DialogResult.Cancel) + return false; + + this.isHost = (drCreateJoin == DialogResult.Yes); + return true; + + } + + + + + /// + /// Start the wizard + /// + /// True if we are in a session, false otherwise + public bool StartWizard() { + isInSession = false; + + while (this.DoShowServiceProviders()) { + //Now let's create a game or join a session + if (this.DoCreateJoinGame()) { + // A game has been created or joined now, set our flag + isInSession = true; + break; + } + } + return isInSession; + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar2/DPlayConnect_AddressForm.cs b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_AddressForm.cs new file mode 100644 index 0000000..bdf380d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_AddressForm.cs @@ -0,0 +1,207 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_AddressForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// Summary description for AddressForm. +/// +public class AddressForm : System.Windows.Forms.Form { + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox hostnameTextBox; + private System.Windows.Forms.TextBox portTextBox; + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + /// + /// Constructor + /// + public AddressForm( int defaultPort ) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // Set default port value + Port = defaultPort; + } + + + + + /// + /// The remote port on which to connect + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(portTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + portTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Remote hostname + /// + public string Hostname { + get { + return hostnameTextBox.Text; } + set { + hostnameTextBox.Text = value; } + } + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.label1 = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.hostnameTextBox = new System.Windows.Forms.TextBox(); + this.portTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(248, 48); + this.label1.TabIndex = 0; + this.label1.Text = "Please enter the optional components of the remote session address. If set blank," + + " DirectPlay will attempt to search the local network."; + // + // okButton + // + this.okButton.Location = new System.Drawing.Point(104, 144); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(72, 24); + this.okButton.TabIndex = 1; + this.okButton.Text = "&OK"; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(184, 144); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(72, 24); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "&Cancel"; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(32, 80); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(100, 16); + this.label2.TabIndex = 3; + this.label2.Text = "Hostname"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(160, 80); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 16); + this.label3.TabIndex = 4; + this.label3.Text = "Port"; + // + // hostnameTextBox + // + this.hostnameTextBox.Location = new System.Drawing.Point(32, 96); + this.hostnameTextBox.Name = "hostnameTextBox"; + this.hostnameTextBox.Size = new System.Drawing.Size(120, 20); + this.hostnameTextBox.TabIndex = 5; + this.hostnameTextBox.Text = ""; + // + // portTextBox + // + this.portTextBox.Location = new System.Drawing.Point(160, 96); + this.portTextBox.Name = "portTextBox"; + this.portTextBox.Size = new System.Drawing.Size(56, 20); + this.portTextBox.TabIndex = 6; + this.portTextBox.Text = "2580"; + // + // AddressForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(264, 176); + this.Controls.Add(this.portTextBox); + this.Controls.Add(this.hostnameTextBox); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.okButton); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AddressForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Remote Address"; + this.ResumeLayout(false); + + } + #endregion + + private void okButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.OK; + } + + private void cancelButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.Cancel; + } + +} diff --git a/Source Code updated 08-12-05/Spacewar2/DPlayConnect_AddressForm.resx b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_AddressForm.resx new file mode 100644 index 0000000..a899c39 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_AddressForm.resx @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + AddressForm + + + 8, 8 + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar2/DPlayConnect_CreateForm.cs b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_CreateForm.cs new file mode 100644 index 0000000..ff71782 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_CreateForm.cs @@ -0,0 +1,345 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_CreateForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will allow you to create a new session, and set certain properties +/// of the session. +/// +public class CreateSessionForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.TextBox txtSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton notSignedRadio; + private System.Windows.Forms.RadioButton fullSignedRadio; + private System.Windows.Forms.RadioButton fastSignedRadio; + private System.Windows.Forms.CheckBox migrateHostCheckBox; + private System.Windows.Forms.CheckBox useDPNSVRCheckBox; + private System.Windows.Forms.TextBox localPortTextBox; + private System.Windows.Forms.Label localPortLabel; + private System.Windows.Forms.Button btnCancel; + + + + /// + /// Constructor + /// + public CreateSessionForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + peer = peerObject; + this.connectionWizard = connectionWizard; + deviceAddress = addressObject; + txtSession.Text = null; + this.Text = connectionWizard.SampleName + " - " + this.Text; + //Get the default session from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + // Get session name + txtSession.Text = (string)regKey.GetValue("DirectPlaySessionName", null); + + // Get host migration option + if (regKey.GetValue("DirectPlayMigrateHost",null) != null) { + migrateHostCheckBox.Checked = ((int)regKey.GetValue("DirectPlayMigrateHost",1)==1); + } + + + // Get session signing option + if (regKey.GetValue("DirectPlaySessionSigning",null) != null) { + if ("Full" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fullSignedRadio.Checked = true; + else if ("Fast" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fastSignedRadio.Checked = true; + else + notSignedRadio.Checked = true; + } + + regKey.Close(); + } + + // Set default port value and hide port UI if provider doesn't use them + Port = connectionWizard.DefaultPort; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + localPortTextBox.Hide(); + localPortLabel.Hide(); + } + } + + + + /// + /// The port on which to host + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(localPortTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + localPortTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.txtSession = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.fullSignedRadio = new System.Windows.Forms.RadioButton(); + this.fastSignedRadio = new System.Windows.Forms.RadioButton(); + this.notSignedRadio = new System.Windows.Forms.RadioButton(); + this.migrateHostCheckBox = new System.Windows.Forms.CheckBox(); + this.useDPNSVRCheckBox = new System.Windows.Forms.CheckBox(); + this.localPortLabel = new System.Windows.Forms.Label(); + this.localPortTextBox = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // txtSession + // + this.txtSession.Location = new System.Drawing.Point(96, 24); + this.txtSession.Name = "txtSession"; + this.txtSession.Size = new System.Drawing.Size(176, 20); + this.txtSession.TabIndex = 3; + this.txtSession.Text = "SpaceWar"; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(288, 12); + this.label1.TabIndex = 2; + this.label1.Text = "Session Name:"; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(128, 168); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(208, 168); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.fullSignedRadio); + this.groupBox1.Controls.Add(this.fastSignedRadio); + this.groupBox1.Controls.Add(this.notSignedRadio); + this.groupBox1.Location = new System.Drawing.Point(16, 64); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(112, 88); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Session Signing"; + this.groupBox1.Visible = false; + // + // fullSignedRadio + // + this.fullSignedRadio.Location = new System.Drawing.Point(18, 22); + this.fullSignedRadio.Name = "fullSignedRadio"; + this.fullSignedRadio.Size = new System.Drawing.Size(80, 16); + this.fullSignedRadio.TabIndex = 9; + this.fullSignedRadio.Text = "Full signed"; + // + // fastSignedRadio + // + this.fastSignedRadio.Checked = true; + this.fastSignedRadio.Location = new System.Drawing.Point(18, 41); + this.fastSignedRadio.Name = "fastSignedRadio"; + this.fastSignedRadio.Size = new System.Drawing.Size(88, 16); + this.fastSignedRadio.TabIndex = 8; + this.fastSignedRadio.TabStop = true; + this.fastSignedRadio.Text = "Fast signed"; + // + // notSignedRadio + // + this.notSignedRadio.Location = new System.Drawing.Point(18, 55); + this.notSignedRadio.Name = "notSignedRadio"; + this.notSignedRadio.Size = new System.Drawing.Size(72, 24); + this.notSignedRadio.TabIndex = 10; + this.notSignedRadio.Text = "Disabled"; + // + // migrateHostCheckBox + // + this.migrateHostCheckBox.Location = new System.Drawing.Point(144, 64); + this.migrateHostCheckBox.Name = "migrateHostCheckBox"; + this.migrateHostCheckBox.Size = new System.Drawing.Size(136, 24); + this.migrateHostCheckBox.TabIndex = 11; + this.migrateHostCheckBox.Text = "Enable Host Migration"; + this.migrateHostCheckBox.Visible = false; + // + // useDPNSVRCheckBox + // + this.useDPNSVRCheckBox.Location = new System.Drawing.Point(144, 84); + this.useDPNSVRCheckBox.Name = "useDPNSVRCheckBox"; + this.useDPNSVRCheckBox.Size = new System.Drawing.Size(136, 24); + this.useDPNSVRCheckBox.TabIndex = 12; + this.useDPNSVRCheckBox.Text = "Use DPNSVR"; + this.useDPNSVRCheckBox.Visible = false; + // + // localPortLabel + // + this.localPortLabel.Location = new System.Drawing.Point(152, 122); + this.localPortLabel.Name = "localPortLabel"; + this.localPortLabel.Size = new System.Drawing.Size(64, 17); + this.localPortLabel.TabIndex = 13; + this.localPortLabel.Text = "Local Port:"; + // + // localPortTextBox + // + this.localPortTextBox.Location = new System.Drawing.Point(216, 120); + this.localPortTextBox.Name = "localPortTextBox"; + this.localPortTextBox.Size = new System.Drawing.Size(56, 20); + this.localPortTextBox.TabIndex = 14; + this.localPortTextBox.Text = "2580"; + // + // CreateSessionForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(290, 200); + this.ControlBox = false; + this.Controls.Add(this.localPortTextBox); + this.Controls.Add(this.localPortLabel); + this.Controls.Add(this.useDPNSVRCheckBox); + this.Controls.Add(this.migrateHostCheckBox); + this.Controls.Add(this.txtSession); + this.Controls.Add(this.label1); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.btnCancel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.HelpButton = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateSessionForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Create a Session"; + this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.CreateSessionForm_HelpRequested); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// We are ready to create a session. Ensure the data is valid + /// then create the session + /// + private void btnOK_Click(object sender, System.EventArgs e) { + ApplicationDescription dpApp; + if ((txtSession.Text == null) || (txtSession.Text == "")) { + MessageBox.Show(this,"Please enter a session name before clicking OK.","No sessionname",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlaySessionName", txtSession.Text); + if (migrateHostCheckBox.Checked) + regKey.SetValue("DirectPlayMigrateHost",1); + else + regKey.SetValue("DirectPlayMigrateHost",0); + + if (fastSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Fast"); + else if (fullSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Full"); + else + regKey.SetValue("DirectPlaySessionSigning","Disabled"); + regKey.Close(); + } + + dpApp = new ApplicationDescription(); + dpApp.GuidApplication = connectionWizard.ApplicationGuid; + dpApp.SessionName = txtSession.Text; + dpApp.Flags = 0; + + if (migrateHostCheckBox.Checked) + dpApp.Flags |= SessionFlags.MigrateHost; + + if (!useDPNSVRCheckBox.Checked) + dpApp.Flags |= SessionFlags.NoDpnServer; + + if (fastSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FastSigned; + else if (fullSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FullSigned; + + // Specify the port number if available + if (ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + if (Port > 0) + deviceAddress.AddComponent(Address.KeyPort, Port); + } + + connectionWizard.SetUserInfo(); + // Host a game on deviceAddress as described by dpApp + // HostFlags.OkToQueryForAddressing allows DirectPlay to prompt the user + // using a dialog box for any device address information that is missing + peer.Host(dpApp,deviceAddress,HostFlags.OkToQueryForAddressing); + this.DialogResult = DialogResult.OK; + } + + private void CreateSessionForm_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent) { + + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/DPlayConnect_CreateForm.resx b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_CreateForm.resx new file mode 100644 index 0000000..3e4ebdd --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_CreateForm.resx @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Private + + + Private + + + False + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + CreateSessionForm + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar2/DPlayConnect_JoinForm.cs b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_JoinForm.cs new file mode 100644 index 0000000..a86efa7 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_JoinForm.cs @@ -0,0 +1,481 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_JoinForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will search for existing running samples and allow you to join them or will +/// allow you to create your own session as a host +/// +public class CreateJoinForm : System.Windows.Forms.Form { + private const int EnumExpireThreshold = 2000; + private bool amJoining = false; + + + + + /// + /// Hold our information of hosts we found + /// + private struct FindHostsResponseInformation { + public int LastFoundTime; + public ApplicationDescription ApplicationDesc; + public int RoundTripLatencyMs; + public Address sender; + public Address device; + public override string ToString() { + if (ApplicationDesc.MaxPlayers > 0) + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + "/" + ApplicationDesc.MaxPlayers + ") (" + RoundTripLatencyMs + "ms)"; + else + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + ") (" + RoundTripLatencyMs + "ms)"; + } + }; + + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + private Address hostAddress = null; + private bool isSearching = false; + private int findHostHandle = 0; + private CreateSessionForm createSessionForm = null; + private ResultCode resultCode; + private ArrayList foundHosts = new ArrayList(); + private bool isConnected = false; + private ManualResetEvent connectEvent = null; + private System.Timers.Timer updateListTimer = null; + private System.Timers.Timer connectTimer = null; + + private System.Windows.Forms.ListBox lstSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnSearch; + private System.Windows.Forms.Button btnJoin; + private System.Windows.Forms.Button btnCreate; + + + + + /// + /// Constructor + /// + public CreateJoinForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + deviceAddress = addressObject; + + //Set up the event handlers + peer.FindHostResponse += new FindHostResponseEventHandler(FindHostResponseMessage); + peer.ConnectComplete += new ConnectCompleteEventHandler(ConnectResult); + peer.AsyncOperationComplete += new AsyncOperationCompleteEventHandler(CancelAsync); + + //Set up our timer + updateListTimer = new System.Timers.Timer(300); // A 300 ms interval + updateListTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.UpdateTimer); + updateListTimer.SynchronizingObject = this; + updateListTimer.Start(); + //Set up our connect timer + connectTimer = new System.Timers.Timer(100); // A 100ms interval + connectTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.ConnectTimer); + connectTimer.SynchronizingObject = this; + // Set up our connect event + connectEvent = new ManualResetEvent(false); + + } + + + + + /// + /// An asynchronous operation was cancelled + /// + private void CancelAsync(object sender, AsyncOperationCompleteEventArgs e) { + if (e.Message.AsyncOperationHandle == findHostHandle) { + findHostHandle = 0; + btnSearch.Text = "Start Search"; + isSearching = false; + btnCreate.Enabled = true; + btnSearch.Enabled = true; + } + } + + + + + /// + /// A host was found and responded to our query + /// + private void FindHostResponseMessage(object sender, FindHostResponseEventArgs dpMessage) { + // Now we need to add this to our list of available sessions + SessionAdd(dpMessage.Message); + } + + + + + /// + /// Add this session to our list + /// + /// + private void SessionAdd(FindHostsResponseMessage dpMessage) { + FindHostsResponseInformation dpInfo = new FindHostsResponseInformation(); + + dpInfo.ApplicationDesc = dpMessage.ApplicationDescription; + dpInfo.device = dpMessage.AddressDevice; + dpInfo.sender = dpMessage.AddressSender; + dpInfo.RoundTripLatencyMs = dpMessage.RoundTripLatencyMs; + dpInfo.LastFoundTime = Environment.TickCount; + + // Let's check the items first and see if this one already exists + bool isFound = false; + + lock (foundHosts) { + for (int i = 0; i < lstSession.Items.Count; i++) { + if (dpInfo.ApplicationDesc.GuidInstance == ((FindHostsResponseInformation)lstSession.Items[i]).ApplicationDesc.GuidInstance) { + foundHosts[i] = dpInfo; + lstSession.Items[i] = dpInfo; + isFound = true; + } + } + if (!isFound) { + lstSession.Items.Add(dpInfo); + foundHosts.Add(dpInfo); + } + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + + if (isSearching) { + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + isSearching = !isSearching; + } + if (connectTimer != null) + connectTimer.Dispose(); + + if (updateListTimer != null) + updateListTimer.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.btnJoin = new System.Windows.Forms.Button(); + this.lstSession = new System.Windows.Forms.ListBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnCreate = new System.Windows.Forms.Button(); + this.btnSearch = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnJoin + // + this.btnJoin.Enabled = false; + this.btnJoin.Location = new System.Drawing.Point(7, 227); + this.btnJoin.Name = "btnJoin"; + this.btnJoin.Size = new System.Drawing.Size(74, 27); + this.btnJoin.TabIndex = 2; + this.btnJoin.Text = "Join"; + this.btnJoin.Click += new System.EventHandler(this.btnJoin_Click); + // + // lstSession + // + this.lstSession.Location = new System.Drawing.Point(5, 37); + this.lstSession.Name = "lstSession"; + this.lstSession.Size = new System.Drawing.Size(400, 186); + this.lstSession.TabIndex = 1; + this.lstSession.DoubleClick += new System.EventHandler(this.btnJoin_Click); + this.lstSession.SelectedValueChanged += new System.EventHandler(this.SelectedChange); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(5, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(312, 16); + this.label1.TabIndex = 0; + this.label1.Text = "Select session to join, or click Create to start a new session."; + // + // btnCreate + // + this.btnCreate.DialogResult = System.Windows.Forms.DialogResult.Yes; + this.btnCreate.Location = new System.Drawing.Point(84, 227); + this.btnCreate.Name = "btnCreate"; + this.btnCreate.Size = new System.Drawing.Size(74, 27); + this.btnCreate.TabIndex = 2; + this.btnCreate.Text = "Create"; + this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click); + // + // btnSearch + // + this.btnSearch.Location = new System.Drawing.Point(319, 7); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(86, 27); + this.btnSearch.TabIndex = 2; + this.btnSearch.Text = "Start Search"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(333, 227); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + // + // CreateJoinForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(411, 264); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.btnCreate, + this.btnJoin, + this.btnSearch, + this.btnCancel, + this.lstSession, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateJoinForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Join or create a session"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// The selected session was changed. + /// + private void SelectedChange(object sender, System.EventArgs e) { + if (amJoining) + return; // Do nothing if we are already joining a session + + btnJoin.Enabled = (lstSession.SelectedItem != null); + } + + + + + /// + /// We either want to start or stop searching + /// + private void btnSearch_Click(object sender, System.EventArgs e) { + if (!isSearching) { + if( hostAddress != null ) + hostAddress.Dispose(); + + hostAddress = new Address(); + hostAddress.ServiceProvider = deviceAddress.ServiceProvider; + + // See if we should prompt the user for the remote address + if (ConnectWizard.ProviderRequiresPort(hostAddress.ServiceProvider)) { + AddressForm addressDialog = new AddressForm(connectionWizard.DefaultPort); + addressDialog.ShowDialog(this); + + // If the user cancelled the address form, abort the search + if (addressDialog.DialogResult != DialogResult.OK) + return; + + // If a port was specified, add the component + if (addressDialog.Hostname != "") + hostAddress.AddComponent(Address.KeyHostname, addressDialog.Hostname); + + // If a hostname was specified, add the component + if (addressDialog.Port > 0) + hostAddress.AddComponent(Address.KeyPort, addressDialog.Port); + } + + //Time to enum our hosts + ApplicationDescription desc = new ApplicationDescription(); + desc.GuidApplication = connectionWizard.ApplicationGuid; + + // If the user was not already asked for address information, DirectPlay + // should prompt with native UI + FindHostsFlags flags = 0; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + flags = FindHostsFlags.OkToQueryForAddressing; + + peer.FindHosts(desc,hostAddress,deviceAddress,null,Timeout.Infinite,0,Timeout.Infinite, flags, out findHostHandle); + isSearching = true; + btnCreate.Enabled = false; + btnSearch.Text = "Stop Search"; + } + else { + btnSearch.Text = "Stopping..."; + btnSearch.Enabled = false; + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + } + } + + + + + /// + /// A form was disposed + /// + /// + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createSessionForm) + createSessionForm = null; + } + + + + + /// + /// We should create a new session. Display a dialog allowing the user to set + /// certain options + /// + private void btnCreate_Click(object sender, System.EventArgs e) { + this.DialogResult = DialogResult.None; + ((Button)sender).DialogResult = DialogResult.None; + if (createSessionForm == null) { + createSessionForm = new CreateSessionForm(peer,deviceAddress,connectionWizard); + createSessionForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (createSessionForm.ShowDialog(this) != DialogResult.Cancel) { + ((Button)sender).DialogResult = DialogResult.Yes; + this.DialogResult = DialogResult.Yes; + } + } + + + + + /// + /// Determine if we need to expire any of our currently listed servers + /// + private void UpdateTimer(object sender, System.Timers.ElapsedEventArgs e) { + lock (foundHosts) { + for (int i = 0; i< foundHosts.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)foundHosts[i]).LastFoundTime > EnumExpireThreshold) { + foundHosts.RemoveAt(i); + break; + } + } + for (int i = 0; i< lstSession.Items.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)lstSession.Items[i]).LastFoundTime > EnumExpireThreshold) { + lstSession.Items.RemoveAt(i); + break; + } + } + } + } + + + + + /// + /// Wait for a connect to complete + /// + private void ConnectTimer(object sender, System.Timers.ElapsedEventArgs e) { + if (connectEvent.WaitOne(0,false)) { // Wait for the Connect event to be fired + if (isConnected) { // Are we connected? + // Get rid of the timer + if (updateListTimer != null) + updateListTimer.Stop(); + + if (connectTimer != null) + connectTimer.Stop(); + + this.DialogResult = DialogResult.OK; + this.Close(); + return; + } + else { + MessageBox.Show(this,"Failed to connect. The error code was: \n" + resultCode.ToString() ,"Failed to connect",MessageBoxButtons.OK,MessageBoxIcon.Information); + // Restart our timer + updateListTimer.Start(); + } + } + } + + + + + /// + /// Fired when a connect complete message is received from DirectPlay. Fire + /// our event to notify the sample we've connected + /// + private void ConnectResult(object sender, ConnectCompleteEventArgs e) { + if (e.Message.ResultCode == 0) { + isConnected = true; + } + else + isConnected = false; + + resultCode = e.Message.ResultCode; + // Notify the timer that we've connected. + connectEvent.Set(); + } + + + + + /// + /// Join an existing session + /// + private void btnJoin_Click(object sender, System.EventArgs e) { + FindHostsResponseInformation dpInfo; + if (lstSession.SelectedItem == null) { + MessageBox.Show(this,"Please select a session before clicking join.","No session",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + // Turn off all buttons + btnCreate.Enabled = false; + btnCancel.Enabled = false; + btnJoin.Enabled = false; + btnSearch.Enabled = false; + amJoining = true; + // Stop our secondary timer + updateListTimer.Stop(); + dpInfo = ((FindHostsResponseInformation)lstSession.SelectedItem); + connectionWizard.SetUserInfo(); + peer.Connect(dpInfo.ApplicationDesc,dpInfo.sender, dpInfo.device,null,ConnectFlags.OkToQueryForAddressing); + // Now start our 'Connect' timer + connectTimer.Start(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/DPlayConnect_JoinForm.resx b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_JoinForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_JoinForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar2/DPlayConnect_ServiceProviderForm.cs b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_ServiceProviderForm.cs new file mode 100644 index 0000000..4884d84 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_ServiceProviderForm.cs @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_ServiceProviderForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +/// +/// This form allows you to choose a service provider and username for your +/// sample +/// +public class ChooseServiceProviderForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListBox lstSP; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtUser; + private System.Windows.Forms.Button btnCancel; + + + + + /// + /// Constructor + /// + public ChooseServiceProviderForm(Peer peerObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + // Fill up our listbox with the service providers + ServiceProviderInformation[] serviceProviders = peer.GetServiceProviders(false); + foreach (ServiceProviderInformation info in serviceProviders) + lstSP.Items.Add(info); + + txtUser.Text = null; + //Get the default username from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + try { + txtUser.Text = (string)regKey.GetValue("DirectPlayUserName", null); + lstSP.SelectedIndex = (int)regKey.GetValue("DirectPlaySPIndex", 0); + regKey.Close(); + } + catch { + txtUser.Text = null; + lstSP.SelectedIndex = 0; + } + } + else + lstSP.SelectedIndex = 0; + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + txtUser.Text = SystemInformation.UserName; + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.lstSP = new System.Windows.Forms.ListBox(); + this.txtUser = new System.Windows.Forms.TextBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lstSP + // + this.lstSP.Location = new System.Drawing.Point(12, 63); + this.lstSP.Name = "lstSP"; + this.lstSP.Size = new System.Drawing.Size(324, 147); + this.lstSP.TabIndex = 1; + this.lstSP.DoubleClick += new System.EventHandler(this.lstSP_DoubleClick); + // + // txtUser + // + this.txtUser.Location = new System.Drawing.Point(13, 20); + this.txtUser.MaxLength = 30; + this.txtUser.Name = "txtUser"; + this.txtUser.Size = new System.Drawing.Size(326, 20); + this.txtUser.TabIndex = 5; + this.txtUser.Text = ""; + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(181, 215); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 2; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(260, 215); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(11, 44); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(376, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Please pick your service provider:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(10, 5); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(327, 12); + this.label2.TabIndex = 4; + this.label2.Text = "User Name:"; + // + // ChooseServiceProviderForm + // + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(343, 246); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.txtUser, + this.label2, + this.btnCancel, + this.btnOK, + this.lstSP, + this.label1}); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChooseServiceProviderForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Choose Service Provider"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// They don't want to run this sample + /// + private void btnCancel_Click(object sender, System.EventArgs e) { + this.Dispose(); + } + + + + + /// + /// Same as clicking ok + /// + private void lstSP_DoubleClick(object sender, System.EventArgs e) { + // Call the ok button click handler + object[] parameters = new object[] { sender, e }; + this.BeginInvoke(new System.EventHandler(btnOK_Click), parameters); + } + + + + + /// + /// Select this username and service provider if valid, then continue the wizard + /// + private void btnOK_Click(object sender, System.EventArgs e) { + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + MessageBox.Show(this,"Please enter a username before clicking OK.","No Username",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + try { + connectionWizard.ServiceProvider = ((ServiceProviderInformation)lstSP.SelectedItem).Guid; + connectionWizard.Username = txtUser.Text; + } + catch { // We assume if we got here there was no selected item. + MessageBox.Show(this,"Please select a service provider before clicking OK.","No Service Provider",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlayUserName", txtUser.Text); + regKey.SetValue("DirectPlaySPIndex", lstSP.SelectedIndex); + regKey.Close(); + } + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/DPlayConnect_ServiceProviderForm.resx b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_ServiceProviderForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/DPlayConnect_ServiceProviderForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar2/DXUtil.cs b/Source Code updated 08-12-05/Spacewar2/DXUtil.cs new file mode 100644 index 0000000..5d0f0e5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/DXUtil.cs @@ -0,0 +1,285 @@ +//----------------------------------------------------------------------------- +// File: DXUtil.cs +// +// Desc: Shortcut macros and functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.IO; +using System.Runtime.InteropServices; + + + + +/// +/// Enumeration for various actions our timer can perform +/// +public enum DirectXTimer { + Reset, + Start, + Stop, + Advance, + GetAbsoluteTime, + GetApplicationTime, + GetElapsedTime +}; + + + + +/// +/// Generic utility functions for our samples +/// +public class DXUtil { + #region Timer Internal Stuff + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceCounter(ref long PerformanceCount); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("winmm.dll")] + public static extern int timeGetTime(); + private static bool isTimerInitialized = false; + private static bool m_bUsingQPF = false; + private static bool m_bTimerStopped = true; + private static long m_llQPFTicksPerSec = 0; + private static long m_llStopTime = 0; + private static long m_llLastElapsedTime = 0; + private static long m_llBaseTime = 0; + private static double m_fLastElapsedTime = 0.0; + private static double m_fBaseTime = 0.0; + private static double m_fStopTime = 0.0; + #endregion + + // Constants for SDK Path registry keys + private const string sdkPath = "Software\\Microsoft\\DirectX SDK"; + private const string sdkKey = "DX9J3SDK Samples Path"; + + private DXUtil() { /* Private Constructor */ } + + + + + /// + /// Returns the DirectX SDK media path + /// + public static string SdkMediaPath { + get { + Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sdkPath); + string sReg = string.Empty; + if (rKey != null) { + sReg = (string)rKey.GetValue(sdkKey); + rKey.Close(); + } + if (sReg != null) + sReg += @"\Media\"; + else + return string.Empty; + + return sReg; + } + } + + + + + /// + /// Performs timer opertations. Use the following commands: + /// + /// DirectXTimer.Reset - to reset the timer + /// DirectXTimer.Start - to start the timer + /// DirectXTimer.Stop - to stop (or pause) the timer + /// DirectXTimer.Advance - to advance the timer by 0.1 seconds + /// DirectXTimer.GetAbsoluteTime - to get the absolute system time + /// DirectXTimer.GetApplicationTime - to get the current time + /// DirectXTimer.GetElapsedTime - to get the time that elapsed between TIMER_GETELAPSEDTIME calls + /// + /// + public static float Timer(DirectXTimer command) { + if (!isTimerInitialized) { + isTimerInitialized = true; + + // Use QueryPerformanceFrequency() to get frequency of timer. If QPF is + // not supported, we will timeGetTime() which returns milliseconds. + long qwTicksPerSec = 0; + m_bUsingQPF = QueryPerformanceFrequency(ref qwTicksPerSec); + if (m_bUsingQPF) + m_llQPFTicksPerSec = qwTicksPerSec; + } + if (m_bUsingQPF) { + double time; + double fElapsedTime; + long qwTime = 0; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_llStopTime != 0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + qwTime = m_llStopTime; + else + QueryPerformanceCounter(ref qwTime); + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (qwTime - m_llLastElapsedTime) / (double) m_llQPFTicksPerSec; + m_llLastElapsedTime = qwTime; + return (float)fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + double fAppTime = (double) (qwTime - m_llBaseTime) / (double) m_llQPFTicksPerSec; + return (float)fAppTime; + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_llBaseTime = qwTime; + m_llLastElapsedTime = qwTime; + m_llStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_llBaseTime += qwTime - m_llStopTime; + m_llStopTime = 0; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_llStopTime = qwTime; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_llStopTime += m_llQPFTicksPerSec/10; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + time = qwTime / (double) m_llQPFTicksPerSec; + return (float)time; + } + + return -1.0f; // Invalid command specified + } + else { + // Get the time using timeGetTime() + double time; + double fElapsedTime; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_fStopTime != 0.0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + time = m_fStopTime; + else + time = timeGetTime() * 0.001; + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (time - m_fLastElapsedTime); + m_fLastElapsedTime = time; + return (float) fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + return (float) (time - m_fBaseTime); + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_fBaseTime = time; + m_fLastElapsedTime = time; + m_fStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_fBaseTime += time - m_fStopTime; + m_fStopTime = 0.0f; + m_fLastElapsedTime = time; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_fStopTime = time; + m_fLastElapsedTime = time; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_fStopTime += 0.1f; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + return (float) time; + } + + return -1.0f; // Invalid command specified + } + } + + + + + /// + /// Returns a valid path to a DXSDK media file + /// + /// Initial path to search + /// Filename we're searching for + /// Full path to the file + public static string FindMediaFile(string path, string filename) { + // First try to load the file in the full path + if (path != null) { + if (File.Exists(AppendDirectorySeparator(path) + filename)) + return AppendDirectorySeparator(path) + filename; + } + + // if not try to find the filename in the current folder. + if (File.Exists(filename)) + return AppendDirectorySeparator(Directory.GetCurrentDirectory()) + filename; + + // last, check if the file exists in the media directory + if (File.Exists(AppendDirectorySeparator(SdkMediaPath) + filename)) + return AppendDirectorySeparator(SdkMediaPath) + filename; + + throw new FileNotFoundException("Could not find this file.", filename); + } + + + + + /// + /// Returns a valid string with a directory separator at the end. + /// + private static string AppendDirectorySeparator(string filename) { + if (!filename.EndsWith(@"\")) + return filename + @"\"; + + return filename; + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/FontDraw.cs b/Source Code updated 08-12-05/Spacewar2/FontDraw.cs new file mode 100644 index 0000000..7f52c9c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/FontDraw.cs @@ -0,0 +1,75 @@ +using System; +using System.Drawing; + + +namespace SpaceWar { + class FontDraw { + public static LetterVector[] GetLetter(char letter, float scale) { + int index = FindLetter(letter); + + if (index == -1) + return null; + + int vectorStart = GetVectorStart(index); + int vectorEnd = vectorStart + VectorFontData.vectorCount[index] * 4; + + int size = (vectorEnd - vectorStart) / 4; + LetterVector[] vectors = new LetterVector[size]; + + int ind = 0; + for (int vector = vectorStart; vector < vectorEnd; vector += 4) { + int x1 = (int) Math.Round(VectorFontData.Vectors[vector] * scale); + int y1 = (int) Math.Round(-VectorFontData.Vectors[vector + 1] * scale); + int x2 = (int) Math.Round(VectorFontData.Vectors[vector + 2] * scale); + int y2 = (int) Math.Round(-VectorFontData.Vectors[vector + 3] * scale); + vectors[ind] = new LetterVector(new Point(x1, y1), new Point(x2, y2)); + ind++; + } + + return(vectors); + } + + public static void DrawLetter(Graphics g, char letter, float x, float y, float scale) { + int index = FindLetter(letter); + + if (index == -1) + return; + + + int vectorStart = GetVectorStart(index); + int vectorEnd = vectorStart + VectorFontData.vectorCount[index] * 4; + + + Pen pen = new Pen(Brushes.Red, 1.0f); + for (int vector = vectorStart; vector < vectorEnd; vector += 4) { + float x1 = x + VectorFontData.Vectors[vector] * scale; + float y1 = y - VectorFontData.Vectors[vector + 1] * scale; + float x2 = x + VectorFontData.Vectors[vector + 2] * scale; + float y2 = y - VectorFontData.Vectors[vector + 3] * scale; + + g.DrawLine(pen, x1, y1, x2, y2); + + } + + } + + public static int FindLetter(char letter) { + for (int index = 0; index < VectorFontData.order.Length; index++) { + if (VectorFontData.order[index] == letter) + return(index); + } + return(-1); + + } + + public static int GetVectorStart(int max) { + int start = 0; + + for (int index = 0; index < max; index++) { + start += VectorFontData.vectorCount[index] * 4; + } + return(start); + } + + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar2/GameClass.cs b/Source Code updated 08-12-05/Spacewar2/GameClass.cs new file mode 100644 index 0000000..92d89c5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/GameClass.cs @@ -0,0 +1,653 @@ +using System; +using System.Collections; +using System.Windows.Forms; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectDraw; +using Microsoft.DirectX.DirectInput; +using Microsoft.DirectX.DirectPlay; + +namespace SpaceWar { + + /// + /// The main game functions + /// + public class GameClass { + #region Fields and Properties + + private Control owner = null; + private MainClass mainClass = null; + + private GameSettings gameSettings = null; + + private int gravity; + private int gameSpeed; + private bool bounceBack; + private bool inverseGravity; + private bool blackHole; + + public int Gravity { get { return gravity;} set { gravity = value;} } + public int GameSpeed { get { return gameSpeed; } set { gameSpeed = value; } } + public bool BounceBack { get { return bounceBack; } set { bounceBack = value; } } + public bool InverseGravity { get { return inverseGravity; } set { inverseGravity = value; } } + public bool BlackHole { get { return blackHole; } set { blackHole = value; } } + + private Microsoft.DirectX.DirectDraw.Device localDevice = null; + + private float lastFrameTime = 0.0f; + + private Clipper localClipper = null; + private Surface surfacePrimary = null; + private Surface surfaceSecondary = null; + + private Stars stars; + private Sun sun; + private Point sunLocation = new Point(0,0); + public Point SunLocation { get { return sunLocation; } } + + private SoundHandler soundHandler; + private InputClass input; + private PlayClass netPeer; + private SplashScreen splash; + + + private Rectangle windowBounds; + + private Hashtable otherPlayers = new Hashtable(); + private Hashtable wordCache = new Hashtable(); + + public Color[] shipColors = new Color[] {Color.Purple, Color.Yellow, Color.Cyan, + Color.Red, Color.Green, Color.Blue}; + private SpaceWar.Ship ship; + + private LocalPlayer localPlayer; + + private GameStates gameState; + public GameStates GameState { get { return gameState; } set { gameState = value; } } + + + #endregion //Fields and Properties + + + #region Constructor and Initialization + + // The GameClass constructor. Here we create, but not show, the GameSettings form. + // The + public GameClass(MainClass mainClass, Control owner) { + gameState = GameStates.Loading; + this.owner = owner; + this.mainClass = mainClass; + splash = new SplashScreen(this); + splash.ShowDialog(); + gameSettings = new SpaceWar.GameSettings(this); + gameSettings.Location = new Point(owner.Bounds.Right,owner.Bounds.Top); + gravity = gameSettings.Gravity; + gameSpeed = gameSettings.GameSpeed; + bounceBack = gameSettings.Bounce; + inverseGravity = gameSettings.InverseGravity; + blackHole = gameSettings.BlackHole; + + localDevice = new Microsoft.DirectX.DirectDraw.Device(); + localDevice.SetCooperativeLevel(owner, Microsoft.DirectX.DirectDraw.CooperativeLevelFlags.Normal); + + DXUtil.Timer(DirectXTimer.Start); + + SpaceWar.RotatableShape.CreateShapes(); + + input = new InputClass(this.owner); + + soundHandler = new SoundHandler(this.owner); + + try { + netPeer = new PlayClass(this); + } + catch(DirectXException e) { + MessageBox.Show(owner,e.ToString()); + } + } + + public void Initialize(Rectangle bounds) { + owner.Bounds = bounds; + this.GameState = GameStates.Config; + this.windowBounds = bounds; + CreateSurfaces(); + + sunLocation.X = windowBounds.Left + windowBounds.Width / 2; + sunLocation.Y = windowBounds.Top + windowBounds.Height / 2; + + ship = new Ship(this); + Random random = new Random((int) DateTime.Now.Ticks); + ship.ScreenBounds = bounds; + ship.SetRandomPosition(true, sunLocation); + + if ((null != localPlayer.Name) && (localPlayer.Name.Length > 0)) + ship.HostName = localPlayer.Name.ToUpper(); + else + ship.HostName = System.Environment.MachineName.ToUpper(); + + stars = new Stars(bounds, Constants.NumStars); + sun = new Sun(sunLocation, Constants.SunSize); + + gameSettings.ControlsEnabled = true; + if (netPeer.InSession) { + if (netPeer.IsHost) { + gameSettings.ControlsEnabled = true; + netPeer.SendGameState(GameStates.Running); + } + else { + gameSettings.ControlsEnabled = false; + } + } + gameState = GameStates.Running; + } + + private void CreateSurfaces() { + SurfaceDescription desc = new SurfaceDescription(); + SurfaceCaps caps = new SurfaceCaps(); + + localClipper = new Clipper(localDevice); + localClipper.Window = owner; + + desc.SurfaceCaps.PrimarySurface = true; + if (null != surfacePrimary) + surfacePrimary.Dispose(); + surfacePrimary = new Surface(desc, localDevice); + surfacePrimary.Clipper = localClipper; + + desc.Clear(); + desc.SurfaceCaps.OffScreenPlain = true; + desc.Width = surfacePrimary.SurfaceDescription.Width; + desc.Height = surfacePrimary.SurfaceDescription.Height; + + if (null != surfaceSecondary) + surfaceSecondary.Dispose(); + surfaceSecondary = new Surface(desc, localDevice); + surfaceSecondary.FillStyle = 0; + } + + public Ship CreateNewShip(string hostName) { + Ship newShip; + newShip = new Ship(this); + newShip.ScreenBounds = windowBounds; + newShip.HostName = hostName; + return newShip; + } + + + #endregion //Constructor and Initialization + + + #region Network play message routines + + public void Pause() { + if (gameState == GameStates.Running) { + gameState = GameStates.Paused; + if (netPeer.IsHost) + netPeer.SendGameState(GameStates.Paused); + } + } + + public void UnPause() { + if (gameState == GameStates.Paused) { + gameState = GameStates.Running; + if (netPeer.IsHost) + netPeer.SendGameState(GameStates.Running); + } + } + + public void PlayerCreated(object sender, PlayerCreatedEventArgs pcea) { + Peer peer = (Peer) sender; + int playerID = pcea.Message.PlayerID; + PlayerInformation playerInfo = peer.GetPeerInformation(playerID); + + // See if the player that was just created is us + if (playerInfo.Local) { + localPlayer.ID = playerID; + localPlayer.Name = playerInfo.Name; + } + // If not, create a remote player + else { + Ship newShip = new Ship(this); + newShip.HostName = playerInfo.Name.ToUpper(); + newShip.State = (int)ShipState.Normal; + newShip.ScreenBounds = this.windowBounds; + RemotePlayer newPlayer = new RemotePlayer(playerID, playerInfo.Name, newShip); + lock (otherPlayers) { + otherPlayers.Add(playerID, newPlayer); + } + } + } + + public void PlayerDestroyed(object sender, PlayerDestroyedEventArgs pdea) { + // Remove this player from our list + // We lock the data here since it is shared across multiple threads. + int playerID = pdea.Message.PlayerID; + if (playerID != localPlayer.ID) { + lock (otherPlayers) { + otherPlayers.Remove(playerID); + } + } + } + + public void DataReceived(object sender, ReceiveEventArgs rea) { + int senderID = rea.Message.SenderID; + + //Ignore messages received before we are initialized + if ((gameState == GameStates.Loading) || + (gameState == GameStates.Config)) { + rea.Message.ReceiveData.Dispose(); + return; + } + + byte mType = (byte)rea.Message.ReceiveData.Read(typeof(byte)); + MessageType messageType = (MessageType)mType; + switch (messageType) { + case MessageType.PlayerUpdateID: { + + PlayerUpdate update = (PlayerUpdate)rea. + Message.ReceiveData.Read(typeof(PlayerUpdate)); + ShotUpdate shotUpdate = new ShotUpdate(); + shotUpdate.ShotPosition = new Vector2[Constants.NumShots]; + shotUpdate.ShotAge = new int[Constants.NumShots]; + + for (int i = 0; i < Constants.NumShots; i++) { + shotUpdate.ShotPosition[i] = + (Vector2)rea.Message.ReceiveData.Read(typeof(Vector2)); + shotUpdate.ShotAge[i] = + (int)rea.Message.ReceiveData.Read(typeof(int)); + } + + rea.Message.ReceiveData.Dispose(); + + + + lock (otherPlayers) { + object playerObject = otherPlayers[senderID]; + if (null == playerObject) + return; + RemotePlayer player = (RemotePlayer) playerObject; + + Shot[] shotArray = new Shot[Constants.NumShots]; + for (int i = 0; i < Constants.NumShots; i++) { + shotArray[i] = new Shot(); + shotArray[i].Position = shotUpdate.ShotPosition[i]; + shotArray[i].Age = shotUpdate.ShotAge[i]; + } + player.Ship.ShotHandler.SetShotArray(shotArray); + + player.Ship.Position = update.ShipPosition; + player.Ship.Outline = update.Outline; + player.Ship.Velocity = update.ShipVelocity; + player.Ship.State = update.State; + player.Ship.WaitCount = update.WaitCount; + player.Ship.DeathCount = update.DeathCount; + player.Ship.FlameIndex = update.FlameIndex; + player.Ship.Sounds = (Sounds)update.Sounds; + player.Ship.Score = update.Score; + + player.UpdateTime = DateTime.Now; + player.Active = true; + + otherPlayers[senderID] = player; + } + + break; + } + case MessageType.GameParamUpdateID: { + GameParamUpdate update = (GameParamUpdate)rea.Message. + ReceiveData.Read(typeof(GameParamUpdate)); + rea.Message.ReceiveData.Dispose(); + gravity = update.Gravity; + gameSpeed = update.GameSpeed; + + if (update.BounceBack != 0) + bounceBack = true; + else + bounceBack = false; + + if (update.InverseGravity != 0) + inverseGravity = true; + else + inverseGravity = false; + + if (update.BlackHole != 0) + blackHole = true; + else + blackHole = false; + Size newWindowSize = update.WindowSize; + Rectangle newBounds = new + Rectangle(this.windowBounds.Location, newWindowSize); + //Initialize(newBounds); + break; + } + case MessageType.Add1ToScore: { + rea.Message.ReceiveData.Dispose(); + ship.Score += 1; + break; + } + case MessageType.Add2ToScore: { + rea.Message.ReceiveData.Dispose(); + ship.Score += 2; + break; + } + case MessageType.GamePaused: { + rea.Message.ReceiveData.Dispose(); + gameState = GameStates.Paused; + break; + } + case MessageType.GameRunning: { + rea.Message.ReceiveData.Dispose(); + if (gameState == GameStates.Paused) + gameState = GameStates.Running; + break; + } + } + } + + public void SendMyPlayerUpdate() { + + PlayerUpdate update = new PlayerUpdate(); + update.ShipPosition = ship.Position; + update.Outline = ship.Outline; + update.ShipVelocity = ship.Velocity; + update.State = ship.State; + update.WaitCount = ship.WaitCount; + update.DeathCount = ship.DeathCount; + update.FlameIndex = ship.FlameIndex; + update.Sounds = (int)ship.Sounds; + update.Score = ship.Score; + + ShotUpdate shotUpdate = new ShotUpdate(); + shotUpdate.ShotAge = new int[Constants.NumShots]; + shotUpdate.ShotPosition = new Vector2[Constants.NumShots]; + + Shot[] shotArray = ship.ShotHandler.GetShotArray(); + for (int i = 0; i < Constants.NumShots; i++) { + shotUpdate.ShotPosition[i] = shotArray[i].Position; + shotUpdate.ShotAge[i] = shotArray[i].Age; + } + netPeer.SendPlayerUpdate(update, shotUpdate); + } + + public void SendGameParamUpdate() { + if ((null == netPeer) || (otherPlayers.Count < 1)) + return; + GameParamUpdate update = new GameParamUpdate(); + update.Gravity = gravity; + update.GameSpeed = gameSpeed; + if (bounceBack) + update.BounceBack = 1; + else + update.BounceBack = 0; + + if (inverseGravity) + update.InverseGravity = 1; + else + update.InverseGravity = 0; + + if (blackHole) + update.BlackHole = 1; + else + update.BlackHole = 0; + + update.WindowSize = windowBounds.Size; + + netPeer.SendGameParamUpdate(update); + } + + public void SendPointToAllPlayers() { + netPeer.SendScorePointToAll(); + } + + public void SendTwoPointsToPlayer(int player) { + netPeer.SendTwoPointsToPlayer(player); + } + + + #endregion //Network + + + #region Input and Audio + private void HandleKeys() { + KeyboardState keyboardState = input.GetKBState(); + + + if (null == keyboardState) + return; + + if (keyboardState[Key.LeftArrow]) + ship.RotateLeft(); + if (keyboardState[Key.RightArrow]) + ship.RotateRight(); + + ship.SetThrust(keyboardState[Key.UpArrow]); + + if (keyboardState[Key.LeftControl] || keyboardState[Key.RightControl]) + ship.Shoot(); + + if (keyboardState[Key.Space]) + ship.EnterHyper(); + + // Game configuration / Pause key. The configuration controls are disabled if we are connected to another host. + if (keyboardState[Key.F2]) { + Pause(); + + if (!netPeer.InSession || netPeer.IsHost) + gameSettings.ControlsEnabled = true; + else + gameSettings.ControlsEnabled = false; + + gameSettings.Show(); + } + + // Sound keys + if (keyboardState[Key.F5]) { + ship.Sounds |= Sounds.Taunt; + } + + if (keyboardState[Key.F6]) { + ship.Sounds |= Sounds.Dude1; + } + + if (keyboardState[Key.F7]) { + ship.Sounds |= Sounds.Dude2; + } + + if (keyboardState[Key.F8]) { + ship.Sounds |= Sounds.Dude3; + } + + if (keyboardState[Key.F9]) { + ship.Sounds |= Sounds.Dude4; + } + + if (keyboardState[Key.F10]) { + ship.Sounds |= Sounds.Dude5; + } + + //Exit if escape is pressed + if (keyboardState[Key.Escape]) { + End(); + } + + } + + private void PlaySounds(Sounds otherShipSounds) { + if (soundHandler != null) { + Sounds soundsToPlay = ship.Sounds; + + if ((otherShipSounds & Sounds.ShipExplode) != 0) + soundsToPlay |= Sounds.OtherShipExplode; + + if ((otherShipSounds & Sounds.ShipFire) != 0) + soundsToPlay |= Sounds.OtherShipFire; + + if ((otherShipSounds & Sounds.ShipThrust) != 0) + soundsToPlay |= Sounds.OtherShipThrust; + + if ((otherShipSounds & Sounds.ShipAppear) != 0) + soundsToPlay |= Sounds.OtherShipAppear; + + Sounds directMap = + Sounds.ShipHyper | + Sounds.Taunt | + Sounds.Dude1 | + Sounds.Dude2 | + Sounds.Dude3 | + Sounds.Dude4 | + Sounds.Dude5; + + Sounds soundsToCopy = otherShipSounds & directMap; + + soundsToPlay |= soundsToCopy; + + soundHandler.Play(soundsToPlay); + } + } + + #endregion Input and Audio + + + #region Main gameloop and rendering + public void WriteScores() { + Point location = new Point(Constants.ScoreXOrigin + windowBounds.X, + Constants.ScoreYOrigin + windowBounds.Y); + Point scoreLocation = location; + scoreLocation.X += Constants.ScoreOffset; + + ship.DrawHostName(surfaceSecondary, location, 0xFFFFFF); // this ship is white... + + Word word = GetWordFromScore(ship.Score.ToString()); + int color = 0xFFFFFF; + word.Draw(surfaceSecondary, color, Constants.LetterSpacing, scoreLocation); + + int shipIndex = 0; + lock (otherPlayers) { + foreach (RemotePlayer player in otherPlayers.Values) { + if (!player.Active) + continue; + + location.Y += Constants.ScoreVerticalSpacing; + scoreLocation.Y += Constants.ScoreVerticalSpacing; + player.Ship.DrawHostName(surfaceSecondary, location, shipColors[shipIndex].ToArgb()); + word = GetWordFromScore(player.Ship.Score.ToString()); + word.Draw(surfaceSecondary, shipColors[shipIndex].ToArgb(), Constants.LetterSpacing, scoreLocation); + + shipIndex = (shipIndex + 1) % shipColors.Length; + } + } + } + + Word GetWordFromScore(string score) { + Word word; + + word = (Word) wordCache[score]; + if (word != null) + return word; + + word = new Word(score, Constants.LetterSize); + wordCache.Add(score, word); + return word; + } + + public void MainLoop() { + float minFrameTime = gameSettings.GameSpeed * 0.005f; + + if (lastFrameTime < minFrameTime) { + lastFrameTime += DXUtil.Timer(DirectXTimer.GetElapsedTime); + return; + } + lastFrameTime = 0.0f; + try { + if (gameState == GameStates.Paused) { + Word paused = new Word("PAUSED", Constants.LetterSize * 1.5f); + paused.Draw(surfaceSecondary, Color.White.ToArgb(), + Constants.LetterSpacing * 2, + new Point(windowBounds.Left + 50, windowBounds.Top + 50)); + surfacePrimary.Draw(surfaceSecondary, DrawFlags.DoNotWait); + } + // Clear the ship's sound flags + ship.Sounds = (Sounds) 0; + + // process input + HandleKeys(); + + + if (gameState != GameStates.Running) return; + + surfaceSecondary.ColorFill(Color.Black); + surfaceSecondary.DrawWidth = 1; + + // update my position, and tell others about it... + ship.UpdatePosition(); + + // update my state, and draw myself... + ship.UpdateState(); + + //If there are other players, send them our ship info + if (netPeer.InSession && otherPlayers.Count > 0) + SendMyPlayerUpdate(); + + WriteScores(); + stars.Draw(surfaceSecondary); + + int shipColor = Color.White.ToArgb(); + int shotColor = Color.White.ToArgb(); + ship.Draw(surfaceSecondary, shipColor, shotColor); + + // Handle other ships + // walk through all other players. For each player + // 1) draw the ship + // 2) check to see whether the other ship has killed us + // 3) figure the score + // 4) see if we need to time-out this ship + int shipIndex = 0; + Sounds otherShipSounds = (Sounds) 0; + DateTime now = DateTime.Now; + lock (otherPlayers) { + foreach (RemotePlayer player in otherPlayers.Values) { + if (!player.Active) + continue; + + player.Ship.Draw(surfaceSecondary, shipColors[shipIndex].ToArgb(), shotColor); + shipIndex = (shipIndex + 1) % shipColors.Length; + ship.TestShip(player); + otherShipSounds |= player.Ship.Sounds; + + // if we haven't gotten an update in a while, + // mark the player as inactive... + TimeSpan delta = now - player.UpdateTime; + if (delta.Seconds > Constants.RemoteTickTimeout) { + player.Active = false; + } + } + } + + // Draw the sun only if the "Black Hole" option isn't enabled + if (!blackHole) + sun.Draw(surfaceSecondary); + + surfacePrimary.Draw(surfaceSecondary, DrawFlags.DoNotWait); + PlaySounds(otherShipSounds); + } + + catch(SurfaceLostException) { + // The surface can be lost if power saving + // mode kicks in, or any other number of reasons. + CreateSurfaces(); + } + } + + #endregion + + + #region Cleanup + + public void End() { + gameState = GameStates.Exiting; + mainClass.EndGame(); + } + + #endregion //cleanup + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar2/GameParamUpdateStruct.cs b/Source Code updated 08-12-05/Spacewar2/GameParamUpdateStruct.cs new file mode 100644 index 0000000..c50cee2 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/GameParamUpdateStruct.cs @@ -0,0 +1,11 @@ +using System; +using System.Drawing; + +public struct GameParamUpdate { + public int Gravity; + public int GameSpeed; + public byte BounceBack; + public byte InverseGravity; + public byte BlackHole; + public Size WindowSize; +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar2/GameSettings.cs b/Source Code updated 08-12-05/Spacewar2/GameSettings.cs new file mode 100644 index 0000000..35cdf58 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/GameSettings.cs @@ -0,0 +1,259 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + +namespace SpaceWar { + /// + /// The GameSettings Form allows us to change the options of the game. + /// + public class GameSettings : System.Windows.Forms.Form { + #region Fields and Properties + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TrackBar gravitySlider; + private System.Windows.Forms.TrackBar gameSpeedSlider; + private System.Windows.Forms.CheckBox bounceBack; + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.CheckBox inverseGravity; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public int Gravity { get { return gravitySlider.Value; } } + public int GameSpeed { get { return gameSpeedSlider.Value; } } + public bool Bounce { get { return bounceBack.Checked; } } + public bool InverseGravity { get { return inverseGravity.Checked; } } + public bool BlackHole { get { return blackHole.Checked; } } + + private bool controlsEnabled = true; + private System.Windows.Forms.Label lockedLabel; + private System.Windows.Forms.CheckBox blackHole; + + public bool ControlsEnabled { get { return controlsEnabled; } set { EnableControls(value);} } + + private GameClass game = null; + + #endregion + + #region Constructor + + public GameSettings(GameClass game) { + this.game = game; + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // Set up the event handler + this.gameSpeedSlider.ValueChanged += new EventHandler(ControlChanged); + this.gravitySlider.ValueChanged +=new EventHandler(ControlChanged); + this.bounceBack.CheckedChanged += new EventHandler(ControlChanged); + this.inverseGravity.CheckedChanged +=new EventHandler(ControlChanged); + this.blackHole.CheckedChanged += new EventHandler(ControlChanged); + } + #endregion // Constructor + + #region Logic routines for the form's controls + + private void EnableControls (bool enable) { + gravitySlider.Enabled = enable; + gameSpeedSlider.Enabled = enable; + bounceBack.Enabled = enable; + inverseGravity.Enabled = enable; + blackHole.Enabled = enable; + controlsEnabled = enable; + lockedLabel.Visible = !enable; + if (enable) { + label1.ForeColor = Color.Yellow; + label2.ForeColor = Color.Yellow; + } + else { + label1.ForeColor = Color.LightGray; + label2.ForeColor = Color.LightGray; + } + } + + private void ControlChanged (object sender, EventArgs e) { + if (sender == gravitySlider) + game.Gravity = gravitySlider.Value; + + if (sender == gameSpeedSlider) + game.GameSpeed = gameSpeedSlider.Value; + + if (sender == inverseGravity) + game.InverseGravity = inverseGravity.Checked; + + if (sender == bounceBack) + game.BounceBack = bounceBack.Checked; + + if (sender == blackHole) + game.BlackHole = blackHole.Checked; + } + #endregion // Control logic + + #region Cleanup + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + private void Close_Click(object sender, System.EventArgs e) { + this.Hide(); + + // tell the other players about our settings change + game.SendGameParamUpdate(); + game.UnPause(); + } + + #endregion + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.gravitySlider = new System.Windows.Forms.TrackBar(); + this.label1 = new System.Windows.Forms.Label(); + this.gameSpeedSlider = new System.Windows.Forms.TrackBar(); + this.bounceBack = new System.Windows.Forms.CheckBox(); + this.closeButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.inverseGravity = new System.Windows.Forms.CheckBox(); + this.lockedLabel = new System.Windows.Forms.Label(); + this.blackHole = new System.Windows.Forms.CheckBox(); + ((System.ComponentModel.ISupportInitialize)(this.gravitySlider)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.gameSpeedSlider)).BeginInit(); + this.SuspendLayout(); + // + // gravitySlider + // + this.gravitySlider.LargeChange = 1000; + this.gravitySlider.Location = new System.Drawing.Point(24, 16); + this.gravitySlider.Maximum = 10000; + this.gravitySlider.Name = "gravitySlider"; + this.gravitySlider.Size = new System.Drawing.Size(144, 45); + this.gravitySlider.SmallChange = 100; + this.gravitySlider.TabIndex = 1; + this.gravitySlider.TickFrequency = 1000; + // + // label1 + // + this.label1.ForeColor = System.Drawing.Color.Yellow; + this.label1.Location = new System.Drawing.Point(48, 56); + this.label1.Name = "label1"; + this.label1.TabIndex = 2; + this.label1.Text = "Gravity"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // gameSpeedSlider + // + this.gameSpeedSlider.LargeChange = 2; + this.gameSpeedSlider.Location = new System.Drawing.Point(200, 16); + this.gameSpeedSlider.Minimum = 1; + this.gameSpeedSlider.Name = "gameSpeedSlider"; + this.gameSpeedSlider.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.gameSpeedSlider.Size = new System.Drawing.Size(144, 45); + this.gameSpeedSlider.TabIndex = 2; + this.gameSpeedSlider.Value = 4; + // + // bounceBack + // + this.bounceBack.ForeColor = System.Drawing.Color.Yellow; + this.bounceBack.Location = new System.Drawing.Point(48, 128); + this.bounceBack.Name = "bounceBack"; + this.bounceBack.TabIndex = 4; + this.bounceBack.Text = "Bounce Back"; + // + // closeButton + // + this.closeButton.BackColor = System.Drawing.Color.Black; + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.ForeColor = System.Drawing.Color.Yellow; + this.closeButton.Location = new System.Drawing.Point(256, 153); + this.closeButton.Name = "closeButton"; + this.closeButton.TabIndex = 5; + this.closeButton.Text = "Close"; + this.closeButton.Click += new System.EventHandler(this.Close_Click); + // + // label2 + // + this.label2.ForeColor = System.Drawing.Color.Yellow; + this.label2.Location = new System.Drawing.Point(222, 56); + this.label2.Name = "label2"; + this.label2.TabIndex = 6; + this.label2.Text = "Game Speed"; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // inverseGravity + // + this.inverseGravity.ForeColor = System.Drawing.Color.Yellow; + this.inverseGravity.Location = new System.Drawing.Point(48, 104); + this.inverseGravity.Name = "inverseGravity"; + this.inverseGravity.TabIndex = 3; + this.inverseGravity.Text = "Inverse Gravity"; + // + // lockedLabel + // + this.lockedLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.lockedLabel.ForeColor = System.Drawing.Color.FromArgb(((System.Byte)(192)), ((System.Byte)(0)), ((System.Byte)(0))); + this.lockedLabel.Location = new System.Drawing.Point(40, 80); + this.lockedLabel.Name = "lockedLabel"; + this.lockedLabel.Size = new System.Drawing.Size(296, 32); + this.lockedLabel.TabIndex = 7; + this.lockedLabel.Text = "Settings Locked - connected to host."; + this.lockedLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // blackHole + // + this.blackHole.ForeColor = System.Drawing.Color.Yellow; + this.blackHole.Location = new System.Drawing.Point(48, 152); + this.blackHole.Name = "blackHole"; + this.blackHole.Size = new System.Drawing.Size(168, 24); + this.blackHole.TabIndex = 8; + this.blackHole.Text = "Black Hole (Invisible Sun)"; + // + // GameSettings + // + this.AcceptButton = this.closeButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.Black; + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(366, 194); + this.ControlBox = false; + this.Controls.Add(this.blackHole); + this.Controls.Add(this.inverseGravity); + this.Controls.Add(this.label2); + this.Controls.Add(this.closeButton); + this.Controls.Add(this.bounceBack); + this.Controls.Add(this.gameSpeedSlider); + this.Controls.Add(this.label1); + this.Controls.Add(this.gravitySlider); + this.Controls.Add(this.lockedLabel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximumSize = new System.Drawing.Size(376, 230); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(376, 230); + this.Name = "GameSettings"; + this.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Text = "Game Settings"; + ((System.ComponentModel.ISupportInitialize)(this.gravitySlider)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.gameSpeedSlider)).EndInit(); + this.ResumeLayout(false); + + } + #endregion + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/GameSettings.resx b/Source Code updated 08-12-05/Spacewar2/GameSettings.resx new file mode 100644 index 0000000..fb3d2e7 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/GameSettings.resx @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + GameSettings + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar2/GameStates.cs b/Source Code updated 08-12-05/Spacewar2/GameStates.cs new file mode 100644 index 0000000..e0cbe79 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/GameStates.cs @@ -0,0 +1,11 @@ +using System; + +public enum GameStates { + Loading, + Running, + Config, + Paused, + HelpScreen, + Exiting +} + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar2/HelpScreen.cs b/Source Code updated 08-12-05/Spacewar2/HelpScreen.cs new file mode 100644 index 0000000..ff18db0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/HelpScreen.cs @@ -0,0 +1,114 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.IO; + +namespace SpaceWar { + /// + /// Summary description for HelpScreen. + /// + public class HelpScreen : System.Windows.Forms.Form { + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.TextBox helpText; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public HelpScreen() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + string helpFile = @".\Media\Help.txt"; + if (File.Exists(helpFile)) { + StreamReader sr; + try { + sr = new StreamReader(helpFile); + helpText.Text = sr.ReadToEnd(); + sr.Close(); + } + catch ( Exception e ) { + helpText.Text = e.ToString(); + } + + } + else { + helpText.Text = "Unable to locate " + helpFile.ToString(); + } + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.closeButton = new System.Windows.Forms.Button(); + this.helpText = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // closeButton + // + this.closeButton.BackColor = System.Drawing.Color.Black; + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.Dock = System.Windows.Forms.DockStyle.Bottom; + this.closeButton.ForeColor = System.Drawing.Color.Red; + this.closeButton.Location = new System.Drawing.Point(0, 615); + this.closeButton.Name = "closeButton"; + this.closeButton.Size = new System.Drawing.Size(616, 23); + this.closeButton.TabIndex = 0; + this.closeButton.Text = "Close"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // helpText + // + this.helpText.BackColor = System.Drawing.Color.Black; + this.helpText.Dock = System.Windows.Forms.DockStyle.Fill; + this.helpText.Font = new System.Drawing.Font("Verdana", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.helpText.ForeColor = System.Drawing.Color.Red; + this.helpText.Location = new System.Drawing.Point(0, 0); + this.helpText.Multiline = true; + this.helpText.Name = "helpText"; + this.helpText.ReadOnly = true; + this.helpText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.helpText.Size = new System.Drawing.Size(616, 615); + this.helpText.TabIndex = 1; + this.helpText.TabStop = false; + this.helpText.Text = ""; + // + // HelpScreen + // + this.AcceptButton = this.closeButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(616, 638); + this.Controls.Add(this.helpText); + this.Controls.Add(this.closeButton); + this.Name = "HelpScreen"; + this.Text = "SpaceWar! Help"; + this.ResumeLayout(false); + + } + #endregion + + private void closeButton_Click(object sender, System.EventArgs e) { + this.Close(); + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/HelpScreen.resx b/Source Code updated 08-12-05/Spacewar2/HelpScreen.resx new file mode 100644 index 0000000..77df1c3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/HelpScreen.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + HelpScreen + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar2/Letter.cs b/Source Code updated 08-12-05/Spacewar2/Letter.cs new file mode 100644 index 0000000..88c31d8 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/Letter.cs @@ -0,0 +1,48 @@ +namespace SpaceWar { + using System; + using System.Drawing; + using System.Collections; + using Microsoft.DirectX; + using Microsoft.DirectX.DirectDraw; + + public enum LetterState { + Bouncing, + Normal, + Exploding, + Dead, + } + + /// + /// Summary description for Letter. + /// + public class Letter { + char letter; + LetterVector[] vectors; + Point lastLocation; + + public Letter(char letter) { + this.letter = letter; + } + + public void SetLetter(float scale) { + vectors = FontDraw.GetLetter(letter, scale); + } + + public void Draw(Surface surface, int color, Point location) { + if (vectors == null) + return; + + if (location != lastLocation) { + foreach (LetterVector vector in vectors) { + vector.Offset = location; + } + lastLocation = location; + } + + surface.ForeColor = Color.FromArgb(color); + foreach (LetterVector vector in vectors) { + vector.Draw(surface); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/LetterVector.cs b/Source Code updated 08-12-05/Spacewar2/LetterVector.cs new file mode 100644 index 0000000..07103af --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/LetterVector.cs @@ -0,0 +1,46 @@ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectDraw; + +namespace SpaceWar { + public class LetterVector { + Point end1; + Point end2; + Point offset; // offset from origin + + public LetterVector(Point point1, Point point2) { + end1 = point1; + end2 = point2; + offset = new Point(); + } + + public override string ToString() { + return + end1.ToString() + " " + + end2.ToString(); + } + + public Point Offset { + get { + return offset; + } + set { + if (offset == value) + return; + + // update the endpoints to the new offset... + end1.X = end1.X - offset.X + value.X; + end1.Y = end1.Y - offset.Y + value.Y; + end2.X = end2.X - offset.X + value.X; + end2.Y = end2.Y - offset.Y + value.Y; + offset = value; + } + } + + public void Draw(Surface surface) { + surface.DrawLine(end1.X, end1.Y, end2.X, end2.Y); + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/Line.cs b/Source Code updated 08-12-05/Spacewar2/Line.cs new file mode 100644 index 0000000..3adfb10 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/Line.cs @@ -0,0 +1,59 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectDraw; + +namespace SpaceWar { + /// + /// Summary description for Line. + /// + public class Line { + Point end1; + Point end2; + Point offset; + bool visible = true; + + public Line(Point end1, Point end2) { + this.end1 = end1; + this.end2 = end2; + } + + public Point End1 { + get { + return end1; + } + } + + public Point End2 { + get { + return end2; + } + } + + public Point Offset { + get { + return offset; + } + set { + offset = value; + } + } + + public bool Visible { + get { + return visible; + } + set { + visible = value; + } + } + + public void Draw(Surface surface) { + if (!visible) + return; + + surface.DrawLine(end1.X + offset.X, end1.Y + offset.Y, + end2.X + offset.X, end2.Y + offset.Y); + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/LocalPlayerStruct.cs b/Source Code updated 08-12-05/Spacewar2/LocalPlayerStruct.cs new file mode 100644 index 0000000..52a91b6 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/LocalPlayerStruct.cs @@ -0,0 +1,8 @@ +using System; + +public struct LocalPlayer { + public int ID; + public string Name; + public LocalPlayer(int id, string n) { + ID = id; Name = n; } +} diff --git a/Source Code updated 08-12-05/Spacewar2/Media/Haha.wav b/Source Code updated 08-12-05/Spacewar2/Media/Haha.wav new file mode 100644 index 0000000..4f9bd3a Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/Haha.wav differ diff --git a/Source Code updated 08-12-05/Spacewar2/Media/Help.txt b/Source Code updated 08-12-05/Spacewar2/Media/Help.txt new file mode 100644 index 0000000..f9cd3bb --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/Media/Help.txt @@ -0,0 +1,29 @@ +Spacewar is a head to head space battle. When the game starts, you configure your network settings and either choose to host a new game, or join a game that is already in session. + +Hosting a game: +1) Start the game and select ‘Configure Network and Play’. +2) Enter your user name, and the network service you wish to use. +3) Click on ‘Create’ on the ‘Join or Create session screen’. +4) Enter a session name and select ‘OK’. +5) Wait for others to join your game. + +Joining a game in session: +1) Start the game and select ‘Configure Network and Play’. +2) Enter your user name, and the network service you wish to use. +3) Click on ‘Start Search’ on the ‘Join or Create session screen’. +4) If you know the name of the computer hosting the session, enter it in the ‘Hostname’ box and press OK. If you don’t know the computer name, leave the ‘Hostname’ box blank and press OK to scan for all Spacewar sessions. +5) Highlight the session, and click on ‘Join’. +6) The game will start. + +Control Keys: +Esc - Exit +Left Arrow - Rotate Left +Right Arrow - Rotate Right +Up Arrow - Thrust Forward +CTRL - Fire +Spacebar - Hyperspace +F2 - Configure game options (host mode only) +F5 - Taunt +F6-F10 - Dude! + + diff --git a/Source Code updated 08-12-05/Spacewar2/Media/dude_quest1.wav b/Source Code updated 08-12-05/Spacewar2/Media/dude_quest1.wav new file mode 100644 index 0000000..591ee39 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/dude_quest1.wav differ diff --git a/Source Code updated 08-12-05/Spacewar2/Media/dude_quest2.wav b/Source Code updated 08-12-05/Spacewar2/Media/dude_quest2.wav new file mode 100644 index 0000000..496ed98 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/dude_quest2.wav differ diff --git a/Source Code updated 08-12-05/Spacewar2/Media/dude_quest3.wav b/Source Code updated 08-12-05/Spacewar2/Media/dude_quest3.wav new file mode 100644 index 0000000..f6e26ee Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/dude_quest3.wav differ diff --git a/Source Code updated 08-12-05/Spacewar2/Media/dude_quest4.wav b/Source Code updated 08-12-05/Spacewar2/Media/dude_quest4.wav new file mode 100644 index 0000000..cba80b9 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/dude_quest4.wav differ diff --git a/Source Code updated 08-12-05/Spacewar2/Media/dude_quest5.wav b/Source Code updated 08-12-05/Spacewar2/Media/dude_quest5.wav new file mode 100644 index 0000000..3af2f25 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/dude_quest5.wav differ diff --git a/Source Code updated 08-12-05/Spacewar2/Media/dude_quest6.wav b/Source Code updated 08-12-05/Spacewar2/Media/dude_quest6.wav new file mode 100644 index 0000000..e16d031 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/dude_quest6.wav differ diff --git a/Source Code updated 08-12-05/Spacewar2/Media/engine.wav b/Source Code updated 08-12-05/Spacewar2/Media/engine.wav new file mode 100644 index 0000000..a1110f8 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/engine.wav differ diff --git a/Source Code updated 08-12-05/Spacewar2/Media/engine_other.wav b/Source Code updated 08-12-05/Spacewar2/Media/engine_other.wav new file mode 100644 index 0000000..e6d471e Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/engine_other.wav differ diff --git a/Source Code updated 08-12-05/Spacewar2/Media/explode.wav b/Source Code updated 08-12-05/Spacewar2/Media/explode.wav new file mode 100644 index 0000000..30b0ffb Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/explode.wav differ diff --git a/Source Code updated 08-12-05/Spacewar2/Media/explode_other.wav b/Source Code updated 08-12-05/Spacewar2/Media/explode_other.wav new file mode 100644 index 0000000..b80b99a Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/explode_other.wav differ diff --git a/Source Code updated 08-12-05/Spacewar2/Media/hypercharge.wav b/Source Code updated 08-12-05/Spacewar2/Media/hypercharge.wav new file mode 100644 index 0000000..b1333cf Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/hypercharge.wav differ diff --git a/Source Code updated 08-12-05/Spacewar2/Media/laser2.wav b/Source Code updated 08-12-05/Spacewar2/Media/laser2.wav new file mode 100644 index 0000000..ac6ba37 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/laser2.wav differ diff --git a/Source Code updated 08-12-05/Spacewar2/Media/laser2_other.wav b/Source Code updated 08-12-05/Spacewar2/Media/laser2_other.wav new file mode 100644 index 0000000..9553d6d Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/laser2_other.wav differ diff --git a/Source Code updated 08-12-05/Spacewar2/Media/sci fi bass.wav b/Source Code updated 08-12-05/Spacewar2/Media/sci fi bass.wav new file mode 100644 index 0000000..a956ff0 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/sci fi bass.wav differ diff --git a/Source Code updated 08-12-05/Spacewar2/Media/splash.png b/Source Code updated 08-12-05/Spacewar2/Media/splash.png new file mode 100644 index 0000000..e7a38d4 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar2/Media/splash.png differ diff --git a/Source Code updated 08-12-05/Spacewar2/MessageType.cs b/Source Code updated 08-12-05/Spacewar2/MessageType.cs new file mode 100644 index 0000000..c3a73b2 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/MessageType.cs @@ -0,0 +1,10 @@ +using System; + +public enum MessageType { + PlayerUpdateID, + GameParamUpdateID, + GamePaused, + GameRunning, + Add1ToScore, + Add2ToScore +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar2/MyPointF.cs b/Source Code updated 08-12-05/Spacewar2/MyPointF.cs new file mode 100644 index 0000000..4d8e2dc --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/MyPointF.cs @@ -0,0 +1,94 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; + +namespace SpaceWar { + /// + /// Extends the functionality of the PointF class to include vector operations and rotation. + /// + public struct MyPointF { + PointF point; + + public MyPointF(float x, float y) { + point = new PointF(x, y); + } + + public static MyPointF operator+(MyPointF p1, MyPointF p2) { + return(new MyPointF(p1.point.X + p2.point.X, + p1.point.Y + p2.point.Y)); + } + + public static MyPointF operator-(MyPointF p1, MyPointF p2) { + return(new MyPointF(p1.point.X - p2.point.X, + p1.point.Y - p2.point.Y)); + } + + public static MyPointF operator+(MyPointF p1, Vector2 vec) { + return(new MyPointF(p1.point.X + vec.X, + p1.point.Y + vec.Y)); + } + + public MyPointF Rotate(float angleInDegrees) { + // rotate the point around zero... + double angleInRadians = angleInDegrees * (Math.PI / 180.0f); + float newX = (float)(point.X * Math.Cos(angleInRadians) - point.Y * Math.Sin(angleInRadians)); + float newY = (float)(point.X * Math.Sin(angleInRadians) + point.Y * Math.Cos(angleInRadians)); + + return (new MyPointF(newX, newY)); + } + + public static MyPointF operator/(MyPointF point, float divisor) { + return(new MyPointF(point.point.X / divisor, point.point.Y / divisor)); + } + + public static MyPointF operator*(MyPointF point, float multiplier) { + return(new MyPointF(point.point.X * multiplier, point.point.Y * multiplier)); + } + + public float X { + get { + return(point.X); + } + set { + point.X = value; + } + } + + public float Y { + get { + return(point.Y); + } + set { + point.Y = value; + } + } + + public static implicit operator PointF(MyPointF point) { + return(point.point); + } + + public static implicit operator MyPointF(PointF point) { + return(new MyPointF(point.X, point.Y)); + } + + public static implicit operator MyPointF(Point point) { + return(new MyPointF(point.X, point.Y)); + } + + public float Length { + get { + return((float) Math.Sqrt(point.X * point.X + point.Y * point.Y)); + } + } + + public static float Distance(MyPointF pt1, MyPointF pt2) { + MyPointF delta = pt1 - pt2; + return (float) Math.Sqrt(delta.X * delta.X + delta.Y * delta.Y); + } + + public override string ToString() { + return(String.Format("({0}, {1})", + point.X, point.Y)); + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/PlayerUpdateStruct.cs b/Source Code updated 08-12-05/Spacewar2/PlayerUpdateStruct.cs new file mode 100644 index 0000000..5305420 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/PlayerUpdateStruct.cs @@ -0,0 +1,15 @@ +using System; +using Microsoft.DirectX; + + +public struct PlayerUpdate { + public Vector2 ShipPosition; + public int Outline; + public Vector2 ShipVelocity; + public int State; + public int WaitCount; + public int DeathCount; + public int FlameIndex; + public int Sounds; + public int Score; +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar2/RemotePlayer.cs b/Source Code updated 08-12-05/Spacewar2/RemotePlayer.cs new file mode 100644 index 0000000..5efc7b0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/RemotePlayer.cs @@ -0,0 +1,56 @@ +using System; +using System.Net.Sockets; + +namespace SpaceWar { + /// + /// Holds information about the other players in the game. + /// + public class RemotePlayer { + Ship ship; + int playerID; + string hostName; + DateTime updateTime; // last tick count at update + bool active = true; // is this player active + + public RemotePlayer(int playerID, string hostName, Ship ship) { + this.playerID = playerID; + this.hostName = hostName; + this.ship = ship; + } + + public override string ToString() { + return hostName; + } + + public Ship Ship { + get { + return ship; + } + } + + public int PlayerID { + get { + return playerID; + } + } + + public DateTime UpdateTime { + get { + return updateTime; + } + set { + updateTime = value; + } + } + + public bool Active { + get { + return active; + } + set { + active = value; + } + } + + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/RotatableShape.cs b/Source Code updated 08-12-05/Spacewar2/RotatableShape.cs new file mode 100644 index 0000000..8c20e5a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/RotatableShape.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectDraw; + +namespace SpaceWar { + /// + /// Summary description for RotatableShape. + /// + [Serializable] + public class RotatableShape { + static ArrayList shapes = new ArrayList(); + + + + Point center; + int currentStep; + + // add a line at all the rotations + public static void AddLine(MyPointF end1, MyPointF end2, float scale) { + float angleIncrement = 360f / Constants.RotateSteps; + float angle = 0.0f; + for (int step = 0; step < Constants.RotateSteps; step++) { + Shape shape = (Shape) shapes[step]; + shape.AddLine(end1.Rotate(angle), end2.Rotate(angle), scale); + angle += angleIncrement; + } + } + + public RotatableShape() { + } + + public static void CreateShapes() { + for (int step = 0; step < Constants.RotateSteps; step++) { + shapes.Add(new Shape()); + } + } + public int CurrentStep { + get { + return currentStep; + } + set { + currentStep = value; + } + } + + public float Angle { + get { + return (360f / Constants.RotateSteps) * currentStep; + } + } + + public Point Center { + get { + return center; + } + set { + center = value; + } + } + + public void ChangeCurrentStep(int delta) { + currentStep = (currentStep + delta) % Constants.RotateSteps; + if (currentStep < 0) + currentStep += Constants.RotateSteps; + } + + public void IncrementCurrentStep() { + currentStep++; + if (currentStep == Constants.RotateSteps) + currentStep = 0; + } + + public void DecrementCurrentStep() { + currentStep--; + if (currentStep < 0) + currentStep = Constants.RotateSteps - 1; + } + + + public Line GetCurrentLineByIndex(int index) { + Shape shape = (Shape) shapes[currentStep]; + return shape[index]; + } + + public void Draw(Surface surface, int startIndex, int endIndex) { + Shape shape = (Shape) shapes[currentStep]; + shape.Center = center; + shape.Draw(surface, startIndex, endIndex); + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/Shape.cs b/Source Code updated 08-12-05/Spacewar2/Shape.cs new file mode 100644 index 0000000..4410659 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/Shape.cs @@ -0,0 +1,49 @@ +using System; +using System.Drawing; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectDraw; + +namespace SpaceWar { + /// + ///Shape drawing class + /// + public class Shape { + Point center; + ArrayList lines = new ArrayList(); + + public Shape() { + } + + public Point Center { + get { + return center; + } + set { + center = value; + } + } + + public Line this[int index] { + get { + return (Line) lines[index]; + } + } + + public void AddLine(PointF end1, PointF end2, float scale) { + Point e1 = new Point((int) (end1.X * scale), (int) (end1.Y * scale)); + Point e2 = new Point((int) (end2.X * scale), (int) (end2.Y * scale)); + + lines.Add(new Line(e1, e2)); + } + + public void Draw(Surface surface, int startIndex, int endIndex) { + for (int index = startIndex; index <= endIndex; index++) { + Line line = (Line) lines[index]; + + line.Offset = center; + line.Draw(surface); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/Ship.cs b/Source Code updated 08-12-05/Spacewar2/Ship.cs new file mode 100644 index 0000000..68cfe79 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/Ship.cs @@ -0,0 +1,419 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectDraw; + + +namespace SpaceWar { + + /// + /// This class handles the drawing and collision detection routines for our ship. + /// + public class Ship { + #region Fields and Properties + private GameClass game; + private int[] flameFrame = new int[] {3, 4, 5, 4}; + + private Vector2 position; + private Vector2 velocity; + private Shots shots = new Shots(); + private ShipState state = ShipState.Dead; // current state + public int State { get { return (int) state; } set { state = (ShipState) value; }} + + private string hostName; + private RotatableShape outline; + + public int Outline { get { return outline.CurrentStep; } set { outline.CurrentStep = value; } } + + private Vector2 originalPosition; // where we started... + private Rectangle screenBounds; + private int waitCount = 10; // wait count before state transition. + public int WaitCount { get { return waitCount; } set { waitCount = value; } } + private int flameIndex = -1; // no flame + public int FlameIndex { get { return flameIndex; } set { flameIndex = value; } } + private int score; // our score + + private int deathCount; // # of times we've died... + private float hyperSuccess = Constants.HyperSuccessFactor; // chance of a hyper being successful... + + private Word hostNameWord; + private Sounds sounds; + + + + public Shots ShotHandler { + get { + return shots; + } + } + public int DeathCount { + get { + return deathCount; + } + set { + deathCount = value; + } + } + + public int Score { + get { + return score; + } + set { + score = value; + } + } + + public string HostName { + get { + return hostName; + } + set { + hostName = value; + } + } + + public Vector2 Position { + get { + return position; + } + set { + position = value; + } + } + + public Vector2 Velocity { + get { + return velocity; + } + set { + velocity = value; + } + } + + public Rectangle ScreenBounds { + get { + return screenBounds; + } + set { + screenBounds = value; + shots.ScreenBounds = screenBounds; + } + } + + public Sounds Sounds { + get { + return sounds; + } + set { + sounds = value; + } + } + + #endregion + + #region Constructors + + static Ship() { + // outline of the ship, with 3 flames... + MyPointF pointNose = new MyPointF(0f, 4f); + MyPointF pointRight = new MyPointF(2f, -2f); + MyPointF pointLeft = new MyPointF(-2f, -2f); + MyPointF flameBase = new MyPointF(0f, -2f); + MyPointF flameEnd1 = new MyPointF(0f, -4f); + MyPointF flameEnd2 = new MyPointF(0.5f, -4f); + MyPointF flameEnd3 = new MyPointF(-0.5f, -4f); + + RotatableShape.AddLine(pointNose, pointRight, Constants.ShipSize); + RotatableShape.AddLine(pointNose, pointLeft, Constants.ShipSize); + RotatableShape.AddLine(pointLeft, pointRight, Constants.ShipSize); + RotatableShape.AddLine(flameBase, flameEnd1, Constants.ShipSize); + RotatableShape.AddLine(flameBase, flameEnd2, Constants.ShipSize); + RotatableShape.AddLine(flameBase, flameEnd3, Constants.ShipSize); + } + + public Ship(GameClass Game) { + this.game = Game; + outline = new RotatableShape(); + } + #endregion //Constructors + + #region Ship Functions + + public void Shoot() { + if (this.state != ShipState.Normal) { + return; + } + + float angle = outline.Angle + 90f; + + // find out the location of the front of the ship... + Line line = outline.GetCurrentLineByIndex(0); + Vector2 noseOffset = new Vector2(line.End1.X, line.End1.Y); + + bool shot = shots.Shoot(position + noseOffset, velocity, angle); + if (shot) { + sounds |= Sounds.ShipFire; + } + } + + public void SetThrust(bool thrust) { + SetFlame(thrust); + + if (thrust && (state == ShipState.Normal)) { + + float angle = outline.Angle + 90f; + + double angleInRadians = angle * (Math.PI / 180.0f); + + MyPointF acceleration = new MyPointF(Constants.EngineThrust, 0f); + acceleration = acceleration.Rotate(angle); + + + velocity += new Vector2(acceleration.X,acceleration.Y); + + sounds |= Sounds.ShipThrust; + + } + else { + if ((sounds & Sounds.ShipThrust) != 0) + sounds ^= Sounds.ShipThrust; + } + } + + // set the flame on or off. + // if the is on and it was on last frame, we go to the next line + // in the flicker sequence... + void SetFlame(bool flameOn) { + if (!flameOn) { + flameIndex = -1; + } + else { + flameIndex = ((flameIndex + 1) % 4); + } + } + + public void EnterHyper() { + if (state != ShipState.Normal) + return; + + SetState(ShipState.HyperCharge); + } + + public void SetRandomPosition(bool setOriginal, Point sunLocation) { + while (true) { + position = new Vector2(screenBounds.Left + Constants.random.Next(screenBounds.Width), + screenBounds.Top + Constants.random.Next(screenBounds.Height)); + Vector2 dist = position - new Vector2(sunLocation.X, sunLocation.Y); + if (Vector2.Length(dist) > Constants.ShipSunCreationDistance) + break; + } + if (setOriginal) { + originalPosition = position; + } + } + + void SetState(ShipState newState) { + switch (newState) { + case ShipState.Dying: + deathCount++; + waitCount = Constants.DyingCycle; + sounds |= Sounds.ShipExplode; + break; + + case ShipState.Dead: + waitCount = Constants.DeadCycleWait; + position = new Vector2(-1000f, -1000f); // not on board + break; + + case ShipState.Normal: + if (state == ShipState.Hyper) { + SetRandomPosition(false, game.SunLocation); + } + else { + position = originalPosition; + velocity = new Vector2(0.0f, 0.0f); + } + hyperSuccess = Constants.HyperSuccessFactor; + shots.Clear(); + sounds |= Sounds.ShipAppear; + break; + + case ShipState.HyperCharge: + sounds |= Sounds.ShipHyper; + waitCount = Constants.HyperChargeWait; + break; + + case ShipState.Hyper: + position = new Vector2( -1000f, -1000f); // not on board... + waitCount = Constants.HyperCycleWait; + break; + } + state = newState; + } + + public void UpdatePosition() { + shots.UpdatePosition(game.BounceBack, game.SunLocation, + game.InverseGravity, game.Gravity); + + if ((state != ShipState.Normal) && + (state != ShipState.HyperCharge)) + return; + + position += velocity; + + // Check the game boundaries. If bounce back mode is enabled, + // reverse the velocity when we reach the edge + if (game.BounceBack) { + if (position.X > screenBounds.Right || position.X < screenBounds.Left) + velocity.X = -velocity.X; + if (position.Y > screenBounds.Bottom || position.Y < screenBounds.Top) + velocity.Y = -velocity.Y; + } + else { + if (position.X > screenBounds.Right) + position.X = screenBounds.Left; + + if (position.X < screenBounds.Left) + position.X = screenBounds.Right; + + if (position.Y > screenBounds.Bottom) + position.Y = screenBounds.Top; + + if (position.Y < screenBounds.Top) + position.Y = screenBounds.Bottom; + } + + + // update velocity due to the gravity of the sun... + Point sunLocation = game.SunLocation; + Vector2 gravity =new Vector2( sunLocation.X - position.X,sunLocation.Y - position.Y); + float length = Vector2.Length(gravity); + gravity = Vector2.Normalize(gravity); + gravity = (gravity * game.Gravity) * (1.0f / (length * length)); + + if (game.InverseGravity) + velocity -= gravity; + else + velocity += gravity; + + if (length < Constants.SunCollisionLimit) { + SetState(ShipState.Dying); + game.SendPointToAllPlayers(); + } + } + + public void UpdateState() { + if (state == ShipState.Dying) { + this.waitCount--; + if (waitCount == 0) { + SetState(ShipState.Dead); + } + } + + if (state == ShipState.Dead) { + this.waitCount--; + if (waitCount == 0) { + SetState(ShipState.Normal); + } + } + + if (state == ShipState.HyperCharge) { + this.waitCount--; + this.outline.ChangeCurrentStep(Constants.RotateSteps / 2); + //this.outline.ChangeCurrentStep(5 - Constants.random.Next(10)); + if (waitCount == 0) { + // if we didn't make it, we're dying... + double randValue = Constants.random.NextDouble(); + if (hyperSuccess < randValue) { + SetState(ShipState.Dying); + game.SendPointToAllPlayers(); + } + else { + SetState(ShipState.Hyper); + } + } + } + if (state == ShipState.Hyper) { + this.waitCount--; + if (waitCount == 0) { + hyperSuccess -= Constants.HyperSuccessDegradation; + float save = this.hyperSuccess; + SetState(ShipState.Normal); + hyperSuccess = save; + } + } + + } + + // see if the other ship has hit us, or if the other shots have hit us + public void TestShip(RemotePlayer player) { + Ship otherShip = player.Ship; + + // if we're not alive, don't do any tests... + if (state != ShipState.Normal) + return; + + // Test if their shots are close enough to us. + if (otherShip.shots.TestShots(this)) { + SetState(ShipState.Dying); + game.SendTwoPointsToPlayer(player.PlayerID); // give them 2 points + } + + Vector2 delta = this.position - otherShip.position; + if (Vector2.Length(delta) < Constants.ShipCollisionLimit) { + SetState(ShipState.Dying); + game.SendPointToAllPlayers(); // all others get a point + } + } + + public void Draw(Surface surface, int shipColor, int shotColor) { + /* + if ((state == ShipState.Dead) || + (state == ShipState.Hyper)) + return; +*/ + if (state == ShipState.Dying) { + float factor = (float) this.waitCount / Constants.DyingCycle; + + int c1 = (int) ((shipColor & 0xFF0000) * factor) & 0xFF0000; + int c2 = (int) ((shipColor & 0x00FF00) * factor) & 0x00FF00; + int c3 = (int) ((shipColor & 0x0000FF) * factor) & 0x0000FF; + + shipColor = c1 + c2 + c3; + } + + surface.ForeColor = Color.FromArgb(shipColor); + surface.DrawWidth = 1; + outline.Center = new Point((int) position.X, (int) position.Y); + + outline.Draw(surface, 0, 2); // draw ship... + if (flameIndex != -1) { + outline.Draw(surface, flameFrame[flameIndex], flameFrame[flameIndex]); + } + + surface.ForeColor = Color.FromArgb(shotColor); + shots.Draw(surface); + } + + public void DrawHostName(Surface surface, Point location, int color) { + if (hostName == null) + return; + + if (hostNameWord == null) { + hostNameWord = new Word(hostName, Constants.LetterSize); + } + + hostNameWord.Draw(surface, color, Constants.LetterSpacing, location); + } + + public void RotateLeft() { + outline.DecrementCurrentStep(); + } + + public void RotateRight() { + outline.IncrementCurrentStep(); + } + #endregion //Ship Functions + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/ShipState.cs b/Source Code updated 08-12-05/Spacewar2/ShipState.cs new file mode 100644 index 0000000..ccfd01c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/ShipState.cs @@ -0,0 +1,12 @@ +using System; + +namespace SpaceWar { + public enum ShipState { + Normal, + Dying, + Dead, + Hyper, + HyperCharge, + }; + +} diff --git a/Source Code updated 08-12-05/Spacewar2/Shot.cs b/Source Code updated 08-12-05/Spacewar2/Shot.cs new file mode 100644 index 0000000..49872c0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/Shot.cs @@ -0,0 +1,121 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectDraw; + +namespace SpaceWar { + /// + /// Drawing and updating routines for shots + /// + [Serializable] + public class Shot { + Vector2 position; + [NonSerialized] + Vector2 velocity; + int age = -1; + + + + public Shot() { + + } + + + public bool Alive { + get { + return (age != -1); + } + set { + if (value == true) + age = 0; + else + age = -1; + } + } + + public Vector2 Position { + get { + return position; + } + set { + position = value; + } + } + + public int Age { + get { + return age; + } + set { + age = value; + } + } + + public void SetShot(Vector2 position, Vector2 velocity) { + age = 0; + this.position = position; + this.velocity = velocity; + } + + + public void UpdatePosition(Rectangle screenBounds, bool bounceBack, + Point sunLocation, bool inverseGravity, int gameGravity) { + if (age == -1) + return; + + position += velocity; + + if (bounceBack) { + if (position.X > screenBounds.Right || position.X < screenBounds.Left) + velocity.X = -velocity.X; + if (position.Y > screenBounds.Bottom || position.Y < screenBounds.Top) + velocity.Y = -velocity.Y; + } + else { + if (position.X > screenBounds.Right) + position.X = screenBounds.Left; + + if (position.X < screenBounds.Left) + position.X = screenBounds.Right; + + if (position.Y > screenBounds.Bottom) + position.Y = screenBounds.Top; + + if (position.Y < screenBounds.Top) + position.Y = screenBounds.Bottom; + } + + if (Constants.ShotGravity) { + // update velocity due to the gravity of the sun... + Vector2 gravity = new Vector2(position.X - sunLocation.X,position.Y - sunLocation.Y); + float length = Vector2.Length(gravity); + gravity = (Vector2.Normalize(gravity) * gameGravity) * (1.0f / (length * length)); + + if (inverseGravity) + velocity += gravity; + else + velocity -= gravity; + + if (length < Constants.ShotSunCollisionLimit) { + age = Constants.ShotLifetime; + } + } + + age++; + + if (age >= Constants.ShotLifetime) { + age = -1; + } + } + + public void Draw(Surface surface) { + if (age == -1) + return; + + int x = (int) position.X; + int y = (int) position.Y; + surface.DrawLine(x, y, x + 1, y); + surface.DrawLine(x, y + 1, x + 1, y + 1); + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/ShotUpdateStruct.cs b/Source Code updated 08-12-05/Spacewar2/ShotUpdateStruct.cs new file mode 100644 index 0000000..71b58eb --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/ShotUpdateStruct.cs @@ -0,0 +1,8 @@ +using System; +using Microsoft.DirectX; + + +public struct ShotUpdate { + public Vector2[] ShotPosition; + public int[] ShotAge; +} diff --git a/Source Code updated 08-12-05/Spacewar2/Shots.cs b/Source Code updated 08-12-05/Spacewar2/Shots.cs new file mode 100644 index 0000000..83c6e3c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/Shots.cs @@ -0,0 +1,100 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectDraw; + +namespace SpaceWar { + /// + /// Handles the collision detection and returns the array of shots for sending to other players + /// + [Serializable] + public class Shots { + + Shot[] shots; + [NonSerialized] + int cyclesSinceShot = 0; + [NonSerialized] + Rectangle screenBounds; + + + public Shots() { + shots = new Shot[Constants.NumShots]; + for (int count = 0; count < Constants.NumShots; count++) { + shots[count] = new Shot(); + } + } + + public Rectangle ScreenBounds { + get { + return screenBounds; + } + set { + screenBounds = value; + } + } + public Shot[] GetShotArray() { + return shots; + } + + public void SetShotArray(Shot[] shotArray) { + this.shots = shotArray; + } + + public bool Shoot(Vector2 position, Vector2 velocity, float angle) { + if (cyclesSinceShot < Constants.ShotDeltaCycles) + return false; + + cyclesSinceShot = 0; + + MyPointF shotPoint = new MyPointF(Constants.ShotVelocity, 0f); + + MyPointF rotatedPoint = shotPoint.Rotate(angle); + Vector2 shotVelocity = new Vector2(rotatedPoint.X,rotatedPoint.Y); + if (Constants.ShotAddShipVelocity) { + shotVelocity += velocity; + } + + foreach (Shot shot in shots) { + if (!shot.Alive) { + shot.SetShot(position, shotVelocity); + return true; + } + } + return false; + } + + public void UpdatePosition(bool bounceBack, Point sunLocation, + bool inverseGravity, int gameGravity) { + cyclesSinceShot++; + + foreach (Shot shot in shots) { + shot.UpdatePosition(screenBounds, bounceBack, + sunLocation, inverseGravity, gameGravity); + } + } + + public void Clear() { + foreach (Shot shot in shots) { + shot.Alive = false; + } + } + public bool TestShots(Ship ship) { + foreach (Shot shot in shots) { + if (shot.Alive) { + float distance = Vector2.Length(shot.Position - ship.Position); + if (distance < Constants.ShotCollisionLimit) { + shot.Alive = false; + return true; + } + } + } + return false; + } + + public void Draw(Surface surface) { + foreach (Shot shot in shots) { + shot.Draw(surface); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/SoundBuffer.cs b/Source Code updated 08-12-05/Spacewar2/SoundBuffer.cs new file mode 100644 index 0000000..d98490d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/SoundBuffer.cs @@ -0,0 +1,71 @@ +using System; +using Microsoft.DirectX.DirectSound; + +namespace SpaceWar { + /// + /// A single sound buffer for use by the SoundHandler class. + /// + public class SoundBuffer { + Microsoft.DirectX.DirectSound.Buffer buffer; + Sounds thisSound; + bool looping; + bool lastValue; + + public SoundBuffer(Microsoft.DirectX.DirectSound.Device soundDevice, string filename, Sounds thisSound, bool looping) { + this.thisSound = thisSound; + this.looping = looping; + + BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + try { + buffer = new Microsoft.DirectX.DirectSound.Buffer( + filename, + bufferDesc, + soundDevice); + } + catch (Exception e) { + throw new Exception( + String.Format("Error opening {0}; ", + filename), e); + } + } + + public Sounds Sound { + get { + return thisSound; + } + } + + public int Volume { + get { + return buffer.Volume; + } + set { + buffer.Volume = value; + } + } + + public void Play(bool on) { + // looping sounds don't get restarted + if (looping) { + if (on) { + if (!lastValue) { + buffer.SetCurrentPosition(1000); + buffer.Play(0,BufferPlayFlags.Looping); + } + } + else { + buffer.Stop(); + } + lastValue = on; + } + else { + if (on) { + buffer.SetCurrentPosition(0); + buffer.Play(0,BufferPlayFlags.Default); + } + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/SoundHandler.cs b/Source Code updated 08-12-05/Spacewar2/SoundHandler.cs new file mode 100644 index 0000000..9370f49 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/SoundHandler.cs @@ -0,0 +1,89 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX.DirectSound; +using Microsoft.DirectX.AudioVideoPlayback; +using System.Collections; + +namespace SpaceWar { + + + /// + /// This class handles loading and playing our sounds. + /// + public class SoundHandler { + Device soundDevice; + ArrayList sounds = new ArrayList(); + + Sounds lastSound; + + const int VolumeEngine = -1000; + const int VolumeOtherShot = -2000; + const int VolumeHaHa = -3000; + + public SoundHandler(Control owner) { + soundDevice = new Device(); + soundDevice.SetCooperativeLevel(owner,CooperativeLevel.Normal); + CreateSoundBuffers(); + } + + Microsoft.DirectX.DirectSound.Buffer LoadFile(string filename) { + + Microsoft.DirectX.DirectSound.BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + Microsoft.DirectX.DirectSound.Buffer buffer; + buffer = new Microsoft.DirectX.DirectSound.Buffer(filename, bufferDesc, soundDevice); + + + return buffer; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping, int volume) { + SoundBuffer buffer; + + buffer = new SoundBuffer( + soundDevice, + filename, + thisSound, + looping); + sounds.Add(buffer); + buffer.Volume = volume; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping) { + AddBuffer(filename, thisSound, looping, 0); + } + + void CreateSoundBuffers() { + AddBuffer(@".\media\hypercharge.wav", Sounds.ShipHyper, false); + AddBuffer(@".\media\sci fi bass.wav", Sounds.ShipAppear, false); + AddBuffer(@".\media\laser2.wav", Sounds.ShipFire, false); + AddBuffer(@".\media\explode.wav", Sounds.ShipExplode, false); + + AddBuffer(@".\media\engine.wav", Sounds.ShipThrust, true, VolumeEngine); + AddBuffer(@".\media\laser2_other.wav", Sounds.OtherShipFire, false, VolumeOtherShot); + AddBuffer(@".\media\explode_other.wav", Sounds.OtherShipExplode, false); + AddBuffer(@".\media\engine_other.wav", Sounds.OtherShipThrust, true, VolumeEngine); + + AddBuffer(@".\media\sci fi bass.wav", Sounds.OtherShipAppear, false); + AddBuffer(@".\media\haha.wav", Sounds.Taunt, false, VolumeHaHa); + + AddBuffer(@".\media\dude_quest1.wav", Sounds.Dude1, false); + AddBuffer(@".\media\dude_quest2.wav", Sounds.Dude2, false); + AddBuffer(@".\media\dude_quest3.wav", Sounds.Dude3, false); + AddBuffer(@".\media\dude_quest4.wav", Sounds.Dude4, false); + AddBuffer(@".\media\dude_quest5.wav", Sounds.Dude5, false); + } + + public void Play(Sounds soundsToPlay) { + // check each enum value. If that value + // is set, play the sound... + foreach (SoundBuffer buffer in sounds) { + bool on = ((buffer.Sound & soundsToPlay) != 0); + buffer.Play(on); + + } + lastSound = soundsToPlay; + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/Sounds.cs b/Source Code updated 08-12-05/Spacewar2/Sounds.cs new file mode 100644 index 0000000..7ce2c71 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/Sounds.cs @@ -0,0 +1,22 @@ +using System; + +namespace SpaceWar { + [Flags] + public enum Sounds { + ShipAppear = 0x00000001, + ShipHyper = 0x00000002, + ShipFire = 0x00000004, + ShipExplode = 0x00000008, + ShipThrust = 0x00000010, + OtherShipThrust = 0x00000020, + OtherShipExplode = 0x00000040, + OtherShipFire = 0x00000080, + OtherShipAppear = 0x00000100, + Taunt = 0x00000200, + Dude1 = 0x00000400, + Dude2 = 0x00000800, + Dude3 = 0x00001000, + Dude4 = 0x00002000, + Dude5 = 0x00004000, + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/Spacewar2.csproj b/Source Code updated 08-12-05/Spacewar2/Spacewar2.csproj new file mode 100644 index 0000000..36501f6 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/Spacewar2.csproj @@ -0,0 +1,449 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar2/Spacewar2.sln b/Source Code updated 08-12-05/Spacewar2/Spacewar2.sln new file mode 100644 index 0000000..cb719ce --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/Spacewar2.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spacewar2", "Spacewar2.csproj", "{747A57B1-88CF-4E87-99FD-021160A7DF35}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {747A57B1-88CF-4E87-99FD-021160A7DF35}.Debug.ActiveCfg = Debug|.NET + {747A57B1-88CF-4E87-99FD-021160A7DF35}.Debug.Build.0 = Debug|.NET + {747A57B1-88CF-4E87-99FD-021160A7DF35}.Release.ActiveCfg = Release|.NET + {747A57B1-88CF-4E87-99FD-021160A7DF35}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/Spacewar2/SplashScreen.cs b/Source Code updated 08-12-05/Spacewar2/SplashScreen.cs new file mode 100644 index 0000000..8c09816 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/SplashScreen.cs @@ -0,0 +1,124 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + +namespace SpaceWar { + /// + /// Spacewar Splashscreen + /// + public class SplashScreen : System.Windows.Forms.Form { + private GameClass gameClass; + private System.Windows.Forms.Button helpButton; + private System.Windows.Forms.Button startButton; + private System.Windows.Forms.Button closeButton; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public SplashScreen(GameClass game) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + this.gameClass = game; + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(SplashScreen)); + this.helpButton = new System.Windows.Forms.Button(); + this.startButton = new System.Windows.Forms.Button(); + this.closeButton = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // helpButton + // + this.helpButton.ForeColor = System.Drawing.Color.White; + this.helpButton.Location = new System.Drawing.Point(440, 312); + this.helpButton.Name = "helpButton"; + this.helpButton.Size = new System.Drawing.Size(136, 32); + this.helpButton.TabIndex = 0; + this.helpButton.Text = "Show Help"; + this.helpButton.Click += new System.EventHandler(this.helpButton_Click); + // + // startButton + // + this.startButton.ForeColor = System.Drawing.Color.White; + this.startButton.Location = new System.Drawing.Point(440, 360); + this.startButton.Name = "startButton"; + this.startButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.startButton.Size = new System.Drawing.Size(136, 32); + this.startButton.TabIndex = 1; + this.startButton.Text = "Configure and Play!"; + this.startButton.Click += new System.EventHandler(this.startButton_Click); + // + // closeButton + // + this.closeButton.ForeColor = System.Drawing.Color.White; + this.closeButton.Location = new System.Drawing.Point(440, 408); + this.closeButton.Name = "closeButton"; + this.closeButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.closeButton.Size = new System.Drawing.Size(136, 32); + this.closeButton.TabIndex = 2; + this.closeButton.Text = "Exit"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // SplashScreen + // + this.AutoScale = false; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.Black; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.ClientSize = new System.Drawing.Size(594, 454); + this.ControlBox = false; + this.Controls.Add(this.closeButton); + this.Controls.Add(this.startButton); + this.Controls.Add(this.helpButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(600, 460); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(600, 460); + this.Name = "SplashScreen"; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.ResumeLayout(false); + + } + #endregion + + private void helpButton_Click(object sender, System.EventArgs e) { + HelpScreen helpScreen = new HelpScreen(); + helpScreen.ShowDialog(); + } + + private void startButton_Click(object sender, System.EventArgs e) { + this.Close(); + } + + private void closeButton_Click(object sender, System.EventArgs e) { + Environment.Exit(0); + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/SplashScreen.resx b/Source Code updated 08-12-05/Spacewar2/SplashScreen.resx new file mode 100644 index 0000000..92c6880 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/SplashScreen.resx @@ -0,0 +1,4427 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + Private + + + Private + + + False + + + (Default) + + + SplashScreen + + + False + + + 8, 8 + + + False + + + 80 + + + True + + + Private + + + False + + + + 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 + /u01aKyRnQAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar2/Star.cs b/Source Code updated 08-12-05/Spacewar2/Star.cs new file mode 100644 index 0000000..7a59657 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/Star.cs @@ -0,0 +1,23 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectDraw; + +namespace SpaceWar { + /// + /// Drawing routine for the star background. + /// + public class Star { + Point location; + + public Star(Rectangle screenBounds) { + location = new Point(0); + location.X = Constants.random.Next(screenBounds.Width) + screenBounds.X; + location.Y = Constants.random.Next(screenBounds.Height) + screenBounds.Y; + } + + public void Draw(Surface surface) { + surface.DrawLine(location.X, location.Y, location.X + 1, location.Y + 1); + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/Stars.cs b/Source Code updated 08-12-05/Spacewar2/Stars.cs new file mode 100644 index 0000000..b6f942a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/Stars.cs @@ -0,0 +1,31 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectDraw; + +namespace SpaceWar { + /// + /// Draw the starry background of the game screen + /// + public class Stars { + Star[] stars; + + public Stars(Rectangle screenBounds, int count) { + stars = new Star[count]; + + for (int i = 0; i < count; i++) { + stars[i] = new Star(screenBounds); + } + } + + public void Draw(Surface surface) { + surface.ForeColor = Color.FromArgb(Constants.StarColorFull); + foreach (Star star in stars) { + star.Draw(surface); + } + int index = Constants.random.Next(stars.Length); + surface.ForeColor = Color.FromArgb(Constants.StarColorDim); + stars[index].Draw(surface); + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/Sun.cs b/Source Code updated 08-12-05/Spacewar2/Sun.cs new file mode 100644 index 0000000..131045a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/Sun.cs @@ -0,0 +1,41 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectDraw; + +namespace SpaceWar { + /// + /// Handles the drawing of the sun + /// + public class Sun { + const int NumPoints = 16; + const int NumLines = 8; + + Point center; + Point[] ends = new Point[NumPoints]; + + public Sun(Point center, int radius) { + this.center = center; + + double angle = 0; + double inc = 3.1415926535 * 2 / NumPoints; + for (int i = 0; i < NumPoints; i++) { + ends[i].X = (int) Math.Round(Math.Cos(angle) * radius) + center.X; + ends[i].Y = (int) Math.Round(Math.Sin(angle) * radius) + center.Y; + angle += inc; + } + } + + public void Draw(Surface surface) { + int dimLine = Constants.random.Next(NumLines); + for (int i = 0; i < NumLines; i++) { + if (i == dimLine) + surface.ForeColor = Color.FromArgb(0,170,170); + else + surface.ForeColor = Color.Yellow; + surface.DrawLine(ends[i].X, ends[i].Y, + ends[i + NumLines].X, ends[i + NumLines].Y); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/Word.cs b/Source Code updated 08-12-05/Spacewar2/Word.cs new file mode 100644 index 0000000..700a812 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/Word.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectDraw; + +namespace SpaceWar { + /// + /// Creates words from the letter vectors and draws complete words. + /// + public class Word { + string word; + ArrayList letters = new ArrayList(); + + public Word(string word, float scale) { + this.word = word; + + foreach (char c in word) { + Letter letter = new Letter(c); + letter.SetLetter(scale); + letters.Add(letter); + } + } + + public void Draw(Surface surface, int color, int step, Point location) { + foreach (Letter letter in letters) { + letter.Draw(surface, color, location); + location.X += step; + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar2/dinput.cs b/Source Code updated 08-12-05/Spacewar2/dinput.cs new file mode 100644 index 0000000..37b42a5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/dinput.cs @@ -0,0 +1,56 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using System.Threading; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + + +namespace SpaceWar { + + + /// + /// This is where we initialize DirectInput. The actual key testing is being done in the GameClass HandleKeys() funtion, + /// after getting the current keyboard state from this class. + /// + /// + public class InputClass { + private Control owner = null; + private Device localDevice = null; + + public InputClass(Control owner) { + this.owner = owner; + + localDevice = new Device(SystemGuid.Keyboard); + localDevice.SetDataFormat(DeviceDataFormat.Keyboard); + localDevice.SetCooperativeLevel(owner, CooperativeLevelFlags.Foreground | CooperativeLevelFlags.NonExclusive); + } + + public KeyboardState GetKBState() { + KeyboardState state = null; + try { + state = localDevice.GetCurrentKeyboardState(); + } + catch(InputException) { + do { + Application.DoEvents(); + try{ localDevice.Acquire(); } + catch (InputLostException) { + Thread.Sleep(2); + continue; + } + catch(OtherApplicationHasPriorityException) { + Thread.Sleep(2); + continue; + } + + break; + + }while( true ); + } + return state; + } + + + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar2/dplay.cs b/Source Code updated 08-12-05/Spacewar2/dplay.cs new file mode 100644 index 0000000..5f55ad7 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/dplay.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + +namespace SpaceWar { + /// + /// The class that houses DirectPlay code for the application. + /// + public class PlayClass { + #region Fields and Properties + private GameClass game = null; + + private Peer peerObject = null; + + private bool isHost = false; + public bool IsHost { get { return isHost; } } + + private bool inSession = false; + public bool InSession { get { return inSession; } } + + private ConnectWizard Connect = null; + private Hashtable playerList = new Hashtable(); + public Hashtable PlayerList { + get { + lock (playerList) { + return playerList; + } + } + } + #endregion + + #region About Application Guids + // This guid allows DirectPlay to find other instances of the same game on + // the network, so it must be unique for every game, and the same for + // every instance of that game. You can use the guidgen.exe program to + // generate a new guid. + #endregion + private Guid AppGuid = new Guid(0x147184df, 0x547d, 0x4d9e, 0xb6, 0x3c, 0x9f, 0x5c, 0xe9, 0x6a, 0xbf, 0x77); + + #region Constructor + + public PlayClass(GameClass Game) { + this.game = Game; + this.peerObject = peerObject; + + //Initialize our peer to peer network object + peerObject = new Peer(); + + // Set up our event handlers (We only need events for the ones we care about) + peerObject.PlayerCreated += new PlayerCreatedEventHandler(game.PlayerCreated); + peerObject.PlayerDestroyed += new PlayerDestroyedEventHandler(game.PlayerDestroyed); + peerObject.Receive += new ReceiveEventHandler(game.DataReceived); + peerObject.SessionTerminated += new SessionTerminatedEventHandler(SessionTerminated); + + // use the DirectPlay connection wizard to create our join sessions + Connect = new ConnectWizard(peerObject, AppGuid, "SpacewarDX9"); + Connect.StartWizard(); + + inSession = Connect.InSession; + + if (inSession) { + isHost = Connect.IsHost; + } + + } + #endregion //Constructor + + #region Network Message functions + // These routines handle the communication between the game peers. + public void SendPlayerUpdate(PlayerUpdate update, ShotUpdate shotUpdate) { + if (inSession) { + NetworkPacket packet = new NetworkPacket(); + packet.Write((byte)MessageType.PlayerUpdateID); + packet.Write(update); + + for (int i = 0; i < Constants.NumShots; i++) { + packet.Write(shotUpdate.ShotPosition[i]); + packet.Write(shotUpdate.ShotAge[i]); + } + + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.NoComplete | SendFlags.NoLoopback); + } + } + + public void SendGameParamUpdate(GameParamUpdate update) { + if (inSession) { + NetworkPacket packet = new NetworkPacket(); + packet.Write((byte)MessageType.GameParamUpdateID); + packet.Write(update); + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.Guaranteed | SendFlags.NoLoopback); + } + } + + public void SendGameState(GameStates gameState) { + if (inSession) { + byte messageType; + switch (gameState) { + case GameStates.Paused: { + messageType = (byte)MessageType.GamePaused; + break; + } + case GameStates.Running: { + messageType = (byte)MessageType.GameRunning; + break; + } + default: { + return; + } + } + NetworkPacket packet = new NetworkPacket(); + packet.Write(messageType); + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.Guaranteed | SendFlags.NoLoopback); + } + } + + public void SendScorePointToAll() { + if (inSession) { + NetworkPacket packet = new NetworkPacket(); + packet.Write((byte)MessageType.Add1ToScore); + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.Guaranteed | SendFlags.NoLoopback); + } + } + + public void SendTwoPointsToPlayer(int player) { + if (inSession) { + NetworkPacket packet = new NetworkPacket(); + packet.Write((byte)MessageType.Add2ToScore); + peerObject.SendTo(player, packet, 0, SendFlags.Guaranteed); + } + } + + #endregion // Network message functions + + #region Cleanup + private void SessionTerminated(object sender, SessionTerminatedEventArgs stea) { + inSession = false; + isHost = false; + } + + #endregion //Cleanup + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar2/font.cs b/Source Code updated 08-12-05/Spacewar2/font.cs new file mode 100644 index 0000000..a2f52f7 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/font.cs @@ -0,0 +1,252 @@ +class VectorFontData { + public static float[] Vectors = { + 0F,0.0F,0F,1.75F, + 0F,1.75F,0.25F,2F, + 0.25F,2F,0.75F,2F, + 0.75F,2F,1F,1.75F, + 1F,1.75F,1F,0F, + 0F,1F,1F,1F, + 0F,0F,0F,2F, + 0F,2F,0.75F,2F, + 0.75F,2F,1F,1.75F, + 1F,1.75F,1F,1.25F, + 1F,1.25F,0.75F,1F, + 0.75F,1F,1F,0.75F, + 1F,0.75F,1F,0.25F, + 1F,0.25F,0.75F,0F, + 0.75F,0F,0F,0F, + 0F,1F,0.75F,1F, + 1F,0.25F,0.75F,0F, + 0.75F,0F,0.25F,0F, + 0.25F,0F,0F,0.25F, + 0F,0.25F,0F,1.75F, + 0F,1.75F,0.25F,2F, + 0.25F,2F,0.75F,2F, + 0.75F,2F,1F,1.75F, + 0F,0F,0F,2F, + 0F,2F,0.75F,2F, + 0.75F,2F,1F,1.75F, + 1F,1.75F,1F,0.25F, + 1F,0.25F,0.75F,0F, + 0.75F,0F,0F,0F, + 1F,0F,0F,0F, + 0F,0F,0F,2F, + 0F,2F,1F,2F, + 0F,1F,0.75F,1F, + 0F,0F,0F,2F, + 0F,2F,1F,2F, + 0F,1F,0.75F,1F, + 0.75F,1F,1F,1F, + 1F,1F,1F,0.25F, + 1F,0.25F,0.75F,0F, + 0.75F,0F,0.25F,0F, + 0.25F,0F,0F,0.25F, + 0F,0.25F,0F,1.75F, + 0F,1.75F,0.25F,2F, + 0.25F,2F,0.75F,2F, + 0.75F,2F,1F,1.75F, + 0F,0F,0F,2F, + 1F,0F,1F,2F, + 0F,1F,1F,1F, + 0F,0F,1F,0F, + 0.5F,0F,0.5F,2F, + 0F,2F,1F,2F, + 1F,2F,1F,0.25F, + 1F,0.25F,0.75F,0F, + 0.75F,0F,0.25F,0F, + 0.25F,0F,0F,0.25F, + 0F,0F,0F,2F, + 0F,1F,1F,0F, + 0F,1F,1F,2F, + 1F,0F,0F,0F, + 0F,0F,0F,2F, + 0F,0F,0F,2F, + 0F,2F,0.5F,1.25F, + 0.5F,1.25F,1F,2F, + 1F,2F,1F,0F, + 0F,0F,0F,2F, + 0F,2F,1F,0F, + 1F,0F,1F,2F, + 0F,0.25F,0F,1.75F, + 0F,1.75F,0.25F,2F, + 0.25F,2F,0.75F,2F, + 0.75F,2F,1F,1.75F, + 1F,1.75F,1F,0.25F, + 1F,0.25F,0.75F,0F, + 0.75F,0F,0.25F,0F, + 0.25F,0F,0F,0.25F, + 0F,0F,0F,2F, + 0F,2F,0.75F,2F, + 0.75F,2F,1F,1.75F, + 1F,1.75F,1F,1.25F, + 1F,1.25F,0.75F,1F, + 0.75F,1F,0F,1F, + 0F,0.25F,0F,1.75F, + 0F,1.75F,0.25F,2F, + 0.25F,2F,0.75F,2F, + 0.75F,2F,1F,1.75F, + 1F,1.75F,1F,0.25F, + 1F,0.25F,0.75F,0F, + 0.75F,0F,0.25F,0F, + 0.25F,0F,0F,0.25F, + 0.75F,0.25F,1.0F,0.0F, + 0F,0F,0F,2F, + 0F,2F,0.75F,2F, + 0.75F,2F,1F,1.75F, + 1F,1.75F,1F,1.25F, + 1F,1.25F,0.75F,1F, + 0.75F,1F,0F,1F, + 1F,0F,0.5F,1F, + 0F,0.25F,0.25F,0F, + 0.25F,0F,0.75F,0F, + 0.75F,0F,1F,0.25F, + 1F,0.25F,1.0F,0.75F, + 1.0F,0.75F,0.75F,1F, + 0.75F,1F,0.25F,1F, + 0.25F,1F,0F,1.25F, + 0F,1.25F,0F,1.75F, + 0F,1.75F,0.25F,2F, + 0.25F,2F,0.75F,2F, + 0.75F,2F,1F,1.75F, + 0.5F,0F,0.5F,2F, + 0F,2F,1F,2F, + 0F,2F,0F,0.25F, + 0F,0.25F,0.25F,0F, + 0.25F,0F,0.75F,0F, + 0.75F,0F,1F,0.25F, + 1F,0.25F,1F,2F, + 0F,2F,0.5F,0F, + 0.5F,0F,1F,2F, + 0F,2F,0F,0F, + 0F,0F,0.5F,0.75F, + 0.5F,0.75F,1F,0F, + 1F,0F,1F,2F, + 0F,0F,1F,2F, + 0F,2F,1F,0F, + 0F,2F,0.5F,1F, + 0.5F,1F,1F,2F, + 0.5F,1F,0.5F,0F, + 1F,0F,0F,0F, + 0F,0F,1F,2F, + 1F,2F,0F,2F, + 0.5F,0F,0.5F,2F, + 0F,2F,1F,2F, + 1F,2F,1F,1F, + 1F,1F,0F,1F, + 0F,1F,0F,0F, + 0F,0F,1F,0F, + 0F,0F,1F,0F, + 1F,0F,1F,2F, + 1F,2F,0F,2F, + 0F,1F,1F,1F, + 1F,0F,1F,2F, + 0F,2F,0F,1F, + 0F,1F,1F,1F, + 1F,2F,0F,2F, + 0F,2F,0F,1F, + 0F,1F,1F,1F, + 1F,1F,1F,0F, + 1F,0F,0F,0F, + 1F,2F,0F,2F, + 0F,2F,0F,0F, + 0F,0F,1F,0F, + 1F,0F,1F,1F, + 1F,1F,0F,1F, + 0F,2F,1F,2F, + 1F,2F,1F,0F, + 1F,2F,0F,2F, + 0F,2F,0F,0F, + 0F,0F,1F,0F, + 1F,0F,1F,2F, + 0F,1F,1F,1F, + 0F,0F,1F,0F, + 1F,0F,1F,2F, + 1F,2F,0F,2F, + 0F,2F,0F,1F, + 0F,1F,1F,1F, + 1F,2F,0F,2F, + 0F,2F,0F,0F, + 0F,0F,1F,0F, + 1F,0F,1F,2F, + }; + + public static char[] order = { + ' ', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + '0', + }; + + public static int[] vectorCount = { + 0, + 6, + 10, + 7, + 6, + 4, + 3, + 9, + 3, + 3, + 4, + 3, + 2, + 4, + 3, + 8, + 6, + 9, + 7, + 11, + 2, + 5, + 2, + 4, + 2, + 3, + 3, + 1, + 5, + 4, + 3, + 5, + 5, + 2, + 5, + 5, + 4, + }; +} diff --git a/Source Code updated 08-12-05/Spacewar2/main.cs b/Source Code updated 08-12-05/Spacewar2/main.cs new file mode 100644 index 0000000..1fb772e --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/main.cs @@ -0,0 +1,155 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Container = System.ComponentModel.Container; +using System.Windows.Forms; +using System.Threading; + +namespace SpaceWar { + + /// + /// The main windows form for the game. + /// + public class MainClass : System.Windows.Forms.Form { + #region Fields + private GameClass game = null; + private Container components = null; + private Control target = null; // Target for rendering operations. + private bool moving = false; + private Point mousePoint = new Point(); + + #endregion //Fields + + /// + // Main entry point of the application. + /// + #region Constructors + [STAThread] + public static void Main() { + MainClass m = new MainClass(); + Application.Exit(); + } + + public MainClass() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + target = this; + + // Add event handlers to enable moving and resizing + this.MouseDown += new MouseEventHandler(OnMouseDown); + this.MouseMove +=new MouseEventHandler(OnMouseMove); + this.MouseUp += new MouseEventHandler(OnMouseUp); + this.Resize += new System.EventHandler(OnMoveResize); + this.Move +=new EventHandler(OnMoveResize); + + + // Set up Double buffering to eliminate flicker + SetStyle(ControlStyles.DoubleBuffer, true); + SetStyle(ControlStyles.AllPaintingInWmPaint, true); + SetStyle(ControlStyles.UserPaint, true); + + //Initialize the main game class + game = new GameClass(this, target); + game.Initialize(this.Bounds); + + //Show our game form + this.Show(); + + //Start the main game loop + StartLoop(); + } + #endregion //Constructors + + #region GameLoop + + /// + // This is the main loop of the application. + /// + private void StartLoop() { + while(Created) { + game.MainLoop(); // Execute the game logic + Application.DoEvents(); // Make sure we take care of all the windows event messages + Thread.Sleep(2); // Yield some CPU time to other applications. + } + } + #endregion //GameLoop + + #region Cleanup + + public void EndGame() { + this.Dispose(true); + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + #endregion //Cleanup + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + // + // MainClass + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.Black; + this.ClientSize = new System.Drawing.Size(792, 592); + this.ControlBox = false; + this.KeyPreview = true; + this.Location = new System.Drawing.Point(10, 10); + this.MaximizeBox = false; + this.Name = "MainClass"; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + + } + #endregion + + #region Event Handlers + // Event Handlers for moving and resizing the game form + private void OnMoveResize(object sender, System.EventArgs e) { + if (moving) + return; + if (null != game) { + game.GameState = GameStates.Paused; + game.Initialize(this.DesktopBounds); + } + } + + private void OnMouseDown(object sender, MouseEventArgs mea) { + if (null != game) { + game.GameState = GameStates.Paused; + } + moving = true; + mousePoint = new Point(mea.X, mea.Y); + } + + private void OnMouseMove(object sender, MouseEventArgs mea) { + if (moving) { + this.Left += mea.X - mousePoint.X; + this.Top += mea.Y - mousePoint.Y; + } + } + + private void OnMouseUp(object sender, MouseEventArgs mea) { + moving = false; + + if (null != game) { + game.Initialize(this.DesktopBounds); + } + } + #endregion + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar2/main.resx b/Source Code updated 08-12-05/Spacewar2/main.resx new file mode 100644 index 0000000..1bd6850 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar2/main.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + MainClass + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/Arrow-yel.x b/Source Code updated 08-12-05/Spacewar3D/Media/Arrow-yel.x new file mode 100644 index 0000000..61d5ac9 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/Arrow-yel.x differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/Haha.wav b/Source Code updated 08-12-05/Spacewar3D/Media/Haha.wav new file mode 100644 index 0000000..4f9bd3a Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/Haha.wav differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/Help.txt b/Source Code updated 08-12-05/Spacewar3D/Media/Help.txt new file mode 100644 index 0000000..27bbc88 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Media/Help.txt @@ -0,0 +1,26 @@ +Spacewar3D is a head to head space battle. When the game starts, you configure your network settings and either choose to host a new game, or join a game that is already in session. + +Hosting a game: +1) Start the game and select ‘Network Play’. +2) Enter your user name, and the network service you wish to use. +3) Click on ‘Create’ on the ‘Join or Create session screen’. +4) Enter a session name and select ‘OK’. +5) Wait for others to join your game. The computer will fly the other ship in a circle until your opponent joins + +Joining a game in session: +1) Start the game and select ‘Network Play’. +2) Enter your user name, and the network service you wish to use. +3) Click on ‘Start Search’ on the ‘Join or Create session screen’. +4) If you know the name of the computer hosting the session, enter it in the ‘Hostname’ box and press OK. If you don’t know the computer name, leave the ‘Hostname’ box blank and press OK to scan for all Spacewar sessions. +5) Highlight the session, and click on ‘Join’. +6) The game will start. + +Controls: +The mouse controls the ship yaw and pitch. The farther the mouse pointer is from the center of the screen, the greater the angle. + +Esc - Exit +W or Up Arrow - Thrust forward +Spacebar - Hyperspace +C - Change camera view +F5 - Taunt +F6-F10 - Dude! \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/RedShip.x b/Source Code updated 08-12-05/Spacewar3D/Media/RedShip.x new file mode 100644 index 0000000..620753e --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Media/RedShip.x @@ -0,0 +1,16120 @@ +xof 0303txt 0032 +template VertexDuplicationIndices { + + DWORD nIndices; + DWORD nOriginalVertices; + array DWORD indices[nIndices]; +} + +template EffectParamDWord { + + STRING ParamName; + DWORD Value; +} + +template FVFData { + + DWORD dwFVF; + DWORD nDWords; + array DWORD data[nDWords]; +} + +template EffectFloats { + + DWORD nFloats; + array FLOAT Floats[nFloats]; +} + +template EffectString { + + STRING Value; +} + +template EffectDWord { + <622c0ed0-956e-4da9-908a-2af94f3ce716> + DWORD Value; +} + +template EffectInstance { + + STRING EffectFilename; + [...] +} + +template AnimTicksPerSecond { + <9e415a43-7ba6-4a73-8743-b73d47e88476> + DWORD AnimTicksPerSecond; +} + +template VertexElement { + + DWORD Type; + DWORD Method; + DWORD Usage; + DWORD UsageIndex; +} + +template DeclData { + + DWORD nElements; + array VertexElement Elements[nElements]; + DWORD nDWords; + array DWORD data[nDWords]; +} + +template EffectParamFloats { + <3014b9a0-62f5-478c-9b86-e4ac9f4e418b> + STRING ParamName; + DWORD nFloats; + array FLOAT Floats[nFloats]; +} + +template EffectParamString { + <1dbc4c88-94c1-46ee-9076-2c28818c9481> + STRING ParamName; + STRING Value; +} + + +Frame { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Mesh Mesh_RedShipStretched9_frozen { + 1755; + 0.584528;-0.019685;-2.082047;, + 0.585738;-0.009913;-2.100000;, + 0.582267;0.022328;-2.100000;, + 0.577701;0.048408;-2.100000;, + 0.561961;0.087381;-2.081948;, + -0.514826;-0.424377;-1.976345;, + -0.837375;-0.061806;-1.979258;, + -0.672095;-0.250501;-1.981134;, + -0.324358;0.383266;-1.983475;, + -0.889670;0.282478;-1.976064;, + 0.010620;0.440164;-1.979410;, + 0.497172;-0.160433;-2.113509;, + 0.532791;-0.125281;-2.100000;, + 0.488038;-0.166907;-2.100000;, + 0.018616;-0.077157;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.031951;-0.074576;-1.650000;, + 0.034840;-0.186058;-1.680000;, + 0.006894;-0.188993;-1.680000;, + 0.003650;-0.078729;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.006934;0.001809;-1.600000;, + 0.045876;-0.069625;-1.650000;, + 0.060992;-0.180997;-1.680000;, + 0.169422;-0.291931;-2.100000;, + 0.096778;-0.300094;-2.100000;, + 0.019151;-0.304827;-2.100000;, + -0.021154;-0.187708;-1.680000;, + -0.058761;-0.302754;-2.100000;, + -0.047671;-0.184186;-1.680000;, + -0.132420;-0.297074;-2.100000;, + -0.074680;-0.176374;-1.680000;, + -0.207443;-0.284475;-2.100000;, + -0.099302;-0.166791;-1.680000;, + -0.275839;-0.269018;-2.100000;, + -0.123101;-0.152984;-1.680000;, + -0.341946;-0.246748;-2.100000;, + -0.144133;-0.137981;-1.680000;, + -0.400369;-0.222551;-2.100000;, + -0.163465;-0.117966;-1.680000;, + -0.454070;-0.190267;-2.100000;, + -0.182593;-0.093911;-1.680000;, + -0.507203;-0.151469;-2.100000;, + -0.197160;-0.066276;-1.680000;, + -0.547668;-0.106897;-2.100000;, + -0.205098;-0.042712;-1.680000;, + -0.569717;-0.068890;-2.100000;, + -0.209295;-0.018849;-1.680000;, + -0.581375;-0.030401;-2.100000;, + -0.210547;0.006150;-1.680000;, + -0.584853;0.009919;-2.100000;, + -0.208910;0.023714;-1.680000;, + -0.580304;0.038249;-2.100000;, + -0.205252;0.042523;-1.680000;, + -0.570144;0.068585;-2.100000;, + -0.197342;0.066105;-1.680000;, + -0.548172;0.106621;-2.100000;, + -0.185840;0.088812;-1.680000;, + -0.516221;0.143245;-2.100000;, + -0.167349;0.114771;-1.680000;, + -0.464857;0.185115;-2.100000;, + -0.144195;0.137422;-1.680000;, + -0.400541;0.221648;-2.100000;, + -0.122896;0.153168;-1.680000;, + -0.341379;0.247045;-2.100000;, + -0.099543;0.166253;-1.680000;, + -0.276507;0.268150;-2.100000;, + -0.074419;0.176509;-1.680000;, + -0.206719;0.284692;-2.100000;, + -0.048081;0.183716;-1.680000;, + -0.133559;0.296316;-2.100000;, + -0.013487;0.188596;-1.680000;, + -0.037465;0.304187;-2.100000;, + 0.027718;0.187281;-1.680000;, + 0.076994;0.302065;-2.100000;, + 0.061361;0.180506;-1.680000;, + 0.170448;0.291138;-2.100000;, + 0.087176;0.171747;-1.680000;, + 0.242155;0.277011;-2.100000;, + 0.111441;0.160064;-1.680000;, + 0.309558;0.258168;-2.100000;, + 0.133840;0.145603;-1.680000;, + 0.371777;0.234843;-2.100000;, + 0.153895;0.128680;-1.680000;, + 0.427487;0.207548;-2.100000;, + 0.171342;0.109513;-1.680000;, + 0.475949;0.176634;-2.100000;, + 0.185686;0.088941;-1.680000;, + 0.515794;0.143453;-2.100000;, + 0.194607;0.072131;-1.680000;, + 0.540575;0.116341;-2.100000;, + 0.201735;0.054405;-1.680000;, + 0.560376;0.087749;-2.100000;, + 0.207972;0.030013;-1.680000;, + 0.577701;0.048408;-2.100000;, + 0.209616;0.013843;-1.680000;, + 0.582267;0.022328;-2.100000;, + 0.210866;-0.006146;-1.680000;, + 0.585738;-0.009913;-2.100000;, + 0.207764;-0.030630;-1.680000;, + 0.577122;-0.049403;-2.100000;, + 0.201568;-0.054585;-1.680000;, + 0.559910;-0.088040;-2.100000;, + 0.191805;-0.077674;-1.680000;, + 0.532791;-0.125281;-2.100000;, + 0.488038;-0.166907;-2.100000;, + 0.175694;-0.103482;-1.680000;, + 0.153877;-0.129238;-1.680000;, + 0.427437;-0.208448;-2.100000;, + 0.134027;-0.145410;-1.680000;, + 0.372296;-0.234532;-2.100000;, + 0.111245;-0.160612;-1.680000;, + 0.309013;-0.259052;-2.100000;, + 0.087421;-0.171599;-1.680000;, + 0.242837;-0.276773;-2.100000;, + 0.057354;-0.064331;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.068611;-0.056820;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.076515;-0.050380;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.086605;-0.038468;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.093881;-0.026812;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.097100;-0.019201;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.099516;-0.009861;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.100431;-0.002634;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.099964;0.004846;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.099367;0.010719;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.096965;0.020111;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.094718;0.025699;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.091645;0.031490;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.085192;0.040745;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.077423;0.049280;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.068271;0.057002;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.057541;0.063930;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.045491;0.069731;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.032714;0.074066;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.015018;0.077630;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.007516;0.078349;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.025793;0.075771;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.038987;0.072160;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.051690;0.066975;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.063079;0.060594;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.072698;0.053482;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.083431;0.042983;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.091448;0.031728;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.095597;0.023537;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.098658;0.014412;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.099891;0.008071;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.100291;0.003783;-1.650000;, + -0.099774;-0.006523;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.098201;-0.015473;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.095735;-0.022793;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.090087;-0.033507;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.080665;-0.045356;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.072031;-0.054295;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.063429;-0.060431;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.051468;-0.067371;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.039379;-0.072076;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.025022;-0.076228;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.011378;-0.078040;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.006934;0.001809;-1.600000;, + 0.577701;0.048408;-2.100000;, + 0.560376;0.087749;-2.100000;, + 0.540575;0.116341;-2.100000;, + 0.515794;0.143453;-2.100000;, + 0.510726;0.149656;-2.080771;, + 0.475949;0.176634;-2.100000;, + 0.415471;0.224821;-2.053608;, + 0.427487;0.207548;-2.100000;, + 0.371777;0.234843;-2.100000;, + 0.287941;0.273800;-2.053220;, + 0.309558;0.258168;-2.100000;, + 0.242155;0.277011;-2.100000;, + 0.140435;0.303583;-2.052975;, + 0.170448;0.291138;-2.100000;, + 0.076994;0.302065;-2.100000;, + -0.020228;0.312739;-2.051223;, + -0.037465;0.304187;-2.100000;, + -0.133559;0.296316;-2.100000;, + -0.185346;0.297117;-2.051943;, + -0.206719;0.284692;-2.100000;, + -0.276507;0.268150;-2.100000;, + -0.378649;0.237251;-2.072261;, + -0.341379;0.247045;-2.100000;, + -0.400541;0.221648;-2.100000;, + -0.464857;0.185115;-2.100000;, + -0.501510;0.157920;-2.082566;, + -0.516221;0.143245;-2.100000;, + -0.561961;0.087381;-2.081949;, + -0.548172;0.106621;-2.100000;, + -0.570144;0.068585;-2.100000;, + -0.580304;0.038249;-2.100000;, + -0.584528;0.019685;-2.082047;, + -0.584853;0.009919;-2.100000;, + -0.581375;-0.030401;-2.100000;, + -0.598588;-0.010152;-2.053662;, + -0.589705;0.072993;-2.046177;, + -0.536220;0.148296;-2.045082;, + -0.444599;0.215561;-2.044787;, + -0.322003;0.268339;-2.044638;, + -0.189390;0.323889;-2.016137;, + -0.344103;0.287175;-2.016201;, + -0.475086;0.230855;-2.016297;, + -0.573409;0.158894;-2.016410;, + -0.618661;0.073031;-2.023786;, + -0.644793;-0.022273;-2.018720;, + -0.593961;-0.061847;-2.046592;, + -0.569669;-0.069860;-2.081949;, + -0.569717;-0.068890;-2.100000;, + -0.537045;-0.122831;-2.081341;, + -0.547668;-0.106897;-2.100000;, + -0.507203;-0.151469;-2.100000;, + -0.454070;-0.190267;-2.100000;, + -0.507625;-0.173425;-2.045423;, + -0.405724;-0.229956;-2.052528;, + -0.400369;-0.222551;-2.100000;, + -0.341946;-0.246748;-2.100000;, + -0.281432;-0.272641;-2.061748;, + -0.275839;-0.269018;-2.100000;, + -0.135697;-0.301383;-2.061686;, + -0.132420;-0.297074;-2.100000;, + 0.019472;-0.309436;-2.061543;, + 0.019151;-0.304827;-2.100000;, + 0.174557;-0.298476;-2.052526;, + 0.169422;-0.291931;-2.100000;, + 0.317409;-0.264558;-2.052676;, + 0.309013;-0.259052;-2.100000;, + 0.438284;-0.212494;-2.052938;, + 0.427437;-0.208448;-2.100000;, + 0.488038;-0.166907;-2.100000;, + 0.555666;-0.129522;-2.045552;, + 0.561961;-0.087381;-2.081948;, + 0.532791;-0.125281;-2.100000;, + 0.559910;-0.088040;-2.100000;, + 0.577122;-0.049403;-2.100000;, + 0.585738;-0.009913;-2.100000;, + -0.561899;-0.117294;-2.045892;, + -0.528883;-0.196471;-2.016354;, + -0.608231;-0.118516;-2.016463;, + -0.693731;-0.083927;-1.995495;, + -0.693766;0.023589;-1.999182;, + -0.633775;0.175076;-1.995693;, + -0.380924;0.316855;-1.995611;, + -0.046990;0.372603;-1.995389;, + -0.324358;0.383266;-1.983475;, + 0.010620;0.440164;-1.979410;, + 0.298090;0.340123;-1.995596;, + 0.043001;0.339792;-2.016198;, + 0.269211;0.308144;-2.016165;, + 0.413281;0.261196;-2.016246;, + 0.507625;0.173425;-2.045423;, + 0.576321;0.098826;-2.045763;, + 0.590171;0.029549;-2.062068;, + 0.582267;0.022328;-2.100000;, + 0.610576;-0.031066;-2.037798;, + 0.594136;-0.138954;-2.016665;, + 0.475086;-0.230855;-2.016297;, + 0.344103;-0.287175;-2.016201;, + 0.189390;-0.323889;-2.016137;, + 0.041512;-0.330098;-2.022502;, + -0.104034;-0.326946;-2.022295;, + -0.263266;-0.301614;-2.022393;, + -0.413281;-0.261196;-2.016246;, + -0.584583;-0.216674;-1.995673;, + -0.672095;-0.250501;-1.981134;, + -0.837375;-0.061806;-1.979258;, + -0.738624;0.203658;-1.981353;, + -0.889670;0.282478;-1.976064;, + -1.090871;-0.137427;-1.977853;, + -0.514826;-0.424377;-1.976345;, + -1.007268;-0.380740;-1.983444;, + -1.548342;-0.370439;-2.012004;, + -1.696239;-0.114824;-2.012088;, + -1.276287;0.091264;-1.986101;, + -1.007267;0.380740;-1.983444;, + -1.609237;0.314544;-2.012296;, + -2.019431;0.217971;-2.026648;, + -2.051885;-0.122081;-2.026733;, + -1.906587;-0.411980;-2.026753;, + -2.172221;-0.264884;-2.049908;, + -2.208946;0.003566;-2.046405;, + -2.172220;0.264883;-2.049908;, + -1.862100;0.521774;-2.030372;, + -1.539293;0.754874;-2.030354;, + -1.091690;0.691437;-2.012297;, + -0.323428;0.627146;-1.982359;, + 0.188049;0.548330;-1.976692;, + 0.464946;0.358602;-1.981824;, + 0.584582;0.216673;-1.995674;, + 0.528883;0.196471;-2.016354;, + 0.608231;0.118516;-2.016463;, + 0.693728;0.083926;-1.995496;, + 0.795138;0.151807;-1.979234;, + 1.046082;0.053645;-1.976680;, + 0.971606;0.366819;-1.981084;, + 0.498764;0.585262;-1.982613;, + 0.233745;0.894983;-2.012880;, + -0.480256;0.853626;-2.012457;, + -1.030371;0.930210;-2.026629;, + -1.176553;0.987101;-2.049890;, + -1.589672;1.006390;-2.101016;, + -2.035574;0.757791;-2.100999;, + -2.342678;0.457654;-2.100985;, + -2.503582;0.216804;-2.107611;, + -2.499483;-0.000000;-2.101083;, + -2.506769;-0.249627;-2.109704;, + -2.634058;0.281762;-2.113101;, + -2.524763;0.497446;-2.112719;, + -2.173990;0.793116;-2.114576;, + -1.520230;1.129057;-2.114832;, + -1.035241;1.186447;-2.101030;, + -0.668264;1.068998;-2.037797;, + -0.410083;1.285609;-2.101038;, + -0.141315;1.144714;-2.044291;, + 0.156399;1.293546;-2.099148;, + 0.354925;1.076078;-2.028446;, + 0.728383;1.246801;-2.101037;, + 0.755557;1.050666;-2.036831;, + 1.176554;0.987098;-2.049889;, + 1.323339;1.106043;-2.101025;, + 1.627080;0.794873;-2.049895;, + 1.827910;0.889912;-2.101008;, + 1.868702;0.561065;-2.036658;, + 2.207764;0.613215;-2.100992;, + 2.156552;0.180261;-2.040365;, + 2.437169;0.294840;-2.100981;, + 2.499482;0.000000;-2.101083;, + 2.135567;-0.226223;-2.040262;, + 2.479278;-0.291976;-2.107705;, + 2.207765;-0.613214;-2.100992;, + 1.862103;-0.521775;-2.030373;, + 1.827909;-0.889912;-2.101008;, + 1.539298;-0.754874;-2.030354;, + 1.323340;-1.106043;-2.101025;, + 1.111536;-0.936566;-2.030334;, + 0.738430;-1.267664;-2.108048;, + 0.607975;-1.054439;-2.030321;, + 0.164622;-1.309559;-2.104592;, + 0.099711;-1.123765;-2.037903;, + -0.410082;-1.285609;-2.101038;, + -0.327772;-1.128258;-2.043183;, + -0.755548;-1.050667;-2.036831;, + -1.035241;-1.186447;-2.101030;, + -1.176553;-0.987101;-2.049889;, + -1.589671;-1.006390;-2.101016;, + -1.627064;-0.794867;-2.049891;, + -2.035573;-0.757792;-2.100999;, + -2.135546;-0.788889;-2.112071;, + -2.342678;-0.457655;-2.100985;, + -2.362648;-0.651580;-2.113850;, + -2.662308;-0.230717;-2.112256;, + -0.187684;1.066054;-2.026465;, + -1.868700;-0.561063;-2.036657;, + -1.296511;-0.830540;-2.025872;, + -0.269986;-1.047769;-2.024298;, + 0.233745;-0.894983;-2.012880;, + 1.091715;-0.691440;-2.012298;, + 1.548316;-0.370433;-2.012003;, + 2.014757;-0.139858;-2.024978;, + 1.920321;0.381766;-2.025884;, + 1.296491;0.830547;-2.025872;, + 1.091714;0.691440;-2.012298;, + 1.609216;0.314537;-2.012295;, + 1.696218;-0.114823;-2.012087;, + 1.243371;-0.000000;-1.982706;, + 1.002365;-0.375717;-1.982926;, + 0.373779;-0.600509;-1.980985;, + -0.448358;-0.607295;-1.983330;, + -0.480256;-0.853627;-2.012457;, + -1.091691;-0.691437;-2.012297;, + -0.002936;-0.532874;-1.976389;, + 0.803951;-0.332546;-1.976697;, + 0.620496;-0.306367;-1.979631;, + 0.095447;-0.428682;-1.981275;, + -0.341484;-0.381140;-1.982988;, + -0.298090;-0.340123;-1.995596;, + 0.046990;-0.372603;-1.995389;, + 0.380925;-0.316855;-1.995611;, + 0.633772;-0.175076;-1.995694;, + 0.678854;-0.023065;-2.004519;, + 0.627917;0.041660;-2.023906;, + 0.757959;-0.036678;-1.987479;, + 0.870418;-0.079501;-1.977993;, + -0.602530;0.570366;4.817112;, + -0.611196;0.698561;4.035167;, + -0.676343;0.646430;4.201257;, + -0.352018;0.614821;5.470017;, + -0.363899;0.563979;5.762108;, + -0.524555;0.487963;5.419045;, + -0.345614;0.346398;6.454107;, + -0.436221;0.411494;5.978360;, + 0.602531;0.570366;4.817113;, + 0.676344;0.646430;4.201257;, + 0.611197;0.698561;4.035167;, + 0.359237;0.570158;5.755197;, + 0.524557;0.487963;5.419044;, + 0.345616;0.346398;6.454108;, + 0.436222;0.411494;5.978360;, + 0.310635;0.534030;5.989142;, + 0.237979;0.466016;6.313915;, + 0.282393;0.337691;6.628276;, + 0.230744;0.336532;6.721437;, + 0.188756;0.339649;6.755748;, + 0.163209;0.529472;6.152802;, + 0.196753;0.600745;5.789423;, + 0.296115;0.631596;5.448692;, + 0.328479;0.724680;4.460145;, + 0.516611;0.745603;3.903925;, + 0.368798;0.783393;3.900063;, + 0.277834;0.806053;3.900031;, + 0.185811;0.826810;3.899970;, + 0.000000;0.763789;4.479489;, + 0.093082;0.841972;3.899911;, + 0.000000;0.847847;3.899884;, + -0.093082;0.841972;3.899911;, + -0.185811;0.826810;3.899970;, + -0.302143;0.727742;4.480578;, + -0.277833;0.806053;3.900031;, + -0.368797;0.783393;3.900063;, + -0.516609;0.745603;3.903926;, + -0.244348;0.607545;5.723260;, + -0.297035;0.534707;6.016507;, + -0.237977;0.466016;6.313916;, + -0.282392;0.337691;6.628276;, + -0.230742;0.336532;6.721437;, + -0.188754;0.339649;6.755748;, + -0.126977;0.477795;6.331692;, + -0.140048;0.344941;6.761896;, + -0.059036;0.349193;6.759630;, + 0.118481;0.347203;6.761631;, + -0.009952;0.666304;5.317332;, + -0.117000;0.606984;5.789751;, + -0.117361;0.550210;6.077196;, + -0.513514;0.080504;-2.719680;, + -0.527700;0.047763;-2.720954;, + -0.482619;0.121038;-2.720876;, + 0.585738;-0.009913;-2.100000;, + 0.577701;0.048408;-2.100000;, + 0.582267;0.022328;-2.100000;, + 0.427437;-0.208448;-2.100000;, + 0.497172;-0.160433;-2.113509;, + 0.488038;-0.166907;-2.100000;, + -0.438261;0.160999;-2.719695;, + -0.384556;0.193864;-2.720744;, + -0.275839;-0.269018;-2.100000;, + -0.341946;-0.246748;-2.100000;, + -0.400369;-0.222551;-2.100000;, + -0.132420;-0.297074;-2.100000;, + -0.207443;-0.284475;-2.100000;, + 0.019151;-0.304827;-2.100000;, + -0.058761;-0.302754;-2.100000;, + 0.309013;-0.259052;-2.100000;, + 0.427437;-0.208448;-2.100000;, + 0.372296;-0.234532;-2.100000;, + 0.169422;-0.291931;-2.100000;, + 0.096778;-0.300094;-2.100000;, + 0.242837;-0.276773;-2.100000;, + -0.400369;-0.222551;-2.100000;, + -0.454070;-0.190267;-2.100000;, + -0.504959;-0.162008;-2.147190;, + -0.507203;-0.151469;-2.100000;, + -0.568264;-0.088688;-2.147633;, + -0.547668;-0.106897;-2.100000;, + -0.569717;-0.068890;-2.100000;, + -0.589197;-0.030090;-2.147772;, + -0.581375;-0.030401;-2.100000;, + -0.584853;0.009919;-2.100000;, + -0.606347;0.030655;-2.186367;, + -0.580304;0.038249;-2.100000;, + -0.570144;0.068585;-2.100000;, + -0.585725;0.092129;-2.195210;, + -0.548172;0.106621;-2.100000;, + -0.541674;0.149454;-2.194911;, + -0.516221;0.143245;-2.100000;, + -0.464857;0.185115;-2.100000;, + -0.448953;0.217489;-2.195193;, + -0.400541;0.221648;-2.100000;, + -0.329315;0.274320;-2.212217;, + -0.341379;0.247045;-2.100000;, + -0.276507;0.268150;-2.100000;, + -0.178782;0.305512;-2.195404;, + -0.206719;0.284692;-2.100000;, + -0.133559;0.296316;-2.100000;, + -0.019557;0.318695;-2.193108;, + -0.037465;0.304187;-2.100000;, + 0.076994;0.302065;-2.100000;, + 0.147681;0.313724;-2.210064;, + 0.170448;0.291138;-2.100000;, + 0.242155;0.277011;-2.100000;, + 0.299270;0.282897;-2.209995;, + 0.309558;0.258168;-2.100000;, + 0.371777;0.234843;-2.100000;, + 0.430073;0.232643;-2.209839;, + 0.427487;0.207548;-2.100000;, + 0.475949;0.176634;-2.100000;, + 0.521841;0.167536;-2.194970;, + 0.515794;0.143453;-2.100000;, + 0.540575;0.116341;-2.100000;, + 0.566840;0.130509;-2.209889;, + 0.636567;0.235759;-2.425733;, + 0.547620;0.345802;-2.523279;, + 0.356485;0.408081;-2.523476;, + 0.140703;0.442353;-2.523592;, + -0.005094;0.359922;-2.311035;, + -0.201423;0.358411;-2.346024;, + -0.306969;0.369003;-2.414368;, + -0.277172;0.473756;-2.622680;, + -0.066000;0.484197;-2.603551;, + 0.082736;0.740406;-3.139611;, + 0.390159;0.667944;-3.043827;, + 0.709844;0.592220;-3.043757;, + 0.980641;0.475994;-3.043774;, + 0.774894;0.287168;-2.622787;, + 0.806299;0.160479;-2.526041;, + 0.702548;0.110640;-2.370409;, + 0.849816;0.067007;-2.523854;, + 1.329945;0.113877;-3.055131;, + 1.344604;0.021663;-3.052567;, + 1.453516;0.004767;-3.183299;, + 1.334677;-0.090790;-3.051804;, + 0.842571;0.003170;-2.502543;, + 0.655322;0.043500;-2.270136;, + 0.603735;0.050831;-2.191761;, + 0.560376;0.087749;-2.100000;, + 0.577701;0.048408;-2.100000;, + 0.585738;-0.009913;-2.100000;, + 0.632978;-0.032053;-2.234152;, + 0.849293;-0.072384;-2.525282;, + 0.878733;-0.171266;-2.608567;, + 1.290187;-0.203018;-3.055108;, + 1.440825;-0.125712;-3.197645;, + 1.461865;-0.024758;-3.216848;, + 1.427532;-0.143292;-3.226859;, + 1.397941;-0.221938;-3.206894;, + 1.370771;-0.243854;-3.176368;, + 1.257419;-0.297858;-3.092297;, + 1.091872;-0.405030;-3.043794;, + 1.277594;-0.368086;-3.197128;, + 1.346337;-0.296237;-3.219161;, + 1.396001;-0.177516;-3.229328;, + 1.295576;-0.334634;-3.228351;, + 1.207413;-0.425261;-3.223292;, + 1.165079;-0.456523;-3.190389;, + 0.981076;-0.545020;-3.154101;, + 1.039452;-0.536143;-3.212407;, + 1.030095;-0.530542;-3.228170;, + 1.228869;-0.335694;-3.220278;, + 1.351084;-0.163174;-3.218752;, + 1.403414;0.047913;-3.224376;, + 1.435103;0.093048;-3.228509;, + 1.453875;0.067494;-3.218806;, + 1.440825;0.125712;-3.197645;, + 1.290188;0.203017;-3.055109;, + 1.257420;0.297859;-3.092299;, + 1.370771;0.243854;-3.176368;, + 1.397941;0.221938;-3.206894;, + 1.410196;0.188260;-3.224844;, + 1.331160;0.312881;-3.220887;, + 1.277594;0.368086;-3.197129;, + 1.144905;0.370044;-3.054745;, + 1.178857;0.438901;-3.179029;, + 1.205428;0.429593;-3.221350;, + 1.245083;0.359849;-3.228675;, + 1.309829;0.255677;-3.222952;, + 1.247040;0.131410;-3.168468;, + 1.174694;0.317332;-3.192826;, + 1.029453;0.500276;-3.224873;, + 1.030094;0.530543;-3.228170;, + 1.053073;0.530009;-3.203804;, + 0.848306;0.613578;-3.178357;, + 0.640952;0.685774;-3.202900;, + 0.462687;0.723642;-3.202887;, + 0.209154;0.754837;-3.202860;, + -0.080929;0.761074;-3.215682;, + -0.139974;0.743333;-3.153702;, + -0.325521;0.727419;-3.153718;, + -0.333778;0.740444;-3.221000;, + 0.000741;0.757426;-3.227416;, + 0.333777;0.740444;-3.221000;, + 0.597928;0.690003;-3.226378;, + 0.854782;0.616102;-3.223047;, + 0.682227;0.649416;-3.227352;, + 0.977023;0.475243;-3.199081;, + 0.902250;0.347910;-3.087675;, + 0.698461;0.457988;-3.087895;, + 0.707426;0.590950;-3.199199;, + 0.404219;0.629056;-3.169158;, + 0.409780;0.469198;-3.009334;, + 0.319888;0.223891;-2.720582;, + 0.194504;0.260937;-2.719673;, + 0.162017;0.508585;-3.009433;, + 0.057315;0.278295;-2.719686;, + -0.054949;0.515364;-3.011107;, + -0.083830;0.276473;-2.719680;, + -0.255999;0.496085;-3.006935;, + -0.219221;0.255555;-2.719686;, + -0.304761;0.228928;-2.720583;, + -0.537310;0.522469;-3.097013;, + -0.754631;0.433107;-3.087861;, + -0.384556;0.193864;-2.720744;, + -0.944003;0.316365;-3.087629;, + -0.482619;0.121038;-2.720876;, + -1.015981;0.159571;-3.051276;, + -0.527700;0.047763;-2.720954;, + -1.062721;0.036089;-3.054313;, + -0.968923;-0.013750;-2.996992;, + -0.535996;0.009032;-2.719686;, + -0.533860;-0.027179;-2.719779;, + -0.521748;-0.062148;-2.721115;, + -1.015981;-0.159571;-3.051276;, + -1.247041;-0.131410;-3.168468;, + -1.259194;0.048717;-3.163331;, + -1.190625;0.232325;-3.168369;, + -1.228872;0.335694;-3.220279;, + -1.351089;0.163174;-3.218753;, + -1.400916;-0.048033;-3.223921;, + -1.309831;-0.255677;-3.222953;, + -1.174686;-0.317326;-3.192820;, + -0.962678;-0.310425;-3.093486;, + -0.708507;-0.196181;-2.890979;, + -0.502373;-0.097902;-2.719762;, + -0.455662;-0.148411;-2.719730;, + -0.586941;-0.284997;-2.891010;, + -0.366071;-0.204930;-2.719702;, + -0.254481;-0.245620;-2.720469;, + -0.775817;-0.429769;-3.093697;, + 0.109047;0.665482;-3.174294;, + -0.208154;0.653709;-3.168815;, + -0.447931;0.619648;-3.169663;, + -0.707418;0.590945;-3.199193;, + -0.977014;0.475239;-3.199076;, + -1.029453;0.500275;-3.224872;, + -0.749899;0.627277;-3.227501;, + -0.399746;0.708115;-3.228133;, + -0.070205;0.729417;-3.224252;, + 0.227486;0.712796;-3.218926;, + 0.371357;0.720550;-3.228572;, + -0.597926;0.690004;-3.226378;, + -0.841617;0.615319;-3.226328;, + -1.030097;0.530541;-3.228170;, + -1.295577;0.334632;-3.228351;, + -1.396002;0.177516;-3.229329;, + -1.449983;0.050217;-3.226850;, + -1.443766;-0.076378;-3.227726;, + -1.245082;-0.359850;-3.228675;, + -1.029452;-0.500276;-3.224872;, + -0.977014;-0.475239;-3.199076;, + -0.707418;-0.590945;-3.199193;, + -0.682225;-0.649417;-3.227352;, + -1.030097;-0.530541;-3.228170;, + -1.205429;-0.429593;-3.221349;, + -1.331160;-0.312881;-3.220886;, + -1.408294;-0.193930;-3.223740;, + -1.397941;-0.221938;-3.206894;, + -1.440825;-0.125712;-3.197645;, + -1.456569;-0.053228;-3.197687;, + -1.460380;0.024723;-3.197932;, + -1.440825;0.125712;-3.197645;, + -1.409407;0.204798;-3.216141;, + -1.346339;0.296237;-3.219160;, + -1.207413;0.425262;-3.223292;, + -1.039452;0.536143;-3.212407;, + -0.856978;0.617742;-3.202037;, + -0.694848;0.670723;-3.202031;, + -0.520416;0.712293;-3.202026;, + -0.555057;0.635459;-3.043735;, + -0.503968;0.420043;-2.622768;, + -0.480742;0.314786;-2.414524;, + -0.544936;0.256811;-2.370187;, + -0.641065;0.176814;-2.357041;, + -0.696075;0.337563;-2.622858;, + -0.785358;0.570158;-3.054623;, + -0.981077;0.545020;-3.154101;, + -1.091864;0.405026;-3.043781;, + -0.836938;0.232220;-2.619820;, + -0.926284;0.111693;-2.622507;, + -0.696737;0.109765;-2.362313;, + -0.698859;0.046698;-2.332379;, + -0.627883;-0.053154;-2.234611;, + -0.575882;-0.134142;-2.225071;, + -0.484386;-0.213874;-2.232182;, + -0.360943;-0.272193;-2.232384;, + -0.275839;-0.269018;-2.100000;, + -0.212459;-0.311780;-2.232503;, + -0.132420;-0.297074;-2.100000;, + -0.059899;-0.330131;-2.235427;, + 0.019151;-0.304827;-2.100000;, + 0.104324;-0.326974;-2.234875;, + 0.169422;-0.291931;-2.100000;, + 0.263885;-0.301596;-2.234799;, + 0.309013;-0.259052;-2.100000;, + 0.405227;-0.255498;-2.234666;, + 0.427437;-0.208448;-2.100000;, + 0.518540;-0.191939;-2.234457;, + 0.524160;-0.144509;-2.147158;, + 0.532791;-0.125281;-2.100000;, + 0.578069;-0.069365;-2.147595;, + 0.559910;-0.088040;-2.100000;, + 0.577122;-0.049403;-2.100000;, + 0.595913;-0.115641;-2.234126;, + 0.636566;-0.235758;-2.425732;, + 0.547620;-0.345801;-2.523279;, + 0.356485;-0.408081;-2.523477;, + 0.140703;-0.442353;-2.523592;, + -0.109322;-0.444270;-2.521519;, + -0.211286;-0.386810;-2.414392;, + -0.397280;-0.344944;-2.414576;, + -0.555842;-0.279349;-2.414693;, + -0.654782;-0.211000;-2.413533;, + -0.807929;-0.158700;-2.526512;, + -0.754744;-0.083136;-2.413523;, + -0.710930;-0.012043;-2.340169;, + -0.934341;0.015270;-2.607332;, + -0.955107;-0.065144;-2.637516;, + -1.329933;-0.113876;-3.055117;, + -1.334315;-0.000000;-3.038420;, + 0.728735;-0.141597;-2.421722;, + 0.774894;-0.287168;-2.622787;, + -1.165079;0.456523;-3.190388;, + -1.277594;0.368086;-3.197128;, + -1.370772;0.243855;-3.176369;, + -1.290176;0.203015;-3.055093;, + -1.329934;0.113876;-3.055119;, + -1.257417;0.297859;-3.092295;, + -1.290177;-0.203015;-3.055094;, + -1.257417;-0.297859;-3.092295;, + -1.370773;-0.243854;-3.176370;, + -1.277594;-0.368086;-3.197128;, + -1.144896;-0.370041;-3.054733;, + -0.774894;-0.287168;-2.622788;, + -0.605367;-0.381967;-2.622715;, + -0.394129;-0.450688;-2.622622;, + -0.390160;-0.667945;-3.043828;, + -0.084525;-0.695866;-3.043870;, + 0.131909;-0.698331;-3.054650;, + -0.147857;-0.750259;-3.173274;, + -0.462688;-0.723642;-3.202887;, + -0.640951;-0.685775;-3.202900;, + -0.709838;-0.592216;-3.043746;, + -0.980635;-0.475991;-3.043764;, + -1.178858;-0.438901;-3.179030;, + -1.053073;-0.530009;-3.203804;, + -0.848308;-0.613578;-3.178357;, + -0.854781;-0.616102;-3.223047;, + -0.597926;-0.690004;-3.226378;, + -0.333777;-0.740444;-3.221000;, + -0.080929;-0.761074;-3.215682;, + 0.148230;-0.758200;-3.202019;, + 0.325521;-0.727419;-3.153718;, + 0.555058;-0.635462;-3.043741;, + 0.785365;-0.570162;-3.054636;, + 0.856978;-0.617742;-3.202037;, + 0.841618;-0.615319;-3.226328;, + 0.694848;-0.670723;-3.202031;, + 0.520415;-0.712293;-3.202026;, + 0.333778;-0.740444;-3.221000;, + -0.000741;-0.757426;-3.227416;, + -0.371357;-0.720550;-3.228572;, + -0.227486;-0.712796;-3.218926;, + -0.404219;-0.629057;-3.169159;, + -0.533307;-0.516113;-3.089432;, + -0.140636;-0.268785;-2.720516;, + -0.242126;-0.538351;-3.051573;, + -0.109047;-0.665482;-3.174293;, + 0.070205;-0.729417;-3.224252;, + 0.399746;-0.708115;-3.228133;, + 0.597928;-0.690003;-3.226378;, + 0.749899;-0.627278;-3.227501;, + 0.707426;-0.590950;-3.199199;, + 0.447932;-0.619648;-3.169663;, + 0.208154;-0.653709;-3.168815;, + 0.162017;-0.508585;-3.009433;, + -0.054949;-0.515363;-3.011106;, + -0.017640;-0.279687;-2.719632;, + 0.118612;-0.272999;-2.719681;, + 0.350209;-0.483812;-3.012513;, + 0.599571;-0.500596;-3.093833;, + 0.827951;-0.402462;-3.093652;, + 0.977023;-0.475243;-3.199081;, + 1.029453;-0.500276;-3.224873;, + 0.962781;-0.311367;-3.095468;, + 0.472892;-0.130635;-2.720717;, + 0.586966;-0.285009;-2.891033;, + 0.434967;-0.163398;-2.719707;, + 0.366071;-0.204930;-2.719702;, + 0.254481;-0.245620;-2.720469;, + 0.925982;-0.180529;-3.008724;, + 0.513690;-0.082244;-2.719775;, + 0.982988;-0.069419;-3.011516;, + 0.533860;-0.027179;-2.719779;, + 0.994087;0.004733;-3.012985;, + 0.535572;0.017989;-2.719661;, + 0.963058;0.116349;-3.008656;, + 0.523160;0.061540;-2.719714;, + 0.503279;0.095245;-2.720699;, + 1.016184;0.249822;-3.089662;, + 1.295593;-0.004101;-3.181323;, + 1.253448;-0.107782;-3.169204;, + 1.190624;-0.232325;-3.168368;, + 0.653340;0.242517;-2.890910;, + 0.474867;0.129835;-2.719700;, + 0.420142;0.174563;-2.719688;, + -0.727120;1.298717;-2.112054;, + -1.520230;1.129057;-2.114832;, + -0.140130;1.366452;-2.114212;, + -1.520230;-1.129057;-2.114832;, + -2.362648;-0.651580;-2.113850;, + -2.135546;-0.788889;-2.112071;, + 2.658950;0.055352;-1.885509;, + 2.695193;0.138714;-1.927408;, + 2.617428;0.261483;-1.884819;, + 2.645681;-0.158973;-1.884958;, + 2.678403;-0.203354;-1.927813;, + 2.571238;-0.365503;-1.884305;, + 2.543295;-0.516979;-1.928359;, + 2.753317;-0.438874;-1.991056;, + 2.848641;-0.149430;-1.981596;, + 2.846420;0.221776;-1.990069;, + 2.884626;0.070127;-2.012256;, + 2.858683;-0.202144;-1.999878;, + 2.762845;-0.430177;-2.019103;, + 2.631243;-0.614010;-2.019498;, + 2.624610;-0.618962;-1.990280;, + 2.375204;-0.839658;-1.970504;, + 2.452746;-0.796255;-2.007107;, + 2.407560;-0.769800;-2.068147;, + 2.258979;-0.944232;-1.997191;, + 2.180371;-0.953311;-1.921950;, + 2.434999;-0.561126;-1.885018;, + 2.546489;-0.478001;-1.810230;, + 2.623620;-0.390396;-1.822752;, + 2.715218;-0.259120;-1.822818;, + 2.645681;-0.158973;-1.884958;, + 2.767266;0.071060;-1.826370;, + 2.658950;0.055352;-1.885509;, + 2.617428;0.261483;-1.884819;, + 2.954500;-0.348369;-1.734483;, + 3.151194;-0.464492;-1.614534;, + 3.507579;-0.331609;-1.616709;, + 3.684274;-0.445842;-1.444347;, + 4.093298;-0.348326;-1.444347;, + 4.439450;-0.223568;-1.446190;, + 4.740653;-0.327349;-1.206772;, + 5.099211;-0.237900;-1.206772;, + 5.299703;-0.154975;-1.206772;, + 5.638103;-0.220419;-0.883816;, + 5.872942;-0.142457;-0.883816;, + 6.074676;-0.148644;-0.459651;, + 5.974419;-0.069882;-0.883816;, + 6.215124;-0.064442;-0.463247;, + 5.996296;0.000000;-0.883816;, + 6.238246;0.000000;-0.463247;, + 6.215124;0.064442;-0.463247;, + 5.974418;0.069882;-0.883816;, + 6.107017;0.131841;-0.463247;, + 5.872942;0.142457;-0.883816;, + 5.855819;0.205157;-0.463247;, + 5.638103;0.220419;-0.883816;, + 5.345110;0.126771;-1.208259;, + 5.099211;0.237900;-1.206772;, + 4.546450;0.146109;-1.446560;, + 4.368293;0.255992;-1.444347;, + 3.650840;0.245527;-1.617080;, + 4.093298;0.348326;-1.444347;, + 3.428411;0.367191;-1.614534;, + 2.954499;0.348369;-1.734484;, + 3.151194;0.464492;-1.614534;, + 2.546489;0.478001;-1.810230;, + 2.654914;0.354034;-1.823529;, + 2.518003;0.452423;-1.883953;, + 2.617428;0.261483;-1.884819;, + -2.645681;-0.158973;-1.884957;, + -2.658950;0.055353;-1.885508;, + -2.695193;0.138713;-1.927407;, + -2.617427;0.261483;-1.884818;, + -2.543295;0.516979;-1.928358;, + -2.518003;0.452423;-1.883952;, + -2.623620;0.390396;-1.822751;, + -2.715218;0.259120;-1.822817;, + -2.658950;0.055353;-1.885508;, + -2.767266;-0.071060;-1.826369;, + -2.645681;-0.158973;-1.884957;, + -2.654914;-0.354035;-1.823528;, + -2.954500;-0.348369;-1.734482;, + -3.097254;-0.135721;-1.739578;, + -3.106443;0.164613;-1.734072;, + -2.954500;0.348369;-1.734482;, + -2.546489;0.478001;-1.810229;, + -2.431221;0.570804;-1.809707;, + -2.381616;0.624640;-1.884351;, + -2.375200;0.839661;-1.970503;, + -2.133012;0.981896;-1.899638;, + -2.170479;0.804508;-1.813728;, + -2.289530;0.687274;-1.817940;, + -2.313812;0.712781;-1.681750;, + -2.511147;0.659178;-1.614534;, + -2.827202;0.562619;-1.614533;, + -3.151194;0.464492;-1.614533;, + -3.507579;0.331609;-1.616708;, + -3.684274;0.445842;-1.444346;, + -4.093298;0.348326;-1.444346;, + -4.439450;0.223568;-1.446189;, + -4.740652;0.327349;-1.206771;, + -5.099211;0.237900;-1.206771;, + -5.299703;0.154975;-1.206771;, + -5.638103;0.220419;-0.883815;, + -5.872942;0.142457;-0.883815;, + -5.855819;0.205157;-0.463246;, + -6.107017;0.131841;-0.463246;, + -5.974418;0.069882;-0.883815;, + -6.215123;0.064442;-0.463246;, + -5.996296;-0.000000;-0.883815;, + -6.238245;-0.000000;-0.463246;, + -6.215123;-0.064442;-0.463246;, + -5.974418;-0.069882;-0.883815;, + -6.107017;-0.131841;-0.463246;, + -6.152631;-0.059887;0.044125;, + -6.175693;-0.000000;0.044125;, + -6.152631;0.059887;0.044125;, + -5.995571;0.143862;0.052523;, + -5.338851;0.297872;-0.448721;, + -5.122156;0.324049;-0.876968;, + -3.959739;0.461393;-1.223803;, + -3.203547;0.545928;-1.444347;, + -2.455348;0.705624;-1.467870;, + -2.111634;0.832532;-1.573377;, + -2.080859;0.875637;-1.719012;, + -1.961592;1.067940;-1.689242;, + -2.002898;0.914157;-1.418651;, + -2.138623;0.805232;-1.048113;, + -2.553209;0.697683;-1.223169;, + -3.345123;0.569402;-0.922453;, + -3.218365;0.564687;-0.414690;, + -5.176611;0.273542;0.323048;, + -5.382116;0.172822;0.907607;, + -3.647228;0.193840;2.997547;, + -2.782949;0.483474;1.115138;, + -2.504692;0.692617;-0.701008;, + -1.888562;0.680009;0.633811;, + -1.979246;0.522906;1.808204;, + -0.961931;0.233091;5.664293;, + -1.852786;0.097955;5.903934;, + -2.893876;0.093407;4.695881;, + -2.997237;0.059427;4.728239;, + -5.632438;0.110693;0.882087;, + -5.876044;0.055810;0.621727;, + -5.898130;-0.000000;0.621727;, + -5.876044;-0.055810;0.621727;, + -5.995571;-0.143862;0.052523;, + -5.855818;-0.205157;-0.463246;, + -5.872942;-0.142457;-0.883815;, + -5.345110;-0.126771;-1.208259;, + -5.638102;-0.220419;-0.883815;, + -5.338849;-0.297872;-0.448721;, + -5.176611;-0.273542;0.323047;, + -3.218362;-0.564687;-0.414690;, + -5.122155;-0.324049;-0.876968;, + -5.099211;-0.237900;-1.206771;, + -4.546450;-0.146109;-1.446560;, + -4.368293;-0.255992;-1.444346;, + -3.650840;-0.245528;-1.617079;, + -4.093298;-0.348327;-1.444346;, + -4.740652;-0.327349;-1.206771;, + -3.959741;-0.461393;-1.223803;, + -3.684274;-0.445843;-1.444346;, + -3.428411;-0.367191;-1.614533;, + -3.151194;-0.464492;-1.614533;, + -3.203547;-0.545929;-1.444347;, + -2.553210;-0.697683;-1.223169;, + -3.345125;-0.569402;-0.922453;, + -2.504692;-0.692618;-0.701007;, + -2.138622;-0.805232;-1.048112;, + -2.455348;-0.705625;-1.467870;, + -2.827202;-0.562619;-1.614533;, + -2.546489;-0.478002;-1.810229;, + -2.571238;-0.365503;-1.884304;, + -2.645681;-0.158973;-1.884957;, + 2.617428;0.261483;-1.884819;, + 2.543295;0.516980;-1.928359;, + 2.753316;0.438875;-1.991056;, + 2.762845;0.430178;-2.019103;, + 2.846926;0.239411;-2.018906;, + 2.779238;0.144296;-2.085047;, + 2.719225;0.331883;-2.085110;, + 2.614808;0.482616;-2.094117;, + 2.631242;0.614011;-2.019498;, + 2.624609;0.618963;-1.990280;, + 2.375204;0.839658;-1.970504;, + 2.452748;0.796254;-2.007107;, + 2.407559;0.769800;-2.068147;, + 2.555182;0.603564;-2.077754;, + 2.326015;0.755275;-2.103862;, + 2.178505;0.931499;-2.071511;, + 2.258979;0.944232;-1.997191;, + 2.238381;0.932144;-1.950585;, + 2.133012;0.981897;-1.899638;, + 2.381616;0.624640;-1.884351;, + -1.520230;-1.129057;-2.114832;, + -2.135546;-0.788889;-2.112071;, + -1.589671;-1.006390;-2.101016;, + -1.035241;-1.186447;-2.101030;, + -0.553752;-1.351020;-2.114964;, + -0.410082;-1.285609;-2.101038;, + 0.098577;-1.381384;-2.115171;, + 0.164622;-1.309559;-2.104592;, + 0.738430;-1.267664;-2.108048;, + 0.935216;-1.306159;-2.113881;, + 1.323340;-1.106043;-2.101025;, + 1.827909;-0.889912;-2.101008;, + 1.986322;-0.910625;-2.115137;, + 2.207765;-0.613214;-2.100992;, + 2.326161;-0.663211;-2.115330;, + 2.479278;-0.291976;-2.107705;, + 2.632752;-0.276744;-2.113566;, + 2.587312;0.341483;-2.114601;, + 2.499482;0.000000;-2.101083;, + 2.437169;0.294840;-2.100981;, + 2.413738;0.566759;-2.114940;, + 2.207764;0.613215;-2.100992;, + 2.133218;0.826625;-2.114680;, + 1.827910;0.889912;-2.101008;, + 1.122069;1.256068;-2.114739;, + 1.323339;1.106043;-2.101025;, + 0.626314;1.339776;-2.115026;, + 0.728383;1.246801;-2.101037;, + -0.140130;1.366452;-2.114212;, + 0.156399;1.293546;-2.099148;, + -0.410083;1.285609;-2.101038;, + -0.727120;1.298717;-2.112054;, + -1.035241;1.186447;-2.101030;, + -1.520230;1.129057;-2.114832;, + -0.167557;-0.035460;8.024826;, + -0.178285;0.006524;8.025742;, + -0.184912;-0.011489;8.005918;, + -0.212548;-0.033328;7.950153;, + -0.381149;-0.086816;7.491512;, + -0.213011;-0.082955;7.774764;, + -0.480115;-0.200600;6.634830;, + -0.291581;-0.170511;7.302751;, + -0.136562;-0.080839;8.002510;, + -0.149894;-0.054720;8.025309;, + -0.145968;-0.032168;8.014389;, + -0.178285;0.006524;8.025742;, + -0.178285;0.006524;8.025742;, + -0.148484;0.009339;8.006989;, + -0.115646;-0.016030;7.964330;, + -0.118535;-0.032475;7.988320;, + -0.094701;-0.070165;8.019434;, + -0.078542;-0.087311;8.024562;, + -0.020810;-0.108491;7.997697;, + 0.018236;-0.094633;8.025344;, + 0.091923;-0.098503;7.996337;, + 0.099373;-0.077655;8.025679;, + 0.143955;-0.063274;8.021993;, + 0.162960;-0.090142;7.909122;, + 0.224020;-0.181619;7.394805;, + 0.149562;-0.277026;6.966303;, + 0.021451;-0.341544;6.636920;, + 0.333919;-0.637252;4.583683;, + 0.531059;-0.504832;5.139902;, + 0.398709;-0.258313;6.684009;, + 0.466757;-0.219009;6.591350;, + 0.219099;-0.096019;7.717144;, + 0.170702;-0.029614;8.025198;, + 0.128262;-0.035163;8.003450;, + 0.147385;-0.010930;8.007380;, + 0.147472;0.011062;8.008559;, + 0.117519;-0.013040;7.960468;, + 0.089565;-0.033527;7.940470;, + 0.093145;-0.058654;8.003419;, + 0.026369;-0.082361;8.016177;, + 0.018236;-0.094633;8.025344;, + -0.034616;-0.083654;8.020129;, + -0.082075;-0.055919;7.988870;, + -0.087056;-0.036315;7.940209;, + -0.069887;-0.026561;7.846144;, + -0.036513;-0.048928;7.911997;, + -0.016294;-0.069910;7.988965;, + 0.048857;-0.063097;7.983157;, + 0.031362;-0.051795;7.914162;, + 0.008963;-0.034943;7.730241;, + 0.041821;-0.027724;7.730294;, + 0.064492;-0.012675;7.738653;, + 0.100930;-0.006217;7.910649;, + 0.111012;0.022725;7.959668;, + 0.132851;0.034750;8.007137;, + 0.159251;0.044312;8.025204;, + 0.178935;0.010007;8.024481;, + 0.183857;-0.015772;8.008078;, + 0.243434;-0.046755;7.872767;, + 0.527940;-0.193676;6.586948;, + 1.113191;-0.491475;3.595135;, + 1.235946;-0.444476;3.612017;, + 1.674470;-0.739806;0.749395;, + 1.888563;-0.680009;0.633807;, + 1.965192;-0.880809;-1.005015;, + 2.138623;-0.805232;-1.048113;, + 2.002899;-0.914157;-1.418651;, + 1.866965;-0.936920;-0.819812;, + 1.515480;-0.759823;1.216620;, + 0.894628;-0.448401;4.449628;, + 0.844244;-0.464099;4.605454;, + 0.829616;-0.522587;4.427755;, + 0.911583;-0.786115;2.843533;, + 1.339210;-0.843362;1.561559;, + 1.379683;-0.758525;1.763752;, + -0.144409;0.039948;8.019381;, + -0.178285;0.006524;8.025742;, + -0.106371;0.041125;7.985239;, + -0.131588;0.009626;7.986091;, + -0.095011;0.001347;7.887948;, + -0.084239;-0.011509;7.852240;, + -0.065634;-0.005159;7.704091;, + -0.055120;0.012401;7.650050;, + -0.052861;0.002710;7.508891;, + -0.042089;0.014041;7.280368;, + -0.048560;-0.003862;7.280366;, + -0.049627;-0.010769;7.525294;, + -0.032526;-0.019936;7.280365;, + -0.024204;-0.028201;7.641885;, + 0.001806;-0.027518;7.468070;, + 0.018884;-0.024645;7.280363;, + 0.039135;-0.018153;7.449368;, + 0.047732;-0.006198;7.280371;, + 0.054408;0.000659;7.531584;, + 0.044942;0.011105;7.280363;, + 0.039654;0.019128;7.520342;, + 0.008932;0.024734;7.280373;, + 0.031989;0.027646;7.655967;, + 0.056325;0.025215;7.770269;, + 0.072794;0.004625;7.766625;, + -0.049148;-0.019485;7.656866;, + 0.092717;0.017529;7.897848;, + 0.079361;0.030211;7.900310;, + 0.044678;0.049827;7.924009;, + 0.013220;0.036783;7.757010;, + -0.029603;0.024896;7.590421;, + -0.040655;0.033334;7.774198;, + -0.043069;0.052587;7.939769;, + -0.019848;0.060226;7.956495;, + 0.055886;0.061902;7.984438;, + 0.092740;0.048875;7.986136;, + 0.097692;0.069249;8.019923;, + 0.100355;0.080368;8.024615;, + 0.142412;0.068041;8.015965;, + 0.167077;0.099905;7.872591;, + 0.070210;0.097711;8.011142;, + 0.024960;0.097157;8.024084;, + 0.030357;0.115220;7.982890;, + 0.145321;0.269805;7.080458;, + 0.286405;0.244828;6.991311;, + 0.230744;0.336532;6.721437;, + 0.282393;0.337691;6.628276;, + 0.345616;0.346398;6.454108;, + 0.436222;0.411494;5.978360;, + 0.524557;0.487963;5.419044;, + 0.479710;0.274977;6.397951;, + 0.375398;0.179365;7.000740;, + 0.224244;0.055119;7.872229;, + 0.180282;0.027342;8.002116;, + 0.293671;0.016194;7.883379;, + 0.271705;-0.021357;7.902151;, + 0.854820;-0.017558;7.347630;, + 0.864326;0.016203;7.336747;, + 0.381125;0.039623;7.753528;, + 0.381150;0.086816;7.491511;, + 1.665472;0.046584;6.432648;, + 1.567794;0.017375;6.607078;, + 1.294074;-0.015259;6.903520;, + 1.509122;-0.054568;6.562743;, + 0.394176;-0.092758;7.434560;, + 0.961933;-0.233091;5.664289;, + 1.979246;-0.522906;1.808206;, + 2.504693;-0.692617;-0.701008;, + 2.553209;-0.697683;-1.223170;, + 2.455347;-0.705624;-1.467870;, + 2.111634;-0.832532;-1.573376;, + 2.080859;-0.875637;-1.719011;, + 2.289530;-0.687274;-1.817940;, + 2.313812;-0.712781;-1.681751;, + 2.511147;-0.659178;-1.614534;, + 2.431221;-0.570804;-1.809708;, + 2.827202;-0.562619;-1.614534;, + 3.203547;-0.545928;-1.444347;, + 3.959741;-0.461393;-1.223804;, + 5.122156;-0.324049;-0.876968;, + 5.338850;-0.297872;-0.448721;, + 5.995571;-0.143862;0.052522;, + 6.152632;-0.059887;0.044125;, + 6.175694;0.000000;0.044125;, + 6.152632;0.059887;0.044125;, + 5.995572;0.143862;0.052522;, + 5.338851;0.297872;-0.448721;, + 5.122155;0.324049;-0.876968;, + 4.740652;0.327349;-1.206772;, + 3.959740;0.461393;-1.223804;, + 3.345124;0.569402;-0.922453;, + 3.218364;0.564687;-0.414690;, + 5.176610;0.273542;0.323049;, + 5.382118;0.172822;0.907605;, + 5.632436;0.110693;0.882089;, + 5.876045;0.055810;0.621727;, + 5.898132;0.000000;0.621727;, + 5.876045;-0.055810;0.621727;, + 5.632436;-0.110693;0.882090;, + 5.298762;-0.050098;1.523023;, + 5.227326;0.000000;1.658253;, + 5.298762;0.050098;1.523023;, + 3.155344;0.029812;4.585606;, + 3.628805;-0.019758;3.938147;, + 2.997235;-0.059427;4.728246;, + 2.736220;-0.015059;5.160003;, + 2.137101;0.012168;5.932005;, + 2.997236;0.059427;4.728244;, + 2.893877;0.093407;4.695882;, + 3.647232;0.193841;2.997542;, + 2.782949;0.483474;1.115137;, + 2.504692;0.692618;-0.701009;, + 2.553210;0.697683;-1.223169;, + 3.203547;0.545928;-1.444347;, + 3.684274;0.445843;-1.444347;, + 2.827202;0.562619;-1.614534;, + 2.431221;0.570804;-1.809708;, + 2.289530;0.687274;-1.817940;, + 2.170479;0.804508;-1.813728;, + 2.057138;1.004135;-1.822751;, + 2.035999;1.076514;-1.950848;, + 2.122158;1.023757;-2.007494;, + 1.882229;1.115808;-2.049179;, + 1.930678;1.026961;-2.098426;, + 2.683891;0.168429;-2.110725;, + 2.751632;-0.089538;-2.098945;, + 0.188756;0.339649;6.755748;, + 0.118481;0.347203;6.761631;, + -0.059036;0.349193;6.759630;, + -0.140686;0.273935;7.066674;, + -0.140048;0.344941;6.761896;, + -0.188754;0.339649;6.755748;, + -0.230742;0.336532;6.721437;, + -0.286404;0.244828;6.991310;, + -0.282392;0.337691;6.628276;, + -0.345614;0.346398;6.454107;, + -0.436221;0.411494;5.978360;, + -0.524555;0.487963;5.419045;, + -0.479709;0.274977;6.397952;, + -0.232398;0.138766;7.567773;, + -0.135990;0.078338;8.009528;, + -0.375397;0.179365;7.000741;, + -0.894627;0.448401;4.449626;, + -0.932487;0.537141;4.072765;, + -0.736016;0.565513;4.469385;, + -0.602530;0.570366;4.817112;, + -0.676343;0.646430;4.201257;, + -0.809286;0.766765;3.172646;, + -0.611196;0.698561;4.035167;, + -0.516609;0.745603;3.903926;, + -0.325998;0.870793;3.421735;, + -0.368797;0.783393;3.900063;, + -0.277833;0.806053;3.900031;, + -0.185811;0.826810;3.899970;, + -0.039193;0.978391;3.245008;, + -0.093082;0.841972;3.899911;, + 0.000000;0.847847;3.899884;, + 0.093082;0.841972;3.899911;, + 0.177875;0.934898;3.338752;, + 0.185811;0.826810;3.899970;, + 0.277834;0.806053;3.900031;, + 0.368798;0.783393;3.900063;, + 0.438835;0.861299;3.259376;, + 0.516611;0.745603;3.903925;, + 0.809286;0.766766;3.172646;, + 0.611197;0.698561;4.035167;, + 0.676344;0.646430;4.201257;, + 0.736017;0.565513;4.469382;, + 0.602531;0.570366;4.817113;, + 0.932486;0.537141;4.072774;, + 0.894627;0.448401;4.449632;, + 0.480116;0.200600;6.634830;, + 0.961934;0.233091;5.664287;, + 1.852790;0.097955;5.903932;, + 1.904253;-0.025986;6.206776;, + 2.893879;-0.093407;4.695879;, + 5.382117;-0.172822;0.907607;, + 5.176611;-0.273542;0.323048;, + 3.218363;-0.564687;-0.414690;, + 3.345121;-0.569402;-0.922454;, + 2.782950;-0.483474;1.115138;, + 3.647230;-0.193840;2.997545;, + 1.852789;-0.097955;5.903933;, + 1.979243;0.522906;1.808213;, + 1.888562;0.680009;0.633812;, + 2.138623;0.805232;-1.048114;, + 2.455347;0.705625;-1.467870;, + 2.511147;0.659178;-1.614534;, + 2.313812;0.712781;-1.681750;, + 2.111634;0.832532;-1.573376;, + 2.002898;0.914157;-1.418651;, + 2.080858;0.875637;-1.719011;, + 1.961592;1.067940;-1.689243;, + 1.942166;1.130917;-1.959983;, + 1.690587;1.225129;-2.003441;, + 1.429124;1.264618;-2.073079;, + 1.625368;1.181977;-2.084085;, + 1.683748;1.101459;-2.111299;, + 1.289211;1.259643;-2.103921;, + 1.099100;1.351051;-2.073141;, + 0.618772;1.390518;-2.103939;, + 0.088542;1.412023;-2.109533;, + -0.588008;1.381039;-2.108821;, + -0.991417;1.312096;-2.110921;, + -1.416937;1.234936;-2.097925;, + -1.640930;1.140537;-2.103899;, + -1.967110;0.969524;-2.110623;, + -2.173990;0.793116;-2.114576;, + -2.326019;0.755275;-2.103860;, + -2.524763;0.497446;-2.112719;, + -2.594318;0.559629;-2.077837;, + -2.719225;0.331882;-2.085110;, + -2.634058;0.281762;-2.113101;, + -2.751631;0.089538;-2.098945;, + -2.662308;-0.230717;-2.112256;, + -2.779238;-0.144296;-2.085046;, + -2.817846;0.095669;-2.068228;, + -2.846926;0.239411;-2.018905;, + -2.762845;0.430177;-2.019102;, + -2.631243;0.614011;-2.019497;, + -2.416929;0.760613;-2.068983;, + -2.251767;0.882386;-2.072827;, + -1.843358;1.094710;-2.083423;, + -1.749310;1.182108;-2.038715;, + -2.123043;1.016407;-2.022442;, + -2.258978;0.944232;-1.997191;, + -2.452747;0.796255;-2.007106;, + -2.624610;0.618962;-1.990280;, + -2.753316;0.438876;-1.991055;, + -2.858683;0.202143;-1.999877;, + -2.881796;0.048838;-2.019176;, + -2.884626;-0.070127;-2.012255;, + -2.848641;0.149429;-1.981595;, + -2.238380;0.932145;-1.950585;, + -2.035998;1.076514;-1.950847;, + -1.942166;1.130917;-1.959984;, + -1.690586;1.225130;-2.003439;, + -1.785667;1.203251;-1.918684;, + -1.735266;1.189211;-1.500249;, + -1.779778;1.084014;-0.992107;, + -2.057138;1.004135;-1.822751;, + -2.846926;-0.239411;-2.018905;, + -2.846421;-0.221776;-1.990069;, + -2.678403;-0.203354;-1.927812;, + -2.645681;-0.158973;-1.884957;, + -2.543296;-0.516979;-1.928358;, + -2.434999;-0.561127;-1.885018;, + -2.431221;-0.570804;-1.809707;, + -2.511147;-0.659178;-1.614534;, + -2.313812;-0.712781;-1.681750;, + -2.289530;-0.687274;-1.817940;, + -2.169542;-0.805453;-1.812349;, + -2.080859;-0.875637;-1.719012;, + -2.111634;-0.832532;-1.573376;, + -2.002898;-0.914157;-1.418651;, + -1.961592;-1.067940;-1.689242;, + -2.076601;-1.013887;-1.873733;, + -2.180372;-0.953311;-1.921951;, + -2.375201;-0.839661;-1.970503;, + -2.624610;-0.618962;-1.990279;, + -2.753316;-0.438876;-1.991055;, + -2.762845;-0.430178;-2.019102;, + -2.719225;-0.331883;-2.085110;, + -2.614807;-0.482615;-2.094117;, + -2.631242;-0.614011;-2.019497;, + -2.452747;-0.796255;-2.007106;, + -2.258978;-0.944232;-1.997191;, + -2.035998;-1.076515;-1.950847;, + -1.942166;-1.130917;-1.959984;, + -2.123042;-1.016407;-2.022442;, + -2.251769;-0.882385;-2.072827;, + -2.416928;-0.760613;-2.068983;, + -2.555182;-0.603564;-2.077754;, + -2.326019;-0.755275;-2.103861;, + -1.967110;-0.969524;-2.110623;, + -2.362648;-0.651580;-2.113850;, + -1.640930;-1.140537;-2.103899;, + -1.843358;-1.094711;-2.083422;, + -1.818808;-1.150769;-2.039585;, + -1.690588;-1.225129;-2.003439;, + -1.487446;-1.246583;-2.071846;, + -1.115137;-1.290595;-2.109794;, + -0.617662;-1.387737;-2.103837;, + -0.089403;-1.425356;-2.104497;, + 0.618772;-1.390518;-2.103939;, + 1.283072;-1.254758;-2.106826;, + 1.683750;-1.101458;-2.111299;, + 1.930677;-1.026961;-2.098426;, + 1.640991;-1.193227;-2.071791;, + 1.328027;-1.294441;-2.071896;, + 0.991588;-1.373680;-2.071975;, + 0.638926;-1.429285;-2.072029;, + 0.274515;-1.460488;-2.072057;, + -0.091983;-1.465969;-2.072860;, + -0.457803;-1.447981;-2.072045;, + -0.816722;-1.404536;-2.072006;, + -1.162387;-1.336903;-2.071938;, + -1.366353;-1.330081;-2.003974;, + -1.390658;-1.338818;-1.930779;, + -1.739972;-1.223281;-1.920764;, + -1.735265;-1.189211;-1.500249;, + -1.614952;-1.259509;-1.705881;, + -1.394267;-1.328625;-1.684605;, + -1.396257;-1.201256;-0.688894;, + -1.378096;-1.011402;0.558426;, + -1.779778;-1.084014;-0.992111;, + -1.759068;-0.966687;-0.403678;, + -1.866965;-0.936920;-0.819813;, + -1.965192;-0.880810;-1.005016;, + -1.888562;-0.680009;0.633811;, + -1.979242;-0.522905;1.808218;, + -2.782950;-0.483474;1.115137;, + -3.647233;-0.193841;2.997537;, + -0.961931;-0.233091;5.664291;, + -1.235947;-0.444476;3.612010;, + -1.674469;-0.739806;0.749396;, + -1.515480;-0.759823;1.216620;, + -1.379563;-0.797169;1.639359;, + -0.983042;-0.734827;2.998108;, + -0.879256;-1.008832;1.513564;, + -1.039508;-1.309920;-0.798822;, + -1.112101;-1.401668;-1.706445;, + -1.040612;-1.422352;-1.931100;, + -1.020339;-1.411733;-2.004028;, + -0.657748;-1.469028;-2.004046;, + -0.283035;-1.501201;-2.004055;, + 0.094595;-1.506956;-2.005732;, + 0.471507;-1.488300;-2.004051;, + 0.840559;-1.443523;-2.004042;, + 1.195940;-1.373846;-2.004013;, + 1.531051;-1.280584;-2.003823;, + 1.837025;-1.162321;-2.012276;, + 1.948365;-1.073061;-2.058957;, + 2.178507;-0.931498;-2.071511;, + 2.326014;-0.755275;-2.103862;, + 2.614808;-0.482615;-2.094117;, + 2.719225;-0.331882;-2.085111;, + 2.817846;-0.095669;-2.068228;, + 2.881796;-0.048838;-2.019176;, + 2.846926;-0.239410;-2.018906;, + 2.555182;-0.603563;-2.077754;, + 2.122158;-1.023757;-2.007494;, + 1.942166;-1.130917;-1.959983;, + 1.714788;-1.234599;-1.905659;, + 1.390659;-1.338818;-1.930780;, + 1.043431;-1.424745;-1.902933;, + 0.675052;-1.480958;-1.931111;, + 0.298655;-1.516905;-1.902946;, + -0.083487;-1.524697;-1.898190;, + -0.297117;-1.514213;-1.931117;, + -0.777687;-1.470904;-1.904038;, + -0.552998;-1.459782;-1.399137;, + -0.375556;-1.503918;-1.706005;, + -0.007308;-1.486232;-1.383343;, + 0.564556;-1.487821;-1.706047;, + 0.735245;-1.437850;-1.399453;, + 1.290353;-1.359583;-1.705512;, + 1.693558;-1.203754;-1.461814;, + 1.779779;-1.084013;-0.992109;, + 1.961592;-1.067940;-1.689243;, + 2.035999;-1.076514;-1.950848;, + 2.076602;-1.013886;-1.873733;, + 2.169542;-0.805454;-1.812349;, + 1.759071;-0.966688;-0.403690;, + -0.156995;-1.264859;0.356678;, + 0.169183;-1.412047;-0.777109;, + 0.320059;-1.261722;0.317173;, + 0.055526;-0.882147;3.093913;, + 0.483955;-1.078953;1.512862;, + 0.871950;-1.342654;-0.798639;, + 1.365610;-1.301505;-1.362448;, + 1.442486;-1.044368;0.199322;, + 1.118880;-1.147087;0.214203;, + 0.750288;-1.036729;1.513355;, + -0.252726;-0.646939;4.586071;, + -0.114303;-0.281426;6.967004;, + -0.140088;-0.149267;7.686038;, + -0.426194;-0.297026;6.452519;, + -0.459399;-0.525100;5.129813;, + -0.618232;-1.060139;1.513199;, + -0.347150;-1.093186;1.512540;, + -0.701357;-1.369434;-0.798097;, + -0.837994;-0.478610;4.583494;, + -0.894628;-0.448402;4.449620;, + -1.113189;-0.491475;3.595136;, + -1.852785;-0.097955;5.903935;, + -2.893872;-0.093407;4.695886;, + -1.665469;-0.046584;6.432648;, + -1.043463;-0.029896;7.136545;, + -0.292194;-0.015719;7.885265;, + -0.288737;0.022275;7.882863;, + -0.179614;0.026335;8.004367;, + -0.178285;0.006524;8.025742;, + 1.759070;0.966688;-0.403684;, + 1.779777;1.084014;-0.992107;, + 1.735265;1.189211;-1.500244;, + 1.785667;1.203251;-1.918684;, + 1.586698;1.277999;-1.930259;, + 1.333695;1.348247;-1.986591;, + 0.967366;1.423486;-2.007263;, + 0.750153;1.414312;-2.073187;, + 0.388589;1.453204;-2.073220;, + 0.024973;1.466148;-2.074355;, + -0.400235;1.423237;-2.098032;, + -0.926236;1.385736;-2.073158;, + -1.267207;1.310547;-2.073121;, + -1.333694;1.348248;-1.986591;, + -1.586698;1.277999;-1.930260;, + -1.578456;1.273123;-1.706442;, + -1.476241;1.190713;-0.806964;, + -1.406368;0.958492;0.784951;, + -1.400873;0.805374;1.534348;, + -1.201307;0.956179;1.258753;, + -0.884088;1.068918;1.169468;, + -0.350608;1.001179;2.721462;, + -0.011559;1.273206;2.034499;, + 0.042308;1.148549;2.522804;, + 0.350609;1.001179;2.721462;, + 0.884088;1.068918;1.169470;, + 1.201307;0.956179;1.258753;, + 1.406366;0.958491;0.784958;, + 1.400872;0.805373;1.534353;, + 1.515479;0.759822;1.216627;, + 1.113195;0.491477;3.595113;, + 1.235948;0.444476;3.612010;, + 1.674470;0.739806;0.749392;, + 1.866965;0.936920;-0.819815;, + 1.965192;0.880810;-1.005016;, + 1.476241;1.190714;-0.806970;, + 1.143020;1.210752;-0.257560;, + 1.076984;1.371589;-1.181112;, + 1.283339;1.358130;-1.644653;, + 1.578456;1.273123;-1.706444;, + 1.125898;1.429423;-1.843620;, + 0.939565;1.496066;-1.535374;, + 0.701706;1.194677;0.931694;, + 0.434534;1.145723;1.867345;, + 0.527774;1.319820;0.873363;, + 0.760379;1.593724;-1.321224;, + 0.795261;1.660291;-1.953270;, + 0.954134;1.521022;-1.935063;, + 1.134590;1.409889;-1.976040;, + 0.843849;1.475507;-2.014590;, + 0.503787;1.484154;-2.018339;, + -0.240439;1.500504;-2.018187;, + -0.663051;1.464317;-2.018996;, + -0.967365;1.423486;-2.007263;, + -1.134591;1.409889;-1.976040;, + -0.789716;1.494771;-2.018956;, + -0.010163;1.545850;-2.025968;, + 0.720728;1.575564;-2.058246;, + 0.923008;1.510812;-2.009398;, + 0.772125;1.656596;-2.057399;, + 0.572007;1.904047;-2.253749;, + 0.551675;1.826599;-2.224603;, + 0.075068;1.722717;-2.145905;, + -0.481964;1.704729;-2.140681;, + -0.696743;1.629006;-2.086909;, + -0.923009;1.510812;-2.009398;, + -0.954134;1.521022;-1.935063;, + -1.125898;1.429423;-1.843620;, + -1.283339;1.358130;-1.644653;, + -1.143020;1.210752;-0.257560;, + -1.076984;1.371589;-1.181110;, + -0.939565;1.496066;-1.535374;, + -0.795262;1.660291;-1.953270;, + -0.772125;1.656596;-2.057400;, + -0.572007;1.904046;-2.253749;, + -0.513300;1.910854;-2.284529;, + -0.262371;2.431365;-2.675171;, + 0.036107;2.317332;-2.586381;, + 0.227353;2.453704;-2.691363;, + 0.283494;2.443251;-2.669976;, + 0.284577;2.492404;-2.647569;, + 0.205262;2.564212;-2.741750;, + 0.117186;2.628736;-2.782903;, + -0.167178;2.603944;-2.767921;, + -0.283619;2.458434;-2.670542;, + -0.284577;2.492404;-2.647569;, + -0.195558;2.621427;-2.734470;, + -0.097324;2.700647;-2.790712;, + 0.083803;2.709711;-2.794617;, + 0.195558;2.621427;-2.734470;, + 0.187759;2.628897;-2.563858;, + 0.087427;2.730342;-2.750839;, + -0.037243;2.745345;-2.762823;, + -0.119882;2.707738;-2.738547;, + -0.187759;2.628896;-2.563857;, + -0.277938;2.500793;-2.494453;, + -0.271334;2.388473;-2.077241;, + -0.189745;2.321568;-1.669959;, + -0.116321;2.680125;-2.541214;, + -0.056236;2.711606;-2.563342;, + -0.000000;2.718243;-2.561125;, + 0.056236;2.711606;-2.563343;, + 0.116321;2.680125;-2.541218;, + 0.189745;2.321567;-1.669955;, + 0.086711;2.358001;-1.616696;, + 0.000000;2.298152;-1.410819;, + -0.086711;2.358003;-1.616699;, + -0.185652;1.965375;-0.562574;, + -0.084347;1.978613;-0.454725;, + 0.000000;1.777887;0.251269;, + 0.084347;1.978614;-0.454728;, + 0.185652;1.965375;-0.562576;, + 0.321855;1.905758;-0.715966;, + 0.493537;1.728857;-0.719661;, + 0.388986;1.567577;0.305251;, + 0.245770;1.480778;0.982825;, + 0.134017;1.406800;1.444993;, + 0.562800;1.783011;-1.237010;, + 0.600461;1.860774;-1.773339;, + 0.613007;1.904424;-2.131143;, + 0.034129;0.074846;8.006785;, + -0.007703;0.085791;8.020262;, + -0.091506;0.080246;8.025781;, + -0.027550;0.074647;8.004272;, + -0.097676;0.059488;8.007838;, + -0.081918;0.029567;7.905358;, + -0.107120;0.010245;7.934452;, + -0.160262;0.043289;8.024616;, + -0.204268;0.056471;7.896691;, + -0.178285;0.006524;8.025742;, + -0.300696;0.042822;7.823772;, + -1.067292;0.013828;7.143124;, + -0.882373;-0.011961;7.322857;, + -1.521606;-0.009707;6.663476;, + -1.904250;0.025986;6.206776;, + -1.509119;0.054568;6.562743;, + -0.394175;0.092758;7.434561;, + -0.480116;0.200600;6.634828;, + -1.113193;0.491476;3.595121;, + -1.515480;0.759823;1.216621;, + -1.759069;0.966687;-0.403682;, + -1.866965;0.936920;-0.819814;, + -1.674469;0.739806;0.749395;, + -1.235948;0.444476;3.612007;, + -2.736213;0.015059;5.160008;, + -3.628804;0.019758;3.938145;, + -5.298751;0.050098;1.523037;, + -5.227315;-0.000000;1.658268;, + -3.155348;-0.029812;4.585597;, + -2.137098;-0.012168;5.932005;, + -1.965192;0.880809;-1.005015;, + -2.997232;-0.059427;4.728245;, + -5.382112;-0.172822;0.907612;, + -5.632438;-0.110693;0.882085;, + -5.298750;-0.050098;1.523039;, + -0.055274;0.099104;8.014751;, + -0.039738;0.113214;7.982695;, + -0.092048;0.209978;7.402654;, + 0.080843;0.208639;7.416533;, + 0.600272;1.904651;-2.214361;, + 0.277938;2.500794;-2.494455;, + 0.271334;2.388474;-2.077243;, + -0.134017;1.406800;1.444996;, + -0.434533;1.145723;1.867345;, + -0.701706;1.194677;0.931693;, + -0.527773;1.319820;0.873362;, + -0.245769;1.480779;0.982822;, + -0.388985;1.567577;0.305252;, + -0.493537;1.728857;-0.719662;, + -0.321855;1.905758;-0.715966;, + -0.562800;1.783013;-1.237014;, + -0.760379;1.593724;-1.321224;, + -0.600462;1.860774;-1.773341;, + -0.613006;1.904424;-2.131144;, + -0.600272;1.904652;-2.214361;, + 5.974418;0.069882;-0.883816;, + 5.345110;0.126771;-1.208259;, + 5.872942;0.142457;-0.883816;, + 5.412705;-0.052557;-1.203459;, + 5.996296;0.000000;-0.883816;, + 5.974419;-0.069882;-0.883816;, + 5.872942;-0.142457;-0.883816;, + 5.299703;-0.154975;-1.206772;, + 4.618651;-0.059206;-1.441199;, + 4.546450;0.146109;-1.446560;, + 3.814906;0.063345;-1.608642;, + 3.650840;0.245527;-1.617080;, + 3.106443;0.164613;-1.734073;, + 2.954499;0.348369;-1.734484;, + 2.767266;0.071060;-1.826370;, + 2.654914;0.354034;-1.823529;, + 4.439450;-0.223568;-1.446190;, + 3.730868;-0.159313;-1.617613;, + 3.507579;-0.331609;-1.616709;, + 3.097254;-0.135720;-1.739579;, + 2.954500;-0.348369;-1.734483;, + 2.715218;-0.259120;-1.822818;, + 2.623620;-0.390396;-1.822752;, + -2.954500;-0.348369;-1.734482;, + -3.650840;-0.245528;-1.617079;, + -3.097254;-0.135721;-1.739578;, + -3.814907;-0.063346;-1.608641;, + -4.546450;-0.146109;-1.446560;, + -4.618650;0.059206;-1.441198;, + -5.345110;-0.126771;-1.208259;, + -5.412705;0.052557;-1.203458;, + -5.974418;-0.069882;-0.883815;, + -5.996296;-0.000000;-0.883815;, + -5.974418;0.069882;-0.883815;, + -5.872942;0.142457;-0.883815;, + -5.299703;0.154975;-1.206771;, + -4.439450;0.223568;-1.446189;, + -3.730868;0.159313;-1.617612;, + -3.106443;0.164613;-1.734072;, + -3.507579;0.331609;-1.616708;, + -2.954500;0.348369;-1.734482;; + 2980; + 3;0,1,2;, + 3;2,3,4;, + 3;5,6,7;, + 3;8,9,10;, + 3;11,12,13;, + 3;14,15,16;, + 3;17,14,16;, + 3;18,14,17;, + 3;18,19,14;, + 3;19,20,14;, + 3;16,21,22;, + 3;23,16,22;, + 3;17,16,23;, + 3;24,17,23;, + 3;24,25,17;, + 3;25,18,17;, + 3;25,26,18;, + 3;26,27,18;, + 3;26,28,27;, + 3;28,29,27;, + 3;28,30,29;, + 3;30,31,29;, + 3;30,32,31;, + 3;32,33,31;, + 3;32,34,33;, + 3;34,35,33;, + 3;34,36,35;, + 3;36,37,35;, + 3;36,38,37;, + 3;38,39,37;, + 3;38,40,39;, + 3;40,41,39;, + 3;40,42,41;, + 3;42,43,41;, + 3;42,44,43;, + 3;44,45,43;, + 3;44,46,45;, + 3;46,47,45;, + 3;46,48,47;, + 3;48,49,47;, + 3;48,50,49;, + 3;50,51,49;, + 3;50,52,51;, + 3;52,53,51;, + 3;52,54,53;, + 3;54,55,53;, + 3;54,56,55;, + 3;56,57,55;, + 3;56,58,57;, + 3;58,59,57;, + 3;58,60,59;, + 3;60,61,59;, + 3;60,62,61;, + 3;62,63,61;, + 3;62,64,63;, + 3;64,65,63;, + 3;64,66,65;, + 3;66,67,65;, + 3;66,68,67;, + 3;68,69,67;, + 3;68,70,69;, + 3;70,71,69;, + 3;70,72,71;, + 3;72,73,71;, + 3;72,74,73;, + 3;74,75,73;, + 3;74,76,75;, + 3;76,77,75;, + 3;76,78,77;, + 3;78,79,77;, + 3;78,80,79;, + 3;80,81,79;, + 3;80,82,81;, + 3;82,83,81;, + 3;82,84,83;, + 3;84,85,83;, + 3;84,86,85;, + 3;86,87,85;, + 3;86,88,87;, + 3;88,89,87;, + 3;88,90,89;, + 3;90,91,89;, + 3;90,92,91;, + 3;92,93,91;, + 3;92,94,93;, + 3;94,95,93;, + 3;94,96,95;, + 3;96,97,95;, + 3;96,98,97;, + 3;98,99,97;, + 3;98,100,99;, + 3;100,101,99;, + 3;100,102,101;, + 3;102,103,101;, + 3;102,104,103;, + 3;105,103,104;, + 3;105,106,103;, + 3;105,107,106;, + 3;105,108,107;, + 3;108,109,107;, + 3;108,110,109;, + 3;110,111,109;, + 3;110,112,111;, + 3;112,113,111;, + 3;112,114,113;, + 3;114,23,113;, + 3;114,24,23;, + 3;23,22,113;, + 3;113,22,115;, + 3;22,116,115;, + 3;113,115,111;, + 3;111,115,117;, + 3;115,118,117;, + 3;111,117,109;, + 3;109,117,119;, + 3;117,120,119;, + 3;109,119,107;, + 3;107,119,121;, + 3;119,122,121;, + 3;107,121,106;, + 3;106,121,123;, + 3;121,124,123;, + 3;106,123,103;, + 3;103,123,125;, + 3;123,126,125;, + 3;103,125,101;, + 3;101,125,127;, + 3;125,128,127;, + 3;101,127,99;, + 3;99,127,129;, + 3;127,130,129;, + 3;99,129,97;, + 3;97,129,131;, + 3;129,132,131;, + 3;97,131,95;, + 3;131,93,95;, + 3;131,133,93;, + 3;134,133,131;, + 3;133,91,93;, + 3;133,135,91;, + 3;136,135,133;, + 3;135,89,91;, + 3;135,137,89;, + 3;138,137,135;, + 3;137,87,89;, + 3;137,139,87;, + 3;140,139,137;, + 3;139,85,87;, + 3;139,141,85;, + 3;142,141,139;, + 3;141,83,85;, + 3;141,143,83;, + 3;144,143,141;, + 3;143,81,83;, + 3;143,145,81;, + 3;146,145,143;, + 3;145,79,81;, + 3;145,147,79;, + 3;148,147,145;, + 3;147,77,79;, + 3;147,149,77;, + 3;150,149,147;, + 3;149,75,77;, + 3;149,151,75;, + 3;152,151,149;, + 3;151,73,75;, + 3;151,153,73;, + 3;154,153,151;, + 3;153,71,73;, + 3;153,155,71;, + 3;156,155,153;, + 3;157,155,158;, + 3;157,71,155;, + 3;157,69,71;, + 3;159,69,157;, + 3;159,157,160;, + 3;159,67,69;, + 3;161,67,159;, + 3;161,159,162;, + 3;161,65,67;, + 3;163,65,161;, + 3;163,161,164;, + 3;163,63,65;, + 3;165,63,163;, + 3;165,163,166;, + 3;165,61,63;, + 3;167,61,165;, + 3;167,165,168;, + 3;167,59,61;, + 3;169,59,167;, + 3;169,167,170;, + 3;169,57,59;, + 3;171,57,169;, + 3;171,169,172;, + 3;171,55,57;, + 3;173,55,171;, + 3;173,171,174;, + 3;173,53,55;, + 3;175,53,173;, + 3;175,173,176;, + 3;176,177,175;, + 3;177,51,175;, + 3;175,51,53;, + 3;177,49,51;, + 3;47,49,177;, + 3;47,177,178;, + 3;178,177,179;, + 3;45,47,178;, + 3;45,178,180;, + 3;180,178,181;, + 3;43,45,180;, + 3;43,180,182;, + 3;182,180,183;, + 3;41,43,182;, + 3;41,182,184;, + 3;184,182,185;, + 3;39,41,184;, + 3;39,184,186;, + 3;186,184,187;, + 3;37,39,186;, + 3;37,186,188;, + 3;188,186,189;, + 3;35,37,188;, + 3;35,188,190;, + 3;190,188,191;, + 3;33,35,190;, + 3;33,190,192;, + 3;192,190,193;, + 3;31,33,192;, + 3;31,192,194;, + 3;194,192,195;, + 3;29,31,194;, + 3;29,194,196;, + 3;196,194,197;, + 3;27,29,196;, + 3;27,196,198;, + 3;198,196,199;, + 3;18,27,198;, + 3;18,198,19;, + 3;19,198,200;, + 3;201,202,4;, + 3;202,203,4;, + 3;4,203,204;, + 3;4,204,205;, + 3;205,204,206;, + 3;206,207,205;, + 3;206,208,207;, + 3;208,209,207;, + 3;209,210,207;, + 3;209,211,210;, + 3;211,212,210;, + 3;212,213,210;, + 3;212,214,213;, + 3;214,215,213;, + 3;215,216,213;, + 3;215,217,216;, + 3;218,216,217;, + 3;218,219,216;, + 3;220,219,218;, + 3;221,219,220;, + 3;221,222,219;, + 3;223,222,221;, + 3;224,222,223;, + 3;225,222,224;, + 3;225,226,222;, + 3;226,225,227;, + 3;228,226,227;, + 3;228,227,229;, + 3;230,228,229;, + 3;231,228,230;, + 3;232,228,231;, + 3;233,232,231;, + 3;234,232,233;, + 3;235,232,234;, + 3;235,236,232;, + 3;232,236,228;, + 3;236,237,228;, + 3;228,237,226;, + 3;226,237,238;, + 3;226,238,222;, + 3;222,238,239;, + 3;222,239,219;, + 3;239,240,219;, + 3;239,241,240;, + 3;238,241,239;, + 3;238,242,241;, + 3;237,242,238;, + 3;237,243,242;, + 3;236,243,237;, + 3;236,244,243;, + 3;235,244,236;, + 3;235,245,244;, + 3;245,235,246;, + 3;246,235,247;, + 3;247,235,234;, + 3;248,247,234;, + 3;249,247,248;, + 3;250,249,248;, + 3;251,249,250;, + 3;252,249,251;, + 3;253,249,252;, + 3;254,253,252;, + 3;254,252,255;, + 3;254,255,256;, + 3;257,254,256;, + 3;257,256,258;, + 3;257,258,32;, + 3;259,257,32;, + 3;259,32,260;, + 3;259,260,28;, + 3;261,259,28;, + 3;261,28,262;, + 3;261,262,25;, + 3;261,25,263;, + 3;263,25,264;, + 3;263,264,114;, + 3;263,114,265;, + 3;265,114,266;, + 3;265,266,110;, + 3;265,110,267;, + 3;267,110,268;, + 3;267,268,269;, + 3;267,269,270;, + 3;269,271,270;, + 3;269,272,271;, + 3;272,273,271;, + 3;273,274,271;, + 3;271,274,0;, + 3;274,275,0;, + 3;249,246,247;, + 3;276,246,249;, + 3;253,276,249;, + 3;277,276,253;, + 3;277,278,276;, + 3;278,246,276;, + 3;278,245,246;, + 3;279,245,278;, + 3;279,280,245;, + 3;245,280,244;, + 3;280,281,244;, + 3;244,281,243;, + 3;243,281,242;, + 3;242,281,282;, + 3;242,282,241;, + 3;241,282,240;, + 3;240,282,283;, + 3;282,284,283;, + 3;283,284,285;, + 3;286,283,285;, + 3;287,283,286;, + 3;240,283,287;, + 3;219,240,287;, + 3;219,287,216;, + 3;213,216,287;, + 3;210,213,287;, + 3;210,287,288;, + 3;288,287,286;, + 3;289,288,286;, + 3;207,288,289;, + 3;207,210,288;, + 3;290,207,289;, + 3;205,207,290;, + 3;291,205,290;, + 3;4,205,291;, + 3;292,4,291;, + 3;293,4,292;, + 3;0,293,292;, + 3;0,292,294;, + 3;271,0,294;, + 3;270,271,294;, + 3;295,270,294;, + 3;296,270,295;, + 3;296,267,270;, + 3;297,267,296;, + 3;297,265,267;, + 3;298,265,297;, + 3;298,263,265;, + 3;299,263,298;, + 3;299,261,263;, + 3;299,300,261;, + 3;300,259,261;, + 3;300,301,259;, + 3;301,257,259;, + 3;301,254,257;, + 3;301,302,254;, + 3;302,253,254;, + 3;302,277,253;, + 3;303,277,302;, + 3;303,278,277;, + 3;303,279,278;, + 3;304,279,303;, + 3;304,305,279;, + 3;305,280,279;, + 3;280,305,306;, + 3;280,306,281;, + 3;281,306,282;, + 3;282,306,284;, + 3;306,307,284;, + 3;305,307,306;, + 3;308,307,305;, + 3;308,305,309;, + 3;310,308,309;, + 3;311,308,310;, + 3;311,312,308;, + 3;312,313,308;, + 3;308,313,307;, + 3;307,313,314;, + 3;313,315,314;, + 3;313,312,315;, + 3;312,316,315;, + 3;317,316,312;, + 3;317,312,311;, + 3;318,317,311;, + 3;319,317,318;, + 3;319,320,317;, + 3;317,320,316;, + 3;320,321,316;, + 3;316,321,322;, + 3;315,316,322;, + 3;315,322,323;, + 3;315,323,324;, + 3;314,315,324;, + 3;314,324,325;, + 3;307,314,325;, + 3;307,325,326;, + 3;307,326,285;, + 3;327,285,326;, + 3;286,285,327;, + 3;328,286,327;, + 3;289,286,328;, + 3;329,289,328;, + 3;290,289,329;, + 3;291,290,329;, + 3;291,329,330;, + 3;330,329,328;, + 3;330,328,331;, + 3;331,328,332;, + 3;328,327,332;, + 3;327,326,332;, + 3;332,326,333;, + 3;333,326,334;, + 3;334,326,335;, + 3;335,326,325;, + 3;335,325,336;, + 3;325,337,336;, + 3;325,324,337;, + 3;324,338,337;, + 3;324,323,338;, + 3;323,339,338;, + 3;323,340,339;, + 3;323,341,340;, + 3;322,341,323;, + 3;322,342,341;, + 3;321,342,322;, + 3;321,343,342;, + 3;320,343,321;, + 3;320,344,343;, + 3;345,344,320;, + 3;345,343,344;, + 3;346,343,345;, + 3;343,346,347;, + 3;343,347,348;, + 3;342,343,348;, + 3;342,348,341;, + 3;341,348,340;, + 3;340,348,349;, + 3;340,349,350;, + 3;339,340,350;, + 3;339,350,351;, + 3;351,350,352;, + 3;351,352,353;, + 3;352,354,353;, + 3;355,353,354;, + 3;355,354,356;, + 3;357,355,356;, + 3;358,357,356;, + 3;358,356,359;, + 3;360,358,359;, + 3;360,359,361;, + 3;362,360,361;, + 3;362,361,363;, + 3;364,362,363;, + 3;364,363,365;, + 3;364,365,366;, + 3;366,367,364;, + 3;368,367,366;, + 3;369,367,368;, + 3;369,370,367;, + 3;371,370,369;, + 3;371,372,370;, + 3;373,372,371;, + 3;373,374,372;, + 3;375,374,373;, + 3;375,376,374;, + 3;377,376,375;, + 3;377,378,376;, + 3;377,379,378;, + 3;378,379,380;, + 3;379,381,380;, + 3;379,382,381;, + 3;382,383,381;, + 3;382,384,383;, + 3;384,385,383;, + 3;384,386,385;, + 3;387,386,384;, + 3;387,388,386;, + 3;387,345,388;, + 3;389,345,387;, + 3;389,390,345;, + 3;390,346,345;, + 3;338,339,351;, + 3;338,351,391;, + 3;351,353,391;, + 3;355,391,353;, + 3;355,336,391;, + 3;337,391,336;, + 3;337,338,391;, + 3;345,320,319;, + 3;388,345,319;, + 3;388,319,392;, + 3;386,388,392;, + 3;386,392,385;, + 3;385,392,393;, + 3;383,385,393;, + 3;383,393,381;, + 3;381,393,394;, + 3;380,381,394;, + 3;378,380,394;, + 3;378,394,376;, + 3;394,395,376;, + 3;376,395,396;, + 3;376,396,374;, + 3;374,396,372;, + 3;372,396,397;, + 3;372,397,370;, + 3;370,397,398;, + 3;370,398,367;, + 3;367,398,364;, + 3;398,399,364;, + 3;399,362,364;, + 3;399,400,362;, + 3;362,400,360;, + 3;400,358,360;, + 3;400,357,358;, + 3;400,355,357;, + 3;401,355,400;, + 3;401,336,355;, + 3;335,336,401;, + 3;334,335,401;, + 3;334,401,402;, + 3;402,401,400;, + 3;402,400,399;, + 3;403,402,399;, + 3;403,399,398;, + 3;398,397,403;, + 3;397,404,403;, + 3;404,402,403;, + 3;404,334,402;, + 3;333,334,404;, + 3;405,333,404;, + 3;397,405,404;, + 3;396,405,397;, + 3;396,406,405;, + 3;395,406,396;, + 3;406,395,407;, + 3;395,408,407;, + 3;394,408,395;, + 3;394,409,408;, + 3;394,393,409;, + 3;393,311,409;, + 3;393,318,311;, + 3;392,318,393;, + 3;392,319,318;, + 3;409,311,310;, + 3;409,310,407;, + 3;408,409,407;, + 3;407,310,309;, + 3;407,309,410;, + 3;406,407,410;, + 3;406,410,411;, + 3;406,411,405;, + 3;405,411,333;, + 3;411,412,333;, + 3;411,410,412;, + 3;410,413,412;, + 3;410,309,413;, + 3;309,414,413;, + 3;309,304,414;, + 3;414,304,303;, + 3;414,303,415;, + 3;415,303,302;, + 3;415,302,301;, + 3;415,301,300;, + 3;416,415,300;, + 3;416,300,299;, + 3;416,299,298;, + 3;416,298,417;, + 3;417,298,297;, + 3;417,297,296;, + 3;417,296,418;, + 3;418,296,295;, + 3;418,295,419;, + 3;295,294,419;, + 3;294,420,419;, + 3;294,292,420;, + 3;292,291,420;, + 3;420,291,330;, + 3;420,330,331;, + 3;419,420,331;, + 3;419,331,421;, + 3;421,331,332;, + 3;421,332,422;, + 3;422,332,333;, + 3;333,412,422;, + 3;422,412,421;, + 3;412,418,421;, + 3;418,419,421;, + 3;412,417,418;, + 3;413,417,412;, + 3;413,416,417;, + 3;413,415,416;, + 3;413,414,415;, + 3;423,424,425;, + 3;423,426,424;, + 3;427,426,423;, + 3;428,427,423;, + 3;429,427,428;, + 3;430,429,428;, + 3;431,432,433;, + 3;431,433,434;, + 3;435,431,434;, + 3;436,435,434;, + 3;437,435,436;, + 3;436,434,438;, + 3;436,438,439;, + 3;440,436,439;, + 3;441,440,439;, + 3;441,439,442;, + 3;442,439,443;, + 3;439,438,443;, + 3;438,444,443;, + 3;438,434,444;, + 3;434,445,444;, + 3;434,433,445;, + 3;445,433,446;, + 3;433,447,446;, + 3;446,447,448;, + 3;446,448,449;, + 3;446,449,450;, + 3;446,450,451;, + 3;451,450,452;, + 3;451,452,453;, + 3;451,453,454;, + 3;451,454,455;, + 3;456,451,455;, + 3;456,455,457;, + 3;456,457,458;, + 3;456,458,459;, + 3;424,456,459;, + 3;426,456,424;, + 3;426,460,456;, + 3;427,460,426;, + 3;461,460,427;, + 3;429,461,427;, + 3;429,462,461;, + 3;463,462,429;, + 3;464,462,463;, + 3;464,465,462;, + 3;465,466,462;, + 3;465,467,466;, + 3;467,468,466;, + 3;469,466,468;, + 3;469,443,466;, + 3;442,443,469;, + 3;445,446,451;, + 3;445,451,470;, + 3;456,470,451;, + 3;460,470,456;, + 3;471,470,460;, + 3;461,471,460;, + 3;461,472,471;, + 3;462,472,461;, + 3;462,466,472;, + 3;443,472,466;, + 3;443,471,472;, + 3;443,444,471;, + 3;444,470,471;, + 3;444,445,470;, + 3;473,474,475;, + 3;476,477,478;, + 3;479,480,481;, + 3;482,475,483;, + 3;484,485,486;, + 3;487,488,484;, + 3;489,490,487;, + 3;491,492,493;, + 3;489,494,495;, + 3;494,491,496;, + 3;497,498,499;, + 3;499,498,500;, + 3;499,500,501;, + 3;500,502,501;, + 3;502,503,501;, + 3;501,503,504;, + 3;503,505,504;, + 3;504,505,506;, + 3;504,506,507;, + 3;507,506,508;, + 3;508,509,507;, + 3;507,509,510;, + 3;509,511,510;, + 3;510,511,512;, + 3;511,513,512;, + 3;513,514,512;, + 3;514,515,512;, + 3;514,516,515;, + 3;516,517,515;, + 3;516,518,517;, + 3;518,519,517;, + 3;519,520,517;, + 3;519,521,520;, + 3;521,522,520;, + 3;522,523,520;, + 3;522,524,523;, + 3;525,523,524;, + 3;525,526,523;, + 3;527,526,525;, + 3;528,526,527;, + 3;528,529,526;, + 3;530,529,528;, + 3;531,529,530;, + 3;531,532,529;, + 3;533,532,531;, + 3;534,532,533;, + 3;534,535,532;, + 3;536,535,534;, + 3;537,535,536;, + 3;538,535,537;, + 3;535,538,532;, + 3;538,539,532;, + 3;532,539,540;, + 3;532,540,529;, + 3;529,540,541;, + 3;529,541,526;, + 3;526,541,542;, + 3;526,542,543;, + 3;526,543,523;, + 3;520,523,543;, + 3;520,543,544;, + 3;517,520,544;, + 3;517,544,545;, + 3;545,544,546;, + 3;544,547,546;, + 3;543,547,544;, + 3;542,547,543;, + 3;542,548,547;, + 3;542,549,548;, + 3;541,549,542;, + 3;541,550,549;, + 3;540,550,541;, + 3;540,551,550;, + 3;552,551,540;, + 3;539,552,540;, + 3;553,552,539;, + 3;538,553,539;, + 3;554,553,538;, + 3;555,553,554;, + 3;555,556,553;, + 3;557,556,555;, + 3;557,558,556;, + 3;559,558,557;, + 3;559,557,560;, + 3;557,555,560;, + 3;560,555,561;, + 3;561,555,554;, + 3;561,554,562;, + 3;562,554,538;, + 3;562,538,563;, + 3;563,538,537;, + 3;564,562,563;, + 3;565,562,564;, + 3;565,566,562;, + 3;566,561,562;, + 3;566,560,561;, + 3;567,560,566;, + 3;567,559,560;, + 3;568,559,567;, + 3;569,559,568;, + 3;569,570,559;, + 3;570,558,559;, + 3;570,571,558;, + 3;570,572,571;, + 3;573,572,570;, + 3;573,570,574;, + 3;574,570,569;, + 3;575,574,569;, + 3;575,569,568;, + 3;576,575,568;, + 3;577,575,576;, + 3;577,574,575;, + 3;577,578,574;, + 3;578,573,574;, + 3;578,572,573;, + 3;578,579,572;, + 3;580,579,578;, + 3;581,580,578;, + 3;577,581,578;, + 3;582,581,577;, + 3;582,577,576;, + 3;583,582,576;, + 3;584,582,583;, + 3;584,581,582;, + 3;584,585,581;, + 3;585,580,581;, + 3;585,586,580;, + 3;580,586,579;, + 3;586,587,579;, + 3;579,587,588;, + 3;572,579,588;, + 3;588,589,572;, + 3;571,572,589;, + 3;571,589,590;, + 3;571,590,558;, + 3;558,590,591;, + 3;558,591,556;, + 3;556,591,592;, + 3;556,592,553;, + 3;553,592,593;, + 3;592,594,593;, + 3;591,594,592;, + 3;591,595,594;, + 3;591,596,595;, + 3;590,596,591;, + 3;589,596,590;, + 3;589,597,596;, + 3;596,597,595;, + 3;595,597,594;, + 3;594,597,598;, + 3;594,598,593;, + 3;593,598,599;, + 3;553,593,599;, + 3;553,599,552;, + 3;552,599,551;, + 3;599,600,551;, + 3;599,598,600;, + 3;598,601,600;, + 3;597,601,598;, + 3;602,601,597;, + 3;589,602,597;, + 3;603,602,589;, + 3;588,603,589;, + 3;604,603,588;, + 3;604,605,603;, + 3;603,605,602;, + 3;605,606,602;, + 3;602,606,607;, + 3;602,607,601;, + 3;601,607,608;, + 3;600,601,608;, + 3;551,600,608;, + 3;551,608,609;, + 3;551,609,550;, + 3;550,609,610;, + 3;550,610,549;, + 3;549,610,611;, + 3;549,611,612;, + 3;549,612,548;, + 3;548,612,613;, + 3;614,548,613;, + 3;547,548,614;, + 3;546,547,614;, + 3;546,614,615;, + 3;615,614,613;, + 3;615,613,616;, + 3;616,613,617;, + 3;617,613,612;, + 3;618,617,612;, + 3;611,618,612;, + 3;619,618,611;, + 3;619,611,610;, + 3;620,619,610;, + 3;609,620,610;, + 3;609,608,620;, + 3;607,620,608;, + 3;607,621,620;, + 3;606,621,607;, + 3;622,621,606;, + 3;605,622,606;, + 3;623,622,605;, + 3;623,624,622;, + 3;624,625,622;, + 3;622,625,621;, + 3;625,626,621;, + 3;624,626,625;, + 3;627,626,624;, + 3;628,627,624;, + 3;628,629,627;, + 3;629,630,627;, + 3;629,631,630;, + 3;631,632,630;, + 3;633,632,631;, + 3;633,634,632;, + 3;635,634,633;, + 3;635,636,634;, + 3;636,637,634;, + 3;636,638,637;, + 3;639,638,636;, + 3;639,640,638;, + 3;641,640,639;, + 3;641,642,640;, + 3;643,642,641;, + 3;643,644,642;, + 3;645,644,643;, + 3;646,645,643;, + 3;645,646,647;, + 3;648,645,647;, + 3;649,645,648;, + 3;650,645,649;, + 3;650,644,645;, + 3;650,651,644;, + 3;644,651,642;, + 3;642,651,652;, + 3;642,652,640;, + 3;652,653,640;, + 3;652,654,653;, + 3;651,654,652;, + 3;651,655,654;, + 3;655,651,650;, + 3;656,655,650;, + 3;656,650,657;, + 3;657,650,649;, + 3;658,657,649;, + 3;658,649,659;, + 3;649,648,659;, + 3;659,648,660;, + 3;659,660,661;, + 3;662,659,661;, + 3;662,661,663;, + 3;664,662,663;, + 3;665,662,664;, + 3;665,658,662;, + 3;658,659,662;, + 3;627,630,626;, + 3;630,666,626;, + 3;630,632,666;, + 3;632,667,666;, + 3;634,667,632;, + 3;634,668,667;, + 3;637,668,634;, + 3;637,669,668;, + 3;638,669,637;, + 3;638,670,669;, + 3;640,670,638;, + 3;640,653,670;, + 3;653,671,670;, + 3;670,671,672;, + 3;670,672,669;, + 3;669,672,673;, + 3;669,673,668;, + 3;668,673,667;, + 3;667,673,674;, + 3;667,674,666;, + 3;675,666,674;, + 3;626,666,675;, + 3;626,675,621;, + 3;621,675,676;, + 3;675,674,676;, + 3;676,674,617;, + 3;674,673,617;, + 3;673,616,617;, + 3;677,616,673;, + 3;672,677,673;, + 3;672,678,677;, + 3;679,678,672;, + 3;671,679,672;, + 3;653,679,671;, + 3;653,680,679;, + 3;681,680,653;, + 3;654,681,653;, + 3;655,681,654;, + 3;655,682,681;, + 3;683,682,655;, + 3;683,655,656;, + 3;684,683,656;, + 3;684,656,657;, + 3;685,684,657;, + 3;685,657,686;, + 3;686,657,658;, + 3;686,658,665;, + 3;687,686,665;, + 3;688,686,687;, + 3;688,685,686;, + 3;688,689,685;, + 3;689,684,685;, + 3;689,690,684;, + 3;690,691,684;, + 3;691,683,684;, + 3;691,692,683;, + 3;691,693,692;, + 3;693,694,692;, + 3;692,694,683;, + 3;694,695,683;, + 3;695,696,683;, + 3;683,696,682;, + 3;696,697,682;, + 3;682,697,698;, + 3;682,698,681;, + 3;681,698,699;, + 3;681,699,680;, + 3;680,699,700;, + 3;680,700,679;, + 3;700,701,679;, + 3;679,701,702;, + 3;679,702,678;, + 3;678,702,703;, + 3;678,703,677;, + 3;677,703,704;, + 3;677,704,616;, + 3;704,615,616;, + 3;705,615,704;, + 3;546,615,705;, + 3;706,546,705;, + 3;545,546,706;, + 3;707,545,706;, + 3;517,545,707;, + 3;708,517,707;, + 3;515,517,708;, + 3;512,515,708;, + 3;512,708,709;, + 3;709,708,710;, + 3;708,707,710;, + 3;707,706,710;, + 3;710,706,711;, + 3;706,705,711;, + 3;711,705,703;, + 3;705,704,703;, + 3;711,703,702;, + 3;712,711,702;, + 3;710,711,712;, + 3;710,712,713;, + 3;714,710,713;, + 3;709,710,714;, + 3;715,709,714;, + 3;716,709,715;, + 3;716,512,709;, + 3;510,512,716;, + 3;717,510,716;, + 3;507,510,717;, + 3;718,507,717;, + 3;718,504,507;, + 3;501,504,718;, + 3;719,501,718;, + 3;499,501,719;, + 3;720,499,719;, + 3;720,497,499;, + 3;721,497,720;, + 3;721,722,497;, + 3;723,722,721;, + 3;723,724,722;, + 3;725,724,723;, + 3;725,726,724;, + 3;725,727,726;, + 3;727,728,726;, + 3;727,729,728;, + 3;729,730,728;, + 3;729,731,730;, + 3;731,732,730;, + 3;731,733,732;, + 3;733,734,732;, + 3;732,734,480;, + 3;734,735,480;, + 3;734,736,735;, + 3;735,736,737;, + 3;737,736,738;, + 3;736,565,738;, + 3;736,566,565;, + 3;739,566,736;, + 3;734,739,736;, + 3;733,739,734;, + 3;740,739,733;, + 3;741,740,733;, + 3;741,733,731;, + 3;742,741,731;, + 3;742,731,729;, + 3;743,742,729;, + 3;743,729,727;, + 3;744,743,727;, + 3;744,727,725;, + 3;744,725,723;, + 3;744,723,745;, + 3;745,723,721;, + 3;745,721,746;, + 3;746,721,720;, + 3;746,720,747;, + 3;747,720,719;, + 3;747,719,748;, + 3;748,719,749;, + 3;749,719,750;, + 3;719,718,750;, + 3;750,718,751;, + 3;718,717,751;, + 3;752,751,717;, + 3;750,751,752;, + 3;753,750,752;, + 3;749,750,753;, + 3;749,753,754;, + 3;754,753,755;, + 3;755,753,752;, + 3;752,715,755;, + 3;752,717,715;, + 3;717,716,715;, + 3;739,567,566;, + 3;756,567,739;, + 3;568,567,756;, + 3;757,568,756;, + 3;576,568,757;, + 3;583,576,757;, + 3;583,757,741;, + 3;741,757,740;, + 3;757,756,740;, + 3;740,756,739;, + 3;712,702,701;, + 3;758,712,701;, + 3;713,712,758;, + 3;713,758,759;, + 3;759,758,700;, + 3;700,758,701;, + 3;699,759,700;, + 3;760,759,699;, + 3;698,760,699;, + 3;697,760,698;, + 3;697,761,760;, + 3;762,761,697;, + 3;696,762,697;, + 3;755,762,696;, + 3;755,715,762;, + 3;762,715,761;, + 3;715,763,761;, + 3;715,714,763;, + 3;714,713,763;, + 3;763,713,759;, + 3;760,763,759;, + 3;761,763,760;, + 3;695,755,696;, + 3;754,755,695;, + 3;694,754,695;, + 3;764,754,694;, + 3;764,749,754;, + 3;765,749,764;, + 3;765,764,766;, + 3;766,764,694;, + 3;693,766,694;, + 3;691,766,693;, + 3;767,766,691;, + 3;767,765,766;, + 3;767,768,765;, + 3;768,749,765;, + 3;768,769,749;, + 3;769,748,749;, + 3;769,747,748;, + 3;770,747,769;, + 3;770,746,747;, + 3;771,746,770;, + 3;771,745,746;, + 3;744,745,771;, + 3;772,744,771;, + 3;773,744,772;, + 3;773,743,744;, + 3;773,774,743;, + 3;775,774,773;, + 3;775,773,772;, + 3;775,772,776;, + 3;776,772,777;, + 3;777,772,778;, + 3;772,771,778;, + 3;778,771,770;, + 3;778,770,779;, + 3;779,770,769;, + 3;779,769,768;, + 3;780,779,768;, + 3;780,768,767;, + 3;690,780,767;, + 3;767,691,690;, + 3;676,617,618;, + 3;619,676,618;, + 3;621,676,619;, + 3;621,619,620;, + 3;781,780,690;, + 3;781,779,780;, + 3;782,779,781;, + 3;782,778,779;, + 3;777,778,782;, + 3;777,782,783;, + 3;783,782,781;, + 3;783,781,689;, + 3;781,690,689;, + 3;783,689,688;, + 3;784,783,688;, + 3;777,783,784;, + 3;776,777,784;, + 3;785,776,784;, + 3;785,775,776;, + 3;786,775,785;, + 3;786,787,775;, + 3;775,787,774;, + 3;787,788,774;, + 3;774,788,743;, + 3;788,742,743;, + 3;788,789,742;, + 3;789,741,742;, + 3;789,790,741;, + 3;790,583,741;, + 3;791,583,790;, + 3;791,584,583;, + 3;791,585,584;, + 3;791,792,585;, + 3;793,792,791;, + 3;793,791,790;, + 3;793,790,789;, + 3;794,793,789;, + 3;788,794,789;, + 3;795,794,788;, + 3;787,795,788;, + 3;787,796,795;, + 3;786,796,787;, + 3;786,785,796;, + 3;796,785,797;, + 3;785,784,797;, + 3;784,688,797;, + 3;797,688,798;, + 3;798,688,799;, + 3;688,687,799;, + 3;687,800,799;, + 3;687,665,800;, + 3;800,665,664;, + 3;800,664,801;, + 3;802,800,801;, + 3;799,800,802;, + 3;803,799,802;, + 3;798,799,803;, + 3;804,798,803;, + 3;804,797,798;, + 3;796,797,804;, + 3;796,804,805;, + 3;796,805,795;, + 3;795,805,806;, + 3;795,806,794;, + 3;794,806,793;, + 3;793,806,792;, + 3;806,807,792;, + 3;806,805,807;, + 3;805,808,807;, + 3;805,809,808;, + 3;805,810,809;, + 3;804,810,805;, + 3;803,810,804;, + 3;803,811,810;, + 3;803,812,811;, + 3;803,802,812;, + 3;802,801,812;, + 3;812,801,813;, + 3;812,813,811;, + 3;811,813,814;, + 3;811,814,815;, + 3;810,811,815;, + 3;810,815,809;, + 3;809,815,816;, + 3;809,816,808;, + 3;808,816,817;, + 3;808,817,818;, + 3;807,808,818;, + 3;807,818,819;, + 3;807,819,585;, + 3;792,807,585;, + 3;585,819,586;, + 3;819,818,586;, + 3;818,820,586;, + 3;818,817,820;, + 3;817,821,820;, + 3;817,822,821;, + 3;822,823,821;, + 3;822,824,823;, + 3;825,824,822;, + 3;816,825,822;, + 3;816,822,817;, + 3;815,825,816;, + 3;815,814,825;, + 3;820,821,826;, + 3;826,821,827;, + 3;826,827,828;, + 3;828,827,829;, + 3;828,829,830;, + 3;830,829,831;, + 3;831,832,830;, + 3;831,833,832;, + 3;833,834,832;, + 3;832,834,835;, + 3;834,623,835;, + 3;835,623,605;, + 3;832,835,605;, + 3;832,605,604;, + 3;830,832,604;, + 3;830,604,836;, + 3;836,604,588;, + 3;587,836,588;, + 3;587,837,836;, + 3;837,828,836;, + 3;836,828,830;, + 3;838,828,837;, + 3;838,826,828;, + 3;820,826,838;, + 3;586,820,838;, + 3;586,838,587;, + 3;587,838,837;, + 3;834,839,623;, + 3;840,839,834;, + 3;840,841,839;, + 3;841,628,839;, + 3;839,628,624;, + 3;839,624,623;, + 3;842,843,844;, + 3;845,846,847;, + 3;848,849,850;, + 3;851,849,848;, + 3;852,849,851;, + 3;852,851,853;, + 3;854,852,853;, + 3;854,855,852;, + 3;855,856,852;, + 3;852,856,849;, + 3;849,856,857;, + 3;856,858,857;, + 3;859,858,856;, + 3;855,859,856;, + 3;855,860,859;, + 3;861,860,855;, + 3;862,861,855;, + 3;862,855,854;, + 3;863,862,854;, + 3;863,864,862;, + 3;864,861,862;, + 3;864,865,861;, + 3;866,865,864;, + 3;866,864,863;, + 3;867,866,863;, + 3;867,863,868;, + 3;863,854,868;, + 3;854,853,868;, + 3;868,853,869;, + 3;869,853,870;, + 3;870,853,871;, + 3;853,872,871;, + 3;871,872,873;, + 3;872,874,873;, + 3;874,875,873;, + 3;869,870,876;, + 3;869,876,877;, + 3;877,876,878;, + 3;877,878,879;, + 3;879,878,880;, + 3;880,878,881;, + 3;880,881,882;, + 3;882,881,883;, + 3;883,881,884;, + 3;883,884,885;, + 3;885,884,886;, + 3;885,886,887;, + 3;886,888,887;, + 3;887,888,889;, + 3;888,890,889;, + 3;889,890,891;, + 3;891,890,892;, + 3;890,893,892;, + 3;892,893,894;, + 3;893,895,894;, + 3;894,895,896;, + 3;895,897,896;, + 3;895,898,897;, + 3;898,899,897;, + 3;898,900,899;, + 3;900,901,899;, + 3;900,902,901;, + 3;901,902,903;, + 3;902,904,903;, + 3;902,905,904;, + 3;904,905,906;, + 3;905,907,906;, + 3;905,908,907;, + 3;908,909,907;, + 3;910,909,908;, + 3;873,910,908;, + 3;911,912,913;, + 3;912,914,913;, + 3;914,915,913;, + 3;914,916,915;, + 3;914,917,916;, + 3;918,917,914;, + 3;919,918,914;, + 3;920,918,919;, + 3;921,920,919;, + 3;922,920,921;, + 3;922,923,920;, + 3;923,924,920;, + 3;924,925,920;, + 3;920,925,918;, + 3;925,926,918;, + 3;918,926,917;, + 3;926,927,917;, + 3;917,927,916;, + 3;927,928,916;, + 3;916,928,929;, + 3;916,929,915;, + 3;915,929,930;, + 3;929,931,930;, + 3;929,932,931;, + 3;933,932,929;, + 3;928,933,929;, + 3;928,934,933;, + 3;928,935,934;, + 3;936,935,928;, + 3;927,936,928;, + 3;937,936,927;, + 3;926,937,927;, + 3;938,937,926;, + 3;938,939,937;, + 3;940,939,938;, + 3;941,940,938;, + 3;941,942,940;, + 3;943,942,941;, + 3;944,943,941;, + 3;944,945,943;, + 3;946,945,944;, + 3;946,947,945;, + 3;948,947,946;, + 3;949,948,946;, + 3;950,948,949;, + 3;951,950,949;, + 3;951,952,950;, + 3;953,952,951;, + 3;954,953,951;, + 3;955,953,954;, + 3;955,956,953;, + 3;953,956,952;, + 3;956,957,952;, + 3;952,957,958;, + 3;952,958,950;, + 3;958,948,950;, + 3;958,959,948;, + 3;959,947,948;, + 3;959,960,947;, + 3;947,960,945;, + 3;945,960,961;, + 3;945,961,943;, + 3;943,961,942;, + 3;942,961,962;, + 3;942,962,940;, + 3;940,962,939;, + 3;939,962,963;, + 3;939,963,937;, + 3;937,963,936;, + 3;963,964,936;, + 3;936,964,935;, + 3;935,964,934;, + 3;964,965,934;, + 3;934,965,933;, + 3;933,965,966;, + 3;933,966,932;, + 3;966,967,932;, + 3;968,967,966;, + 3;965,968,966;, + 3;969,968,965;, + 3;964,969,965;, + 3;970,969,964;, + 3;963,970,964;, + 3;962,970,963;, + 3;962,971,970;, + 3;961,971,962;, + 3;961,972,971;, + 3;960,972,961;, + 3;973,972,960;, + 3;959,973,960;, + 3;974,973,959;, + 3;974,975,973;, + 3;975,976,973;, + 3;973,976,972;, + 3;976,977,972;, + 3;972,977,971;, + 3;971,977,970;, + 3;977,969,970;, + 3;977,978,969;, + 3;979,978,977;, + 3;976,979,977;, + 3;980,979,976;, + 3;975,980,976;, + 3;981,980,975;, + 3;982,981,975;, + 3;982,975,974;, + 3;983,982,974;, + 3;983,974,984;, + 3;984,974,959;, + 3;985,984,959;, + 3;985,959,958;, + 3;957,985,958;, + 3;957,986,985;, + 3;987,986,957;, + 3;956,987,957;, + 3;988,987,956;, + 3;955,988,956;, + 3;989,988,955;, + 3;989,955,990;, + 3;990,955,954;, + 3;990,954,991;, + 3;992,990,991;, + 3;992,989,990;, + 3;993,989,992;, + 3;993,988,989;, + 3;993,994,988;, + 3;995,994,993;, + 3;995,993,996;, + 3;996,993,992;, + 3;996,992,997;, + 3;997,992,991;, + 3;997,991,998;, + 3;999,997,998;, + 3;999,998,1000;, + 3;1001,999,1000;, + 3;1001,1002,999;, + 3;1002,997,999;, + 3;1002,996,997;, + 3;1003,996,1002;, + 3;1003,1002,1001;, + 3;1004,1003,1001;, + 3;1004,1001,1005;, + 3;1005,1001,1000;, + 3;1005,1000,923;, + 3;1006,1005,923;, + 3;1006,1004,1005;, + 3;1007,1004,1006;, + 3;1007,1003,1004;, + 3;1008,1003,1007;, + 3;1008,1009,1003;, + 3;1009,996,1003;, + 3;1009,995,996;, + 3;1010,995,1009;, + 3;1010,1009,1008;, + 3;1011,1010,1008;, + 3;1011,1008,1012;, + 3;1012,1008,1007;, + 3;1012,1007,1013;, + 3;1013,1007,1006;, + 3;1013,1006,1014;, + 3;1014,1006,923;, + 3;1014,923,922;, + 3;1014,922,1015;, + 3;1015,922,1016;, + 3;1017,849,1018;, + 3;849,1019,1018;, + 3;857,1019,849;, + 3;857,1020,1019;, + 3;1021,1020,857;, + 3;858,1021,857;, + 3;1022,1021,858;, + 3;1022,1023,1021;, + 3;1023,1020,1021;, + 3;1023,1024,1020;, + 3;1024,1025,1020;, + 3;1020,1025,1019;, + 3;1019,1025,1026;, + 3;1019,1026,1018;, + 3;1026,1027,1018;, + 3;1026,1028,1027;, + 3;1025,1028,1026;, + 3;1025,1029,1028;, + 3;1030,1029,1025;, + 3;1024,1030,1025;, + 3;1024,1031,1030;, + 3;1031,1029,1030;, + 3;1031,1032,1029;, + 3;1029,1032,1033;, + 3;1029,1033,1028;, + 3;1028,1033,1027;, + 3;1027,1033,1034;, + 3;1034,1033,1035;, + 3;1027,1034,1035;, + 3;1036,1027,1035;, + 3;1018,1027,1036;, + 3;909,1018,1036;, + 3;850,1018,909;, + 3;1037,1038,1039;, + 3;1037,1039,1040;, + 3;1041,1037,1040;, + 3;1041,1040,1042;, + 3;1043,1041,1042;, + 3;1043,1042,1044;, + 3;1043,1044,1045;, + 3;1046,1043,1045;, + 3;1045,1047,1046;, + 3;1046,1047,1048;, + 3;1046,1048,1049;, + 3;1049,1048,1050;, + 3;1049,1050,1051;, + 3;1051,1050,1052;, + 3;1053,1051,1052;, + 3;1053,1052,1054;, + 3;1052,1055,1054;, + 3;1055,1056,1054;, + 3;1056,1057,1054;, + 3;1056,1058,1057;, + 3;1058,1059,1057;, + 3;1058,1060,1059;, + 3;1060,1061,1059;, + 3;1060,1062,1061;, + 3;1062,1063,1061;, + 3;1062,1064,1063;, + 3;1064,1065,1063;, + 3;1064,1066,1065;, + 3;1067,1065,1066;, + 3;1067,1068,1065;, + 3;1069,1068,1067;, + 3;1069,1070,1068;, + 3;1071,1072,1073;, + 3;1074,1071,1073;, + 3;1075,1071,1074;, + 3;1075,1076,1071;, + 3;1077,1076,1075;, + 3;1078,1076,1077;, + 3;1078,1079,1076;, + 3;1076,1079,1080;, + 3;1080,1071,1076;, + 3;1080,1081,1071;, + 3;1071,1081,1082;, + 3;1083,1081,1084;, + 3;1081,1085,1084;, + 3;1086,1085,1081;, + 3;1087,1086,1081;, + 3;1080,1087,1081;, + 3;1088,1087,1080;, + 3;1079,1088,1080;, + 3;1089,1088,1079;, + 3;1089,1090,1088;, + 3;1089,1091,1090;, + 3;1091,1092,1090;, + 3;1091,1093,1092;, + 3;1091,1094,1093;, + 3;1095,1094,1091;, + 3;1096,1095,1091;, + 3;1096,1091,1089;, + 3;1097,1096,1089;, + 3;1098,1096,1097;, + 3;1098,1099,1096;, + 3;1096,1099,1095;, + 3;1099,1100,1095;, + 3;1095,1100,1094;, + 3;1100,1101,1094;, + 3;1101,1102,1094;, + 3;1102,1093,1094;, + 3;1102,1103,1093;, + 3;1093,1103,1092;, + 3;1092,1103,1104;, + 3;1103,1105,1104;, + 3;1103,1106,1105;, + 3;1105,1106,1107;, + 3;1104,1105,1107;, + 3;1104,1107,1108;, + 3;1109,1104,1108;, + 3;1092,1104,1109;, + 3;1110,1092,1109;, + 3;1111,1092,1110;, + 3;1111,1110,1112;, + 3;1111,1112,1088;, + 3;1088,1112,1087;, + 3;1112,1113,1087;, + 3;1087,1113,1086;, + 3;1113,1114,1086;, + 3;1114,1085,1086;, + 3;1114,1115,1085;, + 3;1116,1115,1114;, + 3;1113,1116,1114;, + 3;1117,1116,1113;, + 3;1112,1117,1113;, + 3;1110,1117,1112;, + 3;1110,1118,1117;, + 3;1110,1109,1118;, + 3;1109,1108,1118;, + 3;1118,1108,1119;, + 3;1117,1118,1119;, + 3;1117,1119,1116;, + 3;1119,1120,1116;, + 3;1119,1121,1120;, + 3;1119,1108,1121;, + 3;1108,1122,1121;, + 3;1108,1123,1122;, + 3;1108,1107,1123;, + 3;1107,1124,1123;, + 3;1107,1106,1124;, + 3;1106,1125,1124;, + 3;1106,1126,1125;, + 3;1106,1103,1126;, + 3;1103,1127,1126;, + 3;1103,1128,1127;, + 3;1129,1128,1103;, + 3;1102,1129,1103;, + 3;1102,1130,1129;, + 3;1101,1130,1102;, + 3;1131,1130,1101;, + 3;1131,1132,1130;, + 3;1133,1132,1131;, + 3;1133,1134,1132;, + 3;1135,1134,1133;, + 3;1135,1136,1134;, + 3;1137,1136,1135;, + 3;1137,1135,1138;, + 3;1138,1135,1133;, + 3;1138,1133,1139;, + 3;1139,1133,1131;, + 3;1139,1131,1140;, + 3;1140,1131,1101;, + 3;1140,1101,1141;, + 3;1100,1141,1101;, + 3;1142,1141,1100;, + 3;1099,1142,1100;, + 3;1143,1142,1099;, + 3;1143,1144,1142;, + 3;1144,1141,1142;, + 3;1144,1145,1141;, + 3;1145,1139,1141;, + 3;1139,1140,1141;, + 3;1084,1146,1147;, + 3;1084,1148,1146;, + 3;1084,1149,1148;, + 3;1085,1149,1084;, + 3;1085,1150,1149;, + 3;1085,1151,1150;, + 3;1115,1151,1085;, + 3;1115,1152,1151;, + 3;1151,1152,1150;, + 3;1152,1153,1150;, + 3;1152,1154,1153;, + 3;1154,1155,1153;, + 3;1156,1155,1154;, + 3;1157,1156,1154;, + 3;1157,1158,1156;, + 3;1159,1158,1157;, + 3;1160,1158,1159;, + 3;1160,1161,1158;, + 3;1160,1162,1161;, + 3;1162,1163,1161;, + 3;1162,1164,1163;, + 3;1164,1165,1163;, + 3;1165,1164,1166;, + 3;1165,1166,1167;, + 3;1166,1168,1167;, + 3;1166,1169,1168;, + 3;1170,1169,1166;, + 3;1164,1170,1166;, + 3;1122,1170,1164;, + 3;1122,1164,1162;, + 3;1121,1122,1162;, + 3;1120,1121,1162;, + 3;1120,1162,1160;, + 3;1120,1160,1159;, + 3;1120,1159,1116;, + 3;1116,1159,1115;, + 3;1159,1171,1115;, + 3;1171,1159,1157;, + 3;1171,1157,1152;, + 3;1157,1154,1152;, + 3;1171,1152,1115;, + 3;1122,1123,1170;, + 3;1123,1172,1170;, + 3;1123,1124,1172;, + 3;1172,1124,1173;, + 3;1170,1172,1173;, + 3;1170,1173,1169;, + 3;1173,1174,1169;, + 3;1175,1169,1174;, + 3;1168,1169,1175;, + 3;1167,1168,1175;, + 3;1176,1167,1175;, + 3;1155,1167,1176;, + 3;1155,1176,1153;, + 3;1153,1176,1177;, + 3;1176,1175,1177;, + 3;1177,1175,1178;, + 3;1178,1175,1179;, + 3;1174,1179,1175;, + 3;1174,1180,1179;, + 3;1173,1180,1174;, + 3;1173,1181,1180;, + 3;1124,1181,1173;, + 3;1124,1125,1181;, + 3;1125,1182,1181;, + 3;1125,1126,1182;, + 3;1182,1126,1183;, + 3;1126,1184,1183;, + 3;1184,1126,1185;, + 3;1184,1185,1186;, + 3;1183,1184,1186;, + 3;1183,1186,1187;, + 3;1186,1188,1187;, + 3;1186,1185,1188;, + 3;1185,1189,1188;, + 3;1185,1190,1189;, + 3;1190,1191,1189;, + 3;1190,1192,1191;, + 3;1190,1193,1192;, + 3;1190,1194,1193;, + 3;1190,1195,1194;, + 3;1196,1195,1190;, + 3;1185,1196,1190;, + 3;1185,1197,1196;, + 3;1126,1197,1185;, + 3;1126,1198,1197;, + 3;1199,1198,1126;, + 3;1127,1199,1126;, + 3;1128,1199,1127;, + 3;1128,1200,1199;, + 3;1201,1200,1128;, + 3;1129,1201,1128;, + 3;1129,1202,1201;, + 3;1201,1202,1203;, + 3;1201,1203,1200;, + 3;1200,1203,1204;, + 3;1200,1204,1199;, + 3;1199,1204,1198;, + 3;1204,1205,1198;, + 3;1204,1206,1205;, + 3;1203,1206,1204;, + 3;1203,1207,1206;, + 3;1208,1207,1203;, + 3;1202,1208,1203;, + 3;1209,1208,1202;, + 3;1209,1202,1129;, + 3;1210,1209,1129;, + 3;1130,1210,1129;, + 3;1130,1211,1210;, + 3;1132,1211,1130;, + 3;1132,1212,1211;, + 3;1134,1212,1132;, + 3;1134,1213,1212;, + 3;1136,1213,1134;, + 3;1136,1214,1213;, + 3;1136,1215,1214;, + 3;1216,1215,1136;, + 3;1137,1216,1136;, + 3;1217,1216,1137;, + 3;1217,1218,1216;, + 3;1216,1218,1219;, + 3;1216,1219,1215;, + 3;1219,1220,1215;, + 3;1219,1221,1220;, + 3;1218,1221,1219;, + 3;1218,868,1221;, + 3;1221,868,869;, + 3;1221,869,1222;, + 3;1220,1221,1222;, + 3;1220,1222,1215;, + 3;1215,1222,1223;, + 3;1215,1223,1214;, + 3;1214,1223,1224;, + 3;1223,879,1224;, + 3;1223,877,879;, + 3;1222,877,1223;, + 3;1222,869,877;, + 3;879,880,1224;, + 3;1224,880,882;, + 3;1224,882,1225;, + 3;882,883,1225;, + 3;1225,883,885;, + 3;1225,885,1226;, + 3;1226,885,887;, + 3;1226,887,1227;, + 3;887,1228,1227;, + 3;887,889,1228;, + 3;889,891,1228;, + 3;1228,891,1229;, + 3;1229,891,1230;, + 3;891,892,1230;, + 3;1230,892,894;, + 3;1230,894,1231;, + 3;1231,894,896;, + 3;1231,896,1232;, + 3;896,897,1232;, + 3;897,1233,1232;, + 3;897,899,1233;, + 3;899,1234,1233;, + 3;899,901,1234;, + 3;901,903,1234;, + 3;1234,903,1235;, + 3;1234,1235,1233;, + 3;1233,1235,1236;, + 3;1233,1236,1237;, + 3;1232,1233,1237;, + 3;1238,1232,1237;, + 3;1231,1232,1238;, + 3;1239,1231,1238;, + 3;1240,1231,1239;, + 3;1241,1231,1240;, + 3;1241,1230,1231;, + 3;1229,1230,1241;, + 3;1242,1229,1241;, + 3;1243,1229,1242;, + 3;1228,1229,1243;, + 3;1227,1228,1243;, + 3;1227,1243,1244;, + 3;1244,1243,1245;, + 3;1243,1242,1245;, + 3;1245,1242,1246;, + 3;1246,1242,1247;, + 3;1242,1241,1247;, + 3;1247,1241,1240;, + 3;1248,1247,1240;, + 3;1246,1247,1248;, + 3;1249,1246,1248;, + 3;1245,1246,1249;, + 3;1244,1245,1249;, + 3;1244,1249,1250;, + 3;1250,1249,1251;, + 3;1251,1249,1248;, + 3;1251,1248,1252;, + 3;1252,1248,1253;, + 3;1248,1240,1253;, + 3;1253,1240,1239;, + 3;1253,1239,1254;, + 3;1254,1239,1255;, + 3;1239,1238,1255;, + 3;1255,1238,1256;, + 3;1238,1237,1256;, + 3;1256,1237,1257;, + 3;1237,1236,1257;, + 3;1236,1258,1257;, + 3;1235,1258,1236;, + 3;1235,1259,1258;, + 3;1260,1259,1235;, + 3;903,1260,1235;, + 3;903,904,1260;, + 3;904,906,1260;, + 3;1260,906,1259;, + 3;906,1261,1259;, + 3;906,907,1261;, + 3;907,1262,1261;, + 3;907,909,1262;, + 3;909,1036,1262;, + 3;1262,1036,1263;, + 3;1263,1036,1264;, + 3;1036,1035,1264;, + 3;1264,1035,1265;, + 3;1265,1035,1266;, + 3;1033,1266,1035;, + 3;1033,1267,1266;, + 3;1032,1267,1033;, + 3;1032,1268,1267;, + 3;1032,1269,1268;, + 3;1031,1269,1032;, + 3;1059,1269,1031;, + 3;1057,1059,1031;, + 3;1057,1031,1024;, + 3;1054,1057,1024;, + 3;1054,1024,1023;, + 3;1270,1054,1023;, + 3;1053,1054,1270;, + 3;1271,1053,1270;, + 3;1271,1270,1022;, + 3;1270,1023,1022;, + 3;1189,1191,1272;, + 3;1189,1272,1273;, + 3;1189,1273,1274;, + 3;1189,1274,1275;, + 3;1275,1274,1276;, + 3;1275,1276,1277;, + 3;1275,1277,1278;, + 3;1279,1275,1278;, + 3;1279,1278,1280;, + 3;1279,1280,1281;, + 3;1279,1281,1282;, + 3;1279,1282,1283;, + 3;1284,1279,1283;, + 3;1285,1279,1284;, + 3;1285,1275,1279;, + 3;1286,1275,1285;, + 3;1286,1285,1287;, + 3;1285,1284,1287;, + 3;1287,1284,1288;, + 3;1284,1289,1288;, + 3;1284,1283,1289;, + 3;1289,1283,1290;, + 3;1283,1291,1290;, + 3;1290,1291,1292;, + 3;1290,1292,1293;, + 3;1292,1294,1293;, + 3;1294,1295,1293;, + 3;1295,1296,1293;, + 3;1295,1297,1296;, + 3;1297,1298,1296;, + 3;1298,1299,1296;, + 3;1299,1300,1296;, + 3;1299,1301,1300;, + 3;1301,1302,1300;, + 3;1303,1300,1302;, + 3;1303,1304,1300;, + 3;1305,1304,1303;, + 3;1306,1304,1305;, + 3;1307,1304,1306;, + 3;1307,1308,1304;, + 3;1309,1308,1307;, + 3;1309,1310,1308;, + 3;1311,1310,1309;, + 3;1312,1310,1311;, + 3;1313,1310,1312;, + 3;1313,1312,1314;, + 3;1195,1313,1314;, + 3;1315,1313,1195;, + 3;1196,1315,1195;, + 3;1196,1316,1315;, + 3;1197,1316,1196;, + 3;1317,1316,1197;, + 3;1198,1317,1197;, + 3;1205,1317,1198;, + 3;1205,1318,1317;, + 3;1205,1319,1318;, + 3;1206,1319,1205;, + 3;1206,1254,1319;, + 3;1206,1253,1254;, + 3;1252,1253,1206;, + 3;1207,1252,1206;, + 3;1320,1252,1207;, + 3;1320,1251,1252;, + 3;1250,1251,1320;, + 3;1321,1250,1320;, + 3;1322,1250,1321;, + 3;1322,1244,1250;, + 3;1227,1244,1322;, + 3;1323,1227,1322;, + 3;1226,1227,1323;, + 3;1324,1226,1323;, + 3;1324,1225,1226;, + 3;1325,1225,1324;, + 3;1325,1224,1225;, + 3;1214,1224,1325;, + 3;1213,1214,1325;, + 3;1213,1325,1324;, + 3;1213,1324,1326;, + 3;1213,1326,1212;, + 3;1212,1326,1211;, + 3;1326,1327,1211;, + 3;1326,1323,1327;, + 3;1324,1323,1326;, + 3;1323,1322,1327;, + 3;1327,1322,1321;, + 3;1327,1321,1328;, + 3;1211,1327,1328;, + 3;1211,1328,1210;, + 3;1328,1209,1210;, + 3;1328,1321,1209;, + 3;1321,1320,1209;, + 3;1209,1320,1208;, + 3;1320,1207,1208;, + 3;1254,1255,1319;, + 3;1319,1255,1318;, + 3;1255,1256,1318;, + 3;1318,1256,1329;, + 3;1256,1257,1329;, + 3;1329,1257,1330;, + 3;1257,1331,1330;, + 3;1257,1258,1331;, + 3;1258,1332,1331;, + 3;1259,1332,1258;, + 3;1259,1261,1332;, + 3;1261,1333,1332;, + 3;1261,1262,1333;, + 3;1262,1334,1333;, + 3;1262,1263,1334;, + 3;1334,1263,1335;, + 3;1332,1334,1335;, + 3;1333,1334,1332;, + 3;1332,1335,1331;, + 3;1331,1335,1336;, + 3;1335,1337,1336;, + 3;1263,1337,1335;, + 3;1263,1264,1337;, + 3;1337,1264,1338;, + 3;1264,1265,1338;, + 3;1265,1266,1338;, + 3;1338,1266,1339;, + 3;1267,1339,1266;, + 3;1267,1268,1339;, + 3;1268,1340,1339;, + 3;1268,1341,1340;, + 3;1342,1341,1268;, + 3;1269,1342,1268;, + 3;1269,1343,1342;, + 3;1059,1343,1269;, + 3;1059,1061,1343;, + 3;1343,1061,1344;, + 3;1343,1344,1342;, + 3;1344,1341,1342;, + 3;1344,1345,1341;, + 3;1344,1346,1345;, + 3;1061,1346,1344;, + 3;1061,1063,1346;, + 3;1063,1347,1346;, + 3;1063,1065,1347;, + 3;1065,1348,1347;, + 3;1349,1348,1065;, + 3;1070,1349,1065;, + 3;1070,1350,1349;, + 3;1070,1351,1350;, + 3;1352,1351,1070;, + 3;1353,1352,1070;, + 3;1353,1354,1352;, + 3;1355,1354,1353;, + 3;1355,1356,1354;, + 3;1357,1356,1355;, + 3;1358,1357,1355;, + 3;1358,1359,1357;, + 3;1360,1359,1358;, + 3;1361,1359,1360;, + 3;1361,1362,1359;, + 3;1359,1362,1357;, + 3;1362,1363,1357;, + 3;1357,1363,1364;, + 3;1357,1364,1356;, + 3;1356,1364,1365;, + 3;1356,1365,1366;, + 3;1354,1356,1366;, + 3;1354,1366,1367;, + 3;1354,1367,1352;, + 3;1352,1367,1368;, + 3;1352,1368,1351;, + 3;1351,1368,1350;, + 3;1368,1369,1350;, + 3;1370,1369,1368;, + 3;1367,1370,1368;, + 3;1367,1371,1370;, + 3;1367,1372,1371;, + 3;1366,1372,1367;, + 3;1365,1372,1366;, + 3;1365,1373,1372;, + 3;1374,1373,1365;, + 3;1364,1374,1365;, + 3;1375,1374,1364;, + 3;1363,1375,1364;, + 3;1376,1375,1363;, + 3;1362,1376,1363;, + 3;1377,1376,1362;, + 3;1377,1375,1376;, + 3;1377,1378,1375;, + 3;1375,1378,1374;, + 3;1378,913,1374;, + 3;913,915,1374;, + 3;1374,915,1373;, + 3;1373,915,930;, + 3;1373,930,1372;, + 3;1372,930,1371;, + 3;930,1379,1371;, + 3;930,931,1379;, + 3;1379,931,1371;, + 3;1371,931,1380;, + 3;1371,1380,1370;, + 3;1370,1380,1381;, + 3;1370,1381,1369;, + 3;1369,1381,1382;, + 3;1381,1383,1382;, + 3;1381,1384,1383;, + 3;1385,1384,1381;, + 3;967,1385,1381;, + 3;967,1381,1380;, + 3;1386,967,1380;, + 3;932,967,1386;, + 3;932,1386,931;, + 3;1386,1380,931;, + 3;1377,1362,1361;, + 3;1387,1377,1361;, + 3;1388,1377,1387;, + 3;1388,1378,1377;, + 3;1388,913,1378;, + 3;1389,913,1388;, + 3;1389,1390,913;, + 3;1389,1015,1390;, + 3;1391,1015,1389;, + 3;1391,1392,1015;, + 3;1392,1014,1015;, + 3;1393,1014,1392;, + 3;1393,1013,1014;, + 3;1394,1013,1393;, + 3;1394,1012,1013;, + 3;1395,1012,1394;, + 3;1395,1394,1393;, + 3;1396,1395,1393;, + 3;1396,1393,1392;, + 3;1397,1396,1392;, + 3;1398,1396,1397;, + 3;1398,1399,1396;, + 3;1399,1395,1396;, + 3;1399,1012,1395;, + 3;1399,1011,1012;, + 3;1400,1011,1399;, + 3;1398,1400,1399;, + 3;1401,1400,1398;, + 3;1401,1398,1397;, + 3;1402,1401,1397;, + 3;1402,1397,1403;, + 3;1403,1397,1392;, + 3;1403,1392,1404;, + 3;1404,1392,1391;, + 3;1404,1391,1405;, + 3;1405,1391,1406;, + 3;1391,1389,1406;, + 3;1406,1389,1388;, + 3;1406,1388,1407;, + 3;1407,1388,1387;, + 3;1407,1387,1408;, + 3;1387,1361,1408;, + 3;1408,1361,1360;, + 3;1409,1408,1360;, + 3;1407,1408,1409;, + 3;1410,1407,1409;, + 3;1410,1406,1407;, + 3;1405,1406,1410;, + 3;1411,1405,1410;, + 3;1404,1405,1411;, + 3;1412,1404,1411;, + 3;1403,1404,1412;, + 3;1402,1403,1412;, + 3;1413,1402,1412;, + 3;1413,1401,1402;, + 3;1414,1401,1413;, + 3;1414,1413,1415;, + 3;1413,1412,1415;, + 3;1415,1412,1416;, + 3;1412,1411,1416;, + 3;1411,1417,1416;, + 3;1411,1410,1417;, + 3;1417,1410,1418;, + 3;1410,1409,1418;, + 3;1418,1409,1419;, + 3;1417,1418,1419;, + 3;1416,1417,1419;, + 3;1416,1419,1420;, + 3;1419,1421,1420;, + 3;1419,1409,1421;, + 3;1409,1360,1421;, + 3;1420,1421,1037;, + 3;1422,1420,1037;, + 3;1423,1420,1422;, + 3;1423,1416,1420;, + 3;1415,1416,1423;, + 3;1424,1415,1423;, + 3;1414,1415,1424;, + 3;1425,1414,1424;, + 3;1425,1424,1426;, + 3;1426,1424,1423;, + 3;1426,1423,1422;, + 3;1426,1422,1427;, + 3;1427,1422,1037;, + 3;1427,1037,1041;, + 3;1428,1427,1041;, + 3;1429,1428,1041;, + 3;1429,1041,1043;, + 3;1429,1043,1430;, + 3;1430,1043,1046;, + 3;1430,1046,1431;, + 3;1431,1046,1432;, + 3;1432,1046,1049;, + 3;1433,1432,1049;, + 3;1434,1432,1433;, + 3;1434,1431,1432;, + 3;1435,1431,1434;, + 3;1436,1431,1435;, + 3;1436,1430,1431;, + 3;1437,1430,1436;, + 3;1438,1430,1437;, + 3;1438,1429,1430;, + 3;1439,1429,1438;, + 3;1439,1440,1429;, + 3;1440,1428,1429;, + 3;1440,1441,1428;, + 3;1441,1427,1428;, + 3;1441,1442,1427;, + 3;1442,1426,1427;, + 3;1443,1426,1442;, + 3;1443,1425,1426;, + 3;1444,1425,1443;, + 3;1444,1445,1425;, + 3;1445,1414,1425;, + 3;1445,1446,1414;, + 3;1447,1446,1445;, + 3;1444,1447,1445;, + 3;1444,1448,1447;, + 3;1448,1449,1447;, + 3;1447,1449,1446;, + 3;1449,1450,1446;, + 3;1446,1450,1451;, + 3;1446,1451,1414;, + 3;1414,1451,1401;, + 3;1451,1452,1401;, + 3;1401,1452,1400;, + 3;1452,1453,1400;, + 3;1400,1453,1454;, + 3;1400,1454,1011;, + 3;1454,1455,1011;, + 3;1011,1455,1010;, + 3;1455,1456,1010;, + 3;1010,1456,1457;, + 3;1010,1457,995;, + 3;995,1457,994;, + 3;1457,1458,994;, + 3;1457,1459,1458;, + 3;1456,1459,1457;, + 3;1460,1459,1456;, + 3;1455,1460,1456;, + 3;1461,1460,1455;, + 3;1454,1461,1455;, + 3;1453,1461,1454;, + 3;1453,1462,1461;, + 3;1452,1462,1453;, + 3;1452,1463,1462;, + 3;1451,1463,1452;, + 3;1450,1463,1451;, + 3;1450,1464,1463;, + 3;1465,1464,1450;, + 3;1449,1465,1450;, + 3;1466,1465,1449;, + 3;1448,1466,1449;, + 3;1467,1466,1448;, + 3;1444,1467,1448;, + 3;1468,1467,1444;, + 3;1468,1444,1443;, + 3;1468,1443,1469;, + 3;1469,1443,1442;, + 3;1469,1442,1441;, + 3;1470,1469,1441;, + 3;1470,1441,1440;, + 3;1471,1470,1440;, + 3;1471,1440,1439;, + 3;1472,1471,1439;, + 3;1472,1439,1438;, + 3;1472,1438,1473;, + 3;1473,1438,1437;, + 3;1473,1437,1474;, + 3;1474,1437,1436;, + 3;1474,1436,1475;, + 3;1475,1436,1435;, + 3;1475,1435,1476;, + 3;1476,1435,1434;, + 3;1476,1434,1477;, + 3;1434,1478,1477;, + 3;1434,1433,1478;, + 3;1478,1433,1479;, + 3;1479,1433,1480;, + 3;1433,1049,1480;, + 3;1480,1049,1051;, + 3;1480,1051,1481;, + 3;1481,1051,1053;, + 3;1481,1053,1482;, + 3;1482,1053,1271;, + 3;1482,1271,1483;, + 3;1271,1022,1483;, + 3;1483,1022,858;, + 3;1484,1483,858;, + 3;859,1484,858;, + 3;1485,1484,859;, + 3;1485,1483,1484;, + 3;1485,1482,1483;, + 3;860,1482,1485;, + 3;860,1485,859;, + 3;860,1481,1482;, + 3;861,1481,860;, + 3;861,1486,1481;, + 3;865,1486,861;, + 3;865,1480,1486;, + 3;1486,1480,1481;, + 3;1479,1480,865;, + 3;866,1479,865;, + 3;1487,1479,866;, + 3;1487,1478,1479;, + 3;1477,1478,1487;, + 3;1488,1477,1487;, + 3;1489,1477,1488;, + 3;1489,1476,1477;, + 3;1490,1476,1489;, + 3;1490,1475,1476;, + 3;1491,1475,1490;, + 3;1491,1474,1475;, + 3;1492,1474,1491;, + 3;1492,1473,1474;, + 3;1493,1473,1492;, + 3;1493,1472,1473;, + 3;1494,1472,1493;, + 3;1494,1471,1472;, + 3;1494,1495,1471;, + 3;1495,1470,1471;, + 3;1495,1496,1470;, + 3;1496,1469,1470;, + 3;1496,1468,1469;, + 3;1468,1496,1467;, + 3;1496,1497,1467;, + 3;1498,1497,1496;, + 3;1495,1498,1496;, + 3;1495,1494,1498;, + 3;1494,1499,1498;, + 3;1494,1493,1499;, + 3;1493,1500,1499;, + 3;1493,1492,1500;, + 3;1492,1491,1500;, + 3;1500,1491,1501;, + 3;1491,1502,1501;, + 3;1491,1490,1502;, + 3;1490,1489,1502;, + 3;1502,1489,1503;, + 3;1489,1488,1503;, + 3;1503,1488,1504;, + 3;1488,1505,1504;, + 3;1488,1506,1505;, + 3;1488,1487,1506;, + 3;1506,1487,866;, + 3;1506,866,1507;, + 3;1507,866,867;, + 3;1507,867,1508;, + 3;867,868,1508;, + 3;1508,868,1218;, + 3;1217,1508,1218;, + 3;1505,1508,1217;, + 3;1507,1508,1505;, + 3;1506,1507,1505;, + 3;1505,1217,1137;, + 3;1505,1137,1509;, + 3;1509,1137,1138;, + 3;1509,1138,1139;, + 3;1509,1139,1145;, + 3;1144,1509,1145;, + 3;1504,1509,1144;, + 3;1504,1505,1509;, + 3;1498,1499,1497;, + 3;1499,1510,1497;, + 3;1499,1511,1510;, + 3;1499,1500,1511;, + 3;1500,1501,1511;, + 3;1511,1501,1512;, + 3;1511,1512,1510;, + 3;1510,1512,1513;, + 3;1512,1514,1513;, + 3;1512,1515,1514;, + 3;1501,1515,1512;, + 3;1501,1502,1515;, + 3;1502,1516,1515;, + 3;1502,1503,1516;, + 3;1516,1503,1517;, + 3;1503,1504,1517;, + 3;1517,1504,1144;, + 3;1517,1144,1143;, + 3;1518,1517,1143;, + 3;1516,1517,1518;, + 3;1515,1516,1518;, + 3;1515,1518,1519;, + 3;1519,1518,1143;, + 3;1519,1143,1099;, + 3;1519,1099,1098;, + 3;1514,1519,1098;, + 3;1515,1519,1514;, + 3;1513,1514,1098;, + 3;1513,1098,1097;, + 3;1513,1097,1520;, + 3;1520,1097,1521;, + 3;1097,1089,1521;, + 3;1521,1089,1522;, + 3;1089,1079,1522;, + 3;1522,1079,1078;, + 3;1523,1522,1078;, + 3;1524,1522,1523;, + 3;1521,1522,1524;, + 3;1520,1521,1524;, + 3;1525,1520,1524;, + 3;1526,1520,1525;, + 3;1513,1520,1526;, + 3;1510,1513,1526;, + 3;1510,1526,1527;, + 3;1497,1510,1527;, + 3;1497,1527,1467;, + 3;1467,1527,1466;, + 3;1527,1525,1466;, + 3;1527,1526,1525;, + 3;1466,1525,1465;, + 3;1525,1524,1465;, + 3;1465,1524,1464;, + 3;1464,1524,1523;, + 3;1464,1523,1528;, + 3;1464,1528,1463;, + 3;1463,1528,1462;, + 3;1462,1528,1529;, + 3;1529,1528,1078;, + 3;1523,1078,1528;, + 3;1529,1078,1077;, + 3;1529,1077,1530;, + 3;1462,1529,1530;, + 3;1462,1530,1461;, + 3;1461,1530,1460;, + 3;1530,1077,1460;, + 3;1460,1077,1459;, + 3;1077,1075,1459;, + 3;1459,1075,1531;, + 3;1459,1531,1458;, + 3;1458,1531,1532;, + 3;1531,1533,1532;, + 3;1531,1075,1533;, + 3;1075,1074,1533;, + 3;1533,1074,1534;, + 3;1074,1535,1534;, + 3;1074,1073,1535;, + 3;1535,1073,1536;, + 3;1073,1537,1536;, + 3;1073,1538,1537;, + 3;1336,1337,1338;, + 3;1336,1338,1539;, + 3;1539,1338,1540;, + 3;1338,1339,1540;, + 3;1540,1339,1541;, + 3;1339,1542,1541;, + 3;1339,1340,1542;, + 3;1340,1543,1542;, + 3;1340,1544,1543;, + 3;1341,1544,1340;, + 3;1341,1345,1544;, + 3;1345,1545,1544;, + 3;1345,1546,1545;, + 3;1346,1546,1345;, + 3;1346,1547,1546;, + 3;1346,1347,1547;, + 3;1347,1548,1547;, + 3;1549,1548,1347;, + 3;1348,1549,1347;, + 3;1348,1550,1549;, + 3;1349,1550,1348;, + 3;1349,1551,1550;, + 3;1350,1551,1349;, + 3;1350,1369,1551;, + 3;1369,1552,1551;, + 3;1369,1382,1552;, + 3;1382,1553,1552;, + 3;1382,1383,1553;, + 3;1383,1554,1553;, + 3;1384,1554,1383;, + 3;1384,1555,1554;, + 3;1556,1555,1384;, + 3;1385,1556,1384;, + 3;1557,1556,1385;, + 3;1289,1556,1557;, + 3;1289,1290,1556;, + 3;1290,1558,1556;, + 3;1290,1293,1558;, + 3;1293,1559,1558;, + 3;1293,1296,1559;, + 3;1296,1560,1559;, + 3;1296,1561,1560;, + 3;1296,1300,1561;, + 3;1300,1562,1561;, + 3;1304,1562,1300;, + 3;1304,1563,1562;, + 3;1308,1563,1304;, + 3;1308,1564,1563;, + 3;1310,1564,1308;, + 3;1310,1565,1564;, + 3;1313,1565,1310;, + 3;1313,1566,1565;, + 3;1315,1566,1313;, + 3;1315,1567,1566;, + 3;1315,1568,1567;, + 3;1316,1568,1315;, + 3;1569,1568,1316;, + 3;1317,1569,1316;, + 3;1317,1570,1569;, + 3;1318,1570,1317;, + 3;1318,1329,1570;, + 3;1329,1330,1570;, + 3;1570,1330,1571;, + 3;1570,1571,1569;, + 3;1569,1571,1568;, + 3;1571,1572,1568;, + 3;1571,1573,1572;, + 3;1330,1573,1571;, + 3;1330,1331,1573;, + 3;1331,1336,1573;, + 3;1573,1336,1572;, + 3;1572,1336,1539;, + 3;1568,1572,1539;, + 3;1567,1568,1539;, + 3;1539,1540,1567;, + 3;1567,1540,1566;, + 3;1540,1541,1566;, + 3;1566,1541,1574;, + 3;1566,1574,1565;, + 3;1565,1574,1575;, + 3;1565,1575,1564;, + 3;1564,1575,1576;, + 3;1575,1577,1576;, + 3;1574,1577,1575;, + 3;1574,1578,1577;, + 3;1541,1578,1574;, + 3;1541,1542,1578;, + 3;1542,1543,1578;, + 3;1578,1543,1544;, + 3;1578,1544,1577;, + 3;1577,1544,1579;, + 3;1577,1579,1576;, + 3;1576,1579,1580;, + 3;1576,1580,1581;, + 3;1564,1576,1581;, + 3;1563,1564,1581;, + 3;1563,1581,1582;, + 3;1582,1581,1583;, + 3;1581,1580,1583;, + 3;1580,1584,1583;, + 3;1580,1585,1584;, + 3;1580,1586,1585;, + 3;1579,1586,1580;, + 3;1587,1586,1579;, + 3;1544,1587,1579;, + 3;1544,1545,1587;, + 3;1587,1545,1588;, + 3;1545,1589,1588;, + 3;1546,1589,1545;, + 3;1546,1547,1589;, + 3;1547,1548,1589;, + 3;1548,1590,1589;, + 3;1549,1590,1548;, + 3;1549,1591,1590;, + 3;1550,1591,1549;, + 3;1550,1592,1591;, + 3;1551,1592,1550;, + 3;1551,1552,1592;, + 3;1552,1593,1592;, + 3;1593,1594,1592;, + 3;1592,1594,1591;, + 3;1591,1594,1590;, + 3;1590,1594,1595;, + 3;1589,1590,1595;, + 3;1589,1595,1588;, + 3;1588,1595,1596;, + 3;1588,1596,1597;, + 3;1587,1588,1597;, + 3;1587,1597,1586;, + 3;1597,1598,1586;, + 3;1597,1596,1598;, + 3;1596,1599,1598;, + 3;1596,1600,1599;, + 3;1596,1601,1600;, + 3;1596,1595,1601;, + 3;1595,1602,1601;, + 3;1594,1602,1595;, + 3;1594,1603,1602;, + 3;1604,1603,1594;, + 3;1593,1604,1594;, + 3;1593,1605,1604;, + 3;1593,1606,1605;, + 3;1552,1606,1593;, + 3;1607,1606,1552;, + 3;1554,1607,1552;, + 3;1554,1552,1553;, + 3;1555,1607,1554;, + 3;1555,1608,1607;, + 3;1558,1608,1555;, + 3;1556,1558,1555;, + 3;1558,1559,1608;, + 3;1559,1609,1608;, + 3;1608,1609,1607;, + 3;1607,1609,1606;, + 3;1609,1610,1606;, + 3;1606,1610,1605;, + 3;1610,1611,1605;, + 3;1605,1611,1612;, + 3;1604,1605,1612;, + 3;1604,1612,1603;, + 3;1603,1612,1613;, + 3;1603,1613,1614;, + 3;1603,1614,1602;, + 3;1614,1615,1602;, + 3;1602,1615,1601;, + 3;1601,1615,1616;, + 3;1601,1616,1617;, + 3;1601,1617,1600;, + 3;1600,1617,1618;, + 3;1600,1618,1599;, + 3;1599,1618,1619;, + 3;1618,1620,1619;, + 3;1618,1617,1620;, + 3;1617,1621,1620;, + 3;1616,1621,1617;, + 3;1615,1621,1616;, + 3;1615,1622,1621;, + 3;1623,1622,1615;, + 3;1614,1623,1615;, + 3;1614,1613,1623;, + 3;1613,1624,1623;, + 3;1623,1624,1622;, + 3;1624,1625,1622;, + 3;1625,1626,1622;, + 3;1622,1626,1621;, + 3;1621,1626,1627;, + 3;1628,1621,1627;, + 3;1620,1621,1628;, + 3;1619,1620,1628;, + 3;1619,1628,1629;, + 3;1628,1630,1629;, + 3;1628,1627,1630;, + 3;1627,1631,1630;, + 3;1626,1631,1627;, + 3;1626,1632,1631;, + 3;1625,1632,1626;, + 3;1625,1633,1632;, + 3;1624,1633,1625;, + 3;1634,1633,1624;, + 3;1635,1633,1634;, + 3;1635,1636,1633;, + 3;1636,1637,1633;, + 3;1633,1637,1632;, + 3;1637,1638,1632;, + 3;1632,1638,1631;, + 3;1638,1639,1631;, + 3;1639,1630,1631;, + 3;1640,1630,1639;, + 3;1641,1630,1640;, + 3;1629,1630,1641;, + 3;1642,1629,1641;, + 3;1642,1641,1643;, + 3;1643,1641,1640;, + 3;1643,1640,1639;, + 3;1644,1643,1639;, + 3;1644,1639,1645;, + 3;1645,1639,1638;, + 3;1645,1638,1637;, + 3;1636,1645,1637;, + 3;1646,1645,1636;, + 3;1646,1647,1645;, + 3;1647,1644,1645;, + 3;1647,1648,1644;, + 3;1649,1644,1648;, + 3;1649,1643,1644;, + 3;1650,1643,1649;, + 3;1650,1642,1643;, + 3;1651,1642,1650;, + 3;1651,1652,1642;, + 3;1653,1652,1651;, + 3;1653,1651,1650;, + 3;1653,1650,1654;, + 3;1654,1650,1649;, + 3;1654,1649,1655;, + 3;1655,1649,1648;, + 3;1655,1648,1561;, + 3;1562,1655,1561;, + 3;1563,1655,1562;, + 3;1563,1582,1655;, + 3;1582,1654,1655;, + 3;1582,1583,1654;, + 3;1583,1653,1654;, + 3;1583,1652,1653;, + 3;1583,1584,1652;, + 3;1584,1656,1652;, + 3;1584,1657,1656;, + 3;1584,1585,1657;, + 3;1585,1658,1657;, + 3;1598,1658,1585;, + 3;1586,1598,1585;, + 3;1181,1182,1180;, + 3;1180,1182,1659;, + 3;1659,1182,1183;, + 3;1659,1183,1660;, + 3;1183,1187,1660;, + 3;1661,1660,1187;, + 3;1662,1660,1661;, + 3;1659,1660,1662;, + 3;1180,1659,1662;, + 3;1180,1662,1179;, + 3;1178,1179,1662;, + 3;1178,1662,1663;, + 3;1663,1662,1661;, + 3;1663,1661,1146;, + 3;1148,1663,1146;, + 3;1148,1178,1663;, + 3;1664,1178,1148;, + 3;1177,1178,1664;, + 3;1153,1177,1664;, + 3;1150,1153,1664;, + 3;1150,1664,1665;, + 3;1149,1150,1665;, + 3;1665,1664,1149;, + 3;1149,1664,1148;, + 3;1082,1146,1666;, + 3;1146,1661,1666;, + 3;1666,1661,1286;, + 3;1666,1286,1287;, + 3;1667,1666,1287;, + 3;1537,1666,1667;, + 3;1668,1666,1537;, + 3;1537,1667,1669;, + 3;1537,1669,1536;, + 3;1536,1669,1670;, + 3;1535,1536,1670;, + 3;1671,1535,1670;, + 3;1534,1535,1671;, + 3;1534,1671,1672;, + 3;1672,1671,1670;, + 3;1672,1670,1673;, + 3;1670,1674,1673;, + 3;1670,1669,1674;, + 3;1669,1675,1674;, + 3;1667,1675,1669;, + 3;1675,1667,1676;, + 3;1667,1287,1676;, + 3;1676,1287,1288;, + 3;1676,1288,1677;, + 3;1677,1288,1678;, + 3;1288,1289,1678;, + 3;1289,1557,1678;, + 3;1557,1679,1678;, + 3;1679,1557,1385;, + 3;1679,1385,967;, + 3;968,1679,967;, + 3;1680,1679,968;, + 3;1678,1679,1680;, + 3;1681,1678,1680;, + 3;1677,1678,1681;, + 3;1682,1677,1681;, + 3;1676,1677,1682;, + 3;980,1676,1682;, + 3;1675,1676,980;, + 3;1675,980,981;, + 3;1674,1675,981;, + 3;1674,981,982;, + 3;1673,1674,982;, + 3;1673,982,983;, + 3;1673,983,1683;, + 3;1683,983,1684;, + 3;1684,983,984;, + 3;1684,984,1685;, + 3;1685,984,985;, + 3;986,1685,985;, + 3;986,1686,1685;, + 3;1686,1684,1685;, + 3;1687,1684,1686;, + 3;1687,1683,1684;, + 3;1687,1688,1683;, + 3;1683,1688,1673;, + 3;1688,1672,1673;, + 3;1533,1672,1688;, + 3;1533,1534,1672;, + 3;980,1682,979;, + 3;979,1682,978;, + 3;1682,1681,978;, + 3;978,1681,1689;, + 3;1681,1680,1689;, + 3;1689,1680,968;, + 3;969,1689,968;, + 3;978,1689,969;, + 3;1690,1533,1688;, + 3;1532,1533,1690;, + 3;1691,1532,1690;, + 3;1458,1532,1691;, + 3;994,1458,1691;, + 3;994,1691,988;, + 3;988,1691,1692;, + 3;1691,1690,1692;, + 3;1692,1690,1687;, + 3;1690,1688,1687;, + 3;988,1692,987;, + 3;1692,1693,987;, + 3;1692,1687,1693;, + 3;1693,1687,1686;, + 3;1693,1686,986;, + 3;987,1693,986;, + 3;1661,1694,1286;, + 3;1661,1187,1694;, + 3;1694,1187,1188;, + 3;1694,1188,1695;, + 3;1286,1694,1695;, + 3;1286,1695,1275;, + 3;1695,1696,1275;, + 3;1695,1188,1696;, + 3;1188,1697,1696;, + 3;1188,1189,1697;, + 3;1697,1189,1275;, + 3;1696,1697,1275;, + 3;1598,1698,1658;, + 3;1598,1599,1698;, + 3;1599,1619,1698;, + 3;1698,1619,1658;, + 3;1658,1619,1699;, + 3;1699,1619,1629;, + 3;1700,1699,1629;, + 3;1700,1629,1642;, + 3;1652,1700,1642;, + 3;1656,1700,1652;, + 3;1656,1657,1700;, + 3;1657,1699,1700;, + 3;1657,1658,1699;, + 3;1701,1561,1648;, + 3;1560,1561,1701;, + 3;1560,1701,1702;, + 3;1560,1702,1703;, + 3;1560,1703,1559;, + 3;1559,1703,1609;, + 3;1609,1703,1610;, + 3;1703,1704,1610;, + 3;1702,1704,1703;, + 3;1702,1705,1704;, + 3;1702,1701,1705;, + 3;1705,1701,1647;, + 3;1701,1648,1647;, + 3;1705,1647,1646;, + 3;1706,1705,1646;, + 3;1704,1705,1706;, + 3;1704,1706,1707;, + 3;1706,1708,1707;, + 3;1706,1646,1708;, + 3;1708,1646,1636;, + 3;1708,1636,1707;, + 3;1707,1636,1635;, + 3;1709,1707,1635;, + 3;1710,1707,1709;, + 3;1704,1707,1710;, + 3;1610,1704,1710;, + 3;1610,1710,1611;, + 3;1710,1711,1611;, + 3;1710,1709,1711;, + 3;1709,1635,1711;, + 3;1711,1635,1634;, + 3;1711,1634,1712;, + 3;1611,1711,1712;, + 3;1612,1611,1712;, + 3;1612,1712,1713;, + 3;1612,1713,1613;, + 3;1613,1713,1624;, + 3;1713,1712,1624;, + 3;1712,1634,1624;, + 3;1714,1715,1716;, + 3;1717,1715,1714;, + 3;1718,1717,1714;, + 3;1719,1717,1718;, + 3;1720,1717,1719;, + 3;1721,1717,1720;, + 3;1721,1722,1717;, + 3;1717,1722,1715;, + 3;1722,1723,1715;, + 3;1722,1724,1723;, + 3;1724,1725,1723;, + 3;1724,1726,1725;, + 3;1726,1727,1725;, + 3;1726,1728,1727;, + 3;1728,1729,1727;, + 3;1730,1722,1721;, + 3;1730,1731,1722;, + 3;1732,1731,1730;, + 3;1732,1733,1731;, + 3;1734,1733,1732;, + 3;1734,1735,1733;, + 3;1736,1735,1734;, + 3;1735,1728,1733;, + 3;1733,1728,1726;, + 3;1733,1726,1724;, + 3;1731,1733,1724;, + 3;1731,1724,1722;, + 3;1737,1738,1739;, + 3;1738,1740,1739;, + 3;1738,1741,1740;, + 3;1741,1742,1740;, + 3;1741,1743,1742;, + 3;1743,1744,1742;, + 3;1743,1745,1744;, + 3;1745,1746,1744;, + 3;1744,1746,1747;, + 3;1747,1748,1744;, + 3;1744,1748,1749;, + 3;1744,1749,1742;, + 3;1742,1749,1750;, + 3;1742,1750,1751;, + 3;1740,1742,1751;, + 3;1739,1740,1751;, + 3;1739,1751,1752;, + 3;1751,1753,1752;, + 3;1751,1750,1753;, + 3;1752,1753,1754;; + + MeshNormals { + 1755; + 0.977671;-0.109455;-0.179385;, + 0.978584;-0.070695;0.193330;, + 0.987811;0.152987;0.028705;, + 0.932823;0.276500;0.231062;, + 0.872628;0.481190;-0.083529;, + -0.650679;-0.574868;0.496128;, + -0.650679;-0.574868;0.496128;, + -0.650679;-0.574868;0.496128;, + -0.162752;0.935851;0.312563;, + -0.162752;0.935851;0.312563;, + -0.162752;0.935851;0.312563;, + 0.621258;-0.778630;0.088172;, + 0.741286;-0.657948;0.132662;, + 0.644263;-0.762201;-0.063042;, + -0.058291;0.391669;-0.918258;, + 0.005878;0.001969;-0.999981;, + -0.102645;0.376995;-0.920510;, + -0.069841;0.699101;-0.711604;, + -0.013926;0.704928;-0.709142;, + -0.011607;0.398223;-0.917215;, + 0.005878;0.001969;-0.999981;, + 0.005878;0.001969;-0.999981;, + -0.145485;0.357360;-0.922566;, + -0.125182;0.684041;-0.718622;, + -0.093277;0.587067;-0.804146;, + 0.036937;-0.482863;-0.874916;, + -0.010354;0.604790;-0.796317;, + 0.042102;0.704092;-0.708859;, + -0.025796;-0.497372;-0.867154;, + 0.097714;0.694119;-0.713198;, + 0.072821;0.596076;-0.799619;, + 0.153349;0.677120;-0.719717;, + -0.094740;-0.480108;-0.872079;, + 0.209031;0.649780;-0.730816;, + 0.156722;0.559207;-0.814080;, + 0.263758;0.614425;-0.743582;, + -0.152391;-0.429669;-0.890035;, + 0.322115;0.562015;-0.761828;, + 0.318232;0.632983;-0.705734;, + 0.376788;0.499987;-0.779772;, + 0.490823;0.740333;-0.459347;, + 0.425391;0.420543;-0.801365;, + 0.569701;0.637176;-0.519083;, + 0.475014;0.309947;-0.823587;, + 0.653771;0.480762;-0.584339;, + 0.506562;0.197029;-0.839389;, + 0.710483;0.310597;-0.631461;, + 0.522751;0.090044;-0.847717;, + 0.740168;0.143125;-0.657014;, + 0.525810;-0.017208;-0.850428;, + 0.746548;-0.027401;-0.664767;, + 0.518964;-0.113972;-0.847164;, + 0.733136;-0.180847;-0.655596;, + 0.503046;-0.202505;-0.840200;, + 0.704434;-0.318935;-0.634077;, + 0.473974;-0.301793;-0.827206;, + 0.652787;-0.468691;-0.595145;, + 0.432852;-0.396973;-0.809352;, + 0.582705;-0.604751;-0.542891;, + 0.377430;-0.487112;-0.787571;, + 0.494190;-0.724761;-0.480102;, + 0.317170;-0.560299;-0.765159;, + 0.403477;-0.813785;-0.418282;, + 0.262623;-0.609772;-0.747802;, + 0.326800;-0.869252;-0.370948;, + 0.208278;-0.646620;-0.733828;, + 0.254545;-0.907802;-0.333319;, + 0.153244;-0.673984;-0.722677;, + 0.184611;-0.934728;-0.303648;, + 0.095971;-0.692988;-0.714533;, + 0.114420;-0.952549;-0.282063;, + 0.025613;-0.703942;-0.709796;, + 0.030366;-0.962658;-0.269012;, + -0.054630;-0.702058;-0.710021;, + -0.064851;-0.960798;-0.269558;, + -0.123984;-0.687357;-0.715660;, + -0.148305;-0.947060;-0.284752;, + -0.181624;-0.664584;-0.724804;, + -0.219948;-0.925292;-0.308963;, + -0.236887;-0.633240;-0.736812;, + -0.291549;-0.893725;-0.340961;, + -0.291288;-0.591676;-0.751712;, + -0.365659;-0.849085;-0.381245;, + -0.344057;-0.538753;-0.769006;, + -0.441772;-0.788018;-0.428794;, + -0.392966;-0.474779;-0.787504;, + -0.516649;-0.708504;-0.480725;, + -0.434567;-0.403240;-0.805325;, + -0.584088;-0.613177;-0.531841;, + -0.466867;-0.330636;-0.820192;, + -0.638951;-0.510596;-0.575355;, + -0.494361;-0.246894;-0.833457;, + -0.687999;-0.386675;-0.614117;, + -0.516476;-0.140199;-0.844746;, + -0.528430;-0.161089;-0.833554;, + -0.524918;-0.066052;-0.848586;, + -0.537727;-0.075971;-0.839689;, + -0.524702;0.025387;-0.850907;, + -0.537622;0.029166;-0.842681;, + -0.513226;0.150483;-0.844958;, + -0.723020;0.238214;-0.648457;, + -0.489858;0.252826;-0.834337;, + -0.680921;0.395700;-0.616253;, + -0.453962;0.358378;-0.815772;, + -0.617704;0.550754;-0.561348;, + -0.539328;0.675315;-0.503066;, + -0.406768;0.449274;-0.795420;, + -0.344907;0.529102;-0.775300;, + -0.341228;0.596156;-0.726748;, + -0.288877;0.588194;-0.755366;, + 0.176669;-0.410006;-0.894809;, + -0.235223;0.629107;-0.740875;, + -0.176329;0.540836;-0.822438;, + -0.180308;0.661903;-0.727581;, + 0.106834;-0.449816;-0.886708;, + -0.184714;0.330637;-0.925505;, + 0.005878;0.001969;-0.999981;, + -0.221241;0.299820;-0.927987;, + 0.005878;0.001969;-0.999981;, + -0.255173;0.260642;-0.931103;, + 0.005878;0.001969;-0.999981;, + -0.288998;0.211167;-0.933750;, + 0.005878;0.001969;-0.999981;, + -0.311990;0.162306;-0.936119;, + 0.005878;0.001969;-0.999981;, + -0.328722;0.111469;-0.937825;, + 0.005878;0.001969;-0.999981;, + -0.338494;0.065003;-0.938721;, + 0.005878;0.001969;-0.999981;, + -0.343010;0.010893;-0.939269;, + 0.005878;0.001969;-0.999981;, + -0.343668;-0.028201;-0.938668;, + 0.005878;0.001969;-0.999981;, + -0.340130;-0.060517;-0.938429;, + 0.005878;0.001969;-0.999981;, + -0.331294;-0.108558;-0.937262;, + 0.005878;0.001969;-0.999981;, + -0.319713;-0.148728;-0.935769;, + 0.005878;0.001969;-0.999981;, + -0.304957;-0.186503;-0.933926;, + 0.005878;0.001969;-0.999981;, + -0.284204;-0.227139;-0.931470;, + 0.005878;0.001969;-0.999981;, + -0.257261;-0.267457;-0.928592;, + 0.005878;0.001969;-0.999981;, + -0.225193;-0.304698;-0.925444;, + 0.005878;0.001969;-0.999981;, + -0.188873;-0.337322;-0.922248;, + 0.005878;0.001969;-0.999981;, + -0.148784;-0.364639;-0.919185;, + 0.005878;0.001969;-0.999981;, + -0.103873;-0.386686;-0.916343;, + 0.005878;0.001969;-0.999981;, + -0.046494;-0.403383;-0.913849;, + 0.005878;0.001969;-0.999981;, + 0.022229;-0.409128;-0.912206;, + 0.005878;0.001969;-0.999981;, + 0.082982;-0.402060;-0.911845;, + 0.005878;0.001969;-0.999981;, + 0.131348;-0.387048;-0.912656;, + 0.005878;0.001969;-0.999981;, + 0.175951;-0.365303;-0.914109;, + 0.005878;0.001969;-0.999981;, + 0.217504;-0.336879;-0.916081;, + 0.005878;0.001969;-0.999981;, + 0.256336;-0.301234;-0.918450;, + 0.005878;0.001969;-0.999981;, + 0.294839;-0.252654;-0.921540;, + 0.005878;0.001969;-0.999981;, + 0.326485;-0.197700;-0.924296;, + 0.005878;0.001969;-0.999981;, + 0.347178;-0.145422;-0.926455;, + 0.005878;0.001969;-0.999981;, + 0.360400;-0.095147;-0.927933;, + 0.005878;0.001969;-0.999981;, + 0.366996;-0.052697;-0.928729;, + 0.005878;0.001969;-0.999981;, + 0.369521;-0.007930;-0.929189;, + 0.367752;0.041403;-0.929002;, + 0.005878;0.001969;-0.999981;, + 0.359464;0.091664;-0.928646;, + 0.005878;0.001969;-0.999981;, + 0.343577;0.147475;-0.927473;, + 0.005878;0.001969;-0.999981;, + 0.317136;0.207429;-0.925418;, + 0.005878;0.001969;-0.999981;, + 0.289242;0.253732;-0.923016;, + 0.005878;0.001969;-0.999981;, + 0.253068;0.294092;-0.921665;, + 0.005878;0.001969;-0.999981;, + 0.213089;0.330640;-0.919386;, + 0.005878;0.001969;-0.999981;, + 0.171681;0.357156;-0.918131;, + 0.005878;0.001969;-0.999981;, + 0.128112;0.378626;-0.916640;, + 0.005878;0.001969;-0.999981;, + 0.082156;0.391719;-0.916410;, + 0.005878;0.001969;-0.999981;, + 0.035608;0.399312;-0.916123;, + 0.005878;0.001969;-0.999981;, + 0.005878;0.001969;-0.999981;, + 0.958437;0.284093;-0.026276;, + 0.868507;0.479636;0.125080;, + 0.752162;0.635295;0.175082;, + 0.703253;0.701674;0.114404;, + 0.661980;0.711328;-0.236212;, + 0.588439;0.806330;0.059766;, + 0.434431;0.820494;-0.371564;, + 0.489782;0.871822;0.006273;, + 0.383261;0.923591;0.009505;, + 0.256137;0.909942;-0.326190;, + 0.310520;0.950553;0.005133;, + 0.220334;0.975392;0.007991;, + 0.132313;0.952283;-0.275046;, + 0.154942;0.987915;0.003996;, + 0.061367;0.998115;-0.000747;, + -0.024469;0.955341;-0.294492;, + -0.031699;0.999473;-0.007009;, + -0.109174;0.994022;-0.000553;, + -0.168073;0.921756;-0.349453;, + -0.194003;0.980989;-0.004897;, + -0.265677;0.963164;0.041593;, + -0.394526;0.899113;-0.189591;, + -0.352037;0.935700;0.023138;, + -0.437336;0.897835;0.051274;, + -0.564738;0.820570;0.087953;, + -0.626528;0.752925;-0.201410;, + -0.704109;0.701298;0.111407;, + -0.853585;0.501508;-0.141004;, + -0.801175;0.581015;0.143318;, + -0.907511;0.394448;0.144344;, + -0.958458;0.252476;0.132718;, + -0.969337;0.149765;-0.194822;, + -0.991597;-0.000366;0.129367;, + -0.983721;-0.176512;-0.033718;, + -0.818042;-0.029530;-0.574400;, + -0.725973;0.314161;-0.611773;, + -0.567633;0.577185;-0.587069;, + -0.408207;0.742132;-0.531608;, + -0.255479;0.801700;-0.540377;, + -0.114940;0.661762;-0.740850;, + -0.212798;0.607355;-0.765400;, + -0.302231;0.509627;-0.805566;, + -0.401146;0.370896;-0.837566;, + -0.476555;0.182180;-0.860062;, + -0.478534;-0.068276;-0.875410;, + -0.694309;-0.306642;-0.651081;, + -0.895377;-0.372146;-0.244556;, + -0.909253;-0.408749;0.078636;, + -0.764203;-0.614612;-0.195564;, + -0.806496;-0.589930;0.039327;, + -0.684992;-0.722632;0.092675;, + -0.565382;-0.822757;-0.058426;, + -0.518251;-0.668792;-0.533041;, + -0.389973;-0.845703;-0.364289;, + -0.466388;-0.879317;-0.096351;, + -0.152391;-0.429669;-0.890035;, + -0.262321;-0.933348;-0.245048;, + -0.254706;-0.915071;-0.312682;, + -0.121881;-0.953042;-0.277230;, + -0.114308;-0.942057;-0.315377;, + 0.012298;-0.961435;-0.274756;, + 0.016582;-0.948480;-0.316404;, + 0.139479;-0.935192;-0.325519;, + 0.148753;-0.933849;-0.325267;, + 0.281541;-0.888836;-0.361533;, + 0.294399;-0.899898;-0.321735;, + 0.445186;-0.801139;-0.399982;, + 0.527503;-0.846382;-0.073337;, + 0.644263;-0.762201;-0.063042;, + 0.612694;-0.543807;-0.573481;, + 0.857073;-0.491013;-0.155986;, + 0.741286;-0.657948;0.132662;, + 0.865187;-0.500758;0.026331;, + 0.948407;-0.311754;0.057727;, + 0.997181;-0.072038;0.021008;, + -0.594207;-0.483271;-0.642936;, + -0.354701;-0.442826;-0.823463;, + -0.414553;-0.285447;-0.864098;, + -0.232738;-0.112913;-0.965963;, + -0.261121;0.048045;-0.964110;, + -0.237210;0.247276;-0.939461;, + -0.134733;0.388308;-0.911627;, + -0.021068;0.414838;-0.909652;, + -0.053198;0.195284;-0.979303;, + 0.004584;0.166908;-0.985962;, + 0.094050;0.407941;-0.908151;, + 0.036795;0.728312;-0.684257;, + 0.171940;0.646766;-0.743055;, + 0.267450;0.565222;-0.780381;, + 0.491879;0.636378;-0.594204;, + 0.647458;0.429738;-0.629383;, + 0.860249;0.164485;-0.482614;, + 0.962093;0.149004;-0.228416;, + 0.697358;-0.157784;-0.699140;, + 0.402754;-0.299058;-0.865074;, + 0.310698;-0.508441;-0.803091;, + 0.217770;-0.621202;-0.752785;, + 0.118463;-0.674920;-0.728319;, + 0.036010;-0.745119;-0.665959;, + -0.061513;-0.742232;-0.667314;, + -0.186276;-0.727463;-0.660378;, + -0.265208;-0.567880;-0.779215;, + -0.192403;-0.284593;-0.939142;, + -0.090786;-0.113769;-0.989351;, + -0.076443;-0.013093;-0.996988;, + -0.093060;0.101210;-0.990503;, + 0.003335;-0.003890;-0.999987;, + 0.029403;0.014337;-0.999465;, + -0.000186;-0.014604;-0.999893;, + 0.035365;0.055207;-0.997848;, + 0.044775;0.041812;-0.998122;, + 0.050347;0.006710;-0.998709;, + 0.049738;-0.016404;-0.998628;, + 0.039958;-0.055825;-0.997641;, + 0.046332;-0.038004;-0.998203;, + 0.084122;-0.027988;-0.996062;, + 0.084556;0.020323;-0.996211;, + 0.078620;0.062292;-0.994957;, + 0.154813;0.075358;-0.985066;, + 0.161668;-0.001255;-0.986844;, + 0.157737;-0.072728;-0.984799;, + 0.111291;-0.106364;-0.988079;, + 0.079612;-0.149853;-0.985498;, + 0.033087;-0.075173;-0.996621;, + 0.011882;-0.087837;-0.996064;, + 0.031822;0.041406;-0.998636;, + 0.102623;0.217736;-0.970598;, + 0.194242;0.276217;-0.941262;, + 0.352153;0.434808;-0.828812;, + 0.385649;0.277733;-0.879852;, + 0.249673;0.103039;-0.962833;, + 0.113196;0.113325;-0.987089;, + -0.003995;0.004069;-0.999984;, + -0.033708;-0.044931;-0.998421;, + -0.017795;-0.090793;-0.995711;, + -0.007050;-0.096563;-0.995302;, + 0.014058;-0.091707;-0.995687;, + 0.037091;-0.132924;-0.990432;, + 0.083667;-0.259862;-0.962014;, + 0.089558;-0.203688;-0.974931;, + 0.116650;-0.160534;-0.980113;, + 0.192852;-0.138135;-0.971456;, + 0.235726;-0.054143;-0.970310;, + 0.416048;-0.000122;-0.909343;, + 0.213636;0.055574;-0.975331;, + -0.090790;0.034708;-0.995265;, + -0.144253;0.105830;-0.983865;, + 0.047359;-0.036089;-0.998226;, + -0.008187;0.022037;-0.999724;, + 0.059294;-0.251954;-0.965921;, + 0.043955;-0.260541;-0.964462;, + 0.025501;-0.268244;-0.963013;, + 0.010005;-0.290976;-0.956678;, + -0.011885;-0.302200;-0.953171;, + -0.018573;-0.194114;-0.980803;, + -0.043622;-0.279604;-0.959124;, + -0.051642;-0.238653;-0.969731;, + -0.084393;-0.264662;-0.960641;, + -0.076990;-0.230398;-0.970046;, + -0.112177;-0.223106;-0.968318;, + -0.108911;-0.197300;-0.974275;, + -0.126180;-0.142911;-0.981659;, + -0.119202;-0.113731;-0.986335;, + -0.148636;-0.054101;-0.987411;, + -0.119488;-0.058441;-0.991114;, + -0.190620;0.005706;-0.981647;, + -0.150828;0.057439;-0.986890;, + -0.141339;0.049172;-0.988739;, + -0.121489;0.118591;-0.985483;, + -0.104605;0.108923;-0.988531;, + -0.115756;0.214963;-0.969738;, + -0.078081;0.149240;-0.985713;, + -0.092190;0.254676;-0.962622;, + -0.060783;0.203794;-0.977125;, + -0.035470;0.216604;-0.975615;, + -0.025315;0.193439;-0.980786;, + -0.013980;0.261567;-0.965084;, + -0.002050;0.277188;-0.960813;, + 0.021162;0.262942;-0.964580;, + 0.021650;0.275358;-0.961098;, + 0.047029;0.246751;-0.967937;, + 0.059469;0.248776;-0.966734;, + 0.087738;0.256360;-0.962591;, + 0.091902;0.207770;-0.973851;, + 0.114399;0.215055;-0.969878;, + 0.121415;0.168510;-0.978194;, + 0.133215;0.135276;-0.981812;, + 0.200531;0.153235;-0.967629;, + -0.068155;-0.065335;-0.995533;, + -0.147511;-0.045446;-0.988016;, + 0.009991;-0.139041;-0.990236;, + 0.125881;0.136844;-0.982562;, + 0.051239;0.115897;-0.991939;, + 0.011162;0.126523;-0.991901;, + -0.006507;0.095707;-0.995388;, + -0.030192;0.077736;-0.996517;, + -0.044902;0.042159;-0.998101;, + -0.068139;0.014212;-0.997575;, + -0.065349;-0.042844;-0.996942;, + -0.051186;-0.115862;-0.991946;, + -0.030933;-0.078984;-0.996396;, + -0.047415;-0.037701;-0.998164;, + -0.049301;0.004398;-0.998774;, + -0.048785;0.002251;-0.998807;, + -0.035726;0.046571;-0.998276;, + -0.014111;0.077972;-0.996856;, + 0.014459;0.083789;-0.996379;, + 0.015356;0.094852;-0.995373;, + 0.031724;0.080063;-0.996285;, + 0.003882;0.000705;-0.999992;, + -0.006165;0.008625;-0.999944;, + 0.061018;-0.096581;-0.993453;, + 0.009093;-0.184698;-0.982753;, + -0.046790;-0.169229;-0.984465;, + -0.099190;-0.425826;-0.899352;, + 0.017297;-0.481457;-0.876299;, + 0.124989;-0.390047;-0.912272;, + 0.226240;-0.226538;-0.947363;, + 0.340453;-0.060937;-0.938285;, + 0.518225;0.126694;-0.845808;, + 0.156314;-0.037339;-0.987001;, + 0.044052;-0.010896;-0.998970;, + -0.509811;0.845072;0.161079;, + -0.337400;0.931144;0.138320;, + -0.402704;0.901490;0.158572;, + -0.347667;0.928990;0.126909;, + -0.541321;0.818877;0.190820;, + -0.585073;0.786792;0.196593;, + -0.509912;0.828951;0.229846;, + -0.549497;0.810173;0.204139;, + 0.517498;0.839240;0.166949;, + 0.402704;0.901490;0.158572;, + 0.341298;0.930209;0.135007;, + 0.504213;0.843662;0.184401;, + 0.584106;0.787523;0.196539;, + 0.512249;0.827812;0.228755;, + 0.549496;0.810173;0.204139;, + 0.374657;0.895135;0.241590;, + 0.387049;0.879717;0.276208;, + 0.474726;0.846872;0.239674;, + 0.350785;0.900861;0.255733;, + 0.199641;0.942495;0.268041;, + 0.100128;0.963070;0.249942;, + 0.123700;0.978610;0.164378;, + 0.173633;0.978019;0.115460;, + 0.211151;0.970150;0.119262;, + 0.265335;0.954758;0.134291;, + 0.254657;0.956689;0.141050;, + 0.228230;0.962057;0.149527;, + 0.175731;0.971613;0.158389;, + 0.008655;0.990628;0.136311;, + 0.112112;0.978803;0.171395;, + 0.000023;0.985519;0.169568;, + -0.110554;0.978838;0.172206;, + -0.188087;0.969891;0.154707;, + -0.189949;0.974730;0.117558;, + -0.228654;0.963831;0.136923;, + -0.240707;0.960898;0.136879;, + -0.264768;0.954494;0.137252;, + -0.166855;0.975123;0.145926;, + -0.316528;0.918553;0.236791;, + -0.337273;0.899729;0.277010;, + -0.474726;0.846872;0.239674;, + -0.349873;0.900997;0.256500;, + -0.198634;0.942954;0.267175;, + -0.065877;0.956594;0.283882;, + -0.089951;0.961754;0.258722;, + -0.013683;0.966485;0.256357;, + 0.054384;0.962474;0.265870;, + -0.016671;0.993399;0.113491;, + -0.042428;0.983811;0.174112;, + -0.088793;0.967562;0.236516;, + 0.202050;-0.125341;0.971322;, + 0.202050;-0.125341;0.971322;, + 0.158760;-0.141225;0.977165;, + -0.207906;-0.054612;-0.976623;, + -0.222330;-0.016703;-0.974828;, + 0.140604;0.039220;-0.989289;, + 0.527503;-0.846382;-0.073337;, + 0.621258;-0.778630;0.088172;, + 0.644263;-0.762201;-0.063042;, + 0.115127;-0.156803;0.980897;, + 0.115127;-0.156803;0.980897;, + -0.008681;-0.030196;-0.999506;, + -0.152391;-0.429669;-0.890035;, + -0.029350;-0.056201;-0.997988;, + -0.002841;-0.022708;-0.999738;, + -0.094740;-0.480108;-0.872079;, + 0.000381;-0.021104;-0.999777;, + -0.025796;-0.497372;-0.867154;, + 0.010596;-0.031611;-0.999444;, + 0.255811;-0.381134;-0.888424;, + 0.176669;-0.410006;-0.894809;, + 0.003607;-0.022014;-0.999751;, + 0.036937;-0.482863;-0.874916;, + 0.106834;-0.449816;-0.886708;, + -0.467266;-0.880973;0.074486;, + -0.565382;-0.822757;-0.058426;, + -0.631929;-0.741397;0.225824;, + -0.684992;-0.722632;0.092675;, + -0.821284;-0.514225;0.247112;, + -0.806496;-0.589930;0.039327;, + -0.909253;-0.408749;0.078636;, + -0.947761;-0.194361;0.252930;, + -0.983721;-0.176512;-0.033718;, + -0.991597;-0.000366;0.129367;, + -0.924521;0.133790;0.356877;, + -0.958458;0.252476;0.132718;, + -0.907511;0.394448;0.144344;, + -0.810854;0.436143;0.390250;, + -0.801175;0.581015;0.143318;, + -0.653423;0.670743;0.350917;, + -0.704109;0.701298;0.111407;, + -0.564738;0.820570;0.087953;, + -0.475330;0.834059;0.280012;, + -0.437336;0.897835;0.051274;, + -0.307469;0.902897;0.300401;, + -0.352037;0.935700;0.023138;, + -0.265677;0.963164;0.041593;, + -0.152738;0.960640;0.232039;, + -0.194003;0.980989;-0.004897;, + -0.109174;0.994022;-0.000553;, + -0.020817;0.978665;0.204405;, + -0.031699;0.999473;-0.007009;, + 0.061367;0.998115;-0.000747;, + 0.121605;0.956492;0.265209;, + 0.154942;0.987915;0.003996;, + 0.220334;0.975392;0.007991;, + 0.281409;0.919381;0.274859;, + 0.310520;0.950553;0.005133;, + 0.383261;0.923591;0.009505;, + 0.481306;0.839348;0.252665;, + 0.489782;0.871822;0.006273;, + 0.588439;0.806330;0.059766;, + 0.639357;0.755706;0.141882;, + 0.703253;0.701674;0.114404;, + 0.752162;0.635295;0.175082;, + 0.716573;0.601054;0.353917;, + 0.514456;0.693355;0.504573;, + 0.361015;0.806257;0.468634;, + 0.205417;0.881610;0.424932;, + 0.074453;0.909604;0.408752;, + -0.016690;0.932335;0.361210;, + -0.135207;0.911722;0.387921;, + -0.221086;0.881891;0.416401;, + -0.141021;0.891360;0.430802;, + -0.034521;0.909191;0.414947;, + 0.029516;0.929420;0.367841;, + 0.147328;0.896383;0.418082;, + 0.272923;0.847069;0.456056;, + 0.418954;0.758746;0.498781;, + 0.495194;0.674502;0.547568;, + 0.648969;0.465102;0.602096;, + 0.748580;0.336532;0.571291;, + 0.733631;0.242497;0.634807;, + 0.733566;0.233884;0.638106;, + 0.749609;0.058624;0.659280;, + 0.878739;0.026167;0.476585;, + 0.736733;-0.193488;0.647909;, + 0.763409;0.001633;0.645913;, + 0.797189;0.154426;0.583646;, + 0.880351;0.266244;0.392551;, + 0.868507;0.479636;0.125080;, + 0.932823;0.276500;0.231062;, + 0.978584;-0.070695;0.193330;, + 0.852825;-0.141438;0.502678;, + 0.733964;-0.274088;0.621428;, + 0.639613;-0.456914;0.618162;, + 0.693258;-0.371816;0.617370;, + 0.896276;-0.298656;0.327864;, + 0.915747;-0.069979;-0.395613;, + 0.526943;-0.210816;-0.823339;, + 0.874456;-0.485035;-0.008234;, + 0.735754;-0.497441;0.459585;, + 0.614791;-0.545072;0.570026;, + 0.520342;-0.661339;0.540254;, + 0.660047;-0.691418;0.293733;, + 0.690991;-0.559261;-0.457993;, + 0.026567;-0.027659;-0.999264;, + 0.165490;-0.158014;-0.973470;, + 0.548581;-0.706537;-0.447061;, + 0.543999;-0.795295;0.267527;, + 0.408259;-0.799191;0.441157;, + 0.472098;-0.875210;-0.105503;, + 0.162650;-0.337165;-0.927289;, + -0.239370;0.242437;-0.940174;, + -0.334498;0.130454;-0.933324;, + -0.224661;-0.018905;-0.974254;, + 0.126972;-0.003851;-0.991899;, + 0.921164;0.173708;-0.348255;, + 0.895011;0.314233;0.316564;, + 0.692459;0.378067;0.614465;, + 0.619321;0.540311;0.569654;, + 0.738555;0.502344;0.449653;, + 0.863254;0.503197;0.039818;, + 0.740684;0.329824;-0.585324;, + 0.629461;0.529658;-0.568543;, + 0.656187;0.682653;0.321564;, + 0.538857;0.639013;0.548904;, + 0.539378;0.751535;0.379824;, + 0.540942;0.717085;-0.439513;, + -0.097088;-0.083272;-0.991786;, + -0.328406;-0.212840;-0.920244;, + -0.421829;-0.158320;-0.892746;, + -0.343294;-0.345490;-0.873376;, + -0.169362;-0.285873;-0.943182;, + 0.183869;0.345566;-0.920204;, + 0.473426;0.877826;0.072729;, + 0.344304;0.884933;0.313605;, + 0.252656;0.957151;0.141517;, + 0.167559;0.984132;0.058385;, + 0.072775;0.992346;0.099771;, + -0.032960;0.998942;0.032058;, + -0.053140;0.933065;0.355761;, + -0.115142;0.942089;0.314976;, + -0.101987;0.862716;-0.495298;, + 0.007947;0.538564;-0.842547;, + 0.101694;0.832020;-0.545344;, + 0.151041;0.669952;-0.726877;, + 0.304880;0.807551;-0.504886;, + -0.073528;-0.245995;-0.966478;, + -0.265131;-0.495849;-0.826946;, + -0.362544;-0.497290;-0.788204;, + -0.256530;-0.626992;-0.735577;, + -0.194503;-0.555927;-0.808154;, + -0.125312;-0.647830;-0.751408;, + -0.174520;-0.717648;-0.674183;, + -0.270576;-0.669717;-0.691569;, + -0.144194;-0.745795;-0.650383;, + -0.074233;-0.745957;-0.661844;, + -0.035335;-0.772486;-0.634048;, + 0.017593;-0.754569;-0.655985;, + 0.062646;-0.768380;-0.636921;, + 0.125962;-0.734505;-0.666810;, + 0.175634;-0.743600;-0.645145;, + 0.228969;-0.700091;-0.676348;, + 0.186752;-0.678639;-0.710333;, + 0.280521;-0.605379;-0.744865;, + 0.343157;-0.582286;-0.737011;, + 0.379666;-0.454263;-0.805915;, + 0.447677;-0.406765;-0.796321;, + 0.474411;-0.270117;-0.837837;, + 0.522918;-0.151138;-0.838876;, + 0.509307;-0.050996;-0.859073;, + 0.525220;0.063803;-0.848571;, + 0.540606;-0.054610;-0.839502;, + 0.535899;0.124837;-0.835002;, + 0.517998;0.248452;-0.818505;, + 0.463385;0.290985;-0.837020;, + 0.436187;0.143883;-0.888278;, + 0.436869;-0.082768;-0.895709;, + 0.407543;-0.266409;-0.873461;, + 0.240545;-0.243510;-0.939596;, + 0.322956;-0.140880;-0.935870;, + 0.233204;0.019452;-0.972233;, + 0.332399;0.215151;-0.918271;, + 0.337295;0.338140;-0.878575;, + 0.377825;0.471363;-0.796910;, + 0.451839;0.419728;-0.787191;, + 0.498594;0.341936;-0.796545;, + 0.405686;0.513943;-0.755832;, + 0.342831;0.591454;-0.729828;, + 0.309325;0.643919;-0.699776;, + 0.239274;0.689736;-0.683383;, + 0.286030;0.596080;-0.750251;, + -0.025961;-0.679772;-0.732964;, + 0.053863;-0.673946;-0.736815;, + 0.133943;-0.656936;-0.741953;, + 0.184546;-0.580804;-0.792849;, + 0.264212;-0.481155;-0.835872;, + 0.147437;-0.262887;-0.953495;, + 0.073931;-0.201080;-0.976781;, + 0.047942;-0.259574;-0.964533;, + 0.004722;-0.478009;-0.878343;, + -0.053168;-0.564279;-0.823870;, + 0.008200;0.002138;-0.999964;, + -0.148269;0.636044;-0.757274;, + -0.236976;0.665138;-0.708120;, + -0.162648;0.337161;-0.927291;, + -0.165504;0.158028;-0.973466;, + -0.098540;0.056661;-0.993519;, + -0.634331;0.115343;-0.764408;, + -0.463515;-0.045918;-0.884898;, + 0.101895;0.086832;-0.990998;, + 0.169370;0.285887;-0.943177;, + 0.268897;0.487885;-0.830459;, + 0.201236;0.575384;-0.792740;, + 0.073529;0.246001;-0.966477;, + -0.183869;-0.345565;-0.920205;, + -0.540942;-0.717085;-0.439512;, + -0.633584;-0.531484;-0.562225;, + -0.760975;-0.360032;-0.539716;, + -0.861598;-0.504639;0.054676;, + -0.912365;-0.331710;0.239912;, + -0.950079;-0.130659;0.283334;, + -0.981692;0.063040;0.179741;, + -0.903737;0.306552;0.298807;, + -0.830819;0.409142;-0.377284;, + -0.693535;0.579188;-0.428429;, + -0.548583;0.706539;-0.447057;, + -0.472098;0.875209;-0.105508;, + -0.366271;0.930497;0.004632;, + -0.277509;0.957786;0.075070;, + -0.190268;0.975376;0.111535;, + -0.210346;0.877422;0.431143;, + -0.273099;0.844615;0.460481;, + -0.335696;0.828729;0.447792;, + -0.451842;0.764535;0.459701;, + -0.593668;0.603666;0.532114;, + -0.420186;0.751115;0.509186;, + -0.306130;0.835167;0.456925;, + -0.407164;0.807360;0.427069;, + -0.507820;0.676664;0.533146;, + -0.571346;0.580659;0.579999;, + -0.694453;0.333991;0.637326;, + -0.706908;0.433886;0.558591;, + -0.782170;0.169129;0.599672;, + -0.833865;-0.188865;0.518651;, + -0.660364;-0.584937;0.470922;, + -0.489904;-0.794359;0.359148;, + -0.309294;-0.901190;0.303634;, + -0.267325;-0.960405;0.078483;, + -0.170598;-0.942504;0.287373;, + -0.120122;-0.989972;0.074332;, + -0.046726;-0.963248;0.264520;, + 0.017434;-0.997189;0.072877;, + 0.071837;-0.956414;0.283040;, + 0.156989;-0.985549;0.063616;, + 0.210594;-0.931212;0.297479;, + 0.310185;-0.948151;0.069246;, + 0.363628;-0.872594;0.326121;, + 0.527512;-0.846396;0.073105;, + 0.549536;-0.739367;0.389033;, + 0.689197;-0.682321;0.243813;, + 0.741286;-0.657948;0.132662;, + 0.861504;-0.448751;0.237556;, + 0.865187;-0.500758;0.026331;, + 0.948407;-0.311754;0.057727;, + 0.711704;-0.512418;0.480527;, + 0.533545;-0.675137;0.509431;, + 0.362468;-0.802807;0.473411;, + 0.211591;-0.878815;0.427684;, + 0.078474;-0.907627;0.412377;, + -0.065666;-0.913673;0.401110;, + -0.175042;-0.902126;0.394372;, + -0.292409;-0.852395;0.433496;, + -0.441748;-0.755810;0.483333;, + -0.541848;-0.657712;0.523274;, + -0.645680;-0.471949;0.600301;, + -0.750280;-0.251978;0.611217;, + -0.779225;-0.034506;0.625794;, + -0.753998;0.017849;0.656635;, + -0.726797;-0.192585;0.659301;, + -0.733877;-0.227373;0.640099;, + -0.753466;0.009058;0.657425;, + 0.646099;-0.507433;0.570147;, + 0.499800;-0.673428;0.544697;, + -0.544000;0.795295;0.267526;, + -0.660046;0.691419;0.293732;, + -0.744099;0.497369;0.446028;, + -0.691913;0.378562;0.614774;, + -0.742946;0.207668;0.636322;, + -0.617455;0.531873;0.579535;, + -0.692487;-0.378085;0.614422;, + -0.619286;-0.540230;0.569769;, + -0.738557;-0.502344;0.449649;, + -0.656187;-0.682653;0.321563;, + -0.539105;-0.638596;0.549146;, + -0.496306;-0.678690;0.541350;, + -0.346400;-0.803733;0.483757;, + -0.202154;-0.874479;0.440931;, + -0.146449;-0.894540;0.422315;, + -0.026859;-0.906718;0.420880;, + 0.034831;-0.914998;0.401951;, + -0.051987;-0.951315;0.303805;, + -0.163254;-0.982676;0.087729;, + -0.252656;-0.957151;0.141515;, + -0.272920;-0.846909;0.456355;, + -0.417568;-0.759759;0.498401;, + -0.539378;-0.751535;0.379825;, + -0.473426;-0.877826;0.072725;, + -0.344304;-0.884933;0.313605;, + -0.304879;-0.807549;-0.504889;, + -0.151042;-0.669954;-0.726876;, + -0.099144;-0.878982;-0.466434;, + -0.030815;-0.993935;-0.105564;, + 0.044346;-0.991603;0.121478;, + 0.119965;-0.925325;0.359698;, + 0.221318;-0.873168;0.434277;, + 0.298140;-0.842592;0.448499;, + 0.366271;-0.930497;0.004639;, + 0.236978;-0.665142;-0.708116;, + 0.277509;-0.957786;0.075071;, + 0.190268;-0.975376;0.111532;, + 0.108490;-0.890800;-0.441253;, + 0.001096;-0.538009;-0.842939;, + -0.008200;-0.002139;-0.999964;, + 0.053168;0.564279;-0.823870;, + 0.116264;0.643381;-0.756666;, + 0.179601;0.689077;-0.702080;, + 0.102245;0.757059;-0.645296;, + 0.093991;0.731061;-0.675807;, + 0.025743;0.687156;-0.726054;, + -0.004723;0.478009;-0.878342;, + -0.047941;0.259570;-0.964534;, + 0.148269;-0.636044;-0.757275;, + -0.073926;0.201067;-0.976784;, + -0.189422;0.572907;-0.797431;, + -0.137732;0.652347;-0.745301;, + -0.062108;0.670651;-0.739168;, + -0.051409;0.752636;-0.656427;, + 0.027771;0.757212;-0.652578;, + 0.005087;0.774979;-0.631967;, + -0.100809;0.759654;-0.642466;, + -0.137254;0.728134;-0.671552;, + -0.221019;0.664341;-0.714004;, + -0.309471;0.571228;-0.760214;, + -0.266833;0.473238;-0.839551;, + -0.147427;0.262871;-0.953501;, + -0.384725;0.439167;-0.811862;, + -0.420737;0.481097;-0.769107;, + -0.330208;0.611036;-0.719443;, + -0.400677;0.540967;-0.739468;, + -0.304689;0.649672;-0.696485;, + -0.214678;0.710397;-0.670261;, + -0.465049;0.339008;-0.817804;, + -0.501571;0.280664;-0.818324;, + -0.500542;0.158146;-0.851145;, + -0.534611;0.092856;-0.839982;, + -0.513772;-0.028109;-0.857466;, + -0.536607;-0.082349;-0.839804;, + -0.488360;-0.233361;-0.840861;, + -0.513193;-0.234135;-0.825720;, + -0.465452;-0.390900;-0.794073;, + -0.422100;-0.384221;-0.821100;, + -0.441907;0.027401;-0.896642;, + -0.437011;0.143133;-0.887994;, + -0.416546;0.274085;-0.866814;, + -0.385750;-0.539830;-0.748185;, + -0.456409;-0.446496;-0.769631;, + -0.364993;-0.580818;-0.727620;, + 0.012051;-0.072663;0.997284;, + 0.012051;-0.072663;0.997284;, + 0.012051;-0.072663;0.997284;, + 0.131191;0.229478;0.964432;, + 0.131191;0.229478;0.964432;, + 0.131191;0.229478;0.964432;, + 0.717825;0.037349;0.695221;, + 0.563026;0.082946;0.822266;, + 0.671627;0.249533;0.697603;, + 0.745559;-0.106371;0.657896;, + 0.539046;-0.152804;0.828299;, + 0.850871;-0.514121;-0.108159;, + 0.453357;-0.283968;0.844885;, + 0.663752;-0.374099;0.647676;, + 0.495870;-0.061136;0.866242;, + 0.753676;0.222759;0.618345;, + 0.996545;0.063651;-0.053350;, + 0.890648;-0.229759;0.392373;, + 0.819948;-0.447393;-0.357105;, + 0.699315;-0.576147;-0.423100;, + 0.630571;-0.548673;0.548943;, + 0.506536;-0.531436;0.678968;, + 0.659559;-0.747642;-0.077546;, + 0.435498;-0.521088;-0.734036;, + 0.589121;-0.807828;-0.018713;, + 0.553004;-0.518149;0.652463;, + 0.677522;-0.618966;0.397297;, + 0.461830;-0.581779;-0.669512;, + 0.429801;-0.394114;-0.812370;, + 0.418401;-0.195485;-0.886976;, + 0.521077;-0.104939;-0.847034;, + 0.398903;0.060698;-0.914982;, + 0.475331;0.032425;-0.879210;, + 0.547355;0.214420;-0.808966;, + 0.256425;-0.315216;-0.913721;, + 0.237153;-0.692654;-0.681167;, + 0.208036;-0.470178;-0.857703;, + 0.206400;-0.838491;-0.504314;, + 0.210090;-0.794732;-0.569442;, + 0.239206;-0.514356;-0.823540;, + 0.208928;-0.884422;-0.417310;, + 0.246942;-0.839285;-0.484377;, + 0.325114;-0.570986;-0.753841;, + 0.255698;-0.933786;-0.250324;, + 0.419230;-0.754156;-0.505465;, + 0.401439;-0.912289;-0.081091;, + 0.602179;-0.560948;-0.568083;, + 0.792144;-0.566524;-0.227064;, + 0.762031;-0.001121;-0.647539;, + 0.995918;-0.000000;-0.090258;, + 0.796547;0.559816;-0.228293;, + 0.590586;0.496960;-0.635798;, + 0.446840;0.890413;-0.086589;, + 0.382626;0.849976;-0.362130;, + 0.245870;0.968414;-0.041497;, + 0.254907;0.932123;-0.257232;, + 0.354832;0.466599;-0.810172;, + 0.261085;0.783631;-0.563699;, + 0.246114;0.283275;-0.926922;, + 0.232273;0.603608;-0.762697;, + 0.205842;0.316189;-0.926096;, + 0.213639;0.750058;-0.625916;, + 0.214160;0.575187;-0.789491;, + 0.238082;0.307659;-0.921229;, + 0.235556;0.696368;-0.677927;, + 0.412954;0.568583;-0.711465;, + 0.493790;0.336511;-0.801830;, + 0.777756;0.626983;-0.044589;, + 0.753016;0.297809;-0.586751;, + -0.908062;-0.172048;0.381868;, + -0.717825;0.037349;0.695221;, + -0.564405;0.076275;0.821966;, + -0.919914;0.385264;-0.073006;, + -0.482829;0.293347;0.825120;, + -0.777757;0.627728;-0.032443;, + -0.478795;0.387139;-0.787958;, + -0.403063;0.172896;-0.898692;, + -0.517780;0.059410;-0.853449;, + -0.372097;-0.057582;-0.926406;, + -0.535646;-0.158883;-0.829361;, + -0.460859;-0.296614;-0.836438;, + -0.238898;-0.306559;-0.921385;, + -0.202739;-0.066111;-0.976999;, + -0.222353;0.116733;-0.967953;, + -0.255394;0.318524;-0.912862;, + -0.411646;0.575770;-0.706425;, + -0.550788;0.749947;-0.366349;, + -0.630118;0.555801;0.542251;, + -0.521757;0.563392;0.640593;, + -0.579335;0.613225;0.536960;, + -0.731525;0.538568;0.418110;, + -0.635461;0.771684;0.026341;, + -0.429781;0.856736;-0.285117;, + -0.314660;0.884612;-0.344166;, + -0.278329;0.817462;-0.504271;, + -0.237153;0.692654;-0.681168;, + -0.208569;0.471845;-0.856657;, + -0.206400;0.838490;-0.504314;, + -0.210090;0.794732;-0.569442;, + -0.239206;0.514356;-0.823540;, + -0.208929;0.884421;-0.417310;, + -0.246942;0.839285;-0.484377;, + -0.325114;0.570987;-0.753840;, + -0.252081;0.935529;-0.247469;, + -0.400869;0.801561;-0.443626;, + -0.245870;0.968414;-0.041497;, + -0.446841;0.890413;-0.086589;, + -0.603863;0.555595;-0.571545;, + -0.796548;0.559816;-0.228293;, + -0.762031;0.001122;-0.647539;, + -0.995919;-0.000001;-0.090257;, + -0.796548;-0.559816;-0.228293;, + -0.590586;-0.496960;-0.635798;, + -0.446840;-0.890413;-0.086589;, + -0.745391;-0.641003;0.183049;, + -0.942436;-0.000003;0.334385;, + -0.745393;0.641001;0.183049;, + -0.310625;0.942677;0.121949;, + -0.163175;0.986462;0.016311;, + -0.170637;0.978925;-0.112202;, + -0.174923;0.961358;-0.212585;, + -0.203758;0.927198;-0.314302;, + -0.285793;0.946366;-0.150712;, + -0.528277;0.847703;-0.048190;, + -0.754344;0.632166;0.177006;, + -0.743010;0.627777;0.232019;, + -0.691172;0.713625;0.114106;, + -0.359322;0.931765;0.051968;, + -0.197524;0.979362;-0.042829;, + -0.149745;0.988709;0.005489;, + -0.133089;0.989630;0.054028;, + -0.146320;0.985331;0.087830;, + -0.212848;0.966098;0.146118;, + -0.137899;0.983955;0.113211;, + -0.126954;0.987174;0.096796;, + -0.181407;0.980730;0.072525;, + -0.284486;0.950664;0.123717;, + -0.177166;0.977719;0.112593;, + -0.163199;0.979180;0.120719;, + -0.145391;0.980727;0.130519;, + -0.213620;0.961735;0.171557;, + -0.381795;0.878930;0.285858;, + -0.399698;0.878926;0.260250;, + -0.697413;0.608682;0.378315;, + -0.861925;-0.000002;0.507036;, + -0.697411;-0.608685;0.378313;, + -0.310625;-0.942677;0.121949;, + -0.245870;-0.968414;-0.041497;, + -0.382626;-0.849976;-0.362130;, + -0.354832;-0.466599;-0.810172;, + -0.254907;-0.932123;-0.257232;, + -0.163174;-0.986462;0.016311;, + -0.146320;-0.985331;0.087830;, + -0.133089;-0.989630;0.054029;, + -0.170637;-0.978925;-0.112201;, + -0.261086;-0.783631;-0.563699;, + -0.246114;-0.283275;-0.926922;, + -0.232273;-0.603608;-0.762697;, + -0.205788;-0.315662;-0.926288;, + -0.213639;-0.750058;-0.625916;, + -0.207824;-0.890167;-0.405478;, + -0.174923;-0.961358;-0.212584;, + -0.206396;-0.845794;-0.491969;, + -0.214160;-0.575186;-0.789491;, + -0.235556;-0.696367;-0.677928;, + -0.203758;-0.927198;-0.314302;, + -0.197524;-0.979362;-0.042829;, + -0.149745;-0.988709;0.005489;, + -0.181407;-0.980730;0.072525;, + -0.359322;-0.931765;0.051968;, + -0.285793;-0.946366;-0.150712;, + -0.278329;-0.817462;-0.504271;, + -0.465641;-0.576497;-0.671439;, + -0.864883;-0.498692;0.057304;, + -0.776499;-0.168926;-0.607053;, + 0.915386;0.371861;0.154235;, + 0.482829;0.293346;0.825121;, + 0.684001;0.402336;0.608496;, + 0.822374;0.447486;-0.351365;, + 0.845417;0.270146;-0.460751;, + 0.459579;0.074193;-0.885032;, + 0.404308;0.175346;-0.897658;, + 0.348106;0.241537;-0.905805;, + 0.699314;0.576146;-0.423102;, + 0.630572;0.548674;0.548940;, + 0.521758;0.563391;0.640593;, + 0.659560;0.747641;-0.077548;, + 0.435498;0.521088;-0.734036;, + 0.412485;0.366327;-0.834063;, + 0.220707;0.263372;-0.939108;, + 0.359601;0.569034;-0.739518;, + 0.576943;0.816007;-0.035623;, + 0.547374;0.718181;0.429647;, + 0.579335;0.613225;0.536960;, + 0.630118;0.555801;0.542251;, + 0.000310;0.007137;-0.999974;, + 0.133215;0.135276;-0.981812;, + 0.091902;0.207770;-0.973851;, + 0.059469;0.248776;-0.966734;, + 0.001411;-0.024853;-0.999690;, + 0.021162;0.262942;-0.964580;, + 0.000935;-0.010484;-0.999945;, + -0.013980;0.261567;-0.965084;, + -0.035470;0.216604;-0.975615;, + -0.010957;-0.005291;-0.999926;, + -0.092190;0.254676;-0.962622;, + -0.115756;0.214963;-0.969738;, + 0.017417;-0.026289;-0.999503;, + -0.121489;0.118591;-0.985483;, + 0.027396;-0.025152;-0.999308;, + -0.141339;0.049172;-0.988739;, + 0.106937;-0.040557;-0.993438;, + 0.016623;0.035513;-0.999231;, + -0.190620;0.005706;-0.981647;, + -0.119488;-0.058441;-0.991114;, + 0.026402;0.022773;-0.999392;, + -0.119202;-0.113731;-0.986335;, + 0.016691;0.023492;-0.999585;, + -0.108911;-0.197300;-0.974275;, + -0.003536;0.030862;-0.999517;, + -0.076990;-0.230398;-0.970046;, + -0.002356;0.009358;-0.999953;, + -0.043622;-0.279604;-0.959124;, + -0.003345;-0.067374;-0.997722;, + -0.011885;-0.302200;-0.953171;, + 0.025501;-0.268244;-0.963013;, + 0.036151;-0.220633;-0.974687;, + 0.059294;-0.251954;-0.965921;, + -0.008187;0.022037;-0.999724;, + -0.507985;-0.478783;0.716043;, + -0.349050;-0.019629;0.936899;, + -0.834828;-0.121445;0.536948;, + -0.527501;-0.738592;0.419791;, + -0.263525;-0.946923;0.184097;, + -0.608498;-0.756898;0.238402;, + -0.445378;-0.876347;0.183452;, + -0.615188;-0.756964;0.220337;, + -0.449909;-0.834836;0.317224;, + -0.251457;-0.190299;0.948976;, + 0.504242;0.389862;0.770550;, + 0.021237;-0.009412;0.999730;, + 0.233914;0.046203;0.971159;, + 0.689928;-0.172676;0.702981;, + 0.816448;0.395864;0.420363;, + 0.548062;0.698726;0.459794;, + 0.284317;0.614810;0.735644;, + -0.065181;-0.266504;0.961627;, + -0.052970;-0.964208;0.259800;, + 0.063449;-0.877838;0.474737;, + 0.241249;-0.914812;0.323910;, + -0.102003;0.165367;0.980943;, + 0.550588;-0.666586;0.502509;, + 0.601653;-0.761725;0.240394;, + 0.318447;-0.929040;0.188352;, + 0.148117;-0.974438;0.168911;, + 0.016285;-0.987192;0.158702;, + 0.133765;-0.979122;0.153060;, + 0.271800;-0.947797;0.166751;, + 0.531911;-0.821534;0.205312;, + 0.645500;-0.733483;0.212914;, + 0.593189;-0.769701;0.235981;, + 0.110411;-0.221639;0.968858;, + -0.568464;0.573471;0.589898;, + -0.703389;0.177502;0.688286;, + -0.723902;-0.171389;0.668276;, + -0.849182;0.242927;0.468910;, + -0.564388;0.777104;0.278522;, + -0.326295;0.808491;0.489769;, + -0.090414;0.799091;0.594372;, + -0.020978;0.601556;0.798555;, + 0.090523;0.719178;0.688904;, + 0.328598;0.861618;0.386831;, + 0.542589;0.790763;0.283357;, + 0.603169;0.784370;0.144744;, + 0.205524;0.963487;0.171616;, + 0.048910;0.938884;0.340740;, + -0.210045;0.920175;0.330392;, + -0.162233;0.972491;0.167156;, + -0.080943;0.994754;0.062554;, + -0.389620;0.916578;0.089893;, + -0.837822;0.532650;0.119738;, + -0.957677;0.130944;0.256338;, + -0.793070;-0.471669;0.385445;, + -0.532852;-0.574378;0.621417;, + 0.288806;0.322408;0.901468;, + 0.789115;0.115872;0.603217;, + 0.835085;-0.212394;0.507465;, + 0.381328;-0.877634;0.290427;, + 0.296403;-0.941465;0.160586;, + 0.506226;-0.843325;0.180386;, + 0.262761;-0.955038;0.137330;, + 0.507132;-0.846164;0.163780;, + 0.284486;-0.950664;0.123717;, + 0.516625;-0.845528;0.134839;, + 0.359322;-0.931765;0.051968;, + 0.691175;-0.713623;0.114106;, + 0.716058;-0.679555;0.159579;, + 0.742989;-0.639902;0.196198;, + 0.739818;-0.639231;0.209888;, + 0.727961;-0.652641;0.210077;, + 0.473056;-0.861187;0.185944;, + 0.314283;-0.935591;0.160923;, + 0.536031;-0.824783;0.180012;, + 0.726333;-0.658296;0.197702;, + 0.438871;-0.472347;0.764382;, + 0.220754;-0.110369;0.969065;, + 0.567348;-0.680430;0.463822;, + 0.818653;-0.365560;0.442914;, + 0.952764;-0.168095;0.252954;, + 0.872091;0.447986;0.196890;, + 0.937580;0.331077;0.106452;, + 0.799271;-0.594976;0.084672;, + 0.994852;-0.093209;0.039772;, + 0.722869;-0.690428;0.027737;, + 0.973443;0.227778;0.022921;, + 0.751205;0.658935;0.038673;, + 0.380096;0.924748;0.019198;, + 0.283563;0.957587;0.051187;, + -0.027911;0.999427;0.019127;, + -0.240070;0.970613;0.016623;, + -0.525203;0.850428;0.030558;, + -0.870749;0.491084;0.025132;, + -0.998848;0.001114;0.047974;, + -0.777362;-0.628699;0.021095;, + -0.593735;-0.803563;0.042006;, + -0.147011;-0.988750;0.027574;, + -0.327443;-0.944221;0.035023;, + -0.487732;-0.867890;0.094261;, + -0.918798;-0.368198;0.142265;, + 0.586203;0.806710;0.074736;, + -0.840707;-0.489119;0.232323;, + -0.556730;-0.803601;0.210421;, + -0.249947;-0.955001;0.159689;, + -0.053358;-0.995320;0.080564;, + 0.305944;-0.951310;0.037529;, + 0.326189;-0.940752;0.092668;, + 0.268954;-0.933623;0.236669;, + 0.012307;-0.978034;0.208083;, + -0.187913;-0.920131;0.343581;, + -0.465366;-0.791343;0.396499;, + -0.300676;-0.646017;0.701609;, + 0.052538;0.086974;0.994824;, + 0.457441;0.770156;0.444530;, + 0.505680;0.830894;0.232170;, + 0.249290;0.890990;0.379461;, + 0.045251;0.521835;0.851845;, + 0.049803;0.963258;0.263920;, + 0.124854;0.968933;0.213495;, + 0.507482;0.833284;0.219315;, + 0.350785;0.900861;0.255733;, + 0.474726;0.846872;0.239674;, + 0.512249;0.827812;0.228755;, + 0.549496;0.810173;0.204139;, + 0.584106;0.787523;0.196539;, + 0.659005;0.719997;0.217525;, + 0.635548;0.740024;0.220098;, + 0.410714;0.879107;0.241835;, + 0.759762;0.486346;0.431543;, + 0.694521;0.310079;0.649224;, + 0.651607;-0.411840;0.637022;, + 0.554971;-0.613488;0.561818;, + 0.622425;0.466631;0.628365;, + 0.343495;0.883053;0.319732;, + 0.180874;0.971521;0.153072;, + 0.292538;0.920340;0.259609;, + 0.692785;0.370337;0.618788;, + 0.660535;-0.418318;0.623461;, + 0.244396;-0.942836;0.226564;, + 0.145196;-0.979662;0.138494;, + 0.159380;-0.979912;0.119880;, + 0.177166;-0.977719;0.112593;, + 0.181407;-0.980730;0.072525;, + 0.197524;-0.979362;-0.042829;, + 0.285793;-0.946366;-0.150711;, + 0.528277;-0.847703;-0.048190;, + 0.754360;-0.631790;0.178276;, + 0.637036;-0.770397;-0.025961;, + 0.429781;-0.856737;-0.285116;, + 0.314660;-0.884613;-0.344164;, + 0.512285;-0.771107;-0.378098;, + 0.278328;-0.817463;-0.504270;, + 0.203758;-0.927199;-0.314302;, + 0.174923;-0.961358;-0.212585;, + 0.170637;-0.978925;-0.112202;, + 0.170568;-0.985242;0.014327;, + 0.317886;-0.939206;0.129773;, + 0.743660;-0.643072;0.182834;, + 0.942437;-0.000000;0.334385;, + 0.745392;0.641002;0.183049;, + 0.310625;0.942677;0.121949;, + 0.163175;0.986462;0.016311;, + 0.170637;0.978925;-0.112202;, + 0.207824;0.890167;-0.405478;, + 0.174923;0.961358;-0.212585;, + 0.149745;0.988709;0.005489;, + 0.133089;0.989630;0.054028;, + 0.146320;0.985331;0.087830;, + 0.212847;0.966098;0.146118;, + 0.397338;0.880538;0.258410;, + 0.697411;0.608684;0.378313;, + 0.861925;-0.000000;0.507036;, + 0.697411;-0.608685;0.378313;, + 0.399697;-0.878927;0.260249;, + 0.703361;-0.534215;0.468932;, + 0.825763;0.060231;0.560792;, + 0.702866;0.534631;0.469200;, + 0.686300;0.528542;0.499635;, + 0.719097;-0.467449;0.514190;, + 0.381795;-0.878930;0.285857;, + 0.750233;-0.336806;0.568957;, + 0.694552;0.457079;0.555586;, + 0.352374;0.896641;0.268081;, + 0.203640;0.965558;0.161953;, + 0.137899;0.983955;0.113211;, + 0.126954;0.987174;0.096796;, + 0.181407;0.980730;0.072525;, + 0.197524;0.979362;-0.042829;, + 0.203758;0.927199;-0.314302;, + 0.206396;0.845794;-0.491969;, + 0.278328;0.817463;-0.504270;, + 0.550787;0.749949;-0.366347;, + 0.635461;0.771684;0.026341;, + 0.731525;0.538568;0.418111;, + 0.718341;0.582773;0.379951;, + 0.566157;0.804663;0.178843;, + 0.459323;0.813781;-0.356066;, + 0.326310;0.720659;-0.611696;, + 0.206066;0.398519;-0.893711;, + 0.190898;0.042343;-0.980696;, + 0.300979;-0.035361;-0.952975;, + 0.199641;0.942495;0.268041;, + 0.054384;0.962474;0.265870;, + -0.013683;0.966485;0.256357;, + -0.115605;0.971005;0.209248;, + -0.089951;0.961754;0.258722;, + -0.198634;0.942954;0.267175;, + -0.349873;0.900997;0.256500;, + -0.505177;0.834546;0.219838;, + -0.474726;0.846872;0.239674;, + -0.509912;0.828951;0.229846;, + -0.549497;0.810173;0.204139;, + -0.585073;0.786792;0.196593;, + -0.661304;0.718026;0.217064;, + -0.557700;0.799086;0.224570;, + -0.461673;0.799266;0.384748;, + -0.668240;0.708668;0.226374;, + -0.708216;0.674223;0.209414;, + -0.642157;0.740048;0.199907;, + -0.444437;0.879469;0.170325;, + -0.509811;0.845072;0.161079;, + -0.402704;0.901490;0.158572;, + -0.327600;0.932509;0.152001;, + -0.337400;0.931144;0.138320;, + -0.264768;0.954494;0.137252;, + -0.279014;0.945560;0.167536;, + -0.240707;0.960898;0.136879;, + -0.228654;0.963831;0.136923;, + -0.188087;0.969891;0.154707;, + -0.042655;0.977809;0.205109;, + -0.110554;0.978838;0.172206;, + 0.000023;0.985519;0.169568;, + 0.112112;0.978803;0.171395;, + 0.222462;0.956896;0.186713;, + 0.175731;0.971613;0.158389;, + 0.228230;0.962057;0.149527;, + 0.254657;0.956689;0.141050;, + 0.302088;0.940182;0.157480;, + 0.265335;0.954758;0.134291;, + 0.326789;0.932800;0.151967;, + 0.341298;0.930209;0.135007;, + 0.402704;0.901490;0.158572;, + 0.444438;0.879468;0.170325;, + 0.517498;0.839240;0.166949;, + 0.642157;0.740048;0.199907;, + 0.708216;0.674223;0.209414;, + 0.392211;0.903029;0.175243;, + 0.163207;0.979170;0.120787;, + 0.146673;0.980360;0.131841;, + 0.571910;-0.666901;0.477662;, + 0.213619;-0.961735;0.171557;, + 0.212848;-0.966098;0.146118;, + 0.146320;-0.985331;0.087830;, + 0.133089;-0.989630;0.054028;, + 0.149745;-0.988709;0.005489;, + 0.126954;-0.987174;0.096796;, + 0.137899;-0.983955;0.113211;, + 0.145391;-0.980727;0.130519;, + 0.177166;0.977719;0.112593;, + 0.284486;0.950664;0.123717;, + 0.359322;0.931765;0.051968;, + 0.285793;0.946366;-0.150711;, + 0.314660;0.884613;-0.344164;, + 0.429780;0.856737;-0.285116;, + 0.528277;0.847704;-0.048190;, + 0.691172;0.713625;0.114106;, + 0.754344;0.632166;0.177006;, + 0.743010;0.627777;0.232019;, + 0.474892;0.877662;-0.064710;, + 0.331180;0.874079;-0.355395;, + 0.227128;0.711025;-0.665474;, + 0.206206;0.537472;-0.817681;, + 0.102851;0.255499;-0.961323;, + 0.114903;0.418526;-0.900907;, + 0.154062;0.690978;-0.706268;, + 0.058657;0.421881;-0.904752;, + 0.006428;0.347999;-0.937473;, + -0.039646;0.328747;-0.943585;, + -0.069468;0.326531;-0.942630;, + -0.158159;0.480588;-0.862567;, + -0.131869;0.331182;-0.934307;, + -0.145502;0.260322;-0.954495;, + 0.047359;-0.036089;-0.998226;, + -0.223089;0.262634;-0.938752;, + -0.144253;0.105830;-0.983865;, + -0.413331;0.324863;-0.850660;, + -0.414720;0.181110;-0.891743;, + -0.090790;0.034708;-0.995265;, + -0.296202;0.034140;-0.954515;, + -0.147511;-0.045446;-0.988016;, + -0.458136;-0.075205;-0.885695;, + -0.541115;0.054502;-0.839180;, + -0.812535;0.249576;-0.526781;, + -0.822870;0.450098;-0.346838;, + -0.719420;0.603205;-0.344353;, + -0.431329;0.480030;-0.763889;, + -0.367599;0.542018;-0.755703;, + -0.256351;0.548163;-0.796117;, + -0.298673;0.762202;-0.574320;, + -0.433038;0.779101;-0.453298;, + -0.577339;0.815146;0.047090;, + -0.642858;0.744991;-0.178106;, + -0.630571;0.548674;0.548942;, + -0.661838;0.372337;0.650642;, + -0.890648;0.229759;0.392373;, + -0.922473;0.096359;-0.373843;, + -0.996545;-0.063651;-0.053354;, + -0.522076;0.069040;0.850100;, + -0.547373;0.718182;0.429647;, + -0.567205;0.809497;0.151636;, + -0.474772;0.877123;-0.072431;, + -0.337458;0.889565;-0.307891;, + -0.383358;0.923104;-0.030254;, + -0.417952;0.900648;0.118954;, + -0.566055;0.809472;0.156006;, + -0.718341;0.582773;0.379950;, + -0.845416;-0.270146;-0.460753;, + -0.701310;-0.195809;0.685437;, + -0.543563;-0.153547;0.825204;, + -0.745558;-0.106371;0.657897;, + -0.453356;-0.283968;0.844885;, + -0.677520;-0.618967;0.397298;, + -0.512285;-0.771107;-0.378099;, + -0.314660;-0.884613;-0.344166;, + -0.429780;-0.856736;-0.285117;, + -0.637035;-0.770397;-0.025962;, + -0.717940;-0.550585;0.425932;, + -0.754360;-0.631790;0.178276;, + -0.528276;-0.847704;-0.048191;, + -0.691171;-0.713626;0.114106;, + -0.734899;-0.637146;0.232310;, + -0.654930;-0.612414;0.442737;, + -0.553002;-0.518151;0.652464;, + -0.506535;-0.531437;0.678967;, + -0.630571;-0.548673;0.548942;, + -0.685834;-0.404527;0.604970;, + -0.822374;-0.447486;-0.351366;, + -0.445566;-0.193296;-0.874133;, + -0.354356;-0.245743;-0.902243;, + -0.699817;-0.575776;-0.422774;, + -0.642858;-0.744991;-0.178108;, + -0.590044;-0.804571;0.067178;, + -0.548486;-0.830147;0.100098;, + -0.474090;-0.877398;-0.073563;, + -0.434119;-0.776738;-0.456309;, + -0.367600;-0.542019;-0.755702;, + -0.432067;-0.484035;-0.760939;, + -0.411694;-0.363333;-0.835762;, + -0.238018;-0.273825;-0.931862;, + -0.142867;-0.254675;-0.956415;, + -0.068155;-0.065335;-0.995533;, + -0.135401;-0.358547;-0.923640;, + -0.261039;-0.551356;-0.792379;, + -0.332544;-0.763525;-0.553573;, + -0.323817;-0.878497;-0.351263;, + -0.220598;-0.664397;-0.714082;, + -0.089521;-0.378582;-0.921228;, + -0.052761;-0.441717;-0.895602;, + -0.007056;-0.442802;-0.896592;, + 0.055273;-0.450365;-0.891132;, + 0.115385;-0.434488;-0.893256;, + 0.104319;-0.261432;-0.959568;, + 0.204739;-0.396557;-0.894888;, + 0.235714;-0.623917;-0.745095;, + 0.198170;-0.710995;-0.674696;, + 0.137799;-0.702731;-0.697983;, + 0.092174;-0.759309;-0.644170;, + 0.037506;-0.730087;-0.682325;, + -0.013221;-0.766335;-0.642305;, + -0.061726;-0.731457;-0.679088;, + -0.114029;-0.712939;-0.691893;, + -0.169828;-0.719119;-0.673815;, + -0.243189;-0.894220;-0.375805;, + -0.278750;-0.958103;-0.065862;, + -0.368705;-0.928745;-0.038587;, + -0.413587;-0.902834;0.117632;, + -0.331421;-0.940392;0.076312;, + -0.270700;-0.958796;0.086203;, + -0.300444;-0.944353;0.133910;, + -0.386881;-0.908691;0.156854;, + -0.558651;-0.814721;0.155366;, + -0.752340;-0.635453;0.173734;, + -0.716054;-0.679560;0.159578;, + -0.516624;-0.845528;0.134839;, + -0.284486;-0.950664;0.123717;, + -0.177166;-0.977719;0.112593;, + -0.126954;-0.987174;0.096796;, + -0.137899;-0.983955;0.113211;, + -0.163207;-0.979170;0.120787;, + -0.264679;-0.954464;0.137635;, + -0.507132;-0.846164;0.163780;, + -0.732128;-0.652557;0.195342;, + -0.612905;-0.767757;0.186805;, + -0.376797;-0.910463;0.170534;, + -0.243375;-0.958408;0.149076;, + -0.213213;-0.968528;0.128426;, + -0.198849;-0.977311;0.072948;, + -0.207210;-0.972480;-0.106518;, + -0.174500;-0.914368;-0.365350;, + -0.109171;-0.930433;-0.349824;, + -0.042810;-0.934816;-0.352543;, + 0.016225;-0.938154;-0.345837;, + 0.080007;-0.932086;-0.353291;, + 0.146814;-0.921670;-0.359123;, + 0.213783;-0.904466;-0.369104;, + 0.286735;-0.877677;-0.384015;, + 0.356534;-0.835094;-0.418929;, + 0.324861;-0.657086;-0.680222;, + 0.359838;-0.564113;-0.743164;, + 0.217662;-0.263316;-0.939834;, + 0.348624;-0.241458;-0.905626;, + 0.433804;-0.176824;-0.883486;, + 0.541115;-0.054502;-0.839180;, + 0.922474;-0.096359;-0.373840;, + 0.812534;-0.249574;-0.526785;, + 0.412484;-0.366324;-0.834065;, + 0.452654;-0.808504;-0.376067;, + 0.481631;-0.876346;-0.006974;, + 0.349465;-0.935086;-0.059065;, + 0.270644;-0.958041;-0.094393;, + 0.188492;-0.981362;-0.037421;, + 0.121706;-0.988519;-0.089547;, + 0.052861;-0.997439;-0.048180;, + -0.011711;-0.998448;-0.054455;, + -0.068966;-0.993277;-0.092978;, + -0.136995;-0.989555;-0.044870;, + -0.102692;-0.989074;0.105772;, + -0.066343;-0.995909;0.061353;, + -0.001776;-0.994987;0.099987;, + 0.098008;-0.992505;0.073000;, + 0.139100;-0.984529;0.106552;, + 0.253303;-0.964137;0.079231;, + 0.385421;-0.915908;0.112081;, + 0.553089;-0.818714;0.154271;, + 0.734899;-0.637147;0.232310;, + 0.548316;-0.825601;0.133163;, + 0.654931;-0.612413;0.442737;, + 0.717941;-0.550585;0.425931;, + 0.737748;-0.651854;0.175539;, + -0.033839;-0.990757;0.131360;, + 0.046812;-0.991590;0.120658;, + 0.072866;-0.988414;0.133144;, + 0.017026;-0.989311;0.144822;, + 0.117883;-0.982916;0.141351;, + 0.176931;-0.975853;0.128084;, + 0.276427;-0.953031;0.123777;, + 0.367310;-0.917643;0.151704;, + 0.256983;-0.955812;0.142767;, + 0.197914;-0.969064;0.147463;, + -0.098191;-0.983580;0.151422;, + -0.118000;-0.979130;0.165469;, + -0.258384;-0.947823;0.186732;, + -0.400989;-0.896736;0.187279;, + -0.222989;-0.961365;0.161411;, + -0.161217;-0.976394;0.143750;, + -0.083306;-0.986625;0.140108;, + -0.133003;-0.983123;0.125619;, + -0.676390;-0.706798;0.207201;, + -0.696029;-0.687304;0.207742;, + -0.524437;-0.831781;0.181953;, + -0.146673;-0.980359;0.131842;, + -0.203640;-0.965558;0.161954;, + -0.295438;-0.919133;0.260598;, + -0.466226;-0.754698;0.461589;, + -0.680600;-0.284918;0.674986;, + -0.654769;0.443648;0.611926;, + -0.745179;0.520325;0.417097;, + -0.914833;0.113830;0.387457;, + 0.753616;0.633951;0.173691;, + 0.566055;0.809472;0.156006;, + 0.417951;0.900648;0.118954;, + 0.383357;0.923104;-0.030254;, + 0.320902;0.943517;-0.082444;, + 0.275125;0.915642;-0.293099;, + 0.156599;0.621157;-0.767880;, + 0.104912;0.728309;-0.677170;, + 0.048016;0.678727;-0.732820;, + 0.005364;0.734860;-0.678198;, + -0.049679;0.628431;-0.776277;, + -0.114093;0.673851;-0.730005;, + -0.186591;0.708480;-0.680617;, + -0.278809;0.912770;-0.298524;, + -0.320903;0.943517;-0.082444;, + -0.319661;0.945181;0.066699;, + -0.324542;0.935932;0.136763;, + -0.434346;0.885667;0.164128;, + -0.649591;0.736556;0.188462;, + -0.323983;0.933386;0.154356;, + -0.340460;0.926866;0.158136;, + -0.400713;0.894529;0.198106;, + -0.097618;0.964736;0.244450;, + 0.172981;0.957347;0.231438;, + 0.387427;0.901148;0.194505;, + 0.335906;0.928737;0.156892;, + 0.323983;0.933386;0.154356;, + 0.434346;0.885667;0.164128;, + 0.649591;0.736556;0.188462;, + 0.736331;0.647769;0.195479;, + 0.524437;0.831781;0.181953;, + 0.264679;0.954464;0.137635;, + 0.507133;0.846164;0.163780;, + 0.716055;0.679559;0.159578;, + 0.516625;0.845528;0.134839;, + 0.324542;0.935932;0.136763;, + 0.301299;0.943106;0.140603;, + 0.381004;0.914937;0.133139;, + 0.315361;0.944809;0.088788;, + 0.319661;0.945182;0.066699;, + 0.404462;0.914389;0.017394;, + 0.537772;0.834495;0.120078;, + 0.472911;0.864664;0.169444;, + 0.498087;0.843012;0.203076;, + 0.587667;0.788487;0.181481;, + 0.685793;0.713269;0.144693;, + 0.724080;0.689704;0.003992;, + 0.583296;0.800552;-0.137412;, + 0.342850;0.712007;-0.612781;, + 0.079977;-0.096400;-0.992124;, + 0.045738;0.511038;-0.858341;, + -0.016517;0.407490;-0.913060;, + -0.068416;0.504438;-0.860733;, + -0.166420;0.619373;-0.767256;, + -0.341295;0.709371;-0.616693;, + -0.062212;-0.181106;-0.981494;, + 0.001547;-0.358892;-0.933378;, + 0.153230;-0.376753;-0.913552;, + 0.397198;0.247326;-0.883778;, + 0.758135;0.353921;-0.547696;, + 0.659091;-0.133680;-0.740087;, + 0.178837;-0.503445;-0.845317;, + -0.001842;-0.580698;-0.814117;, + -0.018109;-0.542391;-0.839931;, + -0.241585;-0.336325;-0.910232;, + -0.422115;0.240369;-0.874095;, + -0.583296;0.800552;-0.137412;, + -0.404462;0.914389;0.017394;, + -0.315361;0.944809;0.088788;, + -0.301299;0.943106;0.140603;, + -0.381004;0.914937;0.133140;, + -0.537772;0.834495;0.120078;, + -0.724080;0.689704;0.003992;, + -0.762571;0.370003;-0.530645;, + -0.677504;-0.118071;-0.725980;, + -0.293038;-0.455519;-0.840614;, + -0.152105;-0.490187;-0.858243;, + -0.016174;-0.562121;-0.826897;, + 0.087824;-0.498960;-0.862164;, + 0.590454;-0.198966;-0.782162;, + 0.893335;0.347472;-0.284984;, + 0.574235;-0.025996;-0.818278;, + 0.145553;-0.264316;-0.953389;, + -0.505725;-0.039453;-0.861792;, + -0.683861;-0.090668;-0.723957;, + -0.889755;0.349542;-0.293523;, + -0.794484;0.476393;-0.376622;, + -0.382174;0.388604;-0.838409;, + 0.310974;0.485504;-0.817056;, + 0.760182;0.446733;-0.471754;, + 0.717475;0.686689;0.116993;, + 0.427805;0.902789;-0.044208;, + -0.142147;0.965096;-0.219965;, + -0.578403;0.813837;-0.055849;, + -0.723803;0.679556;0.119635;, + -0.818271;0.567297;0.092776;, + -0.738044;0.646344;0.193728;, + -0.590956;0.765189;0.255454;, + -0.493207;0.839153;0.229281;, + -0.282624;0.934442;0.216662;, + 0.015548;0.967137;0.253781;, + 0.253973;0.937428;0.238172;, + 0.490944;0.839892;0.231422;, + 0.590955;0.765190;0.255454;, + 0.293057;0.902832;0.314662;, + 0.000001;0.948244;0.317544;, + -0.293056;0.902832;0.314662;, + -0.507271;0.823913;0.252674;, + -0.282139;0.916798;0.282628;, + -0.004356;0.958355;0.285545;, + 0.282139;0.916798;0.282628;, + 0.507271;0.823913;0.252674;, + 0.653818;0.726527;0.211378;, + 0.698432;0.690837;0.186913;, + 0.609342;0.765839;0.205411;, + 0.490575;0.840041;0.231662;, + 0.294968;0.922691;0.248266;, + 0.754671;0.637219;0.156280;, + 0.779834;0.612632;0.128611;, + 0.856733;0.513844;-0.044417;, + -0.100199;-0.792896;0.601063;, + 0.009893;-0.692711;0.721148;, + 0.064087;-0.207273;0.976182;, + 0.067812;-0.886373;0.457978;, + 0.353291;-0.781507;0.514230;, + 0.653568;-0.719743;0.234133;, + 0.747801;-0.576489;0.329322;, + -0.462186;0.492844;0.737217;, + -0.427254;0.871404;0.241057;, + -0.342206;0.118175;0.932164;, + -0.319192;0.903391;0.286358;, + -0.610924;0.510359;0.605232;, + -0.639748;-0.422224;0.642223;, + -0.691284;-0.358579;0.627333;, + -0.549370;0.696926;0.460963;, + -0.237420;0.946437;0.218837;, + -0.188031;0.970297;0.152209;, + -0.400660;0.898960;0.177036;, + -0.524436;0.831781;0.181953;, + -0.736331;0.647769;0.195480;, + -0.753616;0.633951;0.173691;, + -0.716055;0.679559;0.159578;, + -0.507132;0.846164;0.163780;, + -0.264679;0.954464;0.137635;, + -0.750233;0.336804;0.568958;, + -0.719098;0.467446;0.514191;, + -0.703362;0.534213;0.468933;, + -0.825762;-0.060233;0.560793;, + -0.686299;-0.528545;0.499634;, + -0.699331;-0.443162;0.560842;, + -0.516624;0.845528;0.134839;, + -0.352375;-0.896641;0.268081;, + -0.212848;-0.966098;0.146119;, + -0.397338;-0.880538;0.258410;, + -0.702866;-0.534632;0.469200;, + -0.128592;0.856725;0.499486;, + -0.042334;0.970048;0.239198;, + 0.089409;0.982869;0.161167;, + -0.042449;0.984588;0.169662;, + 0.882770;0.285573;-0.373047;, + 0.818271;0.567297;0.092776;, + 0.738044;0.646344;0.193728;, + -0.324845;0.912041;0.250315;, + -0.498087;0.843012;0.203076;, + -0.472911;0.864664;0.169444;, + -0.587667;0.788487;0.181481;, + -0.490576;0.840041;0.231662;, + -0.609342;0.765839;0.205412;, + -0.698432;0.690838;0.186913;, + -0.653817;0.726527;0.211378;, + -0.754671;0.637219;0.156281;, + -0.685793;0.713269;0.144693;, + -0.779834;0.612632;0.128611;, + -0.856733;0.513844;-0.044417;, + -0.882770;0.285574;-0.373047;, + 0.590586;0.496960;-0.635798;, + 0.354832;0.466599;-0.810172;, + 0.382626;0.849976;-0.362130;, + 0.420814;-0.159731;-0.892973;, + 0.762031;-0.001121;-0.647539;, + 0.602179;-0.560948;-0.568083;, + 0.419230;-0.754156;-0.505465;, + 0.325114;-0.570986;-0.753841;, + 0.253179;-0.084477;-0.963724;, + 0.246114;0.283275;-0.926922;, + 0.194387;0.042738;-0.979994;, + 0.205842;0.316189;-0.926096;, + 0.205828;0.095254;-0.973941;, + 0.238082;0.307659;-0.921229;, + 0.398903;0.060698;-0.914982;, + 0.493790;0.336511;-0.801830;, + 0.239206;-0.514356;-0.823540;, + 0.196674;-0.154993;-0.968141;, + 0.208036;-0.470178;-0.857703;, + 0.216524;-0.094261;-0.971716;, + 0.256425;-0.315216;-0.913721;, + 0.418401;-0.195485;-0.886976;, + 0.429801;-0.394114;-0.812370;, + -0.238898;-0.306559;-0.921385;, + -0.205788;-0.315662;-0.926288;, + -0.202739;-0.066111;-0.976999;, + -0.195800;-0.049603;-0.979389;, + -0.246114;-0.283275;-0.926922;, + -0.253179;0.084477;-0.963724;, + -0.354832;-0.466599;-0.810172;, + -0.420814;0.159732;-0.892973;, + -0.590586;-0.496960;-0.635798;, + -0.762031;0.001122;-0.647539;, + -0.603863;0.555595;-0.571545;, + -0.400869;0.801561;-0.443626;, + -0.325114;0.570987;-0.753840;, + -0.239206;0.514356;-0.823540;, + -0.193687;0.131608;-0.972196;, + -0.222353;0.116733;-0.967953;, + -0.208569;0.471845;-0.856657;, + -0.255394;0.318524;-0.912862;; + 2980; + 3;0,1,2;, + 3;2,3,4;, + 3;5,6,7;, + 3;8,9,10;, + 3;11,12,13;, + 3;14,15,16;, + 3;17,14,16;, + 3;18,14,17;, + 3;18,19,14;, + 3;19,20,14;, + 3;16,21,22;, + 3;23,16,22;, + 3;17,16,23;, + 3;24,17,23;, + 3;24,25,17;, + 3;25,18,17;, + 3;25,26,18;, + 3;26,27,18;, + 3;26,28,27;, + 3;28,29,27;, + 3;28,30,29;, + 3;30,31,29;, + 3;30,32,31;, + 3;32,33,31;, + 3;32,34,33;, + 3;34,35,33;, + 3;34,36,35;, + 3;36,37,35;, + 3;36,38,37;, + 3;38,39,37;, + 3;38,40,39;, + 3;40,41,39;, + 3;40,42,41;, + 3;42,43,41;, + 3;42,44,43;, + 3;44,45,43;, + 3;44,46,45;, + 3;46,47,45;, + 3;46,48,47;, + 3;48,49,47;, + 3;48,50,49;, + 3;50,51,49;, + 3;50,52,51;, + 3;52,53,51;, + 3;52,54,53;, + 3;54,55,53;, + 3;54,56,55;, + 3;56,57,55;, + 3;56,58,57;, + 3;58,59,57;, + 3;58,60,59;, + 3;60,61,59;, + 3;60,62,61;, + 3;62,63,61;, + 3;62,64,63;, + 3;64,65,63;, + 3;64,66,65;, + 3;66,67,65;, + 3;66,68,67;, + 3;68,69,67;, + 3;68,70,69;, + 3;70,71,69;, + 3;70,72,71;, + 3;72,73,71;, + 3;72,74,73;, + 3;74,75,73;, + 3;74,76,75;, + 3;76,77,75;, + 3;76,78,77;, + 3;78,79,77;, + 3;78,80,79;, + 3;80,81,79;, + 3;80,82,81;, + 3;82,83,81;, + 3;82,84,83;, + 3;84,85,83;, + 3;84,86,85;, + 3;86,87,85;, + 3;86,88,87;, + 3;88,89,87;, + 3;88,90,89;, + 3;90,91,89;, + 3;90,92,91;, + 3;92,93,91;, + 3;92,94,93;, + 3;94,95,93;, + 3;94,96,95;, + 3;96,97,95;, + 3;96,98,97;, + 3;98,99,97;, + 3;98,100,99;, + 3;100,101,99;, + 3;100,102,101;, + 3;102,103,101;, + 3;102,104,103;, + 3;105,103,104;, + 3;105,106,103;, + 3;105,107,106;, + 3;105,108,107;, + 3;108,109,107;, + 3;108,110,109;, + 3;110,111,109;, + 3;110,112,111;, + 3;112,113,111;, + 3;112,114,113;, + 3;114,23,113;, + 3;114,24,23;, + 3;23,22,113;, + 3;113,22,115;, + 3;22,116,115;, + 3;113,115,111;, + 3;111,115,117;, + 3;115,118,117;, + 3;111,117,109;, + 3;109,117,119;, + 3;117,120,119;, + 3;109,119,107;, + 3;107,119,121;, + 3;119,122,121;, + 3;107,121,106;, + 3;106,121,123;, + 3;121,124,123;, + 3;106,123,103;, + 3;103,123,125;, + 3;123,126,125;, + 3;103,125,101;, + 3;101,125,127;, + 3;125,128,127;, + 3;101,127,99;, + 3;99,127,129;, + 3;127,130,129;, + 3;99,129,97;, + 3;97,129,131;, + 3;129,132,131;, + 3;97,131,95;, + 3;131,93,95;, + 3;131,133,93;, + 3;134,133,131;, + 3;133,91,93;, + 3;133,135,91;, + 3;136,135,133;, + 3;135,89,91;, + 3;135,137,89;, + 3;138,137,135;, + 3;137,87,89;, + 3;137,139,87;, + 3;140,139,137;, + 3;139,85,87;, + 3;139,141,85;, + 3;142,141,139;, + 3;141,83,85;, + 3;141,143,83;, + 3;144,143,141;, + 3;143,81,83;, + 3;143,145,81;, + 3;146,145,143;, + 3;145,79,81;, + 3;145,147,79;, + 3;148,147,145;, + 3;147,77,79;, + 3;147,149,77;, + 3;150,149,147;, + 3;149,75,77;, + 3;149,151,75;, + 3;152,151,149;, + 3;151,73,75;, + 3;151,153,73;, + 3;154,153,151;, + 3;153,71,73;, + 3;153,155,71;, + 3;156,155,153;, + 3;157,155,158;, + 3;157,71,155;, + 3;157,69,71;, + 3;159,69,157;, + 3;159,157,160;, + 3;159,67,69;, + 3;161,67,159;, + 3;161,159,162;, + 3;161,65,67;, + 3;163,65,161;, + 3;163,161,164;, + 3;163,63,65;, + 3;165,63,163;, + 3;165,163,166;, + 3;165,61,63;, + 3;167,61,165;, + 3;167,165,168;, + 3;167,59,61;, + 3;169,59,167;, + 3;169,167,170;, + 3;169,57,59;, + 3;171,57,169;, + 3;171,169,172;, + 3;171,55,57;, + 3;173,55,171;, + 3;173,171,174;, + 3;173,53,55;, + 3;175,53,173;, + 3;175,173,176;, + 3;176,177,175;, + 3;177,51,175;, + 3;175,51,53;, + 3;177,49,51;, + 3;47,49,177;, + 3;47,177,178;, + 3;178,177,179;, + 3;45,47,178;, + 3;45,178,180;, + 3;180,178,181;, + 3;43,45,180;, + 3;43,180,182;, + 3;182,180,183;, + 3;41,43,182;, + 3;41,182,184;, + 3;184,182,185;, + 3;39,41,184;, + 3;39,184,186;, + 3;186,184,187;, + 3;37,39,186;, + 3;37,186,188;, + 3;188,186,189;, + 3;35,37,188;, + 3;35,188,190;, + 3;190,188,191;, + 3;33,35,190;, + 3;33,190,192;, + 3;192,190,193;, + 3;31,33,192;, + 3;31,192,194;, + 3;194,192,195;, + 3;29,31,194;, + 3;29,194,196;, + 3;196,194,197;, + 3;27,29,196;, + 3;27,196,198;, + 3;198,196,199;, + 3;18,27,198;, + 3;18,198,19;, + 3;19,198,200;, + 3;201,202,4;, + 3;202,203,4;, + 3;4,203,204;, + 3;4,204,205;, + 3;205,204,206;, + 3;206,207,205;, + 3;206,208,207;, + 3;208,209,207;, + 3;209,210,207;, + 3;209,211,210;, + 3;211,212,210;, + 3;212,213,210;, + 3;212,214,213;, + 3;214,215,213;, + 3;215,216,213;, + 3;215,217,216;, + 3;218,216,217;, + 3;218,219,216;, + 3;220,219,218;, + 3;221,219,220;, + 3;221,222,219;, + 3;223,222,221;, + 3;224,222,223;, + 3;225,222,224;, + 3;225,226,222;, + 3;226,225,227;, + 3;228,226,227;, + 3;228,227,229;, + 3;230,228,229;, + 3;231,228,230;, + 3;232,228,231;, + 3;233,232,231;, + 3;234,232,233;, + 3;235,232,234;, + 3;235,236,232;, + 3;232,236,228;, + 3;236,237,228;, + 3;228,237,226;, + 3;226,237,238;, + 3;226,238,222;, + 3;222,238,239;, + 3;222,239,219;, + 3;239,240,219;, + 3;239,241,240;, + 3;238,241,239;, + 3;238,242,241;, + 3;237,242,238;, + 3;237,243,242;, + 3;236,243,237;, + 3;236,244,243;, + 3;235,244,236;, + 3;235,245,244;, + 3;245,235,246;, + 3;246,235,247;, + 3;247,235,234;, + 3;248,247,234;, + 3;249,247,248;, + 3;250,249,248;, + 3;251,249,250;, + 3;252,249,251;, + 3;253,249,252;, + 3;254,253,252;, + 3;254,252,255;, + 3;254,255,256;, + 3;257,254,256;, + 3;257,256,258;, + 3;257,258,32;, + 3;259,257,32;, + 3;259,32,260;, + 3;259,260,28;, + 3;261,259,28;, + 3;261,28,262;, + 3;261,262,25;, + 3;261,25,263;, + 3;263,25,264;, + 3;263,264,114;, + 3;263,114,265;, + 3;265,114,266;, + 3;265,266,110;, + 3;265,110,267;, + 3;267,110,268;, + 3;267,268,269;, + 3;267,269,270;, + 3;269,271,270;, + 3;269,272,271;, + 3;272,273,271;, + 3;273,274,271;, + 3;271,274,0;, + 3;274,275,0;, + 3;249,246,247;, + 3;276,246,249;, + 3;253,276,249;, + 3;277,276,253;, + 3;277,278,276;, + 3;278,246,276;, + 3;278,245,246;, + 3;279,245,278;, + 3;279,280,245;, + 3;245,280,244;, + 3;280,281,244;, + 3;244,281,243;, + 3;243,281,242;, + 3;242,281,282;, + 3;242,282,241;, + 3;241,282,240;, + 3;240,282,283;, + 3;282,284,283;, + 3;283,284,285;, + 3;286,283,285;, + 3;287,283,286;, + 3;240,283,287;, + 3;219,240,287;, + 3;219,287,216;, + 3;213,216,287;, + 3;210,213,287;, + 3;210,287,288;, + 3;288,287,286;, + 3;289,288,286;, + 3;207,288,289;, + 3;207,210,288;, + 3;290,207,289;, + 3;205,207,290;, + 3;291,205,290;, + 3;4,205,291;, + 3;292,4,291;, + 3;293,4,292;, + 3;0,293,292;, + 3;0,292,294;, + 3;271,0,294;, + 3;270,271,294;, + 3;295,270,294;, + 3;296,270,295;, + 3;296,267,270;, + 3;297,267,296;, + 3;297,265,267;, + 3;298,265,297;, + 3;298,263,265;, + 3;299,263,298;, + 3;299,261,263;, + 3;299,300,261;, + 3;300,259,261;, + 3;300,301,259;, + 3;301,257,259;, + 3;301,254,257;, + 3;301,302,254;, + 3;302,253,254;, + 3;302,277,253;, + 3;303,277,302;, + 3;303,278,277;, + 3;303,279,278;, + 3;304,279,303;, + 3;304,305,279;, + 3;305,280,279;, + 3;280,305,306;, + 3;280,306,281;, + 3;281,306,282;, + 3;282,306,284;, + 3;306,307,284;, + 3;305,307,306;, + 3;308,307,305;, + 3;308,305,309;, + 3;310,308,309;, + 3;311,308,310;, + 3;311,312,308;, + 3;312,313,308;, + 3;308,313,307;, + 3;307,313,314;, + 3;313,315,314;, + 3;313,312,315;, + 3;312,316,315;, + 3;317,316,312;, + 3;317,312,311;, + 3;318,317,311;, + 3;319,317,318;, + 3;319,320,317;, + 3;317,320,316;, + 3;320,321,316;, + 3;316,321,322;, + 3;315,316,322;, + 3;315,322,323;, + 3;315,323,324;, + 3;314,315,324;, + 3;314,324,325;, + 3;307,314,325;, + 3;307,325,326;, + 3;307,326,285;, + 3;327,285,326;, + 3;286,285,327;, + 3;328,286,327;, + 3;289,286,328;, + 3;329,289,328;, + 3;290,289,329;, + 3;291,290,329;, + 3;291,329,330;, + 3;330,329,328;, + 3;330,328,331;, + 3;331,328,332;, + 3;328,327,332;, + 3;327,326,332;, + 3;332,326,333;, + 3;333,326,334;, + 3;334,326,335;, + 3;335,326,325;, + 3;335,325,336;, + 3;325,337,336;, + 3;325,324,337;, + 3;324,338,337;, + 3;324,323,338;, + 3;323,339,338;, + 3;323,340,339;, + 3;323,341,340;, + 3;322,341,323;, + 3;322,342,341;, + 3;321,342,322;, + 3;321,343,342;, + 3;320,343,321;, + 3;320,344,343;, + 3;345,344,320;, + 3;345,343,344;, + 3;346,343,345;, + 3;343,346,347;, + 3;343,347,348;, + 3;342,343,348;, + 3;342,348,341;, + 3;341,348,340;, + 3;340,348,349;, + 3;340,349,350;, + 3;339,340,350;, + 3;339,350,351;, + 3;351,350,352;, + 3;351,352,353;, + 3;352,354,353;, + 3;355,353,354;, + 3;355,354,356;, + 3;357,355,356;, + 3;358,357,356;, + 3;358,356,359;, + 3;360,358,359;, + 3;360,359,361;, + 3;362,360,361;, + 3;362,361,363;, + 3;364,362,363;, + 3;364,363,365;, + 3;364,365,366;, + 3;366,367,364;, + 3;368,367,366;, + 3;369,367,368;, + 3;369,370,367;, + 3;371,370,369;, + 3;371,372,370;, + 3;373,372,371;, + 3;373,374,372;, + 3;375,374,373;, + 3;375,376,374;, + 3;377,376,375;, + 3;377,378,376;, + 3;377,379,378;, + 3;378,379,380;, + 3;379,381,380;, + 3;379,382,381;, + 3;382,383,381;, + 3;382,384,383;, + 3;384,385,383;, + 3;384,386,385;, + 3;387,386,384;, + 3;387,388,386;, + 3;387,345,388;, + 3;389,345,387;, + 3;389,390,345;, + 3;390,346,345;, + 3;338,339,351;, + 3;338,351,391;, + 3;351,353,391;, + 3;355,391,353;, + 3;355,336,391;, + 3;337,391,336;, + 3;337,338,391;, + 3;345,320,319;, + 3;388,345,319;, + 3;388,319,392;, + 3;386,388,392;, + 3;386,392,385;, + 3;385,392,393;, + 3;383,385,393;, + 3;383,393,381;, + 3;381,393,394;, + 3;380,381,394;, + 3;378,380,394;, + 3;378,394,376;, + 3;394,395,376;, + 3;376,395,396;, + 3;376,396,374;, + 3;374,396,372;, + 3;372,396,397;, + 3;372,397,370;, + 3;370,397,398;, + 3;370,398,367;, + 3;367,398,364;, + 3;398,399,364;, + 3;399,362,364;, + 3;399,400,362;, + 3;362,400,360;, + 3;400,358,360;, + 3;400,357,358;, + 3;400,355,357;, + 3;401,355,400;, + 3;401,336,355;, + 3;335,336,401;, + 3;334,335,401;, + 3;334,401,402;, + 3;402,401,400;, + 3;402,400,399;, + 3;403,402,399;, + 3;403,399,398;, + 3;398,397,403;, + 3;397,404,403;, + 3;404,402,403;, + 3;404,334,402;, + 3;333,334,404;, + 3;405,333,404;, + 3;397,405,404;, + 3;396,405,397;, + 3;396,406,405;, + 3;395,406,396;, + 3;406,395,407;, + 3;395,408,407;, + 3;394,408,395;, + 3;394,409,408;, + 3;394,393,409;, + 3;393,311,409;, + 3;393,318,311;, + 3;392,318,393;, + 3;392,319,318;, + 3;409,311,310;, + 3;409,310,407;, + 3;408,409,407;, + 3;407,310,309;, + 3;407,309,410;, + 3;406,407,410;, + 3;406,410,411;, + 3;406,411,405;, + 3;405,411,333;, + 3;411,412,333;, + 3;411,410,412;, + 3;410,413,412;, + 3;410,309,413;, + 3;309,414,413;, + 3;309,304,414;, + 3;414,304,303;, + 3;414,303,415;, + 3;415,303,302;, + 3;415,302,301;, + 3;415,301,300;, + 3;416,415,300;, + 3;416,300,299;, + 3;416,299,298;, + 3;416,298,417;, + 3;417,298,297;, + 3;417,297,296;, + 3;417,296,418;, + 3;418,296,295;, + 3;418,295,419;, + 3;295,294,419;, + 3;294,420,419;, + 3;294,292,420;, + 3;292,291,420;, + 3;420,291,330;, + 3;420,330,331;, + 3;419,420,331;, + 3;419,331,421;, + 3;421,331,332;, + 3;421,332,422;, + 3;422,332,333;, + 3;333,412,422;, + 3;422,412,421;, + 3;412,418,421;, + 3;418,419,421;, + 3;412,417,418;, + 3;413,417,412;, + 3;413,416,417;, + 3;413,415,416;, + 3;413,414,415;, + 3;423,424,425;, + 3;423,426,424;, + 3;427,426,423;, + 3;428,427,423;, + 3;429,427,428;, + 3;430,429,428;, + 3;431,432,433;, + 3;431,433,434;, + 3;435,431,434;, + 3;436,435,434;, + 3;437,435,436;, + 3;436,434,438;, + 3;436,438,439;, + 3;440,436,439;, + 3;441,440,439;, + 3;441,439,442;, + 3;442,439,443;, + 3;439,438,443;, + 3;438,444,443;, + 3;438,434,444;, + 3;434,445,444;, + 3;434,433,445;, + 3;445,433,446;, + 3;433,447,446;, + 3;446,447,448;, + 3;446,448,449;, + 3;446,449,450;, + 3;446,450,451;, + 3;451,450,452;, + 3;451,452,453;, + 3;451,453,454;, + 3;451,454,455;, + 3;456,451,455;, + 3;456,455,457;, + 3;456,457,458;, + 3;456,458,459;, + 3;424,456,459;, + 3;426,456,424;, + 3;426,460,456;, + 3;427,460,426;, + 3;461,460,427;, + 3;429,461,427;, + 3;429,462,461;, + 3;463,462,429;, + 3;464,462,463;, + 3;464,465,462;, + 3;465,466,462;, + 3;465,467,466;, + 3;467,468,466;, + 3;469,466,468;, + 3;469,443,466;, + 3;442,443,469;, + 3;445,446,451;, + 3;445,451,470;, + 3;456,470,451;, + 3;460,470,456;, + 3;471,470,460;, + 3;461,471,460;, + 3;461,472,471;, + 3;462,472,461;, + 3;462,466,472;, + 3;443,472,466;, + 3;443,471,472;, + 3;443,444,471;, + 3;444,470,471;, + 3;444,445,470;, + 3;473,474,475;, + 3;476,477,478;, + 3;479,480,481;, + 3;482,475,483;, + 3;484,485,486;, + 3;487,488,484;, + 3;489,490,487;, + 3;491,492,493;, + 3;489,494,495;, + 3;494,491,496;, + 3;497,498,499;, + 3;499,498,500;, + 3;499,500,501;, + 3;500,502,501;, + 3;502,503,501;, + 3;501,503,504;, + 3;503,505,504;, + 3;504,505,506;, + 3;504,506,507;, + 3;507,506,508;, + 3;508,509,507;, + 3;507,509,510;, + 3;509,511,510;, + 3;510,511,512;, + 3;511,513,512;, + 3;513,514,512;, + 3;514,515,512;, + 3;514,516,515;, + 3;516,517,515;, + 3;516,518,517;, + 3;518,519,517;, + 3;519,520,517;, + 3;519,521,520;, + 3;521,522,520;, + 3;522,523,520;, + 3;522,524,523;, + 3;525,523,524;, + 3;525,526,523;, + 3;527,526,525;, + 3;528,526,527;, + 3;528,529,526;, + 3;530,529,528;, + 3;531,529,530;, + 3;531,532,529;, + 3;533,532,531;, + 3;534,532,533;, + 3;534,535,532;, + 3;536,535,534;, + 3;537,535,536;, + 3;538,535,537;, + 3;535,538,532;, + 3;538,539,532;, + 3;532,539,540;, + 3;532,540,529;, + 3;529,540,541;, + 3;529,541,526;, + 3;526,541,542;, + 3;526,542,543;, + 3;526,543,523;, + 3;520,523,543;, + 3;520,543,544;, + 3;517,520,544;, + 3;517,544,545;, + 3;545,544,546;, + 3;544,547,546;, + 3;543,547,544;, + 3;542,547,543;, + 3;542,548,547;, + 3;542,549,548;, + 3;541,549,542;, + 3;541,550,549;, + 3;540,550,541;, + 3;540,551,550;, + 3;552,551,540;, + 3;539,552,540;, + 3;553,552,539;, + 3;538,553,539;, + 3;554,553,538;, + 3;555,553,554;, + 3;555,556,553;, + 3;557,556,555;, + 3;557,558,556;, + 3;559,558,557;, + 3;559,557,560;, + 3;557,555,560;, + 3;560,555,561;, + 3;561,555,554;, + 3;561,554,562;, + 3;562,554,538;, + 3;562,538,563;, + 3;563,538,537;, + 3;564,562,563;, + 3;565,562,564;, + 3;565,566,562;, + 3;566,561,562;, + 3;566,560,561;, + 3;567,560,566;, + 3;567,559,560;, + 3;568,559,567;, + 3;569,559,568;, + 3;569,570,559;, + 3;570,558,559;, + 3;570,571,558;, + 3;570,572,571;, + 3;573,572,570;, + 3;573,570,574;, + 3;574,570,569;, + 3;575,574,569;, + 3;575,569,568;, + 3;576,575,568;, + 3;577,575,576;, + 3;577,574,575;, + 3;577,578,574;, + 3;578,573,574;, + 3;578,572,573;, + 3;578,579,572;, + 3;580,579,578;, + 3;581,580,578;, + 3;577,581,578;, + 3;582,581,577;, + 3;582,577,576;, + 3;583,582,576;, + 3;584,582,583;, + 3;584,581,582;, + 3;584,585,581;, + 3;585,580,581;, + 3;585,586,580;, + 3;580,586,579;, + 3;586,587,579;, + 3;579,587,588;, + 3;572,579,588;, + 3;588,589,572;, + 3;571,572,589;, + 3;571,589,590;, + 3;571,590,558;, + 3;558,590,591;, + 3;558,591,556;, + 3;556,591,592;, + 3;556,592,553;, + 3;553,592,593;, + 3;592,594,593;, + 3;591,594,592;, + 3;591,595,594;, + 3;591,596,595;, + 3;590,596,591;, + 3;589,596,590;, + 3;589,597,596;, + 3;596,597,595;, + 3;595,597,594;, + 3;594,597,598;, + 3;594,598,593;, + 3;593,598,599;, + 3;553,593,599;, + 3;553,599,552;, + 3;552,599,551;, + 3;599,600,551;, + 3;599,598,600;, + 3;598,601,600;, + 3;597,601,598;, + 3;602,601,597;, + 3;589,602,597;, + 3;603,602,589;, + 3;588,603,589;, + 3;604,603,588;, + 3;604,605,603;, + 3;603,605,602;, + 3;605,606,602;, + 3;602,606,607;, + 3;602,607,601;, + 3;601,607,608;, + 3;600,601,608;, + 3;551,600,608;, + 3;551,608,609;, + 3;551,609,550;, + 3;550,609,610;, + 3;550,610,549;, + 3;549,610,611;, + 3;549,611,612;, + 3;549,612,548;, + 3;548,612,613;, + 3;614,548,613;, + 3;547,548,614;, + 3;546,547,614;, + 3;546,614,615;, + 3;615,614,613;, + 3;615,613,616;, + 3;616,613,617;, + 3;617,613,612;, + 3;618,617,612;, + 3;611,618,612;, + 3;619,618,611;, + 3;619,611,610;, + 3;620,619,610;, + 3;609,620,610;, + 3;609,608,620;, + 3;607,620,608;, + 3;607,621,620;, + 3;606,621,607;, + 3;622,621,606;, + 3;605,622,606;, + 3;623,622,605;, + 3;623,624,622;, + 3;624,625,622;, + 3;622,625,621;, + 3;625,626,621;, + 3;624,626,625;, + 3;627,626,624;, + 3;628,627,624;, + 3;628,629,627;, + 3;629,630,627;, + 3;629,631,630;, + 3;631,632,630;, + 3;633,632,631;, + 3;633,634,632;, + 3;635,634,633;, + 3;635,636,634;, + 3;636,637,634;, + 3;636,638,637;, + 3;639,638,636;, + 3;639,640,638;, + 3;641,640,639;, + 3;641,642,640;, + 3;643,642,641;, + 3;643,644,642;, + 3;645,644,643;, + 3;646,645,643;, + 3;645,646,647;, + 3;648,645,647;, + 3;649,645,648;, + 3;650,645,649;, + 3;650,644,645;, + 3;650,651,644;, + 3;644,651,642;, + 3;642,651,652;, + 3;642,652,640;, + 3;652,653,640;, + 3;652,654,653;, + 3;651,654,652;, + 3;651,655,654;, + 3;655,651,650;, + 3;656,655,650;, + 3;656,650,657;, + 3;657,650,649;, + 3;658,657,649;, + 3;658,649,659;, + 3;649,648,659;, + 3;659,648,660;, + 3;659,660,661;, + 3;662,659,661;, + 3;662,661,663;, + 3;664,662,663;, + 3;665,662,664;, + 3;665,658,662;, + 3;658,659,662;, + 3;627,630,626;, + 3;630,666,626;, + 3;630,632,666;, + 3;632,667,666;, + 3;634,667,632;, + 3;634,668,667;, + 3;637,668,634;, + 3;637,669,668;, + 3;638,669,637;, + 3;638,670,669;, + 3;640,670,638;, + 3;640,653,670;, + 3;653,671,670;, + 3;670,671,672;, + 3;670,672,669;, + 3;669,672,673;, + 3;669,673,668;, + 3;668,673,667;, + 3;667,673,674;, + 3;667,674,666;, + 3;675,666,674;, + 3;626,666,675;, + 3;626,675,621;, + 3;621,675,676;, + 3;675,674,676;, + 3;676,674,617;, + 3;674,673,617;, + 3;673,616,617;, + 3;677,616,673;, + 3;672,677,673;, + 3;672,678,677;, + 3;679,678,672;, + 3;671,679,672;, + 3;653,679,671;, + 3;653,680,679;, + 3;681,680,653;, + 3;654,681,653;, + 3;655,681,654;, + 3;655,682,681;, + 3;683,682,655;, + 3;683,655,656;, + 3;684,683,656;, + 3;684,656,657;, + 3;685,684,657;, + 3;685,657,686;, + 3;686,657,658;, + 3;686,658,665;, + 3;687,686,665;, + 3;688,686,687;, + 3;688,685,686;, + 3;688,689,685;, + 3;689,684,685;, + 3;689,690,684;, + 3;690,691,684;, + 3;691,683,684;, + 3;691,692,683;, + 3;691,693,692;, + 3;693,694,692;, + 3;692,694,683;, + 3;694,695,683;, + 3;695,696,683;, + 3;683,696,682;, + 3;696,697,682;, + 3;682,697,698;, + 3;682,698,681;, + 3;681,698,699;, + 3;681,699,680;, + 3;680,699,700;, + 3;680,700,679;, + 3;700,701,679;, + 3;679,701,702;, + 3;679,702,678;, + 3;678,702,703;, + 3;678,703,677;, + 3;677,703,704;, + 3;677,704,616;, + 3;704,615,616;, + 3;705,615,704;, + 3;546,615,705;, + 3;706,546,705;, + 3;545,546,706;, + 3;707,545,706;, + 3;517,545,707;, + 3;708,517,707;, + 3;515,517,708;, + 3;512,515,708;, + 3;512,708,709;, + 3;709,708,710;, + 3;708,707,710;, + 3;707,706,710;, + 3;710,706,711;, + 3;706,705,711;, + 3;711,705,703;, + 3;705,704,703;, + 3;711,703,702;, + 3;712,711,702;, + 3;710,711,712;, + 3;710,712,713;, + 3;714,710,713;, + 3;709,710,714;, + 3;715,709,714;, + 3;716,709,715;, + 3;716,512,709;, + 3;510,512,716;, + 3;717,510,716;, + 3;507,510,717;, + 3;718,507,717;, + 3;718,504,507;, + 3;501,504,718;, + 3;719,501,718;, + 3;499,501,719;, + 3;720,499,719;, + 3;720,497,499;, + 3;721,497,720;, + 3;721,722,497;, + 3;723,722,721;, + 3;723,724,722;, + 3;725,724,723;, + 3;725,726,724;, + 3;725,727,726;, + 3;727,728,726;, + 3;727,729,728;, + 3;729,730,728;, + 3;729,731,730;, + 3;731,732,730;, + 3;731,733,732;, + 3;733,734,732;, + 3;732,734,480;, + 3;734,735,480;, + 3;734,736,735;, + 3;735,736,737;, + 3;737,736,738;, + 3;736,565,738;, + 3;736,566,565;, + 3;739,566,736;, + 3;734,739,736;, + 3;733,739,734;, + 3;740,739,733;, + 3;741,740,733;, + 3;741,733,731;, + 3;742,741,731;, + 3;742,731,729;, + 3;743,742,729;, + 3;743,729,727;, + 3;744,743,727;, + 3;744,727,725;, + 3;744,725,723;, + 3;744,723,745;, + 3;745,723,721;, + 3;745,721,746;, + 3;746,721,720;, + 3;746,720,747;, + 3;747,720,719;, + 3;747,719,748;, + 3;748,719,749;, + 3;749,719,750;, + 3;719,718,750;, + 3;750,718,751;, + 3;718,717,751;, + 3;752,751,717;, + 3;750,751,752;, + 3;753,750,752;, + 3;749,750,753;, + 3;749,753,754;, + 3;754,753,755;, + 3;755,753,752;, + 3;752,715,755;, + 3;752,717,715;, + 3;717,716,715;, + 3;739,567,566;, + 3;756,567,739;, + 3;568,567,756;, + 3;757,568,756;, + 3;576,568,757;, + 3;583,576,757;, + 3;583,757,741;, + 3;741,757,740;, + 3;757,756,740;, + 3;740,756,739;, + 3;712,702,701;, + 3;758,712,701;, + 3;713,712,758;, + 3;713,758,759;, + 3;759,758,700;, + 3;700,758,701;, + 3;699,759,700;, + 3;760,759,699;, + 3;698,760,699;, + 3;697,760,698;, + 3;697,761,760;, + 3;762,761,697;, + 3;696,762,697;, + 3;755,762,696;, + 3;755,715,762;, + 3;762,715,761;, + 3;715,763,761;, + 3;715,714,763;, + 3;714,713,763;, + 3;763,713,759;, + 3;760,763,759;, + 3;761,763,760;, + 3;695,755,696;, + 3;754,755,695;, + 3;694,754,695;, + 3;764,754,694;, + 3;764,749,754;, + 3;765,749,764;, + 3;765,764,766;, + 3;766,764,694;, + 3;693,766,694;, + 3;691,766,693;, + 3;767,766,691;, + 3;767,765,766;, + 3;767,768,765;, + 3;768,749,765;, + 3;768,769,749;, + 3;769,748,749;, + 3;769,747,748;, + 3;770,747,769;, + 3;770,746,747;, + 3;771,746,770;, + 3;771,745,746;, + 3;744,745,771;, + 3;772,744,771;, + 3;773,744,772;, + 3;773,743,744;, + 3;773,774,743;, + 3;775,774,773;, + 3;775,773,772;, + 3;775,772,776;, + 3;776,772,777;, + 3;777,772,778;, + 3;772,771,778;, + 3;778,771,770;, + 3;778,770,779;, + 3;779,770,769;, + 3;779,769,768;, + 3;780,779,768;, + 3;780,768,767;, + 3;690,780,767;, + 3;767,691,690;, + 3;676,617,618;, + 3;619,676,618;, + 3;621,676,619;, + 3;621,619,620;, + 3;781,780,690;, + 3;781,779,780;, + 3;782,779,781;, + 3;782,778,779;, + 3;777,778,782;, + 3;777,782,783;, + 3;783,782,781;, + 3;783,781,689;, + 3;781,690,689;, + 3;783,689,688;, + 3;784,783,688;, + 3;777,783,784;, + 3;776,777,784;, + 3;785,776,784;, + 3;785,775,776;, + 3;786,775,785;, + 3;786,787,775;, + 3;775,787,774;, + 3;787,788,774;, + 3;774,788,743;, + 3;788,742,743;, + 3;788,789,742;, + 3;789,741,742;, + 3;789,790,741;, + 3;790,583,741;, + 3;791,583,790;, + 3;791,584,583;, + 3;791,585,584;, + 3;791,792,585;, + 3;793,792,791;, + 3;793,791,790;, + 3;793,790,789;, + 3;794,793,789;, + 3;788,794,789;, + 3;795,794,788;, + 3;787,795,788;, + 3;787,796,795;, + 3;786,796,787;, + 3;786,785,796;, + 3;796,785,797;, + 3;785,784,797;, + 3;784,688,797;, + 3;797,688,798;, + 3;798,688,799;, + 3;688,687,799;, + 3;687,800,799;, + 3;687,665,800;, + 3;800,665,664;, + 3;800,664,801;, + 3;802,800,801;, + 3;799,800,802;, + 3;803,799,802;, + 3;798,799,803;, + 3;804,798,803;, + 3;804,797,798;, + 3;796,797,804;, + 3;796,804,805;, + 3;796,805,795;, + 3;795,805,806;, + 3;795,806,794;, + 3;794,806,793;, + 3;793,806,792;, + 3;806,807,792;, + 3;806,805,807;, + 3;805,808,807;, + 3;805,809,808;, + 3;805,810,809;, + 3;804,810,805;, + 3;803,810,804;, + 3;803,811,810;, + 3;803,812,811;, + 3;803,802,812;, + 3;802,801,812;, + 3;812,801,813;, + 3;812,813,811;, + 3;811,813,814;, + 3;811,814,815;, + 3;810,811,815;, + 3;810,815,809;, + 3;809,815,816;, + 3;809,816,808;, + 3;808,816,817;, + 3;808,817,818;, + 3;807,808,818;, + 3;807,818,819;, + 3;807,819,585;, + 3;792,807,585;, + 3;585,819,586;, + 3;819,818,586;, + 3;818,820,586;, + 3;818,817,820;, + 3;817,821,820;, + 3;817,822,821;, + 3;822,823,821;, + 3;822,824,823;, + 3;825,824,822;, + 3;816,825,822;, + 3;816,822,817;, + 3;815,825,816;, + 3;815,814,825;, + 3;820,821,826;, + 3;826,821,827;, + 3;826,827,828;, + 3;828,827,829;, + 3;828,829,830;, + 3;830,829,831;, + 3;831,832,830;, + 3;831,833,832;, + 3;833,834,832;, + 3;832,834,835;, + 3;834,623,835;, + 3;835,623,605;, + 3;832,835,605;, + 3;832,605,604;, + 3;830,832,604;, + 3;830,604,836;, + 3;836,604,588;, + 3;587,836,588;, + 3;587,837,836;, + 3;837,828,836;, + 3;836,828,830;, + 3;838,828,837;, + 3;838,826,828;, + 3;820,826,838;, + 3;586,820,838;, + 3;586,838,587;, + 3;587,838,837;, + 3;834,839,623;, + 3;840,839,834;, + 3;840,841,839;, + 3;841,628,839;, + 3;839,628,624;, + 3;839,624,623;, + 3;842,843,844;, + 3;845,846,847;, + 3;848,849,850;, + 3;851,849,848;, + 3;852,849,851;, + 3;852,851,853;, + 3;854,852,853;, + 3;854,855,852;, + 3;855,856,852;, + 3;852,856,849;, + 3;849,856,857;, + 3;856,858,857;, + 3;859,858,856;, + 3;855,859,856;, + 3;855,860,859;, + 3;861,860,855;, + 3;862,861,855;, + 3;862,855,854;, + 3;863,862,854;, + 3;863,864,862;, + 3;864,861,862;, + 3;864,865,861;, + 3;866,865,864;, + 3;866,864,863;, + 3;867,866,863;, + 3;867,863,868;, + 3;863,854,868;, + 3;854,853,868;, + 3;868,853,869;, + 3;869,853,870;, + 3;870,853,871;, + 3;853,872,871;, + 3;871,872,873;, + 3;872,874,873;, + 3;874,875,873;, + 3;869,870,876;, + 3;869,876,877;, + 3;877,876,878;, + 3;877,878,879;, + 3;879,878,880;, + 3;880,878,881;, + 3;880,881,882;, + 3;882,881,883;, + 3;883,881,884;, + 3;883,884,885;, + 3;885,884,886;, + 3;885,886,887;, + 3;886,888,887;, + 3;887,888,889;, + 3;888,890,889;, + 3;889,890,891;, + 3;891,890,892;, + 3;890,893,892;, + 3;892,893,894;, + 3;893,895,894;, + 3;894,895,896;, + 3;895,897,896;, + 3;895,898,897;, + 3;898,899,897;, + 3;898,900,899;, + 3;900,901,899;, + 3;900,902,901;, + 3;901,902,903;, + 3;902,904,903;, + 3;902,905,904;, + 3;904,905,906;, + 3;905,907,906;, + 3;905,908,907;, + 3;908,909,907;, + 3;910,909,908;, + 3;873,910,908;, + 3;911,912,913;, + 3;912,914,913;, + 3;914,915,913;, + 3;914,916,915;, + 3;914,917,916;, + 3;918,917,914;, + 3;919,918,914;, + 3;920,918,919;, + 3;921,920,919;, + 3;922,920,921;, + 3;922,923,920;, + 3;923,924,920;, + 3;924,925,920;, + 3;920,925,918;, + 3;925,926,918;, + 3;918,926,917;, + 3;926,927,917;, + 3;917,927,916;, + 3;927,928,916;, + 3;916,928,929;, + 3;916,929,915;, + 3;915,929,930;, + 3;929,931,930;, + 3;929,932,931;, + 3;933,932,929;, + 3;928,933,929;, + 3;928,934,933;, + 3;928,935,934;, + 3;936,935,928;, + 3;927,936,928;, + 3;937,936,927;, + 3;926,937,927;, + 3;938,937,926;, + 3;938,939,937;, + 3;940,939,938;, + 3;941,940,938;, + 3;941,942,940;, + 3;943,942,941;, + 3;944,943,941;, + 3;944,945,943;, + 3;946,945,944;, + 3;946,947,945;, + 3;948,947,946;, + 3;949,948,946;, + 3;950,948,949;, + 3;951,950,949;, + 3;951,952,950;, + 3;953,952,951;, + 3;954,953,951;, + 3;955,953,954;, + 3;955,956,953;, + 3;953,956,952;, + 3;956,957,952;, + 3;952,957,958;, + 3;952,958,950;, + 3;958,948,950;, + 3;958,959,948;, + 3;959,947,948;, + 3;959,960,947;, + 3;947,960,945;, + 3;945,960,961;, + 3;945,961,943;, + 3;943,961,942;, + 3;942,961,962;, + 3;942,962,940;, + 3;940,962,939;, + 3;939,962,963;, + 3;939,963,937;, + 3;937,963,936;, + 3;963,964,936;, + 3;936,964,935;, + 3;935,964,934;, + 3;964,965,934;, + 3;934,965,933;, + 3;933,965,966;, + 3;933,966,932;, + 3;966,967,932;, + 3;968,967,966;, + 3;965,968,966;, + 3;969,968,965;, + 3;964,969,965;, + 3;970,969,964;, + 3;963,970,964;, + 3;962,970,963;, + 3;962,971,970;, + 3;961,971,962;, + 3;961,972,971;, + 3;960,972,961;, + 3;973,972,960;, + 3;959,973,960;, + 3;974,973,959;, + 3;974,975,973;, + 3;975,976,973;, + 3;973,976,972;, + 3;976,977,972;, + 3;972,977,971;, + 3;971,977,970;, + 3;977,969,970;, + 3;977,978,969;, + 3;979,978,977;, + 3;976,979,977;, + 3;980,979,976;, + 3;975,980,976;, + 3;981,980,975;, + 3;982,981,975;, + 3;982,975,974;, + 3;983,982,974;, + 3;983,974,984;, + 3;984,974,959;, + 3;985,984,959;, + 3;985,959,958;, + 3;957,985,958;, + 3;957,986,985;, + 3;987,986,957;, + 3;956,987,957;, + 3;988,987,956;, + 3;955,988,956;, + 3;989,988,955;, + 3;989,955,990;, + 3;990,955,954;, + 3;990,954,991;, + 3;992,990,991;, + 3;992,989,990;, + 3;993,989,992;, + 3;993,988,989;, + 3;993,994,988;, + 3;995,994,993;, + 3;995,993,996;, + 3;996,993,992;, + 3;996,992,997;, + 3;997,992,991;, + 3;997,991,998;, + 3;999,997,998;, + 3;999,998,1000;, + 3;1001,999,1000;, + 3;1001,1002,999;, + 3;1002,997,999;, + 3;1002,996,997;, + 3;1003,996,1002;, + 3;1003,1002,1001;, + 3;1004,1003,1001;, + 3;1004,1001,1005;, + 3;1005,1001,1000;, + 3;1005,1000,923;, + 3;1006,1005,923;, + 3;1006,1004,1005;, + 3;1007,1004,1006;, + 3;1007,1003,1004;, + 3;1008,1003,1007;, + 3;1008,1009,1003;, + 3;1009,996,1003;, + 3;1009,995,996;, + 3;1010,995,1009;, + 3;1010,1009,1008;, + 3;1011,1010,1008;, + 3;1011,1008,1012;, + 3;1012,1008,1007;, + 3;1012,1007,1013;, + 3;1013,1007,1006;, + 3;1013,1006,1014;, + 3;1014,1006,923;, + 3;1014,923,922;, + 3;1014,922,1015;, + 3;1015,922,1016;, + 3;1017,849,1018;, + 3;849,1019,1018;, + 3;857,1019,849;, + 3;857,1020,1019;, + 3;1021,1020,857;, + 3;858,1021,857;, + 3;1022,1021,858;, + 3;1022,1023,1021;, + 3;1023,1020,1021;, + 3;1023,1024,1020;, + 3;1024,1025,1020;, + 3;1020,1025,1019;, + 3;1019,1025,1026;, + 3;1019,1026,1018;, + 3;1026,1027,1018;, + 3;1026,1028,1027;, + 3;1025,1028,1026;, + 3;1025,1029,1028;, + 3;1030,1029,1025;, + 3;1024,1030,1025;, + 3;1024,1031,1030;, + 3;1031,1029,1030;, + 3;1031,1032,1029;, + 3;1029,1032,1033;, + 3;1029,1033,1028;, + 3;1028,1033,1027;, + 3;1027,1033,1034;, + 3;1034,1033,1035;, + 3;1027,1034,1035;, + 3;1036,1027,1035;, + 3;1018,1027,1036;, + 3;909,1018,1036;, + 3;850,1018,909;, + 3;1037,1038,1039;, + 3;1037,1039,1040;, + 3;1041,1037,1040;, + 3;1041,1040,1042;, + 3;1043,1041,1042;, + 3;1043,1042,1044;, + 3;1043,1044,1045;, + 3;1046,1043,1045;, + 3;1045,1047,1046;, + 3;1046,1047,1048;, + 3;1046,1048,1049;, + 3;1049,1048,1050;, + 3;1049,1050,1051;, + 3;1051,1050,1052;, + 3;1053,1051,1052;, + 3;1053,1052,1054;, + 3;1052,1055,1054;, + 3;1055,1056,1054;, + 3;1056,1057,1054;, + 3;1056,1058,1057;, + 3;1058,1059,1057;, + 3;1058,1060,1059;, + 3;1060,1061,1059;, + 3;1060,1062,1061;, + 3;1062,1063,1061;, + 3;1062,1064,1063;, + 3;1064,1065,1063;, + 3;1064,1066,1065;, + 3;1067,1065,1066;, + 3;1067,1068,1065;, + 3;1069,1068,1067;, + 3;1069,1070,1068;, + 3;1071,1072,1073;, + 3;1074,1071,1073;, + 3;1075,1071,1074;, + 3;1075,1076,1071;, + 3;1077,1076,1075;, + 3;1078,1076,1077;, + 3;1078,1079,1076;, + 3;1076,1079,1080;, + 3;1080,1071,1076;, + 3;1080,1081,1071;, + 3;1071,1081,1082;, + 3;1083,1081,1084;, + 3;1081,1085,1084;, + 3;1086,1085,1081;, + 3;1087,1086,1081;, + 3;1080,1087,1081;, + 3;1088,1087,1080;, + 3;1079,1088,1080;, + 3;1089,1088,1079;, + 3;1089,1090,1088;, + 3;1089,1091,1090;, + 3;1091,1092,1090;, + 3;1091,1093,1092;, + 3;1091,1094,1093;, + 3;1095,1094,1091;, + 3;1096,1095,1091;, + 3;1096,1091,1089;, + 3;1097,1096,1089;, + 3;1098,1096,1097;, + 3;1098,1099,1096;, + 3;1096,1099,1095;, + 3;1099,1100,1095;, + 3;1095,1100,1094;, + 3;1100,1101,1094;, + 3;1101,1102,1094;, + 3;1102,1093,1094;, + 3;1102,1103,1093;, + 3;1093,1103,1092;, + 3;1092,1103,1104;, + 3;1103,1105,1104;, + 3;1103,1106,1105;, + 3;1105,1106,1107;, + 3;1104,1105,1107;, + 3;1104,1107,1108;, + 3;1109,1104,1108;, + 3;1092,1104,1109;, + 3;1110,1092,1109;, + 3;1111,1092,1110;, + 3;1111,1110,1112;, + 3;1111,1112,1088;, + 3;1088,1112,1087;, + 3;1112,1113,1087;, + 3;1087,1113,1086;, + 3;1113,1114,1086;, + 3;1114,1085,1086;, + 3;1114,1115,1085;, + 3;1116,1115,1114;, + 3;1113,1116,1114;, + 3;1117,1116,1113;, + 3;1112,1117,1113;, + 3;1110,1117,1112;, + 3;1110,1118,1117;, + 3;1110,1109,1118;, + 3;1109,1108,1118;, + 3;1118,1108,1119;, + 3;1117,1118,1119;, + 3;1117,1119,1116;, + 3;1119,1120,1116;, + 3;1119,1121,1120;, + 3;1119,1108,1121;, + 3;1108,1122,1121;, + 3;1108,1123,1122;, + 3;1108,1107,1123;, + 3;1107,1124,1123;, + 3;1107,1106,1124;, + 3;1106,1125,1124;, + 3;1106,1126,1125;, + 3;1106,1103,1126;, + 3;1103,1127,1126;, + 3;1103,1128,1127;, + 3;1129,1128,1103;, + 3;1102,1129,1103;, + 3;1102,1130,1129;, + 3;1101,1130,1102;, + 3;1131,1130,1101;, + 3;1131,1132,1130;, + 3;1133,1132,1131;, + 3;1133,1134,1132;, + 3;1135,1134,1133;, + 3;1135,1136,1134;, + 3;1137,1136,1135;, + 3;1137,1135,1138;, + 3;1138,1135,1133;, + 3;1138,1133,1139;, + 3;1139,1133,1131;, + 3;1139,1131,1140;, + 3;1140,1131,1101;, + 3;1140,1101,1141;, + 3;1100,1141,1101;, + 3;1142,1141,1100;, + 3;1099,1142,1100;, + 3;1143,1142,1099;, + 3;1143,1144,1142;, + 3;1144,1141,1142;, + 3;1144,1145,1141;, + 3;1145,1139,1141;, + 3;1139,1140,1141;, + 3;1084,1146,1147;, + 3;1084,1148,1146;, + 3;1084,1149,1148;, + 3;1085,1149,1084;, + 3;1085,1150,1149;, + 3;1085,1151,1150;, + 3;1115,1151,1085;, + 3;1115,1152,1151;, + 3;1151,1152,1150;, + 3;1152,1153,1150;, + 3;1152,1154,1153;, + 3;1154,1155,1153;, + 3;1156,1155,1154;, + 3;1157,1156,1154;, + 3;1157,1158,1156;, + 3;1159,1158,1157;, + 3;1160,1158,1159;, + 3;1160,1161,1158;, + 3;1160,1162,1161;, + 3;1162,1163,1161;, + 3;1162,1164,1163;, + 3;1164,1165,1163;, + 3;1165,1164,1166;, + 3;1165,1166,1167;, + 3;1166,1168,1167;, + 3;1166,1169,1168;, + 3;1170,1169,1166;, + 3;1164,1170,1166;, + 3;1122,1170,1164;, + 3;1122,1164,1162;, + 3;1121,1122,1162;, + 3;1120,1121,1162;, + 3;1120,1162,1160;, + 3;1120,1160,1159;, + 3;1120,1159,1116;, + 3;1116,1159,1115;, + 3;1159,1171,1115;, + 3;1171,1159,1157;, + 3;1171,1157,1152;, + 3;1157,1154,1152;, + 3;1171,1152,1115;, + 3;1122,1123,1170;, + 3;1123,1172,1170;, + 3;1123,1124,1172;, + 3;1172,1124,1173;, + 3;1170,1172,1173;, + 3;1170,1173,1169;, + 3;1173,1174,1169;, + 3;1175,1169,1174;, + 3;1168,1169,1175;, + 3;1167,1168,1175;, + 3;1176,1167,1175;, + 3;1155,1167,1176;, + 3;1155,1176,1153;, + 3;1153,1176,1177;, + 3;1176,1175,1177;, + 3;1177,1175,1178;, + 3;1178,1175,1179;, + 3;1174,1179,1175;, + 3;1174,1180,1179;, + 3;1173,1180,1174;, + 3;1173,1181,1180;, + 3;1124,1181,1173;, + 3;1124,1125,1181;, + 3;1125,1182,1181;, + 3;1125,1126,1182;, + 3;1182,1126,1183;, + 3;1126,1184,1183;, + 3;1184,1126,1185;, + 3;1184,1185,1186;, + 3;1183,1184,1186;, + 3;1183,1186,1187;, + 3;1186,1188,1187;, + 3;1186,1185,1188;, + 3;1185,1189,1188;, + 3;1185,1190,1189;, + 3;1190,1191,1189;, + 3;1190,1192,1191;, + 3;1190,1193,1192;, + 3;1190,1194,1193;, + 3;1190,1195,1194;, + 3;1196,1195,1190;, + 3;1185,1196,1190;, + 3;1185,1197,1196;, + 3;1126,1197,1185;, + 3;1126,1198,1197;, + 3;1199,1198,1126;, + 3;1127,1199,1126;, + 3;1128,1199,1127;, + 3;1128,1200,1199;, + 3;1201,1200,1128;, + 3;1129,1201,1128;, + 3;1129,1202,1201;, + 3;1201,1202,1203;, + 3;1201,1203,1200;, + 3;1200,1203,1204;, + 3;1200,1204,1199;, + 3;1199,1204,1198;, + 3;1204,1205,1198;, + 3;1204,1206,1205;, + 3;1203,1206,1204;, + 3;1203,1207,1206;, + 3;1208,1207,1203;, + 3;1202,1208,1203;, + 3;1209,1208,1202;, + 3;1209,1202,1129;, + 3;1210,1209,1129;, + 3;1130,1210,1129;, + 3;1130,1211,1210;, + 3;1132,1211,1130;, + 3;1132,1212,1211;, + 3;1134,1212,1132;, + 3;1134,1213,1212;, + 3;1136,1213,1134;, + 3;1136,1214,1213;, + 3;1136,1215,1214;, + 3;1216,1215,1136;, + 3;1137,1216,1136;, + 3;1217,1216,1137;, + 3;1217,1218,1216;, + 3;1216,1218,1219;, + 3;1216,1219,1215;, + 3;1219,1220,1215;, + 3;1219,1221,1220;, + 3;1218,1221,1219;, + 3;1218,868,1221;, + 3;1221,868,869;, + 3;1221,869,1222;, + 3;1220,1221,1222;, + 3;1220,1222,1215;, + 3;1215,1222,1223;, + 3;1215,1223,1214;, + 3;1214,1223,1224;, + 3;1223,879,1224;, + 3;1223,877,879;, + 3;1222,877,1223;, + 3;1222,869,877;, + 3;879,880,1224;, + 3;1224,880,882;, + 3;1224,882,1225;, + 3;882,883,1225;, + 3;1225,883,885;, + 3;1225,885,1226;, + 3;1226,885,887;, + 3;1226,887,1227;, + 3;887,1228,1227;, + 3;887,889,1228;, + 3;889,891,1228;, + 3;1228,891,1229;, + 3;1229,891,1230;, + 3;891,892,1230;, + 3;1230,892,894;, + 3;1230,894,1231;, + 3;1231,894,896;, + 3;1231,896,1232;, + 3;896,897,1232;, + 3;897,1233,1232;, + 3;897,899,1233;, + 3;899,1234,1233;, + 3;899,901,1234;, + 3;901,903,1234;, + 3;1234,903,1235;, + 3;1234,1235,1233;, + 3;1233,1235,1236;, + 3;1233,1236,1237;, + 3;1232,1233,1237;, + 3;1238,1232,1237;, + 3;1231,1232,1238;, + 3;1239,1231,1238;, + 3;1240,1231,1239;, + 3;1241,1231,1240;, + 3;1241,1230,1231;, + 3;1229,1230,1241;, + 3;1242,1229,1241;, + 3;1243,1229,1242;, + 3;1228,1229,1243;, + 3;1227,1228,1243;, + 3;1227,1243,1244;, + 3;1244,1243,1245;, + 3;1243,1242,1245;, + 3;1245,1242,1246;, + 3;1246,1242,1247;, + 3;1242,1241,1247;, + 3;1247,1241,1240;, + 3;1248,1247,1240;, + 3;1246,1247,1248;, + 3;1249,1246,1248;, + 3;1245,1246,1249;, + 3;1244,1245,1249;, + 3;1244,1249,1250;, + 3;1250,1249,1251;, + 3;1251,1249,1248;, + 3;1251,1248,1252;, + 3;1252,1248,1253;, + 3;1248,1240,1253;, + 3;1253,1240,1239;, + 3;1253,1239,1254;, + 3;1254,1239,1255;, + 3;1239,1238,1255;, + 3;1255,1238,1256;, + 3;1238,1237,1256;, + 3;1256,1237,1257;, + 3;1237,1236,1257;, + 3;1236,1258,1257;, + 3;1235,1258,1236;, + 3;1235,1259,1258;, + 3;1260,1259,1235;, + 3;903,1260,1235;, + 3;903,904,1260;, + 3;904,906,1260;, + 3;1260,906,1259;, + 3;906,1261,1259;, + 3;906,907,1261;, + 3;907,1262,1261;, + 3;907,909,1262;, + 3;909,1036,1262;, + 3;1262,1036,1263;, + 3;1263,1036,1264;, + 3;1036,1035,1264;, + 3;1264,1035,1265;, + 3;1265,1035,1266;, + 3;1033,1266,1035;, + 3;1033,1267,1266;, + 3;1032,1267,1033;, + 3;1032,1268,1267;, + 3;1032,1269,1268;, + 3;1031,1269,1032;, + 3;1059,1269,1031;, + 3;1057,1059,1031;, + 3;1057,1031,1024;, + 3;1054,1057,1024;, + 3;1054,1024,1023;, + 3;1270,1054,1023;, + 3;1053,1054,1270;, + 3;1271,1053,1270;, + 3;1271,1270,1022;, + 3;1270,1023,1022;, + 3;1189,1191,1272;, + 3;1189,1272,1273;, + 3;1189,1273,1274;, + 3;1189,1274,1275;, + 3;1275,1274,1276;, + 3;1275,1276,1277;, + 3;1275,1277,1278;, + 3;1279,1275,1278;, + 3;1279,1278,1280;, + 3;1279,1280,1281;, + 3;1279,1281,1282;, + 3;1279,1282,1283;, + 3;1284,1279,1283;, + 3;1285,1279,1284;, + 3;1285,1275,1279;, + 3;1286,1275,1285;, + 3;1286,1285,1287;, + 3;1285,1284,1287;, + 3;1287,1284,1288;, + 3;1284,1289,1288;, + 3;1284,1283,1289;, + 3;1289,1283,1290;, + 3;1283,1291,1290;, + 3;1290,1291,1292;, + 3;1290,1292,1293;, + 3;1292,1294,1293;, + 3;1294,1295,1293;, + 3;1295,1296,1293;, + 3;1295,1297,1296;, + 3;1297,1298,1296;, + 3;1298,1299,1296;, + 3;1299,1300,1296;, + 3;1299,1301,1300;, + 3;1301,1302,1300;, + 3;1303,1300,1302;, + 3;1303,1304,1300;, + 3;1305,1304,1303;, + 3;1306,1304,1305;, + 3;1307,1304,1306;, + 3;1307,1308,1304;, + 3;1309,1308,1307;, + 3;1309,1310,1308;, + 3;1311,1310,1309;, + 3;1312,1310,1311;, + 3;1313,1310,1312;, + 3;1313,1312,1314;, + 3;1195,1313,1314;, + 3;1315,1313,1195;, + 3;1196,1315,1195;, + 3;1196,1316,1315;, + 3;1197,1316,1196;, + 3;1317,1316,1197;, + 3;1198,1317,1197;, + 3;1205,1317,1198;, + 3;1205,1318,1317;, + 3;1205,1319,1318;, + 3;1206,1319,1205;, + 3;1206,1254,1319;, + 3;1206,1253,1254;, + 3;1252,1253,1206;, + 3;1207,1252,1206;, + 3;1320,1252,1207;, + 3;1320,1251,1252;, + 3;1250,1251,1320;, + 3;1321,1250,1320;, + 3;1322,1250,1321;, + 3;1322,1244,1250;, + 3;1227,1244,1322;, + 3;1323,1227,1322;, + 3;1226,1227,1323;, + 3;1324,1226,1323;, + 3;1324,1225,1226;, + 3;1325,1225,1324;, + 3;1325,1224,1225;, + 3;1214,1224,1325;, + 3;1213,1214,1325;, + 3;1213,1325,1324;, + 3;1213,1324,1326;, + 3;1213,1326,1212;, + 3;1212,1326,1211;, + 3;1326,1327,1211;, + 3;1326,1323,1327;, + 3;1324,1323,1326;, + 3;1323,1322,1327;, + 3;1327,1322,1321;, + 3;1327,1321,1328;, + 3;1211,1327,1328;, + 3;1211,1328,1210;, + 3;1328,1209,1210;, + 3;1328,1321,1209;, + 3;1321,1320,1209;, + 3;1209,1320,1208;, + 3;1320,1207,1208;, + 3;1254,1255,1319;, + 3;1319,1255,1318;, + 3;1255,1256,1318;, + 3;1318,1256,1329;, + 3;1256,1257,1329;, + 3;1329,1257,1330;, + 3;1257,1331,1330;, + 3;1257,1258,1331;, + 3;1258,1332,1331;, + 3;1259,1332,1258;, + 3;1259,1261,1332;, + 3;1261,1333,1332;, + 3;1261,1262,1333;, + 3;1262,1334,1333;, + 3;1262,1263,1334;, + 3;1334,1263,1335;, + 3;1332,1334,1335;, + 3;1333,1334,1332;, + 3;1332,1335,1331;, + 3;1331,1335,1336;, + 3;1335,1337,1336;, + 3;1263,1337,1335;, + 3;1263,1264,1337;, + 3;1337,1264,1338;, + 3;1264,1265,1338;, + 3;1265,1266,1338;, + 3;1338,1266,1339;, + 3;1267,1339,1266;, + 3;1267,1268,1339;, + 3;1268,1340,1339;, + 3;1268,1341,1340;, + 3;1342,1341,1268;, + 3;1269,1342,1268;, + 3;1269,1343,1342;, + 3;1059,1343,1269;, + 3;1059,1061,1343;, + 3;1343,1061,1344;, + 3;1343,1344,1342;, + 3;1344,1341,1342;, + 3;1344,1345,1341;, + 3;1344,1346,1345;, + 3;1061,1346,1344;, + 3;1061,1063,1346;, + 3;1063,1347,1346;, + 3;1063,1065,1347;, + 3;1065,1348,1347;, + 3;1349,1348,1065;, + 3;1070,1349,1065;, + 3;1070,1350,1349;, + 3;1070,1351,1350;, + 3;1352,1351,1070;, + 3;1353,1352,1070;, + 3;1353,1354,1352;, + 3;1355,1354,1353;, + 3;1355,1356,1354;, + 3;1357,1356,1355;, + 3;1358,1357,1355;, + 3;1358,1359,1357;, + 3;1360,1359,1358;, + 3;1361,1359,1360;, + 3;1361,1362,1359;, + 3;1359,1362,1357;, + 3;1362,1363,1357;, + 3;1357,1363,1364;, + 3;1357,1364,1356;, + 3;1356,1364,1365;, + 3;1356,1365,1366;, + 3;1354,1356,1366;, + 3;1354,1366,1367;, + 3;1354,1367,1352;, + 3;1352,1367,1368;, + 3;1352,1368,1351;, + 3;1351,1368,1350;, + 3;1368,1369,1350;, + 3;1370,1369,1368;, + 3;1367,1370,1368;, + 3;1367,1371,1370;, + 3;1367,1372,1371;, + 3;1366,1372,1367;, + 3;1365,1372,1366;, + 3;1365,1373,1372;, + 3;1374,1373,1365;, + 3;1364,1374,1365;, + 3;1375,1374,1364;, + 3;1363,1375,1364;, + 3;1376,1375,1363;, + 3;1362,1376,1363;, + 3;1377,1376,1362;, + 3;1377,1375,1376;, + 3;1377,1378,1375;, + 3;1375,1378,1374;, + 3;1378,913,1374;, + 3;913,915,1374;, + 3;1374,915,1373;, + 3;1373,915,930;, + 3;1373,930,1372;, + 3;1372,930,1371;, + 3;930,1379,1371;, + 3;930,931,1379;, + 3;1379,931,1371;, + 3;1371,931,1380;, + 3;1371,1380,1370;, + 3;1370,1380,1381;, + 3;1370,1381,1369;, + 3;1369,1381,1382;, + 3;1381,1383,1382;, + 3;1381,1384,1383;, + 3;1385,1384,1381;, + 3;967,1385,1381;, + 3;967,1381,1380;, + 3;1386,967,1380;, + 3;932,967,1386;, + 3;932,1386,931;, + 3;1386,1380,931;, + 3;1377,1362,1361;, + 3;1387,1377,1361;, + 3;1388,1377,1387;, + 3;1388,1378,1377;, + 3;1388,913,1378;, + 3;1389,913,1388;, + 3;1389,1390,913;, + 3;1389,1015,1390;, + 3;1391,1015,1389;, + 3;1391,1392,1015;, + 3;1392,1014,1015;, + 3;1393,1014,1392;, + 3;1393,1013,1014;, + 3;1394,1013,1393;, + 3;1394,1012,1013;, + 3;1395,1012,1394;, + 3;1395,1394,1393;, + 3;1396,1395,1393;, + 3;1396,1393,1392;, + 3;1397,1396,1392;, + 3;1398,1396,1397;, + 3;1398,1399,1396;, + 3;1399,1395,1396;, + 3;1399,1012,1395;, + 3;1399,1011,1012;, + 3;1400,1011,1399;, + 3;1398,1400,1399;, + 3;1401,1400,1398;, + 3;1401,1398,1397;, + 3;1402,1401,1397;, + 3;1402,1397,1403;, + 3;1403,1397,1392;, + 3;1403,1392,1404;, + 3;1404,1392,1391;, + 3;1404,1391,1405;, + 3;1405,1391,1406;, + 3;1391,1389,1406;, + 3;1406,1389,1388;, + 3;1406,1388,1407;, + 3;1407,1388,1387;, + 3;1407,1387,1408;, + 3;1387,1361,1408;, + 3;1408,1361,1360;, + 3;1409,1408,1360;, + 3;1407,1408,1409;, + 3;1410,1407,1409;, + 3;1410,1406,1407;, + 3;1405,1406,1410;, + 3;1411,1405,1410;, + 3;1404,1405,1411;, + 3;1412,1404,1411;, + 3;1403,1404,1412;, + 3;1402,1403,1412;, + 3;1413,1402,1412;, + 3;1413,1401,1402;, + 3;1414,1401,1413;, + 3;1414,1413,1415;, + 3;1413,1412,1415;, + 3;1415,1412,1416;, + 3;1412,1411,1416;, + 3;1411,1417,1416;, + 3;1411,1410,1417;, + 3;1417,1410,1418;, + 3;1410,1409,1418;, + 3;1418,1409,1419;, + 3;1417,1418,1419;, + 3;1416,1417,1419;, + 3;1416,1419,1420;, + 3;1419,1421,1420;, + 3;1419,1409,1421;, + 3;1409,1360,1421;, + 3;1420,1421,1037;, + 3;1422,1420,1037;, + 3;1423,1420,1422;, + 3;1423,1416,1420;, + 3;1415,1416,1423;, + 3;1424,1415,1423;, + 3;1414,1415,1424;, + 3;1425,1414,1424;, + 3;1425,1424,1426;, + 3;1426,1424,1423;, + 3;1426,1423,1422;, + 3;1426,1422,1427;, + 3;1427,1422,1037;, + 3;1427,1037,1041;, + 3;1428,1427,1041;, + 3;1429,1428,1041;, + 3;1429,1041,1043;, + 3;1429,1043,1430;, + 3;1430,1043,1046;, + 3;1430,1046,1431;, + 3;1431,1046,1432;, + 3;1432,1046,1049;, + 3;1433,1432,1049;, + 3;1434,1432,1433;, + 3;1434,1431,1432;, + 3;1435,1431,1434;, + 3;1436,1431,1435;, + 3;1436,1430,1431;, + 3;1437,1430,1436;, + 3;1438,1430,1437;, + 3;1438,1429,1430;, + 3;1439,1429,1438;, + 3;1439,1440,1429;, + 3;1440,1428,1429;, + 3;1440,1441,1428;, + 3;1441,1427,1428;, + 3;1441,1442,1427;, + 3;1442,1426,1427;, + 3;1443,1426,1442;, + 3;1443,1425,1426;, + 3;1444,1425,1443;, + 3;1444,1445,1425;, + 3;1445,1414,1425;, + 3;1445,1446,1414;, + 3;1447,1446,1445;, + 3;1444,1447,1445;, + 3;1444,1448,1447;, + 3;1448,1449,1447;, + 3;1447,1449,1446;, + 3;1449,1450,1446;, + 3;1446,1450,1451;, + 3;1446,1451,1414;, + 3;1414,1451,1401;, + 3;1451,1452,1401;, + 3;1401,1452,1400;, + 3;1452,1453,1400;, + 3;1400,1453,1454;, + 3;1400,1454,1011;, + 3;1454,1455,1011;, + 3;1011,1455,1010;, + 3;1455,1456,1010;, + 3;1010,1456,1457;, + 3;1010,1457,995;, + 3;995,1457,994;, + 3;1457,1458,994;, + 3;1457,1459,1458;, + 3;1456,1459,1457;, + 3;1460,1459,1456;, + 3;1455,1460,1456;, + 3;1461,1460,1455;, + 3;1454,1461,1455;, + 3;1453,1461,1454;, + 3;1453,1462,1461;, + 3;1452,1462,1453;, + 3;1452,1463,1462;, + 3;1451,1463,1452;, + 3;1450,1463,1451;, + 3;1450,1464,1463;, + 3;1465,1464,1450;, + 3;1449,1465,1450;, + 3;1466,1465,1449;, + 3;1448,1466,1449;, + 3;1467,1466,1448;, + 3;1444,1467,1448;, + 3;1468,1467,1444;, + 3;1468,1444,1443;, + 3;1468,1443,1469;, + 3;1469,1443,1442;, + 3;1469,1442,1441;, + 3;1470,1469,1441;, + 3;1470,1441,1440;, + 3;1471,1470,1440;, + 3;1471,1440,1439;, + 3;1472,1471,1439;, + 3;1472,1439,1438;, + 3;1472,1438,1473;, + 3;1473,1438,1437;, + 3;1473,1437,1474;, + 3;1474,1437,1436;, + 3;1474,1436,1475;, + 3;1475,1436,1435;, + 3;1475,1435,1476;, + 3;1476,1435,1434;, + 3;1476,1434,1477;, + 3;1434,1478,1477;, + 3;1434,1433,1478;, + 3;1478,1433,1479;, + 3;1479,1433,1480;, + 3;1433,1049,1480;, + 3;1480,1049,1051;, + 3;1480,1051,1481;, + 3;1481,1051,1053;, + 3;1481,1053,1482;, + 3;1482,1053,1271;, + 3;1482,1271,1483;, + 3;1271,1022,1483;, + 3;1483,1022,858;, + 3;1484,1483,858;, + 3;859,1484,858;, + 3;1485,1484,859;, + 3;1485,1483,1484;, + 3;1485,1482,1483;, + 3;860,1482,1485;, + 3;860,1485,859;, + 3;860,1481,1482;, + 3;861,1481,860;, + 3;861,1486,1481;, + 3;865,1486,861;, + 3;865,1480,1486;, + 3;1486,1480,1481;, + 3;1479,1480,865;, + 3;866,1479,865;, + 3;1487,1479,866;, + 3;1487,1478,1479;, + 3;1477,1478,1487;, + 3;1488,1477,1487;, + 3;1489,1477,1488;, + 3;1489,1476,1477;, + 3;1490,1476,1489;, + 3;1490,1475,1476;, + 3;1491,1475,1490;, + 3;1491,1474,1475;, + 3;1492,1474,1491;, + 3;1492,1473,1474;, + 3;1493,1473,1492;, + 3;1493,1472,1473;, + 3;1494,1472,1493;, + 3;1494,1471,1472;, + 3;1494,1495,1471;, + 3;1495,1470,1471;, + 3;1495,1496,1470;, + 3;1496,1469,1470;, + 3;1496,1468,1469;, + 3;1468,1496,1467;, + 3;1496,1497,1467;, + 3;1498,1497,1496;, + 3;1495,1498,1496;, + 3;1495,1494,1498;, + 3;1494,1499,1498;, + 3;1494,1493,1499;, + 3;1493,1500,1499;, + 3;1493,1492,1500;, + 3;1492,1491,1500;, + 3;1500,1491,1501;, + 3;1491,1502,1501;, + 3;1491,1490,1502;, + 3;1490,1489,1502;, + 3;1502,1489,1503;, + 3;1489,1488,1503;, + 3;1503,1488,1504;, + 3;1488,1505,1504;, + 3;1488,1506,1505;, + 3;1488,1487,1506;, + 3;1506,1487,866;, + 3;1506,866,1507;, + 3;1507,866,867;, + 3;1507,867,1508;, + 3;867,868,1508;, + 3;1508,868,1218;, + 3;1217,1508,1218;, + 3;1505,1508,1217;, + 3;1507,1508,1505;, + 3;1506,1507,1505;, + 3;1505,1217,1137;, + 3;1505,1137,1509;, + 3;1509,1137,1138;, + 3;1509,1138,1139;, + 3;1509,1139,1145;, + 3;1144,1509,1145;, + 3;1504,1509,1144;, + 3;1504,1505,1509;, + 3;1498,1499,1497;, + 3;1499,1510,1497;, + 3;1499,1511,1510;, + 3;1499,1500,1511;, + 3;1500,1501,1511;, + 3;1511,1501,1512;, + 3;1511,1512,1510;, + 3;1510,1512,1513;, + 3;1512,1514,1513;, + 3;1512,1515,1514;, + 3;1501,1515,1512;, + 3;1501,1502,1515;, + 3;1502,1516,1515;, + 3;1502,1503,1516;, + 3;1516,1503,1517;, + 3;1503,1504,1517;, + 3;1517,1504,1144;, + 3;1517,1144,1143;, + 3;1518,1517,1143;, + 3;1516,1517,1518;, + 3;1515,1516,1518;, + 3;1515,1518,1519;, + 3;1519,1518,1143;, + 3;1519,1143,1099;, + 3;1519,1099,1098;, + 3;1514,1519,1098;, + 3;1515,1519,1514;, + 3;1513,1514,1098;, + 3;1513,1098,1097;, + 3;1513,1097,1520;, + 3;1520,1097,1521;, + 3;1097,1089,1521;, + 3;1521,1089,1522;, + 3;1089,1079,1522;, + 3;1522,1079,1078;, + 3;1523,1522,1078;, + 3;1524,1522,1523;, + 3;1521,1522,1524;, + 3;1520,1521,1524;, + 3;1525,1520,1524;, + 3;1526,1520,1525;, + 3;1513,1520,1526;, + 3;1510,1513,1526;, + 3;1510,1526,1527;, + 3;1497,1510,1527;, + 3;1497,1527,1467;, + 3;1467,1527,1466;, + 3;1527,1525,1466;, + 3;1527,1526,1525;, + 3;1466,1525,1465;, + 3;1525,1524,1465;, + 3;1465,1524,1464;, + 3;1464,1524,1523;, + 3;1464,1523,1528;, + 3;1464,1528,1463;, + 3;1463,1528,1462;, + 3;1462,1528,1529;, + 3;1529,1528,1078;, + 3;1523,1078,1528;, + 3;1529,1078,1077;, + 3;1529,1077,1530;, + 3;1462,1529,1530;, + 3;1462,1530,1461;, + 3;1461,1530,1460;, + 3;1530,1077,1460;, + 3;1460,1077,1459;, + 3;1077,1075,1459;, + 3;1459,1075,1531;, + 3;1459,1531,1458;, + 3;1458,1531,1532;, + 3;1531,1533,1532;, + 3;1531,1075,1533;, + 3;1075,1074,1533;, + 3;1533,1074,1534;, + 3;1074,1535,1534;, + 3;1074,1073,1535;, + 3;1535,1073,1536;, + 3;1073,1537,1536;, + 3;1073,1538,1537;, + 3;1336,1337,1338;, + 3;1336,1338,1539;, + 3;1539,1338,1540;, + 3;1338,1339,1540;, + 3;1540,1339,1541;, + 3;1339,1542,1541;, + 3;1339,1340,1542;, + 3;1340,1543,1542;, + 3;1340,1544,1543;, + 3;1341,1544,1340;, + 3;1341,1345,1544;, + 3;1345,1545,1544;, + 3;1345,1546,1545;, + 3;1346,1546,1345;, + 3;1346,1547,1546;, + 3;1346,1347,1547;, + 3;1347,1548,1547;, + 3;1549,1548,1347;, + 3;1348,1549,1347;, + 3;1348,1550,1549;, + 3;1349,1550,1348;, + 3;1349,1551,1550;, + 3;1350,1551,1349;, + 3;1350,1369,1551;, + 3;1369,1552,1551;, + 3;1369,1382,1552;, + 3;1382,1553,1552;, + 3;1382,1383,1553;, + 3;1383,1554,1553;, + 3;1384,1554,1383;, + 3;1384,1555,1554;, + 3;1556,1555,1384;, + 3;1385,1556,1384;, + 3;1557,1556,1385;, + 3;1289,1556,1557;, + 3;1289,1290,1556;, + 3;1290,1558,1556;, + 3;1290,1293,1558;, + 3;1293,1559,1558;, + 3;1293,1296,1559;, + 3;1296,1560,1559;, + 3;1296,1561,1560;, + 3;1296,1300,1561;, + 3;1300,1562,1561;, + 3;1304,1562,1300;, + 3;1304,1563,1562;, + 3;1308,1563,1304;, + 3;1308,1564,1563;, + 3;1310,1564,1308;, + 3;1310,1565,1564;, + 3;1313,1565,1310;, + 3;1313,1566,1565;, + 3;1315,1566,1313;, + 3;1315,1567,1566;, + 3;1315,1568,1567;, + 3;1316,1568,1315;, + 3;1569,1568,1316;, + 3;1317,1569,1316;, + 3;1317,1570,1569;, + 3;1318,1570,1317;, + 3;1318,1329,1570;, + 3;1329,1330,1570;, + 3;1570,1330,1571;, + 3;1570,1571,1569;, + 3;1569,1571,1568;, + 3;1571,1572,1568;, + 3;1571,1573,1572;, + 3;1330,1573,1571;, + 3;1330,1331,1573;, + 3;1331,1336,1573;, + 3;1573,1336,1572;, + 3;1572,1336,1539;, + 3;1568,1572,1539;, + 3;1567,1568,1539;, + 3;1539,1540,1567;, + 3;1567,1540,1566;, + 3;1540,1541,1566;, + 3;1566,1541,1574;, + 3;1566,1574,1565;, + 3;1565,1574,1575;, + 3;1565,1575,1564;, + 3;1564,1575,1576;, + 3;1575,1577,1576;, + 3;1574,1577,1575;, + 3;1574,1578,1577;, + 3;1541,1578,1574;, + 3;1541,1542,1578;, + 3;1542,1543,1578;, + 3;1578,1543,1544;, + 3;1578,1544,1577;, + 3;1577,1544,1579;, + 3;1577,1579,1576;, + 3;1576,1579,1580;, + 3;1576,1580,1581;, + 3;1564,1576,1581;, + 3;1563,1564,1581;, + 3;1563,1581,1582;, + 3;1582,1581,1583;, + 3;1581,1580,1583;, + 3;1580,1584,1583;, + 3;1580,1585,1584;, + 3;1580,1586,1585;, + 3;1579,1586,1580;, + 3;1587,1586,1579;, + 3;1544,1587,1579;, + 3;1544,1545,1587;, + 3;1587,1545,1588;, + 3;1545,1589,1588;, + 3;1546,1589,1545;, + 3;1546,1547,1589;, + 3;1547,1548,1589;, + 3;1548,1590,1589;, + 3;1549,1590,1548;, + 3;1549,1591,1590;, + 3;1550,1591,1549;, + 3;1550,1592,1591;, + 3;1551,1592,1550;, + 3;1551,1552,1592;, + 3;1552,1593,1592;, + 3;1593,1594,1592;, + 3;1592,1594,1591;, + 3;1591,1594,1590;, + 3;1590,1594,1595;, + 3;1589,1590,1595;, + 3;1589,1595,1588;, + 3;1588,1595,1596;, + 3;1588,1596,1597;, + 3;1587,1588,1597;, + 3;1587,1597,1586;, + 3;1597,1598,1586;, + 3;1597,1596,1598;, + 3;1596,1599,1598;, + 3;1596,1600,1599;, + 3;1596,1601,1600;, + 3;1596,1595,1601;, + 3;1595,1602,1601;, + 3;1594,1602,1595;, + 3;1594,1603,1602;, + 3;1604,1603,1594;, + 3;1593,1604,1594;, + 3;1593,1605,1604;, + 3;1593,1606,1605;, + 3;1552,1606,1593;, + 3;1607,1606,1552;, + 3;1554,1607,1552;, + 3;1554,1552,1553;, + 3;1555,1607,1554;, + 3;1555,1608,1607;, + 3;1558,1608,1555;, + 3;1556,1558,1555;, + 3;1558,1559,1608;, + 3;1559,1609,1608;, + 3;1608,1609,1607;, + 3;1607,1609,1606;, + 3;1609,1610,1606;, + 3;1606,1610,1605;, + 3;1610,1611,1605;, + 3;1605,1611,1612;, + 3;1604,1605,1612;, + 3;1604,1612,1603;, + 3;1603,1612,1613;, + 3;1603,1613,1614;, + 3;1603,1614,1602;, + 3;1614,1615,1602;, + 3;1602,1615,1601;, + 3;1601,1615,1616;, + 3;1601,1616,1617;, + 3;1601,1617,1600;, + 3;1600,1617,1618;, + 3;1600,1618,1599;, + 3;1599,1618,1619;, + 3;1618,1620,1619;, + 3;1618,1617,1620;, + 3;1617,1621,1620;, + 3;1616,1621,1617;, + 3;1615,1621,1616;, + 3;1615,1622,1621;, + 3;1623,1622,1615;, + 3;1614,1623,1615;, + 3;1614,1613,1623;, + 3;1613,1624,1623;, + 3;1623,1624,1622;, + 3;1624,1625,1622;, + 3;1625,1626,1622;, + 3;1622,1626,1621;, + 3;1621,1626,1627;, + 3;1628,1621,1627;, + 3;1620,1621,1628;, + 3;1619,1620,1628;, + 3;1619,1628,1629;, + 3;1628,1630,1629;, + 3;1628,1627,1630;, + 3;1627,1631,1630;, + 3;1626,1631,1627;, + 3;1626,1632,1631;, + 3;1625,1632,1626;, + 3;1625,1633,1632;, + 3;1624,1633,1625;, + 3;1634,1633,1624;, + 3;1635,1633,1634;, + 3;1635,1636,1633;, + 3;1636,1637,1633;, + 3;1633,1637,1632;, + 3;1637,1638,1632;, + 3;1632,1638,1631;, + 3;1638,1639,1631;, + 3;1639,1630,1631;, + 3;1640,1630,1639;, + 3;1641,1630,1640;, + 3;1629,1630,1641;, + 3;1642,1629,1641;, + 3;1642,1641,1643;, + 3;1643,1641,1640;, + 3;1643,1640,1639;, + 3;1644,1643,1639;, + 3;1644,1639,1645;, + 3;1645,1639,1638;, + 3;1645,1638,1637;, + 3;1636,1645,1637;, + 3;1646,1645,1636;, + 3;1646,1647,1645;, + 3;1647,1644,1645;, + 3;1647,1648,1644;, + 3;1649,1644,1648;, + 3;1649,1643,1644;, + 3;1650,1643,1649;, + 3;1650,1642,1643;, + 3;1651,1642,1650;, + 3;1651,1652,1642;, + 3;1653,1652,1651;, + 3;1653,1651,1650;, + 3;1653,1650,1654;, + 3;1654,1650,1649;, + 3;1654,1649,1655;, + 3;1655,1649,1648;, + 3;1655,1648,1561;, + 3;1562,1655,1561;, + 3;1563,1655,1562;, + 3;1563,1582,1655;, + 3;1582,1654,1655;, + 3;1582,1583,1654;, + 3;1583,1653,1654;, + 3;1583,1652,1653;, + 3;1583,1584,1652;, + 3;1584,1656,1652;, + 3;1584,1657,1656;, + 3;1584,1585,1657;, + 3;1585,1658,1657;, + 3;1598,1658,1585;, + 3;1586,1598,1585;, + 3;1181,1182,1180;, + 3;1180,1182,1659;, + 3;1659,1182,1183;, + 3;1659,1183,1660;, + 3;1183,1187,1660;, + 3;1661,1660,1187;, + 3;1662,1660,1661;, + 3;1659,1660,1662;, + 3;1180,1659,1662;, + 3;1180,1662,1179;, + 3;1178,1179,1662;, + 3;1178,1662,1663;, + 3;1663,1662,1661;, + 3;1663,1661,1146;, + 3;1148,1663,1146;, + 3;1148,1178,1663;, + 3;1664,1178,1148;, + 3;1177,1178,1664;, + 3;1153,1177,1664;, + 3;1150,1153,1664;, + 3;1150,1664,1665;, + 3;1149,1150,1665;, + 3;1665,1664,1149;, + 3;1149,1664,1148;, + 3;1082,1146,1666;, + 3;1146,1661,1666;, + 3;1666,1661,1286;, + 3;1666,1286,1287;, + 3;1667,1666,1287;, + 3;1537,1666,1667;, + 3;1668,1666,1537;, + 3;1537,1667,1669;, + 3;1537,1669,1536;, + 3;1536,1669,1670;, + 3;1535,1536,1670;, + 3;1671,1535,1670;, + 3;1534,1535,1671;, + 3;1534,1671,1672;, + 3;1672,1671,1670;, + 3;1672,1670,1673;, + 3;1670,1674,1673;, + 3;1670,1669,1674;, + 3;1669,1675,1674;, + 3;1667,1675,1669;, + 3;1675,1667,1676;, + 3;1667,1287,1676;, + 3;1676,1287,1288;, + 3;1676,1288,1677;, + 3;1677,1288,1678;, + 3;1288,1289,1678;, + 3;1289,1557,1678;, + 3;1557,1679,1678;, + 3;1679,1557,1385;, + 3;1679,1385,967;, + 3;968,1679,967;, + 3;1680,1679,968;, + 3;1678,1679,1680;, + 3;1681,1678,1680;, + 3;1677,1678,1681;, + 3;1682,1677,1681;, + 3;1676,1677,1682;, + 3;980,1676,1682;, + 3;1675,1676,980;, + 3;1675,980,981;, + 3;1674,1675,981;, + 3;1674,981,982;, + 3;1673,1674,982;, + 3;1673,982,983;, + 3;1673,983,1683;, + 3;1683,983,1684;, + 3;1684,983,984;, + 3;1684,984,1685;, + 3;1685,984,985;, + 3;986,1685,985;, + 3;986,1686,1685;, + 3;1686,1684,1685;, + 3;1687,1684,1686;, + 3;1687,1683,1684;, + 3;1687,1688,1683;, + 3;1683,1688,1673;, + 3;1688,1672,1673;, + 3;1533,1672,1688;, + 3;1533,1534,1672;, + 3;980,1682,979;, + 3;979,1682,978;, + 3;1682,1681,978;, + 3;978,1681,1689;, + 3;1681,1680,1689;, + 3;1689,1680,968;, + 3;969,1689,968;, + 3;978,1689,969;, + 3;1690,1533,1688;, + 3;1532,1533,1690;, + 3;1691,1532,1690;, + 3;1458,1532,1691;, + 3;994,1458,1691;, + 3;994,1691,988;, + 3;988,1691,1692;, + 3;1691,1690,1692;, + 3;1692,1690,1687;, + 3;1690,1688,1687;, + 3;988,1692,987;, + 3;1692,1693,987;, + 3;1692,1687,1693;, + 3;1693,1687,1686;, + 3;1693,1686,986;, + 3;987,1693,986;, + 3;1661,1694,1286;, + 3;1661,1187,1694;, + 3;1694,1187,1188;, + 3;1694,1188,1695;, + 3;1286,1694,1695;, + 3;1286,1695,1275;, + 3;1695,1696,1275;, + 3;1695,1188,1696;, + 3;1188,1697,1696;, + 3;1188,1189,1697;, + 3;1697,1189,1275;, + 3;1696,1697,1275;, + 3;1598,1698,1658;, + 3;1598,1599,1698;, + 3;1599,1619,1698;, + 3;1698,1619,1658;, + 3;1658,1619,1699;, + 3;1699,1619,1629;, + 3;1700,1699,1629;, + 3;1700,1629,1642;, + 3;1652,1700,1642;, + 3;1656,1700,1652;, + 3;1656,1657,1700;, + 3;1657,1699,1700;, + 3;1657,1658,1699;, + 3;1701,1561,1648;, + 3;1560,1561,1701;, + 3;1560,1701,1702;, + 3;1560,1702,1703;, + 3;1560,1703,1559;, + 3;1559,1703,1609;, + 3;1609,1703,1610;, + 3;1703,1704,1610;, + 3;1702,1704,1703;, + 3;1702,1705,1704;, + 3;1702,1701,1705;, + 3;1705,1701,1647;, + 3;1701,1648,1647;, + 3;1705,1647,1646;, + 3;1706,1705,1646;, + 3;1704,1705,1706;, + 3;1704,1706,1707;, + 3;1706,1708,1707;, + 3;1706,1646,1708;, + 3;1708,1646,1636;, + 3;1708,1636,1707;, + 3;1707,1636,1635;, + 3;1709,1707,1635;, + 3;1710,1707,1709;, + 3;1704,1707,1710;, + 3;1610,1704,1710;, + 3;1610,1710,1611;, + 3;1710,1711,1611;, + 3;1710,1709,1711;, + 3;1709,1635,1711;, + 3;1711,1635,1634;, + 3;1711,1634,1712;, + 3;1611,1711,1712;, + 3;1612,1611,1712;, + 3;1612,1712,1713;, + 3;1612,1713,1613;, + 3;1613,1713,1624;, + 3;1713,1712,1624;, + 3;1712,1634,1624;, + 3;1714,1715,1716;, + 3;1717,1715,1714;, + 3;1718,1717,1714;, + 3;1719,1717,1718;, + 3;1720,1717,1719;, + 3;1721,1717,1720;, + 3;1721,1722,1717;, + 3;1717,1722,1715;, + 3;1722,1723,1715;, + 3;1722,1724,1723;, + 3;1724,1725,1723;, + 3;1724,1726,1725;, + 3;1726,1727,1725;, + 3;1726,1728,1727;, + 3;1728,1729,1727;, + 3;1730,1722,1721;, + 3;1730,1731,1722;, + 3;1732,1731,1730;, + 3;1732,1733,1731;, + 3;1734,1733,1732;, + 3;1734,1735,1733;, + 3;1736,1735,1734;, + 3;1735,1728,1733;, + 3;1733,1728,1726;, + 3;1733,1726,1724;, + 3;1731,1733,1724;, + 3;1731,1724,1722;, + 3;1737,1738,1739;, + 3;1738,1740,1739;, + 3;1738,1741,1740;, + 3;1741,1742,1740;, + 3;1741,1743,1742;, + 3;1743,1744,1742;, + 3;1743,1745,1744;, + 3;1745,1746,1744;, + 3;1744,1746,1747;, + 3;1747,1748,1744;, + 3;1744,1748,1749;, + 3;1744,1749,1742;, + 3;1742,1749,1750;, + 3;1742,1750,1751;, + 3;1740,1742,1751;, + 3;1739,1740,1751;, + 3;1739,1751,1752;, + 3;1751,1753,1752;, + 3;1751,1750,1753;, + 3;1752,1753,1754;; + } + + MeshTextureCoords { + 1755; + 0.102094;0.917452;, + 0.102128;0.916902;, + 0.102030;0.915089;, + 0.101900;0.913622;, + 0.101454;0.911430;, + 0.070912;0.940213;, + 0.061763;0.919821;, + 0.066451;0.930434;, + 0.076314;0.894788;, + 0.060279;0.900457;, + 0.085815;0.891588;, + 0.099616;0.925368;, + 0.100626;0.923391;, + 0.099357;0.925732;, + 0.088259;0.933223;, + 0.088259;0.933223;, + 0.090320;0.932764;, + 0.088259;0.933223;, + 0.086057;0.933489;, + 0.086057;0.933489;, + 0.086057;0.933489;, + 0.090320;0.932764;, + 0.092402;0.931912;, + 0.090320;0.932764;, + 0.090320;0.932764;, + 0.088259;0.933223;, + 0.086057;0.933489;, + 0.083848;0.933373;, + 0.083848;0.933373;, + 0.081758;0.933053;, + 0.081758;0.933053;, + 0.079630;0.932345;, + 0.079630;0.932345;, + 0.077690;0.931475;, + 0.077690;0.931475;, + 0.075815;0.930223;, + 0.075815;0.930223;, + 0.074158;0.928862;, + 0.074158;0.928862;, + 0.072635;0.927046;, + 0.072635;0.927046;, + 0.071128;0.924864;, + 0.071128;0.924864;, + 0.069980;0.922357;, + 0.069980;0.922357;, + 0.069355;0.920219;, + 0.069355;0.920219;, + 0.069024;0.918055;, + 0.069024;0.918055;, + 0.068925;0.915787;, + 0.068925;0.915787;, + 0.069054;0.914193;, + 0.069054;0.914193;, + 0.069343;0.912487;, + 0.069343;0.912487;, + 0.069966;0.910348;, + 0.069966;0.910348;, + 0.070872;0.908288;, + 0.070872;0.908288;, + 0.072329;0.905933;, + 0.072329;0.905933;, + 0.074153;0.903878;, + 0.074153;0.903878;, + 0.075831;0.902450;, + 0.075831;0.902450;, + 0.077671;0.901263;, + 0.077671;0.901263;, + 0.079651;0.900332;, + 0.079651;0.900332;, + 0.081726;0.899679;, + 0.081726;0.899679;, + 0.084452;0.899236;, + 0.084452;0.899236;, + 0.087698;0.899355;, + 0.087698;0.899355;, + 0.090349;0.899970;, + 0.090349;0.899970;, + 0.092383;0.900764;, + 0.092383;0.900764;, + 0.094295;0.901824;, + 0.094295;0.901824;, + 0.096059;0.903136;, + 0.096059;0.903136;, + 0.097640;0.904671;, + 0.097640;0.904671;, + 0.099014;0.906410;, + 0.099014;0.906410;, + 0.100144;0.908276;, + 0.100144;0.908276;, + 0.100847;0.909801;, + 0.100847;0.909801;, + 0.101409;0.911409;, + 0.101409;0.911409;, + 0.101900;0.913622;, + 0.101900;0.913622;, + 0.102030;0.915089;, + 0.102030;0.915089;, + 0.102128;0.916902;, + 0.102128;0.916902;, + 0.101884;0.919123;, + 0.101884;0.919123;, + 0.101396;0.921296;, + 0.101396;0.921296;, + 0.100626;0.923391;, + 0.100626;0.923391;, + 0.099357;0.925732;, + 0.099357;0.925732;, + 0.097638;0.928069;, + 0.097638;0.928069;, + 0.096074;0.929536;, + 0.096074;0.929536;, + 0.094279;0.930915;, + 0.094279;0.930915;, + 0.092402;0.931912;, + 0.092402;0.931912;, + 0.094279;0.930915;, + 0.092402;0.931912;, + 0.096074;0.929536;, + 0.094279;0.930915;, + 0.097638;0.928069;, + 0.096074;0.929536;, + 0.099357;0.925732;, + 0.097638;0.928069;, + 0.100626;0.923391;, + 0.099357;0.925732;, + 0.101396;0.921296;, + 0.100626;0.923391;, + 0.101884;0.919123;, + 0.101396;0.921296;, + 0.102128;0.916902;, + 0.101884;0.919123;, + 0.102030;0.915089;, + 0.102128;0.916902;, + 0.101900;0.913622;, + 0.102030;0.915089;, + 0.101409;0.911409;, + 0.101900;0.913622;, + 0.100847;0.909801;, + 0.101409;0.911409;, + 0.100144;0.908276;, + 0.100847;0.909801;, + 0.099014;0.906410;, + 0.100144;0.908276;, + 0.097640;0.904671;, + 0.099014;0.906410;, + 0.096059;0.903136;, + 0.097640;0.904671;, + 0.094295;0.901824;, + 0.096059;0.903136;, + 0.092383;0.900764;, + 0.094295;0.901824;, + 0.090349;0.899970;, + 0.092383;0.900764;, + 0.087698;0.899355;, + 0.090349;0.899970;, + 0.084452;0.899236;, + 0.087698;0.899355;, + 0.081726;0.899679;, + 0.081726;0.899679;, + 0.079651;0.900332;, + 0.079651;0.900332;, + 0.077671;0.901263;, + 0.077671;0.901263;, + 0.075831;0.902450;, + 0.075831;0.902450;, + 0.074153;0.903878;, + 0.074153;0.903878;, + 0.072329;0.905933;, + 0.072329;0.905933;, + 0.070872;0.908288;, + 0.070872;0.908288;, + 0.069966;0.910348;, + 0.069966;0.910348;, + 0.069343;0.912487;, + 0.069343;0.912487;, + 0.069054;0.914193;, + 0.069054;0.914193;, + 0.068925;0.915787;, + 0.069024;0.918055;, + 0.068925;0.915787;, + 0.069355;0.920219;, + 0.069024;0.918055;, + 0.069980;0.922357;, + 0.069355;0.920219;, + 0.071128;0.924864;, + 0.069980;0.922357;, + 0.072635;0.927046;, + 0.071128;0.924864;, + 0.074158;0.928862;, + 0.072635;0.927046;, + 0.075815;0.930223;, + 0.074158;0.928862;, + 0.077690;0.931475;, + 0.075815;0.930223;, + 0.079630;0.932345;, + 0.077690;0.931475;, + 0.081758;0.933053;, + 0.079630;0.932345;, + 0.083848;0.933373;, + 0.081758;0.933053;, + 0.083848;0.933373;, + 0.101900;0.913622;, + 0.101409;0.911409;, + 0.100847;0.909801;, + 0.100144;0.908276;, + 0.100001;0.907927;, + 0.099014;0.906410;, + 0.097299;0.903700;, + 0.097640;0.904671;, + 0.096059;0.903136;, + 0.093681;0.900945;, + 0.094295;0.901824;, + 0.092383;0.900764;, + 0.089498;0.899270;, + 0.090349;0.899970;, + 0.087698;0.899355;, + 0.084940;0.898755;, + 0.084452;0.899236;, + 0.081726;0.899679;, + 0.080257;0.899634;, + 0.079651;0.900332;, + 0.077671;0.901263;, + 0.074774;0.903001;, + 0.075831;0.902450;, + 0.074153;0.903878;, + 0.072329;0.905933;, + 0.071289;0.907463;, + 0.070872;0.908288;, + 0.069575;0.911430;, + 0.069966;0.910348;, + 0.069343;0.912487;, + 0.069054;0.914193;, + 0.068935;0.915237;, + 0.068925;0.915787;, + 0.069024;0.918055;, + 0.068536;0.916916;, + 0.068788;0.912239;, + 0.070305;0.908004;, + 0.072904;0.904221;, + 0.076381;0.901252;, + 0.080142;0.898128;, + 0.075754;0.900193;, + 0.072039;0.903360;, + 0.069250;0.907408;, + 0.067966;0.912237;, + 0.067225;0.917597;, + 0.068667;0.919823;, + 0.069356;0.920274;, + 0.069355;0.920219;, + 0.070281;0.923253;, + 0.069980;0.922357;, + 0.071128;0.924864;, + 0.072635;0.927046;, + 0.071116;0.926099;, + 0.074006;0.929278;, + 0.074158;0.928862;, + 0.075815;0.930223;, + 0.077532;0.931679;, + 0.077690;0.931475;, + 0.081665;0.933296;, + 0.081758;0.933053;, + 0.086067;0.933749;, + 0.086057;0.933489;, + 0.090465;0.933132;, + 0.090320;0.932764;, + 0.094517;0.931225;, + 0.094279;0.930915;, + 0.097946;0.928296;, + 0.097638;0.928069;, + 0.099357;0.925732;, + 0.101275;0.923630;, + 0.101454;0.921259;, + 0.100626;0.923391;, + 0.101396;0.921296;, + 0.101884;0.919123;, + 0.102128;0.916902;, + 0.069576;0.922942;, + 0.070513;0.927395;, + 0.068262;0.923011;, + 0.065837;0.921065;, + 0.065836;0.915018;, + 0.067538;0.906498;, + 0.074710;0.898523;, + 0.084181;0.895388;, + 0.076314;0.894788;, + 0.085815;0.891588;, + 0.093969;0.897215;, + 0.086734;0.897233;, + 0.093150;0.899013;, + 0.097237;0.901654;, + 0.099913;0.906590;, + 0.101861;0.910786;, + 0.102254;0.914683;, + 0.102030;0.915089;, + 0.102833;0.918092;, + 0.102366;0.924160;, + 0.098990;0.929329;, + 0.095274;0.932497;, + 0.090886;0.934562;, + 0.086692;0.934911;, + 0.082563;0.934734;, + 0.078047;0.933309;, + 0.073792;0.931035;, + 0.068933;0.928531;, + 0.066451;0.930434;, + 0.061763;0.919821;, + 0.064564;0.904890;, + 0.060279;0.900457;, + 0.054573;0.924074;, + 0.070912;0.940213;, + 0.056944;0.937759;, + 0.041597;0.937180;, + 0.037402;0.922803;, + 0.049313;0.911212;, + 0.056944;0.894930;, + 0.039869;0.898653;, + 0.028235;0.904085;, + 0.027314;0.923211;, + 0.031435;0.939516;, + 0.023901;0.931243;, + 0.022859;0.916144;, + 0.023901;0.901446;, + 0.032697;0.886998;, + 0.041853;0.873887;, + 0.054549;0.877455;, + 0.076340;0.881071;, + 0.090848;0.885504;, + 0.098702;0.896175;, + 0.102095;0.904158;, + 0.100516;0.905294;, + 0.102766;0.909679;, + 0.105191;0.911624;, + 0.108068;0.907806;, + 0.115185;0.913327;, + 0.113073;0.895713;, + 0.099661;0.883427;, + 0.092144;0.866007;, + 0.071892;0.868333;, + 0.056289;0.864026;, + 0.052142;0.860826;, + 0.040424;0.859741;, + 0.027777;0.873723;, + 0.019066;0.890604;, + 0.014502;0.904151;, + 0.014618;0.916345;, + 0.014412;0.930385;, + 0.010801;0.900497;, + 0.013901;0.888366;, + 0.023851;0.871736;, + 0.042394;0.852842;, + 0.056150;0.849614;, + 0.066559;0.856220;, + 0.073883;0.844036;, + 0.081506;0.851961;, + 0.089950;0.843590;, + 0.095581;0.855821;, + 0.106174;0.846219;, + 0.106945;0.857251;, + 0.118886;0.860826;, + 0.123050;0.854136;, + 0.131665;0.871638;, + 0.137361;0.866292;, + 0.138518;0.884788;, + 0.148136;0.881855;, + 0.146683;0.906206;, + 0.154643;0.899762;, + 0.156410;0.916345;, + 0.146088;0.929068;, + 0.155837;0.932767;, + 0.148136;0.950834;, + 0.138331;0.945692;, + 0.137361;0.966397;, + 0.129175;0.958802;, + 0.123050;0.978553;, + 0.117042;0.969021;, + 0.106459;0.987644;, + 0.102759;0.975651;, + 0.090184;0.990000;, + 0.088342;0.979550;, + 0.073883;0.988653;, + 0.076217;0.979803;, + 0.064084;0.975439;, + 0.056150;0.983076;, + 0.052142;0.971864;, + 0.040424;0.972948;, + 0.039364;0.961051;, + 0.027777;0.958966;, + 0.024941;0.960715;, + 0.019066;0.942085;, + 0.018500;0.952992;, + 0.010000;0.929321;, + 0.080191;0.856385;, + 0.032510;0.947901;, + 0.048740;0.963058;, + 0.077856;0.975276;, + 0.092144;0.966682;, + 0.116480;0.955234;, + 0.129431;0.937179;, + 0.142661;0.924211;, + 0.139983;0.894872;, + 0.122288;0.869631;, + 0.116480;0.877455;, + 0.131158;0.898654;, + 0.133626;0.922803;, + 0.120781;0.916345;, + 0.113945;0.937477;, + 0.096116;0.950120;, + 0.072797;0.950502;, + 0.071892;0.964356;, + 0.054549;0.955234;, + 0.085431;0.946316;, + 0.108318;0.935048;, + 0.103114;0.933576;, + 0.088221;0.940456;, + 0.075828;0.937782;, + 0.077059;0.935475;, + 0.086847;0.937302;, + 0.096319;0.934166;, + 0.103491;0.926192;, + 0.104769;0.917642;, + 0.103325;0.914002;, + 0.107013;0.918408;, + 0.110203;0.920816;, + 0.037995;0.184114;, + 0.036704;0.246080;, + 0.027000;0.232918;, + 0.075312;0.132375;, + 0.073543;0.109228;, + 0.049611;0.136414;, + 0.076266;0.054391;, + 0.062769;0.092091;, + 0.217505;0.184114;, + 0.228500;0.232918;, + 0.218796;0.246080;, + 0.181263;0.109776;, + 0.205889;0.136414;, + 0.179234;0.054391;, + 0.192731;0.092091;, + 0.174023;0.091237;, + 0.163200;0.065500;, + 0.169816;0.040589;, + 0.162122;0.033206;, + 0.155868;0.030487;, + 0.152062;0.078268;, + 0.157059;0.107064;, + 0.171860;0.134065;, + 0.176681;0.212402;, + 0.204706;0.256480;, + 0.182687;0.256786;, + 0.169137;0.256788;, + 0.155429;0.256793;, + 0.127750;0.210869;, + 0.141616;0.256798;, + 0.127750;0.256800;, + 0.113884;0.256798;, + 0.100071;0.256793;, + 0.082742;0.210783;, + 0.086363;0.256788;, + 0.072813;0.256786;, + 0.050794;0.256480;, + 0.091351;0.112307;, + 0.083503;0.089068;, + 0.092300;0.065500;, + 0.085684;0.040589;, + 0.093378;0.033206;, + 0.099633;0.030487;, + 0.108835;0.064092;, + 0.106888;0.030000;, + 0.118956;0.030180;, + 0.145399;0.030021;, + 0.126267;0.144474;, + 0.110321;0.107038;, + 0.110267;0.084259;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.446308;0.890148;, + 0.386599;0.890389;, + 0.490500;0.890335;, + 0.386599;0.890389;, + 0.323177;0.890304;, + 0.340274;0.890149;, + 0.701231;0.870482;, + 0.703959;0.874119;, + 0.698105;0.870422;, + 0.700232;0.870434;, + 0.702695;0.874154;, + 0.694627;0.870377;, + 0.692524;0.874202;, + 0.708335;0.879644;, + 0.715512;0.878823;, + 0.715344;0.879559;, + 0.718221;0.881485;, + 0.716268;0.880410;, + 0.709052;0.882079;, + 0.699145;0.882113;, + 0.698645;0.879577;, + 0.679869;0.877860;, + 0.685706;0.881038;, + 0.682305;0.886336;, + 0.671119;0.880177;, + 0.665201;0.873645;, + 0.684370;0.870439;, + 0.692764;0.863947;, + 0.698571;0.865034;, + 0.705467;0.865040;, + 0.700232;0.870434;, + 0.709385;0.865348;, + 0.701231;0.870482;, + 0.698105;0.870422;, + 0.723481;0.857372;, + 0.738289;0.846959;, + 0.765120;0.847148;, + 0.778423;0.832185;, + 0.809216;0.832185;, + 0.835277;0.832345;, + 0.857953;0.811562;, + 0.884947;0.811562;, + 0.900041;0.811562;, + 0.925518;0.783527;, + 0.943198;0.783527;, + 0.958386;0.746706;, + 0.950838;0.783527;, + 0.968959;0.747018;, + 0.952485;0.783527;, + 0.970700;0.747018;, + 0.968959;0.747018;, + 0.950838;0.783527;, + 0.960820;0.747018;, + 0.943198;0.783527;, + 0.941909;0.747018;, + 0.925518;0.783527;, + 0.903460;0.811691;, + 0.884947;0.811562;, + 0.843332;0.832378;, + 0.829920;0.832185;, + 0.775906;0.847180;, + 0.809216;0.832185;, + 0.759160;0.846959;, + 0.723481;0.857372;, + 0.738289;0.846959;, + 0.692764;0.863947;, + 0.700927;0.865102;, + 0.690619;0.870347;, + 0.698105;0.870422;, + 0.301868;0.870434;, + 0.300869;0.870482;, + 0.298141;0.874119;, + 0.303995;0.870422;, + 0.309577;0.874202;, + 0.311481;0.870347;, + 0.303529;0.865034;, + 0.296633;0.865040;, + 0.300869;0.870482;, + 0.292715;0.865348;, + 0.301868;0.870434;, + 0.301173;0.865102;, + 0.278619;0.857372;, + 0.267871;0.857814;, + 0.267180;0.857336;, + 0.278619;0.857372;, + 0.309336;0.863947;, + 0.318014;0.863902;, + 0.321749;0.870381;, + 0.322232;0.877860;, + 0.340465;0.871709;, + 0.337644;0.864251;, + 0.328681;0.864616;, + 0.326853;0.852794;, + 0.311997;0.846959;, + 0.288202;0.846959;, + 0.263810;0.846959;, + 0.236980;0.847148;, + 0.223677;0.832185;, + 0.192884;0.832185;, + 0.166823;0.832345;, + 0.144147;0.811562;, + 0.117153;0.811562;, + 0.102059;0.811562;, + 0.076582;0.783527;, + 0.058902;0.783527;, + 0.060191;0.747018;, + 0.041280;0.747018;, + 0.051262;0.783527;, + 0.033141;0.747018;, + 0.049615;0.783527;, + 0.031400;0.747018;, + 0.033141;0.747018;, + 0.051262;0.783527;, + 0.041280;0.747018;, + 0.037846;0.702974;, + 0.036109;0.702974;, + 0.037846;0.702974;, + 0.049670;0.702245;, + 0.099111;0.745757;, + 0.115425;0.782932;, + 0.202939;0.813040;, + 0.259869;0.832185;, + 0.316198;0.834227;, + 0.342074;0.843386;, + 0.344391;0.856029;, + 0.353370;0.853444;, + 0.350261;0.829955;, + 0.340043;0.797789;, + 0.308830;0.812985;, + 0.249210;0.786881;, + 0.258753;0.742803;, + 0.111326;0.678761;, + 0.095854;0.628016;, + 0.226466;0.446592;, + 0.291534;0.610001;, + 0.312483;0.767657;, + 0.358869;0.651784;, + 0.352041;0.549837;, + 0.428630;0.215097;, + 0.361562;0.194294;, + 0.283183;0.299163;, + 0.275401;0.296354;, + 0.077009;0.630232;, + 0.058669;0.652833;, + 0.057006;0.652833;, + 0.058669;0.652833;, + 0.049670;0.702245;, + 0.060191;0.747018;, + 0.058902;0.783527;, + 0.098640;0.811691;, + 0.076582;0.783527;, + 0.099112;0.745757;, + 0.111326;0.678761;, + 0.258754;0.742803;, + 0.115426;0.782932;, + 0.117153;0.811562;, + 0.158768;0.832377;, + 0.172180;0.832185;, + 0.226194;0.847180;, + 0.192884;0.832185;, + 0.144147;0.811562;, + 0.202939;0.813040;, + 0.223677;0.832185;, + 0.242940;0.846959;, + 0.263810;0.846959;, + 0.259869;0.832185;, + 0.308830;0.812985;, + 0.249210;0.786881;, + 0.312483;0.767657;, + 0.340043;0.797789;, + 0.316198;0.834227;, + 0.288202;0.846959;, + 0.309336;0.863947;, + 0.307473;0.870377;, + 0.301868;0.870434;, + 0.698105;0.870422;, + 0.692523;0.874202;, + 0.708335;0.879644;, + 0.709052;0.882079;, + 0.715383;0.882062;, + 0.710287;0.887803;, + 0.705769;0.887809;, + 0.697907;0.888591;, + 0.699145;0.882113;, + 0.698645;0.879577;, + 0.679869;0.877860;, + 0.685707;0.881038;, + 0.682305;0.886336;, + 0.693418;0.887170;, + 0.676165;0.889437;, + 0.665060;0.886628;, + 0.671119;0.880177;, + 0.669568;0.876131;, + 0.661635;0.871709;, + 0.680351;0.870381;, + 0.386599;0.890389;, + 0.340274;0.890149;, + 0.381371;0.889190;, + 0.423111;0.889191;, + 0.459360;0.890401;, + 0.470177;0.889192;, + 0.508471;0.890419;, + 0.513444;0.889500;, + 0.556643;0.889800;, + 0.571458;0.890306;, + 0.600678;0.889190;, + 0.638665;0.889189;, + 0.650591;0.890416;, + 0.667263;0.889188;, + 0.676176;0.890432;, + 0.687704;0.889770;, + 0.699258;0.890279;, + 0.695837;0.890369;, + 0.689225;0.889196;, + 0.684534;0.889187;, + 0.682770;0.890398;, + 0.667263;0.889188;, + 0.661651;0.890376;, + 0.638665;0.889189;, + 0.585526;0.890381;, + 0.600678;0.889190;, + 0.548202;0.890406;, + 0.555887;0.889192;, + 0.490500;0.890335;, + 0.512825;0.889028;, + 0.470177;0.889192;, + 0.446308;0.890148;, + 0.423111;0.889191;, + 0.386599;0.890389;, + 0.488435;0.010183;, + 0.487628;0.010103;, + 0.487129;0.011824;, + 0.485048;0.016665;, + 0.472355;0.056479;, + 0.485013;0.031890;, + 0.464904;0.130846;, + 0.479098;0.072865;, + 0.490769;0.012120;, + 0.489765;0.010141;, + 0.490061;0.011089;, + 0.487628;0.010103;, + 0.487628;0.010103;, + 0.489871;0.011731;, + 0.492343;0.015434;, + 0.492126;0.013352;, + 0.493920;0.010651;, + 0.495137;0.010206;, + 0.499483;0.012538;, + 0.502423;0.010138;, + 0.507971;0.012656;, + 0.508531;0.010109;, + 0.511888;0.010429;, + 0.513319;0.020227;, + 0.517915;0.064874;, + 0.512310;0.102071;, + 0.502665;0.130665;, + 0.526189;0.308903;, + 0.541031;0.260618;, + 0.531067;0.126577;, + 0.536190;0.134620;, + 0.517545;0.036892;, + 0.513901;0.010151;, + 0.510706;0.012038;, + 0.512146;0.011697;, + 0.512152;0.011595;, + 0.509897;0.015770;, + 0.507793;0.017506;, + 0.508062;0.012041;, + 0.503035;0.010934;, + 0.502423;0.010138;, + 0.498444;0.010591;, + 0.494871;0.013304;, + 0.494496;0.017528;, + 0.495789;0.025694;, + 0.498301;0.019977;, + 0.499823;0.013296;, + 0.504728;0.013800;, + 0.503411;0.019789;, + 0.501725;0.035755;, + 0.504198;0.035751;, + 0.505905;0.035025;, + 0.508649;0.020094;, + 0.509408;0.015839;, + 0.511052;0.011718;, + 0.513039;0.010150;, + 0.514521;0.010213;, + 0.514892;0.011637;, + 0.519377;0.023383;, + 0.540796;0.135003;, + 0.584857;0.394717;, + 0.594099;0.393251;, + 0.627113;0.641750;, + 0.643232;0.651784;, + 0.649001;0.794048;, + 0.662057;0.797789;, + 0.651839;0.829955;, + 0.641606;0.777971;, + 0.615144;0.601191;, + 0.568403;0.320540;, + 0.564609;0.307013;, + 0.563508;0.322438;, + 0.569679;0.459962;, + 0.601873;0.571248;, + 0.604920;0.553696;, + 0.490178;0.010656;, + 0.487628;0.010103;, + 0.493042;0.013619;, + 0.491143;0.013545;, + 0.493897;0.022065;, + 0.494708;0.025165;, + 0.496109;0.038025;, + 0.496900;0.042717;, + 0.497070;0.054970;, + 0.497881;0.074808;, + 0.497394;0.074808;, + 0.497314;0.053546;, + 0.498601;0.074808;, + 0.499228;0.043425;, + 0.501186;0.058514;, + 0.502472;0.074808;, + 0.503996;0.060137;, + 0.504644;0.074808;, + 0.505146;0.053000;, + 0.504433;0.074808;, + 0.504035;0.053976;, + 0.501722;0.074808;, + 0.503458;0.042203;, + 0.505290;0.032281;, + 0.506530;0.032597;, + 0.497350;0.042125;, + 0.508030;0.021206;, + 0.507025;0.020992;, + 0.504414;0.018935;, + 0.502045;0.033432;, + 0.498821;0.047893;, + 0.497989;0.031939;, + 0.497808;0.017567;, + 0.499556;0.016115;, + 0.505257;0.013689;, + 0.508032;0.013541;, + 0.508405;0.010608;, + 0.508605;0.010201;, + 0.511772;0.010952;, + 0.513629;0.023398;, + 0.506336;0.011371;, + 0.502929;0.010247;, + 0.503335;0.013823;, + 0.511991;0.092162;, + 0.522612;0.099900;, + 0.518422;0.123328;, + 0.522310;0.131415;, + 0.527070;0.146534;, + 0.533891;0.187833;, + 0.540542;0.236386;, + 0.537165;0.151409;, + 0.529312;0.099082;, + 0.517932;0.023430;, + 0.514623;0.012154;, + 0.523159;0.022462;, + 0.521505;0.020832;, + 0.565406;0.068969;, + 0.566121;0.069914;, + 0.529743;0.033734;, + 0.529745;0.056479;, + 0.626436;0.148397;, + 0.619082;0.133255;, + 0.598475;0.107521;, + 0.614665;0.137104;, + 0.530726;0.061423;, + 0.573470;0.215097;, + 0.650059;0.549837;, + 0.689617;0.767657;, + 0.693270;0.812985;, + 0.685902;0.834227;, + 0.660026;0.843386;, + 0.657709;0.856029;, + 0.673419;0.864616;, + 0.675247;0.852794;, + 0.690103;0.846959;, + 0.684086;0.863902;, + 0.713898;0.846959;, + 0.742231;0.832185;, + 0.799161;0.813040;, + 0.886675;0.782932;, + 0.902988;0.745757;, + 0.952430;0.702245;, + 0.964254;0.702974;, + 0.965991;0.702974;, + 0.964254;0.702974;, + 0.952430;0.702245;, + 0.902989;0.745757;, + 0.886674;0.782932;, + 0.857953;0.811562;, + 0.799161;0.813040;, + 0.752890;0.786881;, + 0.743346;0.742803;, + 0.890774;0.678761;, + 0.906246;0.628016;, + 0.925091;0.630231;, + 0.943432;0.652833;, + 0.945094;0.652833;, + 0.943432;0.652833;, + 0.925091;0.630231;, + 0.899970;0.574593;, + 0.894592;0.562854;, + 0.899970;0.574593;, + 0.738602;0.308736;, + 0.774247;0.364940;, + 0.726699;0.296353;, + 0.707048;0.258873;, + 0.661943;0.191857;, + 0.726699;0.296353;, + 0.718917;0.299163;, + 0.775634;0.446593;, + 0.710566;0.610001;, + 0.689617;0.767658;, + 0.693270;0.812985;, + 0.742231;0.832185;, + 0.778423;0.832185;, + 0.713898;0.846959;, + 0.684086;0.863902;, + 0.673419;0.864616;, + 0.664456;0.864251;, + 0.655923;0.865034;, + 0.654331;0.876154;, + 0.660818;0.881071;, + 0.642755;0.884690;, + 0.646402;0.888965;, + 0.703108;0.890033;, + 0.708208;0.889010;, + 0.515261;0.120349;, + 0.509970;0.119839;, + 0.496605;0.120012;, + 0.490458;0.093358;, + 0.490506;0.119816;, + 0.486840;0.120349;, + 0.483678;0.123328;, + 0.479488;0.099901;, + 0.479790;0.131415;, + 0.475030;0.146534;, + 0.468209;0.187833;, + 0.461559;0.236386;, + 0.464935;0.151409;, + 0.483554;0.049859;, + 0.490812;0.011511;, + 0.472788;0.099082;, + 0.433697;0.320540;, + 0.430847;0.353254;, + 0.445639;0.318825;, + 0.455688;0.288639;, + 0.450131;0.342100;, + 0.440122;0.431392;, + 0.455036;0.356518;, + 0.462157;0.367911;, + 0.476507;0.409769;, + 0.473285;0.368246;, + 0.480133;0.368249;, + 0.487061;0.368254;, + 0.498099;0.425111;, + 0.494042;0.368260;, + 0.501050;0.368262;, + 0.508058;0.368260;, + 0.514441;0.416973;, + 0.515039;0.368254;, + 0.521967;0.368249;, + 0.528815;0.368246;, + 0.534088;0.423863;, + 0.539943;0.367911;, + 0.561978;0.431392;, + 0.547064;0.356518;, + 0.551969;0.342100;, + 0.556462;0.318825;, + 0.546412;0.288639;, + 0.571253;0.353254;, + 0.568403;0.320539;, + 0.537196;0.130846;, + 0.573470;0.215097;, + 0.640538;0.194294;, + 0.644413;0.168005;, + 0.718917;0.299163;, + 0.906246;0.628016;, + 0.890774;0.678761;, + 0.743346;0.742803;, + 0.752889;0.786881;, + 0.710566;0.610001;, + 0.775634;0.446592;, + 0.640538;0.194294;, + 0.650059;0.549836;, + 0.643232;0.651784;, + 0.662057;0.797789;, + 0.685902;0.834227;, + 0.690103;0.846959;, + 0.675247;0.852794;, + 0.660026;0.843386;, + 0.651839;0.829955;, + 0.657709;0.856029;, + 0.648730;0.853444;, + 0.647267;0.876947;, + 0.628327;0.880719;, + 0.608642;0.886765;, + 0.623417;0.887720;, + 0.627812;0.890082;, + 0.598109;0.889442;, + 0.583796;0.886770;, + 0.547635;0.889443;, + 0.507716;0.889929;, + 0.456781;0.889867;, + 0.426411;0.890050;, + 0.394375;0.888921;, + 0.377512;0.889440;, + 0.352955;0.890024;, + 0.337380;0.890367;, + 0.325934;0.889437;, + 0.310972;0.890206;, + 0.305735;0.887178;, + 0.296331;0.887809;, + 0.302743;0.890239;, + 0.293892;0.889010;, + 0.300617;0.890165;, + 0.291813;0.887803;, + 0.288907;0.886343;, + 0.286717;0.882062;, + 0.293048;0.882079;, + 0.302955;0.882113;, + 0.319090;0.886409;, + 0.331524;0.886743;, + 0.362272;0.887662;, + 0.369352;0.883781;, + 0.341215;0.882369;, + 0.330981;0.880177;, + 0.316394;0.881038;, + 0.303455;0.879577;, + 0.293765;0.879644;, + 0.285832;0.880410;, + 0.284092;0.882085;, + 0.283879;0.881485;, + 0.286588;0.878823;, + 0.332532;0.876131;, + 0.347769;0.876154;, + 0.354833;0.876947;, + 0.373773;0.880719;, + 0.366615;0.873362;, + 0.370409;0.837038;, + 0.367058;0.792927;, + 0.346177;0.865034;, + 0.286717;0.882062;, + 0.286756;0.879559;, + 0.299405;0.874154;, + 0.301868;0.870434;, + 0.309576;0.874202;, + 0.317730;0.870439;, + 0.318014;0.863902;, + 0.311997;0.846959;, + 0.326853;0.852794;, + 0.328681;0.864616;, + 0.337715;0.864131;, + 0.344391;0.856029;, + 0.342074;0.843386;, + 0.350261;0.829955;, + 0.353370;0.853444;, + 0.344712;0.869460;, + 0.336899;0.873645;, + 0.322232;0.877860;, + 0.303455;0.879577;, + 0.293765;0.879644;, + 0.293048;0.882079;, + 0.296331;0.887809;, + 0.304193;0.888591;, + 0.302955;0.882113;, + 0.316394;0.881038;, + 0.330981;0.880177;, + 0.347769;0.876154;, + 0.354833;0.876947;, + 0.341215;0.882369;, + 0.331524;0.886743;, + 0.319090;0.886409;, + 0.308682;0.887170;, + 0.325934;0.889437;, + 0.352955;0.890024;, + 0.323177;0.890304;, + 0.377512;0.889440;, + 0.362272;0.887662;, + 0.364120;0.883857;, + 0.373773;0.880719;, + 0.389067;0.886658;, + 0.417096;0.889952;, + 0.454549;0.889435;, + 0.494319;0.889492;, + 0.547635;0.889443;, + 0.597647;0.889694;, + 0.627812;0.890082;, + 0.646402;0.888965;, + 0.624593;0.886653;, + 0.601031;0.886662;, + 0.575702;0.886669;, + 0.549152;0.886673;, + 0.521717;0.886676;, + 0.494125;0.886746;, + 0.466584;0.886675;, + 0.439563;0.886671;, + 0.413539;0.886666;, + 0.398183;0.880766;, + 0.396353;0.874412;, + 0.370055;0.873542;, + 0.370410;0.837038;, + 0.379467;0.854889;, + 0.396082;0.853042;, + 0.395932;0.766606;, + 0.397299;0.658328;, + 0.367058;0.792928;, + 0.368618;0.741847;, + 0.360494;0.777971;, + 0.353099;0.794048;, + 0.358869;0.651784;, + 0.352042;0.549836;, + 0.291534;0.610001;, + 0.226466;0.446593;, + 0.428630;0.215097;, + 0.408001;0.393252;, + 0.374987;0.641750;, + 0.386956;0.601192;, + 0.397189;0.564494;, + 0.427041;0.446544;, + 0.434855;0.575414;, + 0.422790;0.776149;, + 0.417325;0.854938;, + 0.422707;0.874440;, + 0.424233;0.880770;, + 0.451531;0.880772;, + 0.479742;0.880773;, + 0.508172;0.880918;, + 0.536548;0.880772;, + 0.564332;0.880772;, + 0.591087;0.880769;, + 0.616316;0.880753;, + 0.639351;0.881486;, + 0.647734;0.885539;, + 0.665060;0.886628;, + 0.676165;0.889437;, + 0.697907;0.888591;, + 0.705769;0.887809;, + 0.713193;0.886343;, + 0.718008;0.882085;, + 0.715383;0.882062;, + 0.693418;0.887170;, + 0.660818;0.881071;, + 0.647267;0.876947;, + 0.630149;0.872231;, + 0.605747;0.874412;, + 0.579605;0.871994;, + 0.551872;0.874441;, + 0.523534;0.871996;, + 0.494765;0.871583;, + 0.478681;0.874441;, + 0.442501;0.872090;, + 0.459417;0.828261;, + 0.472776;0.854900;, + 0.500500;0.826890;, + 0.543553;0.854903;, + 0.556403;0.828288;, + 0.598195;0.854857;, + 0.628550;0.833702;, + 0.635042;0.792927;, + 0.648730;0.853444;, + 0.654331;0.876154;, + 0.657388;0.869460;, + 0.664385;0.864131;, + 0.633483;0.741848;, + 0.489231;0.675841;, + 0.513787;0.774264;, + 0.525146;0.679271;, + 0.505230;0.438227;, + 0.537485;0.575475;, + 0.566695;0.776133;, + 0.603861;0.825076;, + 0.609648;0.689501;, + 0.585286;0.688210;, + 0.557536;0.575432;, + 0.482023;0.308695;, + 0.492445;0.102011;, + 0.490503;0.039593;, + 0.468964;0.146672;, + 0.466464;0.261494;, + 0.454506;0.575446;, + 0.474915;0.575503;, + 0.448248;0.776086;, + 0.437961;0.308919;, + 0.433697;0.320540;, + 0.417243;0.394717;, + 0.361562;0.194294;, + 0.283183;0.299162;, + 0.375664;0.148397;, + 0.422492;0.087293;, + 0.479052;0.022298;, + 0.479312;0.022506;, + 0.487528;0.011959;, + 0.487628;0.010103;, + 0.633483;0.741847;, + 0.635042;0.792927;, + 0.631690;0.837038;, + 0.635485;0.873362;, + 0.620505;0.874367;, + 0.601458;0.879257;, + 0.573879;0.881051;, + 0.557526;0.886774;, + 0.530305;0.886777;, + 0.502930;0.886875;, + 0.470918;0.888931;, + 0.431318;0.886771;, + 0.405648;0.886768;, + 0.400642;0.879257;, + 0.381594;0.874367;, + 0.382215;0.854937;, + 0.389910;0.776855;, + 0.395171;0.638664;, + 0.395584;0.573610;, + 0.410609;0.597534;, + 0.434491;0.605285;, + 0.474654;0.470559;, + 0.500180;0.530193;, + 0.504235;0.487804;, + 0.527446;0.470559;, + 0.567609;0.605285;, + 0.591491;0.597534;, + 0.606929;0.638663;, + 0.606516;0.573610;, + 0.615144;0.601191;, + 0.584858;0.394719;, + 0.594099;0.393252;, + 0.627113;0.641751;, + 0.641606;0.777971;, + 0.649001;0.794048;, + 0.612190;0.776856;, + 0.587103;0.729163;, + 0.582131;0.809334;, + 0.597667;0.849574;, + 0.619885;0.854938;, + 0.585814;0.866846;, + 0.571786;0.840087;, + 0.553878;0.625925;, + 0.533764;0.544703;, + 0.540784;0.630989;, + 0.558296;0.821497;, + 0.560922;0.876364;, + 0.572883;0.874784;, + 0.586468;0.878341;, + 0.564580;0.881687;, + 0.538978;0.882013;, + 0.482948;0.881999;, + 0.451132;0.882070;, + 0.428221;0.881051;, + 0.415632;0.878341;, + 0.441596;0.882066;, + 0.500285;0.882675;, + 0.555310;0.885477;, + 0.570539;0.881237;, + 0.559180;0.885403;, + 0.544114;0.902448;, + 0.542583;0.899918;, + 0.506702;0.893086;, + 0.464765;0.892633;, + 0.448595;0.887965;, + 0.431561;0.881237;, + 0.429217;0.874784;, + 0.416286;0.866846;, + 0.404433;0.849574;, + 0.414997;0.729163;, + 0.419969;0.809334;, + 0.430314;0.840087;, + 0.441178;0.876364;, + 0.442920;0.885403;, + 0.457986;0.902448;, + 0.462406;0.905120;, + 0.481297;0.939031;, + 0.503768;0.931323;, + 0.518166;0.940437;, + 0.522393;0.938580;, + 0.522475;0.936635;, + 0.516503;0.944811;, + 0.509872;0.948383;, + 0.488464;0.947083;, + 0.479698;0.938629;, + 0.479625;0.936635;, + 0.486327;0.944179;, + 0.493723;0.949061;, + 0.507359;0.949400;, + 0.515773;0.944179;, + 0.515186;0.929368;, + 0.507632;0.945600;, + 0.498246;0.946640;, + 0.492025;0.944533;, + 0.486914;0.929368;, + 0.480125;0.923343;, + 0.480622;0.887126;, + 0.486765;0.851770;, + 0.492293;0.927403;, + 0.496816;0.929323;, + 0.501050;0.929131;, + 0.505284;0.929324;, + 0.509807;0.927403;, + 0.515335;0.851770;, + 0.507578;0.847147;, + 0.501050;0.829275;, + 0.494522;0.847147;, + 0.487073;0.755640;, + 0.494700;0.746278;, + 0.501050;0.684992;, + 0.507400;0.746278;, + 0.515027;0.755640;, + 0.525281;0.768956;, + 0.538206;0.769277;, + 0.530335;0.680306;, + 0.519553;0.621487;, + 0.511140;0.581367;, + 0.543421;0.814187;, + 0.546256;0.860745;, + 0.547201;0.891805;, + 0.503619;0.011749;, + 0.500470;0.010579;, + 0.494161;0.010100;, + 0.498976;0.011967;, + 0.493696;0.011658;, + 0.494883;0.020554;, + 0.492985;0.018028;, + 0.488985;0.010201;, + 0.485672;0.021306;, + 0.487628;0.010103;, + 0.478412;0.027636;, + 0.420698;0.086722;, + 0.434620;0.071120;, + 0.386495;0.128359;, + 0.357687;0.168005;, + 0.387435;0.137104;, + 0.471374;0.061423;, + 0.464904;0.130846;, + 0.417243;0.394718;, + 0.386956;0.601191;, + 0.368617;0.741847;, + 0.360494;0.777971;, + 0.374987;0.641750;, + 0.408001;0.393252;, + 0.295053;0.258873;, + 0.227853;0.364941;, + 0.102130;0.574592;, + 0.107508;0.562853;, + 0.263498;0.308736;, + 0.340157;0.191857;, + 0.353099;0.794048;, + 0.275402;0.296353;, + 0.095855;0.628016;, + 0.077009;0.630232;, + 0.102130;0.574592;, + 0.496889;0.011057;, + 0.498058;0.013840;, + 0.494120;0.064193;, + 0.507136;0.062988;, + 0.546242;0.899029;, + 0.521975;0.923343;, + 0.521478;0.887126;, + 0.490960;0.581367;, + 0.468336;0.544703;, + 0.448222;0.625925;, + 0.461316;0.630989;, + 0.482547;0.621487;, + 0.471765;0.680306;, + 0.463894;0.769277;, + 0.476819;0.768956;, + 0.458679;0.814187;, + 0.443804;0.821497;, + 0.455844;0.860745;, + 0.454899;0.891805;, + 0.455858;0.899029;, + 0.903825;0.286541;, + 0.910518;0.247949;, + 0.912197;0.280513;, + 0.889876;0.251561;, + 0.895782;0.287673;, + 0.887750;0.286111;, + 0.879427;0.279636;, + 0.878123;0.244285;, + 0.889301;0.202625;, + 0.917079;0.198809;, + 0.903589;0.153489;, + 0.924582;0.146647;, + 0.915405;0.110158;, + 0.936577;0.101363;, + 0.904726;0.088976;, + 0.937300;0.082925;, + 0.870439;0.191080;, + 0.877999;0.147627;, + 0.866527;0.146865;, + 0.880864;0.108668;, + 0.856440;0.099220;, + 0.866762;0.084754;, + 0.851685;0.078707;, + 0.944254;0.080628;, + 0.927141;0.147039;, + 0.907698;0.088087;, + 0.907119;0.139649;, + 0.919001;0.199918;, + 0.887492;0.205278;, + 0.917310;0.243335;, + 0.893416;0.248324;, + 0.910410;0.286163;, + 0.901093;0.287804;, + 0.891728;0.286476;, + 0.881914;0.279754;, + 0.879599;0.240886;, + 0.869468;0.190783;, + 0.877264;0.147969;, + 0.867565;0.083975;, + 0.866422;0.146727;, + 0.851125;0.079487;; + } + + MeshMaterialList { + 5; + 2980; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4; + + Material { + 1.000000;1.000000;1.000000;1.000000;; + 12.800000; + 0.100000;0.100000;0.100000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "RedShipTexture4.DDS"; + } + } + + Material { + 0.752941;0.752941;0.752941;1.000000;; + 115.199997; + 0.800000;0.800000;0.800000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "RedShipTexture4.DDS"; + } + } + + Material { + 0.105882;0.105882;0.105882;1.000000;; + 25.600000; + 0.300000;0.300000;0.300000;; + 0.000000;0.000000;0.000000;; + } + + Material { + 1.000000;1.000000;1.000000;1.000000;; + 51.200001; + 0.700000;0.700000;0.700000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "RedShipTexture4.DDS"; + } + } + + Material { + 1.000000;1.000000;1.000000;1.000000;; + 51.200001; + 0.000000;0.000000;0.000000;; + 1.000000;1.000000;1.000000;; + + TextureFilename { + "RedShipTexture4.DDS"; + } + } + } + + VertexDuplicationIndices { + 1755; + 1528; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 15, + 15, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 1, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 15, + 117, + 15, + 119, + 15, + 121, + 15, + 123, + 15, + 125, + 15, + 127, + 15, + 129, + 15, + 131, + 15, + 133, + 15, + 135, + 15, + 137, + 15, + 139, + 15, + 141, + 15, + 143, + 15, + 145, + 15, + 147, + 15, + 149, + 15, + 151, + 15, + 153, + 15, + 155, + 15, + 157, + 15, + 159, + 15, + 161, + 15, + 163, + 15, + 165, + 15, + 167, + 15, + 169, + 15, + 171, + 15, + 173, + 15, + 175, + 15, + 177, + 178, + 15, + 180, + 15, + 182, + 15, + 184, + 15, + 186, + 15, + 188, + 15, + 190, + 15, + 192, + 15, + 194, + 15, + 196, + 15, + 198, + 15, + 15, + 3, + 92, + 90, + 88, + 205, + 86, + 207, + 84, + 82, + 210, + 80, + 78, + 213, + 76, + 74, + 216, + 72, + 70, + 219, + 68, + 66, + 222, + 64, + 62, + 60, + 226, + 58, + 228, + 56, + 54, + 52, + 232, + 50, + 48, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 46, + 249, + 44, + 42, + 40, + 253, + 254, + 255, + 256, + 257, + 34, + 259, + 30, + 261, + 26, + 263, + 24, + 265, + 112, + 267, + 108, + 105, + 270, + 271, + 104, + 102, + 100, + 1, + 276, + 277, + 278, + 279, + 280, + 281, + 282, + 283, + 8, + 10, + 286, + 287, + 288, + 289, + 290, + 291, + 292, + 2, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 7, + 6, + 306, + 9, + 308, + 5, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 348, + 349, + 350, + 351, + 352, + 353, + 354, + 355, + 356, + 357, + 358, + 359, + 360, + 361, + 362, + 363, + 364, + 365, + 366, + 367, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 378, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 389, + 390, + 391, + 392, + 393, + 394, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 449, + 450, + 451, + 452, + 453, + 454, + 455, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 472, + 473, + 474, + 475, + 1, + 3, + 2, + 479, + 11, + 13, + 482, + 483, + 34, + 256, + 255, + 30, + 32, + 489, + 490, + 491, + 479, + 493, + 494, + 495, + 496, + 255, + 40, + 499, + 500, + 501, + 502, + 503, + 504, + 505, + 506, + 507, + 508, + 509, + 510, + 511, + 512, + 513, + 514, + 515, + 516, + 517, + 518, + 519, + 520, + 521, + 522, + 523, + 524, + 525, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 538, + 539, + 540, + 541, + 542, + 543, + 544, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 554, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 92, + 3, + 1, + 566, + 567, + 568, + 569, + 570, + 571, + 572, + 573, + 574, + 575, + 576, + 577, + 578, + 579, + 580, + 581, + 582, + 583, + 584, + 585, + 586, + 587, + 588, + 589, + 590, + 591, + 592, + 593, + 594, + 595, + 596, + 597, + 598, + 599, + 600, + 601, + 602, + 603, + 604, + 605, + 606, + 607, + 608, + 609, + 610, + 611, + 612, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 623, + 624, + 625, + 626, + 627, + 628, + 629, + 630, + 631, + 632, + 633, + 634, + 635, + 636, + 637, + 638, + 483, + 640, + 475, + 642, + 474, + 644, + 645, + 646, + 647, + 648, + 649, + 650, + 651, + 652, + 653, + 654, + 655, + 656, + 657, + 658, + 659, + 660, + 661, + 662, + 663, + 664, + 665, + 666, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 675, + 676, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 685, + 686, + 687, + 688, + 689, + 690, + 691, + 692, + 693, + 694, + 695, + 696, + 697, + 698, + 699, + 700, + 701, + 702, + 703, + 704, + 705, + 706, + 707, + 708, + 709, + 710, + 711, + 712, + 713, + 714, + 715, + 716, + 717, + 718, + 719, + 720, + 721, + 34, + 723, + 30, + 725, + 489, + 727, + 494, + 729, + 491, + 731, + 479, + 733, + 734, + 12, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 759, + 760, + 761, + 762, + 763, + 764, + 765, + 766, + 767, + 768, + 769, + 770, + 771, + 772, + 773, + 774, + 775, + 776, + 777, + 778, + 779, + 780, + 781, + 782, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 795, + 796, + 797, + 798, + 799, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 816, + 817, + 818, + 819, + 820, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 349, + 844, + 845, + 389, + 387, + 848, + 849, + 850, + 851, + 852, + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 851, + 873, + 848, + 850, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 850, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 912, + 920, + 911, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + 938, + 939, + 940, + 941, + 942, + 943, + 944, + 945, + 946, + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 911, + 850, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1026, + 1027, + 1028, + 1029, + 1030, + 1031, + 1032, + 1033, + 1034, + 1035, + 1036, + 845, + 387, + 384, + 382, + 1041, + 379, + 1043, + 377, + 375, + 1046, + 373, + 371, + 1049, + 369, + 1051, + 368, + 1053, + 1054, + 366, + 365, + 1057, + 363, + 1059, + 361, + 1061, + 359, + 1063, + 356, + 844, + 354, + 352, + 842, + 350, + 349, + 1071, + 1072, + 1073, + 1074, + 1075, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1072, + 1072, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + 1104, + 1105, + 1106, + 1107, + 1108, + 1109, + 1110, + 1090, + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1072, + 1148, + 1149, + 1150, + 1151, + 1152, + 1153, + 1154, + 1155, + 1156, + 1157, + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1174, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 441, + 440, + 436, + 437, + 435, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1219, + 1220, + 1221, + 1222, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1233, + 1234, + 1235, + 1236, + 1237, + 1238, + 1239, + 1240, + 1241, + 1242, + 1243, + 1244, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1254, + 1255, + 1256, + 1257, + 1258, + 1259, + 1260, + 1261, + 1262, + 1263, + 1264, + 1265, + 1266, + 1267, + 1268, + 1269, + 1270, + 1271, + 442, + 469, + 468, + 1275, + 467, + 465, + 464, + 1279, + 463, + 429, + 430, + 428, + 1284, + 1285, + 1286, + 1287, + 1288, + 1289, + 1290, + 423, + 425, + 1293, + 424, + 459, + 1296, + 458, + 457, + 455, + 1300, + 454, + 453, + 452, + 1304, + 450, + 449, + 448, + 1308, + 447, + 1310, + 433, + 432, + 1313, + 431, + 1315, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1331, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1342, + 1343, + 1344, + 1345, + 1346, + 1347, + 1348, + 1349, + 1350, + 1351, + 1352, + 348, + 1354, + 347, + 1356, + 1357, + 346, + 1359, + 390, + 1361, + 1362, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1371, + 1372, + 1373, + 1374, + 1375, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1386, + 1387, + 1388, + 1389, + 911, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1399, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1413, + 1414, + 1415, + 1416, + 1417, + 1418, + 1419, + 1420, + 389, + 1422, + 1423, + 1424, + 1425, + 1426, + 1427, + 1428, + 1429, + 1430, + 1431, + 1432, + 1433, + 1434, + 1435, + 1436, + 1437, + 1438, + 1439, + 1440, + 1441, + 1442, + 1443, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1455, + 1456, + 1457, + 1458, + 1459, + 1460, + 1461, + 1462, + 1463, + 1464, + 1465, + 1466, + 1467, + 1468, + 1469, + 1470, + 1471, + 1472, + 1473, + 1474, + 1475, + 1476, + 1477, + 1478, + 1479, + 1480, + 1481, + 1482, + 1483, + 1484, + 1485, + 1486, + 1487, + 1488, + 1489, + 1490, + 1491, + 1492, + 1493, + 1494, + 1495, + 1496, + 1497, + 1498, + 1499, + 1500, + 1501, + 1502, + 1503, + 1504, + 1505, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1516, + 1517, + 1518, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1529, + 1530, + 1531, + 1532, + 1533, + 1534, + 1535, + 1536, + 1537, + 1072, + 1539, + 1540, + 1541, + 1542, + 1543, + 1544, + 1545, + 1546, + 1547, + 1548, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1558, + 1559, + 1560, + 1561, + 1562, + 1563, + 1564, + 1565, + 1566, + 1567, + 1568, + 1569, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1582, + 1583, + 1584, + 1585, + 1586, + 1587, + 1588, + 1589, + 1590, + 1591, + 1592, + 1593, + 1594, + 1595, + 1596, + 1597, + 1598, + 1599, + 1600, + 1601, + 1602, + 1603, + 1604, + 1605, + 1606, + 1607, + 1608, + 1609, + 1610, + 1611, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1627, + 1628, + 1629, + 1630, + 1631, + 1632, + 1633, + 1634, + 1635, + 1636, + 1637, + 1638, + 1639, + 1640, + 1641, + 1642, + 1643, + 1644, + 1645, + 1646, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1654, + 1655, + 1656, + 1657, + 1658, + 1659, + 1660, + 1661, + 1662, + 1663, + 1664, + 1665, + 1666, + 1667, + 1072, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1675, + 1676, + 1677, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1689, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1703, + 1704, + 1705, + 1706, + 1707, + 1708, + 1709, + 1710, + 1711, + 1712, + 1713, + 893, + 898, + 895, + 1717, + 890, + 888, + 886, + 884, + 1722, + 900, + 1724, + 902, + 1726, + 905, + 873, + 908, + 881, + 1731, + 878, + 1733, + 876, + 871, + 870, + 923, + 1000, + 924, + 1740, + 998, + 1742, + 991, + 1744, + 954, + 951, + 949, + 946, + 944, + 941, + 1751, + 925, + 938, + 926; + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/RedShipTexture4.DDS b/Source Code updated 08-12-05/Spacewar3D/Media/RedShipTexture4.DDS new file mode 100644 index 0000000..ede492e Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/RedShipTexture4.DDS differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/ShipTexture4.DDS b/Source Code updated 08-12-05/Spacewar3D/Media/ShipTexture4.DDS new file mode 100644 index 0000000..a9c6209 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/ShipTexture4.DDS differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/ShockWave.x b/Source Code updated 08-12-05/Spacewar3D/Media/ShockWave.x new file mode 100644 index 0000000..aa50257 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/ShockWave.x differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/Shockwave.png b/Source Code updated 08-12-05/Spacewar3D/Media/Shockwave.png new file mode 100644 index 0000000..ad7d32e Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/Shockwave.png differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/SpaceSphere.x b/Source Code updated 08-12-05/Spacewar3D/Media/SpaceSphere.x new file mode 100644 index 0000000..20cca8d Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/SpaceSphere.x differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/Tiny_skin.bmp b/Source Code updated 08-12-05/Spacewar3D/Media/Tiny_skin.bmp new file mode 100644 index 0000000..91d184f Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/Tiny_skin.bmp differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/Universe2.dds b/Source Code updated 08-12-05/Spacewar3D/Media/Universe2.dds new file mode 100644 index 0000000..ee213dc Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/Universe2.dds differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/VectorPanel.png b/Source Code updated 08-12-05/Spacewar3D/Media/VectorPanel.png new file mode 100644 index 0000000..5a28ae4 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/VectorPanel.png differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/WhiteShip.x b/Source Code updated 08-12-05/Spacewar3D/Media/WhiteShip.x new file mode 100644 index 0000000..a495af8 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Media/WhiteShip.x @@ -0,0 +1,16120 @@ +xof 0303txt 0032 +template VertexDuplicationIndices { + + DWORD nIndices; + DWORD nOriginalVertices; + array DWORD indices[nIndices]; +} + +template EffectParamDWord { + + STRING ParamName; + DWORD Value; +} + +template FVFData { + + DWORD dwFVF; + DWORD nDWords; + array DWORD data[nDWords]; +} + +template EffectFloats { + + DWORD nFloats; + array FLOAT Floats[nFloats]; +} + +template EffectString { + + STRING Value; +} + +template EffectDWord { + <622c0ed0-956e-4da9-908a-2af94f3ce716> + DWORD Value; +} + +template EffectInstance { + + STRING EffectFilename; + [...] +} + +template AnimTicksPerSecond { + <9e415a43-7ba6-4a73-8743-b73d47e88476> + DWORD AnimTicksPerSecond; +} + +template VertexElement { + + DWORD Type; + DWORD Method; + DWORD Usage; + DWORD UsageIndex; +} + +template DeclData { + + DWORD nElements; + array VertexElement Elements[nElements]; + DWORD nDWords; + array DWORD data[nDWords]; +} + +template EffectParamFloats { + <3014b9a0-62f5-478c-9b86-e4ac9f4e418b> + STRING ParamName; + DWORD nFloats; + array FLOAT Floats[nFloats]; +} + +template EffectParamString { + <1dbc4c88-94c1-46ee-9076-2c28818c9481> + STRING ParamName; + STRING Value; +} + + +Frame { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Mesh Mesh_RedShipStretched9_frozen { + 1755; + 0.584528;-0.019685;-2.082047;, + 0.585738;-0.009913;-2.100000;, + 0.582267;0.022328;-2.100000;, + 0.577701;0.048408;-2.100000;, + 0.561961;0.087381;-2.081948;, + -0.514826;-0.424377;-1.976345;, + -0.837375;-0.061806;-1.979258;, + -0.672095;-0.250501;-1.981134;, + -0.324358;0.383266;-1.983475;, + -0.889670;0.282478;-1.976064;, + 0.010620;0.440164;-1.979410;, + 0.497172;-0.160433;-2.113509;, + 0.532791;-0.125281;-2.100000;, + 0.488038;-0.166907;-2.100000;, + -0.025793;0.075771;-1.650000;, + -0.007516;0.078349;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.013487;0.188596;-1.680000;, + 0.015018;0.077630;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.048081;0.183716;-1.680000;, + -0.133559;0.296316;-2.100000;, + -0.037465;0.304187;-2.100000;, + 0.027718;0.187281;-1.680000;, + 0.032714;0.074066;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.038987;0.072160;-1.650000;, + -0.074419;0.176509;-1.680000;, + -0.206719;0.284692;-2.100000;, + -0.006934;0.001809;-1.600000;, + -0.276507;0.268150;-2.100000;, + -0.099543;0.166253;-1.680000;, + -0.341379;0.247045;-2.100000;, + -0.122896;0.153168;-1.680000;, + -0.400541;0.221648;-2.100000;, + -0.144195;0.137422;-1.680000;, + -0.464857;0.185115;-2.100000;, + -0.051690;0.066975;-1.650000;, + -0.063079;0.060594;-1.650000;, + -0.072698;0.053482;-1.650000;, + -0.083431;0.042983;-1.650000;, + -0.167349;0.114771;-1.680000;, + -0.516221;0.143245;-2.100000;, + -0.006934;0.001809;-1.600000;, + -0.006934;0.001809;-1.600000;, + -0.006934;0.001809;-1.600000;, + -0.006934;0.001809;-1.600000;, + 0.076994;0.302065;-2.100000;, + 0.061361;0.180506;-1.680000;, + 0.045491;0.069731;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.170448;0.291138;-2.100000;, + 0.087176;0.171747;-1.680000;, + 0.057541;0.063930;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.242155;0.277011;-2.100000;, + 0.111441;0.160064;-1.680000;, + 0.068271;0.057002;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.309558;0.258168;-2.100000;, + 0.133840;0.145603;-1.680000;, + 0.077423;0.049280;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.371777;0.234843;-2.100000;, + 0.153895;0.128680;-1.680000;, + 0.085192;0.040745;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.427487;0.207548;-2.100000;, + 0.171342;0.109513;-1.680000;, + 0.091645;0.031490;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.475949;0.176634;-2.100000;, + 0.185686;0.088941;-1.680000;, + 0.094718;0.025699;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.515794;0.143453;-2.100000;, + 0.194607;0.072131;-1.680000;, + 0.096965;0.020111;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.540575;0.116341;-2.100000;, + 0.201735;0.054405;-1.680000;, + 0.099367;0.010719;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.560376;0.087749;-2.100000;, + 0.207972;0.030013;-1.680000;, + 0.099964;0.004846;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.577701;0.048408;-2.100000;, + 0.209616;0.013843;-1.680000;, + 0.210866;-0.006146;-1.680000;, + 0.100431;-0.002634;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.582267;0.022328;-2.100000;, + 0.585738;-0.009913;-2.100000;, + 0.207764;-0.030630;-1.680000;, + 0.099516;-0.009861;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.577122;-0.049403;-2.100000;, + 0.201568;-0.054585;-1.680000;, + 0.097100;-0.019201;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.559910;-0.088040;-2.100000;, + 0.191805;-0.077674;-1.680000;, + 0.093881;-0.026812;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.532791;-0.125281;-2.100000;, + 0.488038;-0.166907;-2.100000;, + 0.175694;-0.103482;-1.680000;, + 0.086605;-0.038468;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.153877;-0.129238;-1.680000;, + 0.076515;-0.050380;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.427437;-0.208448;-2.100000;, + 0.134027;-0.145410;-1.680000;, + 0.068611;-0.056820;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.372296;-0.234532;-2.100000;, + 0.111245;-0.160612;-1.680000;, + 0.057354;-0.064331;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.309013;-0.259052;-2.100000;, + 0.087421;-0.171599;-1.680000;, + 0.045876;-0.069625;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.242837;-0.276773;-2.100000;, + 0.060992;-0.180997;-1.680000;, + 0.031951;-0.074576;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.169422;-0.291931;-2.100000;, + 0.034840;-0.186058;-1.680000;, + 0.018616;-0.077157;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.096778;-0.300094;-2.100000;, + 0.006894;-0.188993;-1.680000;, + 0.003650;-0.078729;-1.650000;, + -0.006934;0.001809;-1.600000;, + 0.019151;-0.304827;-2.100000;, + -0.021154;-0.187708;-1.680000;, + -0.011378;-0.078040;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.058761;-0.302754;-2.100000;, + -0.047671;-0.184186;-1.680000;, + -0.025022;-0.076228;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.132420;-0.297074;-2.100000;, + -0.074680;-0.176374;-1.680000;, + -0.039379;-0.072076;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.207443;-0.284475;-2.100000;, + -0.099302;-0.166791;-1.680000;, + -0.051468;-0.067371;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.275839;-0.269018;-2.100000;, + -0.123101;-0.152984;-1.680000;, + -0.063429;-0.060431;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.341946;-0.246748;-2.100000;, + -0.144133;-0.137981;-1.680000;, + -0.072031;-0.054295;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.400369;-0.222551;-2.100000;, + -0.163465;-0.117966;-1.680000;, + -0.080665;-0.045356;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.454070;-0.190267;-2.100000;, + -0.182593;-0.093911;-1.680000;, + -0.090087;-0.033507;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.507203;-0.151469;-2.100000;, + -0.197160;-0.066276;-1.680000;, + -0.095735;-0.022793;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.547668;-0.106897;-2.100000;, + -0.205098;-0.042712;-1.680000;, + -0.098201;-0.015473;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.569717;-0.068890;-2.100000;, + -0.209295;-0.018849;-1.680000;, + -0.099774;-0.006523;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.581375;-0.030401;-2.100000;, + -0.210547;0.006150;-1.680000;, + -0.100291;0.003783;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.584853;0.009919;-2.100000;, + -0.208910;0.023714;-1.680000;, + -0.099891;0.008071;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.098658;0.014412;-1.650000;, + -0.580304;0.038249;-2.100000;, + -0.205252;0.042523;-1.680000;, + -0.197342;0.066105;-1.680000;, + -0.095597;0.023537;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.570144;0.068585;-2.100000;, + -0.548172;0.106621;-2.100000;, + -0.185840;0.088812;-1.680000;, + -0.091448;0.031728;-1.650000;, + -0.006934;0.001809;-1.600000;, + -0.006934;0.001809;-1.600000;, + 0.577701;0.048408;-2.100000;, + 0.560376;0.087749;-2.100000;, + 0.540575;0.116341;-2.100000;, + 0.515794;0.143453;-2.100000;, + 0.510726;0.149656;-2.080771;, + 0.576321;0.098826;-2.045763;, + 0.590171;0.029549;-2.062068;, + 0.582267;0.022328;-2.100000;, + 0.475949;0.176634;-2.100000;, + 0.415471;0.224821;-2.053608;, + 0.507625;0.173425;-2.045423;, + 0.528883;0.196471;-2.016354;, + 0.608231;0.118516;-2.016463;, + 0.627917;0.041660;-2.023906;, + 0.610576;-0.031066;-2.037798;, + 0.427487;0.207548;-2.100000;, + 0.371777;0.234843;-2.100000;, + 0.287941;0.273800;-2.053220;, + 0.269211;0.308144;-2.016165;, + 0.413281;0.261196;-2.016246;, + 0.584582;0.216673;-1.995674;, + 0.693728;0.083926;-1.995496;, + 0.678854;-0.023065;-2.004519;, + 0.309558;0.258168;-2.100000;, + 0.242155;0.277011;-2.100000;, + 0.140435;0.303583;-2.052975;, + 0.043001;0.339792;-2.016198;, + 0.298090;0.340123;-1.995596;, + 0.464946;0.358602;-1.981824;, + 0.795138;0.151807;-1.979234;, + 0.757959;-0.036678;-1.987479;, + 0.170448;0.291138;-2.100000;, + 0.076994;0.302065;-2.100000;, + -0.020228;0.312739;-2.051223;, + -0.185346;0.297117;-2.051943;, + -0.189390;0.323889;-2.016137;, + -0.046990;0.372603;-1.995389;, + 0.010620;0.440164;-1.979410;, + 0.188049;0.548330;-1.976692;, + -0.037465;0.304187;-2.100000;, + -0.133559;0.296316;-2.100000;, + -0.206719;0.284692;-2.100000;, + -0.276507;0.268150;-2.100000;, + -0.378649;0.237251;-2.072261;, + -0.322003;0.268339;-2.044638;, + -0.344103;0.287175;-2.016201;, + -0.380924;0.316855;-1.995611;, + -0.324358;0.383266;-1.983475;, + -0.341379;0.247045;-2.100000;, + -0.400541;0.221648;-2.100000;, + -0.464857;0.185115;-2.100000;, + -0.501510;0.157920;-2.082566;, + -0.444599;0.215561;-2.044787;, + -0.475086;0.230855;-2.016297;, + -0.633775;0.175076;-1.995693;, + -0.738624;0.203658;-1.981353;, + -0.889670;0.282478;-1.976064;, + -0.516221;0.143245;-2.100000;, + -0.561961;0.087381;-2.081949;, + -0.536220;0.148296;-2.045082;, + -0.573409;0.158894;-2.016410;, + -0.618661;0.073031;-2.023786;, + -0.693766;0.023589;-1.999182;, + -0.837375;-0.061806;-1.979258;, + -0.548172;0.106621;-2.100000;, + -0.570144;0.068585;-2.100000;, + -0.580304;0.038249;-2.100000;, + -0.584528;0.019685;-2.082047;, + -0.589705;0.072993;-2.046177;, + -0.598588;-0.010152;-2.053662;, + -0.644793;-0.022273;-2.018720;, + -0.693731;-0.083927;-1.995495;, + -0.672095;-0.250501;-1.981134;, + -0.584853;0.009919;-2.100000;, + -0.581375;-0.030401;-2.100000;, + -0.569669;-0.069860;-2.081949;, + -0.593961;-0.061847;-2.046592;, + -0.608231;-0.118516;-2.016463;, + -0.584583;-0.216674;-1.995673;, + -0.341484;-0.381140;-1.982988;, + -0.514826;-0.424377;-1.976345;, + -0.569717;-0.068890;-2.100000;, + -0.537045;-0.122831;-2.081341;, + -0.561899;-0.117294;-2.045892;, + -0.528883;-0.196471;-2.016354;, + -0.413281;-0.261196;-2.016246;, + -0.298090;-0.340123;-1.995596;, + 0.095447;-0.428682;-1.981275;, + -0.547668;-0.106897;-2.100000;, + -0.507203;-0.151469;-2.100000;, + -0.454070;-0.190267;-2.100000;, + -0.507625;-0.173425;-2.045423;, + -0.405724;-0.229956;-2.052528;, + -0.263266;-0.301614;-2.022393;, + -0.104034;-0.326946;-2.022295;, + 0.046990;-0.372603;-1.995389;, + -0.400369;-0.222551;-2.100000;, + -0.341946;-0.246748;-2.100000;, + -0.281432;-0.272641;-2.061748;, + -0.135697;-0.301383;-2.061686;, + 0.019472;-0.309436;-2.061543;, + 0.041512;-0.330098;-2.022502;, + 0.189390;-0.323889;-2.016137;, + 0.380925;-0.316855;-1.995611;, + -0.275839;-0.269018;-2.100000;, + -0.132420;-0.297074;-2.100000;, + 0.019151;-0.304827;-2.100000;, + 0.174557;-0.298476;-2.052526;, + 0.317409;-0.264558;-2.052676;, + 0.344103;-0.287175;-2.016201;, + 0.475086;-0.230855;-2.016297;, + 0.633772;-0.175076;-1.995694;, + 0.620496;-0.306367;-1.979631;, + 0.169422;-0.291931;-2.100000;, + 0.309013;-0.259052;-2.100000;, + 0.438284;-0.212494;-2.052938;, + 0.555666;-0.129522;-2.045552;, + 0.594136;-0.138954;-2.016665;, + 0.427437;-0.208448;-2.100000;, + 0.488038;-0.166907;-2.100000;, + 0.561961;-0.087381;-2.081948;, + 0.532791;-0.125281;-2.100000;, + 0.559910;-0.088040;-2.100000;, + 0.577122;-0.049403;-2.100000;, + 0.585738;-0.009913;-2.100000;, + -0.323428;0.627146;-1.982359;, + 0.498764;0.585262;-1.982613;, + 0.971606;0.366819;-1.981084;, + 1.046082;0.053645;-1.976680;, + 0.870418;-0.079501;-1.977993;, + -1.007267;0.380740;-1.983444;, + -1.091690;0.691437;-2.012297;, + -0.480256;0.853626;-2.012457;, + 0.233745;0.894983;-2.012880;, + 1.091714;0.691440;-2.012298;, + -1.276287;0.091264;-1.986101;, + -1.609237;0.314544;-2.012296;, + -1.539293;0.754874;-2.030354;, + -1.030371;0.930210;-2.026629;, + -0.187684;1.066054;-2.026465;, + 0.354925;1.076078;-2.028446;, + -1.090871;-0.137427;-1.977853;, + -1.696239;-0.114824;-2.012088;, + -2.019431;0.217971;-2.026648;, + -1.862100;0.521774;-2.030372;, + -1.007268;-0.380740;-1.983444;, + -1.548342;-0.370439;-2.012004;, + -2.051885;-0.122081;-2.026733;, + -2.208946;0.003566;-2.046405;, + -2.172220;0.264883;-2.049908;, + -0.448358;-0.607295;-1.983330;, + -1.091691;-0.691437;-2.012297;, + -1.296511;-0.830540;-2.025872;, + -1.906587;-0.411980;-2.026753;, + -2.172221;-0.264884;-2.049908;, + -0.002936;-0.532874;-1.976389;, + 0.373779;-0.600509;-1.980985;, + 0.233745;-0.894983;-2.012880;, + -0.480256;-0.853627;-2.012457;, + -0.269986;-1.047769;-2.024298;, + 0.803951;-0.332546;-1.976697;, + 1.002365;-0.375717;-1.982926;, + 1.091715;-0.691440;-2.012298;, + 0.607975;-1.054439;-2.030321;, + 1.243371;0.000000;-1.982706;, + 1.548316;-0.370433;-2.012003;, + 1.539298;-0.754874;-2.030354;, + 1.111536;-0.936566;-2.030334;, + 1.609216;0.314537;-2.012295;, + 1.696218;-0.114823;-2.012087;, + 2.014757;-0.139858;-2.024978;, + 1.862103;-0.521775;-2.030373;, + 1.827909;-0.889912;-2.101008;, + 1.323340;-1.106043;-2.101025;, + 1.296491;0.830547;-2.025872;, + 1.920321;0.381766;-2.025884;, + 2.156552;0.180261;-2.040365;, + 2.135567;-0.226223;-2.040262;, + 2.207765;-0.613214;-2.100992;, + 0.755557;1.050666;-2.036831;, + 1.176554;0.987098;-2.049889;, + 1.627080;0.794873;-2.049895;, + 1.868702;0.561065;-2.036658;, + 0.728383;1.246801;-2.101037;, + 1.323339;1.106043;-2.101025;, + 1.827910;0.889912;-2.101008;, + 2.207764;0.613215;-2.100992;, + 2.437169;0.294840;-2.100981;, + 2.499482;0.000000;-2.101083;, + 0.156399;1.293546;-2.099148;, + -0.141315;1.144714;-2.044291;, + -0.410083;1.285609;-2.101038;, + -0.668264;1.068998;-2.037797;, + -1.035241;1.186447;-2.101030;, + -1.176553;0.987101;-2.049890;, + -1.589672;1.006390;-2.101016;, + -1.520230;1.129057;-2.114832;, + -2.035574;0.757791;-2.100999;, + -2.173990;0.793116;-2.114576;, + -2.342678;0.457654;-2.100985;, + -2.503582;0.216804;-2.107611;, + -2.524763;0.497446;-2.112719;, + -2.634058;0.281762;-2.113101;, + -2.506769;-0.249627;-2.109704;, + -2.662308;-0.230717;-2.112256;, + -2.362648;-0.651580;-2.113850;, + -2.499483;0.000000;-2.101083;, + -2.342678;-0.457655;-2.100985;, + -2.135546;-0.788889;-2.112071;, + 2.479278;-0.291976;-2.107705;, + 0.738430;-1.267664;-2.108048;, + 0.164622;-1.309559;-2.104592;, + 0.099711;-1.123765;-2.037903;, + -0.327772;-1.128258;-2.043183;, + -0.755548;-1.050667;-2.036831;, + -0.410082;-1.285609;-2.101038;, + -1.035241;-1.186447;-2.101030;, + -1.176553;-0.987101;-2.049889;, + -1.627064;-0.794867;-2.049891;, + -1.868700;-0.561063;-2.036657;, + -1.589671;-1.006390;-2.101016;, + -2.035573;-0.757792;-2.100999;, + -0.602530;0.570366;4.817112;, + -0.611196;0.698561;4.035167;, + -0.676343;0.646430;4.201257;, + -0.352018;0.614821;5.470017;, + -0.302143;0.727742;4.480578;, + -0.516609;0.745603;3.903926;, + -0.368797;0.783393;3.900063;, + -0.277833;0.806053;3.900031;, + -0.185811;0.826810;3.899970;, + -0.363899;0.563979;5.762108;, + -0.244348;0.607545;5.723260;, + -0.009952;0.666304;5.317332;, + 0.000000;0.763789;4.479489;, + -0.093082;0.841972;3.899911;, + 0.000000;0.847847;3.899884;, + 0.093082;0.841972;3.899911;, + -0.524555;0.487963;5.419045;, + -0.345614;0.346398;6.454107;, + -0.297035;0.534707;6.016507;, + -0.117000;0.606984;5.789751;, + 0.196753;0.600745;5.789423;, + 0.296115;0.631596;5.448692;, + -0.436221;0.411494;5.978360;, + 0.185811;0.826810;3.899970;, + 0.328479;0.724680;4.460145;, + 0.277834;0.806053;3.900031;, + 0.368798;0.783393;3.900063;, + 0.516611;0.745603;3.903925;, + 0.611197;0.698561;4.035167;, + 0.359237;0.570158;5.755197;, + 0.602531;0.570366;4.817113;, + 0.676344;0.646430;4.201257;, + 0.310635;0.534030;5.989142;, + 0.345616;0.346398;6.454108;, + 0.524557;0.487963;5.419044;, + 0.163209;0.529472;6.152802;, + 0.237979;0.466016;6.313915;, + 0.282393;0.337691;6.628276;, + 0.230744;0.336532;6.721437;, + 0.188756;0.339649;6.755748;, + 0.118481;0.347203;6.761631;, + -0.117361;0.550210;6.077196;, + -0.126977;0.477795;6.331692;, + -0.059036;0.349193;6.759630;, + -0.140048;0.344941;6.761896;, + -0.188754;0.339649;6.755748;, + -0.237977;0.466016;6.313916;, + -0.230742;0.336532;6.721437;, + -0.282392;0.337691;6.628276;, + 0.436222;0.411494;5.978360;, + -0.513514;0.080504;-2.719680;, + -0.527700;0.047763;-2.720954;, + -0.482619;0.121038;-2.720876;, + 0.585738;-0.009913;-2.100000;, + 0.577701;0.048408;-2.100000;, + 0.582267;0.022328;-2.100000;, + 0.427437;-0.208448;-2.100000;, + 0.497172;-0.160433;-2.113509;, + 0.488038;-0.166907;-2.100000;, + -0.438261;0.160999;-2.719695;, + -0.384556;0.193864;-2.720744;, + -0.275839;-0.269018;-2.100000;, + -0.341946;-0.246748;-2.100000;, + -0.400369;-0.222551;-2.100000;, + -0.132420;-0.297074;-2.100000;, + -0.207443;-0.284475;-2.100000;, + 0.019151;-0.304827;-2.100000;, + -0.058761;-0.302754;-2.100000;, + 0.309013;-0.259052;-2.100000;, + 0.427437;-0.208448;-2.100000;, + 0.372296;-0.234532;-2.100000;, + 0.169422;-0.291931;-2.100000;, + 0.096778;-0.300094;-2.100000;, + 0.242837;-0.276773;-2.100000;, + 0.578069;-0.069365;-2.147595;, + 0.585738;-0.009913;-2.100000;, + 0.577122;-0.049403;-2.100000;, + 0.632978;-0.032053;-2.234152;, + 0.603735;0.050831;-2.191761;, + 0.577701;0.048408;-2.100000;, + 0.560376;0.087749;-2.100000;, + 0.566840;0.130509;-2.209889;, + 0.540575;0.116341;-2.100000;, + 0.559910;-0.088040;-2.100000;, + 0.532791;-0.125281;-2.100000;, + 0.524160;-0.144509;-2.147158;, + 0.595913;-0.115641;-2.234126;, + 0.849293;-0.072384;-2.525282;, + 0.842571;0.003170;-2.502543;, + 0.655322;0.043500;-2.270136;, + 0.427437;-0.208448;-2.100000;, + 0.518540;-0.191939;-2.234457;, + 0.636566;-0.235758;-2.425732;, + 0.728735;-0.141597;-2.421722;, + 0.878733;-0.171266;-2.608567;, + 1.334677;-0.090790;-3.051804;, + 0.405227;-0.255498;-2.234666;, + 0.547620;-0.345801;-2.523279;, + 0.774894;-0.287168;-2.622787;, + 1.091872;-0.405030;-3.043794;, + 1.257419;-0.297858;-3.092297;, + 1.290187;-0.203018;-3.055108;, + 0.309013;-0.259052;-2.100000;, + 0.263885;-0.301596;-2.234799;, + 0.356485;-0.408081;-2.523477;, + 0.555058;-0.635462;-3.043741;, + 0.785365;-0.570162;-3.054636;, + 0.981076;-0.545020;-3.154101;, + 0.169422;-0.291931;-2.100000;, + 0.104324;-0.326974;-2.234875;, + 0.140703;-0.442353;-2.523592;, + 0.325521;-0.727419;-3.153718;, + 0.520415;-0.712293;-3.202026;, + 0.694848;-0.670723;-3.202031;, + 0.856978;-0.617742;-3.202037;, + 0.019151;-0.304827;-2.100000;, + -0.059899;-0.330131;-2.235427;, + -0.109322;-0.444270;-2.521519;, + -0.084525;-0.695866;-3.043870;, + 0.131909;-0.698331;-3.054650;, + 0.148230;-0.758200;-3.202019;, + 0.333778;-0.740444;-3.221000;, + -0.132420;-0.297074;-2.100000;, + -0.212459;-0.311780;-2.232503;, + -0.211286;-0.386810;-2.414392;, + -0.394129;-0.450688;-2.622622;, + -0.390160;-0.667945;-3.043828;, + -0.147857;-0.750259;-3.173274;, + -0.275839;-0.269018;-2.100000;, + -0.360943;-0.272193;-2.232384;, + -0.397280;-0.344944;-2.414576;, + -0.605367;-0.381967;-2.622715;, + -0.709838;-0.592216;-3.043746;, + -0.640951;-0.685775;-3.202900;, + -0.462688;-0.723642;-3.202887;, + -0.400369;-0.222551;-2.100000;, + -0.484386;-0.213874;-2.232182;, + -0.555842;-0.279349;-2.414693;, + -0.774894;-0.287168;-2.622788;, + -0.980635;-0.475991;-3.043764;, + -0.848308;-0.613578;-3.178357;, + -0.504959;-0.162008;-2.147190;, + -0.575882;-0.134142;-2.225071;, + -0.654782;-0.211000;-2.413533;, + -0.807929;-0.158700;-2.526512;, + -1.144896;-0.370041;-3.054733;, + -0.454070;-0.190267;-2.100000;, + -0.507203;-0.151469;-2.100000;, + -0.568264;-0.088688;-2.147633;, + -0.627883;-0.053154;-2.234611;, + -0.754744;-0.083136;-2.413523;, + -0.547668;-0.106897;-2.100000;, + -0.569717;-0.068890;-2.100000;, + -0.589197;-0.030090;-2.147772;, + -0.606347;0.030655;-2.186367;, + -0.698859;0.046698;-2.332379;, + -0.710930;-0.012043;-2.340169;, + -0.934341;0.015270;-2.607332;, + -0.955107;-0.065144;-2.637516;, + -0.581375;-0.030401;-2.100000;, + -0.584853;0.009919;-2.100000;, + -0.580304;0.038249;-2.100000;, + -0.570144;0.068585;-2.100000;, + -0.585725;0.092129;-2.195210;, + -0.696737;0.109765;-2.362313;, + -0.926284;0.111693;-2.622507;, + -0.548172;0.106621;-2.100000;, + -0.541674;0.149454;-2.194911;, + -0.641065;0.176814;-2.357041;, + -0.516221;0.143245;-2.100000;, + -0.464857;0.185115;-2.100000;, + -0.448953;0.217489;-2.195193;, + -0.544936;0.256811;-2.370187;, + -0.696075;0.337563;-2.622858;, + -0.836938;0.232220;-2.619820;, + -0.400541;0.221648;-2.100000;, + -0.329315;0.274320;-2.212217;, + -0.480742;0.314786;-2.414524;, + -0.503968;0.420043;-2.622768;, + -0.785358;0.570158;-3.054623;, + -0.981077;0.545020;-3.154101;, + -1.091864;0.405026;-3.043781;, + -0.341379;0.247045;-2.100000;, + -0.276507;0.268150;-2.100000;, + -0.178782;0.305512;-2.195404;, + -0.201423;0.358411;-2.346024;, + -0.306969;0.369003;-2.414368;, + -0.277172;0.473756;-2.622680;, + -0.555057;0.635459;-3.043735;, + -0.206719;0.284692;-2.100000;, + -0.133559;0.296316;-2.100000;, + -0.019557;0.318695;-2.193108;, + -0.005094;0.359922;-2.311035;, + -0.066000;0.484197;-2.603551;, + -0.037465;0.304187;-2.100000;, + 0.076994;0.302065;-2.100000;, + 0.147681;0.313724;-2.210064;, + 0.140703;0.442353;-2.523592;, + 0.082736;0.740406;-3.139611;, + -0.139974;0.743333;-3.153702;, + -0.325521;0.727419;-3.153718;, + 0.170448;0.291138;-2.100000;, + 0.242155;0.277011;-2.100000;, + 0.299270;0.282897;-2.209995;, + 0.356485;0.408081;-2.523476;, + 0.390159;0.667944;-3.043827;, + 0.209154;0.754837;-3.202860;, + -0.080929;0.761074;-3.215682;, + 0.309558;0.258168;-2.100000;, + 0.371777;0.234843;-2.100000;, + 0.430073;0.232643;-2.209839;, + 0.547620;0.345802;-2.523279;, + 0.709844;0.592220;-3.043757;, + 0.640952;0.685774;-3.202900;, + 0.462687;0.723642;-3.202887;, + 0.427487;0.207548;-2.100000;, + 0.475949;0.176634;-2.100000;, + 0.521841;0.167536;-2.194970;, + 0.636567;0.235759;-2.425733;, + 0.774894;0.287168;-2.622787;, + 0.980641;0.475994;-3.043774;, + 0.848306;0.613578;-3.178357;, + 0.515794;0.143453;-2.100000;, + 0.854782;0.616102;-3.223047;, + 1.053073;0.530009;-3.203804;, + 1.030094;0.530543;-3.228170;, + 0.682227;0.649416;-3.227352;, + 0.597928;0.690003;-3.226378;, + 0.333777;0.740444;-3.221000;, + 1.178857;0.438901;-3.179029;, + 1.205428;0.429593;-3.221350;, + 1.245083;0.359849;-3.228675;, + 1.029453;0.500276;-3.224873;, + 1.144905;0.370044;-3.054745;, + 1.277594;0.368086;-3.197129;, + 1.331160;0.312881;-3.220887;, + 1.435103;0.093048;-3.228509;, + 1.309829;0.255677;-3.222952;, + 1.174694;0.317332;-3.192826;, + 0.806299;0.160479;-2.526041;, + 1.257420;0.297859;-3.092299;, + 1.370771;0.243854;-3.176368;, + 1.397941;0.221938;-3.206894;, + 1.410196;0.188260;-3.224844;, + 0.702548;0.110640;-2.370409;, + 0.849816;0.067007;-2.523854;, + 1.329945;0.113877;-3.055131;, + 1.290188;0.203017;-3.055109;, + 1.440825;0.125712;-3.197645;, + 1.453875;0.067494;-3.218806;, + 1.344604;0.021663;-3.052567;, + 1.453516;0.004767;-3.183299;, + 1.440825;-0.125712;-3.197645;, + 1.461865;-0.024758;-3.216848;, + 1.370771;-0.243854;-3.176368;, + 1.397941;-0.221938;-3.206894;, + 1.427532;-0.143292;-3.226859;, + 1.277594;-0.368086;-3.197128;, + 1.346337;-0.296237;-3.219161;, + 1.396001;-0.177516;-3.229328;, + 1.403414;0.047913;-3.224376;, + 1.247040;0.131410;-3.168468;, + 1.165079;-0.456523;-3.190389;, + 1.207413;-0.425261;-3.223292;, + 1.295576;-0.334634;-3.228351;, + 1.228869;-0.335694;-3.220278;, + 1.351084;-0.163174;-3.218752;, + 1.295593;-0.004101;-3.181323;, + 1.039452;-0.536143;-3.212407;, + 1.030095;-0.530542;-3.228170;, + 1.029453;-0.500276;-3.224873;, + 0.977023;-0.475243;-3.199081;, + 0.962781;-0.311367;-3.095468;, + 1.190624;-0.232325;-3.168368;, + 0.841618;-0.615319;-3.226328;, + 0.749899;-0.627278;-3.227501;, + 0.707426;-0.590950;-3.199199;, + 0.827951;-0.402462;-3.093652;, + 0.472892;-0.130635;-2.720717;, + 0.925982;-0.180529;-3.008724;, + 0.597928;-0.690003;-3.226378;, + 0.399746;-0.708115;-3.228133;, + 0.447932;-0.619648;-3.169663;, + 0.599571;-0.500596;-3.093833;, + 0.586966;-0.285009;-2.891033;, + 0.434967;-0.163398;-2.719707;, + 0.366071;-0.204930;-2.719702;, + -0.000741;-0.757426;-3.227416;, + 0.070205;-0.729417;-3.224252;, + 0.208154;-0.653709;-3.168815;, + 0.350209;-0.483812;-3.012513;, + 0.254481;-0.245620;-2.720469;, + -0.080929;-0.761074;-3.215682;, + -0.333777;-0.740444;-3.221000;, + -0.371357;-0.720550;-3.228572;, + -0.227486;-0.712796;-3.218926;, + -0.109047;-0.665482;-3.174293;, + 0.162017;-0.508585;-3.009433;, + -0.597926;-0.690004;-3.226378;, + -0.682225;-0.649417;-3.227352;, + -0.404219;-0.629057;-3.169159;, + -0.242126;-0.538351;-3.051573;, + -0.054949;-0.515363;-3.011106;, + -0.854781;-0.616102;-3.223047;, + -1.030097;-0.530541;-3.228170;, + -1.029452;-0.500276;-3.224872;, + -0.977014;-0.475239;-3.199076;, + -0.707418;-0.590945;-3.199193;, + -0.533307;-0.516113;-3.089432;, + -1.053073;-0.530009;-3.203804;, + -1.205429;-0.429593;-3.221349;, + -1.245082;-0.359850;-3.228675;, + -1.174686;-0.317326;-3.192820;, + -0.962678;-0.310425;-3.093486;, + -0.775817;-0.429769;-3.093697;, + -1.178858;-0.438901;-3.179030;, + -1.277594;-0.368086;-3.197128;, + -1.331160;-0.312881;-3.220886;, + -1.443766;-0.076378;-3.227726;, + -1.309831;-0.255677;-3.222953;, + -1.257417;-0.297859;-3.092295;, + -1.370773;-0.243854;-3.176370;, + -1.397941;-0.221938;-3.206894;, + -1.408294;-0.193930;-3.223740;, + -1.290177;-0.203015;-3.055094;, + -1.440825;-0.125712;-3.197645;, + -1.456569;-0.053228;-3.197687;, + -1.460380;0.024723;-3.197932;, + -1.449983;0.050217;-3.226850;, + -1.400916;-0.048033;-3.223921;, + -1.329933;-0.113876;-3.055117;, + -1.334315;0.000000;-3.038420;, + -1.329934;0.113876;-3.055119;, + -1.440825;0.125712;-3.197645;, + -1.409407;0.204798;-3.216141;, + -1.396002;0.177516;-3.229329;, + -1.290176;0.203015;-3.055093;, + -1.370772;0.243855;-3.176369;, + -1.346339;0.296237;-3.219160;, + -1.295577;0.334632;-3.228351;, + -1.228872;0.335694;-3.220279;, + -1.351089;0.163174;-3.218753;, + -1.257417;0.297859;-3.092295;, + -1.277594;0.368086;-3.197128;, + -1.207413;0.425262;-3.223292;, + -1.030097;0.530541;-3.228170;, + -1.165079;0.456523;-3.190388;, + -1.039452;0.536143;-3.212407;, + -0.856978;0.617742;-3.202037;, + -0.841617;0.615319;-3.226328;, + -0.749899;0.627277;-3.227501;, + -1.029453;0.500275;-3.224872;, + -0.694848;0.670723;-3.202031;, + -0.597926;0.690004;-3.226378;, + -0.399746;0.708115;-3.228133;, + -0.707418;0.590945;-3.199193;, + -0.977014;0.475239;-3.199076;, + -0.520416;0.712293;-3.202026;, + -0.333778;0.740444;-3.221000;, + 0.000741;0.757426;-3.227416;, + -0.070205;0.729417;-3.224252;, + -0.208154;0.653709;-3.168815;, + -0.447931;0.619648;-3.169663;, + 0.371357;0.720550;-3.228572;, + 0.227486;0.712796;-3.218926;, + 0.109047;0.665482;-3.174294;, + -0.054949;0.515364;-3.011107;, + -0.255999;0.496085;-3.006935;, + -0.537310;0.522469;-3.097013;, + 0.404219;0.629056;-3.169158;, + 0.162017;0.508585;-3.009433;, + 0.057315;0.278295;-2.719686;, + -0.083830;0.276473;-2.719680;, + -0.219221;0.255555;-2.719686;, + -0.304761;0.228928;-2.720583;, + 0.707426;0.590950;-3.199199;, + 0.698461;0.457988;-3.087895;, + 0.409780;0.469198;-3.009334;, + 0.194504;0.260937;-2.719673;, + 0.977023;0.475243;-3.199081;, + 0.902250;0.347910;-3.087675;, + 0.653340;0.242517;-2.890910;, + 0.319888;0.223891;-2.720582;, + 1.016184;0.249822;-3.089662;, + 0.503279;0.095245;-2.720699;, + 0.474867;0.129835;-2.719700;, + 0.420142;0.174563;-2.719688;, + 0.963058;0.116349;-3.008656;, + 0.523160;0.061540;-2.719714;, + 0.535572;0.017989;-2.719661;, + 0.994087;0.004733;-3.012985;, + 0.533860;-0.027179;-2.719779;, + 0.982988;-0.069419;-3.011516;, + 0.513690;-0.082244;-2.719775;, + 1.253448;-0.107782;-3.169204;, + 0.118612;-0.272999;-2.719681;, + -0.017640;-0.279687;-2.719632;, + -0.140636;-0.268785;-2.720516;, + -0.254481;-0.245620;-2.720469;, + -0.586941;-0.284997;-2.891010;, + -0.366071;-0.204930;-2.719702;, + -0.455662;-0.148411;-2.719730;, + -0.708507;-0.196181;-2.890979;, + -0.502373;-0.097902;-2.719762;, + -0.521748;-0.062148;-2.721115;, + -1.015981;-0.159571;-3.051276;, + -0.968923;-0.013750;-2.996992;, + -0.533860;-0.027179;-2.719779;, + -0.535996;0.009032;-2.719686;, + -0.527700;0.047763;-2.720954;, + -1.247041;-0.131410;-3.168468;, + -1.062721;0.036089;-3.054313;, + -1.015981;0.159571;-3.051276;, + -0.482619;0.121038;-2.720876;, + -0.944003;0.316365;-3.087629;, + -0.384556;0.193864;-2.720744;, + -1.259194;0.048717;-3.163331;, + -1.190625;0.232325;-3.168369;, + -0.754631;0.433107;-3.087861;, + -0.727120;1.298717;-2.112054;, + -1.520230;1.129057;-2.114832;, + -0.140130;1.366452;-2.114212;, + -1.520230;-1.129057;-2.114832;, + -2.362648;-0.651580;-2.113850;, + -2.135546;-0.788889;-2.112071;, + -2.571238;-0.365503;-1.884304;, + -2.654914;-0.354035;-1.823528;, + -2.645681;-0.158973;-1.884957;, + -2.546489;-0.478002;-1.810229;, + -2.954500;-0.348369;-1.734482;, + -2.767266;-0.071060;-1.826369;, + -2.645681;-0.158973;-1.884957;, + -2.658950;0.055353;-1.885508;, + -2.715218;0.259120;-1.822817;, + -2.617427;0.261483;-1.884818;, + -2.434999;-0.561127;-1.885018;, + -2.431221;-0.570804;-1.809707;, + -2.827202;-0.562619;-1.614533;, + -3.151194;-0.464492;-1.614533;, + -3.428411;-0.367191;-1.614533;, + -3.650840;-0.245528;-1.617079;, + -2.543296;-0.516979;-1.928358;, + -2.375201;-0.839661;-1.970503;, + -2.180372;-0.953311;-1.921951;, + -2.169542;-0.805453;-1.812349;, + -2.289530;-0.687274;-1.817940;, + -2.678403;-0.203354;-1.927812;, + -2.753316;-0.438876;-1.991055;, + -2.624610;-0.618962;-1.990279;, + -2.452747;-0.796255;-2.007106;, + -2.258978;-0.944232;-1.997191;, + -2.076601;-1.013887;-1.873733;, + -2.645681;-0.158973;-1.884957;, + -2.695193;0.138713;-1.927407;, + -2.846421;-0.221776;-1.990069;, + -2.762845;-0.430178;-2.019102;, + -2.631242;-0.614011;-2.019497;, + -2.416928;-0.760613;-2.068983;, + -2.251769;-0.882385;-2.072827;, + -2.848641;0.149429;-1.981595;, + -2.884626;-0.070127;-2.012255;, + -2.846926;-0.239411;-2.018905;, + -2.719225;-0.331883;-2.085110;, + -2.614807;-0.482615;-2.094117;, + -2.555182;-0.603564;-2.077754;, + -2.753316;0.438876;-1.991055;, + -2.858683;0.202143;-1.999877;, + -2.881796;0.048838;-2.019176;, + -2.817846;0.095669;-2.068228;, + -2.779238;-0.144296;-2.085046;, + -2.662308;-0.230717;-2.112256;, + -2.543295;0.516979;-1.928358;, + -2.624610;0.618962;-1.990280;, + -2.631243;0.614011;-2.019497;, + -2.762845;0.430177;-2.019102;, + -2.846926;0.239411;-2.018905;, + -2.518003;0.452423;-1.883952;, + -2.381616;0.624640;-1.884351;, + -2.375200;0.839661;-1.970503;, + -2.452747;0.796255;-2.007106;, + -2.658950;0.055353;-1.885508;, + -2.645681;-0.158973;-1.884957;, + -2.362648;-0.651580;-2.113850;, + -2.326019;-0.755275;-2.103861;, + -1.967110;-0.969524;-2.110623;, + -1.843358;-1.094711;-2.083422;, + -2.123042;-1.016407;-2.022442;, + -2.035998;-1.076515;-1.950847;, + -1.520230;-1.129057;-2.114832;, + -1.640930;-1.140537;-2.103899;, + -1.487446;-1.246583;-2.071846;, + -1.818808;-1.150769;-2.039585;, + -1.942166;-1.130917;-1.959984;, + -1.961592;-1.067940;-1.689242;, + -1.115137;-1.290595;-2.109794;, + -1.162387;-1.336903;-2.071938;, + -1.366353;-1.330081;-2.003974;, + -1.690588;-1.225129;-2.003439;, + -0.553752;-1.351020;-2.114964;, + -0.617662;-1.387737;-2.103837;, + -0.816722;-1.404536;-2.072006;, + -1.020339;-1.411733;-2.004028;, + -1.040612;-1.422352;-1.931100;, + -1.390658;-1.338818;-1.930779;, + -1.035241;-1.186447;-2.101030;, + -0.410082;-1.285609;-2.101038;, + 0.098577;-1.381384;-2.115171;, + -0.089403;-1.425356;-2.104497;, + -0.457803;-1.447981;-2.072045;, + -0.657748;-1.469028;-2.004046;, + -1.589671;-1.006390;-2.101016;, + -2.135546;-0.788889;-2.112071;, + 0.164622;-1.309559;-2.104592;, + 0.738430;-1.267664;-2.108048;, + 0.935216;-1.306159;-2.113881;, + 0.618772;-1.390518;-2.103939;, + 0.274515;-1.460488;-2.072057;, + -0.091983;-1.465969;-2.072860;, + -0.283035;-1.501201;-2.004055;, + 1.323340;-1.106043;-2.101025;, + 1.827909;-0.889912;-2.101008;, + 1.986322;-0.910625;-2.115137;, + 1.683750;-1.101458;-2.111299;, + 1.283072;-1.254758;-2.106826;, + 0.991588;-1.373680;-2.071975;, + 0.638926;-1.429285;-2.072029;, + 2.207765;-0.613214;-2.100992;, + 2.326161;-0.663211;-2.115330;, + 2.326014;-0.755275;-2.103862;, + 1.930677;-1.026961;-2.098426;, + 1.640991;-1.193227;-2.071791;, + 1.328027;-1.294441;-2.071896;, + 2.479278;-0.291976;-2.107705;, + 2.632752;-0.276744;-2.113566;, + 2.614808;-0.482615;-2.094117;, + 2.555182;-0.603563;-2.077754;, + 2.407560;-0.769800;-2.068147;, + 2.178507;-0.931498;-2.071511;, + 1.948365;-1.073061;-2.058957;, + 2.587312;0.341483;-2.114601;, + 2.683891;0.168429;-2.110725;, + 2.751632;-0.089538;-2.098945;, + 2.719225;-0.331882;-2.085111;, + 2.762845;-0.430177;-2.019103;, + 2.631243;-0.614010;-2.019498;, + 2.499482;0.000000;-2.101083;, + 2.437169;0.294840;-2.100981;, + 2.413738;0.566759;-2.114940;, + 2.614808;0.482616;-2.094117;, + 2.719225;0.331883;-2.085110;, + 2.779238;0.144296;-2.085047;, + 2.817846;-0.095669;-2.068228;, + 2.846926;-0.239410;-2.018906;, + 2.207764;0.613215;-2.100992;, + 2.133218;0.826625;-2.114680;, + 2.326015;0.755275;-2.103862;, + 2.555182;0.603564;-2.077754;, + 2.631242;0.614011;-2.019498;, + 2.762845;0.430178;-2.019103;, + 2.846926;0.239411;-2.018906;, + 1.827910;0.889912;-2.101008;, + 1.122069;1.256068;-2.114739;, + 1.683748;1.101459;-2.111299;, + 1.930678;1.026961;-2.098426;, + 2.178505;0.931499;-2.071511;, + 2.407559;0.769800;-2.068147;, + 1.323339;1.106043;-2.101025;, + 0.626314;1.339776;-2.115026;, + 0.618772;1.390518;-2.103939;, + 1.289211;1.259643;-2.103921;, + 1.625368;1.181977;-2.084085;, + 1.882229;1.115808;-2.049179;, + 0.728383;1.246801;-2.101037;, + -0.140130;1.366452;-2.114212;, + 0.088542;1.412023;-2.109533;, + 0.388589;1.453204;-2.073220;, + 0.750153;1.414312;-2.073187;, + 1.099100;1.351051;-2.073141;, + 1.429124;1.264618;-2.073079;, + 0.156399;1.293546;-2.099148;, + -0.410083;1.285609;-2.101038;, + -0.727120;1.298717;-2.112054;, + -1.035241;1.186447;-2.101030;, + -1.520230;1.129057;-2.114832;, + -3.097254;-0.135721;-1.739578;, + -3.106443;0.164613;-1.734072;, + -2.954500;0.348369;-1.734482;, + -2.623620;0.390396;-1.822751;, + -2.546489;0.478001;-1.810229;, + -2.431221;0.570804;-1.809707;, + -3.151194;0.464492;-1.614533;, + -2.827202;0.562619;-1.614533;, + -2.511147;0.659178;-1.614534;, + -2.313812;0.712781;-1.681750;, + -2.289530;0.687274;-1.817940;, + -3.507579;0.331609;-1.616708;, + -3.684274;0.445842;-1.444346;, + -3.203547;0.545928;-1.444347;, + -2.455348;0.705624;-1.467870;, + -2.111634;0.832532;-1.573377;, + -2.080859;0.875637;-1.719012;, + -2.170479;0.804508;-1.813728;, + -4.093298;0.348326;-1.444346;, + -3.959739;0.461393;-1.223803;, + -2.553209;0.697683;-1.223169;, + -2.138623;0.805232;-1.048113;, + -2.002898;0.914157;-1.418651;, + -1.961592;1.067940;-1.689242;, + -4.439450;0.223568;-1.446189;, + -4.740652;0.327349;-1.206771;, + -5.122156;0.324049;-0.876968;, + -3.345123;0.569402;-0.922453;, + -2.504692;0.692617;-0.701008;, + -1.888562;0.680009;0.633811;, + -1.965192;0.880809;-1.005015;, + -5.099211;0.237900;-1.206771;, + -5.638103;0.220419;-0.883815;, + -5.338851;0.297872;-0.448721;, + -3.218365;0.564687;-0.414690;, + -2.782949;0.483474;1.115138;, + -1.979246;0.522906;1.808204;, + -5.299703;0.154975;-1.206771;, + -5.872942;0.142457;-0.883815;, + -5.855819;0.205157;-0.463246;, + -5.995571;0.143862;0.052523;, + -5.176611;0.273542;0.323048;, + -3.647228;0.193840;2.997547;, + -0.961931;0.233091;5.664293;, + -1.235948;0.444476;3.612007;, + -6.107017;0.131841;-0.463246;, + -6.152631;0.059887;0.044125;, + -5.876044;0.055810;0.621727;, + -5.632438;0.110693;0.882087;, + -5.382116;0.172822;0.907607;, + -5.974418;0.069882;-0.883815;, + -6.215123;0.064442;-0.463246;, + -6.238245;0.000000;-0.463246;, + -6.175693;0.000000;0.044125;, + -5.898130;0.000000;0.621727;, + -5.298751;0.050098;1.523037;, + -5.996296;0.000000;-0.883815;, + -6.215123;-0.064442;-0.463246;, + -6.152631;-0.059887;0.044125;, + -5.876044;-0.055810;0.621727;, + -5.298750;-0.050098;1.523039;, + -5.227315;0.000000;1.658268;, + -3.628804;0.019758;3.938145;, + -5.974418;-0.069882;-0.883815;, + -6.107017;-0.131841;-0.463246;, + -5.995571;-0.143862;0.052523;, + -5.632438;-0.110693;0.882085;, + -3.155348;-0.029812;4.585597;, + -2.736213;0.015059;5.160008;, + -2.997237;0.059427;4.728239;, + -5.872942;-0.142457;-0.883815;, + -5.855818;-0.205157;-0.463246;, + -5.338849;-0.297872;-0.448721;, + -5.176611;-0.273542;0.323047;, + -5.382112;-0.172822;0.907612;, + -2.997232;-0.059427;4.728245;, + -5.345110;-0.126771;-1.208259;, + -5.638102;-0.220419;-0.883815;, + -5.122155;-0.324049;-0.876968;, + -3.218362;-0.564687;-0.414690;, + -2.782950;-0.483474;1.115137;, + -3.647233;-0.193841;2.997537;, + -2.893872;-0.093407;4.695886;, + -5.099211;-0.237900;-1.206771;, + -4.740652;-0.327349;-1.206771;, + -3.959741;-0.461393;-1.223803;, + -3.345125;-0.569402;-0.922453;, + -2.504692;-0.692618;-0.701007;, + -4.546450;-0.146109;-1.446560;, + -4.368293;-0.255992;-1.444346;, + -4.093298;-0.348327;-1.444346;, + -3.684274;-0.445843;-1.444346;, + -3.203547;-0.545929;-1.444347;, + -2.553210;-0.697683;-1.223169;, + -2.455348;-0.705625;-1.467870;, + -2.138622;-0.805232;-1.048112;, + -1.888562;-0.680009;0.633811;, + -1.979242;-0.522905;1.808218;, + -2.511147;-0.659178;-1.614534;, + -2.313812;-0.712781;-1.681750;, + -2.111634;-0.832532;-1.573376;, + -2.002898;-0.914157;-1.418651;, + -1.965192;-0.880810;-1.005016;, + -2.080859;-0.875637;-1.719012;, + -1.759068;-0.966687;-0.403678;, + -1.866965;-0.936920;-0.819813;, + -1.674469;-0.739806;0.749396;, + -0.167557;-0.035460;8.024826;, + -0.178285;0.006524;8.025742;, + -0.184912;-0.011489;8.005918;, + -0.212548;-0.033328;7.950153;, + -0.381149;-0.086816;7.491512;, + -0.213011;-0.082955;7.774764;, + -0.149894;-0.054720;8.025309;, + -0.145968;-0.032168;8.014389;, + -0.178285;0.006524;8.025742;, + -0.292194;-0.015719;7.885265;, + -1.043463;-0.029896;7.136545;, + -1.665469;-0.046584;6.432648;, + -1.852785;-0.097955;5.903935;, + -0.961931;-0.233091;5.664291;, + -0.480115;-0.200600;6.634830;, + -0.288737;0.022275;7.882863;, + -1.067292;0.013828;7.143124;, + -0.882373;-0.011961;7.322857;, + -1.521606;-0.009707;6.663476;, + -0.179614;0.026335;8.004367;, + -0.300696;0.042822;7.823772;, + -1.509119;0.054568;6.562743;, + -1.904250;0.025986;6.206776;, + -0.178285;0.006524;8.025742;, + 2.658950;0.055352;-1.885509;, + 2.617428;0.261483;-1.884819;, + 2.767266;0.071060;-1.826370;, + 2.645681;-0.158973;-1.884958;, + 2.715218;-0.259120;-1.822818;, + 2.571238;-0.365503;-1.884305;, + 2.623620;-0.390396;-1.822752;, + 2.546489;-0.478001;-1.810230;, + 2.434999;-0.561126;-1.885018;, + 2.543295;-0.516979;-1.928359;, + 2.678403;-0.203354;-1.927813;, + 2.645681;-0.158973;-1.884958;, + 2.695193;0.138714;-1.927408;, + 2.658950;0.055352;-1.885509;, + 2.954500;-0.348369;-1.734483;, + 3.151194;-0.464492;-1.614534;, + 2.827202;-0.562619;-1.614534;, + 2.431221;-0.570804;-1.809708;, + 3.507579;-0.331609;-1.616709;, + 3.684274;-0.445842;-1.444347;, + 3.203547;-0.545928;-1.444347;, + 2.455347;-0.705624;-1.467870;, + 2.511147;-0.659178;-1.614534;, + 2.313812;-0.712781;-1.681751;, + 2.289530;-0.687274;-1.817940;, + 4.093298;-0.348326;-1.444347;, + 3.959741;-0.461393;-1.223804;, + 2.553209;-0.697683;-1.223170;, + 2.138623;-0.805232;-1.048113;, + 2.111634;-0.832532;-1.573376;, + 4.439450;-0.223568;-1.446190;, + 4.740653;-0.327349;-1.206772;, + 5.122156;-0.324049;-0.876968;, + 3.345121;-0.569402;-0.922454;, + 2.504693;-0.692617;-0.701008;, + 5.099211;-0.237900;-1.206772;, + 5.638103;-0.220419;-0.883816;, + 5.338850;-0.297872;-0.448721;, + 3.218363;-0.564687;-0.414690;, + 5.299703;-0.154975;-1.206772;, + 5.872942;-0.142457;-0.883816;, + 6.074676;-0.148644;-0.459651;, + 5.995571;-0.143862;0.052522;, + 5.176611;-0.273542;0.323048;, + 2.782950;-0.483474;1.115138;, + 1.979246;-0.522906;1.808206;, + 1.888563;-0.680009;0.633807;, + 5.974419;-0.069882;-0.883816;, + 6.215124;-0.064442;-0.463247;, + 6.152632;-0.059887;0.044125;, + 5.876045;-0.055810;0.621727;, + 5.632436;-0.110693;0.882090;, + 5.382117;-0.172822;0.907607;, + 5.996296;0.000000;-0.883816;, + 6.238246;0.000000;-0.463247;, + 6.175694;0.000000;0.044125;, + 5.898132;0.000000;0.621727;, + 5.298762;-0.050098;1.523023;, + 3.628805;-0.019758;3.938147;, + 2.997235;-0.059427;4.728246;, + 6.215124;0.064442;-0.463247;, + 6.152632;0.059887;0.044125;, + 5.876045;0.055810;0.621727;, + 5.298762;0.050098;1.523023;, + 5.227326;0.000000;1.658253;, + 5.974418;0.069882;-0.883816;, + 6.107017;0.131841;-0.463247;, + 5.995572;0.143862;0.052522;, + 5.632436;0.110693;0.882089;, + 3.155344;0.029812;4.585606;, + 2.736220;-0.015059;5.160003;, + 5.872942;0.142457;-0.883816;, + 5.855819;0.205157;-0.463247;, + 5.338851;0.297872;-0.448721;, + 5.176610;0.273542;0.323049;, + 5.382118;0.172822;0.907605;, + 2.997236;0.059427;4.728244;, + 2.137101;0.012168;5.932005;, + 5.638103;0.220419;-0.883816;, + 5.122155;0.324049;-0.876968;, + 3.218364;0.564687;-0.414690;, + 2.782949;0.483474;1.115137;, + 3.647232;0.193841;2.997542;, + 2.893877;0.093407;4.695882;, + 5.345110;0.126771;-1.208259;, + 5.099211;0.237900;-1.206772;, + 4.740652;0.327349;-1.206772;, + 3.959740;0.461393;-1.223804;, + 3.345124;0.569402;-0.922453;, + 2.504692;0.692618;-0.701009;, + 4.546450;0.146109;-1.446560;, + 4.368293;0.255992;-1.444347;, + 4.093298;0.348326;-1.444347;, + 3.684274;0.445843;-1.444347;, + 3.203547;0.545928;-1.444347;, + 2.553210;0.697683;-1.223169;, + 3.650840;0.245527;-1.617080;, + 3.428411;0.367191;-1.614534;, + 3.151194;0.464492;-1.614534;, + 2.827202;0.562619;-1.614534;, + 2.455347;0.705625;-1.467870;, + 2.138623;0.805232;-1.048114;, + 2.954499;0.348369;-1.734484;, + 2.546489;0.478001;-1.810230;, + 2.431221;0.570804;-1.809708;, + 2.511147;0.659178;-1.614534;, + 2.313812;0.712781;-1.681750;, + 2.111634;0.832532;-1.573376;, + 2.654914;0.354034;-1.823529;, + 2.518003;0.452423;-1.883953;, + 2.381616;0.624640;-1.884351;, + 2.289530;0.687274;-1.817940;, + 2.617428;0.261483;-1.884819;, + 2.617428;0.261483;-1.884819;, + 2.080858;0.875637;-1.719011;, + 2.002898;0.914157;-1.418651;, + 1.965192;0.880810;-1.005016;, + 1.888562;0.680009;0.633812;, + 2.170479;0.804508;-1.813728;, + 1.961592;1.067940;-1.689243;, + 1.759070;0.966688;-0.403684;, + 1.866965;0.936920;-0.819815;, + 1.674470;0.739806;0.749392;, + 2.133012;0.981897;-1.899638;, + 2.057138;1.004135;-1.822751;, + 2.035999;1.076514;-1.950848;, + 1.942166;1.130917;-1.959983;, + 1.779777;1.084014;-0.992107;, + 2.375204;0.839658;-1.970504;, + 2.238381;0.932144;-1.950585;, + 2.258979;0.944232;-1.997191;, + 2.543295;0.516980;-1.928359;, + 2.624609;0.618963;-1.990280;, + 2.452748;0.796254;-2.007107;, + 2.080859;-0.875637;-1.719011;, + 2.169542;-0.805454;-1.812349;, + 2.180371;-0.953311;-1.921950;, + 2.375204;-0.839658;-1.970504;, + 2.002899;-0.914157;-1.418651;, + 1.961592;-1.067940;-1.689243;, + 2.076602;-1.013886;-1.873733;, + 2.258979;-0.944232;-1.997191;, + 2.452746;-0.796255;-2.007107;, + 2.624610;-0.618962;-1.990280;, + 1.965192;-0.880809;-1.005015;, + 1.866965;-0.936920;-0.819812;, + 1.759071;-0.966688;-0.403690;, + 1.779779;-1.084013;-0.992109;, + 1.942166;-1.130917;-1.959983;, + 2.035999;-1.076514;-1.950848;, + 1.674470;-0.739806;0.749395;, + 1.515480;-0.759823;1.216620;, + 1.379683;-0.758525;1.763752;, + 1.339210;-0.843362;1.561559;, + 1.442486;-1.044368;0.199322;, + 1.693558;-1.203754;-1.461814;, + 1.235946;-0.444476;3.612017;, + 1.113191;-0.491475;3.595135;, + 0.894628;-0.448401;4.449628;, + 0.844244;-0.464099;4.605454;, + 0.829616;-0.522587;4.427755;, + 0.911583;-0.786115;2.843533;, + 0.961933;-0.233091;5.664289;, + 0.527940;-0.193676;6.586948;, + 0.466757;-0.219009;6.591350;, + 0.398709;-0.258313;6.684009;, + 0.531059;-0.504832;5.139902;, + 3.647230;-0.193840;2.997545;, + 1.852789;-0.097955;5.903933;, + 0.394176;-0.092758;7.434560;, + 0.243434;-0.046755;7.872767;, + 0.219099;-0.096019;7.717144;, + 0.162960;-0.090142;7.909122;, + 2.893879;-0.093407;4.695879;, + 1.509122;-0.054568;6.562743;, + 0.854820;-0.017558;7.347630;, + 0.271705;-0.021357;7.902151;, + 0.183857;-0.015772;8.008078;, + 0.170702;-0.029614;8.025198;, + 1.904253;-0.025986;6.206776;, + 1.294074;-0.015259;6.903520;, + 0.864326;0.016203;7.336747;, + 0.293671;0.016194;7.883379;, + 0.180282;0.027342;8.002116;, + 0.178935;0.010007;8.024481;, + 1.567794;0.017375;6.607078;, + 1.665472;0.046584;6.432648;, + 0.381125;0.039623;7.753528;, + 0.224244;0.055119;7.872229;, + 0.159251;0.044312;8.025204;, + 1.852790;0.097955;5.903932;, + 0.381150;0.086816;7.491511;, + 0.480116;0.200600;6.634830;, + 0.375398;0.179365;7.000740;, + 0.961934;0.233091;5.664287;, + 1.235948;0.444476;3.612010;, + 1.113195;0.491477;3.595113;, + 0.894627;0.448401;4.449632;, + 0.479710;0.274977;6.397951;, + 0.167077;0.099905;7.872591;, + 1.979243;0.522906;1.808213;, + 1.515479;0.759822;1.216627;, + 0.932486;0.537141;4.072774;, + 1.400872;0.805373;1.534353;, + 1.406366;0.958491;0.784958;, + 0.736017;0.565513;4.469382;, + 0.524557;0.487963;5.419044;, + 0.286405;0.244828;6.991311;, + 1.735265;1.189211;-1.500244;, + 1.476241;1.190714;-0.806970;, + 1.201307;0.956179;1.258753;, + 0.809286;0.766766;3.172646;, + 0.676344;0.646430;4.201257;, + 0.602531;0.570366;4.817113;, + 1.785667;1.203251;-1.918684;, + 1.578456;1.273123;-1.706444;, + 1.283339;1.358130;-1.644653;, + 1.143020;1.210752;-0.257560;, + 0.884088;1.068918;1.169470;, + 1.690587;1.225129;-2.003441;, + 1.586698;1.277999;-1.930259;, + 1.333695;1.348247;-1.986591;, + 1.125898;1.429423;-1.843620;, + 1.076984;1.371589;-1.181112;, + 2.122158;1.023757;-2.007494;, + 2.753316;0.438875;-1.991056;, + 2.846420;0.221776;-1.990069;, + 2.884626;0.070127;-2.012256;, + 2.848641;-0.149430;-1.981596;, + 2.858683;-0.202144;-1.999878;, + 2.881796;-0.048838;-2.019176;, + 2.617428;0.261483;-1.884819;, + 2.753317;-0.438874;-1.991056;, + 0.967366;1.423486;-2.007263;, + 1.134590;1.409889;-1.976040;, + 0.954134;1.521022;-1.935063;, + 0.939565;1.496066;-1.535374;, + 0.503787;1.484154;-2.018339;, + 0.843849;1.475507;-2.014590;, + 0.923008;1.510812;-2.009398;, + 0.772125;1.656596;-2.057399;, + 0.795261;1.660291;-1.953270;, + 0.024973;1.466148;-2.074355;, + -0.240439;1.500504;-2.018187;, + -0.010163;1.545850;-2.025968;, + 0.720728;1.575564;-2.058246;, + -0.400235;1.423237;-2.098032;, + -0.663051;1.464317;-2.018996;, + -0.789716;1.494771;-2.018956;, + -0.481964;1.704729;-2.140681;, + 0.075068;1.722717;-2.145905;, + -0.588008;1.381039;-2.108821;, + -0.926236;1.385736;-2.073158;, + -0.967365;1.423486;-2.007263;, + -1.134591;1.409889;-1.976040;, + -0.923009;1.510812;-2.009398;, + -0.696743;1.629006;-2.086909;, + -0.991417;1.312096;-2.110921;, + -1.267207;1.310547;-2.073121;, + -1.333694;1.348248;-1.986591;, + -1.125898;1.429423;-1.843620;, + -0.954134;1.521022;-1.935063;, + -0.772125;1.656596;-2.057400;, + -1.416937;1.234936;-2.097925;, + -1.749310;1.182108;-2.038715;, + -1.690586;1.225130;-2.003439;, + -1.586698;1.277999;-1.930260;, + -1.578456;1.273123;-1.706442;, + -1.283339;1.358130;-1.644653;, + -1.640930;1.140537;-2.103899;, + -1.843358;1.094710;-2.083423;, + -2.123043;1.016407;-2.022442;, + -1.942166;1.130917;-1.959984;, + -1.785667;1.203251;-1.918684;, + -1.967110;0.969524;-2.110623;, + -2.251767;0.882386;-2.072827;, + -2.258978;0.944232;-1.997191;, + -2.035998;1.076514;-1.950847;, + -2.173990;0.793116;-2.114576;, + -2.326019;0.755275;-2.103860;, + -2.416929;0.760613;-2.068983;, + -2.238380;0.932145;-1.950585;, + -2.133012;0.981896;-1.899638;, + -2.524763;0.497446;-2.112719;, + -2.594318;0.559629;-2.077837;, + -2.719225;0.331882;-2.085110;, + -2.634058;0.281762;-2.113101;, + -2.751631;0.089538;-2.098945;, + -2.057138;1.004135;-1.822751;, + -1.779778;1.084014;-0.992107;, + -1.735266;1.189211;-1.500249;, + -1.476241;1.190713;-0.806964;, + -1.143020;1.210752;-0.257560;, + -1.076984;1.371589;-1.181110;, + -0.939565;1.496066;-1.535374;, + -1.406368;0.958492;0.784951;, + -1.201307;0.956179;1.258753;, + -0.884088;1.068918;1.169468;, + -0.701706;1.194677;0.931693;, + -1.400873;0.805374;1.534348;, + -0.932487;0.537141;4.072765;, + -0.736016;0.565513;4.469385;, + -0.809286;0.766765;3.172646;, + -0.325998;0.870793;3.421735;, + -0.350608;1.001179;2.721462;, + -1.759069;0.966687;-0.403682;, + -1.515480;0.759823;1.216621;, + -0.894627;0.448401;4.449626;, + -0.479709;0.274977;6.397952;, + -0.524555;0.487963;5.419045;, + -1.866965;0.936920;-0.819814;, + -1.674469;0.739806;0.749395;, + -1.113193;0.491476;3.595121;, + -0.480116;0.200600;6.634828;, + -0.375397;0.179365;7.000741;, + -0.394175;0.092758;7.434561;, + -0.204268;0.056471;7.896691;, + -0.160262;0.043289;8.024616;, + -0.135990;0.078338;8.009528;, + -0.232398;0.138766;7.567773;, + -1.852786;0.097955;5.903934;, + -0.178285;0.006524;8.025742;, + -2.893876;0.093407;4.695881;, + -2.137098;-0.012168;5.932005;, + -1.235947;-0.444476;3.612010;, + -1.113189;-0.491475;3.595136;, + -0.894628;-0.448402;4.449620;, + -0.291581;-0.170511;7.302751;, + -1.515480;-0.759823;1.216620;, + -0.837994;-0.478610;4.583494;, + -0.426194;-0.297026;6.452519;, + -0.140088;-0.149267;7.686038;, + -0.136562;-0.080839;8.002510;, + -1.379563;-0.797169;1.639359;, + -0.983042;-0.734827;2.998108;, + -0.459399;-0.525100;5.129813;, + -0.114303;-0.281426;6.967004;, + -0.020810;-0.108491;7.997697;, + -0.078542;-0.087311;8.024562;, + -1.779778;-1.084014;-0.992111;, + -1.378096;-1.011402;0.558426;, + -0.879256;-1.008832;1.513564;, + -0.618232;-1.060139;1.513199;, + -0.252726;-0.646939;4.586071;, + 0.021451;-0.341544;6.636920;, + -1.735265;-1.189211;-1.500249;, + -1.396257;-1.201256;-0.688894;, + -1.039508;-1.309920;-0.798822;, + -0.701357;-1.369434;-0.798097;, + -0.347150;-1.093186;1.512540;, + 0.055526;-0.882147;3.093913;, + -1.739972;-1.223281;-1.920764;, + -1.614952;-1.259509;-1.705881;, + -1.394267;-1.328625;-1.684605;, + -1.112101;-1.401668;-1.706445;, + -0.552998;-1.459782;-1.399137;, + -0.156995;-1.264859;0.356678;, + -0.777687;-1.470904;-1.904038;, + -0.375556;-1.503918;-1.706005;, + -0.007308;-1.486232;-1.383343;, + 0.169183;-1.412047;-0.777109;, + 0.320059;-1.261722;0.317173;, + -0.297117;-1.514213;-1.931117;, + -0.083487;-1.524697;-1.898190;, + 0.298655;-1.516905;-1.902946;, + 0.564556;-1.487821;-1.706047;, + 0.735245;-1.437850;-1.399453;, + 0.094595;-1.506956;-2.005732;, + 0.471507;-1.488300;-2.004051;, + 0.675052;-1.480958;-1.931111;, + 1.043431;-1.424745;-1.902933;, + 1.290353;-1.359583;-1.705512;, + 0.871950;-1.342654;-0.798639;, + 0.840559;-1.443523;-2.004042;, + 1.195940;-1.373846;-2.004013;, + 1.390659;-1.338818;-1.930780;, + 1.714788;-1.234599;-1.905659;, + 1.365610;-1.301505;-1.362448;, + 1.531051;-1.280584;-2.003823;, + 1.837025;-1.162321;-2.012276;, + 2.122158;-1.023757;-2.007494;, + 1.118880;-1.147087;0.214203;, + 0.750288;-1.036729;1.513355;, + 0.483955;-1.078953;1.512862;, + 0.333919;-0.637252;4.583683;, + 0.149562;-0.277026;6.966303;, + 0.091923;-0.098503;7.996337;, + 0.018236;-0.094633;8.025344;, + 0.224020;-0.181619;7.394805;, + 0.143955;-0.063274;8.021993;, + 0.099373;-0.077655;8.025679;, + 0.128262;-0.035163;8.003450;, + 0.093145;-0.058654;8.003419;, + 0.026369;-0.082361;8.016177;, + 0.018236;-0.094633;8.025344;, + -0.034616;-0.083654;8.020129;, + 0.147385;-0.010930;8.007380;, + 0.117519;-0.013040;7.960468;, + 0.089565;-0.033527;7.940470;, + 0.048857;-0.063097;7.983157;, + -0.016294;-0.069910;7.988965;, + 0.147472;0.011062;8.008559;, + 0.111012;0.022725;7.959668;, + 0.100930;-0.006217;7.910649;, + 0.064492;-0.012675;7.738653;, + 0.041821;-0.027724;7.730294;, + 0.031362;-0.051795;7.914162;, + 0.132851;0.034750;8.007137;, + 0.092740;0.048875;7.986136;, + 0.079361;0.030211;7.900310;, + 0.092717;0.017529;7.897848;, + 0.072794;0.004625;7.766625;, + 0.097692;0.069249;8.019923;, + 0.055886;0.061902;7.984438;, + 0.044678;0.049827;7.924009;, + 0.056325;0.025215;7.770269;, + 0.100355;0.080368;8.024615;, + 0.034129;0.074846;8.006785;, + -0.027550;0.074647;8.004272;, + -0.019848;0.060226;7.956495;, + 0.013220;0.036783;7.757010;, + 0.142412;0.068041;8.015965;, + 0.070210;0.097711;8.011142;, + 0.024960;0.097157;8.024084;, + -0.007703;0.085791;8.020262;, + 0.030357;0.115220;7.982890;, + -0.055274;0.099104;8.014751;, + -0.091506;0.080246;8.025781;, + -0.097676;0.059488;8.007838;, + -0.043069;0.052587;7.939769;, + 0.145321;0.269805;7.080458;, + 0.080843;0.208639;7.416533;, + -0.092048;0.209978;7.402654;, + -0.039738;0.113214;7.982695;, + 0.230744;0.336532;6.721437;, + 0.188756;0.339649;6.755748;, + 0.118481;0.347203;6.761631;, + -0.059036;0.349193;6.759630;, + -0.140686;0.273935;7.066674;, + 0.282393;0.337691;6.628276;, + 0.345616;0.346398;6.454108;, + 0.436222;0.411494;5.978360;, + -0.140048;0.344941;6.761896;, + -0.188754;0.339649;6.755748;, + -0.230742;0.336532;6.721437;, + -0.286404;0.244828;6.991310;, + -0.436221;0.411494;5.978360;, + -0.345614;0.346398;6.454107;, + -0.282392;0.337691;6.628276;, + -0.144409;0.039948;8.019381;, + -0.106371;0.041125;7.985239;, + -0.040655;0.033334;7.774198;, + -0.029603;0.024896;7.590421;, + 0.008932;0.024734;7.280373;, + 0.031989;0.027646;7.655967;, + 0.039654;0.019128;7.520342;, + -0.081918;0.029567;7.905358;, + -0.055120;0.012401;7.650050;, + -0.042089;0.014041;7.280368;, + -0.131588;0.009626;7.986091;, + -0.107120;0.010245;7.934452;, + -0.095011;0.001347;7.887948;, + -0.065634;-0.005159;7.704091;, + -0.052861;0.002710;7.508891;, + -0.048560;-0.003862;7.280366;, + -0.148484;0.009339;8.006989;, + -0.115646;-0.016030;7.964330;, + -0.178285;0.006524;8.025742;, + 0.044942;0.011105;7.280363;, + 0.054408;0.000659;7.531584;, + 0.039135;-0.018153;7.449368;, + 0.008963;-0.034943;7.730241;, + 0.047732;-0.006198;7.280371;, + 0.018884;-0.024645;7.280363;, + 0.001806;-0.027518;7.468070;, + -0.024204;-0.028201;7.641885;, + -0.036513;-0.048928;7.911997;, + -0.082075;-0.055919;7.988870;, + -0.032526;-0.019936;7.280365;, + -0.049627;-0.010769;7.525294;, + -0.049148;-0.019485;7.656866;, + -0.069887;-0.026561;7.846144;, + -0.087056;-0.036315;7.940209;, + -0.118535;-0.032475;7.988320;, + -0.094701;-0.070165;8.019434;, + -0.084239;-0.011509;7.852240;, + -0.178285;0.006524;8.025742;, + -0.602530;0.570366;4.817112;, + -0.676343;0.646430;4.201257;, + -0.611196;0.698561;4.035167;, + -0.516609;0.745603;3.903926;, + -0.368797;0.783393;3.900063;, + -0.277833;0.806053;3.900031;, + -0.185811;0.826810;3.899970;, + -0.039193;0.978391;3.245008;, + -0.011559;1.273206;2.034499;, + -0.134017;1.406800;1.444996;, + -0.434533;1.145723;1.867345;, + -0.093082;0.841972;3.899911;, + 0.000000;0.847847;3.899884;, + 0.093082;0.841972;3.899911;, + 0.177875;0.934898;3.338752;, + 0.042308;1.148549;2.522804;, + 0.134017;1.406800;1.444993;, + 0.000000;1.777887;0.251269;, + -0.084347;1.978613;-0.454725;, + -0.245769;1.480779;0.982822;, + 0.185811;0.826810;3.899970;, + 0.277834;0.806053;3.900031;, + 0.368798;0.783393;3.900063;, + 0.438835;0.861299;3.259376;, + 0.350609;1.001179;2.721462;, + 0.434534;1.145723;1.867345;, + 0.245770;1.480778;0.982825;, + 0.084347;1.978614;-0.454728;, + 0.000000;2.298152;-1.410819;, + 0.516611;0.745603;3.903925;, + 0.701706;1.194677;0.931694;, + 0.527774;1.319820;0.873363;, + 0.388986;1.567577;0.305251;, + 0.185652;1.965375;-0.562576;, + 0.611197;0.698561;4.035167;, + 0.760379;1.593724;-1.321224;, + 0.493537;1.728857;-0.719661;, + 0.321855;1.905758;-0.715966;, + 0.189745;2.321567;-1.669955;, + 0.086711;2.358001;-1.616696;, + 0.600461;1.860774;-1.773339;, + 0.562800;1.783011;-1.237010;, + 0.271334;2.388474;-2.077243;, + 0.613007;1.904424;-2.131143;, + 0.277938;2.500794;-2.494455;, + 0.600272;1.904651;-2.214361;, + 0.284577;2.492404;-2.647569;, + 0.187759;2.628897;-2.563858;, + 0.116321;2.680125;-2.541218;, + 0.572007;1.904047;-2.253749;, + 0.283494;2.443251;-2.669976;, + 0.205262;2.564212;-2.741750;, + 0.195558;2.621427;-2.734470;, + 0.087427;2.730342;-2.750839;, + 0.056236;2.711606;-2.563343;, + 0.551675;1.826599;-2.224603;, + 0.227353;2.453704;-2.691363;, + 0.117186;2.628736;-2.782903;, + 0.083803;2.709711;-2.794617;, + -0.037243;2.745345;-2.762823;, + 0.000000;2.718243;-2.561125;, + 0.036107;2.317332;-2.586381;, + -0.262371;2.431365;-2.675171;, + -0.167178;2.603944;-2.767921;, + -0.097324;2.700647;-2.790712;, + -0.119882;2.707738;-2.738547;, + -0.056236;2.711606;-2.563342;, + -0.513300;1.910854;-2.284529;, + -0.283619;2.458434;-2.670542;, + -0.284577;2.492404;-2.647569;, + -0.195558;2.621427;-2.734470;, + -0.187759;2.628896;-2.563857;, + -0.116321;2.680125;-2.541214;, + -0.572007;1.904046;-2.253749;, + -0.600272;1.904652;-2.214361;, + -0.613006;1.904424;-2.131144;, + -0.277938;2.500793;-2.494453;, + -0.795262;1.660291;-1.953270;, + -0.600462;1.860774;-1.773341;, + -0.271334;2.388473;-2.077241;, + -0.189745;2.321568;-1.669959;, + -0.086711;2.358003;-1.616699;, + -0.760379;1.593724;-1.321224;, + -0.562800;1.783013;-1.237014;, + -0.493537;1.728857;-0.719662;, + -0.321855;1.905758;-0.715966;, + -0.185652;1.965375;-0.562574;, + -0.527773;1.319820;0.873362;, + -0.388985;1.567577;0.305252;, + 2.623620;-0.390396;-1.822752;, + 2.715218;-0.259120;-1.822818;, + 2.954500;-0.348369;-1.734483;, + 3.097254;-0.135720;-1.739579;, + 3.507579;-0.331609;-1.616709;, + 3.730868;-0.159313;-1.617613;, + 4.439450;-0.223568;-1.446190;, + 4.618651;-0.059206;-1.441199;, + 5.299703;-0.154975;-1.206772;, + 2.767266;0.071060;-1.826370;, + 3.106443;0.164613;-1.734073;, + 3.814906;0.063345;-1.608642;, + 4.546450;0.146109;-1.446560;, + 5.345110;0.126771;-1.208259;, + 5.412705;-0.052557;-1.203459;, + 5.872942;-0.142457;-0.883816;, + 5.974419;-0.069882;-0.883816;, + 2.954499;0.348369;-1.734484;, + 3.650840;0.245527;-1.617080;, + 2.654914;0.354034;-1.823529;, + 5.996296;0.000000;-0.883816;, + 5.974418;0.069882;-0.883816;, + 5.872942;0.142457;-0.883816;, + -2.954500;-0.348369;-1.734482;, + -3.650840;-0.245528;-1.617079;, + -3.097254;-0.135721;-1.739578;, + -3.814907;-0.063346;-1.608641;, + -3.730868;0.159313;-1.617612;, + -3.106443;0.164613;-1.734072;, + -3.507579;0.331609;-1.616708;, + -2.954500;0.348369;-1.734482;, + -4.546450;-0.146109;-1.446560;, + -4.618650;0.059206;-1.441198;, + -4.439450;0.223568;-1.446189;, + -5.345110;-0.126771;-1.208259;, + -5.412705;0.052557;-1.203458;, + -5.299703;0.154975;-1.206771;, + -5.974418;-0.069882;-0.883815;, + -5.996296;0.000000;-0.883815;, + -5.974418;0.069882;-0.883815;, + -5.872942;0.142457;-0.883815;; + 2980; + 3;0,1,2;, + 3;2,3,4;, + 3;5,6,7;, + 3;8,9,10;, + 3;11,12,13;, + 3;14,15,16;, + 3;14,17,15;, + 3;18,15,17;, + 3;19,15,18;, + 3;14,20,17;, + 3;21,17,20;, + 3;21,22,17;, + 3;22,23,17;, + 3;18,17,23;, + 3;24,18,23;, + 3;25,18,24;, + 3;26,20,14;, + 3;26,27,20;, + 3;28,20,27;, + 3;28,21,20;, + 3;26,14,29;, + 3;30,28,27;, + 3;30,27,31;, + 3;32,30,31;, + 3;32,31,33;, + 3;34,32,33;, + 3;34,33,35;, + 3;36,34,35;, + 3;37,31,27;, + 3;38,31,37;, + 3;38,33,31;, + 3;39,33,38;, + 3;39,35,33;, + 3;40,35,39;, + 3;40,41,35;, + 3;36,35,41;, + 3;42,36,41;, + 3;37,27,26;, + 3;37,26,43;, + 3;40,39,44;, + 3;39,38,45;, + 3;38,37,46;, + 3;22,47,23;, + 3;47,48,23;, + 3;24,23,48;, + 3;49,24,48;, + 3;50,24,49;, + 3;47,51,48;, + 3;51,52,48;, + 3;49,48,52;, + 3;53,49,52;, + 3;54,49,53;, + 3;51,55,52;, + 3;55,56,52;, + 3;53,52,56;, + 3;57,53,56;, + 3;58,53,57;, + 3;55,59,56;, + 3;59,60,56;, + 3;57,56,60;, + 3;61,57,60;, + 3;62,57,61;, + 3;59,63,60;, + 3;63,64,60;, + 3;61,60,64;, + 3;65,61,64;, + 3;66,61,65;, + 3;63,67,64;, + 3;67,68,64;, + 3;65,64,68;, + 3;69,65,68;, + 3;70,65,69;, + 3;67,71,68;, + 3;71,72,68;, + 3;69,68,72;, + 3;73,69,72;, + 3;74,69,73;, + 3;71,75,72;, + 3;75,76,72;, + 3;73,72,76;, + 3;77,73,76;, + 3;78,73,77;, + 3;75,79,76;, + 3;79,80,76;, + 3;77,76,80;, + 3;81,77,80;, + 3;82,77,81;, + 3;79,83,80;, + 3;83,84,80;, + 3;81,80,84;, + 3;85,81,84;, + 3;86,81,85;, + 3;83,87,84;, + 3;87,88,84;, + 3;85,84,88;, + 3;89,85,88;, + 3;89,90,85;, + 3;90,91,85;, + 3;87,92,88;, + 3;92,89,88;, + 3;92,93,89;, + 3;93,94,89;, + 3;94,90,89;, + 3;94,95,90;, + 3;95,96,90;, + 3;93,97,94;, + 3;97,98,94;, + 3;98,95,94;, + 3;98,99,95;, + 3;99,100,95;, + 3;97,101,98;, + 3;101,102,98;, + 3;102,99,98;, + 3;102,103,99;, + 3;103,104,99;, + 3;101,105,102;, + 3;106,102,105;, + 3;106,107,102;, + 3;107,103,102;, + 3;107,108,103;, + 3;108,109,103;, + 3;106,110,107;, + 3;110,108,107;, + 3;110,111,108;, + 3;111,112,108;, + 3;106,113,110;, + 3;113,114,110;, + 3;114,111,110;, + 3;114,115,111;, + 3;115,116,111;, + 3;113,117,114;, + 3;117,118,114;, + 3;118,115,114;, + 3;118,119,115;, + 3;119,120,115;, + 3;117,121,118;, + 3;121,122,118;, + 3;122,119,118;, + 3;122,123,119;, + 3;123,124,119;, + 3;121,125,122;, + 3;125,126,122;, + 3;126,123,122;, + 3;126,127,123;, + 3;127,128,123;, + 3;125,129,126;, + 3;129,130,126;, + 3;130,127,126;, + 3;130,131,127;, + 3;131,132,127;, + 3;129,133,130;, + 3;133,134,130;, + 3;134,131,130;, + 3;134,135,131;, + 3;135,136,131;, + 3;133,137,134;, + 3;137,138,134;, + 3;134,138,139;, + 3;134,139,135;, + 3;135,139,140;, + 3;137,141,138;, + 3;141,142,138;, + 3;138,142,143;, + 3;138,143,139;, + 3;139,143,144;, + 3;141,145,142;, + 3;145,146,142;, + 3;142,146,147;, + 3;142,147,143;, + 3;143,147,148;, + 3;145,149,146;, + 3;149,150,146;, + 3;146,150,151;, + 3;146,151,147;, + 3;147,151,152;, + 3;149,153,150;, + 3;153,154,150;, + 3;150,154,155;, + 3;150,155,151;, + 3;151,155,156;, + 3;153,157,154;, + 3;157,158,154;, + 3;154,158,159;, + 3;154,159,155;, + 3;155,159,160;, + 3;157,161,158;, + 3;161,162,158;, + 3;158,162,163;, + 3;158,163,159;, + 3;159,163,164;, + 3;161,165,162;, + 3;165,166,162;, + 3;162,166,167;, + 3;162,167,163;, + 3;163,167,168;, + 3;165,169,166;, + 3;169,170,166;, + 3;166,170,171;, + 3;166,171,167;, + 3;167,171,172;, + 3;169,173,170;, + 3;173,174,170;, + 3;170,174,175;, + 3;170,175,171;, + 3;171,175,176;, + 3;173,177,174;, + 3;177,178,174;, + 3;174,178,179;, + 3;174,179,175;, + 3;175,179,180;, + 3;177,181,178;, + 3;181,182,178;, + 3;178,182,183;, + 3;178,183,179;, + 3;179,183,184;, + 3;181,185,182;, + 3;185,186,182;, + 3;183,182,186;, + 3;183,186,187;, + 3;188,183,187;, + 3;187,189,188;, + 3;185,190,186;, + 3;190,191,186;, + 3;187,186,191;, + 3;187,191,189;, + 3;189,191,192;, + 3;189,192,193;, + 3;189,193,194;, + 3;190,195,191;, + 3;195,192,191;, + 3;195,196,192;, + 3;196,197,192;, + 3;193,192,197;, + 3;193,197,198;, + 3;193,198,199;, + 3;196,42,197;, + 3;42,41,197;, + 3;198,197,41;, + 3;198,41,40;, + 3;198,40,200;, + 3;201,202,4;, + 3;202,203,4;, + 3;4,203,204;, + 3;4,204,205;, + 3;4,205,206;, + 3;207,4,206;, + 3;208,4,207;, + 3;0,208,207;, + 3;205,204,209;, + 3;209,210,205;, + 3;205,210,211;, + 3;206,205,211;, + 3;206,211,212;, + 3;206,212,213;, + 3;214,206,213;, + 3;207,206,214;, + 3;215,207,214;, + 3;0,207,215;, + 3;209,216,210;, + 3;216,217,210;, + 3;217,218,210;, + 3;210,218,219;, + 3;210,219,220;, + 3;211,210,220;, + 3;211,220,212;, + 3;212,220,221;, + 3;213,212,221;, + 3;213,221,222;, + 3;214,213,222;, + 3;223,214,222;, + 3;215,214,223;, + 3;217,224,218;, + 3;224,225,218;, + 3;225,226,218;, + 3;218,226,227;, + 3;218,227,219;, + 3;219,227,228;, + 3;220,219,228;, + 3;220,228,221;, + 3;221,228,229;, + 3;221,229,230;, + 3;222,221,230;, + 3;231,222,230;, + 3;223,222,231;, + 3;225,232,226;, + 3;232,233,226;, + 3;233,234,226;, + 3;226,234,227;, + 3;235,227,234;, + 3;235,236,227;, + 3;236,237,227;, + 3;227,237,228;, + 3;228,237,238;, + 3;228,238,229;, + 3;229,238,239;, + 3;229,239,230;, + 3;233,240,234;, + 3;241,234,240;, + 3;241,235,234;, + 3;242,235,241;, + 3;243,235,242;, + 3;243,244,235;, + 3;244,245,235;, + 3;245,236,235;, + 3;245,246,236;, + 3;246,247,236;, + 3;236,247,237;, + 3;247,248,237;, + 3;237,248,238;, + 3;249,244,243;, + 3;250,244,249;, + 3;251,244,250;, + 3;251,252,244;, + 3;252,253,244;, + 3;244,253,245;, + 3;253,246,245;, + 3;253,254,246;, + 3;254,247,246;, + 3;254,255,247;, + 3;255,256,247;, + 3;247,256,248;, + 3;256,257,248;, + 3;252,251,258;, + 3;259,252,258;, + 3;259,260,252;, + 3;252,260,253;, + 3;260,254,253;, + 3;260,261,254;, + 3;261,255,254;, + 3;262,255,261;, + 3;263,255,262;, + 3;263,256,255;, + 3;263,264,256;, + 3;264,257,256;, + 3;259,258,265;, + 3;266,259,265;, + 3;267,259,266;, + 3;268,259,267;, + 3;268,269,259;, + 3;269,260,259;, + 3;269,261,260;, + 3;269,262,261;, + 3;270,262,269;, + 3;270,271,262;, + 3;271,263,262;, + 3;272,263,271;, + 3;264,263,272;, + 3;273,264,272;, + 3;274,268,267;, + 3;275,268,274;, + 3;270,268,275;, + 3;270,269,268;, + 3;276,270,275;, + 3;277,270,276;, + 3;271,270,277;, + 3;278,271,277;, + 3;272,271,278;, + 3;279,272,278;, + 3;273,272,279;, + 3;280,273,279;, + 3;281,273,280;, + 3;282,276,275;, + 3;283,276,282;, + 3;283,277,276;, + 3;284,277,283;, + 3;278,277,284;, + 3;285,278,284;, + 3;279,278,285;, + 3;279,285,286;, + 3;287,279,286;, + 3;280,279,287;, + 3;288,280,287;, + 3;281,280,288;, + 3;289,283,282;, + 3;290,283,289;, + 3;291,283,290;, + 3;292,283,291;, + 3;292,284,283;, + 3;285,284,292;, + 3;286,285,292;, + 3;286,292,293;, + 3;294,286,293;, + 3;287,286,294;, + 3;287,294,295;, + 3;296,287,295;, + 3;288,287,296;, + 3;293,292,291;, + 3;293,291,297;, + 3;293,297,298;, + 3;299,293,298;, + 3;294,293,299;, + 3;294,299,300;, + 3;295,294,300;, + 3;295,300,301;, + 3;302,295,301;, + 3;296,295,302;, + 3;296,302,303;, + 3;296,303,304;, + 3;288,296,304;, + 3;299,298,305;, + 3;299,305,149;, + 3;300,299,149;, + 3;300,149,306;, + 3;300,306,141;, + 3;301,300,141;, + 3;301,141,307;, + 3;301,307,133;, + 3;301,133,308;, + 3;302,301,308;, + 3;302,308,303;, + 3;303,308,309;, + 3;303,309,310;, + 3;304,303,310;, + 3;304,310,311;, + 3;304,311,312;, + 3;313,304,312;, + 3;288,304,313;, + 3;308,133,314;, + 3;308,314,125;, + 3;308,125,309;, + 3;309,125,315;, + 3;309,315,117;, + 3;309,117,316;, + 3;310,309,316;, + 3;310,316,311;, + 3;311,316,317;, + 3;311,317,318;, + 3;312,311,318;, + 3;312,318,223;, + 3;312,223,231;, + 3;313,312,231;, + 3;316,117,319;, + 3;316,319,320;, + 3;316,320,317;, + 3;320,321,317;, + 3;317,321,215;, + 3;318,317,215;, + 3;318,215,223;, + 3;320,322,321;, + 3;322,323,321;, + 3;323,324,321;, + 3;321,324,0;, + 3;321,0,215;, + 3;324,325,0;, + 3;257,239,238;, + 3;257,326,239;, + 3;327,239,326;, + 3;328,239,327;, + 3;329,239,328;, + 3;230,239,329;, + 3;330,230,329;, + 3;231,230,330;, + 3;257,331,326;, + 3;331,332,326;, + 3;326,332,333;, + 3;326,333,334;, + 3;327,326,334;, + 3;327,334,335;, + 3;328,327,335;, + 3;257,336,331;, + 3;336,337,331;, + 3;331,337,332;, + 3;337,338,332;, + 3;332,338,339;, + 3;332,339,333;, + 3;333,339,340;, + 3;333,340,334;, + 3;341,334,340;, + 3;335,334,341;, + 3;342,336,257;, + 3;343,336,342;, + 3;336,343,337;, + 3;343,344,337;, + 3;337,344,345;, + 3;337,345,338;, + 3;342,257,264;, + 3;342,264,281;, + 3;346,342,281;, + 3;347,342,346;, + 3;347,343,342;, + 3;348,343,347;, + 3;348,344,343;, + 3;348,349,344;, + 3;349,350,344;, + 3;344,350,345;, + 3;351,346,281;, + 3;352,346,351;, + 3;352,347,346;, + 3;353,347,352;, + 3;353,354,347;, + 3;354,348,347;, + 3;355,348,354;, + 3;355,349,348;, + 3;351,281,356;, + 3;357,351,356;, + 3;357,358,351;, + 3;358,359,351;, + 3;359,352,351;, + 3;360,352,359;, + 3;360,353,352;, + 3;356,281,288;, + 3;356,288,313;, + 3;361,356,313;, + 3;357,356,361;, + 3;357,361,362;, + 3;363,357,362;, + 3;358,357,363;, + 3;364,358,363;, + 3;360,358,364;, + 3;360,359,358;, + 3;361,313,329;, + 3;362,361,329;, + 3;362,329,365;, + 3;366,362,365;, + 3;363,362,366;, + 3;367,363,366;, + 3;368,363,367;, + 3;364,363,368;, + 3;329,313,330;, + 3;330,313,231;, + 3;329,328,365;, + 3;365,328,369;, + 3;365,369,370;, + 3;366,365,370;, + 3;371,366,370;, + 3;372,366,371;, + 3;367,366,372;, + 3;373,367,372;, + 3;374,367,373;, + 3;374,368,367;, + 3;328,335,369;, + 3;369,335,375;, + 3;369,375,376;, + 3;370,369,376;, + 3;370,376,371;, + 3;371,376,377;, + 3;378,371,377;, + 3;372,371,378;, + 3;379,372,378;, + 3;373,372,379;, + 3;335,341,375;, + 3;375,341,380;, + 3;375,380,381;, + 3;375,381,382;, + 3;383,375,382;, + 3;376,375,383;, + 3;376,383,377;, + 3;380,341,384;, + 3;381,380,384;, + 3;381,384,385;, + 3;382,381,385;, + 3;382,385,386;, + 3;383,382,386;, + 3;383,386,387;, + 3;377,383,387;, + 3;377,387,388;, + 3;377,388,389;, + 3;389,378,377;, + 3;341,390,384;, + 3;341,391,390;, + 3;392,390,391;, + 3;393,392,391;, + 3;393,394,392;, + 3;395,394,393;, + 3;395,396,394;, + 3;396,397,394;, + 3;341,340,391;, + 3;393,391,340;, + 3;339,393,340;, + 3;339,395,393;, + 3;338,395,339;, + 3;338,396,395;, + 3;338,398,396;, + 3;398,399,396;, + 3;396,399,397;, + 3;345,398,338;, + 3;345,400,398;, + 3;400,399,398;, + 3;400,401,399;, + 3;401,402,399;, + 3;401,403,402;, + 3;403,401,404;, + 3;405,403,404;, + 3;406,405,404;, + 3;350,400,345;, + 3;350,401,400;, + 3;349,401,350;, + 3;349,407,401;, + 3;404,401,407;, + 3;404,407,349;, + 3;404,349,355;, + 3;408,404,355;, + 3;409,404,408;, + 3;406,404,409;, + 3;410,378,389;, + 3;379,378,410;, + 3;411,368,374;, + 3;411,364,368;, + 3;412,364,411;, + 3;412,413,364;, + 3;413,360,364;, + 3;413,414,360;, + 3;414,415,360;, + 3;415,353,360;, + 3;412,416,413;, + 3;413,416,414;, + 3;416,415,414;, + 3;416,417,415;, + 3;417,418,415;, + 3;418,353,415;, + 3;418,419,353;, + 3;419,420,353;, + 3;420,354,353;, + 3;420,355,354;, + 3;408,355,420;, + 3;417,421,418;, + 3;421,419,418;, + 3;421,422,419;, + 3;422,420,419;, + 3;422,408,420;, + 3;409,408,422;, + 3;409,422,421;, + 3;423,424,425;, + 3;423,426,424;, + 3;426,427,424;, + 3;424,427,428;, + 3;427,429,428;, + 3;427,430,429;, + 3;427,431,430;, + 3;432,426,423;, + 3;432,433,426;, + 3;426,433,427;, + 3;433,434,427;, + 3;427,434,435;, + 3;427,435,431;, + 3;435,436,431;, + 3;435,437,436;, + 3;435,438,437;, + 3;439,432,423;, + 3;440,432,439;, + 3;440,441,432;, + 3;441,433,432;, + 3;441,442,433;, + 3;442,434,433;, + 3;443,434,442;, + 3;443,444,434;, + 3;444,435,434;, + 3;445,440,439;, + 3;435,446,438;, + 3;447,446,435;, + 3;447,448,446;, + 3;447,449,448;, + 3;447,450,449;, + 3;451,450,447;, + 3;444,447,435;, + 3;444,451,447;, + 3;452,451,444;, + 3;453,451,452;, + 3;453,454,451;, + 3;452,444,443;, + 3;455,452,443;, + 3;456,452,455;, + 3;456,457,452;, + 3;457,453,452;, + 3;455,443,458;, + 3;459,455,458;, + 3;456,455,459;, + 3;460,456,459;, + 3;461,460,459;, + 3;461,459,462;, + 3;462,459,458;, + 3;462,458,463;, + 3;458,443,442;, + 3;458,442,464;, + 3;458,464,465;, + 3;463,458,465;, + 3;463,465,466;, + 3;467,466,465;, + 3;468,467,465;, + 3;468,465,469;, + 3;470,468,469;, + 3;441,464,442;, + 3;469,464,441;, + 3;469,465,464;, + 3;440,469,441;, + 3;471,469,440;, + 3;470,469,471;, + 3;472,457,456;, + 3;473,474,475;, + 3;476,477,478;, + 3;479,480,481;, + 3;482,475,483;, + 3;484,485,486;, + 3;487,488,484;, + 3;489,490,487;, + 3;491,492,493;, + 3;489,494,495;, + 3;494,491,496;, + 3;497,498,499;, + 3;497,500,498;, + 3;498,500,501;, + 3;498,501,502;, + 3;502,501,503;, + 3;501,504,503;, + 3;503,504,505;, + 3;506,497,499;, + 3;507,497,506;, + 3;508,497,507;, + 3;508,509,497;, + 3;509,500,497;, + 3;509,510,500;, + 3;510,511,500;, + 3;500,511,512;, + 3;500,512,501;, + 3;508,507,480;, + 3;513,508,480;, + 3;514,508,513;, + 3;514,509,508;, + 3;515,509,514;, + 3;515,516,509;, + 3;516,510,509;, + 3;517,510,516;, + 3;517,518,510;, + 3;510,518,511;, + 3;519,514,513;, + 3;520,514,519;, + 3;520,515,514;, + 3;520,521,515;, + 3;521,516,515;, + 3;521,517,516;, + 3;522,517,521;, + 3;522,523,517;, + 3;523,524,517;, + 3;524,518,517;, + 3;519,513,525;, + 3;526,519,525;, + 3;527,519,526;, + 3;527,520,519;, + 3;528,520,527;, + 3;528,529,520;, + 3;529,530,520;, + 3;530,521,520;, + 3;530,522,521;, + 3;526,525,531;, + 3;532,526,531;, + 3;533,526,532;, + 3;533,527,526;, + 3;534,527,533;, + 3;534,528,527;, + 3;534,535,528;, + 3;535,536,528;, + 3;536,529,528;, + 3;536,537,529;, + 3;537,530,529;, + 3;532,531,538;, + 3;539,532,538;, + 3;540,532,539;, + 3;540,533,532;, + 3;541,533,540;, + 3;541,542,533;, + 3;542,534,533;, + 3;543,534,542;, + 3;543,544,534;, + 3;544,535,534;, + 3;539,538,545;, + 3;539,545,546;, + 3;540,539,546;, + 3;540,546,547;, + 3;540,547,548;, + 3;549,540,548;, + 3;541,540,549;, + 3;550,541,549;, + 3;550,542,541;, + 3;550,543,542;, + 3;546,545,551;, + 3;546,551,552;, + 3;547,546,552;, + 3;547,552,553;, + 3;548,547,553;, + 3;548,553,554;, + 3;555,548,554;, + 3;549,548,555;, + 3;556,549,555;, + 3;557,549,556;, + 3;550,549,557;, + 3;552,551,558;, + 3;552,558,559;, + 3;553,552,559;, + 3;553,559,560;, + 3;554,553,560;, + 3;554,560,561;, + 3;562,554,561;, + 3;555,554,562;, + 3;563,555,562;, + 3;556,555,563;, + 3;559,558,564;, + 3;559,564,565;, + 3;560,559,565;, + 3;560,565,566;, + 3;561,560,566;, + 3;561,566,567;, + 3;568,561,567;, + 3;562,561,568;, + 3;558,569,564;, + 3;564,569,570;, + 3;564,570,571;, + 3;564,571,565;, + 3;565,571,572;, + 3;565,572,573;, + 3;567,565,573;, + 3;566,565,567;, + 3;570,574,571;, + 3;574,575,571;, + 3;571,575,576;, + 3;571,576,572;, + 3;572,576,577;, + 3;572,577,578;, + 3;572,578,579;, + 3;573,572,579;, + 3;573,579,580;, + 3;581,573,580;, + 3;567,573,581;, + 3;575,582,576;, + 3;576,582,583;, + 3;576,583,577;, + 3;577,583,584;, + 3;584,585,577;, + 3;577,585,586;, + 3;577,586,578;, + 3;578,586,587;, + 3;578,587,588;, + 3;580,578,588;, + 3;580,579,578;, + 3;585,589,586;, + 3;586,589,590;, + 3;586,590,587;, + 3;587,590,591;, + 3;587,591,588;, + 3;589,592,590;, + 3;592,593,590;, + 3;593,594,590;, + 3;590,594,595;, + 3;590,595,591;, + 3;591,595,596;, + 3;591,596,597;, + 3;588,591,597;, + 3;593,598,594;, + 3;598,599,594;, + 3;594,599,595;, + 3;595,599,600;, + 3;595,600,596;, + 3;600,601,596;, + 3;596,601,602;, + 3;596,602,603;, + 3;596,603,604;, + 3;597,596,604;, + 3;598,605,599;, + 3;605,606,599;, + 3;606,607,599;, + 3;599,607,608;, + 3;599,608,609;, + 3;599,609,600;, + 3;600,609,601;, + 3;609,610,601;, + 3;601,610,611;, + 3;601,611,602;, + 3;606,612,607;, + 3;612,613,607;, + 3;613,614,607;, + 3;607,614,615;, + 3;607,615,608;, + 3;615,616,608;, + 3;608,616,610;, + 3;609,608,610;, + 3;613,617,614;, + 3;618,614,617;, + 3;618,619,614;, + 3;619,615,614;, + 3;619,620,615;, + 3;620,616,615;, + 3;620,621,616;, + 3;616,621,622;, + 3;610,616,622;, + 3;610,622,623;, + 3;610,623,611;, + 3;624,619,618;, + 3;625,619,624;, + 3;625,626,619;, + 3;626,627,619;, + 3;619,627,620;, + 3;627,628,620;, + 3;620,628,621;, + 3;628,629,621;, + 3;621,629,630;, + 3;622,621,630;, + 3;623,622,630;, + 3;631,626,625;, + 3;632,626,631;, + 3;632,633,626;, + 3;633,634,626;, + 3;626,634,627;, + 3;634,635,627;, + 3;627,635,628;, + 3;635,636,628;, + 3;628,636,637;, + 3;628,637,629;, + 3;638,633,632;, + 3;639,633,638;, + 3;639,640,633;, + 3;640,504,633;, + 3;504,641,633;, + 3;633,641,634;, + 3;641,642,634;, + 3;642,643,634;, + 3;634,643,635;, + 3;643,644,635;, + 3;635,644,636;, + 3;645,640,639;, + 3;505,640,645;, + 3;504,640,505;, + 3;644,646,636;, + 3;644,647,646;, + 3;648,646,647;, + 3;648,649,646;, + 3;649,650,646;, + 3;646,650,636;, + 3;650,637,636;, + 3;650,651,637;, + 3;637,651,629;, + 3;643,647,644;, + 3;643,652,647;, + 3;652,653,647;, + 3;653,648,647;, + 3;654,648,653;, + 3;654,655,648;, + 3;655,649,648;, + 3;656,652,643;, + 3;656,657,652;, + 3;657,653,652;, + 3;658,653,657;, + 3;654,653,658;, + 3;659,654,658;, + 3;660,654,659;, + 3;660,661,654;, + 3;661,655,654;, + 3;642,656,643;, + 3;662,656,642;, + 3;662,663,656;, + 3;663,657,656;, + 3;664,657,663;, + 3;664,658,657;, + 3;665,658,664;, + 3;666,658,665;, + 3;659,658,666;, + 3;662,642,641;, + 3;504,662,641;, + 3;667,662,504;, + 3;668,662,667;, + 3;668,669,662;, + 3;669,670,662;, + 3;662,670,663;, + 3;670,664,663;, + 3;671,664,670;, + 3;671,665,664;, + 3;671,666,665;, + 3;672,666,671;, + 3;659,666,672;, + 3;501,667,504;, + 3;512,667,501;, + 3;512,668,667;, + 3;511,668,512;, + 3;673,668,511;, + 3;673,669,668;, + 3;673,674,669;, + 3;674,671,669;, + 3;669,671,670;, + 3;518,673,511;, + 3;518,674,673;, + 3;675,674,518;, + 3;675,676,674;, + 3;676,672,674;, + 3;674,672,671;, + 3;524,675,518;, + 3;677,675,524;, + 3;678,675,677;, + 3;678,679,675;, + 3;675,679,676;, + 3;676,679,659;, + 3;676,659,672;, + 3;523,677,524;, + 3;680,677,523;, + 3;680,681,677;, + 3;681,678,677;, + 3;681,679,678;, + 3;681,682,679;, + 3;679,682,683;, + 3;683,659,679;, + 3;683,660,659;, + 3;684,660,683;, + 3;684,661,660;, + 3;680,523,522;, + 3;685,680,522;, + 3;685,686,680;, + 3;680,686,681;, + 3;686,687,681;, + 3;687,682,681;, + 3;687,688,682;, + 3;688,689,682;, + 3;682,689,683;, + 3;689,690,683;, + 3;690,684,683;, + 3;530,685,522;, + 3;691,685,530;, + 3;691,686,685;, + 3;691,692,686;, + 3;692,687,686;, + 3;692,688,687;, + 3;692,693,688;, + 3;693,694,688;, + 3;694,695,688;, + 3;688,695,696;, + 3;688,696,689;, + 3;537,691,530;, + 3;537,692,691;, + 3;537,697,692;, + 3;697,698,692;, + 3;698,693,692;, + 3;698,694,693;, + 3;698,699,694;, + 3;699,700,694;, + 3;694,700,695;, + 3;700,701,695;, + 3;695,701,702;, + 3;695,702,696;, + 3;536,697,537;, + 3;536,703,697;, + 3;703,698,697;, + 3;703,704,698;, + 3;704,699,698;, + 3;704,705,699;, + 3;705,706,699;, + 3;699,706,700;, + 3;706,707,700;, + 3;700,707,701;, + 3;707,708,701;, + 3;707,709,708;, + 3;535,703,536;, + 3;544,703,535;, + 3;544,704,703;, + 3;710,704,544;, + 3;710,711,704;, + 3;711,712,704;, + 3;704,712,705;, + 3;712,713,705;, + 3;705,713,706;, + 3;713,714,706;, + 3;706,714,707;, + 3;714,709,707;, + 3;543,710,544;, + 3;715,710,543;, + 3;715,716,710;, + 3;710,716,717;, + 3;710,717,711;, + 3;711,717,718;, + 3;711,718,719;, + 3;719,712,711;, + 3;719,720,712;, + 3;712,720,713;, + 3;715,543,550;, + 3;715,550,716;, + 3;716,550,557;, + 3;716,557,721;, + 3;716,721,717;, + 3;721,722,717;, + 3;717,722,718;, + 3;718,722,723;, + 3;718,723,719;, + 3;719,723,724;, + 3;719,724,725;, + 3;719,725,720;, + 3;557,556,721;, + 3;556,726,721;, + 3;721,726,722;, + 3;726,727,722;, + 3;722,727,728;, + 3;722,728,729;, + 3;722,729,730;, + 3;722,730,723;, + 3;730,731,723;, + 3;723,731,724;, + 3;556,563,726;, + 3;726,563,732;, + 3;726,732,727;, + 3;732,733,727;, + 3;727,733,734;, + 3;727,734,728;, + 3;728,734,735;, + 3;728,735,729;, + 3;729,735,736;, + 3;729,736,737;, + 3;730,729,737;, + 3;730,737,731;, + 3;563,562,732;, + 3;732,562,738;, + 3;732,738,733;, + 3;733,738,739;, + 3;739,740,733;, + 3;733,740,734;, + 3;740,741,734;, + 3;734,741,742;, + 3;734,742,735;, + 3;738,562,568;, + 3;738,568,739;, + 3;739,568,743;, + 3;739,743,744;, + 3;739,744,740;, + 3;740,744,745;, + 3;740,745,746;, + 3;740,746,741;, + 3;568,567,743;, + 3;743,567,747;, + 3;743,747,744;, + 3;744,747,748;, + 3;745,744,748;, + 3;745,748,746;, + 3;746,748,741;, + 3;748,749,741;, + 3;749,750,741;, + 3;741,750,751;, + 3;741,751,752;, + 3;741,752,742;, + 3;747,567,753;, + 3;747,753,748;, + 3;748,753,749;, + 3;753,754,749;, + 3;749,754,750;, + 3;754,755,750;, + 3;750,755,756;, + 3;750,756,751;, + 3;751,756,757;, + 3;751,757,758;, + 3;752,751,758;, + 3;567,581,753;, + 3;753,581,754;, + 3;754,581,580;, + 3;580,588,754;, + 3;754,588,755;, + 3;755,588,759;, + 3;755,759,756;, + 3;756,759,760;, + 3;756,760,757;, + 3;757,760,761;, + 3;758,757,761;, + 3;758,761,762;, + 3;758,762,763;, + 3;764,758,763;, + 3;752,758,764;, + 3;588,765,759;, + 3;759,765,760;, + 3;760,765,766;, + 3;760,766,761;, + 3;761,766,767;, + 3;762,761,767;, + 3;762,767,768;, + 3;763,762,768;, + 3;588,597,765;, + 3;597,604,765;, + 3;765,604,766;, + 3;604,769,766;, + 3;766,769,767;, + 3;767,769,770;, + 3;767,770,768;, + 3;768,770,771;, + 3;768,771,772;, + 3;768,772,773;, + 3;774,768,773;, + 3;763,768,774;, + 3;604,603,769;, + 3;769,603,770;, + 3;603,771,770;, + 3;603,602,771;, + 3;602,775,771;, + 3;772,771,775;, + 3;772,775,776;, + 3;773,772,776;, + 3;773,776,777;, + 3;778,773,777;, + 3;779,773,778;, + 3;779,774,773;, + 3;763,774,779;, + 3;602,611,775;, + 3;611,780,775;, + 3;776,775,780;, + 3;776,780,781;, + 3;776,781,777;, + 3;777,781,782;, + 3;783,777,782;, + 3;784,777,783;, + 3;785,777,784;, + 3;778,777,785;, + 3;611,623,780;, + 3;780,623,781;, + 3;623,630,781;, + 3;781,630,782;, + 3;782,630,629;, + 3;651,782,629;, + 3;786,782,651;, + 3;786,783,782;, + 3;787,783,786;, + 3;787,788,783;, + 3;784,783,788;, + 3;789,784,788;, + 3;790,784,789;, + 3;790,785,784;, + 3;791,785,790;, + 3;791,778,785;, + 3;650,786,651;, + 3;649,786,650;, + 3;649,787,786;, + 3;792,787,649;, + 3;792,788,787;, + 3;793,788,792;, + 3;793,789,788;, + 3;794,789,793;, + 3;795,789,794;, + 3;795,790,789;, + 3;796,790,795;, + 3;796,797,790;, + 3;797,791,790;, + 3;798,792,649;, + 3;799,792,798;, + 3;800,792,799;, + 3;800,793,792;, + 3;801,793,800;, + 3;801,794,793;, + 3;802,798,649;, + 3;799,798,802;, + 3;803,799,802;, + 3;804,799,803;, + 3;804,805,799;, + 3;805,800,799;, + 3;805,801,800;, + 3;802,649,655;, + 3;661,802,655;, + 3;803,802,661;, + 3;806,803,661;, + 3;807,803,806;, + 3;807,804,803;, + 3;808,804,807;, + 3;808,809,804;, + 3;809,805,804;, + 3;810,806,661;, + 3;810,807,806;, + 3;811,807,810;, + 3;812,811,810;, + 3;812,810,813;, + 3;813,814,812;, + 3;815,814,813;, + 3;815,816,814;, + 3;810,661,684;, + 3;813,810,684;, + 3;813,684,690;, + 3;690,815,813;, + 3;817,815,690;, + 3;696,815,817;, + 3;696,702,815;, + 3;702,816,815;, + 3;702,701,816;, + 3;689,817,690;, + 3;689,696,817;, + 3;713,818,714;, + 3;720,818,713;, + 3;720,819,818;, + 3;725,819,720;, + 3;725,820,819;, + 3;724,820,725;, + 3;724,731,820;, + 3;731,821,820;, + 3;731,737,821;, + 3;737,822,821;, + 3;821,822,823;, + 3;822,824,823;, + 3;822,825,824;, + 3;825,826,824;, + 3;825,827,826;, + 3;737,736,822;, + 3;736,825,822;, + 3;736,828,825;, + 3;828,827,825;, + 3;828,829,827;, + 3;827,829,830;, + 3;829,831,830;, + 3;831,829,832;, + 3;736,735,828;, + 3;735,833,828;, + 3;833,829,828;, + 3;833,834,829;, + 3;829,834,832;, + 3;832,834,835;, + 3;832,835,836;, + 3;836,835,837;, + 3;836,837,838;, + 3;742,833,735;, + 3;742,752,833;, + 3;752,839,833;, + 3;833,839,834;, + 3;834,839,835;, + 3;835,839,840;, + 3;835,840,837;, + 3;840,763,837;, + 3;837,763,779;, + 3;837,779,841;, + 3;838,837,841;, + 3;838,841,797;, + 3;797,841,791;, + 3;839,752,764;, + 3;839,764,840;, + 3;840,764,763;, + 3;841,778,791;, + 3;841,779,778;, + 3;842,843,844;, + 3;845,846,847;, + 3;848,849,850;, + 3;851,849,848;, + 3;851,852,849;, + 3;849,852,853;, + 3;849,853,854;, + 3;854,853,855;, + 3;853,856,855;, + 3;855,856,857;, + 3;858,851,848;, + 3;859,851,858;, + 3;859,860,851;, + 3;860,861,851;, + 3;851,861,852;, + 3;861,862,852;, + 3;862,863,852;, + 3;864,858,848;, + 3;865,858,864;, + 3;866,858,865;, + 3;866,867,858;, + 3;867,868,858;, + 3;868,859,858;, + 3;864,848,869;, + 3;864,869,870;, + 3;871,864,870;, + 3;865,864,871;, + 3;865,871,872;, + 3;873,865,872;, + 3;866,865,873;, + 3;874,866,873;, + 3;874,867,866;, + 3;869,848,875;, + 3;869,875,876;, + 3;869,876,877;, + 3;870,869,877;, + 3;870,877,878;, + 3;879,870,878;, + 3;871,870,879;, + 3;872,871,879;, + 3;872,879,880;, + 3;872,880,881;, + 3;873,872,881;, + 3;877,876,882;, + 3;877,882,883;, + 3;877,883,884;, + 3;878,877,884;, + 3;878,884,885;, + 3;878,885,886;, + 3;879,878,886;, + 3;879,886,887;, + 3;880,879,887;, + 3;882,876,888;, + 3;889,882,888;, + 3;883,882,889;, + 3;883,889,890;, + 3;883,890,891;, + 3;883,891,892;, + 3;884,883,892;, + 3;884,892,885;, + 3;885,892,893;, + 3;886,885,893;, + 3;876,894,888;, + 3;888,894,895;, + 3;888,895,896;, + 3;897,888,896;, + 3;889,888,897;, + 3;898,889,897;, + 3;890,889,898;, + 3;891,890,898;, + 3;857,894,876;, + 3;857,899,894;, + 3;899,900,894;, + 3;894,900,901;, + 3;895,894,901;, + 3;895,901,902;, + 3;896,895,902;, + 3;903,857,876;, + 3;904,903,876;, + 3;886,893,905;, + 3;906,886,905;, + 3;887,886,906;, + 3;880,887,906;, + 3;881,880,906;, + 3;906,905,907;, + 3;881,906,907;, + 3;908,881,907;, + 3;909,881,908;, + 3;909,873,881;, + 3;910,873,909;, + 3;910,874,873;, + 3;907,905,911;, + 3;912,907,911;, + 3;908,907,912;, + 3;913,908,912;, + 3;913,914,908;, + 3;914,909,908;, + 3;915,909,914;, + 3;915,910,909;, + 3;915,916,910;, + 3;910,916,874;, + 3;874,916,867;, + 3;917,912,911;, + 3;913,912,917;, + 3;918,913,917;, + 3;919,913,918;, + 3;919,920,913;, + 3;920,914,913;, + 3;920,915,914;, + 3;917,911,921;, + 3;922,917,921;, + 3;923,917,922;, + 3;923,918,917;, + 3;924,918,923;, + 3;924,919,918;, + 3;925,919,924;, + 3;925,926,919;, + 3;926,920,919;, + 3;921,911,927;, + 3;921,927,928;, + 3;929,921,928;, + 3;930,921,929;, + 3;930,922,921;, + 3;931,922,930;, + 3;931,923,922;, + 3;932,923,931;, + 3;932,924,923;, + 3;911,933,927;, + 3;911,934,933;, + 3;929,928,935;, + 3;929,935,936;, + 3;937,929,936;, + 3;938,929,937;, + 3;930,929,938;, + 3;939,930,938;, + 3;940,930,939;, + 3;940,931,930;, + 3;941,931,940;, + 3;941,932,931;, + 3;936,942,937;, + 3;937,942,943;, + 3;937,943,944;, + 3;945,937,944;, + 3;946,937,945;, + 3;938,937,946;, + 3;947,938,946;, + 3;948,938,947;, + 3;939,938,948;, + 3;944,943,949;, + 3;944,949,950;, + 3;951,944,950;, + 3;952,944,951;, + 3;952,945,944;, + 3;953,945,952;, + 3;953,946,945;, + 3;954,946,953;, + 3;947,946,954;, + 3;950,949,955;, + 3;956,950,955;, + 3;957,950,956;, + 3;951,950,957;, + 3;958,951,957;, + 3;959,951,958;, + 3;960,951,959;, + 3;960,952,951;, + 3;961,952,960;, + 3;953,952,961;, + 3;956,955,962;, + 3;956,962,963;, + 3;964,956,963;, + 3;965,956,964;, + 3;957,956,965;, + 3;966,957,965;, + 3;967,957,966;, + 3;967,958,957;, + 3;959,958,967;, + 3;955,968,962;, + 3;968,969,962;, + 3;969,970,962;, + 3;962,970,971;, + 3;962,971,972;, + 3;963,962,972;, + 3;963,972,973;, + 3;964,963,973;, + 3;964,973,974;, + 3;965,964,974;, + 3;975,965,974;, + 3;966,965,975;, + 3;969,976,970;, + 3;976,977,970;, + 3;970,977,978;, + 3;970,978,971;, + 3;971,978,979;, + 3;971,979,980;, + 3;971,980,981;, + 3;972,971,981;, + 3;972,981,982;, + 3;973,972,982;, + 3;976,983,977;, + 3;983,984,977;, + 3;977,984,985;, + 3;977,985,986;, + 3;977,986,978;, + 3;978,986,987;, + 3;978,987,988;, + 3;978,988,979;, + 3;979,988,980;, + 3;983,989,984;, + 3;989,990,984;, + 3;984,990,991;, + 3;984,991,992;, + 3;985,984,992;, + 3;985,992,993;, + 3;986,985,993;, + 3;986,993,994;, + 3;987,986,994;, + 3;989,995,990;, + 3;995,996,990;, + 3;990,996,997;, + 3;990,997,991;, + 3;991,997,998;, + 3;991,998,999;, + 3;991,999,1000;, + 3;992,991,1000;, + 3;992,1000,1001;, + 3;992,1001,993;, + 3;993,1001,994;, + 3;995,1002,996;, + 3;1003,996,1002;, + 3;1003,1004,996;, + 3;1005,1004,1003;, + 3;1005,1006,1004;, + 3;852,1007,853;, + 3;1007,1008,853;, + 3;853,1008,856;, + 3;1008,1009,856;, + 3;856,1009,1010;, + 3;856,1010,857;, + 3;857,1010,899;, + 3;1010,1011,899;, + 3;1011,1012,899;, + 3;899,1012,900;, + 3;1009,1011,1010;, + 3;1009,1013,1011;, + 3;1013,1014,1011;, + 3;1011,1014,1012;, + 3;1014,1015,1012;, + 3;1012,1015,1016;, + 3;1012,1016,1017;, + 3;1012,1017,900;, + 3;1018,1013,1009;, + 3;1018,1019,1013;, + 3;1019,1020,1013;, + 3;1013,1020,1014;, + 3;1020,1021,1014;, + 3;1014,1021,1015;, + 3;1015,1021,1016;, + 3;1021,1022,1016;, + 3;1016,1022,1017;, + 3;1017,1022,1023;, + 3;1017,1023,1024;, + 3;1017,1024,900;, + 3;1025,1019,1018;, + 3;1025,1026,1019;, + 3;1019,1026,1020;, + 3;1026,1027,1020;, + 3;1020,1027,1021;, + 3;1027,1028,1021;, + 3;1021,1028,1022;, + 3;1028,1029,1022;, + 3;1022,1029,1023;, + 3;1029,1030,1023;, + 3;1023,1030,1024;, + 3;1031,1025,1018;, + 3;1031,1032,1025;, + 3;1032,1026,1025;, + 3;1032,1033,1026;, + 3;1033,1034,1026;, + 3;1026,1034,1027;, + 3;1034,1035,1027;, + 3;1035,1028,1027;, + 3;1035,1036,1028;, + 3;1036,1037,1028;, + 3;1028,1037,1029;, + 3;1038,1032,1031;, + 3;1038,1033,1032;, + 3;1039,1033,1038;, + 3;1039,1040,1033;, + 3;1040,1041,1033;, + 3;1033,1041,1034;, + 3;1041,1035,1034;, + 3;1042,1035,1041;, + 3;1042,1043,1035;, + 3;1043,1036,1035;, + 3;1044,1038,1031;, + 3;1044,1039,1038;, + 3;1045,1039,1044;, + 3;1045,1046,1039;, + 3;1046,1040,1039;, + 3;1047,1040,1046;, + 3;1047,1048,1040;, + 3;1048,1041,1040;, + 3;1048,1042,1041;, + 3;1049,1042,1048;, + 3;1049,1050,1042;, + 3;1050,1043,1042;, + 3;1050,1051,1043;, + 3;1043,1051,1036;, + 3;1052,1046,1045;, + 3;1047,1046,1052;, + 3;1053,1047,1052;, + 3;1054,1047,1053;, + 3;1054,1055,1047;, + 3;1055,1056,1047;, + 3;1056,1048,1047;, + 3;1056,1049,1048;, + 3;1057,1052,1045;, + 3;1058,1052,1057;, + 3;1053,1052,1058;, + 3;1059,1053,1058;, + 3;1059,1060,1053;, + 3;1060,1054,1053;, + 3;1060,1061,1054;, + 3;1061,1062,1054;, + 3;1062,1055,1054;, + 3;1063,1058,1057;, + 3;1063,1059,1058;, + 3;1064,1059,1063;, + 3;1064,1065,1059;, + 3;1065,1060,1059;, + 3;1065,1066,1060;, + 3;1066,1061,1060;, + 3;1066,1067,1061;, + 3;1067,1068,1061;, + 3;1061,1068,1062;, + 3;1068,1069,1062;, + 3;1069,1055,1062;, + 3;1070,1064,1063;, + 3;1071,1064,1070;, + 3;1071,1065,1064;, + 3;1071,1072,1065;, + 3;1072,1066,1065;, + 3;1072,1073,1066;, + 3;1073,1067,1066;, + 3;1073,1074,1067;, + 3;1067,1074,1068;, + 3;1074,1069,1068;, + 3;1074,1075,1069;, + 3;1075,1076,1069;, + 3;1069,1076,1055;, + 3;1076,1056,1055;, + 3;1077,1071,1070;, + 3;1078,1071,1077;, + 3;1078,1072,1071;, + 3;1079,1072,1078;, + 3;1079,1080,1072;, + 3;1080,1081,1072;, + 3;1072,1081,1073;, + 3;1081,1082,1073;, + 3;1073,1082,1074;, + 3;1077,1070,1083;, + 3;1084,1077,1083;, + 3;1084,1078,1077;, + 3;1079,1078,1084;, + 3;1085,1079,1084;, + 3;1086,1079,1085;, + 3;1086,1080,1079;, + 3;1086,1087,1080;, + 3;1087,1088,1080;, + 3;1080,1088,1081;, + 3;1088,1089,1081;, + 3;1081,1089,1082;, + 3;1090,1084,1083;, + 3;1085,1084,1090;, + 3;1091,1085,1090;, + 3;1092,1085,1091;, + 3;1093,1085,1092;, + 3;1093,1086,1085;, + 3;1094,1086,1093;, + 3;1094,1087,1086;, + 3;1090,1083,1095;, + 3;1096,1090,1095;, + 3;1091,1090,1096;, + 3;1097,1091,1096;, + 3;1092,1091,1097;, + 3;1098,1092,1097;, + 3;1099,1092,1098;, + 3;1100,1092,1099;, + 3;1100,1093,1092;, + 3;1094,1093,1100;, + 3;1096,1095,863;, + 3;1097,1096,863;, + 3;862,1097,863;, + 3;1098,1097,862;, + 3;861,1098,862;, + 3;1099,1098,861;, + 3;860,1099,861;, + 3;1101,1099,860;, + 3;1101,1100,1099;, + 3;1102,1100,1101;, + 3;1102,1094,1100;, + 3;1102,1103,1094;, + 3;1103,1104,1094;, + 3;1094,1104,1087;, + 3;1105,1101,860;, + 3;1106,1101,1105;, + 3;1107,1101,1106;, + 3;1107,1102,1101;, + 3;1108,1102,1107;, + 3;1108,1109,1102;, + 3;1109,1103,1102;, + 3;1105,860,859;, + 3;1106,1105,859;, + 3;868,1106,859;, + 3;1107,1106,868;, + 3;1110,1107,868;, + 3;1110,1108,1107;, + 3;916,1108,1110;, + 3;916,1111,1108;, + 3;1111,1112,1108;, + 3;1108,1112,1109;, + 3;1112,1113,1109;, + 3;1109,1113,1103;, + 3;1110,868,867;, + 3;916,1110,867;, + 3;1114,1115,1116;, + 3;1117,1114,1116;, + 3;1118,1114,1117;, + 3;1118,1119,1114;, + 3;1120,1114,1119;, + 3;1120,1121,1114;, + 3;1114,1121,1122;, + 3;1117,1116,1123;, + 3;1117,1123,1124;, + 3;1125,1117,1124;, + 3;1118,1117,1125;, + 3;1126,1118,1125;, + 3;1127,1118,1126;, + 3;1128,1118,1127;, + 3;1128,1119,1118;, + 3;1123,1116,1129;, + 3;1123,1129,1130;, + 3;1131,1123,1130;, + 3;1124,1123,1131;, + 3;1124,1131,1132;, + 3;1125,1124,1132;, + 3;1116,1133,1129;, + 3;1133,1134,1129;, + 3;1129,1134,1130;, + 3;1130,1134,1135;, + 3;1130,1135,1136;, + 3;1132,1130,1136;, + 3;1132,1131,1130;, + 3;1116,1137,1133;, + 3;1138,1139,1140;, + 3;1141,1138,1140;, + 3;1142,1141,1140;, + 3;1143,1141,1142;, + 3;1144,1143,1142;, + 3;1145,1143,1144;, + 3;1146,1143,1145;, + 3;1147,1143,1146;, + 3;1147,1148,1143;, + 3;1148,1149,1143;, + 3;1148,1150,1149;, + 3;1149,1150,1151;, + 3;1145,1144,1152;, + 3;1145,1152,1153;, + 3;1154,1145,1153;, + 3;1155,1145,1154;, + 3;1155,1146,1145;, + 3;1153,1152,1156;, + 3;1153,1156,1157;, + 3;1158,1153,1157;, + 3;1154,1153,1158;, + 3;1159,1154,1158;, + 3;1160,1154,1159;, + 3;1160,1155,1154;, + 3;1161,1155,1160;, + 3;1162,1155,1161;, + 3;1162,1146,1155;, + 3;1157,1156,1163;, + 3;1157,1163,1164;, + 3;1158,1157,1164;, + 3;1165,1158,1164;, + 3;1159,1158,1165;, + 3;1166,1159,1165;, + 3;1167,1159,1166;, + 3;1167,1161,1159;, + 3;1161,1160,1159;, + 3;1163,1156,1168;, + 3;1163,1168,1169;, + 3;1164,1163,1169;, + 3;1164,1169,1170;, + 3;1171,1164,1170;, + 3;1165,1164,1171;, + 3;1172,1165,1171;, + 3;1166,1165,1172;, + 3;1169,1168,1173;, + 3;1169,1173,1170;, + 3;1170,1173,1174;, + 3;1170,1174,1175;, + 3;1176,1170,1175;, + 3;1171,1170,1176;, + 3;1172,1171,1176;, + 3;1173,1168,1177;, + 3;1173,1177,1174;, + 3;1174,1177,1178;, + 3;1174,1178,1179;, + 3;1175,1174,1179;, + 3;1175,1179,1180;, + 3;1175,1180,1181;, + 3;1176,1175,1181;, + 3;1176,1181,1182;, + 3;1172,1176,1182;, + 3;1172,1182,1183;, + 3;1184,1172,1183;, + 3;1166,1172,1184;, + 3;1178,1185,1179;, + 3;1179,1185,1186;, + 3;1179,1186,1187;, + 3;1179,1187,1180;, + 3;1180,1187,1188;, + 3;1180,1188,1189;, + 3;1180,1189,1190;, + 3;1181,1180,1190;, + 3;1185,1191,1186;, + 3;1186,1191,1192;, + 3;1186,1192,1187;, + 3;1187,1192,1193;, + 3;1187,1193,1188;, + 3;1188,1193,1194;, + 3;1188,1194,1195;, + 3;1189,1188,1195;, + 3;1189,1195,1196;, + 3;1189,1196,1197;, + 3;1190,1189,1197;, + 3;1192,1191,1198;, + 3;1192,1198,1199;, + 3;1193,1192,1199;, + 3;1193,1199,1200;, + 3;1194,1193,1200;, + 3;1194,1200,1201;, + 3;1202,1194,1201;, + 3;1195,1194,1202;, + 3;1195,1202,1196;, + 3;1191,1203,1198;, + 3;1198,1203,1204;, + 3;1199,1198,1204;, + 3;1199,1204,1205;, + 3;1200,1199,1205;, + 3;1200,1205,1206;, + 3;1201,1200,1206;, + 3;1207,1201,1206;, + 3;1202,1201,1207;, + 3;1196,1202,1207;, + 3;1208,1196,1207;, + 3;1197,1196,1208;, + 3;1203,1209,1204;, + 3;1204,1209,1210;, + 3;1205,1204,1210;, + 3;1205,1210,1211;, + 3;1205,1211,1212;, + 3;1213,1205,1212;, + 3;1206,1205,1213;, + 3;1214,1206,1213;, + 3;1207,1206,1214;, + 3;1215,1207,1214;, + 3;1208,1207,1215;, + 3;1209,1216,1210;, + 3;1210,1216,1211;, + 3;1216,1217,1211;, + 3;1211,1217,1218;, + 3;1212,1211,1218;, + 3;1212,1218,1219;, + 3;1220,1212,1219;, + 3;1213,1212,1220;, + 3;1221,1213,1220;, + 3;1214,1213,1221;, + 3;1209,1222,1216;, + 3;1222,1223,1216;, + 3;1216,1223,1217;, + 3;1223,1224,1217;, + 3;1224,1225,1217;, + 3;1217,1225,1226;, + 3;1217,1226,1218;, + 3;1218,1226,1227;, + 3;1219,1218,1227;, + 3;1222,1228,1223;, + 3;1228,1229,1223;, + 3;1223,1229,1224;, + 3;1229,1230,1224;, + 3;1224,1230,1225;, + 3;1230,1231,1225;, + 3;1231,1232,1225;, + 3;1225,1232,1233;, + 3;1225,1233,1226;, + 3;1226,1233,1227;, + 3;1228,1234,1229;, + 3;1229,1234,1230;, + 3;1234,1235,1230;, + 3;1230,1235,1231;, + 3;1235,1236,1231;, + 3;1231,1236,1232;, + 3;1236,1237,1232;, + 3;1232,1237,1238;, + 3;1232,1238,1233;, + 3;1233,1238,1239;, + 3;1227,1233,1239;, + 3;1234,1240,1235;, + 3;1235,1240,1236;, + 3;1240,1241,1236;, + 3;1236,1241,1237;, + 3;1241,1242,1237;, + 3;1237,1242,1243;, + 3;1237,1243,1238;, + 3;1243,1244,1238;, + 3;1238,1244,1245;, + 3;1238,1245,1239;, + 3;1240,1246,1241;, + 3;1246,1247,1241;, + 3;1241,1247,1242;, + 3;1247,1248,1242;, + 3;1242,1248,1249;, + 3;1242,1249,1244;, + 3;1242,1244,1243;, + 3;1250,1247,1246;, + 3;1140,1250,1246;, + 3;1151,1150,1251;, + 3;1244,1249,1245;, + 3;1249,1252,1245;, + 3;1245,1252,1253;, + 3;1239,1245,1253;, + 3;1239,1253,1254;, + 3;1255,1239,1254;, + 3;1227,1239,1255;, + 3;1249,1256,1252;, + 3;1252,1256,1257;, + 3;1253,1252,1257;, + 3;1253,1257,1258;, + 3;1259,1253,1258;, + 3;1254,1253,1259;, + 3;1260,1254,1259;, + 3;1255,1254,1260;, + 3;1249,1248,1256;, + 3;1248,1261,1256;, + 3;1256,1261,1262;, + 3;1256,1262,1257;, + 3;1262,1263,1257;, + 3;1257,1263,1264;, + 3;1257,1264,1265;, + 3;1258,1257,1265;, + 3;1248,1266,1261;, + 3;1266,1267,1261;, + 3;1267,1268,1261;, + 3;1268,1263,1261;, + 3;1262,1261,1263;, + 3;1269,1266,1248;, + 3;1270,1266,1269;, + 3;1270,1271,1266;, + 3;1271,1268,1266;, + 3;1266,1268,1267;, + 3;1247,1269,1248;, + 3;1251,1269,1247;, + 3;1167,1162,1161;, + 3;1272,1162,1167;, + 3;1272,1273,1162;, + 3;1273,1146,1162;, + 3;1274,1146,1273;, + 3;1274,1275,1146;, + 3;1275,1147,1146;, + 3;1272,1167,1276;, + 3;1277,1272,1276;, + 3;1277,1273,1272;, + 3;1278,1273,1277;, + 3;1278,1274,1273;, + 3;1278,1279,1274;, + 3;1274,1279,1275;, + 3;1279,1280,1275;, + 3;1275,1280,1281;, + 3;1275,1281,1147;, + 3;1276,1167,1166;, + 3;1276,1166,1282;, + 3;1276,1282,1283;, + 3;1284,1276,1283;, + 3;1277,1276,1284;, + 3;1285,1277,1284;, + 3;1286,1277,1285;, + 3;1286,1287,1277;, + 3;1287,1278,1277;, + 3;1282,1166,1184;, + 3;1282,1184,1288;, + 3;1283,1282,1288;, + 3;1283,1288,1289;, + 3;1284,1283,1289;, + 3;1284,1289,1290;, + 3;1291,1284,1290;, + 3;1285,1284,1291;, + 3;1292,1285,1291;, + 3;1293,1285,1292;, + 3;1293,1286,1285;, + 3;1288,1184,1294;, + 3;1288,1294,1295;, + 3;1289,1288,1295;, + 3;1289,1295,1296;, + 3;1289,1296,1297;, + 3;1290,1289,1297;, + 3;1291,1290,1297;, + 3;1291,1297,1298;, + 3;1299,1291,1298;, + 3;1292,1291,1299;, + 3;1184,1183,1294;, + 3;1294,1183,1300;, + 3;1294,1300,1301;, + 3;1295,1294,1301;, + 3;1295,1301,1302;, + 3;1296,1295,1302;, + 3;1296,1302,1297;, + 3;1303,1297,1302;, + 3;1298,1297,1303;, + 3;1304,1298,1303;, + 3;1299,1298,1304;, + 3;1183,1182,1300;, + 3;1182,1305,1300;, + 3;1300,1305,1306;, + 3;1300,1306,1307;, + 3;1301,1300,1307;, + 3;1301,1307,1308;, + 3;1309,1301,1308;, + 3;1302,1301,1309;, + 3;1302,1309,1310;, + 3;1303,1302,1310;, + 3;1182,1181,1305;, + 3;1181,1190,1305;, + 3;1305,1190,1311;, + 3;1305,1311,1306;, + 3;1306,1311,1312;, + 3;1306,1312,1307;, + 3;1307,1312,1308;, + 3;1312,1313,1308;, + 3;1308,1313,1314;, + 3;1308,1314,1315;, + 3;1308,1315,1316;, + 3;1309,1308,1316;, + 3;1190,1197,1311;, + 3;1311,1197,1317;, + 3;1311,1317,1312;, + 3;1312,1317,1318;, + 3;1312,1318,1313;, + 3;1313,1318,1319;, + 3;1314,1313,1319;, + 3;1314,1319,1320;, + 3;1314,1320,1315;, + 3;1315,1320,1321;, + 3;1315,1321,1322;, + 3;1316,1315,1322;, + 3;1197,1208,1317;, + 3;1317,1208,1215;, + 3;1317,1215,1323;, + 3;1317,1323,1318;, + 3;1318,1323,1319;, + 3;1319,1323,1324;, + 3;1319,1324,1325;, + 3;1320,1319,1325;, + 3;1320,1325,1321;, + 3;1321,1325,1326;, + 3;1321,1326,1327;, + 3;1322,1321,1327;, + 3;1316,1322,1327;, + 3;1323,1215,1324;, + 3;1215,1214,1324;, + 3;1324,1214,1221;, + 3;1324,1221,1328;, + 3;1324,1328,1329;, + 3;1325,1324,1329;, + 3;1325,1329,1326;, + 3;1329,1330,1326;, + 3;1326,1330,1331;, + 3;1327,1326,1331;, + 3;1221,1220,1328;, + 3;1328,1220,1332;, + 3;1329,1328,1332;, + 3;1329,1332,1330;, + 3;1332,1333,1330;, + 3;1330,1333,1334;, + 3;1330,1334,1335;, + 3;1330,1335,1331;, + 3;1331,1335,1336;, + 3;1337,1331,1336;, + 3;1327,1331,1337;, + 3;1220,1219,1332;, + 3;1332,1219,1338;, + 3;1332,1338,1333;, + 3;1338,1255,1333;, + 3;1333,1255,1260;, + 3;1333,1260,1334;, + 3;1334,1260,1339;, + 3;1334,1339,1335;, + 3;1335,1339,1340;, + 3;1336,1335,1340;, + 3;1219,1227,1338;, + 3;1338,1227,1255;, + 3;1260,1259,1339;, + 3;1339,1259,1258;, + 3;1341,1339,1258;, + 3;1340,1339,1341;, + 3;1340,1341,1342;, + 3;1340,1342,1343;, + 3;1340,1343,1344;, + 3;1336,1340,1344;, + 3;1336,1344,1345;, + 3;1337,1336,1345;, + 3;1258,1265,1341;, + 3;1341,1265,1342;, + 3;1265,1346,1342;, + 3;1342,1346,1347;, + 3;1342,1347,1348;, + 3;1343,1342,1348;, + 3;1343,1348,1349;, + 3;1343,1349,1350;, + 3;1343,1350,1351;, + 3;1344,1343,1351;, + 3;1265,1264,1346;, + 3;1264,1352,1346;, + 3;1346,1352,1353;, + 3;1346,1353,1347;, + 3;1347,1353,1354;, + 3;1347,1354,1355;, + 3;1348,1347,1355;, + 3;1348,1355,1356;, + 3;1349,1348,1356;, + 3;1264,1357,1352;, + 3;1357,1358,1352;, + 3;1352,1358,1353;, + 3;1353,1358,1359;, + 3;1353,1359,1354;, + 3;1354,1359,1360;, + 3;1354,1360,1361;, + 3;1355,1354,1361;, + 3;1356,1355,1361;, + 3;994,1357,1264;, + 3;994,1001,1357;, + 3;1001,1359,1357;, + 3;1357,1359,1358;, + 3;1362,994,1264;, + 3;987,994,1362;, + 3;987,1362,1268;, + 3;988,987,1268;, + 3;988,1268,1271;, + 3;980,988,1271;, + 3;1362,1264,1263;, + 3;1268,1362,1263;, + 3;980,1271,1270;, + 3;1363,980,1270;, + 3;981,980,1363;, + 3;1364,981,1363;, + 3;982,981,1364;, + 3;1365,982,1364;, + 3;973,982,1365;, + 3;974,973,1365;, + 3;1363,1270,1269;, + 3;1150,1363,1269;, + 3;1364,1363,1150;, + 3;1150,1366,1364;, + 3;1366,1365,1364;, + 3;1367,1365,1366;, + 3;1367,1368,1365;, + 3;1368,974,1365;, + 3;975,974,1368;, + 3;975,1368,1367;, + 3;966,975,1367;, + 3;1369,1150,1269;, + 3;1148,1366,1150;, + 3;1370,1366,1148;, + 3;1370,1367,1366;, + 3;1370,966,1367;, + 3;967,966,1370;, + 3;1281,967,1370;, + 3;1280,967,1281;, + 3;1280,959,967;, + 3;1279,959,1280;, + 3;1279,960,959;, + 3;1147,1370,1148;, + 3;1281,1370,1147;, + 3;1001,1000,1359;, + 3;1000,1371,1359;, + 3;1359,1371,1372;, + 3;1359,1372,1360;, + 3;1372,1373,1360;, + 3;1360,1373,1374;, + 3;1361,1360,1374;, + 3;1000,999,1371;, + 3;999,1375,1371;, + 3;1371,1375,1376;, + 3;1372,1371,1376;, + 3;1372,1376,1377;, + 3;1372,1377,1373;, + 3;1377,1378,1373;, + 3;1373,1378,1379;, + 3;1374,1373,1379;, + 3;999,998,1375;, + 3;998,1380,1375;, + 3;1380,1381,1375;, + 3;1375,1381,1382;, + 3;1375,1382,1376;, + 3;1376,1382,1383;, + 3;1376,1383,1377;, + 3;1377,1383,1378;, + 3;997,1380,998;, + 3;1384,1380,997;, + 3;1384,1381,1380;, + 3;1384,1385,1381;, + 3;1385,1386,1381;, + 3;1381,1386,1382;, + 3;1386,1387,1382;, + 3;1382,1387,1388;, + 3;1383,1382,1388;, + 3;1389,1384,997;, + 3;1389,1390,1384;, + 3;1390,1385,1384;, + 3;1390,1391,1385;, + 3;1391,1386,1385;, + 3;1392,1386,1391;, + 3;1392,1393,1386;, + 3;1393,1394,1386;, + 3;1386,1394,1387;, + 3;996,1389,997;, + 3;1395,1389,996;, + 3;1395,1390,1389;, + 3;1395,1396,1390;, + 3;1396,1391,1390;, + 3;1396,1397,1391;, + 3;1397,1392,1391;, + 3;1397,1398,1392;, + 3;1392,1398,1399;, + 3;1392,1399,1393;, + 3;1393,1399,1400;, + 3;1393,1400,1394;, + 3;1006,1395,996;, + 3;1006,1401,1395;, + 3;1401,1396,1395;, + 3;1401,1402,1396;, + 3;1402,1397,1396;, + 3;1402,1403,1397;, + 3;1403,1404,1397;, + 3;1405,1397,1404;, + 3;1405,1406,1397;, + 3;1406,1398,1397;, + 3;1006,1407,1401;, + 3;1407,1408,1401;, + 3;1408,1402,1401;, + 3;1409,1402,1408;, + 3;1409,1410,1402;, + 3;1402,1410,1403;, + 3;1410,1411,1403;, + 3;1403,1411,1404;, + 3;1411,1405,1404;, + 3;1412,1407,1006;, + 3;1412,1408,1407;, + 3;1412,1413,1408;, + 3;1413,1409,1408;, + 3;1413,1414,1409;, + 3;1414,1415,1409;, + 3;1409,1415,1410;, + 3;1416,1412,1006;, + 3;1416,1417,1412;, + 3;1417,1413,1412;, + 3;1417,1418,1413;, + 3;1418,902,1413;, + 3;1413,902,1414;, + 3;902,901,1414;, + 3;901,1419,1414;, + 3;1419,1420,1414;, + 3;1414,1420,1415;, + 3;1421,1417,1416;, + 3;1421,1422,1417;, + 3;1417,1422,1418;, + 3;1422,896,1418;, + 3;896,902,1418;, + 3;1423,1422,1421;, + 3;1423,897,1422;, + 3;1422,897,896;, + 3;1424,1423,1421;, + 3;1424,1425,1423;, + 3;1425,891,1423;, + 3;891,898,1423;, + 3;1423,898,897;, + 3;893,1425,1424;, + 3;892,1425,893;, + 3;892,891,1425;, + 3;901,1420,1419;, + 3;900,1420,901;, + 3;900,1024,1420;, + 3;1024,1426,1420;, + 3;1426,1415,1420;, + 3;1426,1030,1415;, + 3;1030,1410,1415;, + 3;1030,1427,1410;, + 3;1427,1428,1410;, + 3;1410,1428,1411;, + 3;1024,1030,1426;, + 3;1428,1405,1411;, + 3;1428,1429,1405;, + 3;1429,1406,1405;, + 3;1429,1430,1406;, + 3;1430,1431,1406;, + 3;1406,1431,1398;, + 3;1431,1432,1398;, + 3;1398,1432,1399;, + 3;1433,1429,1428;, + 3;1433,1434,1429;, + 3;1434,1430,1429;, + 3;1434,1435,1430;, + 3;1435,1431,1430;, + 3;1435,1436,1431;, + 3;1431,1436,1432;, + 3;1427,1433,1428;, + 3;1437,1433,1427;, + 3;1438,1433,1437;, + 3;1438,1439,1433;, + 3;1439,1434,1433;, + 3;1439,1440,1434;, + 3;1440,1435,1434;, + 3;1440,1441,1435;, + 3;1441,1442,1435;, + 3;1442,1436,1435;, + 3;1443,1437,1427;, + 3;1437,1443,1444;, + 3;1438,1437,1444;, + 3;1445,1438,1444;, + 3;1446,1438,1445;, + 3;1446,1447,1438;, + 3;1438,1447,1439;, + 3;1443,1427,1030;, + 3;1029,1443,1030;, + 3;1448,1443,1029;, + 3;1444,1443,1448;, + 3;1449,1444,1448;, + 3;1450,1444,1449;, + 3;1450,1445,1444;, + 3;1451,1445,1450;, + 3;1451,1452,1445;, + 3;1452,1446,1445;, + 3;1037,1448,1029;, + 3;1449,1448,1037;, + 3;1036,1449,1037;, + 3;1051,1449,1036;, + 3;1051,1450,1449;, + 3;1451,1450,1051;, + 3;1050,1451,1051;, + 3;1453,1451,1050;, + 3;1453,1454,1451;, + 3;1454,1452,1451;, + 3;1454,1455,1452;, + 3;1455,1456,1452;, + 3;1456,1457,1452;, + 3;1457,1446,1452;, + 3;1453,1050,1458;, + 3;1135,1453,1458;, + 3;1134,1453,1135;, + 3;1454,1453,1134;, + 3;1133,1454,1134;, + 3;1133,1455,1454;, + 3;1459,1455,1133;, + 3;1458,1050,1049;, + 3;1460,1458,1049;, + 3;1135,1458,1460;, + 3;1136,1135,1460;, + 3;1136,1460,1076;, + 3;1136,1076,1075;, + 3;1075,1461,1136;, + 3;1461,1132,1136;, + 3;1125,1132,1461;, + 3;1460,1049,1056;, + 3;1076,1460,1056;, + 3;1074,1461,1075;, + 3;1082,1461,1074;, + 3;1082,1125,1461;, + 3;1089,1125,1082;, + 3;1126,1125,1089;, + 3;1088,1126,1089;, + 3;1127,1126,1088;, + 3;1087,1127,1088;, + 3;1104,1127,1087;, + 3;1462,1127,1104;, + 3;1462,1128,1127;, + 3;1463,1128,1462;, + 3;1464,1128,1463;, + 3;1464,1465,1128;, + 3;1465,1119,1128;, + 3;1103,1462,1104;, + 3;1113,1462,1103;, + 3;1113,1463,1462;, + 3;1466,1463,1113;, + 3;1466,1464,1463;, + 3;1466,1467,1464;, + 3;1464,1467,1465;, + 3;1468,1465,1467;, + 3;1468,1469,1465;, + 3;1469,1470,1465;, + 3;1465,1470,1119;, + 3;1119,1470,1120;, + 3;1112,1466,1113;, + 3;1111,1466,1112;, + 3;1111,1471,1466;, + 3;1471,1467,1466;, + 3;1472,1467,1471;, + 3;1472,1468,1467;, + 3;1472,1473,1468;, + 3;1473,1469,1468;, + 3;1474,1469,1473;, + 3;1474,1475,1469;, + 3;1475,1470,1469;, + 3;1475,1476,1470;, + 3;1470,1476,1120;, + 3;1477,1471,1111;, + 3;1478,1471,1477;, + 3;1478,1472,1471;, + 3;1479,1472,1478;, + 3;1479,1473,1472;, + 3;1480,1473,1479;, + 3;1480,1481,1473;, + 3;1481,1474,1473;, + 3;1481,1482,1474;, + 3;1482,1475,1474;, + 3;1477,1111,916;, + 3;915,1477,916;, + 3;1483,1477,915;, + 3;1483,1478,1477;, + 3;1484,1478,1483;, + 3;1484,1479,1478;, + 3;1485,1479,1484;, + 3;1485,1480,1479;, + 3;1486,1480,1485;, + 3;1486,1487,1480;, + 3;1487,1481,1480;, + 3;1488,1481,1487;, + 3;1488,1482,1481;, + 3;1489,1483,915;, + 3;1490,1483,1489;, + 3;1490,1484,1483;, + 3;1491,1484,1490;, + 3;1491,1485,1484;, + 3;1492,1485,1491;, + 3;1492,1486,1485;, + 3;1493,1486,1492;, + 3;1493,1494,1486;, + 3;1494,1487,1486;, + 3;1494,1488,1487;, + 3;1489,915,920;, + 3;926,1489,920;, + 3;926,1490,1489;, + 3;926,1491,1490;, + 3;926,1492,1491;, + 3;925,1492,926;, + 3;925,1495,1492;, + 3;1495,1493,1492;, + 3;1496,1493,1495;, + 3;1496,1497,1493;, + 3;1497,1494,1493;, + 3;1497,1498,1494;, + 3;1498,1499,1494;, + 3;1494,1499,1488;, + 3;1495,925,924;, + 3;1495,924,932;, + 3;1500,1495,932;, + 3;1500,1496,1495;, + 3;1500,1501,1496;, + 3;1501,1497,1496;, + 3;1501,1502,1497;, + 3;1502,1503,1497;, + 3;1497,1503,1498;, + 3;1503,1504,1498;, + 3;1498,1504,1499;, + 3;1500,932,941;, + 3;1501,1500,941;, + 3;1501,941,1505;, + 3;1501,1505,1502;, + 3;1502,1505,1506;, + 3;1502,1506,1507;, + 3;1502,1507,1503;, + 3;1507,1508,1503;, + 3;1503,1508,1504;, + 3;1508,1509,1504;, + 3;1504,1509,1510;, + 3;1504,1510,1499;, + 3;1505,941,940;, + 3;1505,940,939;, + 3;1505,939,1506;, + 3;1506,939,948;, + 3;1506,948,1511;, + 3;1507,1506,1511;, + 3;1507,1511,1508;, + 3;1508,1511,1512;, + 3;1508,1512,1513;, + 3;1508,1513,1509;, + 3;1513,1514,1509;, + 3;1509,1514,1293;, + 3;1509,1293,1515;, + 3;1509,1515,1510;, + 3;1511,948,947;, + 3;1511,947,1512;, + 3;1512,947,954;, + 3;1512,954,1516;, + 3;1513,1512,1516;, + 3;1513,1516,1514;, + 3;1514,1516,1517;, + 3;1514,1517,1286;, + 3;1514,1286,1293;, + 3;1516,954,953;, + 3;1516,953,1517;, + 3;953,961,1517;, + 3;1517,961,1518;, + 3;1286,1517,1518;, + 3;1286,1518,1287;, + 3;1287,1518,1279;, + 3;1287,1279,1278;, + 3;1518,961,960;, + 3;1518,960,1279;, + 3;1515,1293,1292;, + 3;1515,1292,1519;, + 3;1510,1515,1519;, + 3;1510,1519,1520;, + 3;1510,1520,1521;, + 3;1499,1510,1521;, + 3;1499,1521,1488;, + 3;1519,1292,1299;, + 3;1520,1519,1299;, + 3;1520,1299,1304;, + 3;1520,1304,1522;, + 3;1521,1520,1522;, + 3;1488,1521,1522;, + 3;1488,1522,1482;, + 3;1522,1523,1482;, + 3;1482,1523,1475;, + 3;1523,1524,1475;, + 3;1475,1524,1525;, + 3;1475,1525,1476;, + 3;1522,1304,1523;, + 3;1523,1304,1526;, + 3;1523,1526,1524;, + 3;1526,1310,1524;, + 3;1524,1310,1527;, + 3;1524,1527,1528;, + 3;1524,1528,1525;, + 3;1304,1303,1526;, + 3;1526,1303,1310;, + 3;1309,1527,1310;, + 3;1309,1316,1527;, + 3;1527,1316,1528;, + 3;1528,1316,1529;, + 3;1528,1529,1530;, + 3;1531,1528,1530;, + 3;1532,1528,1531;, + 3;1532,1531,1533;, + 3;1532,1533,1476;, + 3;1316,1534,1529;, + 3;1529,1534,1535;, + 3;1529,1535,1536;, + 3;1530,1529,1536;, + 3;1530,1536,1537;, + 3;1531,1530,1537;, + 3;1531,1537,1538;, + 3;1531,1538,1533;, + 3;1316,1539,1534;, + 3;1534,1539,1535;, + 3;1535,1539,1540;, + 3;1535,1540,1541;, + 3;1536,1535,1541;, + 3;1536,1541,1542;, + 3;1536,1542,1543;, + 3;1544,1536,1543;, + 3;1537,1536,1544;, + 3;1538,1537,1544;, + 3;1539,1316,1327;, + 3;1539,1327,1545;, + 3;1539,1545,1540;, + 3;1540,1545,1546;, + 3;1540,1546,1547;, + 3;1548,1540,1547;, + 3;1541,1540,1548;, + 3;1541,1548,1549;, + 3;1542,1541,1549;, + 3;1545,1327,1550;, + 3;1545,1550,1546;, + 3;1546,1550,1551;, + 3;1547,1546,1551;, + 3;1547,1551,1552;, + 3;1547,1552,1553;, + 3;1549,1547,1553;, + 3;1549,1548,1547;, + 3;1550,1327,1554;, + 3;1555,1550,1554;, + 3;1551,1550,1555;, + 3;1551,1555,1556;, + 3;1551,1556,1557;, + 3;1552,1551,1557;, + 3;1552,1557,1558;, + 3;1558,1553,1552;, + 3;1327,1559,1554;, + 3;1554,1559,1560;, + 3;1554,1560,1561;, + 3;1554,1561,1562;, + 3;1555,1554,1562;, + 3;1555,1562,1556;, + 3;1559,1327,1337;, + 3;1559,1337,1560;, + 3;1560,1337,1563;, + 3;1560,1563,1561;, + 3;1564,1561,1563;, + 3;1565,1561,1564;, + 3;1565,1562,1561;, + 3;1556,1562,1565;, + 3;1566,1556,1565;, + 3;1567,1556,1566;, + 3;1567,1557,1556;, + 3;1337,1568,1563;, + 3;1563,1568,1569;, + 3;1563,1569,1570;, + 3;1571,1563,1570;, + 3;1564,1563,1571;, + 3;1456,1564,1571;, + 3;1565,1564,1456;, + 3;1337,1345,1568;, + 3;1345,1572,1568;, + 3;1568,1572,1573;, + 3;1568,1573,1574;, + 3;1568,1574,1575;, + 3;1568,1575,1576;, + 3;1569,1568,1576;, + 3;1570,1569,1576;, + 3;1571,1570,1576;, + 3;1456,1571,1576;, + 3;1456,1576,1457;, + 3;1345,1577,1572;, + 3;1345,1578,1577;, + 3;1345,1579,1578;, + 3;1345,1344,1579;, + 3;1576,1575,1580;, + 3;1576,1580,1581;, + 3;1576,1581,1582;, + 3;1583,1576,1582;, + 3;1457,1576,1583;, + 3;1457,1583,1446;, + 3;1446,1583,1447;, + 3;1583,1584,1447;, + 3;1583,1585,1584;, + 3;1583,1586,1585;, + 3;1583,1582,1586;, + 3;1455,1565,1456;, + 3;1587,1565,1455;, + 3;1566,1565,1587;, + 3;1588,1566,1587;, + 3;1588,1567,1566;, + 3;1122,1587,1455;, + 3;1567,1558,1557;, + 3;1589,1558,1567;, + 3;1590,1558,1589;, + 3;1590,1591,1558;, + 3;1591,1592,1558;, + 3;1592,1553,1558;, + 3;1593,1553,1592;, + 3;1549,1553,1593;, + 3;1589,1567,1594;, + 3;1595,1589,1594;, + 3;1595,1590,1589;, + 3;1596,1590,1595;, + 3;1596,1591,1590;, + 3;1594,1567,1588;, + 3;1597,1594,1588;, + 3;1598,1594,1597;, + 3;1599,1594,1598;, + 3;1599,1595,1594;, + 3;1600,1595,1599;, + 3;1600,1601,1595;, + 3;1601,1596,1595;, + 3;1602,1596,1601;, + 3;1603,1597,1588;, + 3;1604,1597,1603;, + 3;1604,1599,1597;, + 3;1597,1599,1598;, + 3;1603,1588,1587;, + 3;1603,1587,1605;, + 3;1593,1592,1591;, + 3;1606,1593,1591;, + 3;1606,1607,1593;, + 3;1607,1549,1593;, + 3;1542,1549,1607;, + 3;1542,1607,1608;, + 3;1543,1542,1608;, + 3;1609,1543,1608;, + 3;1544,1543,1609;, + 3;1607,1606,1610;, + 3;1608,1607,1610;, + 3;1608,1610,1611;, + 3;1612,1608,1611;, + 3;1609,1608,1612;, + 3;1609,1612,1613;, + 3;1609,1613,1614;, + 3;1544,1609,1614;, + 3;1538,1544,1614;, + 3;1538,1614,1615;, + 3;1533,1538,1615;, + 3;1612,1611,1616;, + 3;1612,1616,1613;, + 3;1613,1616,1617;, + 3;1618,1613,1617;, + 3;1613,1618,1619;, + 3;1614,1613,1619;, + 3;1614,1619,1620;, + 3;1615,1614,1620;, + 3;1615,1620,1621;, + 3;1622,1615,1621;, + 3;1533,1615,1622;, + 3;1476,1533,1622;, + 3;1617,1616,1602;, + 3;1617,1602,1601;, + 3;1617,1601,1600;, + 3;1618,1617,1600;, + 3;1618,1600,1619;, + 3;1619,1600,1623;, + 3;1619,1623,1604;, + 3;1620,1619,1604;, + 3;1620,1604,1621;, + 3;1621,1604,1121;, + 3;1622,1621,1121;, + 3;1120,1622,1121;, + 3;1476,1622,1120;, + 3;1623,1600,1599;, + 3;1604,1623,1599;, + 3;1121,1604,1603;, + 3;1624,1121,1603;, + 3;1447,1625,1439;, + 3;1439,1625,1626;, + 3;1439,1626,1440;, + 3;1626,1627,1440;, + 3;1627,1628,1440;, + 3;1628,1441,1440;, + 3;1628,1629,1441;, + 3;1629,1630,1441;, + 3;1630,1631,1441;, + 3;1631,1632,1441;, + 3;1441,1632,1633;, + 3;1441,1633,1442;, + 3;1442,1633,1634;, + 3;1442,1634,1635;, + 3;1442,1635,1436;, + 3;1631,1636,1632;, + 3;1636,1637,1632;, + 3;1638,1632,1637;, + 3;1638,1639,1632;, + 3;1639,1640,1632;, + 3;1632,1640,1633;, + 3;1640,1641,1633;, + 3;1641,1642,1633;, + 3;1634,1633,1642;, + 3;1634,1642,1643;, + 3;1644,1634,1643;, + 3;1635,1634,1644;, + 3;1645,1639,1638;, + 3;1646,1639,1645;, + 3;1647,1639,1646;, + 3;1647,1648,1639;, + 3;1648,1649,1639;, + 3;1639,1649,1640;, + 3;1649,1641,1640;, + 3;1649,1650,1641;, + 3;1650,1651,1641;, + 3;1651,1652,1641;, + 3;1641,1652,1642;, + 3;1652,1653,1642;, + 3;1643,1642,1653;, + 3;1654,1648,1647;, + 3;1654,1349,1648;, + 3;1349,1356,1648;, + 3;1648,1356,1649;, + 3;1649,1356,1655;, + 3;1649,1655,1650;, + 3;1650,1655,1656;, + 3;1650,1656,1651;, + 3;1656,1657,1651;, + 3;1657,1658,1651;, + 3;1651,1658,1652;, + 3;1659,1349,1654;, + 3;1350,1349,1659;, + 3;1356,1361,1655;, + 3;1361,1374,1655;, + 3;1655,1374,1656;, + 3;1374,1660,1656;, + 3;1656,1660,1661;, + 3;1656,1661,1657;, + 3;1657,1661,1662;, + 3;1657,1662,1658;, + 3;1662,1663,1658;, + 3;1658,1663,1664;, + 3;1658,1664,1652;, + 3;1652,1664,1653;, + 3;1374,1379,1660;, + 3;1660,1379,1665;, + 3;1660,1665,1666;, + 3;1660,1666,1661;, + 3;1666,1667,1661;, + 3;1661,1667,1663;, + 3;1662,1661,1663;, + 3;1379,1668,1665;, + 3;1665,1668,1669;, + 3;1665,1669,1667;, + 3;1666,1665,1667;, + 3;1378,1668,1379;, + 3;1378,1670,1668;, + 3;1670,1671,1668;, + 3;1668,1671,1669;, + 3;1669,1671,1672;, + 3;1667,1669,1672;, + 3;1667,1672,1663;, + 3;1663,1672,1673;, + 3;1663,1673,1664;, + 3;1378,1674,1670;, + 3;1674,1671,1670;, + 3;1674,1675,1671;, + 3;1675,1676,1671;, + 3;1671,1676,1677;, + 3;1671,1677,1672;, + 3;1677,1678,1672;, + 3;1672,1678,1673;, + 3;1673,1678,1679;, + 3;1664,1673,1679;, + 3;1383,1674,1378;, + 3;1383,1680,1674;, + 3;1680,1675,1674;, + 3;1680,1681,1675;, + 3;1675,1681,1676;, + 3;1681,1682,1676;, + 3;1676,1682,1677;, + 3;1677,1682,1683;, + 3;1677,1683,1678;, + 3;1683,1684,1678;, + 3;1685,1678,1684;, + 3;1679,1678,1685;, + 3;1664,1679,1685;, + 3;1383,1388,1680;, + 3;1388,1681,1680;, + 3;1388,1686,1681;, + 3;1686,1682,1681;, + 3;1687,1682,1686;, + 3;1687,1688,1682;, + 3;1688,1689,1682;, + 3;1682,1689,1683;, + 3;1689,1684,1683;, + 3;1689,1690,1684;, + 3;1690,1691,1684;, + 3;1691,1685,1684;, + 3;1388,1687,1686;, + 3;1387,1687,1388;, + 3;1692,1687,1387;, + 3;1692,1693,1687;, + 3;1693,1688,1687;, + 3;1693,1694,1688;, + 3;1694,1695,1688;, + 3;1695,1689,1688;, + 3;1695,1690,1689;, + 3;1695,1696,1690;, + 3;1696,1697,1690;, + 3;1697,1691,1690;, + 3;1394,1692,1387;, + 3;1394,1698,1692;, + 3;1692,1698,1693;, + 3;1698,1694,1693;, + 3;1698,1699,1694;, + 3;1699,1700,1694;, + 3;1700,1701,1694;, + 3;1701,1696,1694;, + 3;1694,1696,1695;, + 3;1394,1400,1698;, + 3;1400,1699,1698;, + 3;1400,1700,1699;, + 3;1400,1702,1700;, + 3;1702,1703,1700;, + 3;1703,1701,1700;, + 3;1703,1704,1701;, + 3;1704,1696,1701;, + 3;1704,1705,1696;, + 3;1705,1697,1696;, + 3;1705,1706,1697;, + 3;1706,1691,1697;, + 3;1399,1702,1400;, + 3;1432,1702,1399;, + 3;1432,1707,1702;, + 3;1707,1703,1702;, + 3;1707,1708,1703;, + 3;1708,1704,1703;, + 3;1708,1709,1704;, + 3;1709,1705,1704;, + 3;1710,1705,1709;, + 3;1710,1711,1705;, + 3;1711,1706,1705;, + 3;1432,1712,1707;, + 3;1712,1709,1707;, + 3;1707,1709,1708;, + 3;1436,1712,1432;, + 3;1635,1712,1436;, + 3;1635,1644,1712;, + 3;1712,1644,1713;, + 3;1712,1713,1709;, + 3;1713,1710,1709;, + 3;1713,1711,1710;, + 3;1713,1644,1711;, + 3;1644,1643,1711;, + 3;1711,1643,1706;, + 3;1643,1653,1706;, + 3;1653,1685,1706;, + 3;1706,1685,1691;, + 3;1653,1664,1685;, + 3;1714,1715,1716;, + 3;1716,1715,1717;, + 3;1716,1717,1718;, + 3;1718,1717,1719;, + 3;1718,1719,1720;, + 3;1720,1719,1721;, + 3;1720,1721,1722;, + 3;1715,1723,1717;, + 3;1717,1723,1724;, + 3;1717,1724,1725;, + 3;1719,1717,1725;, + 3;1719,1725,1721;, + 3;1721,1725,1726;, + 3;1721,1726,1727;, + 3;1728,1721,1727;, + 3;1722,1721,1728;, + 3;1722,1728,1729;, + 3;1729,1728,1730;, + 3;1724,1723,1731;, + 3;1724,1731,1732;, + 3;1725,1724,1732;, + 3;1725,1732,1726;, + 3;1723,1733,1731;, + 3;1730,1728,1734;, + 3;1734,1728,1735;, + 3;1728,1727,1735;, + 3;1735,1727,1736;, + 3;1737,1738,1739;, + 3;1738,1740,1739;, + 3;1739,1740,1741;, + 3;1739,1741,1742;, + 3;1741,1743,1742;, + 3;1742,1743,1744;, + 3;1738,1745,1740;, + 3;1745,1746,1740;, + 3;1740,1746,1741;, + 3;1746,1747,1741;, + 3;1741,1747,1743;, + 3;1745,1748,1746;, + 3;1748,1749,1746;, + 3;1749,1750,1746;, + 3;1746,1750,1747;, + 3;1748,1751,1749;, + 3;1751,1752,1749;, + 3;1749,1752,1753;, + 3;1753,1754,1749;, + 3;1749,1754,1750;; + + MeshNormals { + 1755; + 0.977671;-0.109455;-0.179385;, + 0.978584;-0.070695;0.193330;, + 0.987811;0.152987;0.028705;, + 0.932823;0.276500;0.231062;, + 0.872628;0.481190;-0.083529;, + -0.650679;-0.574868;0.496128;, + -0.650679;-0.574868;0.496128;, + -0.650679;-0.574868;0.496128;, + -0.162752;0.935851;0.312563;, + -0.162752;0.935851;0.312563;, + -0.162752;0.935851;0.312563;, + 0.621258;-0.778630;0.088172;, + 0.741286;-0.657948;0.132662;, + 0.644263;-0.762201;-0.063042;, + 0.082982;-0.402060;-0.911845;, + 0.022229;-0.409128;-0.912206;, + 0.005878;0.001969;-0.999981;, + 0.025613;-0.703942;-0.709796;, + -0.046494;-0.403383;-0.913849;, + 0.005878;0.001969;-0.999981;, + 0.095971;-0.692988;-0.714533;, + 0.114420;-0.952549;-0.282063;, + 0.030366;-0.962658;-0.269012;, + -0.054630;-0.702058;-0.710021;, + -0.103873;-0.386686;-0.916343;, + 0.005878;0.001969;-0.999981;, + 0.131348;-0.387048;-0.912656;, + 0.153244;-0.673984;-0.722677;, + 0.184611;-0.934728;-0.303648;, + 0.005878;0.001969;-0.999981;, + 0.254545;-0.907802;-0.333319;, + 0.208278;-0.646620;-0.733828;, + 0.326800;-0.869252;-0.370948;, + 0.262623;-0.609772;-0.747802;, + 0.403477;-0.813785;-0.418282;, + 0.317170;-0.560299;-0.765159;, + 0.494190;-0.724761;-0.480102;, + 0.175951;-0.365303;-0.914109;, + 0.217504;-0.336879;-0.916081;, + 0.256336;-0.301234;-0.918450;, + 0.294839;-0.252654;-0.921540;, + 0.377430;-0.487112;-0.787571;, + 0.582705;-0.604751;-0.542891;, + 0.005878;0.001969;-0.999981;, + 0.005878;0.001969;-0.999981;, + 0.005878;0.001969;-0.999981;, + 0.005878;0.001969;-0.999981;, + -0.064851;-0.960798;-0.269558;, + -0.123984;-0.687357;-0.715660;, + -0.148784;-0.364639;-0.919185;, + 0.005878;0.001969;-0.999981;, + -0.148305;-0.947060;-0.284752;, + -0.181624;-0.664584;-0.724804;, + -0.188873;-0.337322;-0.922248;, + 0.005878;0.001969;-0.999981;, + -0.219948;-0.925292;-0.308963;, + -0.236887;-0.633240;-0.736812;, + -0.225193;-0.304698;-0.925444;, + 0.005878;0.001969;-0.999981;, + -0.291549;-0.893725;-0.340961;, + -0.291288;-0.591676;-0.751712;, + -0.257261;-0.267457;-0.928592;, + 0.005878;0.001969;-0.999981;, + -0.365659;-0.849085;-0.381245;, + -0.344057;-0.538753;-0.769006;, + -0.284204;-0.227139;-0.931470;, + 0.005878;0.001969;-0.999981;, + -0.441772;-0.788018;-0.428794;, + -0.392966;-0.474779;-0.787504;, + -0.304957;-0.186503;-0.933926;, + 0.005878;0.001969;-0.999981;, + -0.516649;-0.708504;-0.480725;, + -0.434567;-0.403240;-0.805325;, + -0.319713;-0.148728;-0.935769;, + 0.005878;0.001969;-0.999981;, + -0.584088;-0.613177;-0.531841;, + -0.466867;-0.330636;-0.820192;, + -0.331294;-0.108558;-0.937262;, + 0.005878;0.001969;-0.999981;, + -0.638951;-0.510596;-0.575355;, + -0.494361;-0.246894;-0.833457;, + -0.340130;-0.060517;-0.938429;, + 0.005878;0.001969;-0.999981;, + -0.687999;-0.386675;-0.614117;, + -0.516476;-0.140199;-0.844746;, + -0.343668;-0.028201;-0.938668;, + 0.005878;0.001969;-0.999981;, + -0.528430;-0.161089;-0.833554;, + -0.524918;-0.066052;-0.848586;, + -0.524702;0.025387;-0.850907;, + -0.343010;0.010893;-0.939269;, + 0.005878;0.001969;-0.999981;, + -0.537727;-0.075971;-0.839689;, + -0.537622;0.029166;-0.842681;, + -0.513226;0.150483;-0.844958;, + -0.338494;0.065003;-0.938721;, + 0.005878;0.001969;-0.999981;, + -0.723020;0.238214;-0.648457;, + -0.489858;0.252826;-0.834337;, + -0.328722;0.111469;-0.937825;, + 0.005878;0.001969;-0.999981;, + -0.680921;0.395700;-0.616253;, + -0.453962;0.358378;-0.815772;, + -0.311990;0.162306;-0.936119;, + 0.005878;0.001969;-0.999981;, + -0.617704;0.550754;-0.561348;, + -0.539328;0.675315;-0.503066;, + -0.406768;0.449274;-0.795420;, + -0.288998;0.211167;-0.933750;, + 0.005878;0.001969;-0.999981;, + -0.344907;0.529102;-0.775300;, + -0.255173;0.260642;-0.931103;, + 0.005878;0.001969;-0.999981;, + -0.341228;0.596156;-0.726748;, + -0.288877;0.588194;-0.755366;, + -0.221241;0.299820;-0.927987;, + 0.005878;0.001969;-0.999981;, + 0.176669;-0.410006;-0.894809;, + -0.235223;0.629107;-0.740875;, + -0.184714;0.330637;-0.925505;, + 0.005878;0.001969;-0.999981;, + -0.176329;0.540836;-0.822438;, + -0.180308;0.661903;-0.727581;, + -0.145485;0.357360;-0.922566;, + 0.005878;0.001969;-0.999981;, + 0.106834;-0.449816;-0.886708;, + -0.125182;0.684041;-0.718622;, + -0.102645;0.376995;-0.920510;, + 0.005878;0.001969;-0.999981;, + -0.093277;0.587067;-0.804146;, + -0.069841;0.699101;-0.711604;, + -0.058291;0.391669;-0.918258;, + 0.005878;0.001969;-0.999981;, + 0.036937;-0.482863;-0.874916;, + -0.013926;0.704928;-0.709142;, + -0.011607;0.398223;-0.917215;, + 0.005878;0.001969;-0.999981;, + -0.010354;0.604790;-0.796317;, + 0.042102;0.704092;-0.708859;, + 0.035608;0.399312;-0.916123;, + 0.005878;0.001969;-0.999981;, + -0.025796;-0.497372;-0.867154;, + 0.097714;0.694119;-0.713198;, + 0.082156;0.391719;-0.916410;, + 0.005878;0.001969;-0.999981;, + 0.072821;0.596076;-0.799619;, + 0.153349;0.677120;-0.719717;, + 0.128112;0.378626;-0.916640;, + 0.005878;0.001969;-0.999981;, + -0.094740;-0.480108;-0.872079;, + 0.209031;0.649780;-0.730816;, + 0.171681;0.357156;-0.918131;, + 0.005878;0.001969;-0.999981;, + 0.156722;0.559207;-0.814080;, + 0.263758;0.614425;-0.743582;, + 0.213089;0.330640;-0.919386;, + 0.005878;0.001969;-0.999981;, + -0.152391;-0.429669;-0.890035;, + 0.322115;0.562015;-0.761828;, + 0.253068;0.294092;-0.921665;, + 0.005878;0.001969;-0.999981;, + 0.318232;0.632983;-0.705734;, + 0.376788;0.499987;-0.779772;, + 0.289242;0.253732;-0.923016;, + 0.005878;0.001969;-0.999981;, + 0.490823;0.740333;-0.459347;, + 0.425391;0.420543;-0.801365;, + 0.317136;0.207429;-0.925418;, + 0.005878;0.001969;-0.999981;, + 0.569701;0.637176;-0.519083;, + 0.475014;0.309947;-0.823587;, + 0.343577;0.147475;-0.927473;, + 0.005878;0.001969;-0.999981;, + 0.653771;0.480762;-0.584339;, + 0.506562;0.197029;-0.839389;, + 0.359464;0.091664;-0.928646;, + 0.005878;0.001969;-0.999981;, + 0.710483;0.310597;-0.631461;, + 0.522751;0.090044;-0.847717;, + 0.367752;0.041403;-0.929002;, + 0.005878;0.001969;-0.999981;, + 0.740168;0.143125;-0.657014;, + 0.525810;-0.017208;-0.850428;, + 0.369521;-0.007930;-0.929189;, + 0.005878;0.001969;-0.999981;, + 0.746548;-0.027401;-0.664767;, + 0.518964;-0.113972;-0.847164;, + 0.366996;-0.052697;-0.928729;, + 0.005878;0.001969;-0.999981;, + 0.360400;-0.095147;-0.927933;, + 0.733136;-0.180847;-0.655596;, + 0.503046;-0.202505;-0.840200;, + 0.473974;-0.301793;-0.827206;, + 0.347178;-0.145422;-0.926455;, + 0.005878;0.001969;-0.999981;, + 0.704434;-0.318935;-0.634077;, + 0.652787;-0.468691;-0.595145;, + 0.432852;-0.396973;-0.809352;, + 0.326485;-0.197700;-0.924296;, + 0.005878;0.001969;-0.999981;, + 0.005878;0.001969;-0.999981;, + 0.958437;0.284093;-0.026276;, + 0.868507;0.479636;0.125080;, + 0.752162;0.635295;0.175082;, + 0.703253;0.701674;0.114404;, + 0.661980;0.711328;-0.236212;, + 0.647458;0.429738;-0.629383;, + 0.860249;0.164485;-0.482614;, + 0.962093;0.149004;-0.228416;, + 0.588439;0.806330;0.059766;, + 0.434431;0.820494;-0.371564;, + 0.491879;0.636378;-0.594204;, + 0.352153;0.434808;-0.828812;, + 0.385649;0.277733;-0.879852;, + 0.518225;0.126694;-0.845808;, + 0.697358;-0.157784;-0.699140;, + 0.489782;0.871822;0.006273;, + 0.383261;0.923591;0.009505;, + 0.256137;0.909942;-0.326190;, + 0.171940;0.646766;-0.743055;, + 0.267450;0.565222;-0.780381;, + 0.194242;0.276217;-0.941262;, + 0.249673;0.103039;-0.962833;, + 0.340453;-0.060937;-0.938285;, + 0.310520;0.950553;0.005133;, + 0.220334;0.975392;0.007991;, + 0.132313;0.952283;-0.275046;, + 0.036795;0.728312;-0.684257;, + 0.094050;0.407941;-0.908151;, + 0.102623;0.217736;-0.970598;, + 0.113196;0.113325;-0.987089;, + 0.156314;-0.037339;-0.987001;, + 0.154942;0.987915;0.003996;, + 0.061367;0.998115;-0.000747;, + -0.024469;0.955341;-0.294492;, + -0.168073;0.921756;-0.349453;, + -0.114940;0.661762;-0.740850;, + -0.021068;0.414838;-0.909652;, + 0.004584;0.166908;-0.985962;, + 0.031822;0.041406;-0.998636;, + -0.031699;0.999473;-0.007009;, + -0.109174;0.994022;-0.000553;, + -0.194003;0.980989;-0.004897;, + -0.265677;0.963164;0.041593;, + -0.394526;0.899113;-0.189591;, + -0.255479;0.801700;-0.540377;, + -0.212798;0.607355;-0.765400;, + -0.134733;0.388308;-0.911627;, + -0.053198;0.195284;-0.979303;, + -0.352037;0.935700;0.023138;, + -0.437336;0.897835;0.051274;, + -0.564738;0.820570;0.087953;, + -0.626528;0.752925;-0.201410;, + -0.408207;0.742132;-0.531608;, + -0.302231;0.509627;-0.805566;, + -0.237210;0.247276;-0.939461;, + -0.093060;0.101210;-0.990503;, + 0.003335;-0.003890;-0.999987;, + -0.704109;0.701298;0.111407;, + -0.853585;0.501508;-0.141004;, + -0.567633;0.577185;-0.587069;, + -0.401146;0.370896;-0.837566;, + -0.476555;0.182180;-0.860062;, + -0.261121;0.048045;-0.964110;, + -0.076443;-0.013093;-0.996988;, + -0.801175;0.581015;0.143318;, + -0.907511;0.394448;0.144344;, + -0.958458;0.252476;0.132718;, + -0.969337;0.149765;-0.194822;, + -0.725973;0.314161;-0.611773;, + -0.818042;-0.029530;-0.574400;, + -0.478534;-0.068276;-0.875410;, + -0.232738;-0.112913;-0.965963;, + -0.090786;-0.113769;-0.989351;, + -0.991597;-0.000366;0.129367;, + -0.983721;-0.176512;-0.033718;, + -0.895377;-0.372146;-0.244556;, + -0.694309;-0.306642;-0.651081;, + -0.414553;-0.285447;-0.864098;, + -0.192403;-0.284593;-0.939142;, + -0.046790;-0.169229;-0.984465;, + -0.000186;-0.014604;-0.999893;, + -0.909253;-0.408749;0.078636;, + -0.764203;-0.614612;-0.195564;, + -0.594207;-0.483271;-0.642936;, + -0.354701;-0.442826;-0.823463;, + -0.265208;-0.567880;-0.779215;, + -0.099190;-0.425826;-0.899352;, + 0.009093;-0.184698;-0.982753;, + -0.806496;-0.589930;0.039327;, + -0.684992;-0.722632;0.092675;, + -0.565382;-0.822757;-0.058426;, + -0.518251;-0.668792;-0.533041;, + -0.389973;-0.845703;-0.364289;, + -0.186276;-0.727463;-0.660378;, + -0.061513;-0.742232;-0.667314;, + 0.017297;-0.481457;-0.876299;, + -0.466388;-0.879317;-0.096351;, + -0.152391;-0.429669;-0.890035;, + -0.262321;-0.933348;-0.245048;, + -0.121881;-0.953042;-0.277230;, + 0.012298;-0.961435;-0.274756;, + 0.036010;-0.745119;-0.665959;, + 0.118463;-0.674920;-0.728319;, + 0.124989;-0.390047;-0.912272;, + -0.254706;-0.915071;-0.312682;, + -0.114308;-0.942057;-0.315377;, + 0.016582;-0.948480;-0.316404;, + 0.139479;-0.935192;-0.325519;, + 0.281541;-0.888836;-0.361533;, + 0.217770;-0.621202;-0.752785;, + 0.310698;-0.508441;-0.803091;, + 0.226240;-0.226538;-0.947363;, + 0.061018;-0.096581;-0.993453;, + 0.148753;-0.933849;-0.325267;, + 0.294399;-0.899898;-0.321735;, + 0.445186;-0.801139;-0.399982;, + 0.612694;-0.543807;-0.573481;, + 0.402754;-0.299058;-0.865074;, + 0.527503;-0.846382;-0.073337;, + 0.644263;-0.762201;-0.063042;, + 0.857073;-0.491013;-0.155986;, + 0.741286;-0.657948;0.132662;, + 0.865187;-0.500758;0.026331;, + 0.948407;-0.311754;0.057727;, + 0.997181;-0.072038;0.021008;, + 0.011882;-0.087837;-0.996064;, + -0.017795;-0.090793;-0.995711;, + -0.033708;-0.044931;-0.998421;, + -0.003995;0.004069;-0.999984;, + 0.044052;-0.010896;-0.998970;, + 0.039958;-0.055825;-0.997641;, + 0.033087;-0.075173;-0.996621;, + 0.014058;-0.091707;-0.995687;, + -0.007050;-0.096563;-0.995302;, + -0.030933;-0.078984;-0.996396;, + 0.049738;-0.016404;-0.998628;, + 0.046332;-0.038004;-0.998203;, + 0.079612;-0.149853;-0.985498;, + 0.037091;-0.132924;-0.990432;, + 0.009991;-0.139041;-0.990236;, + -0.018573;-0.194114;-0.980803;, + 0.029403;0.014337;-0.999465;, + 0.050347;0.006710;-0.998709;, + 0.084122;-0.027988;-0.996062;, + 0.111291;-0.106364;-0.988079;, + 0.035365;0.055207;-0.997848;, + 0.044775;0.041812;-0.998122;, + 0.084556;0.020323;-0.996211;, + 0.161668;-0.001255;-0.986844;, + 0.157737;-0.072728;-0.984799;, + 0.014459;0.083789;-0.996379;, + 0.031724;0.080063;-0.996285;, + 0.051239;0.115897;-0.991939;, + 0.078620;0.062292;-0.994957;, + 0.154813;0.075358;-0.985066;, + 0.003882;0.000705;-0.999992;, + -0.014111;0.077972;-0.996856;, + -0.006507;0.095707;-0.995388;, + 0.015356;0.094852;-0.995373;, + 0.011162;0.126523;-0.991901;, + -0.006165;0.008625;-0.999944;, + -0.035726;0.046571;-0.998276;, + -0.030192;0.077736;-0.996517;, + -0.025315;0.193439;-0.980786;, + -0.048785;0.002251;-0.998807;, + -0.044902;0.042159;-0.998101;, + -0.078081;0.149240;-0.985713;, + -0.060783;0.203794;-0.977125;, + -0.047415;-0.037701;-0.998164;, + -0.049301;0.004398;-0.998774;, + -0.068139;0.014212;-0.997575;, + -0.104605;0.108923;-0.988531;, + -0.115756;0.214963;-0.969738;, + -0.092190;0.254676;-0.962622;, + -0.051186;-0.115862;-0.991946;, + -0.065349;-0.042844;-0.996942;, + -0.148636;-0.054101;-0.987411;, + -0.150828;0.057439;-0.986890;, + -0.121489;0.118591;-0.985483;, + -0.051642;-0.238653;-0.969731;, + -0.084393;-0.264662;-0.960641;, + -0.112177;-0.223106;-0.968318;, + -0.126180;-0.142911;-0.981659;, + -0.043622;-0.279604;-0.959124;, + -0.076990;-0.230398;-0.970046;, + -0.108911;-0.197300;-0.974275;, + -0.119202;-0.113731;-0.986335;, + -0.119488;-0.058441;-0.991114;, + -0.190620;0.005706;-0.981647;, + -0.011885;-0.302200;-0.953171;, + 0.010005;-0.290976;-0.956678;, + 0.025501;-0.268244;-0.963013;, + 0.043955;-0.260541;-0.964462;, + 0.059294;-0.251954;-0.965921;, + 0.083667;-0.259862;-0.962014;, + 0.089558;-0.203688;-0.974931;, + -0.008187;0.022037;-0.999724;, + 0.116650;-0.160534;-0.980113;, + 0.047359;-0.036089;-0.998226;, + 0.192852;-0.138135;-0.971456;, + 0.235726;-0.054143;-0.970310;, + -0.144253;0.105830;-0.983865;, + -0.090790;0.034708;-0.995265;, + 0.213636;0.055574;-0.975331;, + -0.147511;-0.045446;-0.988016;, + -0.068155;-0.065335;-0.995533;, + 0.416048;-0.000122;-0.909343;, + 0.200531;0.153235;-0.967629;, + 0.133215;0.135276;-0.981812;, + -0.141339;0.049172;-0.988739;, + -0.035470;0.216604;-0.975615;, + -0.013980;0.261567;-0.965084;, + -0.002050;0.277188;-0.960813;, + 0.021650;0.275358;-0.961098;, + 0.047029;0.246751;-0.967937;, + 0.021162;0.262942;-0.964580;, + 0.059469;0.248776;-0.966734;, + 0.087738;0.256360;-0.962591;, + 0.114399;0.215055;-0.969878;, + 0.125881;0.136844;-0.982562;, + 0.091902;0.207770;-0.973851;, + 0.121415;0.168510;-0.978194;, + -0.509811;0.845072;0.161079;, + -0.337400;0.931144;0.138320;, + -0.402704;0.901490;0.158572;, + -0.347667;0.928990;0.126909;, + -0.189949;0.974730;0.117558;, + -0.264768;0.954494;0.137252;, + -0.240707;0.960898;0.136879;, + -0.228654;0.963831;0.136923;, + -0.188087;0.969891;0.154707;, + -0.541321;0.818877;0.190820;, + -0.166855;0.975123;0.145926;, + -0.016671;0.993399;0.113491;, + 0.008655;0.990628;0.136311;, + -0.110554;0.978838;0.172206;, + 0.000023;0.985519;0.169568;, + 0.112112;0.978803;0.171395;, + -0.585073;0.786792;0.196593;, + -0.509912;0.828951;0.229846;, + -0.316528;0.918553;0.236791;, + -0.042428;0.983811;0.174112;, + 0.123700;0.978610;0.164378;, + 0.173633;0.978019;0.115460;, + -0.549497;0.810173;0.204139;, + 0.175731;0.971613;0.158389;, + 0.211151;0.970150;0.119262;, + 0.228230;0.962057;0.149527;, + 0.254657;0.956689;0.141050;, + 0.265335;0.954758;0.134291;, + 0.341298;0.930209;0.135007;, + 0.504213;0.843662;0.184401;, + 0.517498;0.839240;0.166949;, + 0.402704;0.901490;0.158572;, + 0.374657;0.895135;0.241590;, + 0.512249;0.827812;0.228755;, + 0.584106;0.787523;0.196539;, + 0.100128;0.963070;0.249942;, + 0.387049;0.879717;0.276208;, + 0.474726;0.846872;0.239674;, + 0.350785;0.900861;0.255733;, + 0.199641;0.942495;0.268041;, + 0.054384;0.962474;0.265870;, + -0.088793;0.967562;0.236516;, + -0.065877;0.956594;0.283882;, + -0.013683;0.966485;0.256357;, + -0.089951;0.961754;0.258722;, + -0.198634;0.942954;0.267175;, + -0.337273;0.899729;0.277010;, + -0.349873;0.900997;0.256500;, + -0.474726;0.846872;0.239674;, + 0.549496;0.810173;0.204139;, + 0.202050;-0.125341;0.971322;, + 0.202050;-0.125341;0.971322;, + 0.158760;-0.141225;0.977165;, + -0.207906;-0.054612;-0.976623;, + -0.222330;-0.016703;-0.974828;, + 0.140604;0.039220;-0.989289;, + 0.527503;-0.846382;-0.073337;, + 0.621258;-0.778630;0.088172;, + 0.644263;-0.762201;-0.063042;, + 0.115127;-0.156803;0.980897;, + 0.115127;-0.156803;0.980897;, + -0.008681;-0.030196;-0.999506;, + -0.152391;-0.429669;-0.890035;, + -0.029350;-0.056201;-0.997988;, + -0.002841;-0.022708;-0.999738;, + -0.094740;-0.480108;-0.872079;, + 0.000381;-0.021104;-0.999777;, + -0.025796;-0.497372;-0.867154;, + 0.010596;-0.031611;-0.999444;, + 0.255811;-0.381134;-0.888424;, + 0.176669;-0.410006;-0.894809;, + 0.003607;-0.022014;-0.999751;, + 0.036937;-0.482863;-0.874916;, + 0.106834;-0.449816;-0.886708;, + 0.861504;-0.448751;0.237556;, + 0.978584;-0.070695;0.193330;, + 0.948407;-0.311754;0.057727;, + 0.852825;-0.141438;0.502678;, + 0.880351;0.266244;0.392551;, + 0.932823;0.276500;0.231062;, + 0.868507;0.479636;0.125080;, + 0.716573;0.601054;0.353917;, + 0.752162;0.635295;0.175082;, + 0.865187;-0.500758;0.026331;, + 0.741286;-0.657948;0.132662;, + 0.689197;-0.682321;0.243813;, + 0.711704;-0.512418;0.480527;, + 0.733964;-0.274088;0.621428;, + 0.763409;0.001633;0.645913;, + 0.797189;0.154426;0.583646;, + 0.527512;-0.846396;0.073105;, + 0.549536;-0.739367;0.389033;, + 0.533545;-0.675137;0.509431;, + 0.646099;-0.507433;0.570147;, + 0.639613;-0.456914;0.618162;, + 0.736733;-0.193488;0.647909;, + 0.363628;-0.872594;0.326121;, + 0.362468;-0.802807;0.473411;, + 0.499800;-0.673428;0.544697;, + 0.520342;-0.661339;0.540254;, + 0.614791;-0.545072;0.570026;, + 0.693258;-0.371816;0.617370;, + 0.310185;-0.948151;0.069246;, + 0.210594;-0.931212;0.297479;, + 0.211591;-0.878815;0.427684;, + 0.221318;-0.873168;0.434277;, + 0.298140;-0.842592;0.448499;, + 0.408259;-0.799191;0.441157;, + 0.156989;-0.985549;0.063616;, + 0.071837;-0.956414;0.283040;, + 0.078474;-0.907627;0.412377;, + 0.119965;-0.925325;0.359698;, + 0.190268;-0.975376;0.111532;, + 0.277509;-0.957786;0.075071;, + 0.366271;-0.930497;0.004639;, + 0.017434;-0.997189;0.072877;, + -0.046726;-0.963248;0.264520;, + -0.065666;-0.913673;0.401110;, + -0.026859;-0.906718;0.420880;, + 0.034831;-0.914998;0.401951;, + 0.044346;-0.991603;0.121478;, + 0.108490;-0.890800;-0.441253;, + -0.120122;-0.989972;0.074332;, + -0.170598;-0.942504;0.287373;, + -0.175042;-0.902126;0.394372;, + -0.202154;-0.874479;0.440931;, + -0.146449;-0.894540;0.422315;, + -0.051987;-0.951315;0.303805;, + -0.267325;-0.960405;0.078483;, + -0.309294;-0.901190;0.303634;, + -0.292409;-0.852395;0.433496;, + -0.346400;-0.803733;0.483757;, + -0.272920;-0.846909;0.456355;, + -0.252656;-0.957151;0.141515;, + -0.163254;-0.982676;0.087729;, + -0.467266;-0.880973;0.074486;, + -0.489904;-0.794359;0.359148;, + -0.441748;-0.755810;0.483333;, + -0.496306;-0.678690;0.541350;, + -0.417568;-0.759759;0.498401;, + -0.344304;-0.884933;0.313605;, + -0.631929;-0.741397;0.225824;, + -0.660364;-0.584937;0.470922;, + -0.541848;-0.657712;0.523274;, + -0.645680;-0.471949;0.600301;, + -0.539105;-0.638596;0.549146;, + -0.565382;-0.822757;-0.058426;, + -0.684992;-0.722632;0.092675;, + -0.821284;-0.514225;0.247112;, + -0.833865;-0.188865;0.518651;, + -0.750280;-0.251978;0.611217;, + -0.806496;-0.589930;0.039327;, + -0.909253;-0.408749;0.078636;, + -0.947761;-0.194361;0.252930;, + -0.924521;0.133790;0.356877;, + -0.782170;0.169129;0.599672;, + -0.779225;-0.034506;0.625794;, + -0.753998;0.017849;0.656635;, + -0.726797;-0.192585;0.659301;, + -0.983721;-0.176512;-0.033718;, + -0.991597;-0.000366;0.129367;, + -0.958458;0.252476;0.132718;, + -0.907511;0.394448;0.144344;, + -0.810854;0.436143;0.390250;, + -0.706908;0.433886;0.558591;, + -0.694453;0.333991;0.637326;, + -0.801175;0.581015;0.143318;, + -0.653423;0.670743;0.350917;, + -0.593668;0.603666;0.532114;, + -0.704109;0.701298;0.111407;, + -0.564738;0.820570;0.087953;, + -0.475330;0.834059;0.280012;, + -0.451842;0.764535;0.459701;, + -0.420186;0.751115;0.509186;, + -0.571346;0.580659;0.579999;, + -0.437336;0.897835;0.051274;, + -0.307469;0.902897;0.300401;, + -0.335696;0.828729;0.447792;, + -0.273099;0.844615;0.460481;, + -0.306130;0.835167;0.456925;, + -0.407164;0.807360;0.427069;, + -0.507820;0.676664;0.533146;, + -0.352037;0.935700;0.023138;, + -0.265677;0.963164;0.041593;, + -0.152738;0.960640;0.232039;, + -0.135207;0.911722;0.387921;, + -0.221086;0.881891;0.416401;, + -0.141021;0.891360;0.430802;, + -0.210346;0.877422;0.431143;, + -0.194003;0.980989;-0.004897;, + -0.109174;0.994022;-0.000553;, + -0.020817;0.978665;0.204405;, + -0.016690;0.932335;0.361210;, + -0.034521;0.909191;0.414947;, + -0.031699;0.999473;-0.007009;, + 0.061367;0.998115;-0.000747;, + 0.121605;0.956492;0.265209;, + 0.074453;0.909604;0.408752;, + 0.029516;0.929420;0.367841;, + -0.053140;0.933065;0.355761;, + -0.115142;0.942089;0.314976;, + 0.154942;0.987915;0.003996;, + 0.220334;0.975392;0.007991;, + 0.281409;0.919381;0.274859;, + 0.205417;0.881610;0.424932;, + 0.147328;0.896383;0.418082;, + 0.072775;0.992346;0.099771;, + -0.032960;0.998942;0.032058;, + 0.310520;0.950553;0.005133;, + 0.383261;0.923591;0.009505;, + 0.481306;0.839348;0.252665;, + 0.361015;0.806257;0.468634;, + 0.272923;0.847069;0.456056;, + 0.252656;0.957151;0.141517;, + 0.167559;0.984132;0.058385;, + 0.489782;0.871822;0.006273;, + 0.588439;0.806330;0.059766;, + 0.639357;0.755706;0.141882;, + 0.514456;0.693355;0.504573;, + 0.495194;0.674502;0.547568;, + 0.418954;0.758746;0.498781;, + 0.344304;0.884933;0.313605;, + 0.703253;0.701674;0.114404;, + 0.304880;0.807551;-0.504886;, + 0.473426;0.877826;0.072729;, + 0.183869;0.345566;-0.920204;, + -0.073528;-0.245995;-0.966478;, + 0.151041;0.669952;-0.726877;, + 0.101694;0.832020;-0.545344;, + 0.539378;0.751535;0.379824;, + 0.540942;0.717085;-0.439513;, + -0.097088;-0.083272;-0.991786;, + -0.169362;-0.285873;-0.943182;, + 0.538857;0.639013;0.548904;, + 0.656187;0.682653;0.321564;, + 0.629461;0.529658;-0.568543;, + 0.126972;-0.003851;-0.991899;, + -0.328406;-0.212840;-0.920244;, + -0.343294;-0.345490;-0.873376;, + 0.648969;0.465102;0.602096;, + 0.619321;0.540311;0.569654;, + 0.738555;0.502344;0.449653;, + 0.863254;0.503197;0.039818;, + 0.740684;0.329824;-0.585324;, + 0.748580;0.336532;0.571291;, + 0.733631;0.242497;0.634807;, + 0.733566;0.233884;0.638106;, + 0.692459;0.378067;0.614465;, + 0.895011;0.314233;0.316564;, + 0.921164;0.173708;-0.348255;, + 0.749609;0.058624;0.659280;, + 0.878739;0.026167;0.476585;, + 0.896276;-0.298656;0.327864;, + 0.915747;-0.069979;-0.395613;, + 0.735754;-0.497441;0.459585;, + 0.874456;-0.485035;-0.008234;, + 0.526943;-0.210816;-0.823339;, + 0.660047;-0.691418;0.293733;, + 0.690991;-0.559261;-0.457993;, + 0.026567;-0.027659;-0.999264;, + -0.224661;-0.018905;-0.974254;, + -0.421829;-0.158320;-0.892746;, + 0.543999;-0.795295;0.267527;, + 0.548581;-0.706537;-0.447061;, + 0.165490;-0.158014;-0.973470;, + -0.239370;0.242437;-0.940174;, + -0.334498;0.130454;-0.933324;, + -0.441907;0.027401;-0.896642;, + 0.472098;-0.875210;-0.105503;, + 0.162650;-0.337165;-0.927289;, + -0.147427;0.262871;-0.953501;, + -0.266833;0.473238;-0.839551;, + -0.384725;0.439167;-0.811862;, + -0.416546;0.274085;-0.866814;, + 0.236978;-0.665142;-0.708116;, + -0.073926;0.201067;-0.976784;, + -0.189422;0.572907;-0.797431;, + -0.309471;0.571228;-0.760214;, + -0.420737;0.481097;-0.769107;, + -0.465049;0.339008;-0.817804;, + 0.148269;-0.636044;-0.757275;, + -0.047941;0.259570;-0.964534;, + -0.137732;0.652347;-0.745301;, + -0.221019;0.664341;-0.714004;, + -0.330208;0.611036;-0.719443;, + -0.400677;0.540967;-0.739468;, + -0.304689;0.649672;-0.696485;, + 0.001096;-0.538009;-0.842939;, + -0.004723;0.478009;-0.878342;, + -0.062108;0.670651;-0.739168;, + -0.137254;0.728134;-0.671552;, + -0.214678;0.710397;-0.670261;, + -0.030815;-0.993935;-0.105564;, + -0.099144;-0.878982;-0.466434;, + -0.008200;-0.002139;-0.999964;, + 0.053168;0.564279;-0.823870;, + 0.025743;0.687156;-0.726054;, + -0.051409;0.752636;-0.656427;, + -0.151042;-0.669954;-0.726876;, + 0.073529;0.246001;-0.966477;, + 0.116264;0.643381;-0.756666;, + 0.093991;0.731061;-0.675807;, + 0.027771;0.757212;-0.652578;, + -0.304879;-0.807549;-0.504889;, + -0.183869;-0.345565;-0.920205;, + 0.169370;0.285887;-0.943177;, + 0.268897;0.487885;-0.830459;, + 0.201236;0.575384;-0.792740;, + 0.179601;0.689077;-0.702080;, + -0.473426;-0.877826;0.072725;, + -0.540942;-0.717085;-0.439512;, + 0.101895;0.086832;-0.990998;, + 0.337295;0.338140;-0.878575;, + 0.377825;0.471363;-0.796910;, + 0.286030;0.596080;-0.750251;, + -0.539378;-0.751535;0.379825;, + -0.656187;-0.682653;0.321563;, + -0.633584;-0.531484;-0.562225;, + -0.463515;-0.045918;-0.884898;, + 0.332399;0.215151;-0.918271;, + -0.619286;-0.540230;0.569769;, + -0.738557;-0.502344;0.449649;, + -0.861598;-0.504639;0.054676;, + -0.760975;-0.360032;-0.539716;, + -0.692487;-0.378085;0.614422;, + -0.912365;-0.331710;0.239912;, + -0.950079;-0.130659;0.283334;, + -0.981692;0.063040;0.179741;, + -0.634331;0.115343;-0.764408;, + 0.233204;0.019452;-0.972233;, + -0.733877;-0.227373;0.640099;, + -0.753466;0.009058;0.657425;, + -0.742946;0.207668;0.636322;, + -0.903737;0.306552;0.298807;, + -0.830819;0.409142;-0.377284;, + -0.098540;0.056661;-0.993519;, + -0.691913;0.378562;0.614774;, + -0.744099;0.497369;0.446028;, + -0.693535;0.579188;-0.428429;, + -0.165504;0.158028;-0.973466;, + 0.240545;-0.243510;-0.939596;, + 0.322956;-0.140880;-0.935870;, + -0.617455;0.531873;0.579535;, + -0.660046;0.691419;0.293732;, + -0.548583;0.706539;-0.447057;, + -0.162648;0.337161;-0.927291;, + -0.544000;0.795295;0.267526;, + -0.472098;0.875209;-0.105508;, + -0.366271;0.930497;0.004632;, + -0.236976;0.665138;-0.708120;, + 0.073931;-0.201080;-0.976781;, + 0.147437;-0.262887;-0.953495;, + -0.277509;0.957786;0.075070;, + -0.148269;0.636044;-0.757274;, + 0.047942;-0.259574;-0.964533;, + 0.184546;-0.580804;-0.792849;, + 0.264212;-0.481155;-0.835872;, + -0.190268;0.975376;0.111535;, + -0.101987;0.862716;-0.495298;, + 0.007947;0.538564;-0.842547;, + 0.004722;-0.478009;-0.878343;, + 0.053863;-0.673946;-0.736815;, + 0.133943;-0.656936;-0.741953;, + 0.008200;0.002138;-0.999964;, + -0.053168;-0.564279;-0.823870;, + -0.025961;-0.679772;-0.732964;, + 0.017593;-0.754569;-0.655985;, + 0.125962;-0.734505;-0.666810;, + 0.186752;-0.678639;-0.710333;, + -0.125312;-0.647830;-0.751408;, + -0.074233;-0.745957;-0.661844;, + -0.035335;-0.772486;-0.634048;, + 0.062646;-0.768380;-0.636921;, + 0.175634;-0.743600;-0.645145;, + 0.228969;-0.700091;-0.676348;, + -0.194503;-0.555927;-0.808154;, + -0.256530;-0.626992;-0.735577;, + -0.174520;-0.717648;-0.674183;, + -0.144194;-0.745795;-0.650383;, + -0.265131;-0.495849;-0.826946;, + -0.362544;-0.497290;-0.788204;, + -0.385750;-0.539830;-0.748185;, + -0.270576;-0.669717;-0.691569;, + -0.422100;-0.384221;-0.821100;, + -0.465452;-0.390900;-0.794073;, + -0.456409;-0.446496;-0.769631;, + -0.364993;-0.580818;-0.727620;, + -0.488360;-0.233361;-0.840861;, + -0.513193;-0.234135;-0.825720;, + -0.536607;-0.082349;-0.839804;, + -0.513772;-0.028109;-0.857466;, + -0.534611;0.092856;-0.839982;, + -0.500542;0.158146;-0.851145;, + -0.501571;0.280664;-0.818324;, + -0.437011;0.143133;-0.887994;, + -0.100809;0.759654;-0.642466;, + 0.005087;0.774979;-0.631967;, + 0.102245;0.757059;-0.645296;, + 0.239274;0.689736;-0.683383;, + 0.342831;0.591454;-0.729828;, + 0.309325;0.643919;-0.699776;, + 0.405686;0.513943;-0.755832;, + 0.451839;0.419728;-0.787191;, + 0.498594;0.341936;-0.796545;, + 0.517998;0.248452;-0.818505;, + 0.463385;0.290985;-0.837020;, + 0.525220;0.063803;-0.848571;, + 0.535899;0.124837;-0.835002;, + 0.540606;-0.054610;-0.839502;, + 0.522918;-0.151138;-0.838876;, + 0.436187;0.143883;-0.888278;, + 0.509307;-0.050996;-0.859073;, + 0.474411;-0.270117;-0.837837;, + 0.447677;-0.406765;-0.796321;, + 0.379666;-0.454263;-0.805915;, + 0.343157;-0.582286;-0.737011;, + 0.436869;-0.082768;-0.895709;, + 0.407543;-0.266409;-0.873461;, + 0.280521;-0.605379;-0.744865;, + 0.012051;-0.072663;0.997284;, + 0.012051;-0.072663;0.997284;, + 0.012051;-0.072663;0.997284;, + 0.131191;0.229478;0.964432;, + 0.131191;0.229478;0.964432;, + 0.131191;0.229478;0.964432;, + -0.864883;-0.498692;0.057304;, + -0.460859;-0.296614;-0.836438;, + -0.776499;-0.168926;-0.607053;, + -0.465641;-0.576497;-0.671439;, + -0.238898;-0.306559;-0.921385;, + -0.372097;-0.057582;-0.926406;, + -0.535646;-0.158883;-0.829361;, + -0.517780;0.059410;-0.853449;, + -0.403063;0.172896;-0.898692;, + -0.919914;0.385264;-0.073006;, + -0.677520;-0.618967;0.397298;, + -0.512285;-0.771107;-0.378099;, + -0.278329;-0.817462;-0.504271;, + -0.235556;-0.696367;-0.677928;, + -0.214160;-0.575186;-0.789491;, + -0.205788;-0.315662;-0.926288;, + -0.453356;-0.283968;0.844885;, + -0.506535;-0.531437;0.678967;, + -0.553002;-0.518151;0.652464;, + -0.717940;-0.550585;0.425932;, + -0.637035;-0.770397;-0.025962;, + -0.543563;-0.153547;0.825204;, + -0.685834;-0.404527;0.604970;, + -0.630571;-0.548673;0.548942;, + -0.642858;-0.744991;-0.178108;, + -0.590044;-0.804571;0.067178;, + -0.654930;-0.612414;0.442737;, + -0.745558;-0.106371;0.657897;, + -0.564405;0.076275;0.821966;, + -0.701310;-0.195809;0.685437;, + -0.822374;-0.447486;-0.351366;, + -0.699817;-0.575776;-0.422774;, + -0.432067;-0.484035;-0.760939;, + -0.367600;-0.542019;-0.755702;, + -0.522076;0.069040;0.850100;, + -0.996545;-0.063651;-0.053354;, + -0.845416;-0.270146;-0.460753;, + -0.445566;-0.193296;-0.874133;, + -0.354356;-0.245743;-0.902243;, + -0.411694;-0.363333;-0.835762;, + -0.661838;0.372337;0.650642;, + -0.890648;0.229759;0.392373;, + -0.922473;0.096359;-0.373843;, + -0.541115;0.054502;-0.839180;, + -0.458136;-0.075205;-0.885695;, + -0.147511;-0.045446;-0.988016;, + -0.482829;0.293347;0.825120;, + -0.630571;0.548674;0.548942;, + -0.719420;0.603205;-0.344353;, + -0.822870;0.450098;-0.346838;, + -0.812535;0.249576;-0.526781;, + -0.777757;0.627728;-0.032443;, + -0.630118;0.555801;0.542251;, + -0.521757;0.563392;0.640593;, + -0.642858;0.744991;-0.178106;, + -0.717825;0.037349;0.695221;, + -0.908062;-0.172048;0.381868;, + -0.068155;-0.065335;-0.995533;, + -0.238018;-0.273825;-0.931862;, + -0.142867;-0.254675;-0.956415;, + -0.261039;-0.551356;-0.792379;, + -0.434119;-0.776738;-0.456309;, + -0.548486;-0.830147;0.100098;, + 0.000310;0.007137;-0.999974;, + -0.135401;-0.358547;-0.923640;, + -0.220598;-0.664397;-0.714082;, + -0.332544;-0.763525;-0.553573;, + -0.474090;-0.877398;-0.073563;, + -0.734899;-0.637146;0.232310;, + -0.089521;-0.378582;-0.921228;, + -0.169828;-0.719119;-0.673815;, + -0.243189;-0.894220;-0.375805;, + -0.323817;-0.878497;-0.351263;, + 0.001411;-0.024853;-0.999690;, + -0.052761;-0.441717;-0.895602;, + -0.114029;-0.712939;-0.691893;, + -0.174500;-0.914368;-0.365350;, + -0.207210;-0.972480;-0.106518;, + -0.278750;-0.958103;-0.065862;, + 0.059469;0.248776;-0.966734;, + 0.021162;0.262942;-0.964580;, + 0.000935;-0.010484;-0.999945;, + -0.007056;-0.442802;-0.896592;, + -0.061726;-0.731457;-0.679088;, + -0.109171;-0.930433;-0.349824;, + 0.091902;0.207770;-0.973851;, + 0.133215;0.135276;-0.981812;, + -0.013980;0.261567;-0.965084;, + -0.035470;0.216604;-0.975615;, + -0.010957;-0.005291;-0.999926;, + 0.055273;-0.450365;-0.891132;, + 0.037506;-0.730087;-0.682325;, + -0.013221;-0.766335;-0.642305;, + -0.042810;-0.934816;-0.352543;, + -0.092190;0.254676;-0.962622;, + -0.115756;0.214963;-0.969738;, + 0.017417;-0.026289;-0.999503;, + 0.104319;-0.261432;-0.959568;, + 0.115385;-0.434488;-0.893256;, + 0.137799;-0.702731;-0.697983;, + 0.092174;-0.759309;-0.644170;, + -0.121489;0.118591;-0.985483;, + 0.027396;-0.025152;-0.999308;, + 0.217662;-0.263316;-0.939834;, + 0.204739;-0.396557;-0.894888;, + 0.235714;-0.623917;-0.745095;, + 0.198170;-0.710995;-0.674696;, + -0.141339;0.049172;-0.988739;, + 0.106937;-0.040557;-0.993438;, + 0.348624;-0.241458;-0.905626;, + 0.412484;-0.366324;-0.834065;, + 0.435498;-0.521088;-0.734036;, + 0.359838;-0.564113;-0.743164;, + 0.324861;-0.657086;-0.680222;, + 0.016623;0.035513;-0.999231;, + 0.190898;0.042343;-0.980696;, + 0.300979;-0.035361;-0.952975;, + 0.433804;-0.176824;-0.883486;, + 0.819948;-0.447393;-0.357105;, + 0.699315;-0.576147;-0.423100;, + -0.190620;0.005706;-0.981647;, + -0.119488;-0.058441;-0.991114;, + 0.026402;0.022773;-0.999392;, + 0.348106;0.241537;-0.905805;, + 0.404308;0.175346;-0.897658;, + 0.459579;0.074193;-0.885032;, + 0.541115;-0.054502;-0.839180;, + 0.812534;-0.249574;-0.526785;, + -0.119202;-0.113731;-0.986335;, + 0.016691;0.023492;-0.999585;, + 0.220707;0.263372;-0.939108;, + 0.412485;0.366327;-0.834063;, + 0.699314;0.576146;-0.423102;, + 0.822374;0.447486;-0.351365;, + 0.845417;0.270146;-0.460751;, + -0.108911;-0.197300;-0.974275;, + -0.003536;0.030862;-0.999517;, + 0.102851;0.255499;-0.961323;, + 0.206066;0.398519;-0.893711;, + 0.359601;0.569034;-0.739518;, + 0.435498;0.521088;-0.734036;, + -0.076990;-0.230398;-0.970046;, + -0.002356;0.009358;-0.999953;, + 0.058657;0.421881;-0.904752;, + 0.114903;0.418526;-0.900907;, + 0.206206;0.537472;-0.817681;, + 0.326310;0.720659;-0.611696;, + -0.043622;-0.279604;-0.959124;, + -0.003345;-0.067374;-0.997722;, + 0.006428;0.347999;-0.937473;, + 0.048016;0.678727;-0.732820;, + 0.104912;0.728309;-0.677170;, + 0.154062;0.690978;-0.706268;, + 0.227128;0.711025;-0.665474;, + -0.011885;-0.302200;-0.953171;, + 0.025501;-0.268244;-0.963013;, + 0.036151;-0.220633;-0.974687;, + 0.059294;-0.251954;-0.965921;, + -0.008187;0.022037;-0.999724;, + -0.202739;-0.066111;-0.976999;, + -0.222353;0.116733;-0.967953;, + -0.255394;0.318524;-0.912862;, + -0.478795;0.387139;-0.787958;, + -0.411646;0.575770;-0.706425;, + -0.550788;0.749947;-0.366349;, + -0.237153;0.692654;-0.681168;, + -0.278329;0.817462;-0.504271;, + -0.314660;0.884612;-0.344166;, + -0.429781;0.856736;-0.285117;, + -0.635461;0.771684;0.026341;, + -0.208569;0.471845;-0.856657;, + -0.206400;0.838490;-0.504314;, + -0.203758;0.927198;-0.314302;, + -0.285793;0.946366;-0.150712;, + -0.528277;0.847703;-0.048190;, + -0.754344;0.632166;0.177006;, + -0.731525;0.538568;0.418110;, + -0.210090;0.794732;-0.569442;, + -0.174923;0.961358;-0.212585;, + -0.197524;0.979362;-0.042829;, + -0.359322;0.931765;0.051968;, + -0.691172;0.713625;0.114106;, + -0.743010;0.627777;0.232019;, + -0.239206;0.514356;-0.823540;, + -0.208929;0.884421;-0.417310;, + -0.170637;0.978925;-0.112202;, + -0.149745;0.988709;0.005489;, + -0.181407;0.980730;0.072525;, + -0.284486;0.950664;0.123717;, + -0.516624;0.845528;0.134839;, + -0.246942;0.839285;-0.484377;, + -0.252081;0.935529;-0.247469;, + -0.163175;0.986462;0.016311;, + -0.133089;0.989630;0.054028;, + -0.126954;0.987174;0.096796;, + -0.177166;0.977719;0.112593;, + -0.325114;0.570987;-0.753840;, + -0.400869;0.801561;-0.443626;, + -0.245870;0.968414;-0.041497;, + -0.310625;0.942677;0.121949;, + -0.146320;0.985331;0.087830;, + -0.137899;0.983955;0.113211;, + -0.163199;0.979180;0.120719;, + -0.264679;0.954464;0.137635;, + -0.446841;0.890413;-0.086589;, + -0.745393;0.641001;0.183049;, + -0.697413;0.608682;0.378315;, + -0.399698;0.878926;0.260250;, + -0.212848;0.966098;0.146118;, + -0.603863;0.555595;-0.571545;, + -0.796548;0.559816;-0.228293;, + -0.995919;-0.000001;-0.090257;, + -0.942436;-0.000003;0.334385;, + -0.861925;-0.000002;0.507036;, + -0.703362;0.534213;0.468933;, + -0.762031;0.001122;-0.647539;, + -0.796548;-0.559816;-0.228293;, + -0.745391;-0.641003;0.183049;, + -0.697411;-0.608685;0.378313;, + -0.702866;-0.534632;0.469200;, + -0.825762;-0.060233;0.560793;, + -0.719098;0.467446;0.514191;, + -0.590586;-0.496960;-0.635798;, + -0.446840;-0.890413;-0.086589;, + -0.310625;-0.942677;0.121949;, + -0.397338;-0.880538;0.258410;, + -0.686299;-0.528545;0.499634;, + -0.750233;0.336804;0.568958;, + -0.381795;0.878930;0.285858;, + -0.382626;-0.849976;-0.362130;, + -0.245870;-0.968414;-0.041497;, + -0.163174;-0.986462;0.016311;, + -0.146320;-0.985331;0.087830;, + -0.212848;-0.966098;0.146119;, + -0.352375;-0.896641;0.268081;, + -0.354832;-0.466599;-0.810172;, + -0.254907;-0.932123;-0.257232;, + -0.170637;-0.978925;-0.112201;, + -0.133089;-0.989630;0.054029;, + -0.126954;-0.987174;0.096796;, + -0.137899;-0.983955;0.113211;, + -0.203640;-0.965558;0.161954;, + -0.261086;-0.783631;-0.563699;, + -0.207824;-0.890167;-0.405478;, + -0.174923;-0.961358;-0.212584;, + -0.149745;-0.988709;0.005489;, + -0.181407;-0.980730;0.072525;, + -0.246114;-0.283275;-0.926922;, + -0.232273;-0.603608;-0.762697;, + -0.213639;-0.750058;-0.625916;, + -0.206396;-0.845794;-0.491969;, + -0.203758;-0.927198;-0.314302;, + -0.197524;-0.979362;-0.042829;, + -0.285793;-0.946366;-0.150712;, + -0.359322;-0.931765;0.051968;, + -0.284486;-0.950664;0.123717;, + -0.177166;-0.977719;0.112593;, + -0.314660;-0.884613;-0.344166;, + -0.429780;-0.856736;-0.285117;, + -0.528276;-0.847704;-0.048191;, + -0.691171;-0.713626;0.114106;, + -0.516624;-0.845528;0.134839;, + -0.754360;-0.631790;0.178276;, + -0.752340;-0.635453;0.173734;, + -0.716054;-0.679560;0.159578;, + -0.507132;-0.846164;0.163780;, + -0.507985;-0.478783;0.716043;, + -0.349050;-0.019629;0.936899;, + -0.834828;-0.121445;0.536948;, + -0.527501;-0.738592;0.419791;, + -0.263525;-0.946923;0.184097;, + -0.608498;-0.756898;0.238402;, + -0.251457;-0.190299;0.948976;, + 0.504242;0.389862;0.770550;, + 0.021237;-0.009412;0.999730;, + -0.680600;-0.284918;0.674986;, + -0.466226;-0.754698;0.461589;, + -0.295438;-0.919133;0.260598;, + -0.146673;-0.980359;0.131842;, + -0.163207;-0.979170;0.120787;, + -0.445378;-0.876347;0.183452;, + -0.654769;0.443648;0.611926;, + -0.610924;0.510359;0.605232;, + -0.639748;-0.422224;0.642223;, + -0.691284;-0.358579;0.627333;, + -0.745179;0.520325;0.417097;, + -0.319192;0.903391;0.286358;, + -0.237420;0.946437;0.218837;, + -0.549370;0.696926;0.460963;, + -0.914833;0.113830;0.387457;, + 0.475331;0.032425;-0.879210;, + 0.547355;0.214420;-0.808966;, + 0.398903;0.060698;-0.914982;, + 0.521077;-0.104939;-0.847034;, + 0.418401;-0.195485;-0.886976;, + 0.850871;-0.514121;-0.108159;, + 0.429801;-0.394114;-0.812370;, + 0.461830;-0.581779;-0.669512;, + 0.677522;-0.618966;0.397297;, + 0.453357;-0.283968;0.844885;, + 0.539046;-0.152804;0.828299;, + 0.745559;-0.106371;0.657896;, + 0.563026;0.082946;0.822266;, + 0.717825;0.037349;0.695221;, + 0.256425;-0.315216;-0.913721;, + 0.237153;-0.692654;-0.681167;, + 0.278328;-0.817463;-0.504270;, + 0.512285;-0.771107;-0.378098;, + 0.208036;-0.470178;-0.857703;, + 0.206400;-0.838491;-0.504314;, + 0.203758;-0.927199;-0.314302;, + 0.285793;-0.946366;-0.150711;, + 0.314660;-0.884613;-0.344164;, + 0.429781;-0.856737;-0.285116;, + 0.637036;-0.770397;-0.025961;, + 0.210090;-0.794732;-0.569442;, + 0.174923;-0.961358;-0.212585;, + 0.197524;-0.979362;-0.042829;, + 0.359322;-0.931765;0.051968;, + 0.528277;-0.847703;-0.048190;, + 0.239206;-0.514356;-0.823540;, + 0.208928;-0.884422;-0.417310;, + 0.170637;-0.978925;-0.112202;, + 0.149745;-0.988709;0.005489;, + 0.181407;-0.980730;0.072525;, + 0.246942;-0.839285;-0.484377;, + 0.255698;-0.933786;-0.250324;, + 0.170568;-0.985242;0.014327;, + 0.133089;-0.989630;0.054028;, + 0.325114;-0.570986;-0.753841;, + 0.419230;-0.754156;-0.505465;, + 0.401439;-0.912289;-0.081091;, + 0.317886;-0.939206;0.129773;, + 0.146320;-0.985331;0.087830;, + 0.126954;-0.987174;0.096796;, + 0.177166;-0.977719;0.112593;, + 0.284486;-0.950664;0.123717;, + 0.602179;-0.560948;-0.568083;, + 0.792144;-0.566524;-0.227064;, + 0.743660;-0.643072;0.182834;, + 0.697411;-0.608685;0.378313;, + 0.399697;-0.878927;0.260249;, + 0.212848;-0.966098;0.146118;, + 0.762031;-0.001121;-0.647539;, + 0.995918;0.000000;-0.090258;, + 0.942437;0.000000;0.334385;, + 0.861925;0.000000;0.507036;, + 0.703361;-0.534215;0.468932;, + 0.719097;-0.467449;0.514190;, + 0.381795;-0.878930;0.285857;, + 0.796547;0.559816;-0.228293;, + 0.745392;0.641002;0.183049;, + 0.697411;0.608684;0.378313;, + 0.702866;0.534631;0.469200;, + 0.825763;0.060231;0.560792;, + 0.590586;0.496960;-0.635798;, + 0.446840;0.890413;-0.086589;, + 0.310625;0.942677;0.121949;, + 0.397338;0.880538;0.258410;, + 0.686300;0.528542;0.499635;, + 0.750233;-0.336806;0.568957;, + 0.382626;0.849976;-0.362130;, + 0.245870;0.968414;-0.041497;, + 0.163175;0.986462;0.016311;, + 0.146320;0.985331;0.087830;, + 0.212847;0.966098;0.146118;, + 0.352374;0.896641;0.268081;, + 0.694552;0.457079;0.555586;, + 0.254907;0.932123;-0.257232;, + 0.170637;0.978925;-0.112202;, + 0.133089;0.989630;0.054028;, + 0.126954;0.987174;0.096796;, + 0.137899;0.983955;0.113211;, + 0.203640;0.965558;0.161953;, + 0.354832;0.466599;-0.810172;, + 0.261085;0.783631;-0.563699;, + 0.207824;0.890167;-0.405478;, + 0.174923;0.961358;-0.212585;, + 0.149745;0.988709;0.005489;, + 0.181407;0.980730;0.072525;, + 0.246114;0.283275;-0.926922;, + 0.232273;0.603608;-0.762697;, + 0.213639;0.750058;-0.625916;, + 0.206396;0.845794;-0.491969;, + 0.203758;0.927199;-0.314302;, + 0.197524;0.979362;-0.042829;, + 0.205842;0.316189;-0.926096;, + 0.214160;0.575187;-0.789491;, + 0.235556;0.696368;-0.677927;, + 0.278328;0.817463;-0.504270;, + 0.285793;0.946366;-0.150711;, + 0.359322;0.931765;0.051968;, + 0.238082;0.307659;-0.921229;, + 0.412954;0.568583;-0.711465;, + 0.550787;0.749949;-0.366347;, + 0.314660;0.884613;-0.344164;, + 0.429780;0.856737;-0.285116;, + 0.528277;0.847704;-0.048190;, + 0.493790;0.336511;-0.801830;, + 0.777756;0.626983;-0.044589;, + 0.630118;0.555801;0.542251;, + 0.635461;0.771684;0.026341;, + 0.753016;0.297809;-0.586751;, + 0.671627;0.249533;0.697603;, + 0.754344;0.632166;0.177006;, + 0.691172;0.713625;0.114106;, + 0.516625;0.845528;0.134839;, + 0.284486;0.950664;0.123717;, + 0.731525;0.538568;0.418111;, + 0.743010;0.627777;0.232019;, + 0.753616;0.633951;0.173691;, + 0.716055;0.679559;0.159578;, + 0.507133;0.846164;0.163780;, + 0.579335;0.613225;0.536960;, + 0.718341;0.582773;0.379951;, + 0.566157;0.804663;0.178843;, + 0.474892;0.877662;-0.064710;, + 0.566055;0.809472;0.156006;, + 0.521758;0.563391;0.640593;, + 0.547374;0.718181;0.429647;, + 0.576943;0.816007;-0.035623;, + 0.482829;0.293346;0.825121;, + 0.630572;0.548674;0.548940;, + 0.659560;0.747641;-0.077548;, + 0.754360;-0.631790;0.178276;, + 0.717941;-0.550585;0.425931;, + 0.553004;-0.518149;0.652463;, + 0.506536;-0.531436;0.678968;, + 0.691175;-0.713623;0.114106;, + 0.734899;-0.637147;0.232310;, + 0.654931;-0.612413;0.442737;, + 0.589121;-0.807828;-0.018713;, + 0.659559;-0.747642;-0.077546;, + 0.630571;-0.548673;0.548943;, + 0.516625;-0.845528;0.134839;, + 0.716058;-0.679555;0.159579;, + 0.737748;-0.651854;0.175539;, + 0.553089;-0.818714;0.154271;, + 0.481631;-0.876346;-0.006974;, + 0.548316;-0.825601;0.133163;, + 0.507132;-0.846164;0.163780;, + 0.742989;-0.639902;0.196198;, + 0.726333;-0.658296;0.197702;, + 0.536031;-0.824783;0.180012;, + 0.367310;-0.917643;0.151704;, + 0.385421;-0.915908;0.112081;, + 0.262761;-0.955038;0.137330;, + 0.506226;-0.843325;0.180386;, + 0.739818;-0.639231;0.209888;, + 0.727961;-0.652641;0.210077;, + 0.473056;-0.861187;0.185944;, + 0.314283;-0.935591;0.160923;, + 0.159380;-0.979912;0.119880;, + 0.296403;-0.941465;0.160586;, + 0.645500;-0.733483;0.212914;, + 0.531911;-0.821534;0.205312;, + 0.271800;-0.947797;0.166751;, + 0.137899;-0.983955;0.113211;, + 0.145391;-0.980727;0.130519;, + 0.145196;-0.979662;0.138494;, + 0.381328;-0.877634;0.290427;, + 0.593189;-0.769701;0.235981;, + 0.601653;-0.761725;0.240394;, + 0.213619;-0.961735;0.171557;, + 0.244396;-0.942836;0.226564;, + 0.554971;-0.613488;0.561818;, + 0.651607;-0.411840;0.637022;, + 0.835085;-0.212394;0.507465;, + 0.110411;-0.221639;0.968858;, + 0.571910;-0.666901;0.477662;, + 0.660535;-0.418318;0.623461;, + 0.622425;0.466631;0.628365;, + 0.694521;0.310079;0.649224;, + 0.759762;0.486346;0.431543;, + 0.789115;0.115872;0.603217;, + 0.692785;0.370337;0.618788;, + 0.292538;0.920340;0.259609;, + 0.343495;0.883053;0.319732;, + 0.410714;0.879107;0.241835;, + 0.288806;0.322408;0.901468;, + 0.146673;0.980360;0.131841;, + 0.180874;0.971521;0.153072;, + 0.392211;0.903029;0.175243;, + 0.635548;0.740024;0.220098;, + 0.163207;0.979170;0.120787;, + 0.264679;0.954464;0.137635;, + 0.524437;0.831781;0.181953;, + 0.708216;0.674223;0.209414;, + 0.659005;0.719997;0.217525;, + 0.505680;0.830894;0.232170;, + 0.177166;0.977719;0.112593;, + 0.736331;0.647769;0.195479;, + 0.642157;0.740048;0.199907;, + 0.649591;0.736556;0.188462;, + 0.434346;0.885667;0.164128;, + 0.444438;0.879468;0.170325;, + 0.584106;0.787523;0.196539;, + 0.507482;0.833284;0.219315;, + 0.417951;0.900648;0.118954;, + 0.324542;0.935932;0.136763;, + 0.323983;0.933386;0.154356;, + 0.326789;0.932800;0.151967;, + 0.402704;0.901490;0.158572;, + 0.517498;0.839240;0.166949;, + 0.383357;0.923104;-0.030254;, + 0.319661;0.945182;0.066699;, + 0.315361;0.944809;0.088788;, + 0.301299;0.943106;0.140603;, + 0.335906;0.928737;0.156892;, + 0.331180;0.874079;-0.355395;, + 0.320902;0.943517;-0.082444;, + 0.275125;0.915642;-0.293099;, + 0.404462;0.914389;0.017394;, + 0.381004;0.914937;0.133139;, + 0.459323;0.813781;-0.356066;, + 0.684001;0.402336;0.608496;, + 0.753676;0.222759;0.618345;, + 0.996545;0.063651;-0.053350;, + 0.495870;-0.061136;0.866242;, + 0.890648;-0.229759;0.392373;, + 0.922474;-0.096359;-0.373840;, + 0.915386;0.371861;0.154235;, + 0.663752;-0.374099;0.647676;, + 0.156599;0.621157;-0.767880;, + 0.342850;0.712007;-0.612781;, + 0.583296;0.800552;-0.137412;, + 0.537772;0.834495;0.120078;, + 0.045738;0.511038;-0.858341;, + 0.079977;-0.096400;-0.992124;, + 0.397198;0.247326;-0.883778;, + 0.758135;0.353921;-0.547696;, + 0.724080;0.689704;0.003992;, + 0.005364;0.734860;-0.678198;, + -0.016517;0.407490;-0.913060;, + 0.001547;-0.358892;-0.933378;, + 0.153230;-0.376753;-0.913552;, + -0.049679;0.628431;-0.776277;, + -0.068416;0.504438;-0.860733;, + -0.062212;-0.181106;-0.981494;, + -0.018109;-0.542391;-0.839931;, + -0.001842;-0.580698;-0.814117;, + -0.039646;0.328747;-0.943585;, + -0.114093;0.673851;-0.730005;, + -0.166420;0.619373;-0.767256;, + -0.341295;0.709371;-0.616693;, + -0.422115;0.240369;-0.874095;, + -0.241585;-0.336325;-0.910232;, + -0.069468;0.326531;-0.942630;, + -0.186591;0.708480;-0.680617;, + -0.278809;0.912770;-0.298524;, + -0.404462;0.914389;0.017394;, + -0.583296;0.800552;-0.137412;, + -0.762571;0.370003;-0.530645;, + -0.158159;0.480588;-0.862567;, + -0.298673;0.762202;-0.574320;, + -0.337458;0.889565;-0.307891;, + -0.320903;0.943517;-0.082444;, + -0.319661;0.945181;0.066699;, + -0.315361;0.944809;0.088788;, + -0.131869;0.331182;-0.934307;, + -0.256351;0.548163;-0.796117;, + -0.433038;0.779101;-0.453298;, + -0.474772;0.877123;-0.072431;, + -0.383358;0.923104;-0.030254;, + -0.145502;0.260322;-0.954495;, + -0.367599;0.542018;-0.755703;, + -0.577339;0.815146;0.047090;, + -0.567205;0.809497;0.151636;, + 0.047359;-0.036089;-0.998226;, + -0.223089;0.262634;-0.938752;, + -0.431329;0.480030;-0.763889;, + -0.547373;0.718182;0.429647;, + -0.579335;0.613225;0.536960;, + -0.144253;0.105830;-0.983865;, + -0.413331;0.324863;-0.850660;, + -0.414720;0.181110;-0.891743;, + -0.090790;0.034708;-0.995265;, + -0.296202;0.034140;-0.954515;, + -0.718341;0.582773;0.379950;, + -0.566055;0.809472;0.156006;, + -0.417952;0.900648;0.118954;, + -0.324542;0.935932;0.136763;, + -0.301299;0.943106;0.140603;, + -0.381004;0.914937;0.133140;, + -0.537772;0.834495;0.120078;, + -0.434346;0.885667;0.164128;, + -0.323983;0.933386;0.154356;, + -0.340460;0.926866;0.158136;, + -0.472911;0.864664;0.169444;, + -0.649591;0.736556;0.188462;, + -0.642157;0.740048;0.199907;, + -0.444437;0.879469;0.170325;, + -0.327600;0.932509;0.152001;, + -0.279014;0.945560;0.167536;, + -0.400713;0.894529;0.198106;, + -0.753616;0.633951;0.173691;, + -0.736331;0.647769;0.195480;, + -0.708216;0.674223;0.209414;, + -0.661304;0.718026;0.217064;, + -0.585073;0.786792;0.196593;, + -0.716055;0.679559;0.159578;, + -0.507132;0.846164;0.163780;, + -0.524436;0.831781;0.181953;, + -0.400660;0.898960;0.177036;, + -0.668240;0.708668;0.226374;, + -0.188031;0.970297;0.152209;, + -0.427254;0.871404;0.241057;, + -0.462186;0.492844;0.737217;, + -0.461673;0.799266;0.384748;, + -0.557700;0.799086;0.224570;, + -0.145391;0.980727;0.130519;, + -0.342206;0.118175;0.932164;, + -0.213620;0.961735;0.171557;, + -0.699331;-0.443162;0.560842;, + -0.264679;-0.954464;0.137635;, + -0.524437;-0.831781;0.181953;, + -0.696029;-0.687304;0.207742;, + -0.615188;-0.756964;0.220337;, + -0.732128;-0.652557;0.195342;, + -0.676390;-0.706798;0.207201;, + -0.400989;-0.896736;0.187279;, + -0.258384;-0.947823;0.186732;, + -0.449909;-0.834836;0.317224;, + -0.612905;-0.767757;0.186805;, + -0.376797;-0.910463;0.170534;, + -0.222989;-0.961365;0.161411;, + -0.118000;-0.979130;0.165469;, + -0.052970;-0.964208;0.259800;, + -0.065181;-0.266504;0.961627;, + -0.558651;-0.814721;0.155366;, + -0.386881;-0.908691;0.156854;, + -0.243375;-0.958408;0.149076;, + -0.161217;-0.976394;0.143750;, + -0.098191;-0.983580;0.151422;, + 0.016285;-0.987192;0.158702;, + -0.413587;-0.902834;0.117632;, + -0.300444;-0.944353;0.133910;, + -0.213213;-0.968528;0.128426;, + -0.133003;-0.983123;0.125619;, + -0.083306;-0.986625;0.140108;, + 0.017026;-0.989311;0.144822;, + -0.368705;-0.928745;-0.038587;, + -0.331421;-0.940392;0.076312;, + -0.270700;-0.958796;0.086203;, + -0.198849;-0.977311;0.072948;, + -0.102692;-0.989074;0.105772;, + -0.033839;-0.990757;0.131360;, + -0.136995;-0.989555;-0.044870;, + -0.066343;-0.995909;0.061353;, + -0.001776;-0.994987;0.099987;, + 0.046812;-0.991590;0.120658;, + 0.072866;-0.988414;0.133144;, + -0.068966;-0.993277;-0.092978;, + -0.011711;-0.998448;-0.054455;, + 0.052861;-0.997439;-0.048180;, + 0.098008;-0.992505;0.073000;, + 0.139100;-0.984529;0.106552;, + 0.016225;-0.938154;-0.345837;, + 0.080007;-0.932086;-0.353291;, + 0.121706;-0.988519;-0.089547;, + 0.188492;-0.981362;-0.037421;, + 0.253303;-0.964137;0.079231;, + 0.176931;-0.975853;0.128084;, + 0.146814;-0.921670;-0.359123;, + 0.213783;-0.904466;-0.369104;, + 0.270644;-0.958041;-0.094393;, + 0.349465;-0.935086;-0.059065;, + 0.276427;-0.953031;0.123777;, + 0.286735;-0.877677;-0.384015;, + 0.356534;-0.835094;-0.418929;, + 0.452654;-0.808504;-0.376067;, + 0.256983;-0.955812;0.142767;, + 0.197914;-0.969064;0.147463;, + 0.117883;-0.982916;0.141351;, + 0.133765;-0.979122;0.153060;, + 0.148117;-0.974438;0.168911;, + 0.241249;-0.914812;0.323910;, + 0.063449;-0.877838;0.474737;, + 0.318447;-0.929040;0.188352;, + 0.550588;-0.666586;0.502509;, + -0.102003;0.165367;0.980943;, + -0.568464;0.573471;0.589898;, + -0.326295;0.808491;0.489769;, + -0.090414;0.799091;0.594372;, + -0.020978;0.601556;0.798555;, + 0.090523;0.719178;0.688904;, + -0.703389;0.177502;0.688286;, + -0.849182;0.242927;0.468910;, + -0.564388;0.777104;0.278522;, + -0.210045;0.920175;0.330392;, + 0.048910;0.938884;0.340740;, + -0.723902;-0.171389;0.668276;, + -0.793070;-0.471669;0.385445;, + -0.957677;0.130944;0.256338;, + -0.837822;0.532650;0.119738;, + -0.389620;0.916578;0.089893;, + -0.162233;0.972491;0.167156;, + -0.532852;-0.574378;0.621417;, + -0.465366;-0.791343;0.396499;, + -0.556730;-0.803601;0.210421;, + -0.840707;-0.489119;0.232323;, + -0.918798;-0.368198;0.142265;, + -0.300676;-0.646017;0.701609;, + -0.187913;-0.920131;0.343581;, + -0.249947;-0.955001;0.159689;, + -0.487732;-0.867890;0.094261;, + 0.052538;0.086974;0.994824;, + -0.100199;-0.792896;0.601063;, + 0.067812;-0.886373;0.457978;, + 0.012307;-0.978034;0.208083;, + -0.053358;-0.995320;0.080564;, + 0.457441;0.770156;0.444530;, + 0.249290;0.890990;0.379461;, + 0.045251;0.521835;0.851845;, + 0.009893;-0.692711;0.721148;, + 0.049803;0.963258;0.263920;, + -0.128592;0.856725;0.499486;, + 0.064087;-0.207273;0.976182;, + 0.353291;-0.781507;0.514230;, + 0.268954;-0.933623;0.236669;, + 0.124854;0.968933;0.213495;, + -0.042449;0.984588;0.169662;, + 0.089409;0.982869;0.161167;, + -0.042334;0.970048;0.239198;, + 0.350785;0.900861;0.255733;, + 0.199641;0.942495;0.268041;, + 0.054384;0.962474;0.265870;, + -0.013683;0.966485;0.256357;, + -0.115605;0.971005;0.209248;, + 0.474726;0.846872;0.239674;, + 0.512249;0.827812;0.228755;, + 0.549496;0.810173;0.204139;, + -0.089951;0.961754;0.258722;, + -0.198634;0.942954;0.267175;, + -0.349873;0.900997;0.256500;, + -0.505177;0.834546;0.219838;, + -0.549497;0.810173;0.204139;, + -0.509912;0.828951;0.229846;, + -0.474726;0.846872;0.239674;, + 0.438871;-0.472347;0.764382;, + 0.567348;-0.680430;0.463822;, + 0.326189;-0.940752;0.092668;, + 0.305944;-0.951310;0.037529;, + -0.147011;-0.988750;0.027574;, + -0.327443;-0.944221;0.035023;, + -0.593735;-0.803563;0.042006;, + 0.653568;-0.719743;0.234133;, + 0.799271;-0.594976;0.084672;, + 0.722869;-0.690428;0.027737;, + 0.818653;-0.365560;0.442914;, + 0.747801;-0.576489;0.329322;, + 0.952764;-0.168095;0.252954;, + 0.937580;0.331077;0.106452;, + 0.994852;-0.093209;0.039772;, + 0.973443;0.227778;0.022921;, + 0.689928;-0.172676;0.702981;, + 0.816448;0.395864;0.420363;, + 0.220754;-0.110369;0.969065;, + -0.777362;-0.628699;0.021095;, + -0.998848;0.001114;0.047974;, + -0.525203;0.850428;0.030558;, + -0.080943;0.994754;0.062554;, + -0.870749;0.491084;0.025132;, + -0.240070;0.970613;0.016623;, + -0.027911;0.999427;0.019127;, + 0.283563;0.957587;0.051187;, + 0.205524;0.963487;0.171616;, + 0.328598;0.861618;0.386831;, + 0.380096;0.924748;0.019198;, + 0.751205;0.658935;0.038673;, + 0.586203;0.806710;0.074736;, + 0.603169;0.784370;0.144744;, + 0.542589;0.790763;0.283357;, + 0.548062;0.698726;0.459794;, + 0.284317;0.614810;0.735644;, + 0.872091;0.447986;0.196890;, + 0.233914;0.046203;0.971159;, + -0.509811;0.845072;0.161079;, + -0.402704;0.901490;0.158572;, + -0.337400;0.931144;0.138320;, + -0.264768;0.954494;0.137252;, + -0.240707;0.960898;0.136879;, + -0.228654;0.963831;0.136923;, + -0.188087;0.969891;0.154707;, + -0.042655;0.977809;0.205109;, + -0.097618;0.964736;0.244450;, + -0.324845;0.912041;0.250315;, + -0.498087;0.843012;0.203076;, + -0.110554;0.978838;0.172206;, + 0.000023;0.985519;0.169568;, + 0.112112;0.978803;0.171395;, + 0.222462;0.956896;0.186713;, + 0.172981;0.957347;0.231438;, + 0.294968;0.922691;0.248266;, + -0.004356;0.958355;0.285545;, + -0.282139;0.916798;0.282628;, + -0.490576;0.840041;0.231662;, + 0.175731;0.971613;0.158389;, + 0.228230;0.962057;0.149527;, + 0.254657;0.956689;0.141050;, + 0.302088;0.940182;0.157480;, + 0.387427;0.901148;0.194505;, + 0.498087;0.843012;0.203076;, + 0.490575;0.840041;0.231662;, + 0.282139;0.916798;0.282628;, + 0.000001;0.948244;0.317544;, + 0.265335;0.954758;0.134291;, + 0.472911;0.864664;0.169444;, + 0.587667;0.788487;0.181481;, + 0.609342;0.765839;0.205411;, + 0.507271;0.823913;0.252674;, + 0.341298;0.930209;0.135007;, + 0.685793;0.713269;0.144693;, + 0.698432;0.690837;0.186913;, + 0.653818;0.726527;0.211378;, + 0.590955;0.765190;0.255454;, + 0.293057;0.902832;0.314662;, + 0.779834;0.612632;0.128611;, + 0.754671;0.637219;0.156280;, + 0.738044;0.646344;0.193728;, + 0.856733;0.513844;-0.044417;, + 0.818271;0.567297;0.092776;, + 0.882770;0.285573;-0.373047;, + 0.893335;0.347472;-0.284984;, + 0.717475;0.686689;0.116993;, + 0.490944;0.839892;0.231422;, + 0.659091;-0.133680;-0.740087;, + 0.590454;-0.198966;-0.782162;, + 0.574235;-0.025996;-0.818278;, + 0.760182;0.446733;-0.471754;, + 0.427805;0.902789;-0.044208;, + 0.253973;0.937428;0.238172;, + 0.178837;-0.503445;-0.845317;, + 0.087824;-0.498960;-0.862164;, + 0.145553;-0.264316;-0.953389;, + 0.310974;0.485504;-0.817056;, + -0.142147;0.965096;-0.219965;, + 0.015548;0.967137;0.253781;, + -0.016174;-0.562121;-0.826897;, + -0.152105;-0.490187;-0.858243;, + -0.505725;-0.039453;-0.861792;, + -0.382174;0.388604;-0.838409;, + -0.578403;0.813837;-0.055849;, + -0.282624;0.934442;0.216662;, + -0.293038;-0.455519;-0.840614;, + -0.683861;-0.090668;-0.723957;, + -0.889755;0.349542;-0.293523;, + -0.794484;0.476393;-0.376622;, + -0.723803;0.679556;0.119635;, + -0.493207;0.839153;0.229281;, + -0.677504;-0.118071;-0.725980;, + -0.882770;0.285574;-0.373047;, + -0.856733;0.513844;-0.044417;, + -0.818271;0.567297;0.092776;, + -0.724080;0.689704;0.003992;, + -0.779834;0.612632;0.128611;, + -0.738044;0.646344;0.193728;, + -0.590956;0.765189;0.255454;, + -0.293056;0.902832;0.314662;, + -0.685793;0.713269;0.144693;, + -0.754671;0.637219;0.156281;, + -0.698432;0.690838;0.186913;, + -0.653817;0.726527;0.211378;, + -0.507271;0.823913;0.252674;, + -0.587667;0.788487;0.181481;, + -0.609342;0.765839;0.205412;, + 0.429801;-0.394114;-0.812370;, + 0.418401;-0.195485;-0.886976;, + 0.256425;-0.315216;-0.913721;, + 0.216524;-0.094261;-0.971716;, + 0.208036;-0.470178;-0.857703;, + 0.196674;-0.154993;-0.968141;, + 0.239206;-0.514356;-0.823540;, + 0.253179;-0.084477;-0.963724;, + 0.325114;-0.570986;-0.753841;, + 0.398903;0.060698;-0.914982;, + 0.205828;0.095254;-0.973941;, + 0.194387;0.042738;-0.979994;, + 0.246114;0.283275;-0.926922;, + 0.354832;0.466599;-0.810172;, + 0.420814;-0.159731;-0.892973;, + 0.419230;-0.754156;-0.505465;, + 0.602179;-0.560948;-0.568083;, + 0.238082;0.307659;-0.921229;, + 0.205842;0.316189;-0.926096;, + 0.493790;0.336511;-0.801830;, + 0.762031;-0.001121;-0.647539;, + 0.590586;0.496960;-0.635798;, + 0.382626;0.849976;-0.362130;, + -0.238898;-0.306559;-0.921385;, + -0.205788;-0.315662;-0.926288;, + -0.202739;-0.066111;-0.976999;, + -0.195800;-0.049603;-0.979389;, + -0.193687;0.131608;-0.972196;, + -0.222353;0.116733;-0.967953;, + -0.208569;0.471845;-0.856657;, + -0.255394;0.318524;-0.912862;, + -0.246114;-0.283275;-0.926922;, + -0.253179;0.084477;-0.963724;, + -0.239206;0.514356;-0.823540;, + -0.354832;-0.466599;-0.810172;, + -0.420814;0.159732;-0.892973;, + -0.325114;0.570987;-0.753840;, + -0.590586;-0.496960;-0.635798;, + -0.762031;0.001122;-0.647539;, + -0.603863;0.555595;-0.571545;, + -0.400869;0.801561;-0.443626;; + 2980; + 3;0,1,2;, + 3;2,3,4;, + 3;5,6,7;, + 3;8,9,10;, + 3;11,12,13;, + 3;14,15,16;, + 3;14,17,15;, + 3;18,15,17;, + 3;19,15,18;, + 3;14,20,17;, + 3;21,17,20;, + 3;21,22,17;, + 3;22,23,17;, + 3;18,17,23;, + 3;24,18,23;, + 3;25,18,24;, + 3;26,20,14;, + 3;26,27,20;, + 3;28,20,27;, + 3;28,21,20;, + 3;26,14,29;, + 3;30,28,27;, + 3;30,27,31;, + 3;32,30,31;, + 3;32,31,33;, + 3;34,32,33;, + 3;34,33,35;, + 3;36,34,35;, + 3;37,31,27;, + 3;38,31,37;, + 3;38,33,31;, + 3;39,33,38;, + 3;39,35,33;, + 3;40,35,39;, + 3;40,41,35;, + 3;36,35,41;, + 3;42,36,41;, + 3;37,27,26;, + 3;37,26,43;, + 3;40,39,44;, + 3;39,38,45;, + 3;38,37,46;, + 3;22,47,23;, + 3;47,48,23;, + 3;24,23,48;, + 3;49,24,48;, + 3;50,24,49;, + 3;47,51,48;, + 3;51,52,48;, + 3;49,48,52;, + 3;53,49,52;, + 3;54,49,53;, + 3;51,55,52;, + 3;55,56,52;, + 3;53,52,56;, + 3;57,53,56;, + 3;58,53,57;, + 3;55,59,56;, + 3;59,60,56;, + 3;57,56,60;, + 3;61,57,60;, + 3;62,57,61;, + 3;59,63,60;, + 3;63,64,60;, + 3;61,60,64;, + 3;65,61,64;, + 3;66,61,65;, + 3;63,67,64;, + 3;67,68,64;, + 3;65,64,68;, + 3;69,65,68;, + 3;70,65,69;, + 3;67,71,68;, + 3;71,72,68;, + 3;69,68,72;, + 3;73,69,72;, + 3;74,69,73;, + 3;71,75,72;, + 3;75,76,72;, + 3;73,72,76;, + 3;77,73,76;, + 3;78,73,77;, + 3;75,79,76;, + 3;79,80,76;, + 3;77,76,80;, + 3;81,77,80;, + 3;82,77,81;, + 3;79,83,80;, + 3;83,84,80;, + 3;81,80,84;, + 3;85,81,84;, + 3;86,81,85;, + 3;83,87,84;, + 3;87,88,84;, + 3;85,84,88;, + 3;89,85,88;, + 3;89,90,85;, + 3;90,91,85;, + 3;87,92,88;, + 3;92,89,88;, + 3;92,93,89;, + 3;93,94,89;, + 3;94,90,89;, + 3;94,95,90;, + 3;95,96,90;, + 3;93,97,94;, + 3;97,98,94;, + 3;98,95,94;, + 3;98,99,95;, + 3;99,100,95;, + 3;97,101,98;, + 3;101,102,98;, + 3;102,99,98;, + 3;102,103,99;, + 3;103,104,99;, + 3;101,105,102;, + 3;106,102,105;, + 3;106,107,102;, + 3;107,103,102;, + 3;107,108,103;, + 3;108,109,103;, + 3;106,110,107;, + 3;110,108,107;, + 3;110,111,108;, + 3;111,112,108;, + 3;106,113,110;, + 3;113,114,110;, + 3;114,111,110;, + 3;114,115,111;, + 3;115,116,111;, + 3;113,117,114;, + 3;117,118,114;, + 3;118,115,114;, + 3;118,119,115;, + 3;119,120,115;, + 3;117,121,118;, + 3;121,122,118;, + 3;122,119,118;, + 3;122,123,119;, + 3;123,124,119;, + 3;121,125,122;, + 3;125,126,122;, + 3;126,123,122;, + 3;126,127,123;, + 3;127,128,123;, + 3;125,129,126;, + 3;129,130,126;, + 3;130,127,126;, + 3;130,131,127;, + 3;131,132,127;, + 3;129,133,130;, + 3;133,134,130;, + 3;134,131,130;, + 3;134,135,131;, + 3;135,136,131;, + 3;133,137,134;, + 3;137,138,134;, + 3;134,138,139;, + 3;134,139,135;, + 3;135,139,140;, + 3;137,141,138;, + 3;141,142,138;, + 3;138,142,143;, + 3;138,143,139;, + 3;139,143,144;, + 3;141,145,142;, + 3;145,146,142;, + 3;142,146,147;, + 3;142,147,143;, + 3;143,147,148;, + 3;145,149,146;, + 3;149,150,146;, + 3;146,150,151;, + 3;146,151,147;, + 3;147,151,152;, + 3;149,153,150;, + 3;153,154,150;, + 3;150,154,155;, + 3;150,155,151;, + 3;151,155,156;, + 3;153,157,154;, + 3;157,158,154;, + 3;154,158,159;, + 3;154,159,155;, + 3;155,159,160;, + 3;157,161,158;, + 3;161,162,158;, + 3;158,162,163;, + 3;158,163,159;, + 3;159,163,164;, + 3;161,165,162;, + 3;165,166,162;, + 3;162,166,167;, + 3;162,167,163;, + 3;163,167,168;, + 3;165,169,166;, + 3;169,170,166;, + 3;166,170,171;, + 3;166,171,167;, + 3;167,171,172;, + 3;169,173,170;, + 3;173,174,170;, + 3;170,174,175;, + 3;170,175,171;, + 3;171,175,176;, + 3;173,177,174;, + 3;177,178,174;, + 3;174,178,179;, + 3;174,179,175;, + 3;175,179,180;, + 3;177,181,178;, + 3;181,182,178;, + 3;178,182,183;, + 3;178,183,179;, + 3;179,183,184;, + 3;181,185,182;, + 3;185,186,182;, + 3;183,182,186;, + 3;183,186,187;, + 3;188,183,187;, + 3;187,189,188;, + 3;185,190,186;, + 3;190,191,186;, + 3;187,186,191;, + 3;187,191,189;, + 3;189,191,192;, + 3;189,192,193;, + 3;189,193,194;, + 3;190,195,191;, + 3;195,192,191;, + 3;195,196,192;, + 3;196,197,192;, + 3;193,192,197;, + 3;193,197,198;, + 3;193,198,199;, + 3;196,42,197;, + 3;42,41,197;, + 3;198,197,41;, + 3;198,41,40;, + 3;198,40,200;, + 3;201,202,4;, + 3;202,203,4;, + 3;4,203,204;, + 3;4,204,205;, + 3;4,205,206;, + 3;207,4,206;, + 3;208,4,207;, + 3;0,208,207;, + 3;205,204,209;, + 3;209,210,205;, + 3;205,210,211;, + 3;206,205,211;, + 3;206,211,212;, + 3;206,212,213;, + 3;214,206,213;, + 3;207,206,214;, + 3;215,207,214;, + 3;0,207,215;, + 3;209,216,210;, + 3;216,217,210;, + 3;217,218,210;, + 3;210,218,219;, + 3;210,219,220;, + 3;211,210,220;, + 3;211,220,212;, + 3;212,220,221;, + 3;213,212,221;, + 3;213,221,222;, + 3;214,213,222;, + 3;223,214,222;, + 3;215,214,223;, + 3;217,224,218;, + 3;224,225,218;, + 3;225,226,218;, + 3;218,226,227;, + 3;218,227,219;, + 3;219,227,228;, + 3;220,219,228;, + 3;220,228,221;, + 3;221,228,229;, + 3;221,229,230;, + 3;222,221,230;, + 3;231,222,230;, + 3;223,222,231;, + 3;225,232,226;, + 3;232,233,226;, + 3;233,234,226;, + 3;226,234,227;, + 3;235,227,234;, + 3;235,236,227;, + 3;236,237,227;, + 3;227,237,228;, + 3;228,237,238;, + 3;228,238,229;, + 3;229,238,239;, + 3;229,239,230;, + 3;233,240,234;, + 3;241,234,240;, + 3;241,235,234;, + 3;242,235,241;, + 3;243,235,242;, + 3;243,244,235;, + 3;244,245,235;, + 3;245,236,235;, + 3;245,246,236;, + 3;246,247,236;, + 3;236,247,237;, + 3;247,248,237;, + 3;237,248,238;, + 3;249,244,243;, + 3;250,244,249;, + 3;251,244,250;, + 3;251,252,244;, + 3;252,253,244;, + 3;244,253,245;, + 3;253,246,245;, + 3;253,254,246;, + 3;254,247,246;, + 3;254,255,247;, + 3;255,256,247;, + 3;247,256,248;, + 3;256,257,248;, + 3;252,251,258;, + 3;259,252,258;, + 3;259,260,252;, + 3;252,260,253;, + 3;260,254,253;, + 3;260,261,254;, + 3;261,255,254;, + 3;262,255,261;, + 3;263,255,262;, + 3;263,256,255;, + 3;263,264,256;, + 3;264,257,256;, + 3;259,258,265;, + 3;266,259,265;, + 3;267,259,266;, + 3;268,259,267;, + 3;268,269,259;, + 3;269,260,259;, + 3;269,261,260;, + 3;269,262,261;, + 3;270,262,269;, + 3;270,271,262;, + 3;271,263,262;, + 3;272,263,271;, + 3;264,263,272;, + 3;273,264,272;, + 3;274,268,267;, + 3;275,268,274;, + 3;270,268,275;, + 3;270,269,268;, + 3;276,270,275;, + 3;277,270,276;, + 3;271,270,277;, + 3;278,271,277;, + 3;272,271,278;, + 3;279,272,278;, + 3;273,272,279;, + 3;280,273,279;, + 3;281,273,280;, + 3;282,276,275;, + 3;283,276,282;, + 3;283,277,276;, + 3;284,277,283;, + 3;278,277,284;, + 3;285,278,284;, + 3;279,278,285;, + 3;279,285,286;, + 3;287,279,286;, + 3;280,279,287;, + 3;288,280,287;, + 3;281,280,288;, + 3;289,283,282;, + 3;290,283,289;, + 3;291,283,290;, + 3;292,283,291;, + 3;292,284,283;, + 3;285,284,292;, + 3;286,285,292;, + 3;286,292,293;, + 3;294,286,293;, + 3;287,286,294;, + 3;287,294,295;, + 3;296,287,295;, + 3;288,287,296;, + 3;293,292,291;, + 3;293,291,297;, + 3;293,297,298;, + 3;299,293,298;, + 3;294,293,299;, + 3;294,299,300;, + 3;295,294,300;, + 3;295,300,301;, + 3;302,295,301;, + 3;296,295,302;, + 3;296,302,303;, + 3;296,303,304;, + 3;288,296,304;, + 3;299,298,305;, + 3;299,305,149;, + 3;300,299,149;, + 3;300,149,306;, + 3;300,306,141;, + 3;301,300,141;, + 3;301,141,307;, + 3;301,307,133;, + 3;301,133,308;, + 3;302,301,308;, + 3;302,308,303;, + 3;303,308,309;, + 3;303,309,310;, + 3;304,303,310;, + 3;304,310,311;, + 3;304,311,312;, + 3;313,304,312;, + 3;288,304,313;, + 3;308,133,314;, + 3;308,314,125;, + 3;308,125,309;, + 3;309,125,315;, + 3;309,315,117;, + 3;309,117,316;, + 3;310,309,316;, + 3;310,316,311;, + 3;311,316,317;, + 3;311,317,318;, + 3;312,311,318;, + 3;312,318,223;, + 3;312,223,231;, + 3;313,312,231;, + 3;316,117,319;, + 3;316,319,320;, + 3;316,320,317;, + 3;320,321,317;, + 3;317,321,215;, + 3;318,317,215;, + 3;318,215,223;, + 3;320,322,321;, + 3;322,323,321;, + 3;323,324,321;, + 3;321,324,0;, + 3;321,0,215;, + 3;324,325,0;, + 3;257,239,238;, + 3;257,326,239;, + 3;327,239,326;, + 3;328,239,327;, + 3;329,239,328;, + 3;230,239,329;, + 3;330,230,329;, + 3;231,230,330;, + 3;257,331,326;, + 3;331,332,326;, + 3;326,332,333;, + 3;326,333,334;, + 3;327,326,334;, + 3;327,334,335;, + 3;328,327,335;, + 3;257,336,331;, + 3;336,337,331;, + 3;331,337,332;, + 3;337,338,332;, + 3;332,338,339;, + 3;332,339,333;, + 3;333,339,340;, + 3;333,340,334;, + 3;341,334,340;, + 3;335,334,341;, + 3;342,336,257;, + 3;343,336,342;, + 3;336,343,337;, + 3;343,344,337;, + 3;337,344,345;, + 3;337,345,338;, + 3;342,257,264;, + 3;342,264,281;, + 3;346,342,281;, + 3;347,342,346;, + 3;347,343,342;, + 3;348,343,347;, + 3;348,344,343;, + 3;348,349,344;, + 3;349,350,344;, + 3;344,350,345;, + 3;351,346,281;, + 3;352,346,351;, + 3;352,347,346;, + 3;353,347,352;, + 3;353,354,347;, + 3;354,348,347;, + 3;355,348,354;, + 3;355,349,348;, + 3;351,281,356;, + 3;357,351,356;, + 3;357,358,351;, + 3;358,359,351;, + 3;359,352,351;, + 3;360,352,359;, + 3;360,353,352;, + 3;356,281,288;, + 3;356,288,313;, + 3;361,356,313;, + 3;357,356,361;, + 3;357,361,362;, + 3;363,357,362;, + 3;358,357,363;, + 3;364,358,363;, + 3;360,358,364;, + 3;360,359,358;, + 3;361,313,329;, + 3;362,361,329;, + 3;362,329,365;, + 3;366,362,365;, + 3;363,362,366;, + 3;367,363,366;, + 3;368,363,367;, + 3;364,363,368;, + 3;329,313,330;, + 3;330,313,231;, + 3;329,328,365;, + 3;365,328,369;, + 3;365,369,370;, + 3;366,365,370;, + 3;371,366,370;, + 3;372,366,371;, + 3;367,366,372;, + 3;373,367,372;, + 3;374,367,373;, + 3;374,368,367;, + 3;328,335,369;, + 3;369,335,375;, + 3;369,375,376;, + 3;370,369,376;, + 3;370,376,371;, + 3;371,376,377;, + 3;378,371,377;, + 3;372,371,378;, + 3;379,372,378;, + 3;373,372,379;, + 3;335,341,375;, + 3;375,341,380;, + 3;375,380,381;, + 3;375,381,382;, + 3;383,375,382;, + 3;376,375,383;, + 3;376,383,377;, + 3;380,341,384;, + 3;381,380,384;, + 3;381,384,385;, + 3;382,381,385;, + 3;382,385,386;, + 3;383,382,386;, + 3;383,386,387;, + 3;377,383,387;, + 3;377,387,388;, + 3;377,388,389;, + 3;389,378,377;, + 3;341,390,384;, + 3;341,391,390;, + 3;392,390,391;, + 3;393,392,391;, + 3;393,394,392;, + 3;395,394,393;, + 3;395,396,394;, + 3;396,397,394;, + 3;341,340,391;, + 3;393,391,340;, + 3;339,393,340;, + 3;339,395,393;, + 3;338,395,339;, + 3;338,396,395;, + 3;338,398,396;, + 3;398,399,396;, + 3;396,399,397;, + 3;345,398,338;, + 3;345,400,398;, + 3;400,399,398;, + 3;400,401,399;, + 3;401,402,399;, + 3;401,403,402;, + 3;403,401,404;, + 3;405,403,404;, + 3;406,405,404;, + 3;350,400,345;, + 3;350,401,400;, + 3;349,401,350;, + 3;349,407,401;, + 3;404,401,407;, + 3;404,407,349;, + 3;404,349,355;, + 3;408,404,355;, + 3;409,404,408;, + 3;406,404,409;, + 3;410,378,389;, + 3;379,378,410;, + 3;411,368,374;, + 3;411,364,368;, + 3;412,364,411;, + 3;412,413,364;, + 3;413,360,364;, + 3;413,414,360;, + 3;414,415,360;, + 3;415,353,360;, + 3;412,416,413;, + 3;413,416,414;, + 3;416,415,414;, + 3;416,417,415;, + 3;417,418,415;, + 3;418,353,415;, + 3;418,419,353;, + 3;419,420,353;, + 3;420,354,353;, + 3;420,355,354;, + 3;408,355,420;, + 3;417,421,418;, + 3;421,419,418;, + 3;421,422,419;, + 3;422,420,419;, + 3;422,408,420;, + 3;409,408,422;, + 3;409,422,421;, + 3;423,424,425;, + 3;423,426,424;, + 3;426,427,424;, + 3;424,427,428;, + 3;427,429,428;, + 3;427,430,429;, + 3;427,431,430;, + 3;432,426,423;, + 3;432,433,426;, + 3;426,433,427;, + 3;433,434,427;, + 3;427,434,435;, + 3;427,435,431;, + 3;435,436,431;, + 3;435,437,436;, + 3;435,438,437;, + 3;439,432,423;, + 3;440,432,439;, + 3;440,441,432;, + 3;441,433,432;, + 3;441,442,433;, + 3;442,434,433;, + 3;443,434,442;, + 3;443,444,434;, + 3;444,435,434;, + 3;445,440,439;, + 3;435,446,438;, + 3;447,446,435;, + 3;447,448,446;, + 3;447,449,448;, + 3;447,450,449;, + 3;451,450,447;, + 3;444,447,435;, + 3;444,451,447;, + 3;452,451,444;, + 3;453,451,452;, + 3;453,454,451;, + 3;452,444,443;, + 3;455,452,443;, + 3;456,452,455;, + 3;456,457,452;, + 3;457,453,452;, + 3;455,443,458;, + 3;459,455,458;, + 3;456,455,459;, + 3;460,456,459;, + 3;461,460,459;, + 3;461,459,462;, + 3;462,459,458;, + 3;462,458,463;, + 3;458,443,442;, + 3;458,442,464;, + 3;458,464,465;, + 3;463,458,465;, + 3;463,465,466;, + 3;467,466,465;, + 3;468,467,465;, + 3;468,465,469;, + 3;470,468,469;, + 3;441,464,442;, + 3;469,464,441;, + 3;469,465,464;, + 3;440,469,441;, + 3;471,469,440;, + 3;470,469,471;, + 3;472,457,456;, + 3;473,474,475;, + 3;476,477,478;, + 3;479,480,481;, + 3;482,475,483;, + 3;484,485,486;, + 3;487,488,484;, + 3;489,490,487;, + 3;491,492,493;, + 3;489,494,495;, + 3;494,491,496;, + 3;497,498,499;, + 3;497,500,498;, + 3;498,500,501;, + 3;498,501,502;, + 3;502,501,503;, + 3;501,504,503;, + 3;503,504,505;, + 3;506,497,499;, + 3;507,497,506;, + 3;508,497,507;, + 3;508,509,497;, + 3;509,500,497;, + 3;509,510,500;, + 3;510,511,500;, + 3;500,511,512;, + 3;500,512,501;, + 3;508,507,480;, + 3;513,508,480;, + 3;514,508,513;, + 3;514,509,508;, + 3;515,509,514;, + 3;515,516,509;, + 3;516,510,509;, + 3;517,510,516;, + 3;517,518,510;, + 3;510,518,511;, + 3;519,514,513;, + 3;520,514,519;, + 3;520,515,514;, + 3;520,521,515;, + 3;521,516,515;, + 3;521,517,516;, + 3;522,517,521;, + 3;522,523,517;, + 3;523,524,517;, + 3;524,518,517;, + 3;519,513,525;, + 3;526,519,525;, + 3;527,519,526;, + 3;527,520,519;, + 3;528,520,527;, + 3;528,529,520;, + 3;529,530,520;, + 3;530,521,520;, + 3;530,522,521;, + 3;526,525,531;, + 3;532,526,531;, + 3;533,526,532;, + 3;533,527,526;, + 3;534,527,533;, + 3;534,528,527;, + 3;534,535,528;, + 3;535,536,528;, + 3;536,529,528;, + 3;536,537,529;, + 3;537,530,529;, + 3;532,531,538;, + 3;539,532,538;, + 3;540,532,539;, + 3;540,533,532;, + 3;541,533,540;, + 3;541,542,533;, + 3;542,534,533;, + 3;543,534,542;, + 3;543,544,534;, + 3;544,535,534;, + 3;539,538,545;, + 3;539,545,546;, + 3;540,539,546;, + 3;540,546,547;, + 3;540,547,548;, + 3;549,540,548;, + 3;541,540,549;, + 3;550,541,549;, + 3;550,542,541;, + 3;550,543,542;, + 3;546,545,551;, + 3;546,551,552;, + 3;547,546,552;, + 3;547,552,553;, + 3;548,547,553;, + 3;548,553,554;, + 3;555,548,554;, + 3;549,548,555;, + 3;556,549,555;, + 3;557,549,556;, + 3;550,549,557;, + 3;552,551,558;, + 3;552,558,559;, + 3;553,552,559;, + 3;553,559,560;, + 3;554,553,560;, + 3;554,560,561;, + 3;562,554,561;, + 3;555,554,562;, + 3;563,555,562;, + 3;556,555,563;, + 3;559,558,564;, + 3;559,564,565;, + 3;560,559,565;, + 3;560,565,566;, + 3;561,560,566;, + 3;561,566,567;, + 3;568,561,567;, + 3;562,561,568;, + 3;558,569,564;, + 3;564,569,570;, + 3;564,570,571;, + 3;564,571,565;, + 3;565,571,572;, + 3;565,572,573;, + 3;567,565,573;, + 3;566,565,567;, + 3;570,574,571;, + 3;574,575,571;, + 3;571,575,576;, + 3;571,576,572;, + 3;572,576,577;, + 3;572,577,578;, + 3;572,578,579;, + 3;573,572,579;, + 3;573,579,580;, + 3;581,573,580;, + 3;567,573,581;, + 3;575,582,576;, + 3;576,582,583;, + 3;576,583,577;, + 3;577,583,584;, + 3;584,585,577;, + 3;577,585,586;, + 3;577,586,578;, + 3;578,586,587;, + 3;578,587,588;, + 3;580,578,588;, + 3;580,579,578;, + 3;585,589,586;, + 3;586,589,590;, + 3;586,590,587;, + 3;587,590,591;, + 3;587,591,588;, + 3;589,592,590;, + 3;592,593,590;, + 3;593,594,590;, + 3;590,594,595;, + 3;590,595,591;, + 3;591,595,596;, + 3;591,596,597;, + 3;588,591,597;, + 3;593,598,594;, + 3;598,599,594;, + 3;594,599,595;, + 3;595,599,600;, + 3;595,600,596;, + 3;600,601,596;, + 3;596,601,602;, + 3;596,602,603;, + 3;596,603,604;, + 3;597,596,604;, + 3;598,605,599;, + 3;605,606,599;, + 3;606,607,599;, + 3;599,607,608;, + 3;599,608,609;, + 3;599,609,600;, + 3;600,609,601;, + 3;609,610,601;, + 3;601,610,611;, + 3;601,611,602;, + 3;606,612,607;, + 3;612,613,607;, + 3;613,614,607;, + 3;607,614,615;, + 3;607,615,608;, + 3;615,616,608;, + 3;608,616,610;, + 3;609,608,610;, + 3;613,617,614;, + 3;618,614,617;, + 3;618,619,614;, + 3;619,615,614;, + 3;619,620,615;, + 3;620,616,615;, + 3;620,621,616;, + 3;616,621,622;, + 3;610,616,622;, + 3;610,622,623;, + 3;610,623,611;, + 3;624,619,618;, + 3;625,619,624;, + 3;625,626,619;, + 3;626,627,619;, + 3;619,627,620;, + 3;627,628,620;, + 3;620,628,621;, + 3;628,629,621;, + 3;621,629,630;, + 3;622,621,630;, + 3;623,622,630;, + 3;631,626,625;, + 3;632,626,631;, + 3;632,633,626;, + 3;633,634,626;, + 3;626,634,627;, + 3;634,635,627;, + 3;627,635,628;, + 3;635,636,628;, + 3;628,636,637;, + 3;628,637,629;, + 3;638,633,632;, + 3;639,633,638;, + 3;639,640,633;, + 3;640,504,633;, + 3;504,641,633;, + 3;633,641,634;, + 3;641,642,634;, + 3;642,643,634;, + 3;634,643,635;, + 3;643,644,635;, + 3;635,644,636;, + 3;645,640,639;, + 3;505,640,645;, + 3;504,640,505;, + 3;644,646,636;, + 3;644,647,646;, + 3;648,646,647;, + 3;648,649,646;, + 3;649,650,646;, + 3;646,650,636;, + 3;650,637,636;, + 3;650,651,637;, + 3;637,651,629;, + 3;643,647,644;, + 3;643,652,647;, + 3;652,653,647;, + 3;653,648,647;, + 3;654,648,653;, + 3;654,655,648;, + 3;655,649,648;, + 3;656,652,643;, + 3;656,657,652;, + 3;657,653,652;, + 3;658,653,657;, + 3;654,653,658;, + 3;659,654,658;, + 3;660,654,659;, + 3;660,661,654;, + 3;661,655,654;, + 3;642,656,643;, + 3;662,656,642;, + 3;662,663,656;, + 3;663,657,656;, + 3;664,657,663;, + 3;664,658,657;, + 3;665,658,664;, + 3;666,658,665;, + 3;659,658,666;, + 3;662,642,641;, + 3;504,662,641;, + 3;667,662,504;, + 3;668,662,667;, + 3;668,669,662;, + 3;669,670,662;, + 3;662,670,663;, + 3;670,664,663;, + 3;671,664,670;, + 3;671,665,664;, + 3;671,666,665;, + 3;672,666,671;, + 3;659,666,672;, + 3;501,667,504;, + 3;512,667,501;, + 3;512,668,667;, + 3;511,668,512;, + 3;673,668,511;, + 3;673,669,668;, + 3;673,674,669;, + 3;674,671,669;, + 3;669,671,670;, + 3;518,673,511;, + 3;518,674,673;, + 3;675,674,518;, + 3;675,676,674;, + 3;676,672,674;, + 3;674,672,671;, + 3;524,675,518;, + 3;677,675,524;, + 3;678,675,677;, + 3;678,679,675;, + 3;675,679,676;, + 3;676,679,659;, + 3;676,659,672;, + 3;523,677,524;, + 3;680,677,523;, + 3;680,681,677;, + 3;681,678,677;, + 3;681,679,678;, + 3;681,682,679;, + 3;679,682,683;, + 3;683,659,679;, + 3;683,660,659;, + 3;684,660,683;, + 3;684,661,660;, + 3;680,523,522;, + 3;685,680,522;, + 3;685,686,680;, + 3;680,686,681;, + 3;686,687,681;, + 3;687,682,681;, + 3;687,688,682;, + 3;688,689,682;, + 3;682,689,683;, + 3;689,690,683;, + 3;690,684,683;, + 3;530,685,522;, + 3;691,685,530;, + 3;691,686,685;, + 3;691,692,686;, + 3;692,687,686;, + 3;692,688,687;, + 3;692,693,688;, + 3;693,694,688;, + 3;694,695,688;, + 3;688,695,696;, + 3;688,696,689;, + 3;537,691,530;, + 3;537,692,691;, + 3;537,697,692;, + 3;697,698,692;, + 3;698,693,692;, + 3;698,694,693;, + 3;698,699,694;, + 3;699,700,694;, + 3;694,700,695;, + 3;700,701,695;, + 3;695,701,702;, + 3;695,702,696;, + 3;536,697,537;, + 3;536,703,697;, + 3;703,698,697;, + 3;703,704,698;, + 3;704,699,698;, + 3;704,705,699;, + 3;705,706,699;, + 3;699,706,700;, + 3;706,707,700;, + 3;700,707,701;, + 3;707,708,701;, + 3;707,709,708;, + 3;535,703,536;, + 3;544,703,535;, + 3;544,704,703;, + 3;710,704,544;, + 3;710,711,704;, + 3;711,712,704;, + 3;704,712,705;, + 3;712,713,705;, + 3;705,713,706;, + 3;713,714,706;, + 3;706,714,707;, + 3;714,709,707;, + 3;543,710,544;, + 3;715,710,543;, + 3;715,716,710;, + 3;710,716,717;, + 3;710,717,711;, + 3;711,717,718;, + 3;711,718,719;, + 3;719,712,711;, + 3;719,720,712;, + 3;712,720,713;, + 3;715,543,550;, + 3;715,550,716;, + 3;716,550,557;, + 3;716,557,721;, + 3;716,721,717;, + 3;721,722,717;, + 3;717,722,718;, + 3;718,722,723;, + 3;718,723,719;, + 3;719,723,724;, + 3;719,724,725;, + 3;719,725,720;, + 3;557,556,721;, + 3;556,726,721;, + 3;721,726,722;, + 3;726,727,722;, + 3;722,727,728;, + 3;722,728,729;, + 3;722,729,730;, + 3;722,730,723;, + 3;730,731,723;, + 3;723,731,724;, + 3;556,563,726;, + 3;726,563,732;, + 3;726,732,727;, + 3;732,733,727;, + 3;727,733,734;, + 3;727,734,728;, + 3;728,734,735;, + 3;728,735,729;, + 3;729,735,736;, + 3;729,736,737;, + 3;730,729,737;, + 3;730,737,731;, + 3;563,562,732;, + 3;732,562,738;, + 3;732,738,733;, + 3;733,738,739;, + 3;739,740,733;, + 3;733,740,734;, + 3;740,741,734;, + 3;734,741,742;, + 3;734,742,735;, + 3;738,562,568;, + 3;738,568,739;, + 3;739,568,743;, + 3;739,743,744;, + 3;739,744,740;, + 3;740,744,745;, + 3;740,745,746;, + 3;740,746,741;, + 3;568,567,743;, + 3;743,567,747;, + 3;743,747,744;, + 3;744,747,748;, + 3;745,744,748;, + 3;745,748,746;, + 3;746,748,741;, + 3;748,749,741;, + 3;749,750,741;, + 3;741,750,751;, + 3;741,751,752;, + 3;741,752,742;, + 3;747,567,753;, + 3;747,753,748;, + 3;748,753,749;, + 3;753,754,749;, + 3;749,754,750;, + 3;754,755,750;, + 3;750,755,756;, + 3;750,756,751;, + 3;751,756,757;, + 3;751,757,758;, + 3;752,751,758;, + 3;567,581,753;, + 3;753,581,754;, + 3;754,581,580;, + 3;580,588,754;, + 3;754,588,755;, + 3;755,588,759;, + 3;755,759,756;, + 3;756,759,760;, + 3;756,760,757;, + 3;757,760,761;, + 3;758,757,761;, + 3;758,761,762;, + 3;758,762,763;, + 3;764,758,763;, + 3;752,758,764;, + 3;588,765,759;, + 3;759,765,760;, + 3;760,765,766;, + 3;760,766,761;, + 3;761,766,767;, + 3;762,761,767;, + 3;762,767,768;, + 3;763,762,768;, + 3;588,597,765;, + 3;597,604,765;, + 3;765,604,766;, + 3;604,769,766;, + 3;766,769,767;, + 3;767,769,770;, + 3;767,770,768;, + 3;768,770,771;, + 3;768,771,772;, + 3;768,772,773;, + 3;774,768,773;, + 3;763,768,774;, + 3;604,603,769;, + 3;769,603,770;, + 3;603,771,770;, + 3;603,602,771;, + 3;602,775,771;, + 3;772,771,775;, + 3;772,775,776;, + 3;773,772,776;, + 3;773,776,777;, + 3;778,773,777;, + 3;779,773,778;, + 3;779,774,773;, + 3;763,774,779;, + 3;602,611,775;, + 3;611,780,775;, + 3;776,775,780;, + 3;776,780,781;, + 3;776,781,777;, + 3;777,781,782;, + 3;783,777,782;, + 3;784,777,783;, + 3;785,777,784;, + 3;778,777,785;, + 3;611,623,780;, + 3;780,623,781;, + 3;623,630,781;, + 3;781,630,782;, + 3;782,630,629;, + 3;651,782,629;, + 3;786,782,651;, + 3;786,783,782;, + 3;787,783,786;, + 3;787,788,783;, + 3;784,783,788;, + 3;789,784,788;, + 3;790,784,789;, + 3;790,785,784;, + 3;791,785,790;, + 3;791,778,785;, + 3;650,786,651;, + 3;649,786,650;, + 3;649,787,786;, + 3;792,787,649;, + 3;792,788,787;, + 3;793,788,792;, + 3;793,789,788;, + 3;794,789,793;, + 3;795,789,794;, + 3;795,790,789;, + 3;796,790,795;, + 3;796,797,790;, + 3;797,791,790;, + 3;798,792,649;, + 3;799,792,798;, + 3;800,792,799;, + 3;800,793,792;, + 3;801,793,800;, + 3;801,794,793;, + 3;802,798,649;, + 3;799,798,802;, + 3;803,799,802;, + 3;804,799,803;, + 3;804,805,799;, + 3;805,800,799;, + 3;805,801,800;, + 3;802,649,655;, + 3;661,802,655;, + 3;803,802,661;, + 3;806,803,661;, + 3;807,803,806;, + 3;807,804,803;, + 3;808,804,807;, + 3;808,809,804;, + 3;809,805,804;, + 3;810,806,661;, + 3;810,807,806;, + 3;811,807,810;, + 3;812,811,810;, + 3;812,810,813;, + 3;813,814,812;, + 3;815,814,813;, + 3;815,816,814;, + 3;810,661,684;, + 3;813,810,684;, + 3;813,684,690;, + 3;690,815,813;, + 3;817,815,690;, + 3;696,815,817;, + 3;696,702,815;, + 3;702,816,815;, + 3;702,701,816;, + 3;689,817,690;, + 3;689,696,817;, + 3;713,818,714;, + 3;720,818,713;, + 3;720,819,818;, + 3;725,819,720;, + 3;725,820,819;, + 3;724,820,725;, + 3;724,731,820;, + 3;731,821,820;, + 3;731,737,821;, + 3;737,822,821;, + 3;821,822,823;, + 3;822,824,823;, + 3;822,825,824;, + 3;825,826,824;, + 3;825,827,826;, + 3;737,736,822;, + 3;736,825,822;, + 3;736,828,825;, + 3;828,827,825;, + 3;828,829,827;, + 3;827,829,830;, + 3;829,831,830;, + 3;831,829,832;, + 3;736,735,828;, + 3;735,833,828;, + 3;833,829,828;, + 3;833,834,829;, + 3;829,834,832;, + 3;832,834,835;, + 3;832,835,836;, + 3;836,835,837;, + 3;836,837,838;, + 3;742,833,735;, + 3;742,752,833;, + 3;752,839,833;, + 3;833,839,834;, + 3;834,839,835;, + 3;835,839,840;, + 3;835,840,837;, + 3;840,763,837;, + 3;837,763,779;, + 3;837,779,841;, + 3;838,837,841;, + 3;838,841,797;, + 3;797,841,791;, + 3;839,752,764;, + 3;839,764,840;, + 3;840,764,763;, + 3;841,778,791;, + 3;841,779,778;, + 3;842,843,844;, + 3;845,846,847;, + 3;848,849,850;, + 3;851,849,848;, + 3;851,852,849;, + 3;849,852,853;, + 3;849,853,854;, + 3;854,853,855;, + 3;853,856,855;, + 3;855,856,857;, + 3;858,851,848;, + 3;859,851,858;, + 3;859,860,851;, + 3;860,861,851;, + 3;851,861,852;, + 3;861,862,852;, + 3;862,863,852;, + 3;864,858,848;, + 3;865,858,864;, + 3;866,858,865;, + 3;866,867,858;, + 3;867,868,858;, + 3;868,859,858;, + 3;864,848,869;, + 3;864,869,870;, + 3;871,864,870;, + 3;865,864,871;, + 3;865,871,872;, + 3;873,865,872;, + 3;866,865,873;, + 3;874,866,873;, + 3;874,867,866;, + 3;869,848,875;, + 3;869,875,876;, + 3;869,876,877;, + 3;870,869,877;, + 3;870,877,878;, + 3;879,870,878;, + 3;871,870,879;, + 3;872,871,879;, + 3;872,879,880;, + 3;872,880,881;, + 3;873,872,881;, + 3;877,876,882;, + 3;877,882,883;, + 3;877,883,884;, + 3;878,877,884;, + 3;878,884,885;, + 3;878,885,886;, + 3;879,878,886;, + 3;879,886,887;, + 3;880,879,887;, + 3;882,876,888;, + 3;889,882,888;, + 3;883,882,889;, + 3;883,889,890;, + 3;883,890,891;, + 3;883,891,892;, + 3;884,883,892;, + 3;884,892,885;, + 3;885,892,893;, + 3;886,885,893;, + 3;876,894,888;, + 3;888,894,895;, + 3;888,895,896;, + 3;897,888,896;, + 3;889,888,897;, + 3;898,889,897;, + 3;890,889,898;, + 3;891,890,898;, + 3;857,894,876;, + 3;857,899,894;, + 3;899,900,894;, + 3;894,900,901;, + 3;895,894,901;, + 3;895,901,902;, + 3;896,895,902;, + 3;903,857,876;, + 3;904,903,876;, + 3;886,893,905;, + 3;906,886,905;, + 3;887,886,906;, + 3;880,887,906;, + 3;881,880,906;, + 3;906,905,907;, + 3;881,906,907;, + 3;908,881,907;, + 3;909,881,908;, + 3;909,873,881;, + 3;910,873,909;, + 3;910,874,873;, + 3;907,905,911;, + 3;912,907,911;, + 3;908,907,912;, + 3;913,908,912;, + 3;913,914,908;, + 3;914,909,908;, + 3;915,909,914;, + 3;915,910,909;, + 3;915,916,910;, + 3;910,916,874;, + 3;874,916,867;, + 3;917,912,911;, + 3;913,912,917;, + 3;918,913,917;, + 3;919,913,918;, + 3;919,920,913;, + 3;920,914,913;, + 3;920,915,914;, + 3;917,911,921;, + 3;922,917,921;, + 3;923,917,922;, + 3;923,918,917;, + 3;924,918,923;, + 3;924,919,918;, + 3;925,919,924;, + 3;925,926,919;, + 3;926,920,919;, + 3;921,911,927;, + 3;921,927,928;, + 3;929,921,928;, + 3;930,921,929;, + 3;930,922,921;, + 3;931,922,930;, + 3;931,923,922;, + 3;932,923,931;, + 3;932,924,923;, + 3;911,933,927;, + 3;911,934,933;, + 3;929,928,935;, + 3;929,935,936;, + 3;937,929,936;, + 3;938,929,937;, + 3;930,929,938;, + 3;939,930,938;, + 3;940,930,939;, + 3;940,931,930;, + 3;941,931,940;, + 3;941,932,931;, + 3;936,942,937;, + 3;937,942,943;, + 3;937,943,944;, + 3;945,937,944;, + 3;946,937,945;, + 3;938,937,946;, + 3;947,938,946;, + 3;948,938,947;, + 3;939,938,948;, + 3;944,943,949;, + 3;944,949,950;, + 3;951,944,950;, + 3;952,944,951;, + 3;952,945,944;, + 3;953,945,952;, + 3;953,946,945;, + 3;954,946,953;, + 3;947,946,954;, + 3;950,949,955;, + 3;956,950,955;, + 3;957,950,956;, + 3;951,950,957;, + 3;958,951,957;, + 3;959,951,958;, + 3;960,951,959;, + 3;960,952,951;, + 3;961,952,960;, + 3;953,952,961;, + 3;956,955,962;, + 3;956,962,963;, + 3;964,956,963;, + 3;965,956,964;, + 3;957,956,965;, + 3;966,957,965;, + 3;967,957,966;, + 3;967,958,957;, + 3;959,958,967;, + 3;955,968,962;, + 3;968,969,962;, + 3;969,970,962;, + 3;962,970,971;, + 3;962,971,972;, + 3;963,962,972;, + 3;963,972,973;, + 3;964,963,973;, + 3;964,973,974;, + 3;965,964,974;, + 3;975,965,974;, + 3;966,965,975;, + 3;969,976,970;, + 3;976,977,970;, + 3;970,977,978;, + 3;970,978,971;, + 3;971,978,979;, + 3;971,979,980;, + 3;971,980,981;, + 3;972,971,981;, + 3;972,981,982;, + 3;973,972,982;, + 3;976,983,977;, + 3;983,984,977;, + 3;977,984,985;, + 3;977,985,986;, + 3;977,986,978;, + 3;978,986,987;, + 3;978,987,988;, + 3;978,988,979;, + 3;979,988,980;, + 3;983,989,984;, + 3;989,990,984;, + 3;984,990,991;, + 3;984,991,992;, + 3;985,984,992;, + 3;985,992,993;, + 3;986,985,993;, + 3;986,993,994;, + 3;987,986,994;, + 3;989,995,990;, + 3;995,996,990;, + 3;990,996,997;, + 3;990,997,991;, + 3;991,997,998;, + 3;991,998,999;, + 3;991,999,1000;, + 3;992,991,1000;, + 3;992,1000,1001;, + 3;992,1001,993;, + 3;993,1001,994;, + 3;995,1002,996;, + 3;1003,996,1002;, + 3;1003,1004,996;, + 3;1005,1004,1003;, + 3;1005,1006,1004;, + 3;852,1007,853;, + 3;1007,1008,853;, + 3;853,1008,856;, + 3;1008,1009,856;, + 3;856,1009,1010;, + 3;856,1010,857;, + 3;857,1010,899;, + 3;1010,1011,899;, + 3;1011,1012,899;, + 3;899,1012,900;, + 3;1009,1011,1010;, + 3;1009,1013,1011;, + 3;1013,1014,1011;, + 3;1011,1014,1012;, + 3;1014,1015,1012;, + 3;1012,1015,1016;, + 3;1012,1016,1017;, + 3;1012,1017,900;, + 3;1018,1013,1009;, + 3;1018,1019,1013;, + 3;1019,1020,1013;, + 3;1013,1020,1014;, + 3;1020,1021,1014;, + 3;1014,1021,1015;, + 3;1015,1021,1016;, + 3;1021,1022,1016;, + 3;1016,1022,1017;, + 3;1017,1022,1023;, + 3;1017,1023,1024;, + 3;1017,1024,900;, + 3;1025,1019,1018;, + 3;1025,1026,1019;, + 3;1019,1026,1020;, + 3;1026,1027,1020;, + 3;1020,1027,1021;, + 3;1027,1028,1021;, + 3;1021,1028,1022;, + 3;1028,1029,1022;, + 3;1022,1029,1023;, + 3;1029,1030,1023;, + 3;1023,1030,1024;, + 3;1031,1025,1018;, + 3;1031,1032,1025;, + 3;1032,1026,1025;, + 3;1032,1033,1026;, + 3;1033,1034,1026;, + 3;1026,1034,1027;, + 3;1034,1035,1027;, + 3;1035,1028,1027;, + 3;1035,1036,1028;, + 3;1036,1037,1028;, + 3;1028,1037,1029;, + 3;1038,1032,1031;, + 3;1038,1033,1032;, + 3;1039,1033,1038;, + 3;1039,1040,1033;, + 3;1040,1041,1033;, + 3;1033,1041,1034;, + 3;1041,1035,1034;, + 3;1042,1035,1041;, + 3;1042,1043,1035;, + 3;1043,1036,1035;, + 3;1044,1038,1031;, + 3;1044,1039,1038;, + 3;1045,1039,1044;, + 3;1045,1046,1039;, + 3;1046,1040,1039;, + 3;1047,1040,1046;, + 3;1047,1048,1040;, + 3;1048,1041,1040;, + 3;1048,1042,1041;, + 3;1049,1042,1048;, + 3;1049,1050,1042;, + 3;1050,1043,1042;, + 3;1050,1051,1043;, + 3;1043,1051,1036;, + 3;1052,1046,1045;, + 3;1047,1046,1052;, + 3;1053,1047,1052;, + 3;1054,1047,1053;, + 3;1054,1055,1047;, + 3;1055,1056,1047;, + 3;1056,1048,1047;, + 3;1056,1049,1048;, + 3;1057,1052,1045;, + 3;1058,1052,1057;, + 3;1053,1052,1058;, + 3;1059,1053,1058;, + 3;1059,1060,1053;, + 3;1060,1054,1053;, + 3;1060,1061,1054;, + 3;1061,1062,1054;, + 3;1062,1055,1054;, + 3;1063,1058,1057;, + 3;1063,1059,1058;, + 3;1064,1059,1063;, + 3;1064,1065,1059;, + 3;1065,1060,1059;, + 3;1065,1066,1060;, + 3;1066,1061,1060;, + 3;1066,1067,1061;, + 3;1067,1068,1061;, + 3;1061,1068,1062;, + 3;1068,1069,1062;, + 3;1069,1055,1062;, + 3;1070,1064,1063;, + 3;1071,1064,1070;, + 3;1071,1065,1064;, + 3;1071,1072,1065;, + 3;1072,1066,1065;, + 3;1072,1073,1066;, + 3;1073,1067,1066;, + 3;1073,1074,1067;, + 3;1067,1074,1068;, + 3;1074,1069,1068;, + 3;1074,1075,1069;, + 3;1075,1076,1069;, + 3;1069,1076,1055;, + 3;1076,1056,1055;, + 3;1077,1071,1070;, + 3;1078,1071,1077;, + 3;1078,1072,1071;, + 3;1079,1072,1078;, + 3;1079,1080,1072;, + 3;1080,1081,1072;, + 3;1072,1081,1073;, + 3;1081,1082,1073;, + 3;1073,1082,1074;, + 3;1077,1070,1083;, + 3;1084,1077,1083;, + 3;1084,1078,1077;, + 3;1079,1078,1084;, + 3;1085,1079,1084;, + 3;1086,1079,1085;, + 3;1086,1080,1079;, + 3;1086,1087,1080;, + 3;1087,1088,1080;, + 3;1080,1088,1081;, + 3;1088,1089,1081;, + 3;1081,1089,1082;, + 3;1090,1084,1083;, + 3;1085,1084,1090;, + 3;1091,1085,1090;, + 3;1092,1085,1091;, + 3;1093,1085,1092;, + 3;1093,1086,1085;, + 3;1094,1086,1093;, + 3;1094,1087,1086;, + 3;1090,1083,1095;, + 3;1096,1090,1095;, + 3;1091,1090,1096;, + 3;1097,1091,1096;, + 3;1092,1091,1097;, + 3;1098,1092,1097;, + 3;1099,1092,1098;, + 3;1100,1092,1099;, + 3;1100,1093,1092;, + 3;1094,1093,1100;, + 3;1096,1095,863;, + 3;1097,1096,863;, + 3;862,1097,863;, + 3;1098,1097,862;, + 3;861,1098,862;, + 3;1099,1098,861;, + 3;860,1099,861;, + 3;1101,1099,860;, + 3;1101,1100,1099;, + 3;1102,1100,1101;, + 3;1102,1094,1100;, + 3;1102,1103,1094;, + 3;1103,1104,1094;, + 3;1094,1104,1087;, + 3;1105,1101,860;, + 3;1106,1101,1105;, + 3;1107,1101,1106;, + 3;1107,1102,1101;, + 3;1108,1102,1107;, + 3;1108,1109,1102;, + 3;1109,1103,1102;, + 3;1105,860,859;, + 3;1106,1105,859;, + 3;868,1106,859;, + 3;1107,1106,868;, + 3;1110,1107,868;, + 3;1110,1108,1107;, + 3;916,1108,1110;, + 3;916,1111,1108;, + 3;1111,1112,1108;, + 3;1108,1112,1109;, + 3;1112,1113,1109;, + 3;1109,1113,1103;, + 3;1110,868,867;, + 3;916,1110,867;, + 3;1114,1115,1116;, + 3;1117,1114,1116;, + 3;1118,1114,1117;, + 3;1118,1119,1114;, + 3;1120,1114,1119;, + 3;1120,1121,1114;, + 3;1114,1121,1122;, + 3;1117,1116,1123;, + 3;1117,1123,1124;, + 3;1125,1117,1124;, + 3;1118,1117,1125;, + 3;1126,1118,1125;, + 3;1127,1118,1126;, + 3;1128,1118,1127;, + 3;1128,1119,1118;, + 3;1123,1116,1129;, + 3;1123,1129,1130;, + 3;1131,1123,1130;, + 3;1124,1123,1131;, + 3;1124,1131,1132;, + 3;1125,1124,1132;, + 3;1116,1133,1129;, + 3;1133,1134,1129;, + 3;1129,1134,1130;, + 3;1130,1134,1135;, + 3;1130,1135,1136;, + 3;1132,1130,1136;, + 3;1132,1131,1130;, + 3;1116,1137,1133;, + 3;1138,1139,1140;, + 3;1141,1138,1140;, + 3;1142,1141,1140;, + 3;1143,1141,1142;, + 3;1144,1143,1142;, + 3;1145,1143,1144;, + 3;1146,1143,1145;, + 3;1147,1143,1146;, + 3;1147,1148,1143;, + 3;1148,1149,1143;, + 3;1148,1150,1149;, + 3;1149,1150,1151;, + 3;1145,1144,1152;, + 3;1145,1152,1153;, + 3;1154,1145,1153;, + 3;1155,1145,1154;, + 3;1155,1146,1145;, + 3;1153,1152,1156;, + 3;1153,1156,1157;, + 3;1158,1153,1157;, + 3;1154,1153,1158;, + 3;1159,1154,1158;, + 3;1160,1154,1159;, + 3;1160,1155,1154;, + 3;1161,1155,1160;, + 3;1162,1155,1161;, + 3;1162,1146,1155;, + 3;1157,1156,1163;, + 3;1157,1163,1164;, + 3;1158,1157,1164;, + 3;1165,1158,1164;, + 3;1159,1158,1165;, + 3;1166,1159,1165;, + 3;1167,1159,1166;, + 3;1167,1161,1159;, + 3;1161,1160,1159;, + 3;1163,1156,1168;, + 3;1163,1168,1169;, + 3;1164,1163,1169;, + 3;1164,1169,1170;, + 3;1171,1164,1170;, + 3;1165,1164,1171;, + 3;1172,1165,1171;, + 3;1166,1165,1172;, + 3;1169,1168,1173;, + 3;1169,1173,1170;, + 3;1170,1173,1174;, + 3;1170,1174,1175;, + 3;1176,1170,1175;, + 3;1171,1170,1176;, + 3;1172,1171,1176;, + 3;1173,1168,1177;, + 3;1173,1177,1174;, + 3;1174,1177,1178;, + 3;1174,1178,1179;, + 3;1175,1174,1179;, + 3;1175,1179,1180;, + 3;1175,1180,1181;, + 3;1176,1175,1181;, + 3;1176,1181,1182;, + 3;1172,1176,1182;, + 3;1172,1182,1183;, + 3;1184,1172,1183;, + 3;1166,1172,1184;, + 3;1178,1185,1179;, + 3;1179,1185,1186;, + 3;1179,1186,1187;, + 3;1179,1187,1180;, + 3;1180,1187,1188;, + 3;1180,1188,1189;, + 3;1180,1189,1190;, + 3;1181,1180,1190;, + 3;1185,1191,1186;, + 3;1186,1191,1192;, + 3;1186,1192,1187;, + 3;1187,1192,1193;, + 3;1187,1193,1188;, + 3;1188,1193,1194;, + 3;1188,1194,1195;, + 3;1189,1188,1195;, + 3;1189,1195,1196;, + 3;1189,1196,1197;, + 3;1190,1189,1197;, + 3;1192,1191,1198;, + 3;1192,1198,1199;, + 3;1193,1192,1199;, + 3;1193,1199,1200;, + 3;1194,1193,1200;, + 3;1194,1200,1201;, + 3;1202,1194,1201;, + 3;1195,1194,1202;, + 3;1195,1202,1196;, + 3;1191,1203,1198;, + 3;1198,1203,1204;, + 3;1199,1198,1204;, + 3;1199,1204,1205;, + 3;1200,1199,1205;, + 3;1200,1205,1206;, + 3;1201,1200,1206;, + 3;1207,1201,1206;, + 3;1202,1201,1207;, + 3;1196,1202,1207;, + 3;1208,1196,1207;, + 3;1197,1196,1208;, + 3;1203,1209,1204;, + 3;1204,1209,1210;, + 3;1205,1204,1210;, + 3;1205,1210,1211;, + 3;1205,1211,1212;, + 3;1213,1205,1212;, + 3;1206,1205,1213;, + 3;1214,1206,1213;, + 3;1207,1206,1214;, + 3;1215,1207,1214;, + 3;1208,1207,1215;, + 3;1209,1216,1210;, + 3;1210,1216,1211;, + 3;1216,1217,1211;, + 3;1211,1217,1218;, + 3;1212,1211,1218;, + 3;1212,1218,1219;, + 3;1220,1212,1219;, + 3;1213,1212,1220;, + 3;1221,1213,1220;, + 3;1214,1213,1221;, + 3;1209,1222,1216;, + 3;1222,1223,1216;, + 3;1216,1223,1217;, + 3;1223,1224,1217;, + 3;1224,1225,1217;, + 3;1217,1225,1226;, + 3;1217,1226,1218;, + 3;1218,1226,1227;, + 3;1219,1218,1227;, + 3;1222,1228,1223;, + 3;1228,1229,1223;, + 3;1223,1229,1224;, + 3;1229,1230,1224;, + 3;1224,1230,1225;, + 3;1230,1231,1225;, + 3;1231,1232,1225;, + 3;1225,1232,1233;, + 3;1225,1233,1226;, + 3;1226,1233,1227;, + 3;1228,1234,1229;, + 3;1229,1234,1230;, + 3;1234,1235,1230;, + 3;1230,1235,1231;, + 3;1235,1236,1231;, + 3;1231,1236,1232;, + 3;1236,1237,1232;, + 3;1232,1237,1238;, + 3;1232,1238,1233;, + 3;1233,1238,1239;, + 3;1227,1233,1239;, + 3;1234,1240,1235;, + 3;1235,1240,1236;, + 3;1240,1241,1236;, + 3;1236,1241,1237;, + 3;1241,1242,1237;, + 3;1237,1242,1243;, + 3;1237,1243,1238;, + 3;1243,1244,1238;, + 3;1238,1244,1245;, + 3;1238,1245,1239;, + 3;1240,1246,1241;, + 3;1246,1247,1241;, + 3;1241,1247,1242;, + 3;1247,1248,1242;, + 3;1242,1248,1249;, + 3;1242,1249,1244;, + 3;1242,1244,1243;, + 3;1250,1247,1246;, + 3;1140,1250,1246;, + 3;1151,1150,1251;, + 3;1244,1249,1245;, + 3;1249,1252,1245;, + 3;1245,1252,1253;, + 3;1239,1245,1253;, + 3;1239,1253,1254;, + 3;1255,1239,1254;, + 3;1227,1239,1255;, + 3;1249,1256,1252;, + 3;1252,1256,1257;, + 3;1253,1252,1257;, + 3;1253,1257,1258;, + 3;1259,1253,1258;, + 3;1254,1253,1259;, + 3;1260,1254,1259;, + 3;1255,1254,1260;, + 3;1249,1248,1256;, + 3;1248,1261,1256;, + 3;1256,1261,1262;, + 3;1256,1262,1257;, + 3;1262,1263,1257;, + 3;1257,1263,1264;, + 3;1257,1264,1265;, + 3;1258,1257,1265;, + 3;1248,1266,1261;, + 3;1266,1267,1261;, + 3;1267,1268,1261;, + 3;1268,1263,1261;, + 3;1262,1261,1263;, + 3;1269,1266,1248;, + 3;1270,1266,1269;, + 3;1270,1271,1266;, + 3;1271,1268,1266;, + 3;1266,1268,1267;, + 3;1247,1269,1248;, + 3;1251,1269,1247;, + 3;1167,1162,1161;, + 3;1272,1162,1167;, + 3;1272,1273,1162;, + 3;1273,1146,1162;, + 3;1274,1146,1273;, + 3;1274,1275,1146;, + 3;1275,1147,1146;, + 3;1272,1167,1276;, + 3;1277,1272,1276;, + 3;1277,1273,1272;, + 3;1278,1273,1277;, + 3;1278,1274,1273;, + 3;1278,1279,1274;, + 3;1274,1279,1275;, + 3;1279,1280,1275;, + 3;1275,1280,1281;, + 3;1275,1281,1147;, + 3;1276,1167,1166;, + 3;1276,1166,1282;, + 3;1276,1282,1283;, + 3;1284,1276,1283;, + 3;1277,1276,1284;, + 3;1285,1277,1284;, + 3;1286,1277,1285;, + 3;1286,1287,1277;, + 3;1287,1278,1277;, + 3;1282,1166,1184;, + 3;1282,1184,1288;, + 3;1283,1282,1288;, + 3;1283,1288,1289;, + 3;1284,1283,1289;, + 3;1284,1289,1290;, + 3;1291,1284,1290;, + 3;1285,1284,1291;, + 3;1292,1285,1291;, + 3;1293,1285,1292;, + 3;1293,1286,1285;, + 3;1288,1184,1294;, + 3;1288,1294,1295;, + 3;1289,1288,1295;, + 3;1289,1295,1296;, + 3;1289,1296,1297;, + 3;1290,1289,1297;, + 3;1291,1290,1297;, + 3;1291,1297,1298;, + 3;1299,1291,1298;, + 3;1292,1291,1299;, + 3;1184,1183,1294;, + 3;1294,1183,1300;, + 3;1294,1300,1301;, + 3;1295,1294,1301;, + 3;1295,1301,1302;, + 3;1296,1295,1302;, + 3;1296,1302,1297;, + 3;1303,1297,1302;, + 3;1298,1297,1303;, + 3;1304,1298,1303;, + 3;1299,1298,1304;, + 3;1183,1182,1300;, + 3;1182,1305,1300;, + 3;1300,1305,1306;, + 3;1300,1306,1307;, + 3;1301,1300,1307;, + 3;1301,1307,1308;, + 3;1309,1301,1308;, + 3;1302,1301,1309;, + 3;1302,1309,1310;, + 3;1303,1302,1310;, + 3;1182,1181,1305;, + 3;1181,1190,1305;, + 3;1305,1190,1311;, + 3;1305,1311,1306;, + 3;1306,1311,1312;, + 3;1306,1312,1307;, + 3;1307,1312,1308;, + 3;1312,1313,1308;, + 3;1308,1313,1314;, + 3;1308,1314,1315;, + 3;1308,1315,1316;, + 3;1309,1308,1316;, + 3;1190,1197,1311;, + 3;1311,1197,1317;, + 3;1311,1317,1312;, + 3;1312,1317,1318;, + 3;1312,1318,1313;, + 3;1313,1318,1319;, + 3;1314,1313,1319;, + 3;1314,1319,1320;, + 3;1314,1320,1315;, + 3;1315,1320,1321;, + 3;1315,1321,1322;, + 3;1316,1315,1322;, + 3;1197,1208,1317;, + 3;1317,1208,1215;, + 3;1317,1215,1323;, + 3;1317,1323,1318;, + 3;1318,1323,1319;, + 3;1319,1323,1324;, + 3;1319,1324,1325;, + 3;1320,1319,1325;, + 3;1320,1325,1321;, + 3;1321,1325,1326;, + 3;1321,1326,1327;, + 3;1322,1321,1327;, + 3;1316,1322,1327;, + 3;1323,1215,1324;, + 3;1215,1214,1324;, + 3;1324,1214,1221;, + 3;1324,1221,1328;, + 3;1324,1328,1329;, + 3;1325,1324,1329;, + 3;1325,1329,1326;, + 3;1329,1330,1326;, + 3;1326,1330,1331;, + 3;1327,1326,1331;, + 3;1221,1220,1328;, + 3;1328,1220,1332;, + 3;1329,1328,1332;, + 3;1329,1332,1330;, + 3;1332,1333,1330;, + 3;1330,1333,1334;, + 3;1330,1334,1335;, + 3;1330,1335,1331;, + 3;1331,1335,1336;, + 3;1337,1331,1336;, + 3;1327,1331,1337;, + 3;1220,1219,1332;, + 3;1332,1219,1338;, + 3;1332,1338,1333;, + 3;1338,1255,1333;, + 3;1333,1255,1260;, + 3;1333,1260,1334;, + 3;1334,1260,1339;, + 3;1334,1339,1335;, + 3;1335,1339,1340;, + 3;1336,1335,1340;, + 3;1219,1227,1338;, + 3;1338,1227,1255;, + 3;1260,1259,1339;, + 3;1339,1259,1258;, + 3;1341,1339,1258;, + 3;1340,1339,1341;, + 3;1340,1341,1342;, + 3;1340,1342,1343;, + 3;1340,1343,1344;, + 3;1336,1340,1344;, + 3;1336,1344,1345;, + 3;1337,1336,1345;, + 3;1258,1265,1341;, + 3;1341,1265,1342;, + 3;1265,1346,1342;, + 3;1342,1346,1347;, + 3;1342,1347,1348;, + 3;1343,1342,1348;, + 3;1343,1348,1349;, + 3;1343,1349,1350;, + 3;1343,1350,1351;, + 3;1344,1343,1351;, + 3;1265,1264,1346;, + 3;1264,1352,1346;, + 3;1346,1352,1353;, + 3;1346,1353,1347;, + 3;1347,1353,1354;, + 3;1347,1354,1355;, + 3;1348,1347,1355;, + 3;1348,1355,1356;, + 3;1349,1348,1356;, + 3;1264,1357,1352;, + 3;1357,1358,1352;, + 3;1352,1358,1353;, + 3;1353,1358,1359;, + 3;1353,1359,1354;, + 3;1354,1359,1360;, + 3;1354,1360,1361;, + 3;1355,1354,1361;, + 3;1356,1355,1361;, + 3;994,1357,1264;, + 3;994,1001,1357;, + 3;1001,1359,1357;, + 3;1357,1359,1358;, + 3;1362,994,1264;, + 3;987,994,1362;, + 3;987,1362,1268;, + 3;988,987,1268;, + 3;988,1268,1271;, + 3;980,988,1271;, + 3;1362,1264,1263;, + 3;1268,1362,1263;, + 3;980,1271,1270;, + 3;1363,980,1270;, + 3;981,980,1363;, + 3;1364,981,1363;, + 3;982,981,1364;, + 3;1365,982,1364;, + 3;973,982,1365;, + 3;974,973,1365;, + 3;1363,1270,1269;, + 3;1150,1363,1269;, + 3;1364,1363,1150;, + 3;1150,1366,1364;, + 3;1366,1365,1364;, + 3;1367,1365,1366;, + 3;1367,1368,1365;, + 3;1368,974,1365;, + 3;975,974,1368;, + 3;975,1368,1367;, + 3;966,975,1367;, + 3;1369,1150,1269;, + 3;1148,1366,1150;, + 3;1370,1366,1148;, + 3;1370,1367,1366;, + 3;1370,966,1367;, + 3;967,966,1370;, + 3;1281,967,1370;, + 3;1280,967,1281;, + 3;1280,959,967;, + 3;1279,959,1280;, + 3;1279,960,959;, + 3;1147,1370,1148;, + 3;1281,1370,1147;, + 3;1001,1000,1359;, + 3;1000,1371,1359;, + 3;1359,1371,1372;, + 3;1359,1372,1360;, + 3;1372,1373,1360;, + 3;1360,1373,1374;, + 3;1361,1360,1374;, + 3;1000,999,1371;, + 3;999,1375,1371;, + 3;1371,1375,1376;, + 3;1372,1371,1376;, + 3;1372,1376,1377;, + 3;1372,1377,1373;, + 3;1377,1378,1373;, + 3;1373,1378,1379;, + 3;1374,1373,1379;, + 3;999,998,1375;, + 3;998,1380,1375;, + 3;1380,1381,1375;, + 3;1375,1381,1382;, + 3;1375,1382,1376;, + 3;1376,1382,1383;, + 3;1376,1383,1377;, + 3;1377,1383,1378;, + 3;997,1380,998;, + 3;1384,1380,997;, + 3;1384,1381,1380;, + 3;1384,1385,1381;, + 3;1385,1386,1381;, + 3;1381,1386,1382;, + 3;1386,1387,1382;, + 3;1382,1387,1388;, + 3;1383,1382,1388;, + 3;1389,1384,997;, + 3;1389,1390,1384;, + 3;1390,1385,1384;, + 3;1390,1391,1385;, + 3;1391,1386,1385;, + 3;1392,1386,1391;, + 3;1392,1393,1386;, + 3;1393,1394,1386;, + 3;1386,1394,1387;, + 3;996,1389,997;, + 3;1395,1389,996;, + 3;1395,1390,1389;, + 3;1395,1396,1390;, + 3;1396,1391,1390;, + 3;1396,1397,1391;, + 3;1397,1392,1391;, + 3;1397,1398,1392;, + 3;1392,1398,1399;, + 3;1392,1399,1393;, + 3;1393,1399,1400;, + 3;1393,1400,1394;, + 3;1006,1395,996;, + 3;1006,1401,1395;, + 3;1401,1396,1395;, + 3;1401,1402,1396;, + 3;1402,1397,1396;, + 3;1402,1403,1397;, + 3;1403,1404,1397;, + 3;1405,1397,1404;, + 3;1405,1406,1397;, + 3;1406,1398,1397;, + 3;1006,1407,1401;, + 3;1407,1408,1401;, + 3;1408,1402,1401;, + 3;1409,1402,1408;, + 3;1409,1410,1402;, + 3;1402,1410,1403;, + 3;1410,1411,1403;, + 3;1403,1411,1404;, + 3;1411,1405,1404;, + 3;1412,1407,1006;, + 3;1412,1408,1407;, + 3;1412,1413,1408;, + 3;1413,1409,1408;, + 3;1413,1414,1409;, + 3;1414,1415,1409;, + 3;1409,1415,1410;, + 3;1416,1412,1006;, + 3;1416,1417,1412;, + 3;1417,1413,1412;, + 3;1417,1418,1413;, + 3;1418,902,1413;, + 3;1413,902,1414;, + 3;902,901,1414;, + 3;901,1419,1414;, + 3;1419,1420,1414;, + 3;1414,1420,1415;, + 3;1421,1417,1416;, + 3;1421,1422,1417;, + 3;1417,1422,1418;, + 3;1422,896,1418;, + 3;896,902,1418;, + 3;1423,1422,1421;, + 3;1423,897,1422;, + 3;1422,897,896;, + 3;1424,1423,1421;, + 3;1424,1425,1423;, + 3;1425,891,1423;, + 3;891,898,1423;, + 3;1423,898,897;, + 3;893,1425,1424;, + 3;892,1425,893;, + 3;892,891,1425;, + 3;901,1420,1419;, + 3;900,1420,901;, + 3;900,1024,1420;, + 3;1024,1426,1420;, + 3;1426,1415,1420;, + 3;1426,1030,1415;, + 3;1030,1410,1415;, + 3;1030,1427,1410;, + 3;1427,1428,1410;, + 3;1410,1428,1411;, + 3;1024,1030,1426;, + 3;1428,1405,1411;, + 3;1428,1429,1405;, + 3;1429,1406,1405;, + 3;1429,1430,1406;, + 3;1430,1431,1406;, + 3;1406,1431,1398;, + 3;1431,1432,1398;, + 3;1398,1432,1399;, + 3;1433,1429,1428;, + 3;1433,1434,1429;, + 3;1434,1430,1429;, + 3;1434,1435,1430;, + 3;1435,1431,1430;, + 3;1435,1436,1431;, + 3;1431,1436,1432;, + 3;1427,1433,1428;, + 3;1437,1433,1427;, + 3;1438,1433,1437;, + 3;1438,1439,1433;, + 3;1439,1434,1433;, + 3;1439,1440,1434;, + 3;1440,1435,1434;, + 3;1440,1441,1435;, + 3;1441,1442,1435;, + 3;1442,1436,1435;, + 3;1443,1437,1427;, + 3;1437,1443,1444;, + 3;1438,1437,1444;, + 3;1445,1438,1444;, + 3;1446,1438,1445;, + 3;1446,1447,1438;, + 3;1438,1447,1439;, + 3;1443,1427,1030;, + 3;1029,1443,1030;, + 3;1448,1443,1029;, + 3;1444,1443,1448;, + 3;1449,1444,1448;, + 3;1450,1444,1449;, + 3;1450,1445,1444;, + 3;1451,1445,1450;, + 3;1451,1452,1445;, + 3;1452,1446,1445;, + 3;1037,1448,1029;, + 3;1449,1448,1037;, + 3;1036,1449,1037;, + 3;1051,1449,1036;, + 3;1051,1450,1449;, + 3;1451,1450,1051;, + 3;1050,1451,1051;, + 3;1453,1451,1050;, + 3;1453,1454,1451;, + 3;1454,1452,1451;, + 3;1454,1455,1452;, + 3;1455,1456,1452;, + 3;1456,1457,1452;, + 3;1457,1446,1452;, + 3;1453,1050,1458;, + 3;1135,1453,1458;, + 3;1134,1453,1135;, + 3;1454,1453,1134;, + 3;1133,1454,1134;, + 3;1133,1455,1454;, + 3;1459,1455,1133;, + 3;1458,1050,1049;, + 3;1460,1458,1049;, + 3;1135,1458,1460;, + 3;1136,1135,1460;, + 3;1136,1460,1076;, + 3;1136,1076,1075;, + 3;1075,1461,1136;, + 3;1461,1132,1136;, + 3;1125,1132,1461;, + 3;1460,1049,1056;, + 3;1076,1460,1056;, + 3;1074,1461,1075;, + 3;1082,1461,1074;, + 3;1082,1125,1461;, + 3;1089,1125,1082;, + 3;1126,1125,1089;, + 3;1088,1126,1089;, + 3;1127,1126,1088;, + 3;1087,1127,1088;, + 3;1104,1127,1087;, + 3;1462,1127,1104;, + 3;1462,1128,1127;, + 3;1463,1128,1462;, + 3;1464,1128,1463;, + 3;1464,1465,1128;, + 3;1465,1119,1128;, + 3;1103,1462,1104;, + 3;1113,1462,1103;, + 3;1113,1463,1462;, + 3;1466,1463,1113;, + 3;1466,1464,1463;, + 3;1466,1467,1464;, + 3;1464,1467,1465;, + 3;1468,1465,1467;, + 3;1468,1469,1465;, + 3;1469,1470,1465;, + 3;1465,1470,1119;, + 3;1119,1470,1120;, + 3;1112,1466,1113;, + 3;1111,1466,1112;, + 3;1111,1471,1466;, + 3;1471,1467,1466;, + 3;1472,1467,1471;, + 3;1472,1468,1467;, + 3;1472,1473,1468;, + 3;1473,1469,1468;, + 3;1474,1469,1473;, + 3;1474,1475,1469;, + 3;1475,1470,1469;, + 3;1475,1476,1470;, + 3;1470,1476,1120;, + 3;1477,1471,1111;, + 3;1478,1471,1477;, + 3;1478,1472,1471;, + 3;1479,1472,1478;, + 3;1479,1473,1472;, + 3;1480,1473,1479;, + 3;1480,1481,1473;, + 3;1481,1474,1473;, + 3;1481,1482,1474;, + 3;1482,1475,1474;, + 3;1477,1111,916;, + 3;915,1477,916;, + 3;1483,1477,915;, + 3;1483,1478,1477;, + 3;1484,1478,1483;, + 3;1484,1479,1478;, + 3;1485,1479,1484;, + 3;1485,1480,1479;, + 3;1486,1480,1485;, + 3;1486,1487,1480;, + 3;1487,1481,1480;, + 3;1488,1481,1487;, + 3;1488,1482,1481;, + 3;1489,1483,915;, + 3;1490,1483,1489;, + 3;1490,1484,1483;, + 3;1491,1484,1490;, + 3;1491,1485,1484;, + 3;1492,1485,1491;, + 3;1492,1486,1485;, + 3;1493,1486,1492;, + 3;1493,1494,1486;, + 3;1494,1487,1486;, + 3;1494,1488,1487;, + 3;1489,915,920;, + 3;926,1489,920;, + 3;926,1490,1489;, + 3;926,1491,1490;, + 3;926,1492,1491;, + 3;925,1492,926;, + 3;925,1495,1492;, + 3;1495,1493,1492;, + 3;1496,1493,1495;, + 3;1496,1497,1493;, + 3;1497,1494,1493;, + 3;1497,1498,1494;, + 3;1498,1499,1494;, + 3;1494,1499,1488;, + 3;1495,925,924;, + 3;1495,924,932;, + 3;1500,1495,932;, + 3;1500,1496,1495;, + 3;1500,1501,1496;, + 3;1501,1497,1496;, + 3;1501,1502,1497;, + 3;1502,1503,1497;, + 3;1497,1503,1498;, + 3;1503,1504,1498;, + 3;1498,1504,1499;, + 3;1500,932,941;, + 3;1501,1500,941;, + 3;1501,941,1505;, + 3;1501,1505,1502;, + 3;1502,1505,1506;, + 3;1502,1506,1507;, + 3;1502,1507,1503;, + 3;1507,1508,1503;, + 3;1503,1508,1504;, + 3;1508,1509,1504;, + 3;1504,1509,1510;, + 3;1504,1510,1499;, + 3;1505,941,940;, + 3;1505,940,939;, + 3;1505,939,1506;, + 3;1506,939,948;, + 3;1506,948,1511;, + 3;1507,1506,1511;, + 3;1507,1511,1508;, + 3;1508,1511,1512;, + 3;1508,1512,1513;, + 3;1508,1513,1509;, + 3;1513,1514,1509;, + 3;1509,1514,1293;, + 3;1509,1293,1515;, + 3;1509,1515,1510;, + 3;1511,948,947;, + 3;1511,947,1512;, + 3;1512,947,954;, + 3;1512,954,1516;, + 3;1513,1512,1516;, + 3;1513,1516,1514;, + 3;1514,1516,1517;, + 3;1514,1517,1286;, + 3;1514,1286,1293;, + 3;1516,954,953;, + 3;1516,953,1517;, + 3;953,961,1517;, + 3;1517,961,1518;, + 3;1286,1517,1518;, + 3;1286,1518,1287;, + 3;1287,1518,1279;, + 3;1287,1279,1278;, + 3;1518,961,960;, + 3;1518,960,1279;, + 3;1515,1293,1292;, + 3;1515,1292,1519;, + 3;1510,1515,1519;, + 3;1510,1519,1520;, + 3;1510,1520,1521;, + 3;1499,1510,1521;, + 3;1499,1521,1488;, + 3;1519,1292,1299;, + 3;1520,1519,1299;, + 3;1520,1299,1304;, + 3;1520,1304,1522;, + 3;1521,1520,1522;, + 3;1488,1521,1522;, + 3;1488,1522,1482;, + 3;1522,1523,1482;, + 3;1482,1523,1475;, + 3;1523,1524,1475;, + 3;1475,1524,1525;, + 3;1475,1525,1476;, + 3;1522,1304,1523;, + 3;1523,1304,1526;, + 3;1523,1526,1524;, + 3;1526,1310,1524;, + 3;1524,1310,1527;, + 3;1524,1527,1528;, + 3;1524,1528,1525;, + 3;1304,1303,1526;, + 3;1526,1303,1310;, + 3;1309,1527,1310;, + 3;1309,1316,1527;, + 3;1527,1316,1528;, + 3;1528,1316,1529;, + 3;1528,1529,1530;, + 3;1531,1528,1530;, + 3;1532,1528,1531;, + 3;1532,1531,1533;, + 3;1532,1533,1476;, + 3;1316,1534,1529;, + 3;1529,1534,1535;, + 3;1529,1535,1536;, + 3;1530,1529,1536;, + 3;1530,1536,1537;, + 3;1531,1530,1537;, + 3;1531,1537,1538;, + 3;1531,1538,1533;, + 3;1316,1539,1534;, + 3;1534,1539,1535;, + 3;1535,1539,1540;, + 3;1535,1540,1541;, + 3;1536,1535,1541;, + 3;1536,1541,1542;, + 3;1536,1542,1543;, + 3;1544,1536,1543;, + 3;1537,1536,1544;, + 3;1538,1537,1544;, + 3;1539,1316,1327;, + 3;1539,1327,1545;, + 3;1539,1545,1540;, + 3;1540,1545,1546;, + 3;1540,1546,1547;, + 3;1548,1540,1547;, + 3;1541,1540,1548;, + 3;1541,1548,1549;, + 3;1542,1541,1549;, + 3;1545,1327,1550;, + 3;1545,1550,1546;, + 3;1546,1550,1551;, + 3;1547,1546,1551;, + 3;1547,1551,1552;, + 3;1547,1552,1553;, + 3;1549,1547,1553;, + 3;1549,1548,1547;, + 3;1550,1327,1554;, + 3;1555,1550,1554;, + 3;1551,1550,1555;, + 3;1551,1555,1556;, + 3;1551,1556,1557;, + 3;1552,1551,1557;, + 3;1552,1557,1558;, + 3;1558,1553,1552;, + 3;1327,1559,1554;, + 3;1554,1559,1560;, + 3;1554,1560,1561;, + 3;1554,1561,1562;, + 3;1555,1554,1562;, + 3;1555,1562,1556;, + 3;1559,1327,1337;, + 3;1559,1337,1560;, + 3;1560,1337,1563;, + 3;1560,1563,1561;, + 3;1564,1561,1563;, + 3;1565,1561,1564;, + 3;1565,1562,1561;, + 3;1556,1562,1565;, + 3;1566,1556,1565;, + 3;1567,1556,1566;, + 3;1567,1557,1556;, + 3;1337,1568,1563;, + 3;1563,1568,1569;, + 3;1563,1569,1570;, + 3;1571,1563,1570;, + 3;1564,1563,1571;, + 3;1456,1564,1571;, + 3;1565,1564,1456;, + 3;1337,1345,1568;, + 3;1345,1572,1568;, + 3;1568,1572,1573;, + 3;1568,1573,1574;, + 3;1568,1574,1575;, + 3;1568,1575,1576;, + 3;1569,1568,1576;, + 3;1570,1569,1576;, + 3;1571,1570,1576;, + 3;1456,1571,1576;, + 3;1456,1576,1457;, + 3;1345,1577,1572;, + 3;1345,1578,1577;, + 3;1345,1579,1578;, + 3;1345,1344,1579;, + 3;1576,1575,1580;, + 3;1576,1580,1581;, + 3;1576,1581,1582;, + 3;1583,1576,1582;, + 3;1457,1576,1583;, + 3;1457,1583,1446;, + 3;1446,1583,1447;, + 3;1583,1584,1447;, + 3;1583,1585,1584;, + 3;1583,1586,1585;, + 3;1583,1582,1586;, + 3;1455,1565,1456;, + 3;1587,1565,1455;, + 3;1566,1565,1587;, + 3;1588,1566,1587;, + 3;1588,1567,1566;, + 3;1122,1587,1455;, + 3;1567,1558,1557;, + 3;1589,1558,1567;, + 3;1590,1558,1589;, + 3;1590,1591,1558;, + 3;1591,1592,1558;, + 3;1592,1553,1558;, + 3;1593,1553,1592;, + 3;1549,1553,1593;, + 3;1589,1567,1594;, + 3;1595,1589,1594;, + 3;1595,1590,1589;, + 3;1596,1590,1595;, + 3;1596,1591,1590;, + 3;1594,1567,1588;, + 3;1597,1594,1588;, + 3;1598,1594,1597;, + 3;1599,1594,1598;, + 3;1599,1595,1594;, + 3;1600,1595,1599;, + 3;1600,1601,1595;, + 3;1601,1596,1595;, + 3;1602,1596,1601;, + 3;1603,1597,1588;, + 3;1604,1597,1603;, + 3;1604,1599,1597;, + 3;1597,1599,1598;, + 3;1603,1588,1587;, + 3;1603,1587,1605;, + 3;1593,1592,1591;, + 3;1606,1593,1591;, + 3;1606,1607,1593;, + 3;1607,1549,1593;, + 3;1542,1549,1607;, + 3;1542,1607,1608;, + 3;1543,1542,1608;, + 3;1609,1543,1608;, + 3;1544,1543,1609;, + 3;1607,1606,1610;, + 3;1608,1607,1610;, + 3;1608,1610,1611;, + 3;1612,1608,1611;, + 3;1609,1608,1612;, + 3;1609,1612,1613;, + 3;1609,1613,1614;, + 3;1544,1609,1614;, + 3;1538,1544,1614;, + 3;1538,1614,1615;, + 3;1533,1538,1615;, + 3;1612,1611,1616;, + 3;1612,1616,1613;, + 3;1613,1616,1617;, + 3;1618,1613,1617;, + 3;1613,1618,1619;, + 3;1614,1613,1619;, + 3;1614,1619,1620;, + 3;1615,1614,1620;, + 3;1615,1620,1621;, + 3;1622,1615,1621;, + 3;1533,1615,1622;, + 3;1476,1533,1622;, + 3;1617,1616,1602;, + 3;1617,1602,1601;, + 3;1617,1601,1600;, + 3;1618,1617,1600;, + 3;1618,1600,1619;, + 3;1619,1600,1623;, + 3;1619,1623,1604;, + 3;1620,1619,1604;, + 3;1620,1604,1621;, + 3;1621,1604,1121;, + 3;1622,1621,1121;, + 3;1120,1622,1121;, + 3;1476,1622,1120;, + 3;1623,1600,1599;, + 3;1604,1623,1599;, + 3;1121,1604,1603;, + 3;1624,1121,1603;, + 3;1447,1625,1439;, + 3;1439,1625,1626;, + 3;1439,1626,1440;, + 3;1626,1627,1440;, + 3;1627,1628,1440;, + 3;1628,1441,1440;, + 3;1628,1629,1441;, + 3;1629,1630,1441;, + 3;1630,1631,1441;, + 3;1631,1632,1441;, + 3;1441,1632,1633;, + 3;1441,1633,1442;, + 3;1442,1633,1634;, + 3;1442,1634,1635;, + 3;1442,1635,1436;, + 3;1631,1636,1632;, + 3;1636,1637,1632;, + 3;1638,1632,1637;, + 3;1638,1639,1632;, + 3;1639,1640,1632;, + 3;1632,1640,1633;, + 3;1640,1641,1633;, + 3;1641,1642,1633;, + 3;1634,1633,1642;, + 3;1634,1642,1643;, + 3;1644,1634,1643;, + 3;1635,1634,1644;, + 3;1645,1639,1638;, + 3;1646,1639,1645;, + 3;1647,1639,1646;, + 3;1647,1648,1639;, + 3;1648,1649,1639;, + 3;1639,1649,1640;, + 3;1649,1641,1640;, + 3;1649,1650,1641;, + 3;1650,1651,1641;, + 3;1651,1652,1641;, + 3;1641,1652,1642;, + 3;1652,1653,1642;, + 3;1643,1642,1653;, + 3;1654,1648,1647;, + 3;1654,1349,1648;, + 3;1349,1356,1648;, + 3;1648,1356,1649;, + 3;1649,1356,1655;, + 3;1649,1655,1650;, + 3;1650,1655,1656;, + 3;1650,1656,1651;, + 3;1656,1657,1651;, + 3;1657,1658,1651;, + 3;1651,1658,1652;, + 3;1659,1349,1654;, + 3;1350,1349,1659;, + 3;1356,1361,1655;, + 3;1361,1374,1655;, + 3;1655,1374,1656;, + 3;1374,1660,1656;, + 3;1656,1660,1661;, + 3;1656,1661,1657;, + 3;1657,1661,1662;, + 3;1657,1662,1658;, + 3;1662,1663,1658;, + 3;1658,1663,1664;, + 3;1658,1664,1652;, + 3;1652,1664,1653;, + 3;1374,1379,1660;, + 3;1660,1379,1665;, + 3;1660,1665,1666;, + 3;1660,1666,1661;, + 3;1666,1667,1661;, + 3;1661,1667,1663;, + 3;1662,1661,1663;, + 3;1379,1668,1665;, + 3;1665,1668,1669;, + 3;1665,1669,1667;, + 3;1666,1665,1667;, + 3;1378,1668,1379;, + 3;1378,1670,1668;, + 3;1670,1671,1668;, + 3;1668,1671,1669;, + 3;1669,1671,1672;, + 3;1667,1669,1672;, + 3;1667,1672,1663;, + 3;1663,1672,1673;, + 3;1663,1673,1664;, + 3;1378,1674,1670;, + 3;1674,1671,1670;, + 3;1674,1675,1671;, + 3;1675,1676,1671;, + 3;1671,1676,1677;, + 3;1671,1677,1672;, + 3;1677,1678,1672;, + 3;1672,1678,1673;, + 3;1673,1678,1679;, + 3;1664,1673,1679;, + 3;1383,1674,1378;, + 3;1383,1680,1674;, + 3;1680,1675,1674;, + 3;1680,1681,1675;, + 3;1675,1681,1676;, + 3;1681,1682,1676;, + 3;1676,1682,1677;, + 3;1677,1682,1683;, + 3;1677,1683,1678;, + 3;1683,1684,1678;, + 3;1685,1678,1684;, + 3;1679,1678,1685;, + 3;1664,1679,1685;, + 3;1383,1388,1680;, + 3;1388,1681,1680;, + 3;1388,1686,1681;, + 3;1686,1682,1681;, + 3;1687,1682,1686;, + 3;1687,1688,1682;, + 3;1688,1689,1682;, + 3;1682,1689,1683;, + 3;1689,1684,1683;, + 3;1689,1690,1684;, + 3;1690,1691,1684;, + 3;1691,1685,1684;, + 3;1388,1687,1686;, + 3;1387,1687,1388;, + 3;1692,1687,1387;, + 3;1692,1693,1687;, + 3;1693,1688,1687;, + 3;1693,1694,1688;, + 3;1694,1695,1688;, + 3;1695,1689,1688;, + 3;1695,1690,1689;, + 3;1695,1696,1690;, + 3;1696,1697,1690;, + 3;1697,1691,1690;, + 3;1394,1692,1387;, + 3;1394,1698,1692;, + 3;1692,1698,1693;, + 3;1698,1694,1693;, + 3;1698,1699,1694;, + 3;1699,1700,1694;, + 3;1700,1701,1694;, + 3;1701,1696,1694;, + 3;1694,1696,1695;, + 3;1394,1400,1698;, + 3;1400,1699,1698;, + 3;1400,1700,1699;, + 3;1400,1702,1700;, + 3;1702,1703,1700;, + 3;1703,1701,1700;, + 3;1703,1704,1701;, + 3;1704,1696,1701;, + 3;1704,1705,1696;, + 3;1705,1697,1696;, + 3;1705,1706,1697;, + 3;1706,1691,1697;, + 3;1399,1702,1400;, + 3;1432,1702,1399;, + 3;1432,1707,1702;, + 3;1707,1703,1702;, + 3;1707,1708,1703;, + 3;1708,1704,1703;, + 3;1708,1709,1704;, + 3;1709,1705,1704;, + 3;1710,1705,1709;, + 3;1710,1711,1705;, + 3;1711,1706,1705;, + 3;1432,1712,1707;, + 3;1712,1709,1707;, + 3;1707,1709,1708;, + 3;1436,1712,1432;, + 3;1635,1712,1436;, + 3;1635,1644,1712;, + 3;1712,1644,1713;, + 3;1712,1713,1709;, + 3;1713,1710,1709;, + 3;1713,1711,1710;, + 3;1713,1644,1711;, + 3;1644,1643,1711;, + 3;1711,1643,1706;, + 3;1643,1653,1706;, + 3;1653,1685,1706;, + 3;1706,1685,1691;, + 3;1653,1664,1685;, + 3;1714,1715,1716;, + 3;1716,1715,1717;, + 3;1716,1717,1718;, + 3;1718,1717,1719;, + 3;1718,1719,1720;, + 3;1720,1719,1721;, + 3;1720,1721,1722;, + 3;1715,1723,1717;, + 3;1717,1723,1724;, + 3;1717,1724,1725;, + 3;1719,1717,1725;, + 3;1719,1725,1721;, + 3;1721,1725,1726;, + 3;1721,1726,1727;, + 3;1728,1721,1727;, + 3;1722,1721,1728;, + 3;1722,1728,1729;, + 3;1729,1728,1730;, + 3;1724,1723,1731;, + 3;1724,1731,1732;, + 3;1725,1724,1732;, + 3;1725,1732,1726;, + 3;1723,1733,1731;, + 3;1730,1728,1734;, + 3;1734,1728,1735;, + 3;1728,1727,1735;, + 3;1735,1727,1736;, + 3;1737,1738,1739;, + 3;1738,1740,1739;, + 3;1739,1740,1741;, + 3;1739,1741,1742;, + 3;1741,1743,1742;, + 3;1742,1743,1744;, + 3;1738,1745,1740;, + 3;1745,1746,1740;, + 3;1740,1746,1741;, + 3;1746,1747,1741;, + 3;1741,1747,1743;, + 3;1745,1748,1746;, + 3;1748,1749,1746;, + 3;1749,1750,1746;, + 3;1746,1750,1747;, + 3;1748,1751,1749;, + 3;1751,1752,1749;, + 3;1749,1752,1753;, + 3;1753,1754,1749;, + 3;1749,1754,1750;; + } + + MeshTextureCoords { + 1755; + 0.102094;0.917452;, + 0.102128;0.916902;, + 0.102030;0.915089;, + 0.101900;0.913622;, + 0.101454;0.911430;, + 0.070912;0.940213;, + 0.061763;0.919821;, + 0.066451;0.930434;, + 0.076314;0.894788;, + 0.060279;0.900457;, + 0.085815;0.891588;, + 0.099616;0.925368;, + 0.100626;0.923391;, + 0.099357;0.925732;, + 0.081726;0.899679;, + 0.084452;0.899236;, + 0.081726;0.899679;, + 0.084452;0.899236;, + 0.087698;0.899355;, + 0.087698;0.899355;, + 0.081726;0.899679;, + 0.081726;0.899679;, + 0.084452;0.899236;, + 0.087698;0.899355;, + 0.090349;0.899970;, + 0.090349;0.899970;, + 0.079651;0.900332;, + 0.079651;0.900332;, + 0.079651;0.900332;, + 0.079651;0.900332;, + 0.077671;0.901263;, + 0.077671;0.901263;, + 0.075831;0.902450;, + 0.075831;0.902450;, + 0.074153;0.903878;, + 0.074153;0.903878;, + 0.072329;0.905933;, + 0.077671;0.901263;, + 0.075831;0.902450;, + 0.074153;0.903878;, + 0.072329;0.905933;, + 0.072329;0.905933;, + 0.070872;0.908288;, + 0.077671;0.901263;, + 0.072329;0.905933;, + 0.074153;0.903878;, + 0.075831;0.902450;, + 0.087698;0.899355;, + 0.090349;0.899970;, + 0.092383;0.900764;, + 0.092383;0.900764;, + 0.090349;0.899970;, + 0.092383;0.900764;, + 0.094295;0.901824;, + 0.094295;0.901824;, + 0.092383;0.900764;, + 0.094295;0.901824;, + 0.096059;0.903136;, + 0.096059;0.903136;, + 0.094295;0.901824;, + 0.096059;0.903136;, + 0.097640;0.904671;, + 0.097640;0.904671;, + 0.096059;0.903136;, + 0.097640;0.904671;, + 0.099014;0.906410;, + 0.099014;0.906410;, + 0.097640;0.904671;, + 0.099014;0.906410;, + 0.100144;0.908276;, + 0.100144;0.908276;, + 0.099014;0.906410;, + 0.100144;0.908276;, + 0.100847;0.909801;, + 0.100847;0.909801;, + 0.100144;0.908276;, + 0.100847;0.909801;, + 0.101409;0.911409;, + 0.101409;0.911409;, + 0.100847;0.909801;, + 0.101409;0.911409;, + 0.101900;0.913622;, + 0.101900;0.913622;, + 0.101409;0.911409;, + 0.101900;0.913622;, + 0.102030;0.915089;, + 0.102030;0.915089;, + 0.101900;0.913622;, + 0.102030;0.915089;, + 0.102128;0.916902;, + 0.102128;0.916902;, + 0.102128;0.916902;, + 0.102030;0.915089;, + 0.102128;0.916902;, + 0.101884;0.919123;, + 0.101884;0.919123;, + 0.101884;0.919123;, + 0.101884;0.919123;, + 0.101396;0.921296;, + 0.101396;0.921296;, + 0.101396;0.921296;, + 0.101396;0.921296;, + 0.100626;0.923391;, + 0.100626;0.923391;, + 0.100626;0.923391;, + 0.100626;0.923391;, + 0.099357;0.925732;, + 0.099357;0.925732;, + 0.099357;0.925732;, + 0.099357;0.925732;, + 0.097638;0.928069;, + 0.097638;0.928069;, + 0.097638;0.928069;, + 0.097638;0.928069;, + 0.096074;0.929536;, + 0.096074;0.929536;, + 0.096074;0.929536;, + 0.096074;0.929536;, + 0.094279;0.930915;, + 0.094279;0.930915;, + 0.094279;0.930915;, + 0.094279;0.930915;, + 0.092402;0.931912;, + 0.092402;0.931912;, + 0.092402;0.931912;, + 0.092402;0.931912;, + 0.090320;0.932764;, + 0.090320;0.932764;, + 0.090320;0.932764;, + 0.090320;0.932764;, + 0.088259;0.933223;, + 0.088259;0.933223;, + 0.088259;0.933223;, + 0.088259;0.933223;, + 0.086057;0.933489;, + 0.086057;0.933489;, + 0.086057;0.933489;, + 0.086057;0.933489;, + 0.083848;0.933373;, + 0.083848;0.933373;, + 0.083848;0.933373;, + 0.083848;0.933373;, + 0.081758;0.933053;, + 0.081758;0.933053;, + 0.081758;0.933053;, + 0.081758;0.933053;, + 0.079630;0.932345;, + 0.079630;0.932345;, + 0.079630;0.932345;, + 0.079630;0.932345;, + 0.077690;0.931475;, + 0.077690;0.931475;, + 0.077690;0.931475;, + 0.077690;0.931475;, + 0.075815;0.930223;, + 0.075815;0.930223;, + 0.075815;0.930223;, + 0.075815;0.930223;, + 0.074158;0.928862;, + 0.074158;0.928862;, + 0.074158;0.928862;, + 0.074158;0.928862;, + 0.072635;0.927046;, + 0.072635;0.927046;, + 0.072635;0.927046;, + 0.072635;0.927046;, + 0.071128;0.924864;, + 0.071128;0.924864;, + 0.071128;0.924864;, + 0.071128;0.924864;, + 0.069980;0.922357;, + 0.069980;0.922357;, + 0.069980;0.922357;, + 0.069980;0.922357;, + 0.069355;0.920219;, + 0.069355;0.920219;, + 0.069355;0.920219;, + 0.069355;0.920219;, + 0.069024;0.918055;, + 0.069024;0.918055;, + 0.069024;0.918055;, + 0.069024;0.918055;, + 0.068925;0.915787;, + 0.068925;0.915787;, + 0.068925;0.915787;, + 0.068925;0.915787;, + 0.069054;0.914193;, + 0.069054;0.914193;, + 0.069054;0.914193;, + 0.069343;0.912487;, + 0.069054;0.914193;, + 0.069343;0.912487;, + 0.069966;0.910348;, + 0.069966;0.910348;, + 0.069343;0.912487;, + 0.069343;0.912487;, + 0.069966;0.910348;, + 0.070872;0.908288;, + 0.070872;0.908288;, + 0.069966;0.910348;, + 0.070872;0.908288;, + 0.101900;0.913622;, + 0.101409;0.911409;, + 0.100847;0.909801;, + 0.100144;0.908276;, + 0.100001;0.907927;, + 0.101861;0.910786;, + 0.102254;0.914683;, + 0.102030;0.915089;, + 0.099014;0.906410;, + 0.097299;0.903700;, + 0.099913;0.906590;, + 0.100516;0.905294;, + 0.102766;0.909679;, + 0.103325;0.914002;, + 0.102833;0.918092;, + 0.097640;0.904671;, + 0.096059;0.903136;, + 0.093681;0.900945;, + 0.093150;0.899013;, + 0.097237;0.901654;, + 0.102095;0.904158;, + 0.105191;0.911624;, + 0.104769;0.917642;, + 0.094295;0.901824;, + 0.092383;0.900764;, + 0.089498;0.899270;, + 0.086734;0.897233;, + 0.093969;0.897215;, + 0.098702;0.896175;, + 0.108068;0.907806;, + 0.107013;0.918408;, + 0.090349;0.899970;, + 0.087698;0.899355;, + 0.084940;0.898755;, + 0.080257;0.899634;, + 0.080142;0.898128;, + 0.084181;0.895388;, + 0.085815;0.891588;, + 0.090848;0.885504;, + 0.084452;0.899236;, + 0.081726;0.899679;, + 0.079651;0.900332;, + 0.077671;0.901263;, + 0.074774;0.903001;, + 0.076381;0.901252;, + 0.075754;0.900193;, + 0.074710;0.898523;, + 0.076314;0.894788;, + 0.075831;0.902450;, + 0.074153;0.903878;, + 0.072329;0.905933;, + 0.071289;0.907463;, + 0.072904;0.904221;, + 0.072039;0.903360;, + 0.067538;0.906498;, + 0.064564;0.904890;, + 0.060279;0.900457;, + 0.070872;0.908288;, + 0.069575;0.911430;, + 0.070305;0.908004;, + 0.069250;0.907408;, + 0.067966;0.912237;, + 0.065836;0.915018;, + 0.061763;0.919821;, + 0.069966;0.910348;, + 0.069343;0.912487;, + 0.069054;0.914193;, + 0.068935;0.915238;, + 0.068788;0.912239;, + 0.068536;0.916916;, + 0.067225;0.917597;, + 0.065837;0.921065;, + 0.066451;0.930434;, + 0.068925;0.915787;, + 0.069024;0.918055;, + 0.069356;0.920274;, + 0.068667;0.919823;, + 0.068262;0.923011;, + 0.068933;0.928531;, + 0.075828;0.937782;, + 0.070912;0.940213;, + 0.069355;0.920219;, + 0.070281;0.923253;, + 0.069576;0.922942;, + 0.070513;0.927395;, + 0.073792;0.931035;, + 0.077059;0.935475;, + 0.088221;0.940456;, + 0.069980;0.922357;, + 0.071128;0.924864;, + 0.072635;0.927046;, + 0.071116;0.926099;, + 0.074006;0.929278;, + 0.078047;0.933309;, + 0.082563;0.934734;, + 0.086847;0.937301;, + 0.074158;0.928862;, + 0.075815;0.930223;, + 0.077532;0.931679;, + 0.081665;0.933296;, + 0.086067;0.933749;, + 0.086692;0.934911;, + 0.090886;0.934562;, + 0.096319;0.934166;, + 0.077690;0.931475;, + 0.081758;0.933053;, + 0.086057;0.933489;, + 0.090465;0.933132;, + 0.094517;0.931225;, + 0.095274;0.932497;, + 0.098990;0.929329;, + 0.103491;0.926192;, + 0.103114;0.933576;, + 0.090320;0.932764;, + 0.094279;0.930915;, + 0.097946;0.928296;, + 0.101275;0.923630;, + 0.102366;0.924160;, + 0.097638;0.928069;, + 0.099357;0.925732;, + 0.101454;0.921259;, + 0.100626;0.923391;, + 0.101396;0.921296;, + 0.101884;0.919123;, + 0.102128;0.916902;, + 0.076340;0.881071;, + 0.099661;0.883427;, + 0.113073;0.895713;, + 0.115185;0.913327;, + 0.110203;0.920816;, + 0.056944;0.894930;, + 0.054549;0.877455;, + 0.071892;0.868333;, + 0.092144;0.866007;, + 0.116480;0.877455;, + 0.049313;0.911212;, + 0.039869;0.898653;, + 0.041853;0.873887;, + 0.056289;0.864026;, + 0.080191;0.856385;, + 0.095581;0.855821;, + 0.054573;0.924074;, + 0.037402;0.922803;, + 0.028235;0.904085;, + 0.032697;0.886998;, + 0.056944;0.937759;, + 0.041597;0.937180;, + 0.027314;0.923211;, + 0.022859;0.916144;, + 0.023901;0.901446;, + 0.072797;0.950502;, + 0.054549;0.955234;, + 0.048740;0.963058;, + 0.031435;0.939516;, + 0.023901;0.931243;, + 0.085431;0.946316;, + 0.096116;0.950120;, + 0.092144;0.966682;, + 0.071892;0.964356;, + 0.077856;0.975276;, + 0.108318;0.935048;, + 0.113945;0.937477;, + 0.116480;0.955234;, + 0.102759;0.975651;, + 0.120781;0.916345;, + 0.129431;0.937179;, + 0.129175;0.958802;, + 0.117042;0.969021;, + 0.131158;0.898654;, + 0.133626;0.922803;, + 0.142661;0.924211;, + 0.138331;0.945692;, + 0.137361;0.966397;, + 0.123050;0.978553;, + 0.122288;0.869631;, + 0.139983;0.894872;, + 0.146683;0.906206;, + 0.146088;0.929068;, + 0.148136;0.950834;, + 0.106945;0.857251;, + 0.118886;0.860826;, + 0.131665;0.871638;, + 0.138518;0.884788;, + 0.106174;0.846219;, + 0.123050;0.854136;, + 0.137361;0.866292;, + 0.148136;0.881855;, + 0.154643;0.899762;, + 0.156410;0.916345;, + 0.089950;0.843590;, + 0.081506;0.851961;, + 0.073883;0.844036;, + 0.066559;0.856220;, + 0.056150;0.849614;, + 0.052142;0.860826;, + 0.040424;0.859741;, + 0.042394;0.852842;, + 0.027777;0.873723;, + 0.023851;0.871736;, + 0.019066;0.890604;, + 0.014502;0.904151;, + 0.013901;0.888366;, + 0.010801;0.900497;, + 0.014412;0.930385;, + 0.010000;0.929321;, + 0.018500;0.952992;, + 0.014618;0.916345;, + 0.019066;0.942085;, + 0.024941;0.960715;, + 0.155837;0.932767;, + 0.106459;0.987644;, + 0.090184;0.990000;, + 0.088342;0.979550;, + 0.076217;0.979803;, + 0.064084;0.975439;, + 0.073883;0.988653;, + 0.056150;0.983076;, + 0.052142;0.971864;, + 0.039364;0.961051;, + 0.032510;0.947901;, + 0.040424;0.972948;, + 0.027777;0.958966;, + 0.037995;0.184114;, + 0.036704;0.246080;, + 0.027000;0.232918;, + 0.075312;0.132375;, + 0.082742;0.210783;, + 0.050794;0.256480;, + 0.072813;0.256786;, + 0.086363;0.256788;, + 0.100071;0.256793;, + 0.073543;0.109228;, + 0.091351;0.112307;, + 0.126267;0.144474;, + 0.127750;0.210869;, + 0.113884;0.256798;, + 0.127750;0.256800;, + 0.141616;0.256798;, + 0.049611;0.136414;, + 0.076266;0.054391;, + 0.083503;0.089068;, + 0.110321;0.107038;, + 0.157059;0.107064;, + 0.171860;0.134065;, + 0.062769;0.092091;, + 0.155429;0.256793;, + 0.176681;0.212402;, + 0.169137;0.256788;, + 0.182687;0.256786;, + 0.204706;0.256480;, + 0.218796;0.246080;, + 0.181263;0.109776;, + 0.217505;0.184114;, + 0.228500;0.232918;, + 0.174023;0.091237;, + 0.179234;0.054391;, + 0.205889;0.136414;, + 0.152062;0.078268;, + 0.163200;0.065500;, + 0.169816;0.040589;, + 0.162122;0.033206;, + 0.155868;0.030487;, + 0.145399;0.030021;, + 0.110267;0.084259;, + 0.108835;0.064092;, + 0.118956;0.030180;, + 0.106888;0.030000;, + 0.099633;0.030487;, + 0.092300;0.065500;, + 0.093378;0.033206;, + 0.085684;0.040589;, + 0.192731;0.092091;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.000000;1.000000;, + 0.446308;0.890148;, + 0.386599;0.890389;, + 0.490500;0.890335;, + 0.386599;0.890389;, + 0.323177;0.890304;, + 0.340274;0.890149;, + 0.307473;0.870377;, + 0.301173;0.865102;, + 0.301868;0.870434;, + 0.309336;0.863947;, + 0.278619;0.857372;, + 0.292715;0.865348;, + 0.301868;0.870434;, + 0.300869;0.870482;, + 0.296633;0.865040;, + 0.303995;0.870422;, + 0.317730;0.870439;, + 0.318014;0.863902;, + 0.288202;0.846959;, + 0.263810;0.846959;, + 0.242940;0.846959;, + 0.226194;0.847180;, + 0.309576;0.874202;, + 0.322232;0.877860;, + 0.336899;0.873645;, + 0.337715;0.864131;, + 0.328681;0.864616;, + 0.299405;0.874154;, + 0.293765;0.879644;, + 0.303455;0.879577;, + 0.316394;0.881038;, + 0.330981;0.880177;, + 0.344712;0.869460;, + 0.301868;0.870434;, + 0.298141;0.874119;, + 0.286756;0.879559;, + 0.293048;0.882079;, + 0.302955;0.882113;, + 0.319090;0.886409;, + 0.331524;0.886743;, + 0.286588;0.878823;, + 0.283879;0.881485;, + 0.286717;0.882062;, + 0.296331;0.887809;, + 0.304193;0.888591;, + 0.308682;0.887170;, + 0.293765;0.879644;, + 0.285832;0.880410;, + 0.284092;0.882085;, + 0.288907;0.886343;, + 0.291813;0.887803;, + 0.300617;0.890165;, + 0.309577;0.874202;, + 0.303455;0.879577;, + 0.302955;0.882113;, + 0.293048;0.882079;, + 0.286717;0.882062;, + 0.311481;0.870347;, + 0.321749;0.870381;, + 0.322232;0.877860;, + 0.316394;0.881038;, + 0.300869;0.870482;, + 0.301868;0.870434;, + 0.323177;0.890304;, + 0.325934;0.889437;, + 0.352955;0.890024;, + 0.362272;0.887662;, + 0.341215;0.882369;, + 0.347769;0.876154;, + 0.386599;0.890389;, + 0.377512;0.889440;, + 0.389067;0.886658;, + 0.364120;0.883857;, + 0.354833;0.876947;, + 0.353370;0.853444;, + 0.417096;0.889952;, + 0.413539;0.886666;, + 0.398183;0.880766;, + 0.373773;0.880719;, + 0.459360;0.890401;, + 0.454549;0.889435;, + 0.439563;0.886671;, + 0.424233;0.880770;, + 0.422707;0.874440;, + 0.396353;0.874412;, + 0.423111;0.889191;, + 0.470177;0.889192;, + 0.508471;0.890419;, + 0.494319;0.889492;, + 0.466584;0.886675;, + 0.451531;0.880772;, + 0.381371;0.889190;, + 0.340274;0.890149;, + 0.513444;0.889500;, + 0.556643;0.889800;, + 0.571458;0.890306;, + 0.547635;0.889443;, + 0.521717;0.886676;, + 0.494125;0.886746;, + 0.479742;0.880773;, + 0.600678;0.889190;, + 0.638665;0.889189;, + 0.650591;0.890416;, + 0.627812;0.890082;, + 0.597647;0.889694;, + 0.575702;0.886669;, + 0.549152;0.886673;, + 0.667263;0.889188;, + 0.676176;0.890432;, + 0.676165;0.889437;, + 0.646402;0.888965;, + 0.624593;0.886653;, + 0.601031;0.886662;, + 0.687704;0.889770;, + 0.699258;0.890279;, + 0.697907;0.888591;, + 0.693418;0.887170;, + 0.682305;0.886336;, + 0.665060;0.886628;, + 0.647734;0.885539;, + 0.695837;0.890369;, + 0.703108;0.890033;, + 0.708208;0.889010;, + 0.705769;0.887809;, + 0.709052;0.882079;, + 0.699145;0.882113;, + 0.689225;0.889196;, + 0.684534;0.889187;, + 0.682770;0.890398;, + 0.697907;0.888591;, + 0.705769;0.887809;, + 0.710287;0.887803;, + 0.713193;0.886343;, + 0.715383;0.882062;, + 0.667263;0.889188;, + 0.661651;0.890376;, + 0.676165;0.889437;, + 0.693418;0.887170;, + 0.699145;0.882113;, + 0.709052;0.882079;, + 0.715383;0.882062;, + 0.638665;0.889189;, + 0.585526;0.890381;, + 0.627812;0.890082;, + 0.646402;0.888965;, + 0.665060;0.886628;, + 0.682305;0.886336;, + 0.600678;0.889190;, + 0.548202;0.890406;, + 0.547635;0.889443;, + 0.598109;0.889442;, + 0.623417;0.887720;, + 0.642755;0.884690;, + 0.555887;0.889192;, + 0.490500;0.890335;, + 0.507716;0.889929;, + 0.530305;0.886777;, + 0.557526;0.886774;, + 0.583796;0.886770;, + 0.608642;0.886765;, + 0.512825;0.889028;, + 0.470177;0.889192;, + 0.446308;0.890148;, + 0.423111;0.889191;, + 0.386599;0.890389;, + 0.267871;0.857814;, + 0.267180;0.857336;, + 0.278619;0.857372;, + 0.303529;0.865034;, + 0.309336;0.863947;, + 0.318014;0.863902;, + 0.263810;0.846959;, + 0.288202;0.846959;, + 0.311997;0.846959;, + 0.326853;0.852794;, + 0.328681;0.864616;, + 0.236980;0.847148;, + 0.223677;0.832185;, + 0.259869;0.832185;, + 0.316198;0.834227;, + 0.342074;0.843386;, + 0.344391;0.856029;, + 0.337644;0.864251;, + 0.192884;0.832185;, + 0.202939;0.813040;, + 0.308830;0.812985;, + 0.340043;0.797789;, + 0.350261;0.829955;, + 0.353370;0.853444;, + 0.166823;0.832345;, + 0.144147;0.811562;, + 0.115425;0.782932;, + 0.249210;0.786881;, + 0.312483;0.767657;, + 0.358869;0.651784;, + 0.353099;0.794048;, + 0.117153;0.811562;, + 0.076582;0.783527;, + 0.099111;0.745757;, + 0.258753;0.742803;, + 0.291534;0.610001;, + 0.352041;0.549837;, + 0.102059;0.811562;, + 0.058902;0.783527;, + 0.060191;0.747018;, + 0.049670;0.702245;, + 0.111326;0.678761;, + 0.226466;0.446592;, + 0.428630;0.215097;, + 0.408001;0.393252;, + 0.041280;0.747018;, + 0.037846;0.702974;, + 0.058669;0.652833;, + 0.077009;0.630232;, + 0.095854;0.628016;, + 0.051262;0.783527;, + 0.033141;0.747018;, + 0.031400;0.747018;, + 0.036109;0.702974;, + 0.057006;0.652833;, + 0.102130;0.574592;, + 0.049615;0.783527;, + 0.033141;0.747018;, + 0.037846;0.702974;, + 0.058669;0.652833;, + 0.102130;0.574592;, + 0.107508;0.562853;, + 0.227853;0.364941;, + 0.051262;0.783527;, + 0.041280;0.747018;, + 0.049670;0.702245;, + 0.077009;0.630232;, + 0.263498;0.308736;, + 0.295053;0.258873;, + 0.275401;0.296354;, + 0.058902;0.783527;, + 0.060191;0.747018;, + 0.099112;0.745757;, + 0.111326;0.678761;, + 0.095855;0.628016;, + 0.275402;0.296353;, + 0.098640;0.811691;, + 0.076582;0.783527;, + 0.115426;0.782932;, + 0.258754;0.742803;, + 0.291534;0.610001;, + 0.226466;0.446593;, + 0.283183;0.299162;, + 0.117153;0.811562;, + 0.144147;0.811562;, + 0.202939;0.813040;, + 0.249210;0.786881;, + 0.312483;0.767657;, + 0.158768;0.832377;, + 0.172180;0.832185;, + 0.192884;0.832185;, + 0.223677;0.832185;, + 0.259869;0.832185;, + 0.308830;0.812985;, + 0.316198;0.834227;, + 0.340043;0.797789;, + 0.358869;0.651784;, + 0.352042;0.549836;, + 0.311997;0.846959;, + 0.326853;0.852794;, + 0.342074;0.843386;, + 0.350261;0.829955;, + 0.353099;0.794048;, + 0.344391;0.856029;, + 0.368618;0.741847;, + 0.360494;0.777971;, + 0.374987;0.641750;, + 0.488435;0.010183;, + 0.487628;0.010103;, + 0.487129;0.011824;, + 0.485048;0.016665;, + 0.472355;0.056479;, + 0.485013;0.031890;, + 0.489765;0.010141;, + 0.490061;0.011089;, + 0.487628;0.010103;, + 0.479052;0.022298;, + 0.422492;0.087293;, + 0.375664;0.148397;, + 0.361562;0.194294;, + 0.428630;0.215097;, + 0.464904;0.130846;, + 0.479312;0.022506;, + 0.420698;0.086722;, + 0.434620;0.071120;, + 0.386495;0.128359;, + 0.487528;0.011959;, + 0.478412;0.027636;, + 0.387435;0.137104;, + 0.357687;0.168005;, + 0.487628;0.010103;, + 0.701231;0.870482;, + 0.698105;0.870422;, + 0.709385;0.865348;, + 0.700232;0.870434;, + 0.705467;0.865040;, + 0.694627;0.870377;, + 0.698571;0.865034;, + 0.692764;0.863947;, + 0.684370;0.870439;, + 0.692524;0.874202;, + 0.702695;0.874154;, + 0.700232;0.870434;, + 0.703959;0.874119;, + 0.701231;0.870482;, + 0.723481;0.857372;, + 0.738289;0.846959;, + 0.713898;0.846959;, + 0.684086;0.863902;, + 0.765120;0.847148;, + 0.778423;0.832185;, + 0.742231;0.832185;, + 0.685902;0.834227;, + 0.690103;0.846959;, + 0.675247;0.852794;, + 0.673419;0.864616;, + 0.809216;0.832185;, + 0.799161;0.813040;, + 0.693270;0.812985;, + 0.662057;0.797789;, + 0.660026;0.843386;, + 0.835277;0.832345;, + 0.857953;0.811562;, + 0.886675;0.782932;, + 0.752889;0.786881;, + 0.689617;0.767657;, + 0.884947;0.811562;, + 0.925518;0.783527;, + 0.902988;0.745757;, + 0.743346;0.742803;, + 0.900041;0.811562;, + 0.943198;0.783527;, + 0.958386;0.746706;, + 0.952430;0.702245;, + 0.890774;0.678761;, + 0.710566;0.610001;, + 0.650059;0.549837;, + 0.643232;0.651784;, + 0.950838;0.783527;, + 0.968959;0.747018;, + 0.964254;0.702974;, + 0.943432;0.652833;, + 0.925091;0.630231;, + 0.906246;0.628016;, + 0.952485;0.783527;, + 0.970700;0.747018;, + 0.965991;0.702974;, + 0.945094;0.652833;, + 0.899970;0.574593;, + 0.774247;0.364940;, + 0.726699;0.296353;, + 0.968959;0.747018;, + 0.964254;0.702974;, + 0.943432;0.652833;, + 0.899970;0.574593;, + 0.894592;0.562854;, + 0.950838;0.783527;, + 0.960820;0.747018;, + 0.952430;0.702245;, + 0.925091;0.630231;, + 0.738602;0.308736;, + 0.707048;0.258873;, + 0.943198;0.783527;, + 0.941909;0.747018;, + 0.902989;0.745757;, + 0.890774;0.678761;, + 0.906246;0.628017;, + 0.726699;0.296353;, + 0.661943;0.191857;, + 0.925518;0.783527;, + 0.886674;0.782932;, + 0.743346;0.742803;, + 0.710566;0.610001;, + 0.775634;0.446593;, + 0.718917;0.299163;, + 0.903460;0.811691;, + 0.884947;0.811562;, + 0.857953;0.811562;, + 0.799161;0.813040;, + 0.752890;0.786881;, + 0.689617;0.767658;, + 0.843332;0.832378;, + 0.829920;0.832185;, + 0.809216;0.832185;, + 0.778423;0.832185;, + 0.742231;0.832185;, + 0.693270;0.812985;, + 0.775906;0.847180;, + 0.759160;0.846959;, + 0.738289;0.846959;, + 0.713898;0.846959;, + 0.685902;0.834227;, + 0.662057;0.797789;, + 0.723481;0.857372;, + 0.692764;0.863947;, + 0.684086;0.863902;, + 0.690103;0.846959;, + 0.675247;0.852794;, + 0.660026;0.843386;, + 0.700927;0.865102;, + 0.690619;0.870347;, + 0.680351;0.870381;, + 0.673419;0.864616;, + 0.698105;0.870422;, + 0.698105;0.870422;, + 0.657709;0.856029;, + 0.651839;0.829955;, + 0.649001;0.794048;, + 0.643232;0.651784;, + 0.664456;0.864251;, + 0.648730;0.853444;, + 0.633483;0.741847;, + 0.641606;0.777971;, + 0.627113;0.641751;, + 0.661635;0.871708;, + 0.655923;0.865034;, + 0.654331;0.876154;, + 0.647267;0.876947;, + 0.635042;0.792927;, + 0.679869;0.877860;, + 0.669568;0.876131;, + 0.671119;0.880177;, + 0.692523;0.874202;, + 0.698645;0.879577;, + 0.685707;0.881038;, + 0.657709;0.856029;, + 0.664385;0.864131;, + 0.665201;0.873645;, + 0.679869;0.877860;, + 0.651839;0.829955;, + 0.648730;0.853444;, + 0.657388;0.869460;, + 0.671119;0.880177;, + 0.685706;0.881038;, + 0.698645;0.879577;, + 0.649001;0.794048;, + 0.641606;0.777971;, + 0.633483;0.741848;, + 0.635042;0.792927;, + 0.647267;0.876947;, + 0.654331;0.876154;, + 0.627113;0.641750;, + 0.615144;0.601191;, + 0.604920;0.553696;, + 0.601873;0.571248;, + 0.609648;0.689501;, + 0.628550;0.833702;, + 0.594099;0.393251;, + 0.584857;0.394717;, + 0.568403;0.320540;, + 0.564609;0.307013;, + 0.563508;0.322438;, + 0.569679;0.459962;, + 0.573470;0.215097;, + 0.540796;0.135003;, + 0.536190;0.134620;, + 0.531067;0.126577;, + 0.541031;0.260618;, + 0.775634;0.446592;, + 0.640538;0.194294;, + 0.530726;0.061423;, + 0.519377;0.023383;, + 0.517545;0.036892;, + 0.513319;0.020227;, + 0.718917;0.299163;, + 0.614665;0.137104;, + 0.565406;0.068969;, + 0.521505;0.020832;, + 0.514892;0.011637;, + 0.513901;0.010151;, + 0.644413;0.168005;, + 0.598475;0.107521;, + 0.566121;0.069914;, + 0.523159;0.022462;, + 0.514623;0.012154;, + 0.514521;0.010213;, + 0.619082;0.133255;, + 0.626436;0.148397;, + 0.529743;0.033734;, + 0.517932;0.023430;, + 0.513039;0.010150;, + 0.640538;0.194294;, + 0.529745;0.056479;, + 0.537196;0.130846;, + 0.529312;0.099082;, + 0.573470;0.215097;, + 0.594099;0.393252;, + 0.584858;0.394719;, + 0.568403;0.320539;, + 0.537165;0.151409;, + 0.513629;0.023398;, + 0.650059;0.549836;, + 0.615144;0.601191;, + 0.571253;0.353254;, + 0.606516;0.573610;, + 0.606929;0.638663;, + 0.556462;0.318825;, + 0.540542;0.236386;, + 0.522612;0.099900;, + 0.631690;0.837038;, + 0.612190;0.776856;, + 0.591491;0.597534;, + 0.561978;0.431392;, + 0.551969;0.342100;, + 0.546412;0.288639;, + 0.635485;0.873362;, + 0.619885;0.854938;, + 0.597667;0.849574;, + 0.587103;0.729163;, + 0.567609;0.605285;, + 0.628327;0.880719;, + 0.620505;0.874367;, + 0.601458;0.879257;, + 0.585814;0.866846;, + 0.582131;0.809334;, + 0.660818;0.881071;, + 0.708335;0.879644;, + 0.715344;0.879559;, + 0.718221;0.881485;, + 0.715512;0.878823;, + 0.716268;0.880410;, + 0.718008;0.882085;, + 0.698105;0.870422;, + 0.708335;0.879644;, + 0.573879;0.881051;, + 0.586468;0.878341;, + 0.572883;0.874784;, + 0.571786;0.840087;, + 0.538978;0.882013;, + 0.564580;0.881687;, + 0.570539;0.881237;, + 0.559180;0.885403;, + 0.560922;0.876364;, + 0.502930;0.886875;, + 0.482948;0.881999;, + 0.500285;0.882675;, + 0.555310;0.885477;, + 0.470918;0.888931;, + 0.451132;0.882070;, + 0.441596;0.882066;, + 0.464765;0.892633;, + 0.506702;0.893086;, + 0.456781;0.889867;, + 0.431318;0.886771;, + 0.428221;0.881051;, + 0.415632;0.878341;, + 0.431561;0.881237;, + 0.448595;0.887965;, + 0.426411;0.890050;, + 0.405648;0.886768;, + 0.400642;0.879257;, + 0.416286;0.866846;, + 0.429217;0.874784;, + 0.442920;0.885403;, + 0.394375;0.888921;, + 0.369352;0.883781;, + 0.373773;0.880719;, + 0.381594;0.874367;, + 0.382215;0.854937;, + 0.404433;0.849574;, + 0.377512;0.889440;, + 0.362272;0.887662;, + 0.341215;0.882369;, + 0.354833;0.876947;, + 0.366615;0.873362;, + 0.352955;0.890024;, + 0.331524;0.886743;, + 0.330981;0.880177;, + 0.347769;0.876154;, + 0.337380;0.890367;, + 0.325934;0.889437;, + 0.319090;0.886409;, + 0.332532;0.876131;, + 0.340465;0.871708;, + 0.310972;0.890206;, + 0.305735;0.887178;, + 0.296331;0.887809;, + 0.302743;0.890239;, + 0.293892;0.889010;, + 0.346177;0.865034;, + 0.367058;0.792927;, + 0.370409;0.837038;, + 0.389910;0.776855;, + 0.414997;0.729163;, + 0.419969;0.809334;, + 0.430314;0.840087;, + 0.395171;0.638664;, + 0.410609;0.597534;, + 0.434491;0.605285;, + 0.448222;0.625925;, + 0.395584;0.573610;, + 0.430847;0.353254;, + 0.445639;0.318825;, + 0.440122;0.431392;, + 0.476507;0.409769;, + 0.474654;0.470559;, + 0.368617;0.741847;, + 0.386956;0.601191;, + 0.433697;0.320540;, + 0.464935;0.151409;, + 0.461559;0.236386;, + 0.360494;0.777971;, + 0.374987;0.641750;, + 0.417243;0.394718;, + 0.464904;0.130846;, + 0.472788;0.099082;, + 0.471374;0.061423;, + 0.485672;0.021306;, + 0.488985;0.010201;, + 0.490812;0.011511;, + 0.483554;0.049859;, + 0.361562;0.194294;, + 0.487628;0.010103;, + 0.283183;0.299163;, + 0.340157;0.191857;, + 0.408001;0.393252;, + 0.417243;0.394717;, + 0.433697;0.320540;, + 0.479098;0.072865;, + 0.386956;0.601191;, + 0.437961;0.308919;, + 0.468964;0.146672;, + 0.490503;0.039593;, + 0.490769;0.012120;, + 0.397189;0.564494;, + 0.427041;0.446544;, + 0.466464;0.261494;, + 0.492445;0.102011;, + 0.499483;0.012538;, + 0.495137;0.010206;, + 0.367058;0.792928;, + 0.397299;0.658328;, + 0.434855;0.575414;, + 0.454506;0.575446;, + 0.482023;0.308695;, + 0.502665;0.130665;, + 0.370410;0.837038;, + 0.395932;0.766606;, + 0.422790;0.776149;, + 0.448248;0.776086;, + 0.474915;0.575503;, + 0.505230;0.438227;, + 0.370055;0.873542;, + 0.379467;0.854889;, + 0.396082;0.853042;, + 0.417325;0.854938;, + 0.459417;0.828261;, + 0.489231;0.675841;, + 0.442501;0.872090;, + 0.472776;0.854900;, + 0.500500;0.826890;, + 0.513787;0.774264;, + 0.525146;0.679271;, + 0.478681;0.874441;, + 0.494765;0.871583;, + 0.523534;0.871996;, + 0.543553;0.854903;, + 0.556403;0.828288;, + 0.508172;0.880918;, + 0.536548;0.880772;, + 0.551872;0.874441;, + 0.579605;0.871995;, + 0.598195;0.854857;, + 0.566695;0.776133;, + 0.564332;0.880772;, + 0.591087;0.880769;, + 0.605747;0.874412;, + 0.630149;0.872231;, + 0.603861;0.825076;, + 0.616316;0.880753;, + 0.639351;0.881486;, + 0.660818;0.881071;, + 0.585286;0.688210;, + 0.557536;0.575432;, + 0.537485;0.575475;, + 0.526189;0.308903;, + 0.512310;0.102071;, + 0.507971;0.012656;, + 0.502423;0.010138;, + 0.517915;0.064874;, + 0.511888;0.010429;, + 0.508531;0.010109;, + 0.510706;0.012038;, + 0.508062;0.012041;, + 0.503035;0.010934;, + 0.502423;0.010138;, + 0.498444;0.010591;, + 0.512146;0.011697;, + 0.509897;0.015770;, + 0.507793;0.017506;, + 0.504728;0.013800;, + 0.499823;0.013296;, + 0.512152;0.011595;, + 0.509408;0.015839;, + 0.508649;0.020094;, + 0.505905;0.035025;, + 0.504198;0.035751;, + 0.503411;0.019789;, + 0.511052;0.011718;, + 0.508032;0.013541;, + 0.507025;0.020992;, + 0.508030;0.021206;, + 0.506530;0.032597;, + 0.508405;0.010608;, + 0.505257;0.013689;, + 0.504414;0.018935;, + 0.505290;0.032281;, + 0.508605;0.010201;, + 0.503619;0.011749;, + 0.498976;0.011967;, + 0.499556;0.016115;, + 0.502045;0.033432;, + 0.511772;0.010952;, + 0.506336;0.011371;, + 0.502929;0.010247;, + 0.500470;0.010579;, + 0.503335;0.013823;, + 0.496889;0.011057;, + 0.494161;0.010100;, + 0.493696;0.011658;, + 0.497808;0.017567;, + 0.511991;0.092162;, + 0.507136;0.062988;, + 0.494120;0.064193;, + 0.498058;0.013840;, + 0.518422;0.123328;, + 0.515261;0.120349;, + 0.509970;0.119839;, + 0.496605;0.120012;, + 0.490458;0.093358;, + 0.522310;0.131415;, + 0.527070;0.146534;, + 0.533891;0.187833;, + 0.490506;0.119816;, + 0.486840;0.120349;, + 0.483678;0.123328;, + 0.479488;0.099901;, + 0.468209;0.187833;, + 0.475030;0.146534;, + 0.479790;0.131415;, + 0.490178;0.010656;, + 0.493042;0.013619;, + 0.497989;0.031939;, + 0.498821;0.047893;, + 0.501722;0.074808;, + 0.503458;0.042203;, + 0.504035;0.053976;, + 0.494883;0.020554;, + 0.496900;0.042717;, + 0.497881;0.074808;, + 0.491143;0.013545;, + 0.492985;0.018028;, + 0.493897;0.022065;, + 0.496109;0.038025;, + 0.497070;0.054970;, + 0.497394;0.074808;, + 0.489871;0.011731;, + 0.492343;0.015434;, + 0.487628;0.010103;, + 0.504433;0.074808;, + 0.505146;0.053000;, + 0.503996;0.060137;, + 0.501725;0.035755;, + 0.504644;0.074808;, + 0.502472;0.074808;, + 0.501186;0.058514;, + 0.499228;0.043425;, + 0.498301;0.019977;, + 0.494871;0.013304;, + 0.498601;0.074808;, + 0.497314;0.053546;, + 0.497350;0.042125;, + 0.495789;0.025694;, + 0.494496;0.017528;, + 0.492126;0.013352;, + 0.493920;0.010651;, + 0.494708;0.025165;, + 0.487628;0.010103;, + 0.455688;0.288639;, + 0.450131;0.342100;, + 0.455036;0.356518;, + 0.462157;0.367911;, + 0.473285;0.368246;, + 0.480133;0.368249;, + 0.487061;0.368254;, + 0.498099;0.425111;, + 0.500180;0.530193;, + 0.490960;0.581367;, + 0.468336;0.544703;, + 0.494042;0.368260;, + 0.501050;0.368262;, + 0.508058;0.368260;, + 0.514441;0.416973;, + 0.504235;0.487804;, + 0.511140;0.581367;, + 0.501050;0.684992;, + 0.494700;0.746278;, + 0.482547;0.621487;, + 0.515039;0.368254;, + 0.521967;0.368249;, + 0.528815;0.368246;, + 0.534088;0.423863;, + 0.527446;0.470559;, + 0.533764;0.544703;, + 0.519553;0.621487;, + 0.507400;0.746278;, + 0.501050;0.829275;, + 0.539943;0.367911;, + 0.553878;0.625925;, + 0.540784;0.630989;, + 0.530335;0.680306;, + 0.515027;0.755640;, + 0.547064;0.356518;, + 0.558296;0.821497;, + 0.538206;0.769277;, + 0.525281;0.768956;, + 0.515335;0.851770;, + 0.507578;0.847147;, + 0.546256;0.860745;, + 0.543421;0.814187;, + 0.521478;0.887126;, + 0.547201;0.891805;, + 0.521975;0.923343;, + 0.546242;0.899029;, + 0.522475;0.936635;, + 0.515186;0.929368;, + 0.509807;0.927403;, + 0.544114;0.902448;, + 0.522393;0.938580;, + 0.516503;0.944811;, + 0.515773;0.944179;, + 0.507632;0.945600;, + 0.505284;0.929324;, + 0.542583;0.899918;, + 0.518166;0.940437;, + 0.509872;0.948383;, + 0.507359;0.949400;, + 0.498246;0.946640;, + 0.501050;0.929131;, + 0.503768;0.931323;, + 0.481297;0.939031;, + 0.488464;0.947083;, + 0.493723;0.949061;, + 0.492025;0.944533;, + 0.496816;0.929323;, + 0.462406;0.905120;, + 0.479698;0.938629;, + 0.479625;0.936635;, + 0.486327;0.944179;, + 0.486914;0.929368;, + 0.492293;0.927403;, + 0.457986;0.902448;, + 0.455858;0.899029;, + 0.454899;0.891805;, + 0.480125;0.923343;, + 0.441178;0.876364;, + 0.455844;0.860745;, + 0.480622;0.887126;, + 0.486765;0.851770;, + 0.494522;0.847147;, + 0.443804;0.821497;, + 0.458679;0.814187;, + 0.463894;0.769277;, + 0.476819;0.768956;, + 0.487073;0.755640;, + 0.461316;0.630989;, + 0.471765;0.680306;, + 0.851685;0.078707;, + 0.866762;0.084754;, + 0.856440;0.099220;, + 0.880864;0.108668;, + 0.866527;0.146865;, + 0.877999;0.147627;, + 0.870439;0.191080;, + 0.889301;0.202625;, + 0.878123;0.244285;, + 0.904726;0.088976;, + 0.915405;0.110158;, + 0.903589;0.153489;, + 0.917079;0.198809;, + 0.910518;0.247949;, + 0.889876;0.251561;, + 0.879427;0.279636;, + 0.887750;0.286111;, + 0.936577;0.101363;, + 0.924582;0.146647;, + 0.937300;0.082925;, + 0.895782;0.287673;, + 0.903825;0.286541;, + 0.912197;0.280513;, + 0.944254;0.080628;, + 0.927141;0.147039;, + 0.907698;0.088087;, + 0.907119;0.139649;, + 0.877264;0.147969;, + 0.867565;0.083975;, + 0.866422;0.146727;, + 0.851125;0.079487;, + 0.919001;0.199918;, + 0.887492;0.205278;, + 0.869468;0.190783;, + 0.917310;0.243335;, + 0.893416;0.248324;, + 0.879599;0.240886;, + 0.910410;0.286163;, + 0.901093;0.287804;, + 0.891728;0.286476;, + 0.881914;0.279754;; + } + + MeshMaterialList { + 5; + 2980; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4; + + Material { + 1.000000;1.000000;1.000000;1.000000;; + 12.800000; + 0.100000;0.100000;0.100000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "ShipTexture4.DDS"; + } + } + + Material { + 0.752941;0.752941;0.752941;1.000000;; + 115.199997; + 0.800000;0.800000;0.800000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "ShipTexture4.DDS"; + } + } + + Material { + 0.105882;0.105882;0.105882;1.000000;; + 25.600000; + 0.300000;0.300000;0.300000;; + 0.000000;0.000000;0.000000;; + } + + Material { + 1.000000;1.000000;1.000000;1.000000;; + 51.200001; + 0.700000;0.700000;0.700000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "ShipTexture4.DDS"; + } + } + + Material { + 1.000000;1.000000;1.000000;1.000000;; + 51.200001; + 0.000000;0.000000;0.000000;; + 1.000000;1.000000;1.000000;; + + TextureFilename { + "ShipTexture4.DDS"; + } + } + } + + VertexDuplicationIndices { + 1755; + 1528; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 16, + 20, + 21, + 22, + 23, + 24, + 16, + 26, + 27, + 28, + 16, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 16, + 16, + 16, + 16, + 47, + 48, + 49, + 16, + 51, + 52, + 53, + 16, + 55, + 56, + 57, + 16, + 59, + 60, + 61, + 16, + 63, + 64, + 65, + 16, + 67, + 68, + 69, + 16, + 71, + 72, + 73, + 16, + 75, + 76, + 77, + 16, + 79, + 80, + 81, + 16, + 83, + 84, + 85, + 16, + 87, + 88, + 89, + 90, + 16, + 92, + 1, + 94, + 95, + 16, + 97, + 98, + 99, + 16, + 101, + 102, + 103, + 16, + 105, + 106, + 107, + 108, + 16, + 110, + 111, + 16, + 113, + 114, + 115, + 16, + 117, + 118, + 119, + 16, + 121, + 122, + 123, + 16, + 125, + 126, + 127, + 16, + 129, + 130, + 131, + 16, + 133, + 134, + 135, + 16, + 137, + 138, + 139, + 16, + 141, + 142, + 143, + 16, + 145, + 146, + 147, + 16, + 149, + 150, + 151, + 16, + 153, + 154, + 155, + 16, + 157, + 158, + 159, + 16, + 161, + 162, + 163, + 16, + 165, + 166, + 167, + 16, + 169, + 170, + 171, + 16, + 173, + 174, + 175, + 16, + 177, + 178, + 179, + 16, + 181, + 182, + 183, + 16, + 185, + 186, + 187, + 16, + 189, + 190, + 191, + 192, + 193, + 16, + 195, + 196, + 197, + 198, + 16, + 16, + 3, + 83, + 79, + 75, + 205, + 206, + 207, + 2, + 71, + 210, + 211, + 212, + 213, + 214, + 215, + 67, + 63, + 218, + 219, + 220, + 221, + 222, + 223, + 59, + 55, + 226, + 227, + 228, + 229, + 230, + 231, + 51, + 47, + 234, + 235, + 236, + 237, + 10, + 239, + 22, + 21, + 28, + 30, + 244, + 245, + 246, + 247, + 8, + 32, + 34, + 36, + 252, + 253, + 254, + 255, + 256, + 9, + 42, + 259, + 260, + 261, + 262, + 263, + 6, + 196, + 195, + 190, + 268, + 269, + 270, + 271, + 272, + 7, + 185, + 181, + 276, + 277, + 278, + 279, + 280, + 5, + 177, + 283, + 284, + 285, + 286, + 287, + 288, + 173, + 169, + 165, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 304, + 153, + 145, + 137, + 308, + 309, + 310, + 311, + 312, + 313, + 129, + 121, + 316, + 317, + 318, + 113, + 106, + 321, + 105, + 101, + 97, + 1, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 348, + 349, + 350, + 351, + 352, + 353, + 354, + 355, + 356, + 357, + 358, + 359, + 360, + 361, + 362, + 363, + 364, + 365, + 366, + 367, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 378, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 389, + 390, + 391, + 392, + 393, + 394, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 449, + 450, + 451, + 452, + 453, + 454, + 455, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 472, + 473, + 474, + 475, + 1, + 3, + 2, + 479, + 11, + 13, + 482, + 483, + 153, + 298, + 297, + 145, + 149, + 489, + 490, + 491, + 479, + 493, + 494, + 495, + 496, + 497, + 1, + 499, + 500, + 501, + 3, + 83, + 504, + 505, + 506, + 12, + 508, + 509, + 510, + 511, + 512, + 479, + 514, + 515, + 516, + 517, + 518, + 519, + 520, + 521, + 522, + 523, + 524, + 491, + 526, + 527, + 528, + 529, + 530, + 494, + 532, + 533, + 534, + 535, + 536, + 537, + 489, + 539, + 540, + 541, + 542, + 543, + 544, + 145, + 546, + 547, + 548, + 549, + 550, + 153, + 552, + 553, + 554, + 555, + 556, + 557, + 297, + 559, + 560, + 561, + 562, + 563, + 564, + 565, + 566, + 567, + 568, + 165, + 570, + 571, + 572, + 573, + 574, + 575, + 576, + 577, + 578, + 579, + 580, + 581, + 582, + 583, + 584, + 585, + 586, + 587, + 588, + 589, + 590, + 591, + 592, + 593, + 594, + 595, + 596, + 597, + 598, + 599, + 600, + 601, + 602, + 603, + 604, + 605, + 606, + 607, + 608, + 609, + 610, + 611, + 612, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 623, + 624, + 625, + 626, + 627, + 628, + 629, + 630, + 631, + 632, + 633, + 634, + 635, + 636, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 650, + 651, + 652, + 653, + 654, + 655, + 656, + 657, + 658, + 659, + 660, + 661, + 662, + 663, + 664, + 665, + 666, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 675, + 676, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 685, + 686, + 687, + 688, + 689, + 690, + 691, + 692, + 693, + 694, + 695, + 696, + 697, + 698, + 699, + 700, + 701, + 702, + 703, + 704, + 705, + 706, + 707, + 708, + 709, + 710, + 711, + 712, + 713, + 714, + 715, + 716, + 717, + 718, + 719, + 720, + 721, + 722, + 723, + 724, + 725, + 726, + 727, + 728, + 729, + 730, + 731, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 759, + 760, + 761, + 762, + 763, + 764, + 765, + 766, + 767, + 768, + 769, + 770, + 771, + 772, + 773, + 774, + 775, + 776, + 777, + 778, + 779, + 780, + 781, + 782, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 795, + 796, + 797, + 798, + 799, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 816, + 817, + 818, + 819, + 820, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 474, + 833, + 834, + 835, + 475, + 837, + 483, + 839, + 840, + 841, + 842, + 397, + 844, + 845, + 406, + 409, + 848, + 849, + 850, + 851, + 852, + 853, + 850, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 850, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 405, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 855, + 850, + 406, + 906, + 907, + 908, + 909, + 910, + 845, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 417, + 416, + 929, + 930, + 931, + 932, + 421, + 409, + 412, + 411, + 937, + 938, + 939, + 940, + 941, + 374, + 373, + 944, + 945, + 946, + 947, + 948, + 379, + 950, + 951, + 952, + 953, + 954, + 410, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 389, + 388, + 970, + 971, + 972, + 973, + 974, + 975, + 387, + 977, + 978, + 979, + 980, + 981, + 982, + 386, + 984, + 985, + 986, + 987, + 988, + 385, + 990, + 991, + 992, + 993, + 994, + 384, + 844, + 997, + 998, + 999, + 1000, + 1001, + 390, + 392, + 842, + 394, + 397, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1026, + 1027, + 1028, + 1029, + 1030, + 1031, + 1032, + 1033, + 1034, + 1035, + 1036, + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074, + 1075, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1082, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + 1104, + 1105, + 1106, + 1107, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1115, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136, + 1115, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1141, + 1150, + 1138, + 1152, + 1153, + 1154, + 1155, + 1156, + 1157, + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1174, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1219, + 1220, + 1221, + 1222, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1233, + 1234, + 1235, + 1236, + 1237, + 1238, + 1239, + 1240, + 1241, + 1242, + 1243, + 1244, + 1245, + 1246, + 1247, + 1248, + 1249, + 1139, + 1139, + 1252, + 1253, + 1254, + 1255, + 1256, + 1257, + 1258, + 1259, + 1260, + 1261, + 1262, + 1263, + 1264, + 1265, + 1266, + 1267, + 1268, + 1269, + 1270, + 1271, + 1272, + 1273, + 1274, + 1275, + 1276, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1285, + 1286, + 1287, + 1288, + 1289, + 1290, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1298, + 1299, + 1300, + 1301, + 1302, + 1303, + 1304, + 1305, + 1306, + 1307, + 1308, + 1309, + 1310, + 1311, + 1312, + 1313, + 1314, + 1315, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1331, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1342, + 1343, + 457, + 1345, + 1346, + 1347, + 1348, + 1349, + 454, + 453, + 1352, + 1353, + 1354, + 1355, + 1356, + 1357, + 1358, + 1359, + 1360, + 1361, + 1362, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1139, + 1370, + 1371, + 1372, + 1373, + 1374, + 1375, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1386, + 1387, + 1388, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1399, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1413, + 1414, + 1415, + 399, + 1417, + 1418, + 1419, + 1420, + 402, + 1422, + 1423, + 403, + 1425, + 1426, + 1427, + 1428, + 1429, + 1430, + 1431, + 1432, + 1433, + 1434, + 1435, + 1436, + 1437, + 1438, + 1439, + 1440, + 1441, + 1442, + 1443, + 1444, + 1445, + 1446, + 439, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1455, + 1456, + 1457, + 1458, + 1115, + 1460, + 1461, + 1462, + 1463, + 1464, + 1465, + 1466, + 1467, + 1468, + 1469, + 1470, + 1471, + 1472, + 1473, + 1474, + 1475, + 1476, + 1477, + 1478, + 1479, + 1480, + 1481, + 1482, + 1483, + 1484, + 1485, + 1486, + 1487, + 1488, + 1489, + 1490, + 1491, + 1492, + 1493, + 1494, + 1495, + 1496, + 1497, + 1498, + 1499, + 1500, + 1501, + 1502, + 1503, + 1504, + 1505, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1516, + 1517, + 1518, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1529, + 1530, + 1531, + 1525, + 1533, + 1534, + 1535, + 1536, + 1537, + 1538, + 1539, + 1540, + 1541, + 1542, + 1543, + 1544, + 1545, + 1546, + 1547, + 1548, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1558, + 1559, + 1560, + 1561, + 1562, + 1563, + 1564, + 1565, + 1566, + 1567, + 1568, + 1569, + 1570, + 1571, + 461, + 462, + 463, + 466, + 1576, + 460, + 456, + 472, + 467, + 468, + 470, + 1583, + 445, + 440, + 471, + 1587, + 1588, + 1589, + 1590, + 1591, + 1592, + 1593, + 1594, + 1595, + 1596, + 1597, + 1598, + 1599, + 1600, + 1601, + 1602, + 1603, + 1604, + 1115, + 1606, + 1607, + 1608, + 1609, + 1610, + 1611, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1620, + 1621, + 1622, + 1623, + 1115, + 423, + 425, + 424, + 428, + 429, + 430, + 431, + 1632, + 1633, + 1634, + 1635, + 436, + 437, + 438, + 1639, + 1640, + 1641, + 1642, + 1643, + 1644, + 446, + 448, + 449, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 450, + 1655, + 1656, + 1657, + 1658, + 451, + 1660, + 1661, + 1662, + 1663, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1675, + 1676, + 1677, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1689, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1703, + 1704, + 1705, + 1706, + 1707, + 1708, + 1709, + 1710, + 1711, + 1712, + 1713, + 1144, + 1142, + 1152, + 1717, + 1156, + 1719, + 1168, + 1721, + 1177, + 1140, + 1724, + 1725, + 1228, + 1222, + 1728, + 1178, + 1185, + 1240, + 1234, + 1246, + 1191, + 1203, + 1209, + 852, + 863, + 1007, + 1740, + 1741, + 1008, + 1018, + 1009, + 1095, + 1746, + 1031, + 1083, + 1749, + 1044, + 1070, + 1063, + 1057, + 1045; + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/Yellow.jpg b/Source Code updated 08-12-05/Spacewar3D/Media/Yellow.jpg new file mode 100644 index 0000000..9e6348b Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/Yellow.jpg differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest1.wav b/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest1.wav new file mode 100644 index 0000000..591ee39 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest1.wav differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest2.wav b/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest2.wav new file mode 100644 index 0000000..496ed98 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest2.wav differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest3.wav b/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest3.wav new file mode 100644 index 0000000..f6e26ee Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest3.wav differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest4.wav b/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest4.wav new file mode 100644 index 0000000..cba80b9 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest4.wav differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest5.wav b/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest5.wav new file mode 100644 index 0000000..3af2f25 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest5.wav differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest6.wav b/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest6.wav new file mode 100644 index 0000000..e16d031 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/dude_quest6.wav differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/engine.wav b/Source Code updated 08-12-05/Spacewar3D/Media/engine.wav new file mode 100644 index 0000000..a1110f8 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/engine.wav differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/engine_other.wav b/Source Code updated 08-12-05/Spacewar3D/Media/engine_other.wav new file mode 100644 index 0000000..e6d471e Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/engine_other.wav differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/explode.wav b/Source Code updated 08-12-05/Spacewar3D/Media/explode.wav new file mode 100644 index 0000000..30b0ffb Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/explode.wav differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/explode_other.wav b/Source Code updated 08-12-05/Spacewar3D/Media/explode_other.wav new file mode 100644 index 0000000..b80b99a Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/explode_other.wav differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/hypercharge.wav b/Source Code updated 08-12-05/Spacewar3D/Media/hypercharge.wav new file mode 100644 index 0000000..b1333cf Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/hypercharge.wav differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/laser2.wav b/Source Code updated 08-12-05/Spacewar3D/Media/laser2.wav new file mode 100644 index 0000000..ac6ba37 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/laser2.wav differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/laser2_other.wav b/Source Code updated 08-12-05/Spacewar3D/Media/laser2_other.wav new file mode 100644 index 0000000..9553d6d Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/laser2_other.wav differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/particle-blue.bmp b/Source Code updated 08-12-05/Spacewar3D/Media/particle-blue.bmp new file mode 100644 index 0000000..85debb7 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/particle-blue.bmp differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/photon.x b/Source Code updated 08-12-05/Spacewar3D/Media/photon.x new file mode 100644 index 0000000..5d6912f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Media/photon.x @@ -0,0 +1,4647 @@ +xof 0303txt 0032 + +// DirectX - from MilkShape3D + +Frame joint1 +{ + FrameTransformMatrix + { + 1.000000,0.000000,0.000000,0.000000, + 0.000000,1.000000,0.000000,0.000000, + 0.000000,0.000000,1.000000,0.000000, + 0.005714,0.000000,0.000000,1.000000;; + } + + Mesh joint1Mesh + { + 559; + 0.002874;1.000000;-0.004939;, + 0.171484;0.980785;0.093197;, + 0.149100;0.980785;0.124206;, + 0.002874;1.000000;-0.004939;, + 0.121095;0.980785;0.150252;, + 0.002874;1.000000;-0.004939;, + 0.088547;0.980785;0.170333;, + 0.002874;1.000000;-0.004939;, + 0.052707;0.980785;0.183680;, + 0.002874;1.000000;-0.004939;, + 0.014951;0.980785;0.189777;, + 0.002874;1.000000;-0.004939;, + -0.023267;0.980785;0.188392;, + 0.002874;1.000000;-0.004939;, + -0.060483;0.980785;0.179577;, + 0.002874;1.000000;-0.004939;, + -0.095262;0.980785;0.163671;, + 0.002874;1.000000;-0.004939;, + -0.126271;0.980785;0.141287;, + 0.002874;1.000000;-0.004939;, + -0.152317;0.980785;0.113282;, + 0.002874;1.000000;-0.004939;, + -0.172398;0.980785;0.080734;, + 0.002874;1.000000;-0.004939;, + -0.185745;0.980785;0.044894;, + 0.002874;1.000000;-0.004939;, + -0.191842;0.980785;0.007138;, + 0.002874;1.000000;-0.004939;, + -0.190457;0.980785;-0.031080;, + 0.002874;1.000000;-0.004939;, + -0.181642;0.980785;-0.068296;, + 0.002874;1.000000;-0.004939;, + -0.165736;0.980785;-0.103075;, + 0.002874;1.000000;-0.004939;, + -0.143352;0.980785;-0.134084;, + 0.002874;1.000000;-0.004939;, + -0.115347;0.980785;-0.160130;, + 0.002874;1.000000;-0.004939;, + -0.082799;0.980785;-0.180211;, + 0.002874;1.000000;-0.004939;, + -0.046959;0.980785;-0.193558;, + 0.002874;1.000000;-0.004939;, + -0.009203;0.980785;-0.199655;, + 0.002874;1.000000;-0.004939;, + 0.029016;0.980785;-0.198270;, + 0.002874;1.000000;-0.004939;, + 0.066231;0.980785;-0.189455;, + 0.002874;1.000000;-0.004939;, + 0.101010;0.980785;-0.173549;, + 0.002874;1.000000;-0.004939;, + 0.132019;0.980785;-0.151165;, + 0.002874;1.000000;-0.004939;, + 0.158065;0.980785;-0.123160;, + 0.002874;1.000000;-0.004939;, + 0.178146;0.980785;-0.090612;, + 0.002874;1.000000;-0.004939;, + 0.191493;0.980785;-0.054772;, + 0.002874;1.000000;-0.004939;, + 0.197590;0.980785;-0.017016;, + 0.002874;1.000000;-0.004939;, + 0.196205;0.980785;0.021203;, + 0.002874;1.000000;-0.004939;, + 0.187390;0.980785;0.058418;, + 0.002874;1.000000;-0.004939;, + 0.171484;0.980785;0.093197;, + 0.333615;0.923880;0.187562;, + 0.289705;0.923880;0.248388;, + 0.234772;0.923880;0.299478;, + 0.170928;0.923880;0.338870;, + 0.100625;0.923880;0.365049;, + 0.026565;0.923880;0.377011;, + -0.048404;0.923880;0.374293;, + -0.121403;0.923880;0.357002;, + -0.189627;0.923880;0.325802;, + -0.250453;0.923880;0.281892;, + -0.301543;0.923880;0.226959;, + -0.340935;0.923880;0.163114;, + -0.367114;0.923880;0.092811;, + -0.379076;0.923880;0.018752;, + -0.376358;0.923880;-0.056217;, + -0.359067;0.923880;-0.129217;, + -0.327867;0.923880;-0.197440;, + -0.283957;0.923880;-0.258266;, + -0.229023;0.923880;-0.309356;, + -0.165179;0.923880;-0.348749;, + -0.094876;0.923880;-0.374927;, + -0.020817;0.923880;-0.386888;, + 0.054153;0.923880;-0.384170;, + 0.127152;0.923880;-0.366880;, + 0.195375;0.923880;-0.335680;, + 0.256201;0.923880;-0.291770;, + 0.307291;0.923880;-0.236837;, + 0.346683;0.923880;-0.172993;, + 0.372862;0.923880;-0.102690;, + 0.384824;0.923880;-0.028630;, + 0.382106;0.923880;0.046339;, + 0.364815;0.923880;0.119339;, + 0.333615;0.923880;0.187562;, + 0.483036;0.831470;0.274529;, + 0.419288;0.831470;0.362834;, + 0.339538;0.831470;0.437006;, + 0.246850;0.831470;0.494194;, + 0.144785;0.831470;0.532201;, + 0.037268;0.831470;0.549565;, + -0.071571;0.831470;0.545621;, + -0.177550;0.831470;0.520518;, + -0.276594;0.831470;0.475223;, + -0.364899;0.831470;0.411475;, + -0.439072;0.831470;0.331725;, + -0.496259;0.831470;0.239037;, + -0.534265;0.831470;0.136973;, + -0.551630;0.831470;0.029455;, + -0.547685;0.831470;-0.079385;, + -0.522583;0.831470;-0.185363;, + -0.477288;0.831470;-0.284407;, + -0.413540;0.831470;-0.372712;, + -0.333789;0.831470;-0.446884;, + -0.241102;0.831470;-0.504072;, + -0.139037;0.831470;-0.542079;, + -0.031520;0.831470;-0.559443;, + 0.077320;0.831470;-0.555498;, + 0.183298;0.831470;-0.530396;, + 0.282342;0.831470;-0.485101;, + 0.370647;0.831470;-0.421353;, + 0.444819;0.831470;-0.341603;, + 0.502007;0.831470;-0.248915;, + 0.540014;0.831470;-0.146850;, + 0.557378;0.831470;-0.039333;, + 0.553434;0.831470;0.069506;, + 0.528331;0.831470;0.175485;, + 0.483036;0.831470;0.274529;, + 0.614004;0.707107;0.350757;, + 0.532868;0.707107;0.463148;, + 0.431365;0.707107;0.557550;, + 0.313397;0.707107;0.630337;, + 0.183493;0.707107;0.678710;, + 0.046649;0.707107;0.700811;, + -0.091876;0.707107;0.695790;, + -0.226761;0.707107;0.663842;, + -0.352822;0.707107;0.606191;, + -0.465213;0.707107;0.525056;, + -0.559615;0.707107;0.423552;, + -0.632403;0.707107;0.305583;, + -0.680775;0.707107;0.175680;, + -0.702876;0.707107;0.038836;, + -0.697856;0.707107;-0.099690;, + -0.665906;0.707107;-0.234574;, + -0.608256;0.707107;-0.360635;, + -0.527120;0.707107;-0.473026;, + -0.425617;0.707107;-0.567428;, + -0.307648;0.707107;-0.640215;, + -0.177745;0.707107;-0.688588;, + -0.040901;0.707107;-0.710689;, + 0.097625;0.707107;-0.705669;, + 0.232509;0.707107;-0.673719;, + 0.358570;0.707107;-0.616069;, + 0.470961;0.707107;-0.534934;, + 0.565363;0.707107;-0.433430;, + 0.638150;0.707107;-0.315461;, + 0.686523;0.707107;-0.185558;, + 0.708624;0.707107;-0.048715;, + 0.703603;0.707107;0.089811;, + 0.671654;0.707107;0.224696;, + 0.614004;0.707107;0.350757;, + 0.721487;0.555570;0.413315;, + 0.626081;0.555570;0.545473;, + 0.506727;0.555570;0.656479;, + 0.368010;0.555570;0.742067;, + 0.215260;0.555570;0.798947;, + 0.054349;0.555570;0.824936;, + -0.108541;0.555570;0.819032;, + -0.267148;0.555570;0.781463;, + -0.415380;0.555570;0.713674;, + -0.547538;0.555570;0.618268;, + -0.658544;0.555570;0.498914;, + -0.744132;0.555570;0.360197;, + -0.801013;0.555570;0.207447;, + -0.827001;0.555570;0.046536;, + -0.821097;0.555570;-0.116354;, + -0.783529;0.555570;-0.274962;, + -0.715739;0.555570;-0.423193;, + -0.620333;0.555570;-0.555351;, + -0.500979;0.555570;-0.666357;, + -0.362262;0.555570;-0.751945;, + -0.209512;0.555570;-0.808825;, + -0.048601;0.555570;-0.834813;, + 0.114290;0.555570;-0.828909;, + 0.272896;0.555570;-0.791341;, + 0.421128;0.555570;-0.723552;, + 0.553286;0.555570;-0.628146;, + 0.664292;0.555570;-0.508792;, + 0.749880;0.555570;-0.370075;, + 0.806760;0.555570;-0.217325;, + 0.832749;0.555570;-0.056414;, + 0.826845;0.555570;0.106476;, + 0.789276;0.555570;0.265083;, + 0.721487;0.555570;0.413315;, + 0.801354;0.382683;0.459800;, + 0.695345;0.382683;0.606646;, + 0.562725;0.382683;0.729988;, + 0.408591;0.382683;0.825089;, + 0.238865;0.382683;0.888291;, + 0.060070;0.382683;0.917168;, + -0.120924;0.382683;0.910608;, + -0.297159;0.382683;0.868864;, + -0.461865;0.382683;0.793542;, + -0.608711;0.382683;0.687532;, + -0.732053;0.382683;0.554912;, + -0.827154;0.382683;0.400778;, + -0.890356;0.382683;0.231051;, + -0.919233;0.382683;0.052257;, + -0.912673;0.382683;-0.128737;, + -0.870929;0.382683;-0.304972;, + -0.795606;0.382683;-0.469678;, + -0.689597;0.382683;-0.616524;, + -0.556977;0.382683;-0.739866;, + -0.402843;0.382683;-0.834967;, + -0.233116;0.382683;-0.898170;, + -0.054321;0.382683;-0.927046;, + 0.126672;0.382683;-0.920486;, + 0.302907;0.382683;-0.878742;, + 0.467613;0.382683;-0.803419;, + 0.614458;0.382683;-0.697410;, + 0.737802;0.382683;-0.564790;, + 0.832902;0.382683;-0.410656;, + 0.896105;0.382683;-0.240929;, + 0.924981;0.382683;-0.062134;, + 0.918421;0.382683;0.118859;, + 0.876677;0.382683;0.295094;, + 0.801354;0.382683;0.459800;, + 0.850536;0.195090;0.488425;, + 0.737998;0.195090;0.644316;, + 0.597209;0.195090;0.775256;, + 0.433581;0.195090;0.876214;, + 0.253400;0.195090;0.943310;, + 0.063592;0.195090;0.973964;, + -0.128549;0.195090;0.967000;, + -0.315639;0.195090;0.922686;, + -0.490490;0.195090;0.842723;, + -0.646381;0.195090;0.730185;, + -0.777321;0.195090;0.589396;, + -0.878279;0.195090;0.425768;, + -0.945375;0.195090;0.245587;, + -0.976030;0.195090;0.055779;, + -0.969066;0.195090;-0.136362;, + -0.924751;0.195090;-0.323453;, + -0.844787;0.195090;-0.498303;, + -0.732250;0.195090;-0.654194;, + -0.591461;0.195090;-0.785134;, + -0.427833;0.195090;-0.886092;, + -0.247652;0.195090;-0.953188;, + -0.057844;0.195090;-0.983842;, + 0.134297;0.195090;-0.976879;, + 0.321387;0.195090;-0.932564;, + 0.496238;0.195090;-0.852600;, + 0.652129;0.195090;-0.740063;, + 0.783068;0.195090;-0.599274;, + 0.884027;0.195090;-0.435646;, + 0.951123;0.195090;-0.255465;, + 0.981777;0.195090;-0.065657;, + 0.974813;0.195090;0.126484;, + 0.930499;0.195090;0.313575;, + 0.850536;0.195090;0.488425;, + 0.867142;0.000000;0.498091;, + 0.752400;0.000000;0.657035;, + 0.608853;0.000000;0.790541;, + 0.442019;0.000000;0.893477;, + 0.258309;0.000000;0.961887;, + 0.064782;0.000000;0.993143;, + -0.131124;0.000000;0.986043;, + -0.321880;0.000000;0.940859;, + -0.500156;0.000000;0.859330;, + -0.659100;0.000000;0.744587;, + -0.792607;0.000000;0.601040;, + -0.895542;0.000000;0.434206;, + -0.963952;0.000000;0.250496;, + -0.995208;0.000000;0.056969;, + -0.988107;0.000000;-0.138937;, + -0.942924;0.000000;-0.329693;, + -0.861394;0.000000;-0.507969;, + -0.746652;0.000000;-0.666913;, + -0.603105;0.000000;-0.800419;, + -0.436271;0.000000;-0.903355;, + -0.252561;0.000000;-0.971765;, + -0.059034;0.000000;-1.003020;, + 0.136872;0.000000;-0.995920;, + 0.327628;0.000000;-0.950737;, + 0.505903;0.000000;-0.869207;, + 0.664848;0.000000;-0.754464;, + 0.798354;0.000000;-0.610917;, + 0.901289;0.000000;-0.444083;, + 0.969700;0.000000;-0.260373;, + 1.000955;0.000000;-0.066847;, + 0.993855;0.000000;0.129059;, + 0.948671;0.000000;0.319815;, + 0.867142;0.000000;0.498091;, + 0.850536;-0.195090;0.488425;, + 0.737998;-0.195090;0.644316;, + 0.597209;-0.195090;0.775256;, + 0.433581;-0.195090;0.876214;, + 0.253400;-0.195090;0.943310;, + 0.063592;-0.195090;0.973964;, + -0.128549;-0.195090;0.967000;, + -0.315639;-0.195090;0.922686;, + -0.490490;-0.195090;0.842723;, + -0.646381;-0.195090;0.730185;, + -0.777321;-0.195090;0.589396;, + -0.878279;-0.195090;0.425768;, + -0.945375;-0.195090;0.245587;, + -0.976030;-0.195090;0.055779;, + -0.969065;-0.195090;-0.136362;, + -0.924751;-0.195090;-0.323453;, + -0.844787;-0.195090;-0.498303;, + -0.732250;-0.195090;-0.654194;, + -0.591461;-0.195090;-0.785134;, + -0.427833;-0.195090;-0.886092;, + -0.247652;-0.195090;-0.953188;, + -0.057844;-0.195090;-0.983842;, + 0.134297;-0.195090;-0.976879;, + 0.321387;-0.195090;-0.932564;, + 0.496238;-0.195090;-0.852600;, + 0.652129;-0.195090;-0.740063;, + 0.783068;-0.195090;-0.599274;, + 0.884027;-0.195090;-0.435646;, + 0.951123;-0.195090;-0.255465;, + 0.981777;-0.195090;-0.065657;, + 0.974813;-0.195090;0.126484;, + 0.930499;-0.195090;0.313575;, + 0.850536;-0.195090;0.488425;, + 0.801354;-0.382684;0.459800;, + 0.695345;-0.382684;0.606646;, + 0.562725;-0.382684;0.729988;, + 0.408591;-0.382684;0.825089;, + 0.238865;-0.382684;0.888291;, + 0.060070;-0.382684;0.917168;, + -0.120924;-0.382684;0.910608;, + -0.297159;-0.382684;0.868864;, + -0.461865;-0.382684;0.793542;, + -0.608711;-0.382684;0.687532;, + -0.732053;-0.382684;0.554912;, + -0.827154;-0.382684;0.400778;, + -0.890356;-0.382684;0.231051;, + -0.919233;-0.382684;0.052257;, + -0.912673;-0.382684;-0.128737;, + -0.870929;-0.382684;-0.304972;, + -0.795606;-0.382684;-0.469678;, + -0.689597;-0.382684;-0.616524;, + -0.556977;-0.382684;-0.739866;, + -0.402843;-0.382684;-0.834967;, + -0.233116;-0.382684;-0.898170;, + -0.054321;-0.382684;-0.927046;, + 0.126672;-0.382684;-0.920486;, + 0.302907;-0.382684;-0.878742;, + 0.467613;-0.382684;-0.803419;, + 0.614458;-0.382684;-0.697410;, + 0.737802;-0.382684;-0.564790;, + 0.832902;-0.382684;-0.410656;, + 0.896105;-0.382684;-0.240929;, + 0.924981;-0.382684;-0.062134;, + 0.918421;-0.382684;0.118859;, + 0.876677;-0.382684;0.295094;, + 0.801354;-0.382684;0.459800;, + 0.721487;-0.555570;0.413315;, + 0.626081;-0.555570;0.545473;, + 0.506727;-0.555570;0.656479;, + 0.368010;-0.555570;0.742067;, + 0.215260;-0.555570;0.798947;, + 0.054349;-0.555570;0.824936;, + -0.108541;-0.555570;0.819032;, + -0.267148;-0.555570;0.781463;, + -0.415380;-0.555570;0.713674;, + -0.547538;-0.555570;0.618268;, + -0.658544;-0.555570;0.498914;, + -0.744132;-0.555570;0.360197;, + -0.801013;-0.555570;0.207447;, + -0.827001;-0.555570;0.046536;, + -0.821097;-0.555570;-0.116354;, + -0.783529;-0.555570;-0.274962;, + -0.715739;-0.555570;-0.423193;, + -0.620333;-0.555570;-0.555351;, + -0.500979;-0.555570;-0.666357;, + -0.362262;-0.555570;-0.751945;, + -0.209512;-0.555570;-0.808825;, + -0.048601;-0.555570;-0.834813;, + 0.114290;-0.555570;-0.828909;, + 0.272896;-0.555570;-0.791341;, + 0.421128;-0.555570;-0.723552;, + 0.553286;-0.555570;-0.628146;, + 0.664292;-0.555570;-0.508792;, + 0.749880;-0.555570;-0.370075;, + 0.806760;-0.555570;-0.217325;, + 0.832749;-0.555570;-0.056414;, + 0.826845;-0.555570;0.106476;, + 0.789276;-0.555570;0.265083;, + 0.721487;-0.555570;0.413315;, + 0.614004;-0.707107;0.350757;, + 0.532868;-0.707107;0.463148;, + 0.431365;-0.707107;0.557550;, + 0.313397;-0.707107;0.630337;, + 0.183493;-0.707107;0.678710;, + 0.046649;-0.707107;0.700811;, + -0.091876;-0.707107;0.695790;, + -0.226761;-0.707107;0.663842;, + -0.352822;-0.707107;0.606191;, + -0.465213;-0.707107;0.525056;, + -0.559615;-0.707107;0.423552;, + -0.632403;-0.707107;0.305583;, + -0.680775;-0.707107;0.175680;, + -0.702876;-0.707107;0.038836;, + -0.697856;-0.707107;-0.099690;, + -0.665906;-0.707107;-0.234574;, + -0.608256;-0.707107;-0.360635;, + -0.527120;-0.707107;-0.473026;, + -0.425617;-0.707107;-0.567428;, + -0.307648;-0.707107;-0.640215;, + -0.177745;-0.707107;-0.688588;, + -0.040901;-0.707107;-0.710689;, + 0.097625;-0.707107;-0.705669;, + 0.232509;-0.707107;-0.673719;, + 0.358570;-0.707107;-0.616069;, + 0.470961;-0.707107;-0.534934;, + 0.565363;-0.707107;-0.433430;, + 0.638150;-0.707107;-0.315461;, + 0.686523;-0.707107;-0.185558;, + 0.708624;-0.707107;-0.048715;, + 0.703603;-0.707107;0.089811;, + 0.671654;-0.707107;0.224696;, + 0.614004;-0.707107;0.350757;, + 0.483036;-0.831470;0.274529;, + 0.419288;-0.831470;0.362834;, + 0.339538;-0.831470;0.437006;, + 0.246850;-0.831470;0.494194;, + 0.144786;-0.831470;0.532200;, + 0.037268;-0.831470;0.549565;, + -0.071571;-0.831470;0.545621;, + -0.177550;-0.831470;0.520518;, + -0.276594;-0.831470;0.475223;, + -0.364899;-0.831470;0.411475;, + -0.439072;-0.831470;0.331725;, + -0.496259;-0.831470;0.239037;, + -0.534265;-0.831470;0.136973;, + -0.551630;-0.831470;0.029455;, + -0.547685;-0.831470;-0.079385;, + -0.522583;-0.831470;-0.185363;, + -0.477288;-0.831470;-0.284407;, + -0.413540;-0.831470;-0.372712;, + -0.333789;-0.831470;-0.446884;, + -0.241102;-0.831470;-0.504072;, + -0.139037;-0.831470;-0.542079;, + -0.031520;-0.831470;-0.559443;, + 0.077320;-0.831470;-0.555498;, + 0.183298;-0.831470;-0.530396;, + 0.282342;-0.831470;-0.485101;, + 0.370647;-0.831470;-0.421353;, + 0.444819;-0.831470;-0.341603;, + 0.502007;-0.831470;-0.248915;, + 0.540014;-0.831470;-0.146850;, + 0.557378;-0.831470;-0.039333;, + 0.553434;-0.831470;0.069506;, + 0.528331;-0.831470;0.175485;, + 0.483036;-0.831470;0.274529;, + 0.333615;-0.923880;0.187562;, + 0.289705;-0.923880;0.248388;, + 0.234772;-0.923880;0.299478;, + 0.170928;-0.923880;0.338869;, + 0.100625;-0.923880;0.365049;, + 0.026565;-0.923880;0.377010;, + -0.048404;-0.923880;0.374293;, + -0.121403;-0.923880;0.357002;, + -0.189627;-0.923880;0.325802;, + -0.250453;-0.923880;0.281892;, + -0.301543;-0.923880;0.226959;, + -0.340934;-0.923880;0.163114;, + -0.367114;-0.923880;0.092811;, + -0.379075;-0.923880;0.018751;, + -0.376357;-0.923880;-0.056218;, + -0.359067;-0.923880;-0.129217;, + -0.327867;-0.923880;-0.197440;, + -0.283957;-0.923880;-0.258266;, + -0.229023;-0.923880;-0.309356;, + -0.165180;-0.923880;-0.348748;, + -0.094876;-0.923880;-0.374927;, + -0.020817;-0.923880;-0.386888;, + 0.054153;-0.923880;-0.384170;, + 0.127152;-0.923880;-0.366880;, + 0.195375;-0.923880;-0.335680;, + 0.256201;-0.923880;-0.291770;, + 0.307291;-0.923880;-0.236837;, + 0.346683;-0.923880;-0.172992;, + 0.372862;-0.923880;-0.102690;, + 0.384823;-0.923880;-0.028630;, + 0.382106;-0.923880;0.046339;, + 0.364815;-0.923880;0.119339;, + 0.333615;-0.923880;0.187562;, + 0.171484;-0.980785;0.093197;, + 0.149100;-0.980785;0.124206;, + 0.121095;-0.980785;0.150252;, + 0.088547;-0.980785;0.170333;, + 0.052707;-0.980785;0.183680;, + 0.014951;-0.980785;0.189777;, + -0.023267;-0.980785;0.188392;, + -0.060483;-0.980785;0.179577;, + -0.095262;-0.980785;0.163671;, + -0.126271;-0.980785;0.141287;, + -0.152317;-0.980785;0.113282;, + -0.172398;-0.980785;0.080734;, + -0.185745;-0.980785;0.044894;, + -0.191842;-0.980785;0.007138;, + -0.190457;-0.980785;-0.031080;, + -0.181642;-0.980785;-0.068296;, + -0.165736;-0.980785;-0.103075;, + -0.143352;-0.980785;-0.134084;, + -0.115347;-0.980785;-0.160130;, + -0.082799;-0.980785;-0.180211;, + -0.046959;-0.980785;-0.193558;, + -0.009203;-0.980785;-0.199655;, + 0.029016;-0.980785;-0.198270;, + 0.066231;-0.980785;-0.189455;, + 0.101010;-0.980785;-0.173549;, + 0.132019;-0.980785;-0.151165;, + 0.158065;-0.980785;-0.123160;, + 0.178146;-0.980785;-0.090612;, + 0.191493;-0.980785;-0.054772;, + 0.197590;-0.980785;-0.017016;, + 0.196205;-0.980785;0.021203;, + 0.187390;-0.980785;0.058418;, + 0.171484;-0.980785;0.093197;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;, + 0.002874;-1.000000;-0.004939;; + 960; + 3;0,2,1;, + 3;3,4,2;, + 3;5,6,4;, + 3;7,8,6;, + 3;9,10,8;, + 3;11,12,10;, + 3;13,14,12;, + 3;15,16,14;, + 3;17,18,16;, + 3;19,20,18;, + 3;21,22,20;, + 3;23,24,22;, + 3;25,26,24;, + 3;27,28,26;, + 3;29,30,28;, + 3;31,32,30;, + 3;33,34,32;, + 3;35,36,34;, + 3;37,38,36;, + 3;39,40,38;, + 3;41,42,40;, + 3;43,44,42;, + 3;45,46,44;, + 3;47,48,46;, + 3;49,50,48;, + 3;51,52,50;, + 3;53,54,52;, + 3;55,56,54;, + 3;57,58,56;, + 3;59,60,58;, + 3;61,62,60;, + 3;63,64,62;, + 3;1,66,65;, + 3;1,2,66;, + 3;2,67,66;, + 3;2,4,67;, + 3;4,68,67;, + 3;4,6,68;, + 3;6,69,68;, + 3;6,8,69;, + 3;8,70,69;, + 3;8,10,70;, + 3;10,71,70;, + 3;10,12,71;, + 3;12,72,71;, + 3;12,14,72;, + 3;14,73,72;, + 3;14,16,73;, + 3;16,74,73;, + 3;16,18,74;, + 3;18,75,74;, + 3;18,20,75;, + 3;20,76,75;, + 3;20,22,76;, + 3;22,77,76;, + 3;22,24,77;, + 3;24,78,77;, + 3;24,26,78;, + 3;26,79,78;, + 3;26,28,79;, + 3;28,80,79;, + 3;28,30,80;, + 3;30,81,80;, + 3;30,32,81;, + 3;32,82,81;, + 3;32,34,82;, + 3;34,83,82;, + 3;34,36,83;, + 3;36,84,83;, + 3;36,38,84;, + 3;38,85,84;, + 3;38,40,85;, + 3;40,86,85;, + 3;40,42,86;, + 3;42,87,86;, + 3;42,44,87;, + 3;44,88,87;, + 3;44,46,88;, + 3;46,89,88;, + 3;46,48,89;, + 3;48,90,89;, + 3;48,50,90;, + 3;50,91,90;, + 3;50,52,91;, + 3;52,92,91;, + 3;52,54,92;, + 3;54,93,92;, + 3;54,56,93;, + 3;56,94,93;, + 3;56,58,94;, + 3;58,95,94;, + 3;58,60,95;, + 3;60,96,95;, + 3;60,62,96;, + 3;62,97,96;, + 3;62,64,97;, + 3;65,99,98;, + 3;65,66,99;, + 3;66,100,99;, + 3;66,67,100;, + 3;67,101,100;, + 3;67,68,101;, + 3;68,102,101;, + 3;68,69,102;, + 3;69,103,102;, + 3;69,70,103;, + 3;70,104,103;, + 3;70,71,104;, + 3;71,105,104;, + 3;71,72,105;, + 3;72,106,105;, + 3;72,73,106;, + 3;73,107,106;, + 3;73,74,107;, + 3;74,108,107;, + 3;74,75,108;, + 3;75,109,108;, + 3;75,76,109;, + 3;76,110,109;, + 3;76,77,110;, + 3;77,111,110;, + 3;77,78,111;, + 3;78,112,111;, + 3;78,79,112;, + 3;79,113,112;, + 3;79,80,113;, + 3;80,114,113;, + 3;80,81,114;, + 3;81,115,114;, + 3;81,82,115;, + 3;82,116,115;, + 3;82,83,116;, + 3;83,117,116;, + 3;83,84,117;, + 3;84,118,117;, + 3;84,85,118;, + 3;85,119,118;, + 3;85,86,119;, + 3;86,120,119;, + 3;86,87,120;, + 3;87,121,120;, + 3;87,88,121;, + 3;88,122,121;, + 3;88,89,122;, + 3;89,123,122;, + 3;89,90,123;, + 3;90,124,123;, + 3;90,91,124;, + 3;91,125,124;, + 3;91,92,125;, + 3;92,126,125;, + 3;92,93,126;, + 3;93,127,126;, + 3;93,94,127;, + 3;94,128,127;, + 3;94,95,128;, + 3;95,129,128;, + 3;95,96,129;, + 3;96,130,129;, + 3;96,97,130;, + 3;98,132,131;, + 3;98,99,132;, + 3;99,133,132;, + 3;99,100,133;, + 3;100,134,133;, + 3;100,101,134;, + 3;101,135,134;, + 3;101,102,135;, + 3;102,136,135;, + 3;102,103,136;, + 3;103,137,136;, + 3;103,104,137;, + 3;104,138,137;, + 3;104,105,138;, + 3;105,139,138;, + 3;105,106,139;, + 3;106,140,139;, + 3;106,107,140;, + 3;107,141,140;, + 3;107,108,141;, + 3;108,142,141;, + 3;108,109,142;, + 3;109,143,142;, + 3;109,110,143;, + 3;110,144,143;, + 3;110,111,144;, + 3;111,145,144;, + 3;111,112,145;, + 3;112,146,145;, + 3;112,113,146;, + 3;113,147,146;, + 3;113,114,147;, + 3;114,148,147;, + 3;114,115,148;, + 3;115,149,148;, + 3;115,116,149;, + 3;116,150,149;, + 3;116,117,150;, + 3;117,151,150;, + 3;117,118,151;, + 3;118,152,151;, + 3;118,119,152;, + 3;119,153,152;, + 3;119,120,153;, + 3;120,154,153;, + 3;120,121,154;, + 3;121,155,154;, + 3;121,122,155;, + 3;122,156,155;, + 3;122,123,156;, + 3;123,157,156;, + 3;123,124,157;, + 3;124,158,157;, + 3;124,125,158;, + 3;125,159,158;, + 3;125,126,159;, + 3;126,160,159;, + 3;126,127,160;, + 3;127,161,160;, + 3;127,128,161;, + 3;128,162,161;, + 3;128,129,162;, + 3;129,163,162;, + 3;129,130,163;, + 3;131,165,164;, + 3;131,132,165;, + 3;132,166,165;, + 3;132,133,166;, + 3;133,167,166;, + 3;133,134,167;, + 3;134,168,167;, + 3;134,135,168;, + 3;135,169,168;, + 3;135,136,169;, + 3;136,170,169;, + 3;136,137,170;, + 3;137,171,170;, + 3;137,138,171;, + 3;138,172,171;, + 3;138,139,172;, + 3;139,173,172;, + 3;139,140,173;, + 3;140,174,173;, + 3;140,141,174;, + 3;141,175,174;, + 3;141,142,175;, + 3;142,176,175;, + 3;142,143,176;, + 3;143,177,176;, + 3;143,144,177;, + 3;144,178,177;, + 3;144,145,178;, + 3;145,179,178;, + 3;145,146,179;, + 3;146,180,179;, + 3;146,147,180;, + 3;147,181,180;, + 3;147,148,181;, + 3;148,182,181;, + 3;148,149,182;, + 3;149,183,182;, + 3;149,150,183;, + 3;150,184,183;, + 3;150,151,184;, + 3;151,185,184;, + 3;151,152,185;, + 3;152,186,185;, + 3;152,153,186;, + 3;153,187,186;, + 3;153,154,187;, + 3;154,188,187;, + 3;154,155,188;, + 3;155,189,188;, + 3;155,156,189;, + 3;156,190,189;, + 3;156,157,190;, + 3;157,191,190;, + 3;157,158,191;, + 3;158,192,191;, + 3;158,159,192;, + 3;159,193,192;, + 3;159,160,193;, + 3;160,194,193;, + 3;160,161,194;, + 3;161,195,194;, + 3;161,162,195;, + 3;162,196,195;, + 3;162,163,196;, + 3;164,198,197;, + 3;164,165,198;, + 3;165,199,198;, + 3;165,166,199;, + 3;166,200,199;, + 3;166,167,200;, + 3;167,201,200;, + 3;167,168,201;, + 3;168,202,201;, + 3;168,169,202;, + 3;169,203,202;, + 3;169,170,203;, + 3;170,204,203;, + 3;170,171,204;, + 3;171,205,204;, + 3;171,172,205;, + 3;172,206,205;, + 3;172,173,206;, + 3;173,207,206;, + 3;173,174,207;, + 3;174,208,207;, + 3;174,175,208;, + 3;175,209,208;, + 3;175,176,209;, + 3;176,210,209;, + 3;176,177,210;, + 3;177,211,210;, + 3;177,178,211;, + 3;178,212,211;, + 3;178,179,212;, + 3;179,213,212;, + 3;179,180,213;, + 3;180,214,213;, + 3;180,181,214;, + 3;181,215,214;, + 3;181,182,215;, + 3;182,216,215;, + 3;182,183,216;, + 3;183,217,216;, + 3;183,184,217;, + 3;184,218,217;, + 3;184,185,218;, + 3;185,219,218;, + 3;185,186,219;, + 3;186,220,219;, + 3;186,187,220;, + 3;187,221,220;, + 3;187,188,221;, + 3;188,222,221;, + 3;188,189,222;, + 3;189,223,222;, + 3;189,190,223;, + 3;190,224,223;, + 3;190,191,224;, + 3;191,225,224;, + 3;191,192,225;, + 3;192,226,225;, + 3;192,193,226;, + 3;193,227,226;, + 3;193,194,227;, + 3;194,228,227;, + 3;194,195,228;, + 3;195,229,228;, + 3;195,196,229;, + 3;197,231,230;, + 3;197,198,231;, + 3;198,232,231;, + 3;198,199,232;, + 3;199,233,232;, + 3;199,200,233;, + 3;200,234,233;, + 3;200,201,234;, + 3;201,235,234;, + 3;201,202,235;, + 3;202,236,235;, + 3;202,203,236;, + 3;203,237,236;, + 3;203,204,237;, + 3;204,238,237;, + 3;204,205,238;, + 3;205,239,238;, + 3;205,206,239;, + 3;206,240,239;, + 3;206,207,240;, + 3;207,241,240;, + 3;207,208,241;, + 3;208,242,241;, + 3;208,209,242;, + 3;209,243,242;, + 3;209,210,243;, + 3;210,244,243;, + 3;210,211,244;, + 3;211,245,244;, + 3;211,212,245;, + 3;212,246,245;, + 3;212,213,246;, + 3;213,247,246;, + 3;213,214,247;, + 3;214,248,247;, + 3;214,215,248;, + 3;215,249,248;, + 3;215,216,249;, + 3;216,250,249;, + 3;216,217,250;, + 3;217,251,250;, + 3;217,218,251;, + 3;218,252,251;, + 3;218,219,252;, + 3;219,253,252;, + 3;219,220,253;, + 3;220,254,253;, + 3;220,221,254;, + 3;221,255,254;, + 3;221,222,255;, + 3;222,256,255;, + 3;222,223,256;, + 3;223,257,256;, + 3;223,224,257;, + 3;224,258,257;, + 3;224,225,258;, + 3;225,259,258;, + 3;225,226,259;, + 3;226,260,259;, + 3;226,227,260;, + 3;227,261,260;, + 3;227,228,261;, + 3;228,262,261;, + 3;228,229,262;, + 3;230,264,263;, + 3;230,231,264;, + 3;231,265,264;, + 3;231,232,265;, + 3;232,266,265;, + 3;232,233,266;, + 3;233,267,266;, + 3;233,234,267;, + 3;234,268,267;, + 3;234,235,268;, + 3;235,269,268;, + 3;235,236,269;, + 3;236,270,269;, + 3;236,237,270;, + 3;237,271,270;, + 3;237,238,271;, + 3;238,272,271;, + 3;238,239,272;, + 3;239,273,272;, + 3;239,240,273;, + 3;240,274,273;, + 3;240,241,274;, + 3;241,275,274;, + 3;241,242,275;, + 3;242,276,275;, + 3;242,243,276;, + 3;243,277,276;, + 3;243,244,277;, + 3;244,278,277;, + 3;244,245,278;, + 3;245,279,278;, + 3;245,246,279;, + 3;246,280,279;, + 3;246,247,280;, + 3;247,281,280;, + 3;247,248,281;, + 3;248,282,281;, + 3;248,249,282;, + 3;249,283,282;, + 3;249,250,283;, + 3;250,284,283;, + 3;250,251,284;, + 3;251,285,284;, + 3;251,252,285;, + 3;252,286,285;, + 3;252,253,286;, + 3;253,287,286;, + 3;253,254,287;, + 3;254,288,287;, + 3;254,255,288;, + 3;255,289,288;, + 3;255,256,289;, + 3;256,290,289;, + 3;256,257,290;, + 3;257,291,290;, + 3;257,258,291;, + 3;258,292,291;, + 3;258,259,292;, + 3;259,293,292;, + 3;259,260,293;, + 3;260,294,293;, + 3;260,261,294;, + 3;261,295,294;, + 3;261,262,295;, + 3;263,297,296;, + 3;263,264,297;, + 3;264,298,297;, + 3;264,265,298;, + 3;265,299,298;, + 3;265,266,299;, + 3;266,300,299;, + 3;266,267,300;, + 3;267,301,300;, + 3;267,268,301;, + 3;268,302,301;, + 3;268,269,302;, + 3;269,303,302;, + 3;269,270,303;, + 3;270,304,303;, + 3;270,271,304;, + 3;271,305,304;, + 3;271,272,305;, + 3;272,306,305;, + 3;272,273,306;, + 3;273,307,306;, + 3;273,274,307;, + 3;274,308,307;, + 3;274,275,308;, + 3;275,309,308;, + 3;275,276,309;, + 3;276,310,309;, + 3;276,277,310;, + 3;277,311,310;, + 3;277,278,311;, + 3;278,312,311;, + 3;278,279,312;, + 3;279,313,312;, + 3;279,280,313;, + 3;280,314,313;, + 3;280,281,314;, + 3;281,315,314;, + 3;281,282,315;, + 3;282,316,315;, + 3;282,283,316;, + 3;283,317,316;, + 3;283,284,317;, + 3;284,318,317;, + 3;284,285,318;, + 3;285,319,318;, + 3;285,286,319;, + 3;286,320,319;, + 3;286,287,320;, + 3;287,321,320;, + 3;287,288,321;, + 3;288,322,321;, + 3;288,289,322;, + 3;289,323,322;, + 3;289,290,323;, + 3;290,324,323;, + 3;290,291,324;, + 3;291,325,324;, + 3;291,292,325;, + 3;292,326,325;, + 3;292,293,326;, + 3;293,327,326;, + 3;293,294,327;, + 3;294,328,327;, + 3;294,295,328;, + 3;296,330,329;, + 3;296,297,330;, + 3;297,331,330;, + 3;297,298,331;, + 3;298,332,331;, + 3;298,299,332;, + 3;299,333,332;, + 3;299,300,333;, + 3;300,334,333;, + 3;300,301,334;, + 3;301,335,334;, + 3;301,302,335;, + 3;302,336,335;, + 3;302,303,336;, + 3;303,337,336;, + 3;303,304,337;, + 3;304,338,337;, + 3;304,305,338;, + 3;305,339,338;, + 3;305,306,339;, + 3;306,340,339;, + 3;306,307,340;, + 3;307,341,340;, + 3;307,308,341;, + 3;308,342,341;, + 3;308,309,342;, + 3;309,343,342;, + 3;309,310,343;, + 3;310,344,343;, + 3;310,311,344;, + 3;311,345,344;, + 3;311,312,345;, + 3;312,346,345;, + 3;312,313,346;, + 3;313,347,346;, + 3;313,314,347;, + 3;314,348,347;, + 3;314,315,348;, + 3;315,349,348;, + 3;315,316,349;, + 3;316,350,349;, + 3;316,317,350;, + 3;317,351,350;, + 3;317,318,351;, + 3;318,352,351;, + 3;318,319,352;, + 3;319,353,352;, + 3;319,320,353;, + 3;320,354,353;, + 3;320,321,354;, + 3;321,355,354;, + 3;321,322,355;, + 3;322,356,355;, + 3;322,323,356;, + 3;323,357,356;, + 3;323,324,357;, + 3;324,358,357;, + 3;324,325,358;, + 3;325,359,358;, + 3;325,326,359;, + 3;326,360,359;, + 3;326,327,360;, + 3;327,361,360;, + 3;327,328,361;, + 3;329,363,362;, + 3;329,330,363;, + 3;330,364,363;, + 3;330,331,364;, + 3;331,365,364;, + 3;331,332,365;, + 3;332,366,365;, + 3;332,333,366;, + 3;333,367,366;, + 3;333,334,367;, + 3;334,368,367;, + 3;334,335,368;, + 3;335,369,368;, + 3;335,336,369;, + 3;336,370,369;, + 3;336,337,370;, + 3;337,371,370;, + 3;337,338,371;, + 3;338,372,371;, + 3;338,339,372;, + 3;339,373,372;, + 3;339,340,373;, + 3;340,374,373;, + 3;340,341,374;, + 3;341,375,374;, + 3;341,342,375;, + 3;342,376,375;, + 3;342,343,376;, + 3;343,377,376;, + 3;343,344,377;, + 3;344,378,377;, + 3;344,345,378;, + 3;345,379,378;, + 3;345,346,379;, + 3;346,380,379;, + 3;346,347,380;, + 3;347,381,380;, + 3;347,348,381;, + 3;348,382,381;, + 3;348,349,382;, + 3;349,383,382;, + 3;349,350,383;, + 3;350,384,383;, + 3;350,351,384;, + 3;351,385,384;, + 3;351,352,385;, + 3;352,386,385;, + 3;352,353,386;, + 3;353,387,386;, + 3;353,354,387;, + 3;354,388,387;, + 3;354,355,388;, + 3;355,389,388;, + 3;355,356,389;, + 3;356,390,389;, + 3;356,357,390;, + 3;357,391,390;, + 3;357,358,391;, + 3;358,392,391;, + 3;358,359,392;, + 3;359,393,392;, + 3;359,360,393;, + 3;360,394,393;, + 3;360,361,394;, + 3;362,396,395;, + 3;362,363,396;, + 3;363,397,396;, + 3;363,364,397;, + 3;364,398,397;, + 3;364,365,398;, + 3;365,399,398;, + 3;365,366,399;, + 3;366,400,399;, + 3;366,367,400;, + 3;367,401,400;, + 3;367,368,401;, + 3;368,402,401;, + 3;368,369,402;, + 3;369,403,402;, + 3;369,370,403;, + 3;370,404,403;, + 3;370,371,404;, + 3;371,405,404;, + 3;371,372,405;, + 3;372,406,405;, + 3;372,373,406;, + 3;373,407,406;, + 3;373,374,407;, + 3;374,408,407;, + 3;374,375,408;, + 3;375,409,408;, + 3;375,376,409;, + 3;376,410,409;, + 3;376,377,410;, + 3;377,411,410;, + 3;377,378,411;, + 3;378,412,411;, + 3;378,379,412;, + 3;379,413,412;, + 3;379,380,413;, + 3;380,414,413;, + 3;380,381,414;, + 3;381,415,414;, + 3;381,382,415;, + 3;382,416,415;, + 3;382,383,416;, + 3;383,417,416;, + 3;383,384,417;, + 3;384,418,417;, + 3;384,385,418;, + 3;385,419,418;, + 3;385,386,419;, + 3;386,420,419;, + 3;386,387,420;, + 3;387,421,420;, + 3;387,388,421;, + 3;388,422,421;, + 3;388,389,422;, + 3;389,423,422;, + 3;389,390,423;, + 3;390,424,423;, + 3;390,391,424;, + 3;391,425,424;, + 3;391,392,425;, + 3;392,426,425;, + 3;392,393,426;, + 3;393,427,426;, + 3;393,394,427;, + 3;395,429,428;, + 3;395,396,429;, + 3;396,430,429;, + 3;396,397,430;, + 3;397,431,430;, + 3;397,398,431;, + 3;398,432,431;, + 3;398,399,432;, + 3;399,433,432;, + 3;399,400,433;, + 3;400,434,433;, + 3;400,401,434;, + 3;401,435,434;, + 3;401,402,435;, + 3;402,436,435;, + 3;402,403,436;, + 3;403,437,436;, + 3;403,404,437;, + 3;404,438,437;, + 3;404,405,438;, + 3;405,439,438;, + 3;405,406,439;, + 3;406,440,439;, + 3;406,407,440;, + 3;407,441,440;, + 3;407,408,441;, + 3;408,442,441;, + 3;408,409,442;, + 3;409,443,442;, + 3;409,410,443;, + 3;410,444,443;, + 3;410,411,444;, + 3;411,445,444;, + 3;411,412,445;, + 3;412,446,445;, + 3;412,413,446;, + 3;413,447,446;, + 3;413,414,447;, + 3;414,448,447;, + 3;414,415,448;, + 3;415,449,448;, + 3;415,416,449;, + 3;416,450,449;, + 3;416,417,450;, + 3;417,451,450;, + 3;417,418,451;, + 3;418,452,451;, + 3;418,419,452;, + 3;419,453,452;, + 3;419,420,453;, + 3;420,454,453;, + 3;420,421,454;, + 3;421,455,454;, + 3;421,422,455;, + 3;422,456,455;, + 3;422,423,456;, + 3;423,457,456;, + 3;423,424,457;, + 3;424,458,457;, + 3;424,425,458;, + 3;425,459,458;, + 3;425,426,459;, + 3;426,460,459;, + 3;426,427,460;, + 3;428,462,461;, + 3;428,429,462;, + 3;429,463,462;, + 3;429,430,463;, + 3;430,464,463;, + 3;430,431,464;, + 3;431,465,464;, + 3;431,432,465;, + 3;432,466,465;, + 3;432,433,466;, + 3;433,467,466;, + 3;433,434,467;, + 3;434,468,467;, + 3;434,435,468;, + 3;435,469,468;, + 3;435,436,469;, + 3;436,470,469;, + 3;436,437,470;, + 3;437,471,470;, + 3;437,438,471;, + 3;438,472,471;, + 3;438,439,472;, + 3;439,473,472;, + 3;439,440,473;, + 3;440,474,473;, + 3;440,441,474;, + 3;441,475,474;, + 3;441,442,475;, + 3;442,476,475;, + 3;442,443,476;, + 3;443,477,476;, + 3;443,444,477;, + 3;444,478,477;, + 3;444,445,478;, + 3;445,479,478;, + 3;445,446,479;, + 3;446,480,479;, + 3;446,447,480;, + 3;447,481,480;, + 3;447,448,481;, + 3;448,482,481;, + 3;448,449,482;, + 3;449,483,482;, + 3;449,450,483;, + 3;450,484,483;, + 3;450,451,484;, + 3;451,485,484;, + 3;451,452,485;, + 3;452,486,485;, + 3;452,453,486;, + 3;453,487,486;, + 3;453,454,487;, + 3;454,488,487;, + 3;454,455,488;, + 3;455,489,488;, + 3;455,456,489;, + 3;456,490,489;, + 3;456,457,490;, + 3;457,491,490;, + 3;457,458,491;, + 3;458,492,491;, + 3;458,459,492;, + 3;459,493,492;, + 3;459,460,493;, + 3;461,495,494;, + 3;461,462,495;, + 3;462,496,495;, + 3;462,463,496;, + 3;463,497,496;, + 3;463,464,497;, + 3;464,498,497;, + 3;464,465,498;, + 3;465,499,498;, + 3;465,466,499;, + 3;466,500,499;, + 3;466,467,500;, + 3;467,501,500;, + 3;467,468,501;, + 3;468,502,501;, + 3;468,469,502;, + 3;469,503,502;, + 3;469,470,503;, + 3;470,504,503;, + 3;470,471,504;, + 3;471,505,504;, + 3;471,472,505;, + 3;472,506,505;, + 3;472,473,506;, + 3;473,507,506;, + 3;473,474,507;, + 3;474,508,507;, + 3;474,475,508;, + 3;475,509,508;, + 3;475,476,509;, + 3;476,510,509;, + 3;476,477,510;, + 3;477,511,510;, + 3;477,478,511;, + 3;478,512,511;, + 3;478,479,512;, + 3;479,513,512;, + 3;479,480,513;, + 3;480,514,513;, + 3;480,481,514;, + 3;481,515,514;, + 3;481,482,515;, + 3;482,516,515;, + 3;482,483,516;, + 3;483,517,516;, + 3;483,484,517;, + 3;484,518,517;, + 3;484,485,518;, + 3;485,519,518;, + 3;485,486,519;, + 3;486,520,519;, + 3;486,487,520;, + 3;487,521,520;, + 3;487,488,521;, + 3;488,522,521;, + 3;488,489,522;, + 3;489,523,522;, + 3;489,490,523;, + 3;490,524,523;, + 3;490,491,524;, + 3;491,525,524;, + 3;491,492,525;, + 3;492,526,525;, + 3;492,493,526;, + 3;527,494,495;, + 3;528,495,496;, + 3;529,496,497;, + 3;530,497,498;, + 3;531,498,499;, + 3;532,499,500;, + 3;533,500,501;, + 3;534,501,502;, + 3;535,502,503;, + 3;536,503,504;, + 3;537,504,505;, + 3;538,505,506;, + 3;539,506,507;, + 3;540,507,508;, + 3;541,508,509;, + 3;542,509,510;, + 3;543,510,511;, + 3;544,511,512;, + 3;545,512,513;, + 3;546,513,514;, + 3;547,514,515;, + 3;548,515,516;, + 3;549,516,517;, + 3;550,517,518;, + 3;551,518,519;, + 3;552,519,520;, + 3;553,520,521;, + 3;554,521,522;, + 3;555,522,523;, + 3;556,523,524;, + 3;557,524,525;, + 3;558,525,526;; + + MeshNormals + { + 559; + 0.079855;0.995138;0.057646;, + 0.185020;0.973616;0.133564;, + 0.156857;0.976741;0.146197;, + 0.067073;0.995138;0.072118;, + 0.125321;0.976741;0.173989;, + 0.051715;0.995138;0.083818;, + 0.088969;0.976741;0.195095;, + 0.034370;0.995138;0.092296;, + 0.049199;0.976741;0.208703;, + 0.015702;0.995138;0.097228;, + 0.007536;0.976741;0.214291;, + -0.003567;0.995138;0.098424;, + -0.034414;0.976741;0.211644;, + -0.022700;0.995138;0.095837;, + -0.075043;0.976741;0.200863;, + -0.040962;0.995138;0.089566;, + -0.112787;0.976741;0.182365;, + -0.057646;0.995138;0.079855;, + -0.146197;0.976741;0.156857;, + -0.072119;0.995138;0.067073;, + -0.173989;0.976741;0.125321;, + -0.083818;0.995138;0.051715;, + -0.195095;0.976741;0.088970;, + -0.092296;0.995138;0.034370;, + -0.208703;0.976741;0.049199;, + -0.097228;0.995138;0.015702;, + -0.214291;0.976741;0.007536;, + -0.098424;0.995138;-0.003567;, + -0.211645;0.976741;-0.034413;, + -0.095837;0.995138;-0.022700;, + -0.200863;0.976741;-0.075043;, + -0.089566;0.995138;-0.040962;, + -0.182364;0.976741;-0.112787;, + -0.079855;0.995138;-0.057646;, + -0.156857;0.976741;-0.146197;, + -0.067073;0.995138;-0.072118;, + -0.125321;0.976741;-0.173989;, + -0.051715;0.995138;-0.083818;, + -0.088969;0.976741;-0.195095;, + -0.034370;0.995138;-0.092296;, + -0.049199;0.976741;-0.208703;, + -0.015702;0.995138;-0.097228;, + -0.007536;0.976741;-0.214292;, + 0.003567;0.995138;-0.098423;, + 0.034413;0.976741;-0.211645;, + 0.022700;0.995138;-0.095836;, + 0.075043;0.976741;-0.200863;, + 0.040962;0.995138;-0.089566;, + 0.112787;0.976741;-0.182364;, + 0.057646;0.995138;-0.079855;, + 0.146197;0.976741;-0.156857;, + 0.072118;0.995138;-0.067073;, + 0.173989;0.976741;-0.125321;, + 0.083818;0.995138;-0.051715;, + 0.195095;0.976741;-0.088969;, + 0.092296;0.995138;-0.034370;, + 0.208703;0.976741;-0.049199;, + 0.097228;0.995138;-0.015702;, + 0.214291;0.976741;-0.007535;, + 0.098424;0.995138;0.003567;, + 0.211644;0.976741;0.034414;, + 0.095836;0.995138;0.022700;, + 0.200863;0.976741;0.075043;, + 0.089566;0.995138;0.040962;, + 0.178225;0.980608;0.081509;, + 0.336013;0.910086;0.242568;, + 0.284832;0.923889;0.255540;, + 0.229506;0.923888;0.306198;, + 0.165359;0.923889;0.345089;, + 0.094858;0.923888;0.370718;, + 0.020711;0.923889;0.382101;, + -0.054232;0.923889;0.378799;, + -0.127089;0.923889;0.360941;, + -0.195063;0.923889;0.329212;, + -0.255539;0.923889;0.284832;, + -0.306198;0.923889;0.229505;, + -0.345089;0.923889;0.165358;, + -0.370719;0.923888;0.094859;, + -0.382101;0.923888;0.020711;, + -0.378799;0.923888;-0.054232;, + -0.360941;0.923888;-0.127088;, + -0.329212;0.923889;-0.195063;, + -0.284832;0.923889;-0.255540;, + -0.229506;0.923888;-0.306198;, + -0.165358;0.923889;-0.345089;, + -0.094857;0.923889;-0.370718;, + -0.020710;0.923889;-0.382101;, + 0.054231;0.923888;-0.378800;, + 0.127088;0.923888;-0.360942;, + 0.195064;0.923889;-0.329211;, + 0.255540;0.923888;-0.284832;, + 0.306198;0.923888;-0.229506;, + 0.345089;0.923889;-0.165359;, + 0.370718;0.923888;-0.094858;, + 0.382101;0.923889;-0.020711;, + 0.378799;0.923889;0.054232;, + 0.360941;0.923888;0.127089;, + 0.321590;0.935388;0.147072;, + 0.473817;0.811480;0.342050;, + 0.414612;0.831490;0.369758;, + 0.334510;0.831490;0.443540;, + 0.241552;0.831490;0.500277;, + 0.139310;0.831490;0.537789;, + 0.031717;0.831490;0.554634;, + -0.077097;0.831490;0.550164;, + -0.182947;0.831491;0.524551;, + -0.281767;0.831491;0.478781;, + -0.369757;0.831490;0.414612;, + -0.443539;0.831490;0.334510;, + -0.500277;0.831491;0.241550;, + -0.537789;0.831490;0.139310;, + -0.554633;0.831490;0.031717;, + -0.550163;0.831490;-0.077098;, + -0.524552;0.831490;-0.182946;, + -0.478781;0.831491;-0.281766;, + -0.414612;0.831490;-0.369758;, + -0.334510;0.831490;-0.443540;, + -0.241551;0.831490;-0.500277;, + -0.139310;0.831490;-0.537789;, + -0.031716;0.831490;-0.554633;, + 0.077099;0.831491;-0.550162;, + 0.182947;0.831490;-0.524552;, + 0.281766;0.831490;-0.478782;, + 0.369758;0.831490;-0.414612;, + 0.443540;0.831490;-0.334510;, + 0.500277;0.831490;-0.241551;, + 0.537789;0.831490;-0.139310;, + 0.554634;0.831490;-0.031717;, + 0.550164;0.831490;0.077097;, + 0.524551;0.831490;0.182947;, + 0.481802;0.848126;0.220339;, + 0.593137;0.681794;0.428189;, + 0.528462;0.707137;0.469770;, + 0.426661;0.707137;0.563841;, + 0.308464;0.707137;0.636245;, + 0.178411;0.707137;0.684198;, + 0.041502;0.707137;0.705857;, + -0.097001;0.707137;0.700392;, + -0.231776;0.707137;0.668010;, + -0.357646;0.707137;0.609955;, + -0.469770;0.707137;0.528463;, + -0.563841;0.707137;0.426662;, + -0.636245;0.707137;0.308463;, + -0.684197;0.707138;0.178409;, + -0.705857;0.707138;0.041503;, + -0.700390;0.707138;-0.097002;, + -0.668009;0.707137;-0.231777;, + -0.609956;0.707137;-0.357646;, + -0.528462;0.707137;-0.469771;, + -0.426662;0.707137;-0.563841;, + -0.308463;0.707137;-0.636245;, + -0.178410;0.707137;-0.684198;, + -0.041503;0.707136;-0.705858;, + 0.097002;0.707137;-0.700392;, + 0.231777;0.707137;-0.668009;, + 0.357645;0.707137;-0.609956;, + 0.469770;0.707137;-0.528462;, + 0.563841;0.707137;-0.426662;, + 0.636245;0.707137;-0.308464;, + 0.684198;0.707137;-0.178411;, + 0.705857;0.707137;-0.041502;, + 0.700391;0.707137;0.097002;, + 0.668010;0.707137;0.231776;, + 0.623175;0.728308;0.284992;, + 0.689481;0.526182;0.497743;, + 0.622009;0.555603;0.551734;, + 0.502419;0.555604;0.662479;, + 0.363521;0.555604;0.747768;, + 0.210655;0.555603;0.804319;, + 0.049692;0.555604;0.829961;, + -0.113181;0.555604;0.823708;, + -0.271701;0.555603;0.785801;, + -0.419785;0.555604;0.717694;, + -0.551734;0.555603;0.622009;, + -0.662479;0.555603;0.502420;, + -0.747768;0.555603;0.363522;, + -0.804320;0.555603;0.210655;, + -0.829961;0.555604;0.049692;, + -0.823708;0.555603;-0.113181;, + -0.785801;0.555603;-0.271702;, + -0.717694;0.555604;-0.419785;, + -0.622008;0.555603;-0.551734;, + -0.502419;0.555603;-0.662480;, + -0.363522;0.555604;-0.747768;, + -0.210654;0.555604;-0.804319;, + -0.049691;0.555604;-0.829961;, + 0.113181;0.555603;-0.823709;, + 0.271702;0.555603;-0.785801;, + 0.419785;0.555604;-0.717694;, + 0.551734;0.555603;-0.622009;, + 0.662480;0.555604;-0.502418;, + 0.747767;0.555604;-0.363522;, + 0.804319;0.555603;-0.210654;, + 0.829961;0.555603;-0.049692;, + 0.823708;0.555604;0.113182;, + 0.785801;0.555604;0.271701;, + 0.740353;0.580726;0.338577;, + 0.759304;0.350702;0.548147;, + 0.691647;0.382713;0.612498;, + 0.558870;0.382711;0.735661;, + 0.404609;0.382712;0.830556;, + 0.234800;0.382713;0.893532;, + 0.055970;0.382712;0.922171;, + -0.125012;0.382712;0.915371;, + -0.301189;0.382713;0.873393;, + -0.465792;0.382712;0.797852;, + -0.612499;0.382714;0.691647;, + -0.735661;0.382711;0.558870;, + -0.830556;0.382712;0.404609;, + -0.893532;0.382713;0.234800;, + -0.922170;0.382712;0.055970;, + -0.915370;0.382714;-0.125014;, + -0.873393;0.382712;-0.301190;, + -0.797853;0.382712;-0.465793;, + -0.691647;0.382713;-0.612498;, + -0.558869;0.382711;-0.735661;, + -0.404610;0.382712;-0.830555;, + -0.234800;0.382713;-0.893532;, + -0.055969;0.382713;-0.922170;, + 0.125014;0.382714;-0.915369;, + 0.301189;0.382712;-0.873393;, + 0.465792;0.382712;-0.797853;, + 0.612498;0.382713;-0.691648;, + 0.735662;0.382711;-0.558869;, + 0.830556;0.382712;-0.404609;, + 0.893532;0.382712;-0.234800;, + 0.922171;0.382712;-0.055969;, + 0.915371;0.382712;0.125012;, + 0.873393;0.382713;0.301189;, + 0.828986;0.411166;0.379109;, + 0.800085;0.162053;0.577583;, + 0.734707;0.195108;0.649722;, + 0.593835;0.195110;0.780571;, + 0.430146;0.195108;0.881423;, + 0.249920;0.195109;0.948405;, + 0.060094;0.195109;0.978939;, + -0.132042;0.195108;0.971853;, + -0.319103;0.195107;0.927419;, + -0.493902;0.195107;0.847345;, + -0.649722;0.195108;0.734707;, + -0.780572;0.195111;0.593835;, + -0.881423;0.195108;0.430146;, + -0.948405;0.195109;0.249920;, + -0.978939;0.195108;0.060095;, + -0.971853;0.195108;-0.132043;, + -0.927418;0.195109;-0.319105;, + -0.847345;0.195107;-0.493903;, + -0.734707;0.195108;-0.649722;, + -0.593835;0.195109;-0.780572;, + -0.430146;0.195108;-0.881424;, + -0.249921;0.195108;-0.948405;, + -0.060094;0.195108;-0.978939;, + 0.132043;0.195108;-0.971853;, + 0.319105;0.195109;-0.927418;, + 0.493902;0.195107;-0.847345;, + 0.649722;0.195107;-0.734707;, + 0.780572;0.195108;-0.593835;, + 0.881424;0.195106;-0.430146;, + 0.948405;0.195108;-0.249921;, + 0.978939;0.195108;-0.060093;, + 0.971853;0.195108;0.132042;, + 0.927419;0.195107;0.319103;, + 0.885853;0.226145;0.405120;, + 0.810369;-0.032654;0.585009;, + 0.749526;-0.000001;0.661975;, + 0.605980;-0.000001;0.795480;, + 0.439146;0.000001;0.898416;, + 0.255435;-0.000000;0.966826;, + 0.061907;-0.000001;0.998082;, + -0.133999;0.000001;0.990981;, + -0.324754;0.000001;0.945798;, + -0.503029;-0.000000;0.864269;, + -0.661974;-0.000001;0.749527;, + -0.795480;-0.000001;0.605980;, + -0.898416;0.000001;0.439145;, + -0.966826;-0.000000;0.255435;, + -0.998082;-0.000000;0.061907;, + -0.990982;-0.000000;-0.133998;, + -0.945798;-0.000000;-0.324756;, + -0.864269;-0.000001;-0.503030;, + -0.749526;-0.000000;-0.661975;, + -0.605979;-0.000000;-0.795480;, + -0.439146;0.000001;-0.898416;, + -0.255435;-0.000000;-0.966826;, + -0.061907;0.000000;-0.998082;, + 0.133999;0.000001;-0.990981;, + 0.324755;-0.000001;-0.945798;, + 0.503030;0.000000;-0.864269;, + 0.661975;-0.000000;-0.749526;, + 0.795481;-0.000000;-0.605978;, + 0.898416;0.000000;-0.439146;, + 0.966826;-0.000001;-0.255436;, + 0.998082;-0.000001;-0.061907;, + 0.990981;0.000001;0.133998;, + 0.945798;0.000001;0.324754;, + 0.908928;0.032653;0.415672;, + 0.789797;-0.226144;0.570157;, + 0.735534;-0.195107;0.648785;, + 0.594831;-0.195107;0.779814;, + 0.431268;-0.195108;0.880875;, + 0.251130;-0.195108;0.948085;, + 0.061340;-0.195107;0.978862;, + -0.130802;-0.195109;0.972020;, + -0.317921;-0.195107;0.927825;, + -0.492823;-0.195106;0.847974;, + -0.648785;-0.195107;0.735534;, + -0.779813;-0.195108;0.594831;, + -0.880875;-0.195109;0.431267;, + -0.948085;-0.195109;0.251131;, + -0.978862;-0.195107;0.061340;, + -0.972020;-0.195109;-0.130802;, + -0.927825;-0.195107;-0.317921;, + -0.847973;-0.195106;-0.492824;, + -0.735535;-0.195108;-0.648785;, + -0.594831;-0.195108;-0.779814;, + -0.431268;-0.195108;-0.880875;, + -0.251130;-0.195108;-0.948086;, + -0.061342;-0.195108;-0.978862;, + 0.130803;-0.195108;-0.972020;, + 0.317922;-0.195106;-0.927825;, + 0.492822;-0.195106;-0.847974;, + 0.648785;-0.195107;-0.735535;, + 0.779815;-0.195106;-0.594830;, + 0.880875;-0.195106;-0.431268;, + 0.948086;-0.195107;-0.251131;, + 0.978862;-0.195107;-0.061340;, + 0.972020;-0.195109;0.130802;, + 0.927825;-0.195107;0.317921;, + 0.897392;-0.162052;0.410398;, + 0.739092;-0.411167;0.533558;, + 0.693274;-0.382713;0.610657;, + 0.560820;-0.382712;0.734174;, + 0.406815;-0.382712;0.829477;, + 0.237174;-0.382713;0.892905;, + 0.058420;-0.382713;0.922018;, + -0.122581;-0.382712;0.915699;, + -0.298865;-0.382714;0.874191;, + -0.463672;-0.382713;0.799086;, + -0.610657;-0.382713;0.693274;, + -0.734174;-0.382713;0.560821;, + -0.829478;-0.382712;0.406814;, + -0.892905;-0.382713;0.237174;, + -0.922018;-0.382713;0.058420;, + -0.915699;-0.382712;-0.122582;, + -0.874191;-0.382714;-0.298866;, + -0.799086;-0.382712;-0.463673;, + -0.693274;-0.382712;-0.610657;, + -0.560820;-0.382712;-0.734174;, + -0.406815;-0.382712;-0.829477;, + -0.237174;-0.382713;-0.892905;, + -0.058418;-0.382713;-0.922018;, + 0.122580;-0.382714;-0.915699;, + 0.298867;-0.382714;-0.874190;, + 0.463672;-0.382712;-0.799086;, + 0.610657;-0.382713;-0.693274;, + 0.734174;-0.382712;-0.560820;, + 0.829478;-0.382712;-0.406814;, + 0.892905;-0.382713;-0.237175;, + 0.922019;-0.382712;-0.058419;, + 0.915699;-0.382712;0.122581;, + 0.874191;-0.382714;0.298865;, + 0.851654;-0.350702;0.389478;, + 0.660071;-0.580727;0.476511;, + 0.624370;-0.555605;0.549058;, + 0.505258;-0.555605;0.660316;, + 0.366728;-0.555605;0.746200;, + 0.214105;-0.555604;0.803407;, + 0.053255;-0.555605;0.829739;, + -0.109644;-0.555604;0.824186;, + -0.268327;-0.555604;0.786959;, + -0.416698;-0.555605;0.719490;, + -0.549059;-0.555605;0.624370;, + -0.660316;-0.555604;0.505259;, + -0.746200;-0.555604;0.366728;, + -0.803407;-0.555604;0.214104;, + -0.829739;-0.555605;0.053255;, + -0.824186;-0.555604;-0.109645;, + -0.786959;-0.555604;-0.268327;, + -0.719490;-0.555605;-0.416699;, + -0.624370;-0.555605;-0.549059;, + -0.505259;-0.555604;-0.660316;, + -0.366728;-0.555604;-0.746200;, + -0.214105;-0.555605;-0.803407;, + -0.053254;-0.555605;-0.829739;, + 0.109645;-0.555604;-0.824186;, + 0.268326;-0.555604;-0.786959;, + 0.416698;-0.555605;-0.719490;, + 0.549059;-0.555605;-0.624369;, + 0.660315;-0.555605;-0.505259;, + 0.746200;-0.555604;-0.366727;, + 0.803407;-0.555604;-0.214106;, + 0.829739;-0.555605;-0.053254;, + 0.824186;-0.555604;0.109644;, + 0.786959;-0.555604;0.268327;, + 0.773340;-0.526184;0.353661;, + 0.555602;-0.728308;0.401092;, + 0.531475;-0.707137;0.466360;, + 0.430282;-0.707137;0.561084;, + 0.312552;-0.707138;0.634246;, + 0.182812;-0.707138;0.683035;, + 0.046044;-0.707137;0.705576;, + -0.092491;-0.707137;0.701001;, + -0.227472;-0.707137;0.669487;, + -0.353711;-0.707137;0.612246;, + -0.466360;-0.707137;0.531475;, + -0.561083;-0.707137;0.430282;, + -0.634246;-0.707138;0.312551;, + -0.683035;-0.707137;0.182810;, + -0.705575;-0.707138;0.046045;, + -0.701000;-0.707138;-0.092491;, + -0.669487;-0.707137;-0.227473;, + -0.612246;-0.707138;-0.353712;, + -0.531475;-0.707137;-0.466360;, + -0.430282;-0.707137;-0.561083;, + -0.312552;-0.707137;-0.634246;, + -0.182810;-0.707137;-0.683036;, + -0.046045;-0.707137;-0.705575;, + 0.092492;-0.707137;-0.701001;, + 0.227474;-0.707137;-0.669488;, + 0.353711;-0.707137;-0.612246;, + 0.466360;-0.707137;-0.531475;, + 0.561083;-0.707137;-0.430282;, + 0.634245;-0.707138;-0.312553;, + 0.683036;-0.707137;-0.182811;, + 0.705576;-0.707137;-0.046045;, + 0.701001;-0.707137;0.092492;, + 0.669487;-0.707137;0.227472;, + 0.665277;-0.681794;0.304244;, + 0.429559;-0.848126;0.310099;, + 0.418161;-0.831490;0.365739;, + 0.338774;-0.831490;0.440291;, + 0.246367;-0.831490;0.497924;, + 0.144494;-0.831490;0.536419;, + 0.037068;-0.831490;0.554301;, + -0.071784;-0.831490;0.550882;, + -0.177877;-0.831490;0.526292;, + -0.277133;-0.831491;0.481478;, + -0.365738;-0.831491;0.418161;, + -0.440291;-0.831490;0.338773;, + -0.497922;-0.831491;0.246368;, + -0.536419;-0.831490;0.144493;, + -0.554301;-0.831491;0.037067;, + -0.550881;-0.831491;-0.071784;, + -0.526292;-0.831490;-0.177876;, + -0.481478;-0.831490;-0.277132;, + -0.418161;-0.831490;-0.365739;, + -0.338774;-0.831490;-0.440291;, + -0.246368;-0.831490;-0.497923;, + -0.144494;-0.831490;-0.536419;, + -0.037066;-0.831490;-0.554302;, + 0.071784;-0.831490;-0.550882;, + 0.177877;-0.831490;-0.526292;, + 0.277133;-0.831490;-0.481478;, + 0.365739;-0.831490;-0.418161;, + 0.440292;-0.831490;-0.338774;, + 0.497922;-0.831490;-0.246369;, + 0.536419;-0.831490;-0.144493;, + 0.554301;-0.831490;-0.037068;, + 0.550882;-0.831490;0.071785;, + 0.526293;-0.831490;0.177877;, + 0.531443;-0.811480;0.243041;, + 0.286720;-0.935387;0.206982;, + 0.288781;-0.923888;0.251069;, + 0.234251;-0.923889;0.302582;, + 0.170720;-0.923889;0.342468;, + 0.100626;-0.923888;0.369195;, + 0.026667;-0.923888;0.381732;, + -0.048318;-0.923889;0.379599;, + -0.121447;-0.923889;0.362878;, + -0.189906;-0.923889;0.332213;, + -0.251068;-0.923889;0.288781;, + -0.302583;-0.923889;0.234250;, + -0.342469;-0.923889;0.170719;, + -0.369194;-0.923889;0.100627;, + -0.381732;-0.923888;0.026666;, + -0.379599;-0.923888;-0.048319;, + -0.362879;-0.923889;-0.121446;, + -0.332214;-0.923889;-0.189905;, + -0.288781;-0.923888;-0.251069;, + -0.234251;-0.923889;-0.302582;, + -0.170720;-0.923889;-0.342469;, + -0.100626;-0.923888;-0.369194;, + -0.026665;-0.923889;-0.381731;, + 0.048319;-0.923888;-0.379599;, + 0.121446;-0.923889;-0.362879;, + 0.189906;-0.923888;-0.332214;, + 0.251069;-0.923888;-0.288781;, + 0.302583;-0.923889;-0.234251;, + 0.342469;-0.923888;-0.170719;, + 0.369194;-0.923889;-0.100626;, + 0.381731;-0.923889;-0.026666;, + 0.379599;-0.923889;0.048318;, + 0.362878;-0.923889;0.121447;, + 0.376878;-0.910086;0.172356;, + 0.158902;-0.980608;0.114708;, + 0.164461;-0.976741;0.137586;, + 0.134459;-0.976741;0.167029;, + 0.099291;-0.976741;0.190050;, + 0.060305;-0.976741;0.205769;, + 0.019002;-0.976741;0.213580;, + -0.023030;-0.976741;0.213184;, + -0.064179;-0.976741;0.204594;, + -0.102859;-0.976741;0.188143;, + -0.137586;-0.976741;0.164461;, + -0.167029;-0.976741;0.134459;, + -0.190051;-0.976741;0.099290;, + -0.205769;-0.976741;0.060305;, + -0.213581;-0.976741;0.019002;, + -0.213184;-0.976741;-0.023030;, + -0.204594;-0.976741;-0.064178;, + -0.188143;-0.976741;-0.102859;, + -0.164462;-0.976741;-0.137586;, + -0.134459;-0.976741;-0.167029;, + -0.099291;-0.976741;-0.190050;, + -0.060305;-0.976741;-0.205769;, + -0.019002;-0.976741;-0.213580;, + 0.023031;-0.976741;-0.213184;, + 0.064178;-0.976741;-0.204594;, + 0.102859;-0.976741;-0.188143;, + 0.137586;-0.976741;-0.164461;, + 0.167028;-0.976741;-0.134459;, + 0.190050;-0.976741;-0.099290;, + 0.205769;-0.976741;-0.060305;, + 0.213580;-0.976741;-0.019001;, + 0.213184;-0.976741;0.023030;, + 0.204594;-0.976741;0.064179;, + 0.207521;-0.973616;0.094906;, + 0.079855;-0.995138;0.057646;, + 0.067073;-0.995138;0.072118;, + 0.051715;-0.995138;0.083818;, + 0.034370;-0.995138;0.092296;, + 0.015702;-0.995138;0.097228;, + -0.003567;-0.995138;0.098424;, + -0.022700;-0.995138;0.095837;, + -0.040962;-0.995138;0.089566;, + -0.057646;-0.995138;0.079855;, + -0.072119;-0.995138;0.067073;, + -0.083818;-0.995138;0.051715;, + -0.092296;-0.995138;0.034370;, + -0.097228;-0.995138;0.015702;, + -0.098424;-0.995138;-0.003567;, + -0.095837;-0.995138;-0.022700;, + -0.089566;-0.995138;-0.040962;, + -0.079855;-0.995138;-0.057646;, + -0.067073;-0.995138;-0.072118;, + -0.051715;-0.995138;-0.083818;, + -0.034370;-0.995138;-0.092296;, + -0.015702;-0.995138;-0.097228;, + 0.003567;-0.995138;-0.098423;, + 0.022700;-0.995138;-0.095836;, + 0.040962;-0.995138;-0.089566;, + 0.057646;-0.995138;-0.079855;, + 0.072118;-0.995138;-0.067073;, + 0.083818;-0.995138;-0.051715;, + 0.092296;-0.995138;-0.034370;, + 0.097228;-0.995138;-0.015702;, + 0.098424;-0.995138;0.003567;, + 0.095836;-0.995138;0.022700;, + 0.089566;-0.995138;0.040962;; + 960; + 3;0,2,1;, + 3;3,4,2;, + 3;5,6,4;, + 3;7,8,6;, + 3;9,10,8;, + 3;11,12,10;, + 3;13,14,12;, + 3;15,16,14;, + 3;17,18,16;, + 3;19,20,18;, + 3;21,22,20;, + 3;23,24,22;, + 3;25,26,24;, + 3;27,28,26;, + 3;29,30,28;, + 3;31,32,30;, + 3;33,34,32;, + 3;35,36,34;, + 3;37,38,36;, + 3;39,40,38;, + 3;41,42,40;, + 3;43,44,42;, + 3;45,46,44;, + 3;47,48,46;, + 3;49,50,48;, + 3;51,52,50;, + 3;53,54,52;, + 3;55,56,54;, + 3;57,58,56;, + 3;59,60,58;, + 3;61,62,60;, + 3;63,64,62;, + 3;1,66,65;, + 3;1,2,66;, + 3;2,67,66;, + 3;2,4,67;, + 3;4,68,67;, + 3;4,6,68;, + 3;6,69,68;, + 3;6,8,69;, + 3;8,70,69;, + 3;8,10,70;, + 3;10,71,70;, + 3;10,12,71;, + 3;12,72,71;, + 3;12,14,72;, + 3;14,73,72;, + 3;14,16,73;, + 3;16,74,73;, + 3;16,18,74;, + 3;18,75,74;, + 3;18,20,75;, + 3;20,76,75;, + 3;20,22,76;, + 3;22,77,76;, + 3;22,24,77;, + 3;24,78,77;, + 3;24,26,78;, + 3;26,79,78;, + 3;26,28,79;, + 3;28,80,79;, + 3;28,30,80;, + 3;30,81,80;, + 3;30,32,81;, + 3;32,82,81;, + 3;32,34,82;, + 3;34,83,82;, + 3;34,36,83;, + 3;36,84,83;, + 3;36,38,84;, + 3;38,85,84;, + 3;38,40,85;, + 3;40,86,85;, + 3;40,42,86;, + 3;42,87,86;, + 3;42,44,87;, + 3;44,88,87;, + 3;44,46,88;, + 3;46,89,88;, + 3;46,48,89;, + 3;48,90,89;, + 3;48,50,90;, + 3;50,91,90;, + 3;50,52,91;, + 3;52,92,91;, + 3;52,54,92;, + 3;54,93,92;, + 3;54,56,93;, + 3;56,94,93;, + 3;56,58,94;, + 3;58,95,94;, + 3;58,60,95;, + 3;60,96,95;, + 3;60,62,96;, + 3;62,97,96;, + 3;62,64,97;, + 3;65,99,98;, + 3;65,66,99;, + 3;66,100,99;, + 3;66,67,100;, + 3;67,101,100;, + 3;67,68,101;, + 3;68,102,101;, + 3;68,69,102;, + 3;69,103,102;, + 3;69,70,103;, + 3;70,104,103;, + 3;70,71,104;, + 3;71,105,104;, + 3;71,72,105;, + 3;72,106,105;, + 3;72,73,106;, + 3;73,107,106;, + 3;73,74,107;, + 3;74,108,107;, + 3;74,75,108;, + 3;75,109,108;, + 3;75,76,109;, + 3;76,110,109;, + 3;76,77,110;, + 3;77,111,110;, + 3;77,78,111;, + 3;78,112,111;, + 3;78,79,112;, + 3;79,113,112;, + 3;79,80,113;, + 3;80,114,113;, + 3;80,81,114;, + 3;81,115,114;, + 3;81,82,115;, + 3;82,116,115;, + 3;82,83,116;, + 3;83,117,116;, + 3;83,84,117;, + 3;84,118,117;, + 3;84,85,118;, + 3;85,119,118;, + 3;85,86,119;, + 3;86,120,119;, + 3;86,87,120;, + 3;87,121,120;, + 3;87,88,121;, + 3;88,122,121;, + 3;88,89,122;, + 3;89,123,122;, + 3;89,90,123;, + 3;90,124,123;, + 3;90,91,124;, + 3;91,125,124;, + 3;91,92,125;, + 3;92,126,125;, + 3;92,93,126;, + 3;93,127,126;, + 3;93,94,127;, + 3;94,128,127;, + 3;94,95,128;, + 3;95,129,128;, + 3;95,96,129;, + 3;96,130,129;, + 3;96,97,130;, + 3;98,132,131;, + 3;98,99,132;, + 3;99,133,132;, + 3;99,100,133;, + 3;100,134,133;, + 3;100,101,134;, + 3;101,135,134;, + 3;101,102,135;, + 3;102,136,135;, + 3;102,103,136;, + 3;103,137,136;, + 3;103,104,137;, + 3;104,138,137;, + 3;104,105,138;, + 3;105,139,138;, + 3;105,106,139;, + 3;106,140,139;, + 3;106,107,140;, + 3;107,141,140;, + 3;107,108,141;, + 3;108,142,141;, + 3;108,109,142;, + 3;109,143,142;, + 3;109,110,143;, + 3;110,144,143;, + 3;110,111,144;, + 3;111,145,144;, + 3;111,112,145;, + 3;112,146,145;, + 3;112,113,146;, + 3;113,147,146;, + 3;113,114,147;, + 3;114,148,147;, + 3;114,115,148;, + 3;115,149,148;, + 3;115,116,149;, + 3;116,150,149;, + 3;116,117,150;, + 3;117,151,150;, + 3;117,118,151;, + 3;118,152,151;, + 3;118,119,152;, + 3;119,153,152;, + 3;119,120,153;, + 3;120,154,153;, + 3;120,121,154;, + 3;121,155,154;, + 3;121,122,155;, + 3;122,156,155;, + 3;122,123,156;, + 3;123,157,156;, + 3;123,124,157;, + 3;124,158,157;, + 3;124,125,158;, + 3;125,159,158;, + 3;125,126,159;, + 3;126,160,159;, + 3;126,127,160;, + 3;127,161,160;, + 3;127,128,161;, + 3;128,162,161;, + 3;128,129,162;, + 3;129,163,162;, + 3;129,130,163;, + 3;131,165,164;, + 3;131,132,165;, + 3;132,166,165;, + 3;132,133,166;, + 3;133,167,166;, + 3;133,134,167;, + 3;134,168,167;, + 3;134,135,168;, + 3;135,169,168;, + 3;135,136,169;, + 3;136,170,169;, + 3;136,137,170;, + 3;137,171,170;, + 3;137,138,171;, + 3;138,172,171;, + 3;138,139,172;, + 3;139,173,172;, + 3;139,140,173;, + 3;140,174,173;, + 3;140,141,174;, + 3;141,175,174;, + 3;141,142,175;, + 3;142,176,175;, + 3;142,143,176;, + 3;143,177,176;, + 3;143,144,177;, + 3;144,178,177;, + 3;144,145,178;, + 3;145,179,178;, + 3;145,146,179;, + 3;146,180,179;, + 3;146,147,180;, + 3;147,181,180;, + 3;147,148,181;, + 3;148,182,181;, + 3;148,149,182;, + 3;149,183,182;, + 3;149,150,183;, + 3;150,184,183;, + 3;150,151,184;, + 3;151,185,184;, + 3;151,152,185;, + 3;152,186,185;, + 3;152,153,186;, + 3;153,187,186;, + 3;153,154,187;, + 3;154,188,187;, + 3;154,155,188;, + 3;155,189,188;, + 3;155,156,189;, + 3;156,190,189;, + 3;156,157,190;, + 3;157,191,190;, + 3;157,158,191;, + 3;158,192,191;, + 3;158,159,192;, + 3;159,193,192;, + 3;159,160,193;, + 3;160,194,193;, + 3;160,161,194;, + 3;161,195,194;, + 3;161,162,195;, + 3;162,196,195;, + 3;162,163,196;, + 3;164,198,197;, + 3;164,165,198;, + 3;165,199,198;, + 3;165,166,199;, + 3;166,200,199;, + 3;166,167,200;, + 3;167,201,200;, + 3;167,168,201;, + 3;168,202,201;, + 3;168,169,202;, + 3;169,203,202;, + 3;169,170,203;, + 3;170,204,203;, + 3;170,171,204;, + 3;171,205,204;, + 3;171,172,205;, + 3;172,206,205;, + 3;172,173,206;, + 3;173,207,206;, + 3;173,174,207;, + 3;174,208,207;, + 3;174,175,208;, + 3;175,209,208;, + 3;175,176,209;, + 3;176,210,209;, + 3;176,177,210;, + 3;177,211,210;, + 3;177,178,211;, + 3;178,212,211;, + 3;178,179,212;, + 3;179,213,212;, + 3;179,180,213;, + 3;180,214,213;, + 3;180,181,214;, + 3;181,215,214;, + 3;181,182,215;, + 3;182,216,215;, + 3;182,183,216;, + 3;183,217,216;, + 3;183,184,217;, + 3;184,218,217;, + 3;184,185,218;, + 3;185,219,218;, + 3;185,186,219;, + 3;186,220,219;, + 3;186,187,220;, + 3;187,221,220;, + 3;187,188,221;, + 3;188,222,221;, + 3;188,189,222;, + 3;189,223,222;, + 3;189,190,223;, + 3;190,224,223;, + 3;190,191,224;, + 3;191,225,224;, + 3;191,192,225;, + 3;192,226,225;, + 3;192,193,226;, + 3;193,227,226;, + 3;193,194,227;, + 3;194,228,227;, + 3;194,195,228;, + 3;195,229,228;, + 3;195,196,229;, + 3;197,231,230;, + 3;197,198,231;, + 3;198,232,231;, + 3;198,199,232;, + 3;199,233,232;, + 3;199,200,233;, + 3;200,234,233;, + 3;200,201,234;, + 3;201,235,234;, + 3;201,202,235;, + 3;202,236,235;, + 3;202,203,236;, + 3;203,237,236;, + 3;203,204,237;, + 3;204,238,237;, + 3;204,205,238;, + 3;205,239,238;, + 3;205,206,239;, + 3;206,240,239;, + 3;206,207,240;, + 3;207,241,240;, + 3;207,208,241;, + 3;208,242,241;, + 3;208,209,242;, + 3;209,243,242;, + 3;209,210,243;, + 3;210,244,243;, + 3;210,211,244;, + 3;211,245,244;, + 3;211,212,245;, + 3;212,246,245;, + 3;212,213,246;, + 3;213,247,246;, + 3;213,214,247;, + 3;214,248,247;, + 3;214,215,248;, + 3;215,249,248;, + 3;215,216,249;, + 3;216,250,249;, + 3;216,217,250;, + 3;217,251,250;, + 3;217,218,251;, + 3;218,252,251;, + 3;218,219,252;, + 3;219,253,252;, + 3;219,220,253;, + 3;220,254,253;, + 3;220,221,254;, + 3;221,255,254;, + 3;221,222,255;, + 3;222,256,255;, + 3;222,223,256;, + 3;223,257,256;, + 3;223,224,257;, + 3;224,258,257;, + 3;224,225,258;, + 3;225,259,258;, + 3;225,226,259;, + 3;226,260,259;, + 3;226,227,260;, + 3;227,261,260;, + 3;227,228,261;, + 3;228,262,261;, + 3;228,229,262;, + 3;230,264,263;, + 3;230,231,264;, + 3;231,265,264;, + 3;231,232,265;, + 3;232,266,265;, + 3;232,233,266;, + 3;233,267,266;, + 3;233,234,267;, + 3;234,268,267;, + 3;234,235,268;, + 3;235,269,268;, + 3;235,236,269;, + 3;236,270,269;, + 3;236,237,270;, + 3;237,271,270;, + 3;237,238,271;, + 3;238,272,271;, + 3;238,239,272;, + 3;239,273,272;, + 3;239,240,273;, + 3;240,274,273;, + 3;240,241,274;, + 3;241,275,274;, + 3;241,242,275;, + 3;242,276,275;, + 3;242,243,276;, + 3;243,277,276;, + 3;243,244,277;, + 3;244,278,277;, + 3;244,245,278;, + 3;245,279,278;, + 3;245,246,279;, + 3;246,280,279;, + 3;246,247,280;, + 3;247,281,280;, + 3;247,248,281;, + 3;248,282,281;, + 3;248,249,282;, + 3;249,283,282;, + 3;249,250,283;, + 3;250,284,283;, + 3;250,251,284;, + 3;251,285,284;, + 3;251,252,285;, + 3;252,286,285;, + 3;252,253,286;, + 3;253,287,286;, + 3;253,254,287;, + 3;254,288,287;, + 3;254,255,288;, + 3;255,289,288;, + 3;255,256,289;, + 3;256,290,289;, + 3;256,257,290;, + 3;257,291,290;, + 3;257,258,291;, + 3;258,292,291;, + 3;258,259,292;, + 3;259,293,292;, + 3;259,260,293;, + 3;260,294,293;, + 3;260,261,294;, + 3;261,295,294;, + 3;261,262,295;, + 3;263,297,296;, + 3;263,264,297;, + 3;264,298,297;, + 3;264,265,298;, + 3;265,299,298;, + 3;265,266,299;, + 3;266,300,299;, + 3;266,267,300;, + 3;267,301,300;, + 3;267,268,301;, + 3;268,302,301;, + 3;268,269,302;, + 3;269,303,302;, + 3;269,270,303;, + 3;270,304,303;, + 3;270,271,304;, + 3;271,305,304;, + 3;271,272,305;, + 3;272,306,305;, + 3;272,273,306;, + 3;273,307,306;, + 3;273,274,307;, + 3;274,308,307;, + 3;274,275,308;, + 3;275,309,308;, + 3;275,276,309;, + 3;276,310,309;, + 3;276,277,310;, + 3;277,311,310;, + 3;277,278,311;, + 3;278,312,311;, + 3;278,279,312;, + 3;279,313,312;, + 3;279,280,313;, + 3;280,314,313;, + 3;280,281,314;, + 3;281,315,314;, + 3;281,282,315;, + 3;282,316,315;, + 3;282,283,316;, + 3;283,317,316;, + 3;283,284,317;, + 3;284,318,317;, + 3;284,285,318;, + 3;285,319,318;, + 3;285,286,319;, + 3;286,320,319;, + 3;286,287,320;, + 3;287,321,320;, + 3;287,288,321;, + 3;288,322,321;, + 3;288,289,322;, + 3;289,323,322;, + 3;289,290,323;, + 3;290,324,323;, + 3;290,291,324;, + 3;291,325,324;, + 3;291,292,325;, + 3;292,326,325;, + 3;292,293,326;, + 3;293,327,326;, + 3;293,294,327;, + 3;294,328,327;, + 3;294,295,328;, + 3;296,330,329;, + 3;296,297,330;, + 3;297,331,330;, + 3;297,298,331;, + 3;298,332,331;, + 3;298,299,332;, + 3;299,333,332;, + 3;299,300,333;, + 3;300,334,333;, + 3;300,301,334;, + 3;301,335,334;, + 3;301,302,335;, + 3;302,336,335;, + 3;302,303,336;, + 3;303,337,336;, + 3;303,304,337;, + 3;304,338,337;, + 3;304,305,338;, + 3;305,339,338;, + 3;305,306,339;, + 3;306,340,339;, + 3;306,307,340;, + 3;307,341,340;, + 3;307,308,341;, + 3;308,342,341;, + 3;308,309,342;, + 3;309,343,342;, + 3;309,310,343;, + 3;310,344,343;, + 3;310,311,344;, + 3;311,345,344;, + 3;311,312,345;, + 3;312,346,345;, + 3;312,313,346;, + 3;313,347,346;, + 3;313,314,347;, + 3;314,348,347;, + 3;314,315,348;, + 3;315,349,348;, + 3;315,316,349;, + 3;316,350,349;, + 3;316,317,350;, + 3;317,351,350;, + 3;317,318,351;, + 3;318,352,351;, + 3;318,319,352;, + 3;319,353,352;, + 3;319,320,353;, + 3;320,354,353;, + 3;320,321,354;, + 3;321,355,354;, + 3;321,322,355;, + 3;322,356,355;, + 3;322,323,356;, + 3;323,357,356;, + 3;323,324,357;, + 3;324,358,357;, + 3;324,325,358;, + 3;325,359,358;, + 3;325,326,359;, + 3;326,360,359;, + 3;326,327,360;, + 3;327,361,360;, + 3;327,328,361;, + 3;329,363,362;, + 3;329,330,363;, + 3;330,364,363;, + 3;330,331,364;, + 3;331,365,364;, + 3;331,332,365;, + 3;332,366,365;, + 3;332,333,366;, + 3;333,367,366;, + 3;333,334,367;, + 3;334,368,367;, + 3;334,335,368;, + 3;335,369,368;, + 3;335,336,369;, + 3;336,370,369;, + 3;336,337,370;, + 3;337,371,370;, + 3;337,338,371;, + 3;338,372,371;, + 3;338,339,372;, + 3;339,373,372;, + 3;339,340,373;, + 3;340,374,373;, + 3;340,341,374;, + 3;341,375,374;, + 3;341,342,375;, + 3;342,376,375;, + 3;342,343,376;, + 3;343,377,376;, + 3;343,344,377;, + 3;344,378,377;, + 3;344,345,378;, + 3;345,379,378;, + 3;345,346,379;, + 3;346,380,379;, + 3;346,347,380;, + 3;347,381,380;, + 3;347,348,381;, + 3;348,382,381;, + 3;348,349,382;, + 3;349,383,382;, + 3;349,350,383;, + 3;350,384,383;, + 3;350,351,384;, + 3;351,385,384;, + 3;351,352,385;, + 3;352,386,385;, + 3;352,353,386;, + 3;353,387,386;, + 3;353,354,387;, + 3;354,388,387;, + 3;354,355,388;, + 3;355,389,388;, + 3;355,356,389;, + 3;356,390,389;, + 3;356,357,390;, + 3;357,391,390;, + 3;357,358,391;, + 3;358,392,391;, + 3;358,359,392;, + 3;359,393,392;, + 3;359,360,393;, + 3;360,394,393;, + 3;360,361,394;, + 3;362,396,395;, + 3;362,363,396;, + 3;363,397,396;, + 3;363,364,397;, + 3;364,398,397;, + 3;364,365,398;, + 3;365,399,398;, + 3;365,366,399;, + 3;366,400,399;, + 3;366,367,400;, + 3;367,401,400;, + 3;367,368,401;, + 3;368,402,401;, + 3;368,369,402;, + 3;369,403,402;, + 3;369,370,403;, + 3;370,404,403;, + 3;370,371,404;, + 3;371,405,404;, + 3;371,372,405;, + 3;372,406,405;, + 3;372,373,406;, + 3;373,407,406;, + 3;373,374,407;, + 3;374,408,407;, + 3;374,375,408;, + 3;375,409,408;, + 3;375,376,409;, + 3;376,410,409;, + 3;376,377,410;, + 3;377,411,410;, + 3;377,378,411;, + 3;378,412,411;, + 3;378,379,412;, + 3;379,413,412;, + 3;379,380,413;, + 3;380,414,413;, + 3;380,381,414;, + 3;381,415,414;, + 3;381,382,415;, + 3;382,416,415;, + 3;382,383,416;, + 3;383,417,416;, + 3;383,384,417;, + 3;384,418,417;, + 3;384,385,418;, + 3;385,419,418;, + 3;385,386,419;, + 3;386,420,419;, + 3;386,387,420;, + 3;387,421,420;, + 3;387,388,421;, + 3;388,422,421;, + 3;388,389,422;, + 3;389,423,422;, + 3;389,390,423;, + 3;390,424,423;, + 3;390,391,424;, + 3;391,425,424;, + 3;391,392,425;, + 3;392,426,425;, + 3;392,393,426;, + 3;393,427,426;, + 3;393,394,427;, + 3;395,429,428;, + 3;395,396,429;, + 3;396,430,429;, + 3;396,397,430;, + 3;397,431,430;, + 3;397,398,431;, + 3;398,432,431;, + 3;398,399,432;, + 3;399,433,432;, + 3;399,400,433;, + 3;400,434,433;, + 3;400,401,434;, + 3;401,435,434;, + 3;401,402,435;, + 3;402,436,435;, + 3;402,403,436;, + 3;403,437,436;, + 3;403,404,437;, + 3;404,438,437;, + 3;404,405,438;, + 3;405,439,438;, + 3;405,406,439;, + 3;406,440,439;, + 3;406,407,440;, + 3;407,441,440;, + 3;407,408,441;, + 3;408,442,441;, + 3;408,409,442;, + 3;409,443,442;, + 3;409,410,443;, + 3;410,444,443;, + 3;410,411,444;, + 3;411,445,444;, + 3;411,412,445;, + 3;412,446,445;, + 3;412,413,446;, + 3;413,447,446;, + 3;413,414,447;, + 3;414,448,447;, + 3;414,415,448;, + 3;415,449,448;, + 3;415,416,449;, + 3;416,450,449;, + 3;416,417,450;, + 3;417,451,450;, + 3;417,418,451;, + 3;418,452,451;, + 3;418,419,452;, + 3;419,453,452;, + 3;419,420,453;, + 3;420,454,453;, + 3;420,421,454;, + 3;421,455,454;, + 3;421,422,455;, + 3;422,456,455;, + 3;422,423,456;, + 3;423,457,456;, + 3;423,424,457;, + 3;424,458,457;, + 3;424,425,458;, + 3;425,459,458;, + 3;425,426,459;, + 3;426,460,459;, + 3;426,427,460;, + 3;428,462,461;, + 3;428,429,462;, + 3;429,463,462;, + 3;429,430,463;, + 3;430,464,463;, + 3;430,431,464;, + 3;431,465,464;, + 3;431,432,465;, + 3;432,466,465;, + 3;432,433,466;, + 3;433,467,466;, + 3;433,434,467;, + 3;434,468,467;, + 3;434,435,468;, + 3;435,469,468;, + 3;435,436,469;, + 3;436,470,469;, + 3;436,437,470;, + 3;437,471,470;, + 3;437,438,471;, + 3;438,472,471;, + 3;438,439,472;, + 3;439,473,472;, + 3;439,440,473;, + 3;440,474,473;, + 3;440,441,474;, + 3;441,475,474;, + 3;441,442,475;, + 3;442,476,475;, + 3;442,443,476;, + 3;443,477,476;, + 3;443,444,477;, + 3;444,478,477;, + 3;444,445,478;, + 3;445,479,478;, + 3;445,446,479;, + 3;446,480,479;, + 3;446,447,480;, + 3;447,481,480;, + 3;447,448,481;, + 3;448,482,481;, + 3;448,449,482;, + 3;449,483,482;, + 3;449,450,483;, + 3;450,484,483;, + 3;450,451,484;, + 3;451,485,484;, + 3;451,452,485;, + 3;452,486,485;, + 3;452,453,486;, + 3;453,487,486;, + 3;453,454,487;, + 3;454,488,487;, + 3;454,455,488;, + 3;455,489,488;, + 3;455,456,489;, + 3;456,490,489;, + 3;456,457,490;, + 3;457,491,490;, + 3;457,458,491;, + 3;458,492,491;, + 3;458,459,492;, + 3;459,493,492;, + 3;459,460,493;, + 3;461,495,494;, + 3;461,462,495;, + 3;462,496,495;, + 3;462,463,496;, + 3;463,497,496;, + 3;463,464,497;, + 3;464,498,497;, + 3;464,465,498;, + 3;465,499,498;, + 3;465,466,499;, + 3;466,500,499;, + 3;466,467,500;, + 3;467,501,500;, + 3;467,468,501;, + 3;468,502,501;, + 3;468,469,502;, + 3;469,503,502;, + 3;469,470,503;, + 3;470,504,503;, + 3;470,471,504;, + 3;471,505,504;, + 3;471,472,505;, + 3;472,506,505;, + 3;472,473,506;, + 3;473,507,506;, + 3;473,474,507;, + 3;474,508,507;, + 3;474,475,508;, + 3;475,509,508;, + 3;475,476,509;, + 3;476,510,509;, + 3;476,477,510;, + 3;477,511,510;, + 3;477,478,511;, + 3;478,512,511;, + 3;478,479,512;, + 3;479,513,512;, + 3;479,480,513;, + 3;480,514,513;, + 3;480,481,514;, + 3;481,515,514;, + 3;481,482,515;, + 3;482,516,515;, + 3;482,483,516;, + 3;483,517,516;, + 3;483,484,517;, + 3;484,518,517;, + 3;484,485,518;, + 3;485,519,518;, + 3;485,486,519;, + 3;486,520,519;, + 3;486,487,520;, + 3;487,521,520;, + 3;487,488,521;, + 3;488,522,521;, + 3;488,489,522;, + 3;489,523,522;, + 3;489,490,523;, + 3;490,524,523;, + 3;490,491,524;, + 3;491,525,524;, + 3;491,492,525;, + 3;492,526,525;, + 3;492,493,526;, + 3;527,494,495;, + 3;528,495,496;, + 3;529,496,497;, + 3;530,497,498;, + 3;531,498,499;, + 3;532,499,500;, + 3;533,500,501;, + 3;534,501,502;, + 3;535,502,503;, + 3;536,503,504;, + 3;537,504,505;, + 3;538,505,506;, + 3;539,506,507;, + 3;540,507,508;, + 3;541,508,509;, + 3;542,509,510;, + 3;543,510,511;, + 3;544,511,512;, + 3;545,512,513;, + 3;546,513,514;, + 3;547,514,515;, + 3;548,515,516;, + 3;549,516,517;, + 3;550,517,518;, + 3;551,518,519;, + 3;552,519,520;, + 3;553,520,521;, + 3;554,521,522;, + 3;555,522,523;, + 3;556,523,524;, + 3;557,524,525;, + 3;558,525,526;; + } + + MeshTextureCoords + { + 559; + 0.015625;0.000000;, + 0.000000;0.062500;, + 0.031250;0.062500;, + 0.046875;0.000000;, + 0.062500;0.062500;, + 0.078125;0.000000;, + 0.093750;0.062500;, + 0.109375;0.000000;, + 0.125000;0.062500;, + 0.140625;0.000000;, + 0.156250;0.062500;, + 0.171875;0.000000;, + 0.187500;0.062500;, + 0.203125;0.000000;, + 0.218750;0.062500;, + 0.234375;0.000000;, + 0.250000;0.062500;, + 0.265625;0.000000;, + 0.281250;0.062500;, + 0.296875;0.000000;, + 0.312500;0.062500;, + 0.328125;0.000000;, + 0.343750;0.062500;, + 0.359375;0.000000;, + 0.375000;0.062500;, + 0.390625;0.000000;, + 0.406250;0.062500;, + 0.421875;0.000000;, + 0.437500;0.062500;, + 0.453125;0.000000;, + 0.468750;0.062500;, + 0.484375;0.000000;, + 0.500000;0.062500;, + 0.515625;0.000000;, + 0.531250;0.062500;, + 0.546875;0.000000;, + 0.562500;0.062500;, + 0.578125;0.000000;, + 0.593750;0.062500;, + 0.609375;0.000000;, + 0.625000;0.062500;, + 0.640625;0.000000;, + 0.656250;0.062500;, + 0.671875;0.000000;, + 0.687500;0.062500;, + 0.703125;0.000000;, + 0.718750;0.062500;, + 0.734375;0.000000;, + 0.750000;0.062500;, + 0.765625;0.000000;, + 0.781250;0.062500;, + 0.796875;0.000000;, + 0.812500;0.062500;, + 0.828125;0.000000;, + 0.843750;0.062500;, + 0.859375;0.000000;, + 0.875000;0.062500;, + 0.890625;0.000000;, + 0.906250;0.062500;, + 0.921875;0.000000;, + 0.937500;0.062500;, + 0.953125;0.000000;, + 0.968750;0.062500;, + 0.984375;0.000000;, + 1.000000;0.062500;, + 0.000000;0.125000;, + 0.031250;0.125000;, + 0.062500;0.125000;, + 0.093750;0.125000;, + 0.125000;0.125000;, + 0.156250;0.125000;, + 0.187500;0.125000;, + 0.218750;0.125000;, + 0.250000;0.125000;, + 0.281250;0.125000;, + 0.312500;0.125000;, + 0.343750;0.125000;, + 0.375000;0.125000;, + 0.406250;0.125000;, + 0.437500;0.125000;, + 0.468750;0.125000;, + 0.500000;0.125000;, + 0.531250;0.125000;, + 0.562500;0.125000;, + 0.593750;0.125000;, + 0.625000;0.125000;, + 0.656250;0.125000;, + 0.687500;0.125000;, + 0.718750;0.125000;, + 0.750000;0.125000;, + 0.781250;0.125000;, + 0.812500;0.125000;, + 0.843750;0.125000;, + 0.875000;0.125000;, + 0.906250;0.125000;, + 0.937500;0.125000;, + 0.968750;0.125000;, + 1.000000;0.125000;, + 0.000000;0.187500;, + 0.031250;0.187500;, + 0.062500;0.187500;, + 0.093750;0.187500;, + 0.125000;0.187500;, + 0.156250;0.187500;, + 0.187500;0.187500;, + 0.218750;0.187500;, + 0.250000;0.187500;, + 0.281250;0.187500;, + 0.312500;0.187500;, + 0.343750;0.187500;, + 0.375000;0.187500;, + 0.406250;0.187500;, + 0.437500;0.187500;, + 0.468750;0.187500;, + 0.500000;0.187500;, + 0.531250;0.187500;, + 0.562500;0.187500;, + 0.593750;0.187500;, + 0.625000;0.187500;, + 0.656250;0.187500;, + 0.687500;0.187500;, + 0.718750;0.187500;, + 0.750000;0.187500;, + 0.781250;0.187500;, + 0.812500;0.187500;, + 0.843750;0.187500;, + 0.875000;0.187500;, + 0.906250;0.187500;, + 0.937500;0.187500;, + 0.968750;0.187500;, + 1.000000;0.187500;, + 0.000000;0.250000;, + 0.031250;0.250000;, + 0.062500;0.250000;, + 0.093750;0.250000;, + 0.125000;0.250000;, + 0.156250;0.250000;, + 0.187500;0.250000;, + 0.218750;0.250000;, + 0.250000;0.250000;, + 0.281250;0.250000;, + 0.312500;0.250000;, + 0.343750;0.250000;, + 0.375000;0.250000;, + 0.406250;0.250000;, + 0.437500;0.250000;, + 0.468750;0.250000;, + 0.500000;0.250000;, + 0.531250;0.250000;, + 0.562500;0.250000;, + 0.593750;0.250000;, + 0.625000;0.250000;, + 0.656250;0.250000;, + 0.687500;0.250000;, + 0.718750;0.250000;, + 0.750000;0.250000;, + 0.781250;0.250000;, + 0.812500;0.250000;, + 0.843750;0.250000;, + 0.875000;0.250000;, + 0.906250;0.250000;, + 0.937500;0.250000;, + 0.968750;0.250000;, + 1.000000;0.250000;, + 0.000000;0.312500;, + 0.031250;0.312500;, + 0.062500;0.312500;, + 0.093750;0.312500;, + 0.125000;0.312500;, + 0.156250;0.312500;, + 0.187500;0.312500;, + 0.218750;0.312500;, + 0.250000;0.312500;, + 0.281250;0.312500;, + 0.312500;0.312500;, + 0.343750;0.312500;, + 0.375000;0.312500;, + 0.406250;0.312500;, + 0.437500;0.312500;, + 0.468750;0.312500;, + 0.500000;0.312500;, + 0.531250;0.312500;, + 0.562500;0.312500;, + 0.593750;0.312500;, + 0.625000;0.312500;, + 0.656250;0.312500;, + 0.687500;0.312500;, + 0.718750;0.312500;, + 0.750000;0.312500;, + 0.781250;0.312500;, + 0.812500;0.312500;, + 0.843750;0.312500;, + 0.875000;0.312500;, + 0.906250;0.312500;, + 0.937500;0.312500;, + 0.968750;0.312500;, + 1.000000;0.312500;, + 0.000000;0.375000;, + 0.031250;0.375000;, + 0.062500;0.375000;, + 0.093750;0.375000;, + 0.125000;0.375000;, + 0.156250;0.375000;, + 0.187500;0.375000;, + 0.218750;0.375000;, + 0.250000;0.375000;, + 0.281250;0.375000;, + 0.312500;0.375000;, + 0.343750;0.375000;, + 0.375000;0.375000;, + 0.406250;0.375000;, + 0.437500;0.375000;, + 0.468750;0.375000;, + 0.500000;0.375000;, + 0.531250;0.375000;, + 0.562500;0.375000;, + 0.593750;0.375000;, + 0.625000;0.375000;, + 0.656250;0.375000;, + 0.687500;0.375000;, + 0.718750;0.375000;, + 0.750000;0.375000;, + 0.781250;0.375000;, + 0.812500;0.375000;, + 0.843750;0.375000;, + 0.875000;0.375000;, + 0.906250;0.375000;, + 0.937500;0.375000;, + 0.968750;0.375000;, + 1.000000;0.375000;, + 0.000000;0.437500;, + 0.031250;0.437500;, + 0.062500;0.437500;, + 0.093750;0.437500;, + 0.125000;0.437500;, + 0.156250;0.437500;, + 0.187500;0.437500;, + 0.218750;0.437500;, + 0.250000;0.437500;, + 0.281250;0.437500;, + 0.312500;0.437500;, + 0.343750;0.437500;, + 0.375000;0.437500;, + 0.406250;0.437500;, + 0.437500;0.437500;, + 0.468750;0.437500;, + 0.500000;0.437500;, + 0.531250;0.437500;, + 0.562500;0.437500;, + 0.593750;0.437500;, + 0.625000;0.437500;, + 0.656250;0.437500;, + 0.687500;0.437500;, + 0.718750;0.437500;, + 0.750000;0.437500;, + 0.781250;0.437500;, + 0.812500;0.437500;, + 0.843750;0.437500;, + 0.875000;0.437500;, + 0.906250;0.437500;, + 0.937500;0.437500;, + 0.968750;0.437500;, + 1.000000;0.437500;, + 0.000000;0.500000;, + 0.031250;0.500000;, + 0.062500;0.500000;, + 0.093750;0.500000;, + 0.125000;0.500000;, + 0.156250;0.500000;, + 0.187500;0.500000;, + 0.218750;0.500000;, + 0.250000;0.500000;, + 0.281250;0.500000;, + 0.312500;0.500000;, + 0.343750;0.500000;, + 0.375000;0.500000;, + 0.406250;0.500000;, + 0.437500;0.500000;, + 0.468750;0.500000;, + 0.500000;0.500000;, + 0.531250;0.500000;, + 0.562500;0.500000;, + 0.593750;0.500000;, + 0.625000;0.500000;, + 0.656250;0.500000;, + 0.687500;0.500000;, + 0.718750;0.500000;, + 0.750000;0.500000;, + 0.781250;0.500000;, + 0.812500;0.500000;, + 0.843750;0.500000;, + 0.875000;0.500000;, + 0.906250;0.500000;, + 0.937500;0.500000;, + 0.968750;0.500000;, + 1.000000;0.500000;, + 0.000000;0.562500;, + 0.031250;0.562500;, + 0.062500;0.562500;, + 0.093750;0.562500;, + 0.125000;0.562500;, + 0.156250;0.562500;, + 0.187500;0.562500;, + 0.218750;0.562500;, + 0.250000;0.562500;, + 0.281250;0.562500;, + 0.312500;0.562500;, + 0.343750;0.562500;, + 0.375000;0.562500;, + 0.406250;0.562500;, + 0.437500;0.562500;, + 0.468750;0.562500;, + 0.500000;0.562500;, + 0.531250;0.562500;, + 0.562500;0.562500;, + 0.593750;0.562500;, + 0.625000;0.562500;, + 0.656250;0.562500;, + 0.687500;0.562500;, + 0.718750;0.562500;, + 0.750000;0.562500;, + 0.781250;0.562500;, + 0.812500;0.562500;, + 0.843750;0.562500;, + 0.875000;0.562500;, + 0.906250;0.562500;, + 0.937500;0.562500;, + 0.968750;0.562500;, + 1.000000;0.562500;, + 0.000000;0.625000;, + 0.031250;0.625000;, + 0.062500;0.625000;, + 0.093750;0.625000;, + 0.125000;0.625000;, + 0.156250;0.625000;, + 0.187500;0.625000;, + 0.218750;0.625000;, + 0.250000;0.625000;, + 0.281250;0.625000;, + 0.312500;0.625000;, + 0.343750;0.625000;, + 0.375000;0.625000;, + 0.406250;0.625000;, + 0.437500;0.625000;, + 0.468750;0.625000;, + 0.500000;0.625000;, + 0.531250;0.625000;, + 0.562500;0.625000;, + 0.593750;0.625000;, + 0.625000;0.625000;, + 0.656250;0.625000;, + 0.687500;0.625000;, + 0.718750;0.625000;, + 0.750000;0.625000;, + 0.781250;0.625000;, + 0.812500;0.625000;, + 0.843750;0.625000;, + 0.875000;0.625000;, + 0.906250;0.625000;, + 0.937500;0.625000;, + 0.968750;0.625000;, + 1.000000;0.625000;, + 0.000000;0.687500;, + 0.031250;0.687500;, + 0.062500;0.687500;, + 0.093750;0.687500;, + 0.125000;0.687500;, + 0.156250;0.687500;, + 0.187500;0.687500;, + 0.218750;0.687500;, + 0.250000;0.687500;, + 0.281250;0.687500;, + 0.312500;0.687500;, + 0.343750;0.687500;, + 0.375000;0.687500;, + 0.406250;0.687500;, + 0.437500;0.687500;, + 0.468750;0.687500;, + 0.500000;0.687500;, + 0.531250;0.687500;, + 0.562500;0.687500;, + 0.593750;0.687500;, + 0.625000;0.687500;, + 0.656250;0.687500;, + 0.687500;0.687500;, + 0.718750;0.687500;, + 0.750000;0.687500;, + 0.781250;0.687500;, + 0.812500;0.687500;, + 0.843750;0.687500;, + 0.875000;0.687500;, + 0.906250;0.687500;, + 0.937500;0.687500;, + 0.968750;0.687500;, + 1.000000;0.687500;, + 0.000000;0.750000;, + 0.031250;0.750000;, + 0.062500;0.750000;, + 0.093750;0.750000;, + 0.125000;0.750000;, + 0.156250;0.750000;, + 0.187500;0.750000;, + 0.218750;0.750000;, + 0.250000;0.750000;, + 0.281250;0.750000;, + 0.312500;0.750000;, + 0.343750;0.750000;, + 0.375000;0.750000;, + 0.406250;0.750000;, + 0.437500;0.750000;, + 0.468750;0.750000;, + 0.500000;0.750000;, + 0.531250;0.750000;, + 0.562500;0.750000;, + 0.593750;0.750000;, + 0.625000;0.750000;, + 0.656250;0.750000;, + 0.687500;0.750000;, + 0.718750;0.750000;, + 0.750000;0.750000;, + 0.781250;0.750000;, + 0.812500;0.750000;, + 0.843750;0.750000;, + 0.875000;0.750000;, + 0.906250;0.750000;, + 0.937500;0.750000;, + 0.968750;0.750000;, + 1.000000;0.750000;, + 0.000000;0.812500;, + 0.031250;0.812500;, + 0.062500;0.812500;, + 0.093750;0.812500;, + 0.125000;0.812500;, + 0.156250;0.812500;, + 0.187500;0.812500;, + 0.218750;0.812500;, + 0.250000;0.812500;, + 0.281250;0.812500;, + 0.312500;0.812500;, + 0.343750;0.812500;, + 0.375000;0.812500;, + 0.406250;0.812500;, + 0.437500;0.812500;, + 0.468750;0.812500;, + 0.500000;0.812500;, + 0.531250;0.812500;, + 0.562500;0.812500;, + 0.593750;0.812500;, + 0.625000;0.812500;, + 0.656250;0.812500;, + 0.687500;0.812500;, + 0.718750;0.812500;, + 0.750000;0.812500;, + 0.781250;0.812500;, + 0.812500;0.812500;, + 0.843750;0.812500;, + 0.875000;0.812500;, + 0.906250;0.812500;, + 0.937500;0.812500;, + 0.968750;0.812500;, + 1.000000;0.812500;, + 0.000000;0.875000;, + 0.031250;0.875000;, + 0.062500;0.875000;, + 0.093750;0.875000;, + 0.125000;0.875000;, + 0.156250;0.875000;, + 0.187500;0.875000;, + 0.218750;0.875000;, + 0.250000;0.875000;, + 0.281250;0.875000;, + 0.312500;0.875000;, + 0.343750;0.875000;, + 0.375000;0.875000;, + 0.406250;0.875000;, + 0.437500;0.875000;, + 0.468750;0.875000;, + 0.500000;0.875000;, + 0.531250;0.875000;, + 0.562500;0.875000;, + 0.593750;0.875000;, + 0.625000;0.875000;, + 0.656250;0.875000;, + 0.687500;0.875000;, + 0.718750;0.875000;, + 0.750000;0.875000;, + 0.781250;0.875000;, + 0.812500;0.875000;, + 0.843750;0.875000;, + 0.875000;0.875000;, + 0.906250;0.875000;, + 0.937500;0.875000;, + 0.968750;0.875000;, + 1.000000;0.875000;, + 0.000000;0.937500;, + 0.031250;0.937500;, + 0.062500;0.937500;, + 0.093750;0.937500;, + 0.125000;0.937500;, + 0.156250;0.937500;, + 0.187500;0.937500;, + 0.218750;0.937500;, + 0.250000;0.937500;, + 0.281250;0.937500;, + 0.312500;0.937500;, + 0.343750;0.937500;, + 0.375000;0.937500;, + 0.406250;0.937500;, + 0.437500;0.937500;, + 0.468750;0.937500;, + 0.500000;0.937500;, + 0.531250;0.937500;, + 0.562500;0.937500;, + 0.593750;0.937500;, + 0.625000;0.937500;, + 0.656250;0.937500;, + 0.687500;0.937500;, + 0.718750;0.937500;, + 0.750000;0.937500;, + 0.781250;0.937500;, + 0.812500;0.937500;, + 0.843750;0.937500;, + 0.875000;0.937500;, + 0.906250;0.937500;, + 0.937500;0.937500;, + 0.968750;0.937500;, + 1.000000;0.937500;, + 0.015625;1.000000;, + 0.046875;1.000000;, + 0.078125;1.000000;, + 0.109375;1.000000;, + 0.140625;1.000000;, + 0.171875;1.000000;, + 0.203125;1.000000;, + 0.234375;1.000000;, + 0.265625;1.000000;, + 0.296875;1.000000;, + 0.328125;1.000000;, + 0.359375;1.000000;, + 0.390625;1.000000;, + 0.421875;1.000000;, + 0.453125;1.000000;, + 0.484375;1.000000;, + 0.515625;1.000000;, + 0.546875;1.000000;, + 0.578125;1.000000;, + 0.609375;1.000000;, + 0.640625;1.000000;, + 0.671875;1.000000;, + 0.703125;1.000000;, + 0.734375;1.000000;, + 0.765625;1.000000;, + 0.796875;1.000000;, + 0.828125;1.000000;, + 0.859375;1.000000;, + 0.890625;1.000000;, + 0.921875;1.000000;, + 0.953125;1.000000;, + 0.984375;1.000000;; + } + + MeshMaterialList + { + 1; + 960; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material Material01 + { + 0.168627;0.345098;0.815686;1.000000;; + 97.000000; + 0.984314;0.984314;0.984314;; + 0.207843;0.207843;0.207843;; + + TextureFileName + { + "photon2.bmp"; + } + } + } + } +} +AnimationSet Rotate +{ + Animation joint1Animation + { + {joint1} + + AnimationKey + { + 2; + 4; + 0;3;0.005714,0.000000,0.000000;;, + 6090;3;0.005714,0.000000,0.000000;;, + 12390;3;0.005714,0.000000,0.000000;;, + 18690;3;0.005714,0.000000,0.000000;;; + } + + AnimationOptions + { + 0; + 0; + } + + AnimationKey + { + 0; + 4; + 0;4;1.000000,0.000000,0.000000,0.000000;;, + 6090;4;-0.500000,0.000000,-0.866025,-0.000000;;, + 12390;4;0.500000,0.000000,-0.866025,-0.000000;;, + 18690;4;1.000000,0.000000,0.000000,0.000000;;; + } + + AnimationOptions + { + 0; + 0; + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/photon2.bmp b/Source Code updated 08-12-05/Spacewar3D/Media/photon2.bmp new file mode 100644 index 0000000..6c2bde2 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/photon2.bmp differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/sci fi bass.wav b/Source Code updated 08-12-05/Spacewar3D/Media/sci fi bass.wav new file mode 100644 index 0000000..a956ff0 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Media/sci fi bass.wav differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Media/tiny.x b/Source Code updated 08-12-05/Spacewar3D/Media/tiny.x new file mode 100644 index 0000000..f25d049 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Media/tiny.x @@ -0,0 +1,53984 @@ +xof 0303txt 0032 +template XSkinMeshHeader { + <3cf169ce-ff7c-44ab-93c0-f78f62d172e2> + WORD nMaxSkinWeightsPerVertex; + WORD nMaxSkinWeightsPerFace; + WORD nBones; +} + +template VertexDuplicationIndices { + + DWORD nIndices; + DWORD nOriginalVertices; + array DWORD indices[nIndices]; +} + +template SkinWeights { + <6f0d123b-bad2-4167-a0d0-80224f25fabb> + STRING transformNodeName; + DWORD nWeights; + array DWORD vertexIndices[nWeights]; + array FLOAT weights[nWeights]; + Matrix4x4 matrixOffset; +} + + +Frame Scene_Root { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Frame body { + + + FrameTransformMatrix { + 1.278853,0.000000,-0.000000,0.000000,0.000000,0.000000,1.123165,0.000000,0.000000,-1.470235,0.000000,0.000000,0.135977,2.027985,133.967667,1.000000;; + } + + Frame { + + + FrameTransformMatrix { + 1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,-0.142114,0.000023,-49.556850,1.000000;; + } + + Mesh { + 4432; + -34.720058;-12.484819;48.088928;, + -25.565304;-9.924385;26.239328;, + -34.612186;-1.674418;34.789925;, + 0.141491;7.622670;25.743210;, + -34.612175;17.843525;39.827816;, + -9.608727;27.597115;38.148296;, + -9.798330;-0.357897;65.599075;, + -34.612179;8.990501;57.540577;, + 0.077733;21.348866;52.164078;, + -11.429913;16.434713;56.577648;, + 0.141490;12.205804;59.792637;, + -17.647087;-15.421692;74.962234;, + 0.139748;-15.745451;70.035706;, + -28.078594;-4.899444;63.550846;, + 0.141491;-27.796947;71.486557;, + -23.021046;8.957323;28.295084;, + 0.141491;-9.487318;27.256748;, + 0.141491;-26.664299;32.989830;, + -11.193695;-27.720463;30.196030;, + -20.920319;-26.441757;33.507900;, + -23.021046;22.545492;38.817097;, + -4.681036;23.543238;52.237732;, + -7.199147;18.381388;29.309721;, + -31.657711;-16.623283;68.586205;, + -7.168321;-28.208626;74.147346;, + -27.854467;-30.229647;72.082443;, + -16.966074;-26.227253;76.131516;, + -33.277031;-27.463528;63.505905;, + -31.930122;-26.942392;51.688797;, + -26.290180;-21.425268;74.259827;, + -32.341526;-14.948000;58.484459;, + -14.724298;0.438756;65.826607;, + -17.688755;-53.253067;77.227638;, + -30.976030;-51.338348;55.580246;, + 0.141491;-50.060425;24.873173;, + -22.127073;-50.465675;31.947027;, + -24.287395;-54.514771;54.652374;, + 0.141374;-56.516960;39.995022;, + 0.141491;-37.227283;70.123970;, + -29.140186;-40.740757;54.994888;, + -18.598015;-63.628139;61.096786;, + -18.580341;-63.659996;42.089684;, + 0.141491;-28.374607;32.989838;, + -11.193696;-29.430769;30.196033;, + -20.920321;-28.152065;33.507904;, + -25.494289;-63.762321;51.551601;, + 0.102538;-63.445549;68.379417;, + 0.102538;-63.638348;37.841175;, + -16.503817;-36.463478;72.030708;, + -24.298424;-39.992043;64.994545;, + -14.590791;-42.557045;68.336487;, + -26.760902;-31.939959;72.082443;, + -16.966076;-27.937576;75.155312;, + -32.183464;-29.173838;63.505913;, + -31.930124;-28.652702;51.688805;, + -19.449144;-51.888283;62.452682;, + -6.438459;-49.943382;70.242874;, + 0.141491;-49.688911;68.965103;, + 0.141491;-29.773867;26.064960;, + -12.711588;-29.992414;25.556252;, + -23.846188;-30.195030;29.093178;, + -32.848045;-32.305534;51.981480;, + -30.142681;-11.598551;37.311020;, + -28.347116;-31.250282;40.537331;, + -26.551552;-50.902012;43.763638;, + -24.332394;-52.295708;66.403946;, + -26.425222;-28.402384;42.598354;, + -32.056793;-28.913269;57.597359;, + -34.612183;9.271671;35.005108;, + -34.612183;13.697768;49.116459;, + -34.666122;-2.091087;56.933292;, + -34.666122;-7.473567;40.417480;, + -33.602604;-10.886051;47.766304;, + -33.245544;-1.592087;55.511299;, + -33.454399;8.516764;56.378914;, + -33.377022;12.971798;48.765106;, + -33.285355;-1.230055;35.845985;, + -33.422455;-6.066209;41.124596;, + -33.326355;16.538502;40.337154;, + -33.380333;8.824398;35.941063;, + 0.141491;-46.403996;39.221611;, + -5.525791;-46.932079;37.824707;, + -10.389103;-46.292725;39.480644;, + -20.399273;-44.550671;45.133575;, + -24.509207;-50.845016;55.877068;, + 0.141491;17.711647;27.783634;, + 0.077734;27.263643;33.720470;, + -5.109205;27.415857;34.161194;, + -9.139874;26.594124;45.452682;, + 0.141491;22.863007;31.002354;, + -6.363874;23.153360;30.623175;, + -9.748887;22.893982;32.226307;, + -13.398946;24.794630;34.246376;, + -16.294899;25.090145;38.449425;, + -18.686239;24.355274;46.119999;, + -13.692654;24.681557;52.324207;, + -8.242743;20.971973;54.090229;, + -3.765221;20.286398;55.975685;, + 0.141491;18.192966;54.231785;, + -10.778057;22.307632;52.895199;, + -8.655515;-23.637917;29.537901;, + -19.722260;-1.585354;65.224693;, + -20.110298;5.311386;60.448208;, + -21.278301;13.060091;57.191551;, + -19.918121;19.050785;53.541157;, + -15.815639;16.328318;56.204815;, + -10.153260;28.853861;37.612610;, + -11.867444;17.503666;57.664883;, + -15.160084;1.466462;66.822762;, + 0.141491;28.542030;33.277145;, + -5.618525;28.677891;33.713886;, + -9.625071;27.664139;46.092670;, + 0.141491;24.137672;30.525173;, + -6.801406;24.428030;30.145996;, + -10.186419;24.168652;31.749128;, + -13.836477;26.069300;33.769196;, + -16.732431;26.364815;37.972244;, + -19.123772;25.424227;46.716579;, + -11.215589;23.376585;53.491779;, + -20.159792;-0.516401;65.821274;, + -20.547831;6.380339;61.044788;, + -21.715834;14.129044;57.788132;, + -20.355654;20.119738;54.137737;, + -16.253172;17.397270;56.801395;, + -29.388227;-40.601273;63.974194;, + -30.997221;-35.165527;63.780437;, + -29.736418;-23.496841;70.352409;, + -30.377008;-28.942865;68.092697;, + -32.118473;-39.484562;59.515316;, + -29.846169;-43.697968;61.553284;, + -28.709795;-30.444099;72.554062;, + -30.243555;-40.815727;64.445816;, + -31.852549;-35.379982;64.252060;, + -30.591745;-23.711294;70.824028;, + -31.232336;-29.157318;68.564316;, + -32.973801;-39.699017;59.986935;, + -30.701496;-43.912422;62.024902;, + 35.004288;-12.484816;48.088928;, + 25.849533;-9.924379;26.239330;, + 34.896416;-1.674414;34.789925;, + 34.896404;17.843529;39.827820;, + 9.931857;27.639982;38.133949;, + 10.079079;-0.357885;66.089737;, + 34.896408;8.990503;57.540577;, + 11.714142;16.434715;57.068302;, + 17.931316;-15.421690;74.962234;, + 28.362823;-4.899441;63.550846;, + 23.305275;8.957328;28.295086;, + 11.477924;-27.720457;30.196030;, + 21.204548;-26.441751;33.507900;, + 23.305275;22.545494;38.817101;, + 4.827426;23.522514;52.188004;, + 7.483376;18.381392;29.309723;, + 31.941940;-16.623281;68.586205;, + 7.452550;-28.208622;74.147346;, + 28.138697;-30.229643;72.082443;, + 17.250303;-26.227251;76.131516;, + 33.561260;-27.463524;63.505905;, + 32.214352;-26.942389;51.688797;, + 26.574409;-21.425266;74.259827;, + 32.625755;-14.947996;58.484459;, + 15.005043;0.438756;66.317261;, + 17.972984;-53.253063;77.227638;, + 31.260260;-51.338341;55.580242;, + 22.411303;-50.465668;31.947027;, + 24.562241;-54.514763;54.652370;, + 29.424416;-40.740753;54.994888;, + 18.770283;-63.633057;61.106705;, + 18.773201;-63.677704;42.028572;, + 11.477925;-29.430763;30.196033;, + 21.204550;-28.152060;33.507904;, + 25.705898;-63.638660;51.490501;, + 16.788046;-36.463474;72.030708;, + 24.582653;-39.992039;64.994545;, + 14.875020;-42.557041;68.336487;, + 27.045132;-31.939955;72.082443;, + 17.250305;-27.937574;75.155312;, + 32.467693;-29.173834;63.505913;, + 32.214352;-28.652699;51.688805;, + 19.723988;-51.888283;62.452682;, + 6.722688;-49.943378;70.242874;, + 12.995817;-29.992407;25.556252;, + 24.130417;-30.195024;29.093178;, + 33.132275;-32.305531;51.981480;, + 30.426910;-11.598546;37.311020;, + 28.631346;-31.250277;40.537331;, + 26.835781;-50.902004;43.763638;, + 24.616623;-52.295704;66.403946;, + 26.709452;-28.402378;42.598354;, + 32.341022;-28.913265;57.597359;, + 34.896412;9.271675;35.005108;, + 34.896412;13.697771;49.116459;, + 34.950352;-2.091084;56.933292;, + 34.950352;-7.473563;40.417480;, + 33.931534;-10.798729;47.691635;, + 33.266479;-1.659648;55.141335;, + 33.733215;8.483885;56.324486;, + 33.578400;13.114620;48.755165;, + 33.395126;-1.314395;35.941048;, + 33.696419;-6.417687;40.866890;, + 33.477127;16.479158;40.343475;, + 33.569466;8.843540;35.935562;, + 5.810019;-46.932072;37.824707;, + 10.673332;-46.292717;39.480644;, + 20.683502;-44.550663;45.133575;, + 24.793436;-50.845009;55.877064;, + 5.227813;27.441788;34.143456;, + 9.646603;26.610264;45.446602;, + 6.648103;23.153364;30.623177;, + 10.033116;22.893986;32.226311;, + 13.683175;24.794634;34.246380;, + 16.579128;25.090147;38.449429;, + 18.970469;24.355276;46.119999;, + 13.976883;24.681559;52.324207;, + 8.526972;20.971975;54.090229;, + 4.049450;20.286400;55.975685;, + 11.062286;22.307634;52.895199;, + 8.939744;-23.637911;29.537901;, + 20.006489;-1.585352;65.224693;, + 20.394527;5.311388;60.448208;, + 21.562531;13.060093;57.191551;, + 20.202351;19.050787;53.541157;, + 16.099869;16.328320;56.204815;, + 10.437490;28.853863;37.612614;, + 12.151673;17.503668;57.664883;, + 15.444313;1.466464;66.822762;, + 5.902754;28.677893;33.713890;, + 9.909300;27.664141;46.092674;, + 7.085635;24.428034;30.145998;, + 10.470648;24.168655;31.749130;, + 14.120707;26.069304;33.769199;, + 17.016661;26.364817;37.972248;, + 19.408001;25.424229;46.716579;, + 11.499818;23.376587;53.491779;, + 20.444021;-0.516399;65.821274;, + 20.832060;6.380341;61.044788;, + 22.000063;14.129045;57.788132;, + 20.639883;20.119740;54.137737;, + 16.537401;17.397272;56.801395;, + 29.672457;-40.601269;63.974190;, + 31.281450;-35.165524;63.780437;, + 30.020647;-23.496838;70.352409;, + 30.661238;-28.942862;68.092697;, + 32.402702;-39.484558;59.515316;, + 30.130398;-43.697964;61.553280;, + 28.994024;-30.444096;72.554062;, + 30.527784;-40.815723;64.445816;, + 32.136776;-35.379978;64.252060;, + 30.875975;-23.711290;70.824028;, + 31.516565;-29.157314;68.564316;, + 33.258030;-39.699013;59.986935;, + 30.985725;-43.912418;62.024899;, + 0.100870;-93.627769;27.356903;, + 0.100870;-80.794510;68.288246;, + -41.760616;-103.151527;46.673916;, + -24.713787;-129.635101;24.771605;, + -18.089975;-112.633553;62.624924;, + 0.100870;-118.350113;30.024460;, + -5.798617;-124.775063;56.960815;, + -25.173319;-90.214371;26.265825;, + -37.889961;-84.783730;46.673920;, + -4.658672;-143.854736;42.160900;, + -33.648396;-119.084198;29.032738;, + -19.782078;-86.427551;62.399220;, + 0.100870;-105.624802;63.766800;, + -33.875122;-127.515556;35.677757;, + -41.014412;-121.305328;41.175835;, + -15.635758;-212.122009;56.766579;, + -11.671675;-229.887054;44.415508;, + -11.967894;-201.991714;48.101704;, + -33.998722;-220.566071;61.510651;, + -39.528782;-322.910553;59.808899;, + -23.342522;-325.221313;36.655556;, + -35.048260;-213.572937;32.058167;, + -43.113548;-194.904678;46.172501;, + -43.619999;-206.619293;50.933479;, + -46.585148;-323.985016;35.078949;, + -34.708954;-324.151184;32.796345;, + -44.766525;-223.910660;41.391571;, + -13.351915;-168.910248;60.740967;, + -8.177140;-173.738678;44.589825;, + -22.042976;-120.057648;62.105083;, + -30.082495;-176.538712;60.086678;, + -23.352434;-144.066956;25.433430;, + -38.057816;-164.488510;57.655933;, + -25.025139;-183.704147;31.840212;, + -41.240711;-158.109726;38.305466;, + -31.089090;-190.013657;63.028923;, + -27.205957;-198.419052;34.729908;, + -35.127117;-120.041656;57.534679;, + -36.447479;-347.590393;81.989037;, + -32.971939;-348.840668;75.068268;, + -30.483822;-349.513580;64.542366;, + -30.277090;-349.285034;45.291451;, + -30.731056;-349.140869;32.597919;, + -50.995792;-347.566376;80.111809;, + -54.063526;-348.805878;72.346741;, + -53.720398;-349.475220;61.544106;, + -49.480873;-349.253357;42.813530;, + -44.998409;-349.114563;30.769142;, + -37.752792;-344.579865;81.882141;, + -33.638000;-341.897522;75.396339;, + -32.718132;-336.016754;68.786903;, + -25.375702;-326.803925;43.166012;, + -50.401588;-344.387238;80.484764;, + -53.600422;-344.479889;72.777603;, + -52.430077;-341.348145;62.750374;, + -52.006966;-325.347748;41.525673;, + -37.431126;-348.022339;28.784142;, + -30.811893;-349.229279;40.184383;, + -47.579365;-349.201599;38.020824;, + -23.738852;-160.860565;27.560469;, + -32.426979;-277.766174;32.203541;, + -24.943554;-117.940918;21.795742;, + -27.146837;-312.724365;57.102558;, + -41.869755;-312.813507;56.621277;, + -19.773428;-311.714844;51.152798;, + -17.516390;-311.220673;43.257233;, + -53.350098;-311.978485;48.287319;, + -24.548374;-311.052429;38.861855;, + -49.043320;-311.481262;40.787697;, + -36.779060;-311.947937;34.579979;, + -13.444867;-241.724686;43.812698;, + -18.083738;-235.404388;32.990765;, + -39.270157;-235.407135;32.086258;, + -18.709482;-278.846039;51.472935;, + -47.800510;-278.654022;48.696930;, + -15.278575;-278.076538;41.723305;, + -42.724228;-277.794373;38.664391;, + -47.843460;-278.215302;43.605659;, + -37.205242;-278.835236;54.105011;, + -21.722435;-277.300140;35.149902;, + -42.656788;-120.929993;49.355263;, + -17.315336;-184.822891;56.888432;, + -37.002441;-178.638748;55.923828;, + -14.539805;-213.740479;34.164742;, + -28.676964;-235.063950;29.100901;, + -26.290127;-159.034851;62.359310;, + -44.822357;-162.486374;47.417561;, + -26.283358;-192.193878;33.507416;, + -27.280354;-203.100555;31.769535;, + -26.421682;-194.991638;31.950752;, + -25.691517;-188.165451;31.257717;, + -32.553154;-207.822937;62.845280;, + -38.257362;-201.972275;59.263458;, + -23.653395;-201.105835;63.411591;, + -25.556084;-324.127594;55.527039;, + -37.508007;-327.823730;63.943375;, + -48.660114;-323.846619;52.634663;, + -43.124073;-327.569916;63.163582;, + -46.985233;-330.924652;60.877213;, + -47.738998;-332.348511;57.905354;, + -48.218380;-333.043976;53.745155;, + -46.926067;-335.870056;46.077358;, + -46.011299;-336.928101;39.876133;, + -39.092888;-333.629852;32.004887;, + -42.781075;-334.302216;33.467194;, + -32.159611;-328.701721;61.163334;, + -32.027699;-330.586823;57.891068;, + -30.829683;-335.353180;51.935188;, + -30.289175;-336.679779;37.674358;, + -33.346500;-333.002716;32.172970;, + -30.620396;-337.228912;46.045479;, + -30.907063;-337.423279;41.478359;, + -30.290890;-334.903290;34.539791;, + -36.497189;-333.552704;31.073109;, + -44.659866;-335.766113;36.478382;, + -37.186310;-327.136566;64.882172;, + -43.760216;-326.861603;63.886238;, + -48.019054;-330.368195;61.125313;, + -48.864738;-331.923981;57.957317;, + -49.377052;-332.709412;53.701771;, + -48.091980;-335.719604;45.783157;, + -47.151276;-336.782074;39.490070;, + -39.525562;-333.437286;30.882923;, + -43.645668;-334.103790;32.636833;, + -31.204782;-328.177948;61.712044;, + -30.816942;-330.532898;57.981380;, + -29.621853;-335.235016;52.022976;, + -29.081070;-336.669037;37.797260;, + -32.739624;-332.828003;31.129665;, + -29.406822;-337.163391;46.021709;, + -29.694448;-337.386993;41.543434;, + -29.145948;-334.835358;34.136993;, + -36.550041;-333.356628;29.870857;, + -45.758202;-335.587708;35.996567;, + -45.427898;-130.595413;48.340775;, + -42.336990;-130.488724;54.945263;, + -37.678047;-130.227783;58.228161;, + -45.523903;-130.013565;42.878948;, + -41.142269;-130.155960;39.554146;, + -24.386381;-143.741119;62.231689;, + -32.621887;-188.625381;36.814716;, + -11.541974;-184.862228;45.883656;, + -41.620197;-179.552460;46.748608;, + -39.826946;-174.615158;38.212673;, + -43.535854;-120.777649;40.070557;, + -22.938877;-119.976494;64.392769;, + -30.902096;-176.652710;61.614151;, + -42.871780;-158.253891;37.723408;, + -36.567158;-119.911232;59.557304;, + -45.200268;-120.584846;49.944744;, + -38.287941;-178.810394;57.081314;, + -27.014326;-159.047546;63.937130;, + -42.580544;-130.073517;38.311958;, + -24.975321;-143.678299;63.863117;, + -43.319576;-179.781570;47.035759;, + -41.500957;-174.797165;37.779552;, + -23.619888;-130.097656;63.516205;, + -38.861588;-164.565750;58.167274;, + -45.622833;-162.561295;47.934299;, + -46.311371;-130.569748;48.698330;, + -38.258266;-130.203033;58.985287;, + -46.929386;-129.807648;42.502537;, + -39.136471;-178.898392;57.512791;, + -43.810833;-129.927979;37.517529;, + -44.150005;-179.891830;47.497341;, + -24.121252;-130.069931;64.903618;, + -43.136353;-130.426819;55.607552;, + -47.307560;-130.516037;48.990032;, + -38.841251;-130.165939;59.846836;, + 0.100870;-113.035980;52.159779;, + -42.175369;-334.770050;70.948944;, + -47.093388;-334.957916;67.363968;, + -35.253540;-336.022400;70.615288;, + -50.392654;-342.841522;46.961720;, + -31.481352;-343.813690;66.423645;, + -14.078679;-70.624992;36.359470;, + 0.100870;-70.522980;34.969410;, + -10.657997;-70.656097;64.141533;, + 0.100870;-70.455383;68.554764;, + -20.407236;-70.663857;37.704983;, + -25.309130;-70.709183;43.680515;, + -20.123388;-70.712914;61.395264;, + -25.333038;-70.735931;56.047955;, + -29.135050;-70.748413;50.137466;, + -3.877978;-63.520813;66.895554;, + -3.855402;-70.482147;66.867348;, + -19.676884;-63.736073;61.580589;, + -19.676886;-63.736065;41.365475;, + -27.052189;-63.743755;51.457161;, + 0.100870;-63.591896;69.324707;, + 0.100870;-63.725189;37.057167;, + -14.884621;-70.698990;35.456879;, + 0.100870;-70.596962;33.974888;, + -11.246261;-70.730103;64.830460;, + 0.100870;-70.535385;69.452461;, + -21.615906;-70.737846;36.711586;, + -26.829739;-70.783180;43.067379;, + -21.313995;-70.786911;61.909431;, + -26.855167;-70.809929;56.221832;, + -30.899126;-70.822411;49.935226;, + -4.034785;-63.594818;67.636086;, + -3.998070;-70.562149;67.711349;, + 0.100870;-63.526737;69.920647;, + 0.100870;-70.464218;70.091736;, + -4.383465;-63.529644;68.232056;, + -4.359452;-70.490974;68.296936;, + -3.386524;-75.591728;67.510147;, + -2.776832;-102.840965;65.045303;, + 0.100870;-80.880516;69.142647;, + 0.100870;-105.710800;64.621178;, + -3.516490;-75.677727;68.364532;, + -2.906797;-102.926964;65.899696;, + -22.798948;-79.832886;31.235064;, + -25.056231;-101.901466;22.759089;, + -26.274025;-98.021988;61.838871;, + -12.963859;-92.037811;25.319746;, + -13.494529;-98.258217;23.341805;, + -14.609492;-108.732101;22.072079;, + -14.476962;-118.111931;22.543592;, + -14.431333;-124.958817;24.257095;, + -14.850490;-137.747299;29.875664;, + -30.438990;-82.029594;36.202908;, + -32.929981;-95.527786;32.765190;, + -12.144010;-151.520721;33.476109;, + -14.428178;-166.866211;34.299915;, + -16.716248;-179.708649;34.860874;, + -32.423717;-145.852829;29.285240;, + -35.720222;-158.855484;33.087280;, + -34.360893;-178.742081;33.996445;, + -9.632311;-81.213554;66.041458;, + -27.866913;-87.057098;57.616055;, + -14.684381;-100.398880;63.420395;, + -19.517466;-85.226929;63.991261;, + -40.065174;-318.672638;64.375366;, + -35.993942;-318.696655;64.690056;, + -31.878841;-318.817719;31.286600;, + -36.170387;-318.762360;30.458429;, + -26.210686;-317.713867;48.030136;, + -25.361750;-319.393433;40.717945;, + -24.732561;-319.150665;36.669399;, + -48.911896;-319.507538;43.118351;, + -47.664860;-317.929291;52.098011;, + -44.133797;-318.262634;57.600853;, + -27.271666;-318.973633;33.779339;, + -40.532146;-318.881866;32.536850;, + -45.276333;-318.965332;34.026871;, + -29.160122;-318.455261;60.501675;, + -26.977306;-318.229187;56.671257;, + -46.791954;-319.251740;38.820690;, + -35.793861;-302.649597;62.947060;, + -26.227007;-302.503235;60.257622;, + -43.178516;-302.253784;56.495960;, + -39.922192;-302.337189;60.689114;, + -44.792736;-300.990540;35.366993;, + -47.422535;-301.286255;40.386948;, + -36.019176;-300.612274;28.811062;, + -32.605831;-300.673798;29.757746;, + -23.851152;-301.120178;37.022240;, + -27.166359;-300.722290;30.436232;, + -23.590527;-301.899200;50.070431;, + -21.858656;-301.316620;40.265823;, + -24.232523;-302.246063;55.899723;, + -48.612350;-301.920135;51.038540;, + -41.315552;-300.854462;32.999699;, + -48.634773;-301.610474;45.850082;, + -40.141144;-255.114700;53.952099;, + -36.110058;-255.272278;56.438984;, + -23.373695;-253.775467;31.533113;, + -30.086535;-252.832504;28.237844;, + -19.459860;-253.800369;31.844227;, + -25.706972;-255.490616;61.349560;, + -17.805582;-255.126160;53.579521;, + -46.995369;-254.835419;49.536797;, + -47.021446;-254.582092;45.376308;, + -46.248730;-254.337875;41.345463;, + -43.542858;-254.140945;38.043243;, + -16.171713;-254.259338;39.300293;, + -14.507923;-254.391815;41.434330;, + -15.366711;-254.579529;44.539597;, + -40.648895;-253.837158;32.980343;, + -36.819706;-253.722290;30.997900;, + -12.445428;-224.292206;47.498665;, + -15.667706;-223.691574;37.720806;, + -18.508575;-223.414154;32.083805;, + -35.438473;-223.276321;30.279057;, + -14.603230;-224.687500;54.050613;, + -24.829622;-225.708954;61.528713;, + -15.676450;-224.947296;58.346878;, + -40.303440;-224.300476;58.010777;, + -46.628914;-224.518768;52.147167;, + -34.276493;-225.076096;60.967789;, + -25.784931;-212.417236;28.070059;, + -27.219553;-222.078049;29.233458;, + -25.575615;-279.096832;57.975468;, + -42.281010;-210.077301;42.464180;, + -12.848580;-215.346298;46.368130;, + -15.573069;-134.748444;59.732529;, + -7.157517;-152.749008;49.893009;, + -23.513350;-142.361069;25.355200;, + -5.245355;-134.035217;49.777805;, + -14.712274;-189.112885;40.448975;, + -16.435289;-199.126770;56.824585;, + 0.100870;-77.831696;33.694950;, + 0.100870;-107.150894;26.804878;, + -13.586044;-80.087227;31.121128;, + 41.958218;-103.151527;46.673912;, + 24.911388;-129.635101;24.771599;, + 18.287577;-112.633553;62.624916;, + 5.996217;-124.775055;56.960815;, + 25.370918;-90.214363;26.265820;, + 38.087563;-84.783722;46.673916;, + 4.856273;-143.854736;42.160900;, + 33.845997;-119.084190;29.032734;, + 19.979677;-86.427544;62.399212;, + 34.072723;-127.515556;35.677750;, + 41.212013;-121.305321;41.175831;, + 15.833360;-212.121994;56.766575;, + 11.869275;-229.887054;44.415504;, + 12.165494;-201.991699;48.101700;, + 34.196323;-220.566040;61.510643;, + 39.726387;-322.910522;59.808895;, + 23.540123;-325.221313;36.655552;, + 35.245861;-213.572937;32.058163;, + 43.311150;-194.904678;46.172497;, + 43.817604;-206.619293;50.933479;, + 46.782749;-323.985016;35.078949;, + 34.906559;-324.151184;32.796345;, + 44.964127;-223.910675;41.391571;, + 13.549516;-168.910248;60.740959;, + 8.374740;-173.738678;44.589821;, + 22.240578;-120.057648;62.105080;, + 30.280094;-176.538696;60.086674;, + 23.550035;-144.066940;25.433426;, + 38.255417;-164.488495;57.655930;, + 25.222740;-183.704147;31.840208;, + 41.438313;-158.109711;38.305462;, + 31.286692;-190.013657;63.028919;, + 27.403559;-198.419037;34.729908;, + 35.324718;-120.041656;57.534676;, + 36.645081;-347.590363;81.989037;, + 33.169540;-348.840668;75.068268;, + 30.681425;-349.513580;64.542366;, + 30.474693;-349.285034;45.291451;, + 30.928658;-349.140839;32.597916;, + 51.193394;-347.566376;80.111809;, + 54.261131;-348.805878;72.346741;, + 53.918003;-349.475220;61.544106;, + 49.678474;-349.253357;42.813526;, + 45.196014;-349.114563;30.769142;, + 37.950394;-344.579834;81.882141;, + 33.835602;-341.897522;75.396339;, + 32.915733;-336.016724;68.786911;, + 25.573301;-326.803894;43.166008;, + 50.599190;-344.387238;80.484764;, + 53.798027;-344.479858;72.777603;, + 52.627678;-341.348145;62.750374;, + 52.204571;-325.347748;41.525669;, + 37.628727;-348.022308;28.784140;, + 31.009497;-349.229279;40.184380;, + 47.776966;-349.201569;38.020821;, + 23.936451;-160.860550;27.560463;, + 32.624580;-277.766174;32.203537;, + 25.141153;-117.940918;21.795738;, + 27.344439;-312.724365;57.102554;, + 42.067356;-312.813507;56.621273;, + 19.971029;-311.714844;51.152798;, + 17.713989;-311.220673;43.257229;, + 53.547699;-311.978485;48.287315;, + 24.745977;-311.052429;38.861851;, + 49.240925;-311.481262;40.787693;, + 36.976662;-311.947937;34.579979;, + 13.642469;-241.724686;43.812695;, + 18.281340;-235.404388;32.990765;, + 39.467758;-235.407135;32.086258;, + 18.907082;-278.846008;51.472931;, + 47.998108;-278.654022;48.696930;, + 15.476175;-278.076508;41.723305;, + 42.921829;-277.794373;38.664387;, + 48.041061;-278.215271;43.605659;, + 37.402847;-278.835236;54.105007;, + 21.920036;-277.300110;35.149902;, + 42.854393;-120.929985;49.355259;, + 17.512936;-184.822891;56.888428;, + 37.200043;-178.638748;55.923824;, + 14.737406;-213.740463;34.164738;, + 28.874565;-235.063934;29.100899;, + 26.487728;-159.034851;62.359303;, + 45.019958;-162.486359;47.417557;, + 26.480961;-192.193863;33.507412;, + 27.477957;-203.100555;31.769531;, + 26.619284;-194.991638;31.950748;, + 25.889118;-188.165451;31.257713;, + 32.750755;-207.822937;62.845276;, + 38.454964;-201.972275;59.263454;, + 23.850996;-201.105820;63.411583;, + 25.753687;-324.127563;55.527039;, + 37.705608;-327.823700;63.943378;, + 48.857719;-323.846619;52.634659;, + 43.321674;-327.569916;63.163586;, + 47.182835;-330.924622;60.877216;, + 47.936604;-332.348511;57.905350;, + 48.415981;-333.043976;53.745152;, + 47.123669;-335.870056;46.077354;, + 46.208900;-336.928101;39.876129;, + 39.290493;-333.629852;32.004887;, + 42.978680;-334.302216;33.467194;, + 32.357216;-328.701721;61.163334;, + 32.225300;-330.586823;57.891064;, + 31.027285;-335.353180;51.935184;, + 30.486776;-336.679749;37.674358;, + 33.544102;-333.002716;32.172966;, + 30.817997;-337.228882;46.045475;, + 31.104664;-337.423279;41.478355;, + 30.488491;-334.903290;34.539787;, + 36.694790;-333.552673;31.073109;, + 44.857464;-335.766083;36.478382;, + 37.383911;-327.136536;64.882172;, + 43.957817;-326.861603;63.886242;, + 48.216656;-330.368195;61.125313;, + 49.062340;-331.923950;57.957314;, + 49.574654;-332.709381;53.701767;, + 48.289585;-335.719604;45.783157;, + 47.348877;-336.782074;39.490070;, + 39.723164;-333.437256;30.882921;, + 43.843269;-334.103760;32.636829;, + 31.402386;-328.177948;61.712044;, + 31.014545;-330.532867;57.981380;, + 29.819454;-335.234985;52.022972;, + 29.278673;-336.669006;37.797256;, + 32.937225;-332.828003;31.129665;, + 29.604424;-337.163391;46.021706;, + 29.892050;-337.386993;41.543430;, + 29.343552;-334.835358;34.136990;, + 36.747643;-333.356598;29.870857;, + 45.955803;-335.587677;35.996567;, + 45.625500;-130.595398;48.340771;, + 42.534595;-130.488724;54.945255;, + 37.875648;-130.227783;58.228153;, + 45.721504;-130.013565;42.878941;, + 41.339870;-130.155960;39.554138;, + 24.583982;-143.741119;62.231686;, + 32.819485;-188.625366;36.814716;, + 11.739574;-184.862213;45.883652;, + 41.817802;-179.552460;46.748608;, + 40.024551;-174.615143;38.212673;, + 43.733459;-120.777641;40.070549;, + 23.136478;-119.976486;64.392761;, + 31.099697;-176.652695;61.614147;, + 43.069382;-158.253876;37.723404;, + 36.764759;-119.911224;59.557301;, + 45.397869;-120.584854;49.944736;, + 38.485538;-178.810379;57.081314;, + 27.211926;-159.047531;63.937126;, + 42.778149;-130.073502;38.311954;, + 25.172922;-143.678284;63.863113;, + 43.517178;-179.781570;47.035755;, + 41.698555;-174.797165;37.779549;, + 23.817490;-130.097641;63.516201;, + 39.059189;-164.565750;58.167271;, + 45.820435;-162.561295;47.934296;, + 46.508972;-130.569733;48.698326;, + 38.455868;-130.203018;58.985283;, + 47.126987;-129.807632;42.502533;, + 39.334072;-178.898392;57.512791;, + 44.008434;-129.927979;37.517525;, + 44.347607;-179.891815;47.497337;, + 24.318851;-130.069931;64.903610;, + 43.333954;-130.426819;55.607544;, + 47.505161;-130.516037;48.990028;, + 39.038853;-130.165924;59.846832;, + 42.372971;-334.770050;70.948944;, + 47.290989;-334.957916;67.363968;, + 35.451141;-336.022369;70.615288;, + 50.590260;-342.841522;46.961720;, + 31.678953;-343.813690;66.423653;, + 14.276281;-70.624985;36.359463;, + 10.855597;-70.656097;64.141525;, + 20.604836;-70.663849;37.704975;, + 25.506731;-70.709175;43.680508;, + 20.320988;-70.712906;61.395260;, + 25.530638;-70.735931;56.047947;, + 29.332651;-70.748413;50.137463;, + 4.075578;-63.520775;66.895554;, + 4.053002;-70.482147;66.867340;, + 19.874485;-63.736065;61.580585;, + 19.874485;-63.736057;41.365467;, + 27.249788;-63.743755;51.457157;, + 15.082223;-70.698982;35.456871;, + 11.443861;-70.730095;64.830460;, + 21.813507;-70.737846;36.711578;, + 27.027336;-70.783173;43.067371;, + 21.511593;-70.786903;61.909428;, + 27.052767;-70.809921;56.221828;, + 31.096729;-70.822411;49.935223;, + 4.232385;-63.594814;67.636078;, + 4.195670;-70.562141;67.711349;, + 4.581065;-63.529640;68.232048;, + 4.557052;-70.490967;68.296928;, + 3.584123;-75.591721;67.510139;, + 2.974431;-102.840958;65.045296;, + 3.714089;-75.677727;68.364525;, + 3.104397;-102.926956;65.899689;, + 22.996550;-79.832886;31.235056;, + 25.253832;-101.901466;22.759085;, + 26.471624;-98.021980;61.838863;, + 13.161459;-92.037811;25.319742;, + 13.692128;-98.258209;23.341801;, + 14.807093;-108.732094;22.072075;, + 14.674563;-118.111923;22.543589;, + 14.628933;-124.958817;24.257090;, + 15.048090;-137.747284;29.875660;, + 30.636589;-82.029587;36.202900;, + 33.127583;-95.527786;32.765182;, + 12.341610;-151.520721;33.476105;, + 14.625778;-166.866196;34.299911;, + 16.913849;-179.708649;34.860870;, + 32.621319;-145.852814;29.285236;, + 35.917824;-158.855484;33.087276;, + 34.558495;-178.742081;33.996445;, + 9.829911;-81.213554;66.041458;, + 28.064514;-87.057091;57.616047;, + 14.881982;-100.398872;63.420387;, + 19.715067;-85.226913;63.991257;, + 40.262775;-318.672607;64.375366;, + 36.191544;-318.696625;64.690056;, + 32.076443;-318.817719;31.286600;, + 36.367989;-318.762360;30.458429;, + 26.408287;-317.713867;48.030132;, + 25.559353;-319.393433;40.717941;, + 24.930161;-319.150635;36.669395;, + 49.109501;-319.507538;43.118351;, + 47.862465;-317.929291;52.098011;, + 44.331398;-318.262634;57.600853;, + 27.469267;-318.973633;33.779335;, + 40.729748;-318.881866;32.536850;, + 45.473934;-318.965332;34.026867;, + 29.357723;-318.455261;60.501675;, + 27.174908;-318.229156;56.671257;, + 46.989555;-319.251740;38.820686;, + 35.991463;-302.649597;62.947060;, + 26.424608;-302.503204;60.257622;, + 43.376122;-302.253784;56.495960;, + 40.119797;-302.337189;60.689114;, + 44.990337;-300.990540;35.366989;, + 47.620136;-301.286255;40.386948;, + 36.216778;-300.612274;28.811060;, + 32.803436;-300.673798;29.757744;, + 24.048756;-301.120178;37.022236;, + 27.363960;-300.722260;30.436230;, + 23.788128;-301.899200;50.070427;, + 22.056257;-301.316620;40.265823;, + 24.430126;-302.246063;55.899719;, + 48.809952;-301.920135;51.038536;, + 41.513157;-300.854462;32.999695;, + 48.832378;-301.610474;45.850079;, + 40.338745;-255.114685;53.952095;, + 36.307659;-255.272247;56.438980;, + 23.571297;-253.775452;31.533110;, + 30.284136;-252.832504;28.237841;, + 19.657463;-253.800369;31.844225;, + 25.904573;-255.490616;61.349560;, + 18.003183;-255.126160;53.579521;, + 47.192974;-254.835419;49.536793;, + 47.219048;-254.582077;45.376305;, + 46.446331;-254.337875;41.345459;, + 43.740459;-254.140930;38.043240;, + 16.369314;-254.259338;39.300289;, + 14.705525;-254.391815;41.434326;, + 15.564311;-254.579514;44.539597;, + 40.846497;-253.837143;32.980343;, + 37.017307;-253.722290;30.997898;, + 12.643028;-224.292191;47.498661;, + 15.865307;-223.691589;37.720802;, + 18.706177;-223.414139;32.083801;, + 35.636074;-223.276321;30.279055;, + 14.800831;-224.687500;54.050610;, + 25.027224;-225.708954;61.528706;, + 15.874051;-224.947296;58.346874;, + 40.501038;-224.300461;58.010777;, + 46.826515;-224.518753;52.147167;, + 34.474094;-225.076096;60.967781;, + 25.982531;-212.417236;28.070055;, + 27.417156;-222.078049;29.233456;, + 25.773218;-279.096802;57.975464;, + 42.478611;-210.077286;42.464176;, + 13.046181;-215.346298;46.368130;, + 15.770669;-134.748428;59.732525;, + 7.355118;-152.749008;49.893005;, + 23.710951;-142.361053;25.355196;, + 5.442955;-134.035202;49.777802;, + 14.909875;-189.112885;40.448971;, + 16.632891;-199.126770;56.824585;, + 13.783645;-80.087219;31.121120;, + -8.380501;25.169817;49.343712;, + 8.527061;25.316885;48.399185;, + 12.786732;-55.480198;44.790428;, + -12.997930;-55.440056;45.084347;, + 60.698940;10.489414;61.040886;, + 59.605530;7.137096;70.365372;, + 36.555004;14.780283;44.255161;, + 50.340195;11.466660;40.450012;, + 77.780144;-0.616348;69.076759;, + 61.100998;-12.097787;52.234310;, + 54.395813;-21.261244;55.889946;, + 42.876431;-10.391958;41.524540;, + 70.006081;2.367340;76.967026;, + 67.389786;-1.205821;78.118034;, + 68.045258;-14.292754;73.173157;, + 78.460449;-9.570584;65.570358;, + 75.694405;-15.631040;66.051804;, + 78.295067;-4.036124;86.370949;, + 87.136154;-19.603304;74.055412;, + 78.082153;2.534071;68.323830;, + 66.419693;-15.575734;72.678177;, + 87.648987;-4.948394;78.487473;, + 77.807617;-19.174520;83.090736;, + 83.368835;-3.849846;82.306015;, + 89.470627;-9.871181;75.022331;, + 69.084702;6.252669;77.456337;, + 64.973396;0.815134;79.337639;, + 80.264275;-7.343033;63.092098;, + 75.774590;-18.309954;63.527412;, + 64.148453;-7.608615;77.332436;, + 73.421997;6.648875;73.774124;, + 83.376282;-20.182905;76.867386;, + 70.002251;-18.073837;68.726471;, + 77.197746;-9.981779;85.393761;, + 80.318741;-7.420647;85.493256;, + 82.789978;-6.610463;83.296829;, + 79.655968;-17.333593;83.765129;, + 79.183868;-11.467402;85.242088;, + 86.196594;-18.624458;77.084518;, + 82.521919;-17.837069;80.497223;, + 86.199554;-6.060757;79.316513;, + 86.261154;-12.489821;78.381943;, + 71.219742;-15.793794;69.989906;, + 66.651627;-8.248512;76.491966;, + 73.890327;2.056242;73.440269;, + 77.791145;1.105025;78.607323;, + 75.326248;1.267426;80.857727;, + 71.689697;-0.853509;83.395920;, + 73.386116;1.385114;82.625687;, + 83.216957;-4.725611;71.840660;, + 84.570229;-9.819118;68.947449;, + 83.728851;-14.435865;68.167923;, + 81.882507;-19.600512;68.102516;, + 77.441238;-19.029276;72.249611;, + 75.713539;-17.538631;74.283043;, + 71.547607;-4.747393;82.232681;, + 71.182411;-7.791823;81.549644;, + 71.304077;-12.113186;80.009758;, + 79.083267;-19.016726;70.790459;, + 80.102303;-1.256049;75.765610;, + 82.761185;-1.128553;73.438354;, + 72.702766;-16.469456;77.320290;, + 98.099678;-15.343760;83.785767;, + 93.154732;-6.980587;90.899246;, + 93.242905;-25.622953;81.159538;, + 114.749481;-29.371605;104.351402;, + 116.328888;-21.406776;103.886078;, + 84.665817;-9.600757;93.965752;, + 92.986916;-29.187506;89.371254;, + 110.432236;-25.897305;108.404945;, + 110.916962;-20.728716;110.111130;, + 87.785217;-19.995790;96.978920;, + 90.982941;-23.993515;93.046989;, + 85.656944;-14.398671;96.109711;, + 93.408386;-29.026354;84.485863;, + 90.449799;-8.323028;93.510162;, + 97.216904;-8.657048;85.987465;, + 97.339188;-20.929985;83.303215;, + 106.770485;-25.673952;93.617485;, + 105.883774;-28.288433;93.625610;, + 107.882225;-22.395979;93.607300;, + 108.385857;-19.427256;94.058815;, + 107.024353;-17.016718;96.046471;, + 102.020210;-15.026966;101.239967;, + 103.800346;-13.394409;100.111961;, + 101.485901;-28.208586;97.676857;, + 103.374771;-29.259912;95.624199;, + 104.934151;-29.521204;94.116104;, + 105.666786;-14.613162;98.028366;, + 100.699852;-25.001989;99.382347;, + 98.765816;-23.374475;101.653488;, + 99.300377;-20.235739;102.128960;, + 99.750626;-17.848330;102.450653;, + 100.601974;-16.327637;102.138657;, + 94.361519;-7.107321;83.677322;, + 90.721161;-5.196348;81.449821;, + 88.812431;-6.982263;88.106316;, + 93.009644;-14.297369;82.089050;, + 45.919392;12.804501;48.821217;, + 67.424805;2.305351;54.072571;, + 51.500221;-7.577340;65.697365;, + 43.626652;11.654449;36.415169;, + 114.547729;-31.794006;101.703148;, + 116.597923;-18.573429;102.008530;, + 106.487419;-27.751755;108.534760;, + 108.661095;-18.210699;110.956673;, + 120.240417;-32.382523;107.405258;, + 120.625252;-22.188108;107.598892;, + 113.002747;-28.165403;111.418968;, + 115.310875;-21.371449;114.672195;, + 128.789810;-29.466074;108.954926;, + 133.926620;-25.436079;121.826721;, + 135.061844;-38.374813;119.353981;, + 132.477707;-23.264696;124.912544;, + 119.123390;-33.322960;112.785774;, + 128.149567;-26.597660;127.790276;, + 118.771370;-29.660498;118.893425;, + 137.268311;-36.747177;118.004539;, + 120.575157;-22.560459;120.307121;, + 119.121994;-28.036406;123.119385;, + 114.274811;-23.003649;117.528297;, + 117.293953;-23.343679;126.162247;, + 115.772141;-28.293201;126.710030;, + 114.847473;-23.354944;126.325142;, + 133.524338;-30.337019;122.600365;, + 131.403183;-26.611431;125.127594;, + 134.824646;-26.838270;122.262741;, + 135.487198;-33.834320;120.160095;, + 130.670029;-24.829245;124.070786;, + 135.851913;-31.051704;118.766632;, + 137.676193;-32.291035;118.807190;, + 136.074463;-28.661200;120.936546;, + 132.979828;-35.570160;121.777008;, + 130.007385;-30.424955;125.430290;, + 128.967941;-28.056011;126.763344;, + 134.236618;-36.868240;120.362709;, + 127.290657;-35.227036;113.798904;, + 123.047722;-33.416660;109.614326;, + 120.623116;-30.226761;117.721672;, + 116.504295;-28.635885;114.683411;, + 129.463760;-23.354002;127.461098;, + 123.396797;-27.431246;121.069450;, + 124.584869;-28.187895;119.902473;, + 121.760422;-25.243605;123.489906;, + 120.613640;-25.185886;123.257240;, + 117.859741;-27.379353;126.710335;, + 116.538414;-28.334110;120.958870;, + 114.465019;-26.505037;126.579056;, + 120.118660;-28.808155;129.262100;, + 115.234482;-28.095364;129.084930;, + 115.773735;-23.653730;128.726898;, + 119.515671;-24.100697;128.185318;, + 117.369904;-31.079527;128.957718;, + 120.607414;-29.430899;132.556305;, + 117.583008;-29.569143;132.374924;, + 118.315994;-26.222034;131.904175;, + 120.763031;-25.726934;131.562943;, + 118.686279;-31.174704;132.509644;, + 120.230301;-29.213165;134.837173;, + 118.653221;-29.758589;134.962555;, + 119.351463;-27.770924;134.521164;, + 120.681877;-27.087921;134.183151;, + 119.078453;-30.474968;135.038971;, + 134.292740;-27.557007;120.420303;, + 133.862167;-25.069214;123.489700;, + 136.922577;-30.224680;119.848274;, + 138.524689;-33.810150;117.661865;, + 131.526566;-21.883783;126.059494;, + 130.900803;-32.067825;124.310493;, + 132.172577;-33.992134;122.873032;, + 132.345215;-26.909451;126.571350;, + 133.379410;-24.327793;126.319145;, + 132.650177;-22.985157;127.267006;, + 130.886734;-24.224178;128.467072;, + 129.605988;-27.135897;128.838928;, + 130.335205;-28.478533;127.891075;, + 133.363693;-27.150629;127.933983;, + 134.300049;-24.941853;127.674355;, + 133.717270;-23.873322;128.430740;, + 132.198166;-25.013567;129.446793;, + 131.015244;-27.552404;129.826096;, + 131.598038;-28.620930;129.069702;, + 134.645630;-27.372400;128.641541;, + 135.366272;-25.452135;128.495346;, + 134.776291;-24.375912;129.259750;, + 133.465668;-25.219961;130.170334;, + 132.745026;-27.140228;130.316544;, + 133.335007;-28.216450;129.552139;, + 135.557129;-28.123676;129.259583;, + 136.419373;-25.779036;129.096115;, + 135.688400;-24.438776;130.044846;, + 134.095200;-25.443157;131.157074;, + 133.232941;-27.787798;131.320541;, + 133.963898;-29.128056;130.371811;, + 136.416260;-29.042286;130.719208;, + 137.311722;-26.758564;130.512604;, + 136.647217;-25.540148;131.375107;, + 135.087219;-26.605450;132.444199;, + 134.191742;-28.889170;132.650787;, + 134.856277;-30.107586;131.788284;, + 137.309525;-29.130545;131.811081;, + 137.970703;-27.438389;131.659988;, + 137.471268;-26.529640;132.306519;, + 136.310669;-27.313053;133.104141;, + 135.649460;-29.005211;133.255219;, + 136.148911;-29.913960;132.608688;, + 138.067566;-29.848610;132.534195;, + 138.751144;-28.014139;132.398666;, + 138.182465;-26.977980;133.135162;, + 136.930222;-27.776287;134.007202;, + 136.246643;-29.610752;134.142715;, + 136.815308;-30.646914;133.406219;, + 138.629425;-30.705997;132.982819;, + 139.286957;-28.643524;132.924973;, + 138.553925;-27.306091;133.874786;, + 137.163391;-28.031139;134.882431;, + 136.505844;-30.093613;134.940262;, + 137.238861;-31.431042;133.990463;, + 139.375854;-31.531094;134.386230;, + 139.871201;-29.845297;134.374817;, + 139.231964;-28.684835;135.201675;, + 138.097382;-29.210182;136.039948;, + 137.602036;-30.895979;136.051376;, + 138.241287;-32.056435;135.224518;, + 140.178970;-31.048899;135.399673;, + 140.418076;-30.152719;135.414230;, + 140.041107;-29.477694;135.899567;, + 139.425034;-29.698851;136.370346;, + 139.185928;-30.595028;136.355789;, + 139.562897;-31.270054;135.870453;, + 140.513062;-30.455763;135.941559;, + 140.258026;-30.001667;136.269287;, + 134.998978;-30.947582;124.347214;, + 136.184570;-27.988020;124.058090;, + 135.348587;-26.448853;125.144691;, + 133.326996;-27.869246;126.520409;, + 131.894867;-31.158863;126.929192;, + 132.730850;-32.698029;125.842598;, + 136.426865;-31.351122;126.151329;, + 137.500275;-28.819027;125.853668;, + 136.832184;-27.594086;126.720772;, + 135.090698;-28.901239;127.885551;, + 134.017303;-31.433332;128.183212;, + 134.685394;-32.658272;127.316093;, + 138.107239;-31.708241;127.158394;, + 138.933365;-29.506886;126.990791;, + 138.257019;-28.273127;127.867088;, + 136.754562;-29.240726;128.910980;, + 135.928421;-31.442081;129.078583;, + 136.604767;-32.675838;128.202286;, + 139.331543;-32.657040;128.033676;, + 140.320007;-29.969194;127.846275;, + 139.482040;-28.432751;128.933884;, + 137.655624;-29.584154;130.208908;, + 136.667160;-32.271999;130.396317;, + 137.505127;-33.808445;129.308701;, + 140.591125;-33.844181;129.962296;, + 141.617676;-31.226170;129.725464;, + 140.855896;-29.829403;130.714218;, + 139.067566;-31.050646;131.939789;, + 138.041000;-33.668652;132.176636;, + 138.802795;-35.065418;131.187897;, + 141.828308;-34.049400;131.412170;, + 142.586258;-32.109543;131.238968;, + 142.013733;-31.067778;131.980133;, + 140.683243;-31.965866;132.894485;, + 139.925278;-33.905720;133.067688;, + 140.497818;-34.947487;132.326523;, + 142.872879;-34.958260;132.404327;, + 143.656509;-32.855263;132.248962;, + 143.004608;-31.667431;133.093292;, + 141.569046;-32.582588;134.092957;, + 140.785416;-34.685585;134.248322;, + 141.437332;-35.873421;133.404007;, + 143.646179;-36.004208;133.038742;, + 144.399963;-33.639832;132.972427;, + 143.559647;-32.106628;134.061264;, + 141.965546;-32.937801;135.216400;, + 141.211761;-35.302185;135.282715;, + 142.052078;-36.835381;134.193878;, + 144.756668;-37.074436;134.884445;, + 145.324524;-35.141872;134.871353;, + 144.591705;-33.811550;135.819244;, + 143.291046;-34.413788;136.780243;, + 142.723190;-36.346355;136.793335;, + 143.456009;-37.676674;135.845428;, + 145.857040;-36.609371;136.213287;, + 146.131134;-35.582005;136.229980;, + 145.699005;-34.808174;136.786362;, + 144.992767;-35.061703;137.326050;, + 144.718674;-36.089062;137.309357;, + 145.150803;-36.862896;136.752975;, + 146.317627;-35.967274;136.906616;, + 146.025253;-35.446705;137.282303;, + 136.889267;-34.388729;121.786079;, + 138.043243;-31.519651;121.509171;, + 137.240128;-30.030424;122.570480;, + 135.283035;-31.410269;123.908699;, + 133.882507;-34.609402;124.305260;, + 134.685638;-36.098633;123.243958;, + 138.202103;-34.760567;123.442123;, + 139.246475;-32.305771;123.156197;, + 138.604645;-31.120579;124.003120;, + 136.918472;-32.390182;125.135963;, + 135.874115;-34.844978;125.421883;, + 136.515945;-36.030170;124.574966;, + 139.771439;-35.090023;124.340836;, + 140.575928;-32.956081;124.181114;, + 139.926163;-31.762369;125.036995;, + 138.471878;-32.702595;126.052612;, + 137.667374;-34.836536;126.212334;, + 138.317154;-36.030251;125.356453;, + 140.906357;-35.995464;125.122398;, + 141.869110;-33.389969;124.944168;, + 141.064072;-31.903385;126.006470;, + 139.296295;-33.022293;127.247002;, + 138.333542;-35.627785;127.425224;, + 139.138565;-37.114368;126.362930;, + 142.050705;-37.125763;126.892921;, + 143.050034;-34.587837;126.666389;, + 142.318192;-33.236397;127.632103;, + 140.587006;-34.422878;128.824356;, + 139.587677;-36.960800;129.050888;, + 140.319519;-38.312241;128.085159;, + 143.191742;-37.308819;128.222427;, + 143.929611;-35.428307;128.056824;, + 143.379562;-34.420353;128.780731;, + 142.091629;-35.292908;129.670227;, + 141.353745;-37.173420;129.835846;, + 141.903809;-38.181374;129.111954;, + 144.154083;-38.176163;129.119446;, + 144.917267;-36.137577;128.971481;, + 144.290955;-34.988300;129.796127;, + 142.901459;-35.877598;130.768753;, + 142.138290;-37.916183;130.916702;, + 142.764603;-39.065464;130.092056;, + 144.865631;-39.179722;129.685654;, + 145.600723;-36.888016;129.624908;, + 144.793411;-35.404579;130.688385;, + 143.251007;-36.212845;131.812622;, + 142.515900;-38.504547;131.873383;, + 143.323227;-39.987988;130.809906;, + 145.871307;-40.198315;131.383316;, + 146.425507;-38.325241;131.373688;, + 145.721451;-37.038101;132.299500;, + 144.463196;-37.624027;133.234940;, + 143.908981;-39.497101;133.244537;, + 144.613022;-40.784241;132.318726;, + 146.890518;-39.734459;132.609009;, + 147.158310;-38.738781;132.626938;, + 146.743103;-37.990078;133.170349;, + 146.060104;-38.237057;133.695831;, + 145.792313;-39.232731;133.677887;, + 146.207520;-39.981438;133.134476;, + 147.317841;-39.106766;133.255463;, + 147.036926;-38.603104;133.622391;, + 138.085999;-37.138863;119.175186;, + 139.090546;-34.734760;118.968651;, + 138.476166;-33.511417;119.918930;, + 136.857193;-34.692177;121.075745;, + 135.606110;-37.426338;121.401924;, + 136.220490;-38.649681;120.451653;, + 139.088989;-37.460236;120.374466;, + 139.994675;-35.402271;120.154755;, + 139.503555;-34.428730;120.913040;, + 138.106750;-35.513153;121.891022;, + 136.954514;-37.901169;122.230385;, + 137.445618;-38.874702;121.472107;, + 140.310577;-37.735165;120.957130;, + 141.014175;-35.948002;120.844086;, + 140.516815;-34.967522;121.610336;, + 139.315872;-35.774200;122.489632;, + 138.612274;-37.561363;122.602676;, + 139.109634;-38.541847;121.836426;, + 141.172485;-38.492016;121.459724;, + 142.015732;-36.310272;121.336426;, + 141.399719;-35.089157;122.287537;, + 139.940460;-36.049793;123.361938;, + 139.097214;-38.231537;123.485237;, + 139.713226;-39.452652;122.534126;, + 142.017715;-39.448486;122.736076;, + 142.888947;-37.322247;122.569550;, + 142.328949;-36.212143;123.434189;, + 140.897690;-37.228283;124.465363;, + 140.026443;-39.354527;124.631889;, + 140.586456;-40.464630;123.767242;, + 142.895447;-39.609592;123.696373;, + 143.538910;-38.034172;123.574936;, + 143.117813;-37.206295;124.223007;, + 142.053253;-37.953835;124.992500;, + 141.409805;-39.529259;125.113930;, + 141.830887;-40.357136;124.465874;, + 143.619232;-40.337288;124.304420;, + 144.287018;-38.630085;124.200493;, + 143.807587;-37.686111;124.938774;, + 142.660355;-38.449345;125.780983;, + 141.992584;-40.156551;125.884911;, + 142.472015;-41.100525;125.146629;, + 144.145706;-41.176258;124.664856;, + 144.796890;-39.259224;124.640663;, + 144.178955;-38.040764;125.592773;, + 142.909821;-38.739342;126.569069;, + 142.258636;-40.656376;126.593254;, + 142.876572;-41.874832;125.641159;, + 144.885223;-42.039631;125.897728;, + 145.379715;-40.473606;125.913101;, + 144.840652;-39.416443;126.741905;, + 143.807114;-39.925308;127.555336;, + 143.312622;-41.491337;127.539970;, + 143.851685;-42.548496;126.711159;, + 145.686615;-41.660812;126.807167;, + 145.927765;-40.828819;126.835564;, + 145.609604;-40.213989;127.321953;, + 145.050308;-40.431152;127.779945;, + 144.809174;-41.263145;127.751549;, + 145.127319;-41.877975;127.265160;, + 146.032715;-41.142326;127.308174;, + 145.817383;-40.728752;127.636574;, + 124.973160;-23.354237;117.701744;, + 130.100662;-32.931473;123.451958;, + 128.472305;-28.867155;125.483269;, + 131.961060;-36.499588;120.635719;, + 130.957870;-35.780834;116.981300;, + 124.282539;-24.769093;125.526192;, + 125.508987;-30.949331;117.392708;, + 127.017143;-25.364244;114.287338;, + 117.540039;-22.350718;100.953659;, + 112.563721;-15.887562;106.469879;, + 110.663788;-31.643456;105.394226;, + 106.306908;-24.835386;110.495728;, + 110.832993;-28.654867;112.050888;, + 110.854927;-23.530939;113.587791;, + 121.598297;-21.157846;106.522896;, + 120.238564;-20.029554;107.979340;, + 114.466507;-18.879122;111.705498;, + 111.886719;-19.639212;113.723465;, + 117.792206;-32.974083;105.142754;, + 119.345352;-28.410704;105.006744;, + 115.554443;-33.065868;107.042320;, + 112.233528;-30.176003;110.656517;, + 33.827938;10.960120;51.807289;, + 39.182789;8.123861;57.134254;, + 39.964428;-10.933758;50.220123;, + 41.310238;-5.151076;57.811226;, + 60.861866;5.824606;48.839558;, + 71.769287;-1.344572;58.966167;, + 52.727615;10.033523;60.222115;, + 48.911415;-16.086357;49.050552;, + 50.863899;-3.190058;44.773193;, + -60.511364;10.489422;61.040886;, + -59.417953;7.137104;70.365372;, + -36.367424;14.780292;44.255165;, + -50.152618;11.466668;40.450016;, + -77.592583;-0.616339;69.076759;, + -60.913422;-12.097776;52.234310;, + -54.208237;-21.261230;55.889942;, + -42.688854;-10.391947;41.524540;, + -69.818512;2.367348;76.967026;, + -67.202217;-1.205813;78.118034;, + -67.857689;-14.292745;73.173157;, + -78.272881;-9.570575;65.570358;, + -75.506836;-15.631029;66.051804;, + -78.107506;-4.036117;86.370941;, + -86.948593;-19.603292;74.055412;, + -77.894592;2.534080;68.323830;, + -66.232124;-15.575725;72.678177;, + -87.461426;-4.948386;78.487473;, + -77.620056;-19.174511;83.090729;, + -83.181274;-3.849838;82.306007;, + -89.283066;-9.871171;75.022331;, + -68.897133;6.252676;77.456337;, + -64.785828;0.815142;79.337639;, + -80.076714;-7.343022;63.092098;, + -75.587021;-18.309942;63.527412;, + -63.960876;-7.608606;77.332436;, + -73.234436;6.648881;73.774124;, + -83.188721;-20.182894;76.867378;, + -69.814682;-18.073826;68.726471;, + -77.010178;-9.981771;85.393753;, + -80.131180;-7.420639;85.493248;, + -82.859459;-6.312282;83.425949;, + -79.468399;-17.333584;83.765121;, + -78.996300;-11.467393;85.242081;, + -86.009033;-18.624449;77.084511;, + -82.334358;-17.837059;80.497215;, + -86.011993;-6.060749;79.316505;, + -86.073555;-12.696040;78.345314;, + -71.032173;-15.793784;69.989906;, + -66.464066;-8.248504;76.491966;, + -73.702766;2.056248;73.440269;, + -77.603577;1.105032;78.607323;, + -75.138687;1.267434;80.857719;, + -71.502121;-0.853501;83.395912;, + -73.198547;1.385122;82.625679;, + -83.029396;-4.725603;71.840660;, + -84.382668;-9.819108;68.947449;, + -83.541290;-14.435856;68.167923;, + -81.694946;-19.600500;68.102516;, + -77.253677;-19.029264;72.249611;, + -75.525970;-17.538622;74.283043;, + -71.360039;-4.747385;82.232674;, + -70.994850;-7.791813;81.549637;, + -71.116508;-12.113177;80.009750;, + -78.895706;-19.016714;70.790459;, + -79.914742;-1.256042;75.765610;, + -82.573624;-1.128545;73.438354;, + -72.515198;-16.469446;77.320282;, + -97.912117;-15.343751;83.785759;, + -92.967171;-6.980580;90.899239;, + -93.055344;-25.622944;81.159531;, + -114.561913;-29.371595;104.351395;, + -116.141319;-21.406767;103.886070;, + -84.478256;-9.600749;93.965744;, + -92.799355;-29.187496;89.371246;, + -110.244675;-25.897297;108.404938;, + -110.729401;-20.728708;110.111122;, + -87.597656;-19.995781;96.978912;, + -90.795380;-23.993507;93.046982;, + -85.469383;-14.398664;96.109703;, + -93.220825;-29.026344;84.485855;, + -90.262238;-8.323020;93.510155;, + -97.029335;-8.657041;85.987457;, + -97.151627;-20.929976;83.303207;, + -106.582924;-25.673943;93.617477;, + -105.696213;-28.288424;93.625603;, + -107.694664;-22.395969;93.607292;, + -108.198296;-19.427246;94.058807;, + -106.836792;-17.016710;96.046463;, + -101.832649;-15.026958;101.239960;, + -103.612785;-13.394403;100.111954;, + -101.298340;-28.208574;97.676849;, + -103.187210;-29.259903;95.624191;, + -104.746590;-29.521194;94.116096;, + -105.479225;-14.613154;98.028358;, + -100.512291;-25.001982;99.382339;, + -98.578255;-23.374466;101.653481;, + -99.112808;-20.235731;102.128952;, + -99.563057;-17.848322;102.450645;, + -100.414413;-16.327629;102.138649;, + -94.173958;-7.107313;83.677315;, + -90.533600;-5.196339;81.449814;, + -88.624870;-6.982255;88.106308;, + -92.822083;-14.297360;82.089043;, + -45.731812;12.804509;48.821217;, + -67.237244;2.305361;54.072567;, + -51.312645;-7.577330;65.697365;, + -43.439075;11.654459;36.415169;, + -114.360168;-31.793995;101.703140;, + -116.410362;-18.573421;102.008522;, + -106.299858;-27.751747;108.534752;, + -108.473534;-18.210691;110.956665;, + -118.763100;-32.416569;106.890343;, + -119.195221;-22.221508;107.119102;, + -112.815208;-28.165394;111.418961;, + -115.208687;-21.985653;115.587814;, + -128.864243;-29.984035;109.850922;, + -133.928619;-25.617853;122.127678;, + -134.985291;-38.562931;119.605125;, + -132.439087;-23.407928;125.120613;, + -118.979370;-33.894085;113.600273;, + -127.981033;-26.736771;127.892494;, + -118.573692;-30.116972;119.482887;, + -137.255630;-36.934776;118.303642;, + -120.451622;-22.976614;120.888481;, + -118.885986;-28.402800;123.534958;, + -114.103012;-23.569595;118.313278;, + -117.037895;-23.683615;126.520027;, + -115.439522;-28.633007;127.009117;, + -114.556931;-23.727386;126.708763;, + -133.461777;-30.497587;122.817970;, + -131.314377;-26.758501;125.303482;, + -134.818481;-26.994595;122.516602;, + -135.449875;-34.009403;120.420280;, + -130.603973;-25.013189;124.323257;, + -135.866348;-31.256813;119.114555;, + -137.701736;-32.465740;119.114777;, + -136.085159;-28.822893;121.211914;, + -132.869873;-35.744339;121.980255;, + -129.858322;-30.577702;125.569275;, + -128.810074;-28.201370;126.883720;, + -134.150055;-37.050697;120.597130;, + -127.220825;-35.652714;114.436562;, + -122.998520;-33.996376;110.515045;, + -120.460487;-30.679323;118.331627;, + -116.345764;-29.216154;115.501526;, + -129.349152;-23.487917;127.596153;, + -123.251488;-27.779137;121.524582;, + -124.463943;-28.541100;120.384758;, + -121.581490;-25.569689;123.884338;, + -120.423470;-25.533827;123.678185;, + -117.563560;-27.690514;126.991264;, + -116.295723;-28.783062;121.501877;, + -114.134766;-26.870768;126.921577;, + -119.802361;-29.029490;129.383438;, + -114.863617;-28.393749;129.288300;, + -115.458870;-23.961578;128.988220;, + -119.253044;-24.363922;128.414917;, + -116.999329;-31.342564;129.104553;, + -120.245399;-29.574646;132.518158;, + -117.182472;-29.760815;132.384308;, + -117.964737;-26.420248;131.961685;, + -120.453552;-25.897451;131.607895;, + -118.282471;-31.343769;132.480225;, + -119.833649;-29.315147;134.705521;, + -118.228737;-29.879900;134.840668;, + -118.961952;-27.895647;134.431473;, + -120.321297;-27.201702;134.097992;, + -118.651398;-30.586836;134.899963;, + -134.298187;-27.758150;120.755005;, + -133.843735;-25.217905;123.721947;, + -136.944122;-30.393238;120.142960;, + -138.562317;-33.993008;117.991791;, + -131.473114;-22.020031;126.245018;, + -130.762848;-32.227257;124.468689;, + -132.052338;-34.158718;123.056244;, + -132.245651;-27.011766;126.667183;, + -133.322495;-24.425945;126.440849;, + -132.583725;-23.077150;127.371544;, + -130.768127;-24.314178;128.528564;, + -129.436584;-27.230442;128.868927;, + -130.175354;-28.579237;127.938255;, + -133.256104;-27.208897;127.952965;, + -134.230194;-24.996719;127.716698;, + -133.639786;-23.923281;128.459366;, + -132.075287;-25.062017;129.438324;, + -130.846466;-27.604633;129.788620;, + -131.436874;-28.678068;129.045944;, + -134.542770;-27.396519;128.609299;, + -135.293900;-25.473001;128.481171;, + -134.696152;-24.391825;129.231689;, + -133.347275;-25.234171;130.110321;, + -132.596161;-27.157688;130.238464;, + -133.193909;-28.238865;129.487946;, + -135.450180;-28.119780;129.179245;, + -136.349197;-25.771114;129.037415;, + -135.608658;-24.424700;129.968933;, + -133.969086;-25.426950;131.042328;, + -133.070053;-27.775614;131.184158;, + -133.810593;-29.122028;130.252640;, + -136.291122;-28.993143;130.552338;, + -137.223816;-26.705677;130.368149;, + -136.550583;-25.481665;131.214996;, + -134.944672;-26.545113;132.246048;, + -134.011978;-28.832579;132.430222;, + -134.685211;-30.056591;131.583374;, + -137.179993;-29.045206;131.582748;, + -137.868683;-27.350267;131.448212;, + -137.362671;-26.437330;132.082977;, + -136.167953;-27.219339;132.852280;, + -135.479263;-28.914282;132.986816;, + -135.985291;-29.827215;132.352036;, + -137.930786;-29.735388;132.255539;, + -138.643372;-27.897797;132.137161;, + -138.067200;-26.856865;132.860275;, + -136.778458;-27.653521;133.701782;, + -136.065872;-29.491106;133.820175;, + -136.642044;-30.532040;133.097046;, + -138.485275;-30.573214;132.667130;, + -139.172653;-28.506882;132.625885;, + -138.429977;-27.163292;133.558441;, + -136.999939;-27.886042;134.532242;, + -136.312576;-29.952375;134.573486;, + -137.055237;-31.295958;133.640945;, + -139.213760;-31.356102;133.989075;, + -139.732437;-29.667019;133.990204;, + -139.084747;-28.501205;134.802032;, + -137.918381;-29.024487;135.612717;, + -137.399704;-30.713572;135.611588;, + -138.047409;-31.879387;134.799774;, + -140.018036;-30.841948;134.952103;, + -140.268936;-29.943945;134.972733;, + -139.886917;-29.265791;135.449203;, + -139.254013;-29.485641;135.905014;, + -139.003113;-30.383642;135.884384;, + -139.385117;-31.061798;135.407928;, + -140.354813;-30.233871;135.472046;, + -140.096344;-29.777664;135.793762;, + -134.925339;-31.048527;124.460655;, + -136.159790;-28.084190;124.201187;, + -135.312897;-26.537964;125.268112;, + -133.231537;-27.956072;126.594505;, + -131.742386;-31.250843;126.968010;, + -132.589279;-32.797073;125.901085;, + -136.342789;-31.392393;126.160988;, + -137.459473;-28.856398;125.890129;, + -136.782639;-27.625828;126.741508;, + -134.989136;-28.931255;127.863777;, + -133.872452;-31.467245;128.134628;, + -134.549286;-32.697823;127.283241;, + -138.027634;-31.702929;127.096672;, + -138.888702;-29.497849;126.949776;, + -138.203445;-28.258413;127.810158;, + -136.657150;-29.224060;128.817413;, + -135.796066;-31.429138;128.964310;, + -136.481308;-32.668583;128.103928;, + -139.246399;-32.613304;127.906013;, + -140.277039;-29.920834;127.743416;, + -139.428085;-28.377333;128.811295;, + -137.548523;-29.526291;130.041809;, + -136.517883;-32.218758;130.204422;, + -137.366837;-33.762257;129.136520;, + -140.483856;-33.738888;129.718903;, + -141.553055;-31.116575;129.507767;, + -140.781296;-29.713392;130.478592;, + -138.940323;-30.932508;131.660553;, + -137.871094;-33.554817;131.871689;, + -138.642868;-34.957996;130.900879;, + -141.714996;-33.895096;131.085495;, + -142.504501;-31.952051;130.931244;, + -141.924408;-30.905476;131.658936;, + -140.554810;-31.801954;132.540863;, + -139.765320;-33.745007;132.695084;, + -140.345413;-34.791569;131.967392;, + -142.750443;-34.765797;132.009415;, + -143.567322;-32.659225;131.873703;, + -142.906815;-31.465914;132.702682;, + -141.429428;-32.379189;133.667358;, + -140.612549;-34.485764;133.803070;, + -141.273041;-35.679066;132.974091;, + -143.514694;-35.784763;132.593597;, + -144.302673;-33.415970;132.546310;, + -143.451279;-31.875710;133.615356;, + -141.811935;-32.704250;134.731705;, + -141.023956;-35.073055;134.778992;, + -141.875320;-36.613304;133.709930;, + -144.603409;-36.797626;134.330566;, + -145.197998;-34.861298;134.331848;, + -144.455490;-33.524841;135.262497;, + -143.118393;-34.124710;136.191864;, + -142.523804;-36.061047;136.190567;, + -143.266312;-37.397495;135.259933;, + -145.704269;-36.289589;135.590790;, + -145.991882;-35.260136;135.614456;, + -145.553955;-34.482719;136.160660;, + -144.828415;-34.734749;136.683197;, + -144.540802;-35.764202;136.659546;, + -144.978714;-36.541618;136.113327;, + -146.167557;-35.627628;136.254303;, + -145.871262;-35.104645;136.623108;, + -136.842163;-34.507912;121.949051;, + -138.043503;-31.634064;121.700676;, + -137.229767;-30.137711;122.742432;, + -135.214676;-31.515200;124.032562;, + -133.758621;-34.719486;124.394966;, + -134.572357;-36.215839;123.353210;, + -138.145432;-34.824940;123.509781;, + -139.231766;-32.366253;123.249680;, + -138.581421;-31.175377;124.080971;, + -136.844757;-32.443195;125.172371;, + -135.758438;-34.901882;125.432487;, + -136.408783;-36.092754;124.601196;, + -139.719559;-35.111778;124.343742;, + -140.557938;-32.974113;124.203918;, + -139.899506;-31.774664;125.043983;, + -138.402664;-32.712887;126.023872;, + -137.564270;-34.850555;126.163696;, + -138.222717;-36.049999;125.323631;, + -140.849487;-35.982155;125.065216;, + -141.853134;-33.372047;124.910805;, + -141.037415;-31.878336;125.953506;, + -139.218048;-32.994740;127.150612;, + -138.214417;-35.604839;127.305016;, + -139.030136;-37.098549;126.262321;, + -141.972977;-37.056030;126.729210;, + -143.013672;-34.513821;126.527390;, + -142.272110;-33.155907;127.475288;, + -140.489838;-34.340195;128.625000;, + -139.449127;-36.882404;128.826813;, + -140.190689;-38.240322;127.878899;, + -143.108612;-37.194061;127.982307;, + -143.877075;-35.310364;127.834953;, + -143.319672;-34.297565;128.545441;, + -141.993790;-35.168465;129.403305;, + -141.225327;-37.052162;129.550674;, + -141.782730;-38.064957;128.840179;, + -144.062485;-38.026543;128.816864;, + -144.857895;-35.984383;128.687775;, + -144.223221;-34.829582;129.497177;, + -142.793137;-35.716938;130.435669;, + -141.997726;-37.759098;130.564743;, + -142.632401;-38.913898;129.755356;, + -144.765549;-39.005554;129.337189;, + -145.533783;-36.709423;129.294647;, + -144.715698;-35.218861;130.338470;, + -143.129379;-36.024429;131.424835;, + -142.361115;-38.320564;131.467377;, + -143.179214;-39.811123;130.423553;, + -145.750641;-39.971535;130.934662;, + -146.330765;-38.094688;130.938782;, + -145.617279;-36.801361;131.847458;, + -144.323669;-37.384869;132.751999;, + -143.743530;-39.261711;132.747849;, + -144.457001;-40.555042;131.839188;, + -146.770706;-39.468060;132.097397;, + -147.051620;-38.470287;132.121964;, + -146.630768;-37.717964;132.655273;, + -145.929031;-37.963417;133.163986;, + -145.648132;-38.961185;133.139404;, + -146.068970;-39.713509;132.606094;, + -147.200821;-38.821938;132.716400;, + -146.916077;-38.315838;133.076492;, + -138.063828;-37.289051;119.406982;, + -139.108231;-34.879868;119.222725;, + -138.484604;-33.648365;120.152847;, + -136.816589;-34.826042;121.267235;, + -135.517487;-37.565662;121.565521;, + -136.141098;-38.797169;120.635399;, + -139.060074;-37.569843;120.535957;, + -140.001053;-35.507759;120.336586;, + -139.502533;-34.527710;121.078781;, + -138.063034;-35.609749;122.020325;, + -136.867325;-38.002270;122.333717;, + -137.365829;-38.982311;121.591530;, + -140.286835;-37.814011;121.073189;, + -141.018921;-36.022858;120.975487;, + -140.514023;-35.035809;121.725449;, + -139.277069;-35.839912;122.573105;, + -138.544998;-37.631069;122.670799;, + -139.049896;-38.618114;121.920837;, + -141.145554;-38.545986;121.533401;, + -142.023148;-36.359291;121.428398;, + -141.397858;-35.130013;122.359329;, + -139.894958;-36.087437;123.395241;, + -139.017365;-38.274132;123.500229;, + -139.642654;-39.503407;122.569305;, + -141.974594;-39.461166;122.731110;, + -142.880615;-37.330349;122.583794;, + -142.312164;-36.212826;123.430077;, + -140.837692;-37.226124;124.423691;, + -139.931671;-39.356945;124.570999;, + -140.500122;-40.474468;123.724709;, + -142.848846;-39.588902;123.635170;, + -143.518021;-38.010078;123.527908;, + -143.090546;-37.176647;124.162201;, + -141.993881;-37.922039;124.903725;, + -141.324722;-39.500870;125.010979;, + -141.752197;-40.334293;124.376701;, + -143.566452;-40.291603;124.198372;, + -144.261322;-38.580566;124.108978;, + -143.774628;-37.630268;124.831566;, + -142.593063;-38.391006;125.643524;, + -141.898178;-40.102051;125.732918;, + -142.384872;-41.052349;125.010338;, + -144.086502;-41.113419;124.526360;, + -144.765533;-39.191589;124.515739;, + -144.138245;-37.964970;125.447609;, + -142.831924;-38.660183;126.390099;, + -142.152893;-40.582008;126.400719;, + -142.780182;-41.808628;125.468857;, + -144.809982;-41.938175;125.684982;, + -145.326218;-40.368050;125.710388;, + -144.778976;-39.303791;126.521545;, + -143.715500;-39.809662;127.307304;, + -143.199249;-41.379795;127.281898;, + -143.746490;-42.444050;126.470741;, + -145.612946;-41.529369;126.547478;, + -145.865082;-40.695091;126.580605;, + -145.542038;-40.076111;127.056602;, + -144.966858;-40.291412;127.499474;, + -144.714737;-41.125694;127.466347;, + -145.037766;-41.744671;126.990349;, + -145.961716;-40.996456;127.027367;, + -145.743073;-40.580086;127.348747;, + -124.935844;-23.758604;118.330032;, + -129.955658;-33.118725;123.649422;, + -128.317764;-29.044809;125.658051;, + -131.844467;-36.710579;120.893005;, + -130.886246;-36.084728;117.422089;, + -124.112961;-25.016518;125.801498;, + -125.407913;-31.335402;117.942909;, + -127.034424;-25.805647;115.016808;, + -117.352478;-22.350708;100.953651;, + -112.376160;-15.887554;106.469872;, + -110.476227;-31.643446;105.394218;, + -106.119347;-24.835379;110.495720;, + -110.645432;-28.654860;112.050880;, + -110.667366;-23.530931;113.587784;, + -120.163315;-21.191313;106.039421;, + -118.809158;-20.062948;107.500015;, + -114.278946;-18.879114;111.705490;, + -111.699158;-19.639204;113.723457;, + -117.604637;-32.974075;105.142746;, + -119.157791;-28.410696;105.006737;, + -115.366882;-33.065861;107.042313;, + -112.045959;-30.175995;110.656509;, + -33.640362;10.960128;51.807285;, + -38.995209;8.123871;57.134251;, + -39.776852;-10.933746;50.220119;, + -41.122662;-5.151066;57.811222;, + -60.674290;5.824616;48.839558;, + -71.581718;-1.344563;58.966167;, + -52.540039;10.033530;60.222115;, + -48.723839;-16.086346;49.050549;, + -50.676323;-3.190047;44.773193;, + -6.262792;13.473364;58.013275;, + 6.173337;13.337016;58.607582;, + -11.545969;16.822830;57.059074;, + 0.138007;12.423479;60.187363;, + 11.825384;16.819580;57.419716;, + -6.266276;13.691039;58.408001;, + 6.169853;13.554691;59.002308;, + 0.057848;95.886368;65.707542;, + 0.057848;97.662560;43.454536;, + 0.057848;90.668213;33.607914;, + 0.057848;73.976425;70.984543;, + 0.057848;63.606403;31.055357;, + 0.057848;99.177589;56.123409;, + 0.057848;84.042374;71.322975;, + 0.057848;75.714500;30.620197;, + 0.057848;53.154804;40.756420;, + -15.043728;50.197842;49.912075;, + -13.469022;92.920013;60.063766;, + -11.461862;93.826927;46.940403;, + -8.418667;86.102859;35.841724;, + -2.182251;64.795692;35.886501;, + -13.655560;74.702049;67.510803;, + -16.338684;73.054062;51.038074;, + -7.371841;73.847633;69.711700;, + -4.494127;83.274292;70.169548;, + -13.097512;71.430748;40.778584;, + -13.263326;61.285336;39.593838;, + -13.865308;81.275604;65.186821;, + -4.402893;95.093262;63.828449;, + -14.668218;94.575356;62.197353;, + -6.418187;97.562218;66.945374;, + -6.403885;85.831749;72.998459;, + -2.904975;98.340385;68.672066;, + -3.096079;86.564301;74.622665;, + -15.709467;82.386459;66.627968;, + -14.238920;86.733635;61.588871;, + -15.816927;87.518616;62.681839;, + -11.518435;84.699326;70.485474;, + -8.635912;82.575844;67.678185;, + -10.775403;96.597122;64.803986;, + -7.852941;94.312172;61.946106;, + -16.338850;66.013954;51.296288;, + -14.718096;68.331589;44.645512;, + -15.784473;69.911873;57.321053;, + -15.528388;63.130802;45.068886;, + -14.675630;70.832016;46.772766;, + -15.347429;57.616409;47.193058;, + -7.149835;52.817856;41.486317;, + -7.580388;47.204636;47.215710;, + -3.355227;56.332371;40.007046;, + -14.710178;77.561653;59.569633;, + -12.242872;104.272034;59.466625;, + -13.871002;106.867241;51.713676;, + -6.555738;100.376198;26.176455;, + -10.330755;93.744308;22.167315;, + -25.391743;66.042480;44.113369;, + -20.371532;85.581749;31.614416;, + -3.509032;68.824097;16.563112;, + -16.921518;68.428406;22.861071;, + -23.283691;91.554054;44.497189;, + -22.312506;78.019226;58.252476;, + -5.355029;81.806320;13.441270;, + -6.858363;107.464165;38.205128;, + -1.630455;58.319656;15.177998;, + -19.439602;55.002464;25.954828;, + -14.163750;71.116005;45.658489;, + -16.339277;34.462788;24.538301;, + -3.199738;106.311531;63.356800;, + -7.285188;105.334877;61.411713;, + -19.911991;74.556313;27.957836;, + -23.002449;68.454033;35.866280;, + -23.994633;83.695297;38.363724;, + -21.688162;63.338444;39.264874;, + -21.994913;54.244259;32.219749;, + -11.261707;52.068916;45.952110;, + -6.553079;49.986835;18.220219;, + -13.583147;45.560303;22.582418;, + -3.504504;39.875324;20.493166;, + -24.415617;69.041245;50.481827;, + -15.101998;82.440125;58.401062;, + -4.228397;103.816078;53.739082;, + -10.791362;101.190048;49.992683;, + -11.328189;101.622627;54.213688;, + -2.042533;104.242516;48.194424;, + -2.467957;102.354828;41.462799;, + -5.581229;102.438309;43.389084;, + -2.102569;101.711769;35.092808;, + -5.357594;98.838608;34.631802;, + -2.575568;97.464630;31.897514;, + -9.509275;96.133217;33.318790;, + -6.373484;96.717354;29.011164;, + -8.609506;92.094917;28.785583;, + -0.961346;89.876480;22.612808;, + -3.750705;87.223274;24.470808;, + -1.293535;83.343231;22.908096;, + -7.475338;76.444283;20.933500;, + -7.155903;71.146484;21.280985;, + -4.020619;75.279213;22.110722;, + -1.186798;66.427330;20.374010;, + -1.050320;61.116470;21.804775;, + -3.120998;63.629890;20.392683;, + -6.236067;57.664822;24.799372;, + -3.291713;57.533966;22.859617;, + -4.431494;55.146961;25.181421;, + -2.515443;47.986980;22.845200;, + -2.247637;45.361992;27.063856;, + -3.458311;46.185818;25.952394;, + -15.542780;91.786743;39.028736;, + -15.098378;89.391930;35.078747;, + -16.682585;85.833199;39.137646;, + -15.960197;80.988068;32.730686;, + -17.451015;78.322830;36.557224;, + -16.864700;74.552986;34.352123;, + -13.662128;75.346954;26.811104;, + -13.099884;69.581734;27.209919;, + -14.475806;72.210419;29.167706;, + -16.048969;64.284309;32.004520;, + -14.420856;61.870514;29.131302;, + -16.221205;60.286003;31.238237;, + -14.534574;44.794735;26.116779;, + -14.848799;44.863647;29.381424;, + -13.599534;41.942635;29.015915;, + -10.621090;54.617325;25.569170;, + -8.996603;52.321831;27.760847;, + -10.189517;51.242924;27.917196;, + -17.834475;94.101349;53.041599;, + -17.518343;94.489967;48.203121;, + -19.293009;90.274719;49.298183;, + -19.945814;88.506752;43.413734;, + -18.563108;84.403915;43.736874;, + -21.033463;85.001541;44.282993;, + -23.027826;71.019249;46.561157;, + -21.556767;69.493790;46.926170;, + -23.674259;69.104668;47.675011;, + -22.533089;73.345596;50.339439;, + -21.038176;75.381149;55.902035;, + -21.679085;72.997261;52.478176;, + -19.307541;61.902699;35.872772;, + -18.916523;58.344765;35.077782;, + -19.290819;59.542400;38.422955;, + -8.277215;99.647781;59.143467;, + -2.250754;97.063629;60.111290;, + -1.262086;99.482384;60.521812;, + -4.202026;99.742661;59.680969;, + -1.779861;73.225479;71.214066;, + -17.854918;48.596111;35.240131;, + -17.187716;41.811371;40.273598;, + 15.159414;50.197842;49.912075;, + 13.584708;92.920013;60.063766;, + 11.577548;93.826927;46.940403;, + 8.534353;86.102859;35.841724;, + 2.297937;64.795692;35.886501;, + 13.771247;74.702049;67.510803;, + 16.454370;73.054062;51.038074;, + 7.487527;73.847633;69.711700;, + 4.609814;83.274292;70.169548;, + 13.213199;71.430748;40.778584;, + 13.379013;61.285336;39.593838;, + 13.980994;81.275604;65.186821;, + 4.518579;95.093262;63.828449;, + 14.783904;94.575356;62.197353;, + 6.533874;97.562218;66.945374;, + 6.519572;85.831749;72.998459;, + 3.020661;98.340385;68.672066;, + 3.211765;86.564301;74.622665;, + 15.825153;82.386459;66.627968;, + 14.354607;86.733635;61.588871;, + 15.932613;87.518616;62.681839;, + 11.634122;84.699326;70.485474;, + 8.751598;82.575844;67.678185;, + 10.891089;96.597122;64.803986;, + 7.968627;94.312172;61.946106;, + 16.454536;66.013954;51.296288;, + 14.833782;68.331589;44.645512;, + 15.900160;69.911873;57.321053;, + 15.644074;63.130802;45.068886;, + 14.791316;70.832016;46.772766;, + 15.463116;57.616409;47.193058;, + 7.265521;52.817856;41.486317;, + 7.696074;47.204636;47.215710;, + 3.470914;56.332371;40.007046;, + 14.825865;77.561653;59.569633;, + 12.358559;104.272034;59.466625;, + 13.986689;106.867241;51.713676;, + 6.671424;100.376198;26.176455;, + 10.446442;93.744308;22.167315;, + 25.507429;66.042480;44.113369;, + 20.487219;85.581749;31.614416;, + 3.624719;68.824097;16.563112;, + 17.037205;68.428406;22.861071;, + 23.399378;91.554054;44.497189;, + 22.428192;78.019226;58.252476;, + 5.470715;81.806320;13.441270;, + 6.974050;107.464165;38.205128;, + 1.746141;58.319656;15.177998;, + 19.555288;55.002464;25.954828;, + 14.279436;71.116005;45.658489;, + 16.454964;34.462788;24.538301;, + 3.315424;106.311531;63.356800;, + 7.400875;105.334877;61.411713;, + 20.027678;74.556313;27.957836;, + 23.118135;68.454033;35.866280;, + 24.110319;83.695297;38.363724;, + 21.803848;63.338444;39.264874;, + 22.110600;54.244255;32.219749;, + 11.377394;52.068913;45.952110;, + 6.668766;49.986835;18.220219;, + 13.698833;45.560303;22.582418;, + 3.620190;39.875320;20.493166;, + 24.531303;69.041245;50.481827;, + 15.217685;82.440125;58.401062;, + 4.344084;103.816078;53.739082;, + 10.907048;101.190048;49.992683;, + 11.443875;101.622627;54.213688;, + 2.158219;104.242516;48.194424;, + 2.583643;102.354828;41.462799;, + 5.696916;102.438309;43.389084;, + 2.218256;101.711769;35.092808;, + 5.473281;98.838608;34.631802;, + 2.691255;97.464630;31.897514;, + 9.624962;96.133217;33.318790;, + 6.489170;96.717354;29.011164;, + 8.725192;92.094917;28.785583;, + 1.077032;89.876480;22.612808;, + 3.866392;87.223274;24.470808;, + 1.409221;83.343231;22.908096;, + 7.591025;76.444283;20.933500;, + 7.271590;71.146484;21.280985;, + 4.136305;75.279213;22.110722;, + 1.302485;66.427330;20.374010;, + 1.166007;61.116470;21.804775;, + 3.236684;63.629890;20.392683;, + 6.351754;57.664822;24.799372;, + 3.407399;57.533966;22.859617;, + 4.547181;55.146961;25.181421;, + 2.631130;47.986980;22.845200;, + 2.363323;45.361992;27.063856;, + 3.573997;46.185818;25.952394;, + 15.658466;91.786743;39.028736;, + 15.214065;89.391930;35.078747;, + 16.798271;85.833199;39.137646;, + 16.075884;80.988068;32.730686;, + 17.566702;78.322830;36.557224;, + 16.980387;74.552986;34.352123;, + 13.777815;75.346954;26.811104;, + 13.215570;69.581734;27.209919;, + 14.591493;72.210419;29.167706;, + 16.164656;64.284309;32.004520;, + 14.536543;61.870514;29.131302;, + 16.336891;60.286003;31.238237;, + 14.650260;44.794735;26.116779;, + 14.964485;44.863644;29.381424;, + 13.715221;41.942635;29.015915;, + 10.736776;54.617321;25.569170;, + 9.112289;52.321831;27.760847;, + 10.305203;51.242924;27.917196;, + 17.950161;94.101349;53.041599;, + 17.634029;94.489967;48.203121;, + 19.408695;90.274719;49.298183;, + 20.061501;88.506752;43.413734;, + 18.678795;84.403915;43.736874;, + 21.149149;85.001541;44.282993;, + 23.143513;71.019249;46.561157;, + 21.672453;69.493790;46.926170;, + 23.789946;69.104668;47.675011;, + 22.648775;73.345596;50.339439;, + 21.153862;75.381149;55.902035;, + 21.794771;72.997261;52.478176;, + 19.423227;61.902699;35.872772;, + 19.032209;58.344765;35.077782;, + 19.406506;59.542400;38.422955;, + 8.392901;99.647781;59.143467;, + 2.366440;97.063629;60.111290;, + 1.377773;99.482384;60.521812;, + 4.317712;99.742661;59.680969;, + 1.895548;73.225479;71.214066;, + 17.970604;48.596111;35.240131;, + 17.303402;41.811371;40.273598;, + 0.438559;57.282112;73.561638;, + 0.736964;56.934887;73.321701;, + 0.356253;56.468140;73.264908;, + -0.240559;56.468140;73.264908;, + -0.621271;56.934887;73.321701;, + -0.322864;57.282112;73.561638;, + -0.248436;71.854645;70.729988;, + 0.364132;71.854645;70.729988;, + 0.758169;70.963852;70.525764;, + 0.451886;70.057053;70.373367;, + -0.336191;70.057053;70.373360;, + -0.642476;70.963852;70.525764;, + 0.364132;73.351379;70.952026;, + -0.248436;73.351379;70.952026;, + 0.455698;61.693325;71.893539;, + 0.836409;60.952618;72.164238;, + 0.438559;60.724323;72.609840;, + -0.322864;60.724323;72.609840;, + -0.720715;60.952618;72.164238;, + -0.340003;61.693325;71.893539;, + -0.322864;59.615437;73.646515;, + 0.438559;59.615437;73.646515;, + 0.438559;58.736450;73.878487;, + -0.322864;58.736450;73.878487;, + -0.945781;48.617813;70.123962;, + -2.236765;48.914082;70.144196;, + -1.083371;49.222790;70.673294;, + -0.230488;49.179218;70.678032;, + 0.346183;49.179218;70.678032;, + 1.199065;49.222790;70.673294;, + 2.352458;48.914082;70.144196;, + 1.061476;48.617813;70.123962;, + 1.061476;46.043205;70.763565;, + 1.061476;45.315922;70.631477;, + -0.945781;45.315922;70.631477;, + -0.945781;46.043205;70.763565;, + -0.230488;50.744427;71.911613;, + 0.346183;50.744427;71.911613;, + 0.346183;50.290668;71.732040;, + -0.230488;50.290668;71.732040;, + 0.681346;41.262371;69.549492;, + 1.304843;39.983742;69.127930;, + 0.681345;39.288811;68.917770;, + -0.565651;39.288811;68.917770;, + -1.189150;39.983742;69.127930;, + -0.565651;41.262371;69.549492;, + -1.460927;43.933510;69.011917;, + -1.841057;44.861637;69.288826;, + -0.945781;45.001892;69.606239;, + 1.061476;45.001892;69.606239;, + 1.956750;44.861637;69.288826;, + 1.576620;43.933510;69.011917;, + 0.681346;43.309490;69.095680;, + -0.565651;43.309490;69.095680;, + 0.346183;51.987255;71.326790;, + 0.346183;51.362129;71.498451;, + -0.230488;51.362129;71.498451;, + -0.230488;51.987255;71.326790;, + -0.230488;53.243740;71.207901;, + -0.693861;53.723915;71.140991;, + -0.405525;54.361668;71.150101;, + 0.521220;54.361668;71.150101;, + 0.809554;53.723915;71.140991;, + 0.346183;53.243740;71.207901;, + -1.009302;55.219082;71.714081;, + -1.025449;55.481266;71.933746;, + -0.720078;55.895855;72.229713;, + -0.240559;56.053364;72.471550;, + 0.356253;56.053364;72.471550;, + 0.835771;55.895855;72.229713;, + 1.141142;55.481266;71.933746;, + 1.124995;55.219086;71.714081;, + 0.521220;55.117058;71.726410;, + -0.405525;55.117058;71.726410;, + -0.565651;38.742027;59.643063;, + 0.681345;38.742027;59.643063;, + 2.217954;38.776661;57.910744;, + 2.867495;39.371185;54.783699;, + 1.330886;37.590916;54.064663;, + -1.215191;37.590916;54.064663;, + -2.751802;39.371185;54.783699;, + -2.102260;38.776661;57.910744;, + -0.510998;50.219196;39.523888;, + 0.626693;50.219196;39.523888;, + -1.873620;26.054764;52.140381;, + -1.215191;29.188606;52.544262;, + 1.330886;29.188606;52.544262;, + 1.989312;26.054764;52.140381;, + 2.234568;33.522697;35.402046;, + 0.565745;37.216824;36.971302;, + -0.450050;37.216824;36.971302;, + -2.118875;33.522697;35.402046;, + -0.565651;37.436687;67.317482;, + 0.681345;37.436687;67.317482;, + 0.681345;37.195446;65.010315;, + -0.565651;37.195446;65.010315;, + -2.538574;41.449165;68.624062;, + -2.951183;40.302361;68.035011;, + -4.628216;39.976799;65.832298;, + -5.649843;41.666725;65.621597;, + -4.822110;42.776821;67.453926;, + -3.387875;42.233704;68.253677;, + -15.066837;51.644341;50.761562;, + -13.959147;50.054565;53.477966;, + -13.171544;47.816036;53.537487;, + -12.819518;47.844864;50.501919;, + -14.464008;51.746117;48.798912;, + -15.310171;52.496346;49.328674;, + -14.314348;64.191902;63.807819;, + -13.928720;63.485863;64.339012;, + -13.572276;62.304844;64.865723;, + -13.167170;61.067101;65.229462;, + -12.962619;58.564976;64.792267;, + -13.533698;58.152863;63.610909;, + -14.547876;60.533600;62.358631;, + -14.767531;62.889500;62.645046;, + -16.389227;56.612152;48.529644;, + -16.521999;56.337196;48.919449;, + -16.561354;57.052597;49.445042;, + -16.542124;57.916912;49.540932;, + -16.326410;58.083145;50.780964;, + -15.837441;56.684170;51.706242;, + -15.670477;54.844639;50.363594;, + -16.045902;55.654251;48.952625;, + -13.866287;76.274246;65.799950;, + -12.180278;74.145042;67.802490;, + -13.091559;73.365410;66.984734;, + -13.743665;72.909081;66.356583;, + -14.234488;73.032753;65.109230;, + -14.186148;74.380287;64.488983;, + -16.565777;71.776100;50.947868;, + -16.808704;72.864502;50.189095;, + -16.304464;72.598770;49.611454;, + -12.345559;69.888283;65.738831;, + -12.326240;69.568321;65.742271;, + -12.347851;69.289749;65.733955;, + -12.479330;68.737000;65.669327;, + -12.625326;68.411827;65.535583;, + -12.699836;68.129967;65.442223;, + -13.074884;67.260254;64.888390;, + -13.514962;67.960876;64.396080;, + -13.290691;70.147194;64.970589;, + -12.663944;70.601143;65.617447;, + -3.217402;61.792000;69.916451;, + -2.825095;61.031200;70.194847;, + -3.213592;59.684910;70.235397;, + -3.662069;58.804951;70.155693;, + -3.857313;58.498222;70.159554;, + -4.142841;58.239128;70.071960;, + -4.253828;58.105072;69.919785;, + -3.673181;58.191391;69.761742;, + -4.503674;59.898464;69.912605;, + -3.921128;61.008068;69.727730;, + -3.192633;55.084583;70.448547;, + -3.111558;54.744785;70.582428;, + -2.385719;54.680038;70.815506;, + -1.792563;54.532791;70.915924;, + -2.092454;53.903660;70.912537;, + -2.919086;53.404095;70.938629;, + -3.321806;54.305473;70.619545;, + -6.250182;49.317669;69.504501;, + -6.446180;48.549271;69.168564;, + -8.014235;48.270035;68.304420;, + -8.714692;50.122650;68.182167;, + -7.801420;51.763470;68.922615;, + -6.904962;50.679249;69.380814;, + -5.370491;51.804302;70.890030;, + -4.524282;52.698963;71.277252;, + -4.071008;51.834652;71.563766;, + -3.656876;50.892254;71.572784;, + -4.722633;50.442741;71.028595;, + -6.934566;47.145229;68.633385;, + -5.329893;47.425457;69.456062;, + -3.966182;46.793549;69.870453;, + -3.938172;46.091690;69.693321;, + -4.855957;46.051064;69.184097;, + -6.488640;46.472694;68.538559;, + -1.098645;50.973583;71.694138;, + -1.950218;51.124405;71.635803;, + -2.407137;52.052967;71.641159;, + -1.563598;52.530037;71.605721;, + -1.096965;52.051891;71.685753;, + -1.088933;51.424000;71.779518;, + -13.021915;53.488663;61.239902;, + -14.041900;55.868359;59.989929;, + -14.138645;57.389984;61.303249;, + -13.118661;55.010292;62.553223;, + -9.482656;49.163662;66.510292;, + -8.739838;47.333950;66.631050;, + -8.364165;46.637093;66.527420;, + -8.016644;45.674202;66.296745;, + -8.580020;44.714546;64.299896;, + -10.489306;46.236229;61.293800;, + -11.341558;48.442810;61.255726;, + -11.017628;49.345627;63.166481;, + -11.104903;50.871937;64.476662;, + -10.609887;51.240044;65.681923;, + -1.474512;58.398350;72.686012;, + -1.812058;58.122028;72.386444;, + -2.271988;58.206673;72.014107;, + -2.493294;58.257072;71.856972;, + -2.453580;58.564266;71.700531;, + -2.337840;58.869293;71.594749;, + -1.884961;59.340534;71.866264;, + -1.441849;59.261425;72.428749;, + -1.509435;57.558842;72.547653;, + -1.134018;57.032932;72.596863;, + -1.626426;56.943577;72.311104;, + -2.118178;57.221329;72.202080;, + -2.053061;57.660461;72.258942;, + -2.506476;58.943634;70.957291;, + -2.665209;58.656223;71.097099;, + -2.901366;58.531845;70.941536;, + -3.059159;58.630623;70.641769;, + -2.838635;58.924690;70.598763;, + -5.702873;55.781525;69.312447;, + -5.801723;57.970192;69.387802;, + -5.111734;58.670830;69.693558;, + -3.983715;58.045750;69.612915;, + -4.088572;57.287357;69.743599;, + -4.068023;56.821293;69.814964;, + -3.812485;56.347786;69.903954;, + -3.917183;55.572304;70.041840;, + -4.834018;54.668350;69.775490;, + -4.255816;56.976295;70.144569;, + -4.259132;57.438969;70.049438;, + -4.196453;57.593311;70.295357;, + -4.135692;57.244923;70.552475;, + -4.206871;56.894928;70.444580;, + -3.591207;57.666695;71.185127;, + -3.783044;57.561813;70.960518;, + -3.836649;57.893749;70.692024;, + -3.568345;58.165226;70.788643;, + -3.408157;58.065258;71.087090;, + -3.712499;55.370281;70.761353;, + -3.470078;55.416473;71.000565;, + -2.839330;55.237701;71.154488;, + -2.822697;54.988895;70.923553;, + -3.522735;55.051468;70.611397;, + -4.155221;56.153671;70.536667;, + -4.015416;55.782383;70.614700;, + -3.834426;55.439445;70.483299;, + -3.917668;55.755974;70.291489;, + -4.162768;56.246273;70.237022;, + -3.360456;57.598080;71.641861;, + -3.439125;57.720852;71.496246;, + -3.251950;58.117050;71.396477;, + -3.021049;58.246376;71.555511;, + -3.085086;57.947788;71.731819;, + -2.968136;57.499275;71.833702;, + -2.706439;57.428493;71.961281;, + -2.801483;56.969940;71.952415;, + -3.146882;56.789368;71.787590;, + -3.226831;57.136875;71.731987;, + -2.680634;56.379002;72.014671;, + -2.158215;56.120026;72.073334;, + -2.463775;55.692970;71.788239;, + -3.104754;55.851723;71.649239;, + -3.019568;56.201847;71.837547;, + -3.854640;56.847206;71.126411;, + -3.682065;56.967865;71.362190;, + -3.578869;56.835163;71.491699;, + -3.497496;56.487053;71.543762;, + -3.592218;56.139133;71.357254;, + -3.813043;56.122169;71.094490;, + -3.932611;56.500839;71.012955;, + -2.244552;60.233025;70.703400;, + -1.543128;60.758423;71.142464;, + -1.905732;59.838963;71.250046;, + -2.362187;59.370174;70.980934;, + -2.702353;59.358711;70.627777;, + -5.869700;72.868355;69.812210;, + -6.693674;72.552437;69.361465;, + -7.883108;73.155823;69.069405;, + -9.038418;73.717834;68.902939;, + -8.692574;68.018349;68.671463;, + -8.338293;68.821220;68.766014;, + -7.113932;68.489220;68.942162;, + -6.934299;67.847763;68.938004;, + -7.729776;67.687729;68.801422;, + -6.369604;71.293625;68.760429;, + -6.266792;70.787079;68.649055;, + -7.456227;71.390457;68.356995;, + -7.559039;71.897003;68.468361;, + -8.883052;64.549225;67.816406;, + -7.739773;64.507843;68.125893;, + -6.938856;64.740326;68.286102;, + -6.703542;64.155365;68.361183;, + -6.983939;63.322628;68.406448;, + -7.766936;63.148247;68.257492;, + -8.915951;63.725613;67.823822;, + -9.511546;64.526329;67.588211;, + -5.015405;68.108635;68.910416;, + -4.548992;67.765022;68.960190;, + -3.810864;67.410515;69.067841;, + -3.841677;66.485794;69.114601;, + -4.796024;65.666992;68.895134;, + -5.041750;66.255524;68.850845;, + -4.661049;66.762360;68.945168;, + -5.034431;67.060791;68.905960;, + -5.210155;67.702225;68.891853;, + -13.971161;79.561020;64.637955;, + -16.624105;67.403618;50.887012;, + -16.565861;68.256042;51.076977;, + -16.246441;65.836792;52.110813;, + -16.461342;64.238647;50.971241;, + -16.518333;64.809113;50.940807;, + -16.347895;65.639847;50.705421;, + -16.240040;66.024963;50.538170;, + -16.346189;66.463646;50.675999;, + -15.224072;69.450462;45.349747;, + -15.760094;69.213470;44.900475;, + -15.382089;67.644539;44.621346;, + -15.250605;71.985199;59.394108;, + -15.298944;70.637657;60.014355;, + -15.658424;68.405617;58.417435;, + -15.881517;67.001724;56.228691;, + -15.969252;67.785751;55.123196;, + -15.787234;65.044144;44.833035;, + -16.311890;64.137360;44.826756;, + -15.985520;62.777939;45.304832;, + -15.565753;61.898857;45.735703;, + -17.476997;71.515564;49.979080;, + -17.666685;72.283302;49.454979;, + -17.496593;72.551018;49.791622;, + -17.235834;71.461693;50.544392;, + -17.321030;70.610649;50.363503;, + -17.721493;64.826424;44.666374;, + -17.617994;63.963326;44.954117;, + -17.641233;62.991528;45.373825;, + -17.702808;62.384628;45.580582;, + -17.503719;62.235477;45.405041;, + -17.214645;62.635960;45.039047;, + -17.454624;64.026939;44.611488;, + -17.486305;67.273705;44.342857;, + -16.981884;68.189659;44.315788;, + -17.319111;69.740105;44.662109;, + -17.795025;70.146683;45.105915;, + -17.665180;69.380302;44.897526;, + -17.693687;68.057755;44.480789;, + -17.367353;55.732864;49.276451;, + -17.603033;56.078396;49.090916;, + -17.605160;56.805744;49.610336;, + -17.369478;56.460213;49.795868;, + -15.472936;71.487747;47.478798;, + -15.202838;70.700668;46.413372;, + -17.537380;72.607475;48.042797;, + -17.718521;72.353806;47.703808;, + -17.632210;72.075851;47.314693;, + -17.704372;71.657677;46.520592;, + -17.298006;71.305359;45.955624;, + -16.765556;71.583923;46.387459;, + -17.031307;72.320404;47.474106;, + -17.602358;59.477318;47.236622;, + -17.394125;59.880875;47.002865;, + -17.477081;61.053162;46.572697;, + -17.674273;61.202515;46.749283;, + -17.736586;60.467724;47.270435;, + -16.183525;61.853733;46.266216;, + -16.565636;61.401821;46.549980;, + -16.432093;60.244560;47.006794;, + -16.018494;59.781609;47.083752;, + -15.774214;60.941624;46.644413;, + -17.282442;56.325546;47.880959;, + -17.057690;55.958496;48.038124;, + -16.647417;56.352184;47.652000;, + -16.585321;57.122021;47.273716;, + -17.001896;57.588127;47.207531;, + -17.288742;57.185337;47.428646;, + -15.462021;56.205631;47.969166;, + -14.615860;55.455399;47.439404;, + -15.475274;59.141663;46.797791;, + -15.730730;57.946342;47.180832;, + -15.798254;57.165806;47.545010;, + -8.445348;40.588070;59.654636;, + -7.278510;39.094028;59.898464;, + -6.654146;38.770531;57.926445;, + -7.458086;40.307079;54.648247;, + -9.828319;42.345741;53.625164;, + -10.191217;42.303234;56.659534;, + -4.566577;37.981155;65.199509;, + -3.095984;38.031998;67.529678;, + -2.411773;37.506966;67.308975;, + -2.439468;37.185844;65.011452;, + -3.987151;37.529453;63.242748;, + -7.714421;47.308811;43.157204;, + -8.049258;44.606380;41.254444;, + -6.923997;49.765636;40.291908;, + -7.906905;51.757496;43.185513;, + -5.034308;41.098293;49.664669;, + -5.924514;37.964451;49.232517;, + -7.618621;39.077587;48.033279;, + -7.929698;44.502201;46.021900;, + -8.122182;48.950886;46.050209;, + -9.087849;46.348259;49.153736;, + -6.570920;44.494156;50.192978;, + -9.377964;32.507309;43.848045;, + -8.752393;35.209740;45.489132;, + -7.924005;29.785124;47.506119;, + -6.942506;32.835922;36.246323;, + -7.997331;36.389206;37.566708;, + -9.269050;31.085709;38.438145;, + -5.026693;51.522896;39.552273;, + -3.825413;48.113850;38.322987;, + -2.217535;51.807980;39.149200;, + -5.770691;27.953976;51.289192;, + -4.258096;26.840841;52.409973;, + -14.393597;77.704041;61.829361;, + -14.713458;75.810089;60.518398;, + -9.962842;51.383026;45.418407;, + -12.572998;52.681652;46.818928;, + -11.410388;71.412788;66.828568;, + -11.823878;72.111282;66.787140;, + -10.865562;72.920639;67.524742;, + -9.757876;72.328529;67.772369;, + -9.662718;71.817146;67.674042;, + -10.356916;71.710754;67.467834;, + -12.698816;64.099892;66.268402;, + -13.037525;65.302979;65.766319;, + -12.597655;66.151749;66.249695;, + -11.851852;65.260712;66.830208;, + -11.350214;64.474258;67.163437;, + -11.757308;64.162216;67.085007;, + -6.766061;66.263695;68.781013;, + -6.216946;66.492447;68.869522;, + -5.420580;66.654190;68.999702;, + -5.795310;66.145882;68.879105;, + -6.606440;65.917046;68.748558;, + -3.320212;69.375824;69.355331;, + -3.709178;68.309135;68.969109;, + -4.438835;68.674232;68.849876;, + -4.890217;69.410423;68.822868;, + -4.989970;69.919693;68.927238;, + -4.149621;70.250198;69.340469;, + -10.614668;69.347672;67.888069;, + -10.116972;69.031830;68.220833;, + -10.474522;68.229591;68.132561;, + -11.167147;67.985580;67.780556;, + -11.836740;68.545883;67.245644;, + -11.641810;69.105743;67.264893;, + -6.151947;45.663696;67.791992;, + -4.526884;45.235153;68.449783;, + -4.146754;44.288376;68.208298;, + -5.771818;44.716919;67.550507;, + -10.450169;70.821953;67.907776;, + -9.765457;70.555244;68.220161;, + -10.446616;70.475075;67.861671;, + -11.461811;70.225883;67.223770;, + -11.484657;70.544380;67.228043;, + -7.470517;71.123924;68.610703;, + -6.279786;70.515015;68.889984;, + -5.857738;69.792030;69.041931;, + -6.325098;70.114395;68.970451;, + -7.503110;70.711578;68.750259;, + -8.226480;70.998123;68.542450;, + -11.757306;66.061752;67.182938;, + -12.601673;66.949631;66.694183;, + -12.539265;67.224754;66.799522;, + -11.842525;66.625931;67.309013;, + -11.209784;66.065163;67.525764;, + -8.280282;65.338531;68.297150;, + -9.418466;65.381676;67.974045;, + -10.128361;65.908348;67.834045;, + -9.527828;65.743866;67.987259;, + -8.435413;65.687355;68.321404;, + -5.819896;67.066292;68.770218;, + -5.441578;66.767700;68.786415;, + -6.236395;66.607925;68.646599;, + -6.614712;66.906517;68.630394;, + -11.348783;70.134789;66.847923;, + -10.339741;70.382629;67.493866;, + -10.382211;70.102104;67.500931;, + -11.391253;69.854263;66.854988;, + -6.542440;69.634361;68.798340;, + -7.746741;69.958893;68.556709;, + -8.281987;70.288345;68.319221;, + -8.238889;70.568634;68.310120;, + -7.507647;70.645966;68.558647;, + -6.346445;70.041153;68.809387;, + -11.501963;67.061974;67.315300;, + -11.152501;66.503914;67.438225;, + -11.688239;66.665207;67.208046;, + -12.363090;67.291313;66.688377;, + -12.188178;67.618729;66.799240;, + -8.220766;66.419502;68.373581;, + -7.848414;66.116623;68.406441;, + -8.381545;65.898521;68.278526;, + -9.477689;65.951813;67.955978;, + -9.894917;66.509720;67.920815;, + -9.171124;66.759315;68.210503;, + -17.429979;70.690262;47.136501;, + -17.300325;71.068329;47.941162;, + -17.023735;70.899750;48.289326;, + -16.861496;70.700005;48.118645;, + -16.944355;70.155487;47.524551;, + -17.236248;69.977158;46.890572;, + -17.226145;68.629349;45.660595;, + -16.823431;68.867996;46.195717;, + -16.729546;68.371811;45.875668;, + -16.873161;67.340813;45.524662;, + -17.105501;66.543564;45.306343;, + -17.364603;67.335907;45.122231;, + -17.210119;64.694969;45.653248;, + -16.824369;65.503990;45.698051;, + -16.693214;64.944427;45.835949;, + -16.865488;63.931744;46.212234;, + -17.217360;63.707901;46.045494;, + -17.257675;62.592293;47.044037;, + -16.951664;62.847736;47.248653;, + -16.837200;62.523624;47.585892;, + -16.968355;61.957218;48.121510;, + -17.261364;61.378471;48.161098;, + -17.422873;61.297504;47.813133;, + -17.417713;61.989571;47.233940;, + -17.641174;59.537712;47.829380;, + -17.572170;59.655956;48.204098;, + -17.551355;59.356380;48.625698;, + -17.610889;58.393185;48.722862;, + -17.640314;57.667088;48.205170;, + -17.649786;58.512043;47.733288;, + -17.048664;58.888443;50.137520;, + -17.266785;59.234547;49.939693;, + -17.237478;60.194298;49.885609;, + -17.031002;61.167274;50.192562;, + -16.847815;61.964878;50.507847;, + -16.794952;61.394268;50.541176;, + -16.881783;59.817486;50.241066;, + -16.520054;67.426628;49.977383;, + -16.340061;67.565254;49.576904;, + -16.329565;67.737488;49.665955;, + -16.615074;68.525681;49.726234;, + -16.931223;69.285706;49.834728;, + -16.825703;68.358887;50.174931;, + -17.551683;71.775742;48.843681;, + -17.362616;71.012024;49.371750;, + -16.936705;70.317307;49.319000;, + -16.958307;70.820000;49.096962;, + -17.196766;71.293510;48.824539;, + -17.364233;71.554535;48.518509;, + -16.104570;66.411118;49.371330;, + -15.935796;66.244766;48.838696;, + -15.850468;66.336823;48.616936;, + -15.866637;66.633751;48.735458;, + -16.035194;66.980598;49.101681;, + -16.187799;66.850029;49.515789;, + -16.126511;65.664818;49.415100;, + -16.190468;65.289612;49.597702;, + -16.041357;65.036949;49.353294;, + -15.899192;65.163132;49.153240;, + -15.851497;65.262131;48.876595;, + -15.929707;65.511154;48.894043;, + -16.490780;64.863365;50.058357;, + -16.720278;64.048309;50.266247;, + -16.791843;63.235886;49.945076;, + -16.568014;63.725044;49.778568;, + -16.373796;64.287704;49.843987;, + -16.368130;64.613602;49.802601;, + -17.217245;60.928139;48.799614;, + -16.907705;61.495392;48.765743;, + -16.815966;61.430393;48.922810;, + -16.765753;61.620747;49.208321;, + -16.750641;62.064793;49.391998;, + -17.015625;61.599758;49.547829;, + -17.299763;60.700314;49.200974;, + -15.614582;65.022964;47.637421;, + -15.567803;65.459961;48.141235;, + -15.567249;65.398903;48.325111;, + -15.481506;65.150154;48.319054;, + -15.194538;65.020020;48.325905;, + -14.993324;64.845505;48.207409;, + -15.239534;64.746971;48.103077;, + -15.478746;64.410210;48.011654;, + -15.595269;64.437210;47.602276;, + -15.577514;66.367973;47.512394;, + -15.587451;66.170380;48.126865;, + -15.597684;65.873161;48.000294;, + -15.594285;65.462585;47.465916;, + -15.623907;65.954384;47.004478;, + -16.163324;69.702736;47.006084;, + -16.325090;70.179176;47.432697;, + -16.250225;70.720009;48.027470;, + -15.931003;70.309883;48.304401;, + -15.873635;69.724388;47.707878;, + -15.683133;67.779671;46.594791;, + -15.731870;67.422462;46.281384;, + -15.854837;66.999779;45.793983;, + -16.054199;66.752342;45.468372;, + -16.222563;67.364136;45.404732;, + -16.119137;68.397461;45.749371;, + -15.815002;68.405243;46.444931;, + -16.121750;63.590012;46.468613;, + -16.268213;63.939720;46.142395;, + -16.091532;64.937843;45.725086;, + -15.811086;65.184181;46.013538;, + -15.725762;64.678902;46.459305;, + -15.859744;64.082863;46.497070;, + -15.926024;62.989491;47.503284;, + -15.843936;62.895470;47.927868;, + -15.889503;62.652355;48.086254;, + -15.987683;62.236328;48.207397;, + -16.216883;61.851406;48.240868;, + -16.364000;61.953060;48.036350;, + -16.214388;62.510639;47.489380;, + -15.595205;68.402351;48.685631;, + -15.764951;68.966614;49.253052;, + -15.941114;69.119171;49.475651;, + -15.975425;68.539047;49.658321;, + -15.736507;67.748260;49.593555;, + -15.532450;67.764122;48.843464;, + -16.346699;71.171959;48.547527;, + -16.586071;71.314072;48.751896;, + -16.308315;70.874519;49.045010;, + -16.068941;70.732407;48.840641;, + -15.518588;67.185043;48.375042;, + -15.668723;67.181129;49.142185;, + -15.708892;66.982887;49.023090;, + -15.584141;66.642441;48.652946;, + -15.499434;66.834618;48.047215;, + -15.092333;64.988647;49.170685;, + -14.719754;65.032219;48.968830;, + -15.088419;65.204224;48.722855;, + -15.558498;65.271629;48.793575;, + -15.560716;65.164146;49.081577;, + -15.725241;64.271202;49.771698;, + -15.177734;64.013451;49.696068;, + -14.787019;64.137657;49.657894;, + -15.119205;64.553688;49.607170;, + -15.572768;64.774559;49.574314;, + -15.788092;64.616272;49.700668;, + -15.866501;61.957813;49.102505;, + -16.104591;61.579231;49.139591;, + -16.162405;61.394108;48.852608;, + -15.924313;61.772690;48.815525;, + -15.717142;63.853062;48.277557;, + -15.248356;64.229958;48.236816;, + -14.928309;64.044220;48.320805;, + -15.315211;63.808681;48.458256;, + -15.750184;63.597157;48.425735;, + -15.838925;62.957794;48.812828;, + -15.734231;63.319706;48.668522;, + -15.316200;63.570396;48.738605;, + -15.018495;63.530445;48.836395;, + -15.316642;63.369987;49.007088;, + -15.719042;63.048027;49.053600;, + -15.980401;62.618446;49.327629;, + -15.722883;62.949089;49.349140;, + -15.299875;63.228001;49.333504;, + -14.944921;63.170467;49.313648;, + -15.276262;63.393970;49.504761;, + -15.797068;63.623280;49.678589;, + -16.084009;63.113098;49.537724;, + -13.713379;64.330490;47.964046;, + -14.052535;64.570992;47.942337;, + -13.642416;64.727051;47.977783;, + -13.303260;64.486542;47.999493;, + -13.622803;64.867424;48.405872;, + -13.966632;65.018639;48.594540;, + -13.617676;64.821175;48.841949;, + -13.268164;64.565086;48.723537;, + -13.279479;64.634613;48.428219;, + -13.639128;64.418907;49.285206;, + -13.985892;64.368164;49.509857;, + -13.685705;63.932621;49.534199;, + -13.345568;63.706188;49.357521;, + -13.317171;63.849289;49.209923;, + -13.310544;64.126472;49.161942;, + -13.407900;63.991501;48.212700;, + -13.378046;63.842590;48.457138;, + -13.448744;63.599464;48.515327;, + -13.854336;63.502201;48.416882;, + -14.191032;63.583447;48.318527;, + -13.815295;63.829620;48.172535;, + -13.448471;63.334648;48.762100;, + -13.445812;63.215389;48.942604;, + -13.849804;63.106457;48.948494;, + -14.219306;63.163155;48.878448;, + -13.859849;63.274899;48.680103;, + -13.760653;63.319157;49.397713;, + -14.160416;63.179287;49.390675;, + -13.826283;62.948902;49.207973;, + -13.426521;63.088772;49.215008;, + -14.635970;54.643333;55.040348;, + -14.147105;54.452450;57.104122;, + -13.158237;52.062576;58.359673;, + -13.383351;51.207062;56.417542;, + -14.475186;52.802021;53.698296;, + -15.304926;68.186958;61.412601;, + -14.881803;70.420540;62.992817;, + -14.420024;70.296165;64.247795;, + -14.572822;68.117760;63.612282;, + -15.007770;66.809219;62.450409;, + -15.942458;60.483253;55.162083;, + -15.911017;62.698605;56.534737;, + -15.702338;64.100548;58.725273;, + -15.429958;62.728092;59.776882;, + -15.204959;60.373241;59.487785;, + -15.173355;58.842800;58.182579;, + -15.579103;59.052357;56.106335;, + -16.138069;62.572739;52.645168;, + -16.264805;60.348454;51.283993;, + -16.459799;60.184284;50.041332;, + -16.446999;61.758488;50.400814;, + -16.268988;63.355892;51.544556;, + -10.984770;59.171497;67.685600;, + -10.020209;59.249851;68.473320;, + -8.955151;58.376186;68.852272;, + -8.749995;56.214470;68.792267;, + -9.638556;54.576092;68.034088;, + -10.808270;56.659454;67.306381;, + -2.919356;66.059219;69.545708;, + -2.935508;67.427605;69.470802;, + -2.918927;68.351173;69.428009;, + -2.480527;69.424149;69.710426;, + -1.804423;69.821587;69.985138;, + -1.545340;68.905617;69.955627;, + -2.229242;66.840546;69.764442;, + -0.336191;68.430237;70.273201;, + 0.451886;68.430237;70.273201;, + 1.170602;66.378647;70.287239;, + 0.776565;65.605095;70.453270;, + -0.660870;65.605095;70.453270;, + -1.054910;66.378647;70.287239;, + -0.340003;62.900276;71.266731;, + -1.058722;62.556232;71.091965;, + -0.660870;63.757217;70.827621;, + 0.776565;63.757217;70.827621;, + 1.174414;62.556232;71.091965;, + 0.455698;62.900276;71.266731;, + -1.167291;72.975906;71.066788;, + -1.561331;72.093285;70.835541;, + -2.229468;71.696121;70.544289;, + -3.073710;72.557281;70.563393;, + -4.494940;62.101410;69.479050;, + -5.105907;62.962933;69.143433;, + -4.820986;63.796482;69.076340;, + -3.863764;64.606781;69.322395;, + -3.894372;63.243977;69.496239;, + -5.328853;60.484348;69.611397;, + -6.107750;61.054867;69.396408;, + -6.771271;62.188259;69.118797;, + -5.982145;62.362251;69.253105;, + -5.354429;61.491180;69.538467;, + -8.287384;62.278648;68.682831;, + -7.628970;61.197292;69.140694;, + -8.336544;60.522438;69.069862;, + -9.515740;61.319351;68.567192;, + -9.953496;62.560196;68.243744;, + -9.432715;62.866348;68.253067;, + -11.047081;62.546486;67.962914;, + -10.617968;61.313049;68.317123;, + -11.533367;61.247047;67.476128;, + -11.962482;62.480480;67.121918;, + 2.654264;41.449165;68.624062;, + 3.503563;42.233704;68.253677;, + 4.937797;42.776821;67.453926;, + 5.765529;41.666725;65.621597;, + 4.743902;39.976799;65.832298;, + 3.066870;40.302361;68.035011;, + 14.579695;51.746113;48.798912;, + 12.935205;47.844864;50.501919;, + 13.287230;47.816036;53.537487;, + 14.074833;50.054565;53.477966;, + 15.182524;51.644341;50.761562;, + 15.425858;52.496346;49.328674;, + 14.663563;60.533600;62.358627;, + 13.649384;58.152863;63.610909;, + 13.078305;58.564976;64.792267;, + 13.282856;61.067101;65.229462;, + 13.687963;62.304844;64.865723;, + 14.044406;63.485863;64.339012;, + 14.430035;64.191902;63.807819;, + 14.883218;62.889500;62.645046;, + 15.786164;54.844639;50.363594;, + 15.953128;56.684170;51.706242;, + 16.442099;58.083145;50.780964;, + 16.657810;57.916912;49.540932;, + 16.677040;57.052597;49.445042;, + 16.637686;56.337196;48.919449;, + 16.504915;56.612152;48.529644;, + 16.161591;55.654251;48.952625;, + 14.350174;73.032753;65.109230;, + 13.859351;72.909081;66.356583;, + 13.207247;73.365410;66.984734;, + 12.295963;74.145042;67.802490;, + 13.981975;76.274246;65.799950;, + 14.301835;74.380287;64.488983;, + 16.420151;72.598770;49.611454;, + 16.924391;72.864502;50.189095;, + 16.681463;71.776100;50.947868;, + 13.406377;70.147194;64.970589;, + 13.630649;67.960876;64.396080;, + 13.190571;67.260254;64.888390;, + 12.815522;68.129967;65.442223;, + 12.741013;68.411827;65.535583;, + 12.595016;68.737000;65.669327;, + 12.463537;69.289749;65.733955;, + 12.441926;69.568321;65.742271;, + 12.461246;69.888283;65.738831;, + 12.779631;70.601143;65.617447;, + 4.619360;59.898464;69.912605;, + 3.914352;58.191391;69.761742;, + 4.369514;58.105072;69.919785;, + 4.258527;58.239124;70.071960;, + 3.973000;58.498222;70.159554;, + 3.777756;58.804951;70.155693;, + 3.329280;59.684910;70.235397;, + 2.940784;61.031204;70.194847;, + 3.333090;61.791996;69.916451;, + 4.036814;61.008068;69.727730;, + 3.034772;53.404091;70.938629;, + 2.208143;53.903660;70.912537;, + 1.908253;54.532791;70.915924;, + 2.501408;54.680038;70.815506;, + 3.227245;54.744785;70.582428;, + 3.308319;55.084583;70.448547;, + 3.437492;54.305473;70.619545;, + 7.917106;51.763470;68.922615;, + 8.830380;50.122650;68.182167;, + 8.129922;48.270035;68.304428;, + 6.561869;48.549271;69.168564;, + 6.365870;49.317665;69.504501;, + 7.020649;50.679249;69.380814;, + 5.486177;51.804302;70.890030;, + 4.838321;50.442738;71.028595;, + 3.772563;50.892250;71.572784;, + 4.186694;51.834652;71.563766;, + 4.639969;52.698963;71.277252;, + 4.971645;46.051064;69.184097;, + 4.053861;46.091690;69.693321;, + 4.081872;46.793549;69.870453;, + 5.445580;47.425457;69.456062;, + 7.050251;47.145229;68.633385;, + 6.604327;46.472694;68.538559;, + 1.214336;50.973583;71.694138;, + 1.204623;51.423996;71.779518;, + 1.212656;52.051891;71.685745;, + 1.679286;52.530037;71.605721;, + 2.522823;52.052967;71.641159;, + 2.065906;51.124401;71.635803;, + 13.137602;53.488663;61.239902;, + 13.234347;55.010292;62.553223;, + 14.254332;57.389984;61.303249;, + 14.157586;55.868359;59.989929;, + 11.220590;50.871937;64.476662;, + 11.133315;49.345627;63.166481;, + 11.457245;48.442810;61.255726;, + 10.604994;46.236229;61.293800;, + 8.695706;44.714546;64.299896;, + 8.132330;45.674198;66.296745;, + 8.479852;46.637093;66.527420;, + 8.855523;47.333950;66.631050;, + 9.598343;49.163662;66.510292;, + 10.725574;51.240044;65.681923;, + 1.590202;58.398350;72.686012;, + 1.557539;59.261425;72.428749;, + 2.000650;59.340534;71.866264;, + 2.453526;58.869293;71.594749;, + 2.569266;58.564266;71.700531;, + 2.608980;58.257072;71.856972;, + 2.387675;58.206673;72.014107;, + 1.927747;58.122028;72.386436;, + 1.625123;57.558842;72.547653;, + 2.168747;57.660461;72.258942;, + 2.233865;57.221329;72.202080;, + 1.742114;56.943577;72.311104;, + 1.249707;57.032932;72.596863;, + 3.174846;58.630623;70.641769;, + 3.017052;58.531845;70.941544;, + 2.780896;58.656223;71.097099;, + 2.622163;58.943634;70.957291;, + 2.954322;58.924690;70.598763;, + 4.032869;55.572304;70.041840;, + 3.928171;56.347786;69.903954;, + 4.183709;56.821293;69.814964;, + 4.204257;57.287357;69.743599;, + 4.099401;58.045750;69.612915;, + 5.227420;58.717506;69.747047;, + 5.917409;57.970192;69.387802;, + 5.818560;55.781525;69.312447;, + 4.949705;54.668350;69.775490;, + 4.251379;57.244923;70.552475;, + 4.312139;57.593311;70.295357;, + 4.374818;57.438969;70.049438;, + 4.371503;56.976295;70.144569;, + 4.322558;56.894928;70.444588;, + 3.706894;57.666695;71.185127;, + 3.523844;58.065258;71.087090;, + 3.684032;58.165226;70.788643;, + 3.952336;57.893749;70.692024;, + 3.898730;57.561813;70.960518;, + 3.828186;55.370281;70.761353;, + 3.638421;55.051468;70.611397;, + 2.938384;54.988895;70.923553;, + 2.955018;55.237701;71.154488;, + 3.585764;55.416473;71.000565;, + 4.270908;56.153671;70.536667;, + 4.278454;56.246273;70.237022;, + 4.033355;55.755974;70.291489;, + 3.950112;55.439445;70.483299;, + 4.131103;55.782383;70.614700;, + 3.476142;57.598080;71.641861;, + 3.200772;57.947784;71.731819;, + 3.136734;58.246376;71.555511;, + 3.367636;58.117046;71.396477;, + 3.554811;57.720852;71.496246;, + 3.262567;56.789368;71.787590;, + 2.917169;56.969940;71.952415;, + 2.822125;57.428493;71.961281;, + 3.083823;57.499275;71.833702;, + 3.342518;57.136875;71.731987;, + 3.220440;55.851723;71.649239;, + 2.579464;55.692970;71.788246;, + 2.273904;56.120026;72.073334;, + 2.796321;56.379002;72.014671;, + 3.135255;56.201847;71.837547;, + 3.928730;56.122169;71.094490;, + 3.707905;56.139133;71.357254;, + 3.613183;56.487053;71.543762;, + 3.694555;56.835163;71.491699;, + 3.797751;56.967865;71.362190;, + 3.970327;56.847206;71.126411;, + 4.048297;56.500839;71.012955;, + 2.477874;59.370174;70.980934;, + 2.021420;59.838963;71.250046;, + 1.658818;60.758423;71.142464;, + 2.360240;60.233025;70.703400;, + 2.818039;59.358707;70.627777;, + 5.985386;72.868355;69.812210;, + 9.154104;73.717827;68.902939;, + 7.998795;73.155823;69.069405;, + 6.809360;72.552437;69.361465;, + 7.049986;67.847763;68.938004;, + 7.229618;68.489220;68.942162;, + 8.453979;68.821220;68.766014;, + 8.808260;68.018349;68.671463;, + 7.845464;67.687729;68.801422;, + 6.485291;71.293625;68.760429;, + 7.674726;71.897003;68.468361;, + 7.571912;71.390457;68.356995;, + 6.382478;70.787079;68.649055;, + 9.031637;63.725613;67.823822;, + 7.882623;63.148247;68.257492;, + 7.099626;63.322628;68.406448;, + 6.819228;64.155365;68.361183;, + 7.054543;64.740326;68.286102;, + 7.855459;64.507843;68.125900;, + 8.998738;64.549225;67.816406;, + 9.627233;64.526329;67.588211;, + 5.131092;68.108627;68.910416;, + 5.325842;67.702225;68.891853;, + 5.150118;67.060791;68.905960;, + 4.776736;66.762360;68.945175;, + 5.157436;66.255524;68.850845;, + 4.911710;65.666992;68.895134;, + 3.957364;66.485794;69.114601;, + 3.926550;67.410515;69.067841;, + 4.664679;67.765022;68.960190;, + 14.086849;79.561020;64.637955;, + 16.739792;67.403618;50.887012;, + 16.461876;66.463646;50.675999;, + 16.355726;66.024963;50.538170;, + 16.463581;65.639847;50.705421;, + 16.634022;64.809120;50.940807;, + 16.577030;64.238647;50.971241;, + 16.362127;65.836792;52.110813;, + 16.681547;68.256050;51.076977;, + 15.875778;69.213470;44.900475;, + 15.339758;69.450462;45.349747;, + 14.734314;69.212395;45.168884;, + 15.497775;67.644539;44.621346;, + 15.366291;71.985199;59.394108;, + 16.084938;67.785751;55.123196;, + 15.997204;67.001724;56.228691;, + 15.774111;68.405617;58.417435;, + 15.414630;70.637657;60.014355;, + 15.681439;61.898857;45.735703;, + 16.101208;62.777939;45.304836;, + 16.427576;64.137360;44.826752;, + 15.902921;65.044144;44.833035;, + 17.351522;71.461693;50.544392;, + 17.612280;72.551018;49.791622;, + 17.782373;72.283302;49.454979;, + 17.592686;71.515564;49.979080;, + 17.436718;70.610649;50.363503;, + 17.837181;64.826424;44.666374;, + 17.570311;64.026939;44.611488;, + 17.330330;62.635960;45.039047;, + 17.619406;62.235477;45.405041;, + 17.818495;62.384628;45.580582;, + 17.756922;62.991528;45.373825;, + 17.733683;63.963326;44.954117;, + 17.780867;69.380302;44.897526;, + 17.910711;70.146683;45.105915;, + 17.434797;69.740105;44.662109;, + 17.097572;68.189659;44.315792;, + 17.601992;67.273705;44.342861;, + 17.809376;68.057755;44.480789;, + 17.720846;56.805744;49.610336;, + 17.718719;56.078396;49.090916;, + 17.483042;55.732864;49.276451;, + 17.485168;56.460213;49.795868;, + 14.713079;70.462608;46.232510;, + 15.318524;70.700668;46.413372;, + 15.588622;71.487747;47.478798;, + 17.653069;72.607475;48.042797;, + 17.146994;72.320404;47.474106;, + 16.881243;71.583923;46.387459;, + 17.413694;71.305359;45.955624;, + 17.820061;71.657677;46.520592;, + 17.747896;72.075859;47.314693;, + 17.834208;72.353806;47.703804;, + 17.718044;59.477318;47.236622;, + 17.852270;60.467724;47.270435;, + 17.789957;61.202515;46.749283;, + 17.592766;61.053162;46.572697;, + 17.509811;59.880875;47.002865;, + 16.299212;61.853733;46.266216;, + 15.889900;60.941624;46.644413;, + 16.134180;59.781609;47.083752;, + 16.547779;60.244560;47.006794;, + 16.681320;61.401821;46.549984;, + 17.117582;57.588127;47.207531;, + 16.701010;57.122021;47.273716;, + 16.763103;56.352184;47.652000;, + 17.173376;55.958496;48.038124;, + 17.398129;56.325546;47.880959;, + 17.404427;57.185337;47.428650;, + 15.577708;56.205627;47.969166;, + 15.913940;57.165806;47.545010;, + 15.846416;57.946342;47.180832;, + 15.590961;59.141663;46.797791;, + 14.731544;55.455399;47.439404;, + 9.944007;42.345741;53.625164;, + 7.573774;40.307079;54.648247;, + 6.769834;38.770535;57.926445;, + 7.394196;39.094028;59.898464;, + 8.561033;40.588070;59.654636;, + 10.306905;42.303234;56.659534;, + 2.555157;37.185844;65.011452;, + 2.527462;37.506966;67.308975;, + 3.211673;38.031998;67.529678;, + 4.682263;37.981155;65.199509;, + 4.102839;37.529453;63.242748;, + 7.830108;47.308811;43.157204;, + 8.022593;51.757496;43.185513;, + 7.039683;49.765636;40.291908;, + 8.164946;44.606380;41.254444;, + 9.203535;46.348259;49.153736;, + 8.237869;48.950886;46.050209;, + 8.045384;44.502201;46.021900;, + 7.734308;39.077587;48.033279;, + 6.040202;37.964451;49.232517;, + 5.149999;41.098293;49.664669;, + 6.686608;44.494156;50.192978;, + 8.039693;29.785124;47.506119;, + 8.868079;35.209740;45.489132;, + 9.493651;32.507309;43.848045;, + 9.384735;31.085709;38.438145;, + 8.113016;36.389206;37.566708;, + 7.058194;32.835922;36.246323;, + 5.142379;51.522896;39.552273;, + 2.333225;51.807980;39.149200;, + 3.941101;48.113850;38.322987;, + 4.373784;26.840841;52.409973;, + 5.886379;27.953976;51.289192;, + 14.509283;77.704041;61.829361;, + 14.829144;75.810089;60.518398;, + 14.457141;70.604607;45.675373;, + 12.688684;52.681652;46.818928;, + 10.078528;51.383022;45.418407;, + 9.778404;71.817146;67.674042;, + 9.873562;72.328529;67.772369;, + 10.981249;72.920631;67.524742;, + 11.939566;72.111282;66.787140;, + 11.526075;71.412788;66.828560;, + 10.472603;71.710754;67.467834;, + 12.814504;64.099892;66.268402;, + 11.872994;64.162216;67.085007;, + 11.465900;64.474258;67.163437;, + 11.967539;65.260712;66.830208;, + 12.713342;66.151749;66.249695;, + 13.153212;65.302979;65.766319;, + 5.910997;66.145882;68.879105;, + 5.536267;66.654190;68.999702;, + 6.332633;66.492447;68.869522;, + 6.881747;66.263695;68.781013;, + 6.722126;65.917046;68.748558;, + 5.105657;69.919693;68.927238;, + 5.005903;69.410423;68.822868;, + 4.554521;68.674232;68.849876;, + 3.824864;68.309135;68.969109;, + 3.435898;69.375824;69.355331;, + 4.265308;70.250198;69.340469;, + 11.952425;68.545883;67.245644;, + 11.282833;67.985580;67.780556;, + 10.590207;68.229599;68.132561;, + 10.232657;69.031830;68.220833;, + 10.730354;69.347672;67.888069;, + 11.757496;69.105743;67.264893;, + 6.267634;45.663696;67.791992;, + 5.887505;44.716919;67.550507;, + 4.262442;44.288372;68.208298;, + 4.642571;45.235153;68.449783;, + 10.565856;70.821953;67.907776;, + 11.600344;70.544380;67.228043;, + 11.577497;70.225883;67.223770;, + 10.562302;70.475075;67.861671;, + 9.881144;70.555244;68.220161;, + 7.618796;70.711578;68.750259;, + 6.440785;70.114388;68.970451;, + 5.973425;69.792030;69.041931;, + 6.395473;70.515007;68.889984;, + 7.586203;71.123924;68.610703;, + 8.342167;70.998123;68.542450;, + 11.872992;66.061752;67.182938;, + 11.325470;66.065163;67.525764;, + 11.958210;66.625931;67.309013;, + 12.654950;67.224754;66.799522;, + 12.717360;66.949631;66.694183;, + 8.395967;65.338531;68.297150;, + 8.551100;65.687355;68.321404;, + 9.643514;65.743866;67.987259;, + 10.244047;65.908348;67.834045;, + 9.534150;65.381676;67.974045;, + 6.352082;66.607925;68.646599;, + 5.557265;66.767700;68.786423;, + 5.935583;67.066292;68.770218;, + 6.730400;66.906517;68.630394;, + 10.497897;70.102104;67.500931;, + 10.455427;70.382629;67.493866;, + 11.464467;70.134789;66.847923;, + 11.506937;69.854263;66.854988;, + 7.623333;70.645973;68.558647;, + 8.354575;70.568634;68.310120;, + 8.397674;70.288345;68.319221;, + 7.862427;69.958893;68.556709;, + 6.658127;69.634361;68.798340;, + 6.462132;70.041153;68.809387;, + 12.478778;67.291313;66.688377;, + 11.803926;66.665207;67.208046;, + 11.268188;66.503914;67.438225;, + 11.617651;67.061974;67.315300;, + 12.303864;67.618729;66.799240;, + 8.336453;66.419510;68.373581;, + 9.286811;66.759315;68.210503;, + 10.010603;66.509720;67.920815;, + 9.593375;65.951813;67.955978;, + 8.497231;65.898521;68.278526;, + 7.964100;66.116623;68.406441;, + 17.060043;70.155487;47.524548;, + 16.977182;70.700005;48.118645;, + 17.139421;70.899750;48.289326;, + 17.416012;71.068329;47.941158;, + 17.545664;70.690262;47.136501;, + 17.351934;69.977158;46.890572;, + 17.221189;66.543564;45.306343;, + 16.988846;67.340813;45.524662;, + 16.845232;68.371811;45.875668;, + 16.939117;68.867996;46.195717;, + 17.341833;68.629349;45.660599;, + 17.480291;67.335907;45.122231;, + 16.981171;63.931744;46.212234;, + 16.808901;64.944427;45.835949;, + 16.940056;65.503990;45.698055;, + 17.325806;64.694969;45.653248;, + 17.333046;63.707901;46.045494;, + 17.373362;62.592293;47.044037;, + 17.533400;61.989571;47.233940;, + 17.538557;61.297504;47.813133;, + 17.377050;61.378471;48.161098;, + 17.084042;61.957218;48.121510;, + 16.952885;62.523624;47.585892;, + 17.067348;62.847736;47.248653;, + 17.756001;57.667091;48.205170;, + 17.726576;58.393188;48.722862;, + 17.667044;59.356384;48.625698;, + 17.687859;59.655956;48.204098;, + 17.756863;59.537712;47.829380;, + 17.765472;58.512043;47.733288;, + 17.164349;58.888443;50.137520;, + 16.997469;59.817486;50.241066;, + 16.910639;61.394268;50.541176;, + 16.963501;61.964878;50.507847;, + 17.146688;61.167274;50.192562;, + 17.353167;60.194298;49.885605;, + 17.382475;59.234547;49.939693;, + 17.046909;69.285706;49.834724;, + 16.730762;68.525681;49.726234;, + 16.445251;67.737488;49.665955;, + 16.455748;67.565254;49.576904;, + 16.635740;67.426628;49.977383;, + 16.941389;68.358887;50.174927;, + 17.667368;71.775742;48.843681;, + 17.479918;71.554535;48.518509;, + 17.312452;71.293510;48.824539;, + 17.073994;70.820007;49.096962;, + 17.052391;70.317307;49.319000;, + 17.478302;71.012024;49.371750;, + 16.150881;66.980598;49.101681;, + 15.982324;66.633751;48.735458;, + 15.966154;66.336823;48.616936;, + 16.051481;66.244766;48.838696;, + 16.220257;66.411118;49.371330;, + 16.303486;66.850029;49.515789;, + 16.242199;65.664818;49.415100;, + 16.045393;65.511154;48.894043;, + 15.967184;65.262131;48.876595;, + 16.014877;65.163132;49.153240;, + 16.157045;65.036949;49.353294;, + 16.306154;65.289612;49.597702;, + 16.606468;64.863365;50.058353;, + 16.483816;64.613602;49.802601;, + 16.489483;64.287704;49.843987;, + 16.683701;63.725044;49.778568;, + 16.907532;63.235886;49.945076;, + 16.835964;64.048317;50.266247;, + 17.332932;60.928143;48.799614;, + 17.415449;60.700314;49.200974;, + 17.131311;61.599758;49.547829;, + 16.866329;62.064793;49.391998;, + 16.881441;61.620750;49.208321;, + 16.931652;61.430393;48.922810;, + 17.023394;61.495392;48.765743;, + 15.594433;64.410210;48.011654;, + 15.355221;64.746971;48.103077;, + 15.109011;64.845505;48.207409;, + 15.310225;65.020020;48.325905;, + 15.597193;65.150154;48.319054;, + 15.682936;65.398903;48.325111;, + 15.683491;65.459961;48.141235;, + 15.730268;65.022964;47.637424;, + 15.710956;64.437210;47.602276;, + 15.693200;66.367973;47.512394;, + 15.739593;65.954384;47.004478;, + 15.709971;65.462585;47.465916;, + 15.713370;65.873161;48.000294;, + 15.703137;66.170380;48.126865;, + 16.046690;70.309875;48.304401;, + 16.365913;70.720009;48.027470;, + 16.440777;70.179176;47.432697;, + 16.279011;69.702744;47.006084;, + 15.989321;69.724388;47.707878;, + 16.234823;68.397461;45.749371;, + 16.338247;67.364136;45.404732;, + 16.169886;66.752342;45.468372;, + 15.970524;66.999779;45.793983;, + 15.847556;67.422462;46.281384;, + 15.798820;67.779671;46.594791;, + 15.930688;68.405243;46.444931;, + 15.841449;64.678902;46.459305;, + 15.926772;65.184181;46.013538;, + 16.207218;64.937843;45.725086;, + 16.383900;63.939720;46.142395;, + 16.237436;63.590012;46.468613;, + 15.975430;64.082863;46.497070;, + 16.041712;62.989491;47.503284;, + 16.330074;62.510639;47.489380;, + 16.479687;61.953060;48.036350;, + 16.332567;61.851406;48.240868;, + 16.103371;62.236324;48.207397;, + 16.005190;62.652355;48.086254;, + 15.959622;62.895470;47.927872;, + 15.710892;68.402351;48.685627;, + 15.648136;67.764122;48.843464;, + 15.852196;67.748260;49.593555;, + 16.091112;68.539047;49.658321;, + 16.056801;69.119179;49.475651;, + 15.880638;68.966606;49.253052;, + 16.424000;70.874527;49.045010;, + 16.701757;71.314072;48.751896;, + 16.462385;71.171959;48.547527;, + 16.184629;70.732407;48.840641;, + 15.699827;66.642441;48.652946;, + 15.824578;66.982887;49.023090;, + 15.784410;67.181129;49.142185;, + 15.634274;67.185043;48.375042;, + 15.615120;66.834618;48.047215;, + 15.674185;65.271629;48.793575;, + 15.204105;65.204224;48.722855;, + 14.835443;65.032219;48.968830;, + 15.208019;64.988647;49.170685;, + 15.676402;65.164146;49.081577;, + 15.688455;64.774559;49.574314;, + 15.234891;64.553688;49.607170;, + 14.902706;64.137657;49.657894;, + 15.293420;64.013451;49.696068;, + 15.840926;64.271202;49.771698;, + 15.903778;64.616272;49.700668;, + 16.278091;61.394108;48.852608;, + 16.220278;61.579231;49.139591;, + 15.982187;61.957813;49.102505;, + 16.039999;61.772690;48.815525;, + 15.430898;63.808681;48.458256;, + 15.043995;64.044220;48.320808;, + 15.364042;64.229958;48.236816;, + 15.832829;63.853062;48.277557;, + 15.865870;63.597157;48.425735;, + 15.954613;62.957794;48.812828;, + 15.834729;63.048027;49.053604;, + 15.432328;63.369987;49.007088;, + 15.134183;63.530445;48.836395;, + 15.431887;63.570396;48.738605;, + 15.849918;63.319706;48.668522;, + 16.096088;62.618446;49.327629;, + 16.199696;63.113098;49.537724;, + 15.912754;63.623280;49.678589;, + 15.391949;63.393970;49.504761;, + 15.060607;63.170467;49.313648;, + 15.415560;63.228004;49.333504;, + 15.838570;62.949089;49.349140;, + 13.758102;64.727051;47.977783;, + 14.168221;64.570992;47.942337;, + 13.829064;64.330490;47.964046;, + 13.418945;64.486542;47.999493;, + 13.383851;64.565086;48.723537;, + 13.733362;64.821175;48.841949;, + 14.082317;65.018639;48.594540;, + 13.738489;64.867424;48.405872;, + 13.395164;64.634613;48.428219;, + 13.432858;63.849289;49.209923;, + 13.461254;63.706188;49.357521;, + 13.801391;63.932621;49.534199;, + 14.101580;64.368164;49.509857;, + 13.754813;64.418907;49.285202;, + 13.426229;64.126465;49.161942;, + 13.523585;63.991501;48.212700;, + 13.930980;63.829620;48.172535;, + 14.306720;63.583447;48.318527;, + 13.970022;63.502201;48.416882;, + 13.564429;63.599464;48.515327;, + 13.493731;63.842590;48.457138;, + 13.564157;63.334648;48.762100;, + 13.975533;63.274899;48.680103;, + 14.334991;63.163155;48.878448;, + 13.965490;63.106457;48.948494;, + 13.561500;63.215389;48.942604;, + 13.941969;62.948902;49.207970;, + 14.276101;63.179287;49.390675;, + 13.876339;63.319157;49.397709;, + 13.542208;63.088772;49.215008;, + 14.751657;54.643333;55.040348;, + 14.590873;52.802021;53.698296;, + 13.499039;51.207058;56.417542;, + 13.273923;52.062576;58.359673;, + 14.262792;54.452450;57.104122;, + 14.688508;68.117760;63.612282;, + 14.535710;70.296165;64.247795;, + 14.997487;70.420540;62.992817;, + 15.420611;68.186958;61.412601;, + 15.123456;66.809219;62.450409;, + 15.289042;58.842800;58.182579;, + 15.320647;60.373241;59.487785;, + 15.545645;62.728092;59.776886;, + 15.818025;64.100548;58.725273;, + 16.026705;62.698605;56.534737;, + 16.058146;60.483253;55.162083;, + 15.694791;59.052357;56.106335;, + 16.253756;62.572739;52.645172;, + 16.384674;63.355892;51.544556;, + 16.562685;61.758488;50.400814;, + 16.575487;60.184284;50.041332;, + 16.380493;60.348454;51.283993;, + 9.754243;54.576092;68.034088;, + 8.865682;56.214470;68.792267;, + 9.070836;58.376186;68.852272;, + 10.135895;59.249851;68.473312;, + 11.100456;59.171497;67.685600;, + 10.923957;56.659454;67.306381;, + 3.035042;66.059219;69.545708;, + 2.344930;66.840546;69.764442;, + 1.661030;68.905617;69.955627;, + 1.920111;69.821587;69.985138;, + 2.596213;69.424149;69.710426;, + 3.034613;68.351173;69.428009;, + 3.051194;67.427612;69.470802;, + 2.345155;71.696121;70.544289;, + 1.677019;72.093285;70.835541;, + 1.282981;72.975906;71.066788;, + 3.189397;72.557281;70.563393;, + 3.979451;64.606781;69.322395;, + 4.936673;63.796482;69.076340;, + 5.221594;62.962933;69.143433;, + 4.610626;62.101410;69.479050;, + 4.010058;63.243977;69.496239;, + 6.097832;62.362251;69.253105;, + 6.886958;62.188259;69.118797;, + 6.223436;61.054867;69.396408;, + 5.444539;60.484348;69.611397;, + 5.470115;61.491180;69.538467;, + 10.069182;62.560196;68.243744;, + 9.631428;61.319351;68.567192;, + 8.452230;60.522438;69.069862;, + 7.744656;61.197292;69.140694;, + 8.403069;62.278648;68.682831;, + 9.548402;62.866348;68.253067;, + 11.649054;61.247047;67.476128;, + 10.733654;61.313049;68.317123;, + 11.162767;62.546486;67.962914;, + 12.078169;62.480480;67.121918;, + -11.134334;90.849747;67.548500;, + 11.278329;90.396461;67.764954;, + 30.643127;-31.721945;45.652527;, + -30.350075;-31.719879;45.630089;, + -25.565304;-9.924385;26.239328;, + -30.142681;-11.598551;37.311020;, + -17.647087;-15.421692;74.962234;, + -17.647087;-15.421692;74.962234;, + 0.141491;-9.487318;27.256748;, + -16.966074;-26.227253;76.131516;, + -33.277031;-27.463528;63.505905;, + -34.720058;-12.484819;48.088928;, + -31.930122;-26.942392;51.688797;, + -34.720058;-12.484819;48.088928;, + -24.287395;-54.514771;54.652374;, + -24.509207;-50.845016;55.877068;, + -25.494289;-63.762321;51.551601;, + -29.140186;-40.740757;54.994888;, + -17.688755;-53.253067;77.227638;, + -26.760902;-31.939959;72.082443;, + -16.966076;-27.937576;75.155312;, + -24.332394;-52.295708;66.403946;, + -32.183464;-29.173838;63.505913;, + -32.056793;-28.913269;57.597359;, + -22.127073;-50.465675;31.947027;, + -20.920321;-28.152065;33.507904;, + -26.425222;-28.402384;42.598354;, + -31.930124;-28.652702;51.688805;, + 0.141491;-50.060425;24.873173;, + -11.193696;-29.430769;30.196033;, + -16.966074;-26.227253;76.131516;, + -30.976030;-51.338348;55.580246;, + -26.551552;-50.902012;43.763638;, + -34.720058;-12.484819;48.088928;, + -26.551552;-50.902012;43.763638;, + -31.930124;-28.652702;51.688805;, + -23.021046;22.545492;38.817097;, + -34.612175;17.843525;39.827816;, + -34.612186;-1.674418;34.789925;, + -34.666122;-7.473567;40.417480;, + -34.612183;9.271671;35.005108;, + 0.141491;-28.374607;32.989838;, + -16.294899;25.090145;38.449425;, + -9.139874;26.594124;45.452682;, + -14.724298;0.438756;65.826607;, + -19.722260;-1.585354;65.224693;, + -13.398946;24.794630;34.246376;, + -16.294899;25.090145;38.449425;, + -18.686239;24.355274;46.119999;, + -19.918121;19.050785;53.541157;, + -9.748887;22.893982;32.226307;, + 0.141491;22.863007;31.002354;, + -6.363874;23.153360;30.623175;, + -10.778057;22.307632;52.895199;, + -11.429913;16.434713;56.577648;, + -11.545969;16.822830;57.059074;, + -20.110298;5.311386;60.448208;, + -21.278301;13.060091;57.191551;, + -15.815639;16.328318;56.204815;, + -30.997221;-35.165527;63.780437;, + -32.118473;-39.484562;59.515316;, + -29.846169;-43.697968;61.553284;, + -29.388227;-40.601273;63.974194;, + -27.854467;-30.229647;72.082443;, + -29.736418;-23.496841;70.352409;, + -30.377008;-28.942865;68.092697;, + 25.849533;-9.924379;26.239330;, + 30.426910;-11.598546;37.311020;, + 17.931316;-15.421690;74.962234;, + 17.931316;-15.421690;74.962234;, + 17.250303;-26.227251;76.131516;, + 33.561260;-27.463524;63.505905;, + 32.214352;-26.942389;51.688797;, + 35.004288;-12.484816;48.088928;, + 24.793436;-50.845009;55.877064;, + 24.562241;-54.514763;54.652370;, + 25.705898;-63.638660;51.490501;, + 29.424416;-40.740753;54.994888;, + 17.972984;-53.253063;77.227638;, + 17.250305;-27.937574;75.155312;, + 27.045132;-31.939955;72.082443;, + 24.616623;-52.295704;66.403946;, + 32.467693;-29.173834;63.505913;, + 32.341022;-28.913265;57.597359;, + 21.204550;-28.152060;33.507904;, + 22.411303;-50.465668;31.947027;, + 26.709452;-28.402378;42.598354;, + 32.214352;-28.652699;51.688805;, + 11.477925;-29.430763;30.196033;, + 17.250303;-26.227251;76.131516;, + 31.260260;-51.338341;55.580242;, + 26.835781;-50.902004;43.763638;, + 35.004288;-12.484816;48.088928;, + 35.004288;-12.484816;48.088928;, + 26.835781;-50.902004;43.763638;, + 32.214352;-28.652699;51.688805;, + 23.305275;22.545494;38.817101;, + 34.896404;17.843529;39.827820;, + 34.896416;-1.674414;34.789925;, + 34.950352;-7.473563;40.417480;, + 34.896412;9.271675;35.005108;, + 16.579128;25.090147;38.449429;, + 15.005043;0.438756;66.317261;, + 20.006489;-1.585352;65.224693;, + 13.683175;24.794634;34.246380;, + 16.579128;25.090147;38.449429;, + 18.970469;24.355276;46.119999;, + 20.202351;19.050787;53.541157;, + 10.033116;22.893986;32.226311;, + 6.648103;23.153364;30.623177;, + 11.062286;22.307634;52.895199;, + 11.714142;16.434715;57.068302;, + 11.825384;16.819580;57.419716;, + 20.394527;5.311388;60.448208;, + 21.562531;13.060093;57.191551;, + 16.099869;16.328320;56.204815;, + 31.281450;-35.165524;63.780437;, + 32.402702;-39.484558;59.515316;, + 30.130398;-43.697964;61.553280;, + 29.672457;-40.601269;63.974190;, + 28.138697;-30.229643;72.082443;, + 30.020647;-23.496838;70.352409;, + 30.661238;-28.942862;68.092697;, + -29.135050;-70.748413;50.137466;, + -37.889961;-84.783730;46.673920;, + -41.760616;-103.151527;46.673916;, + -43.113548;-194.904678;46.172501;, + -8.177140;-173.738678;44.589825;, + -11.967894;-201.991714;48.101704;, + -35.253540;-336.022400;70.615288;, + -37.752792;-344.579865;81.882141;, + -36.447479;-347.590393;81.989037;, + -32.971939;-348.840668;75.068268;, + -30.483822;-349.513580;64.542366;, + -30.277090;-349.285034;45.291451;, + -30.731056;-349.140869;32.597919;, + -44.998409;-349.114563;30.769142;, + -47.579365;-349.201599;38.020824;, + -49.480873;-349.253357;42.813530;, + -53.720398;-349.475220;61.544106;, + -54.063526;-348.805878;72.346741;, + -50.995792;-347.566376;80.111809;, + -50.995792;-347.566376;80.111809;, + -36.447479;-347.590393;81.989037;, + -50.401588;-344.387238;80.484764;, + -30.811893;-349.229279;40.184383;, + -25.375702;-326.803925;43.166012;, + -25.361750;-319.393433;40.717945;, + -48.911896;-319.507538;43.118351;, + -53.350098;-311.978485;48.287319;, + -17.516390;-311.220673;43.257233;, + -4.658672;-143.854736;42.160900;, + 0.100870;-118.350113;30.024460;, + -21.858656;-301.316620;40.265823;, + -48.634773;-301.610474;45.850082;, + -15.366711;-254.579529;44.539597;, + -42.656788;-120.929993;49.355263;, + -12.445428;-224.292206;47.498665;, + -47.093388;-334.957916;67.363968;, + -46.985233;-330.924652;60.877213;, + -52.006966;-325.347748;41.525673;, + -32.159611;-328.701721;61.163334;, + -37.431126;-348.022339;28.784142;, + -37.431126;-348.022339;28.784142;, + -36.497189;-333.552704;31.073109;, + -43.124073;-327.569916;63.163582;, + -37.508007;-327.823730;63.943375;, + -32.027699;-330.586823;57.891068;, + -30.829683;-335.353180;51.935188;, + -30.289175;-336.679779;37.674358;, + -30.290890;-334.903290;34.539791;, + -46.926067;-335.870056;46.077358;, + -48.218380;-333.043976;53.745155;, + -33.346500;-333.002716;32.172970;, + -36.497189;-333.552704;31.073109;, + -32.159611;-328.701721;61.163334;, + -47.738998;-332.348511;57.905354;, + -46.985233;-330.924652;60.877213;, + -39.092888;-333.629852;32.004887;, + -42.781075;-334.302216;33.467194;, + -30.620396;-337.228912;46.045479;, + -44.659866;-335.766113;36.478382;, + -46.011299;-336.928101;39.876133;, + -30.907063;-337.423279;41.478359;, + -11.541974;-184.862228;45.883656;, + -41.620197;-179.552460;46.748608;, + -30.082495;-176.538712;60.086678;, + -26.290127;-159.034851;62.359310;, + -22.042976;-120.057648;62.105083;, + -35.127117;-120.041656;57.534679;, + -24.386381;-143.741119;62.231689;, + -37.002441;-178.638748;55.923828;, + -41.142269;-130.155960;39.554146;, + -41.240711;-158.109726;38.305466;, + -42.656788;-120.929993;49.355263;, + -41.014412;-121.305328;41.175835;, + -41.620197;-179.552460;46.748608;, + -39.826946;-174.615158;38.212673;, + -52.006966;-325.347748;41.525673;, + -25.375702;-326.803925;43.166012;, + -27.052189;-63.743755;51.457161;, + -30.899126;-70.822411;49.935226;, + -3.998070;-70.562149;67.711349;, + -14.078679;-70.624992;36.359470;, + -20.407236;-70.663857;37.704983;, + -25.309130;-70.709183;43.680515;, + -25.333038;-70.735931;56.047955;, + -20.123388;-70.712914;61.395264;, + -29.135050;-70.748413;50.137466;, + -29.135050;-70.748413;50.137466;, + -10.657997;-70.656097;64.141533;, + -18.580341;-63.659996;42.089684;, + 0.102538;-63.638348;37.841175;, + -3.877978;-63.520813;66.895554;, + -18.598015;-63.628139;61.096786;, + -25.494289;-63.762321;51.551601;, + -25.494289;-63.762321;51.551601;, + 0.102538;-63.445549;68.379417;, + -3.877978;-63.520813;66.895554;, + -4.034785;-63.594818;67.636086;, + -3.998070;-70.562149;67.711349;, + 0.100870;-70.535385;69.452461;, + -3.855402;-70.482147;66.867348;, + 0.100870;-80.880516;69.142647;, + 0.100870;-105.710800;64.621178;, + 0.100870;-105.624802;63.766800;, + -15.278575;-278.076538;41.723305;, + -47.843460;-278.215302;43.605659;, + -47.021446;-254.582092;45.376308;, + -44.766525;-223.910660;41.391571;, + -11.671675;-229.887054;44.415508;, + -13.444867;-241.724686;43.812698;, + -12.848580;-215.346298;46.368130;, + -42.281010;-210.077301;42.464180;, + 0.100870;-70.522980;34.969410;, + 38.087563;-84.783722;46.673916;, + 29.332651;-70.748413;50.137463;, + 41.958218;-103.151527;46.673912;, + 43.311150;-194.904678;46.172497;, + 8.374740;-173.738678;44.589821;, + 12.165494;-201.991699;48.101700;, + 35.451141;-336.022369;70.615288;, + 37.950394;-344.579834;81.882141;, + 36.645081;-347.590363;81.989037;, + 33.169540;-348.840668;75.068268;, + 30.681425;-349.513580;64.542366;, + 30.474693;-349.285034;45.291451;, + 30.928658;-349.140839;32.597916;, + 45.196014;-349.114563;30.769142;, + 47.776966;-349.201569;38.020821;, + 49.678474;-349.253357;42.813526;, + 53.918003;-349.475220;61.544106;, + 54.261131;-348.805878;72.346741;, + 51.193394;-347.566376;80.111809;, + 51.193394;-347.566376;80.111809;, + 36.645081;-347.590363;81.989037;, + 50.599190;-344.387238;80.484764;, + 31.009497;-349.229279;40.184380;, + 25.573301;-326.803894;43.166008;, + 25.559353;-319.393433;40.717941;, + 53.547699;-311.978485;48.287315;, + 49.109501;-319.507538;43.118351;, + 17.713989;-311.220673;43.257229;, + 4.856273;-143.854736;42.160900;, + 22.056257;-301.316620;40.265823;, + 48.832378;-301.610474;45.850079;, + 15.564311;-254.579514;44.539597;, + 42.854393;-120.929985;49.355259;, + 12.643028;-224.292191;47.498661;, + 47.290989;-334.957916;67.363968;, + 47.182835;-330.924622;60.877216;, + 52.204571;-325.347748;41.525669;, + 37.628727;-348.022308;28.784140;, + 37.628727;-348.022308;28.784140;, + 36.694790;-333.552673;31.073109;, + 43.321674;-327.569916;63.163586;, + 37.705608;-327.823700;63.943378;, + 32.225300;-330.586823;57.891064;, + 31.027285;-335.353180;51.935184;, + 30.486776;-336.679749;37.674358;, + 30.488491;-334.903290;34.539787;, + 47.123669;-335.870056;46.077354;, + 48.415981;-333.043976;53.745152;, + 33.544102;-333.002716;32.172966;, + 36.694790;-333.552673;31.073109;, + 32.357216;-328.701721;61.163334;, + 47.936604;-332.348511;57.905350;, + 47.182835;-330.924622;60.877216;, + 39.290493;-333.629852;32.004887;, + 42.978680;-334.302216;33.467194;, + 30.817997;-337.228882;46.045475;, + 44.857464;-335.766083;36.478382;, + 46.208900;-336.928101;39.876129;, + 31.104664;-337.423279;41.478355;, + 11.739574;-184.862213;45.883652;, + 41.817802;-179.552460;46.748608;, + 30.280094;-176.538696;60.086674;, + 26.487728;-159.034851;62.359303;, + 22.240578;-120.057648;62.105080;, + 35.324718;-120.041656;57.534676;, + 24.583982;-143.741119;62.231686;, + 37.200043;-178.638748;55.923824;, + 41.339870;-130.155960;39.554138;, + 41.438313;-158.109711;38.305462;, + 42.854393;-120.929985;49.355259;, + 41.212013;-121.305321;41.175831;, + 41.817802;-179.552460;46.748608;, + 40.024551;-174.615143;38.212673;, + 52.204571;-325.347748;41.525669;, + 25.573301;-326.803894;43.166008;, + 32.357216;-328.701721;61.163334;, + 31.096729;-70.822411;49.935223;, + 27.249788;-63.743755;51.457157;, + 4.195670;-70.562141;67.711349;, + 14.276281;-70.624985;36.359463;, + 20.604836;-70.663849;37.704975;, + 25.506731;-70.709175;43.680508;, + 25.530638;-70.735931;56.047947;, + 20.320988;-70.712906;61.395260;, + 29.332651;-70.748413;50.137463;, + 29.332651;-70.748413;50.137463;, + 10.855597;-70.656097;64.141525;, + 18.773201;-63.677704;42.028572;, + 4.075578;-63.520775;66.895554;, + 18.770283;-63.633057;61.106705;, + 25.705898;-63.638660;51.490501;, + 25.705898;-63.638660;51.490501;, + 4.232385;-63.594814;67.636078;, + 4.075578;-63.520775;66.895554;, + 4.195670;-70.562141;67.711349;, + 4.053002;-70.482147;66.867340;, + 15.476175;-278.076508;41.723305;, + 48.041061;-278.215271;43.605659;, + 47.219048;-254.582077;45.376305;, + 44.964127;-223.910675;41.391571;, + 11.869275;-229.887054;44.415504;, + 13.642469;-241.724686;43.812695;, + 13.046181;-215.346298;46.368130;, + 42.478611;-210.077286;42.464176;, + 9.646603;26.610264;45.446602;, + 33.395126;-1.314395;35.941048;, + 42.876431;-10.391958;41.524540;, + 61.100998;-12.097787;52.234310;, + 33.931534;-10.798729;47.691635;, + 33.395126;-1.314395;35.941048;, + 78.460449;-9.570584;65.570358;, + 73.386116;1.385114;82.625687;, + 78.295067;-4.036124;86.370949;, + 81.882507;-19.600512;68.102516;, + 87.136154;-19.603304;74.055412;, + 86.196594;-18.624458;77.084518;, + 80.318741;-7.420647;85.493256;, + 67.389786;-1.205821;78.118034;, + 70.006081;2.367340;76.967026;, + 77.780144;-0.616348;69.076759;, + 78.460449;-9.570584;65.570358;, + 75.694405;-15.631040;66.051804;, + 71.219742;-15.793794;69.989906;, + 68.045258;-14.292754;73.173157;, + 66.651627;-8.248512;76.491966;, + 73.890327;2.056242;73.440269;, + 70.006081;2.367340;76.967026;, + 69.084702;6.252669;77.456337;, + 75.694405;-15.631040;66.051804;, + 75.774590;-18.309954;63.527412;, + 66.651627;-8.248512;76.491966;, + 86.261154;-12.489821;78.381943;, + 82.521919;-17.837069;80.497223;, + 114.749481;-29.371605;104.351402;, + 79.183868;-11.467402;85.242088;, + 79.655968;-17.333593;83.765129;, + 110.916962;-20.728716;110.111130;, + 80.318741;-7.420647;85.493256;, + 86.196594;-18.624458;77.084518;, + 82.789978;-6.610463;83.296829;, + 80.318741;-7.420647;85.493256;, + 84.665817;-9.600757;93.965752;, + 105.883774;-28.288433;93.625610;, + 100.601974;-16.327637;102.138657;, + 93.242905;-25.622953;81.159538;, + 86.196594;-18.624458;77.084518;, + 86.199554;-6.060757;79.316513;, + 51.500221;-7.577340;65.697365;, + 33.477127;16.479158;40.343475;, + 33.578400;13.114620;48.755165;, + 33.569466;8.843540;35.935562;, + 114.749481;-29.371605;104.351402;, + 116.328888;-21.406776;103.886078;, + 114.749481;-29.371605;104.351402;, + 110.432236;-25.897305;108.404945;, + 114.547729;-31.794006;101.703148;, + 110.916962;-20.728716;110.111130;, + 110.916962;-20.728716;110.111130;, + 117.792206;-32.974083;105.142754;, + 120.240417;-32.382523;107.405258;, + 120.240417;-32.382523;107.405258;, + 119.345352;-28.410704;105.006744;, + 120.240417;-32.382523;107.405258;, + 115.310875;-21.371449;114.672195;, + 120.625252;-22.188108;107.598892;, + 128.789810;-29.466074;108.954926;, + 115.310875;-21.371449;114.672195;, + 114.274811;-23.003649;117.528297;, + 117.859741;-27.379353;126.710335;, + 120.613640;-25.185886;123.257240;, + 121.760422;-25.243605;123.489906;, + 114.847473;-23.354944;126.325142;, + 115.773735;-23.653730;128.726898;, + 120.118660;-28.808155;129.262100;, + 118.315994;-26.222034;131.904175;, + 120.118660;-28.808155;129.262100;, + 117.369904;-31.079527;128.957718;, + 118.686279;-31.174704;132.509644;, + 120.607414;-29.430899;132.556305;, + 119.351463;-27.770924;134.521164;, + 120.230301;-29.213165;134.837173;, + 137.268311;-36.747177;118.004539;, + 130.886734;-24.224178;128.467072;, + 129.463760;-23.354002;127.461098;, + 132.345215;-26.909451;126.571350;, + 131.403183;-26.611431;125.127594;, + 132.198166;-25.013567;129.446793;, + 133.363693;-27.150629;127.933983;, + 133.465668;-25.219961;130.170334;, + 134.645630;-27.372400;128.641541;, + 134.095200;-25.443157;131.157074;, + 135.557129;-28.123676;129.259583;, + 135.087219;-26.605450;132.444199;, + 136.416260;-29.042286;130.719208;, + 136.310669;-27.313053;133.104141;, + 137.309525;-29.130545;131.811081;, + 136.930222;-27.776287;134.007202;, + 138.067566;-29.848610;132.534195;, + 137.163391;-28.031139;134.882431;, + 138.629425;-30.705997;132.982819;, + 138.097382;-29.210182;136.039948;, + 139.375854;-31.531094;134.386230;, + 139.425034;-29.698851;136.370346;, + 140.178970;-31.048899;135.399673;, + 140.258026;-30.001667;136.269287;, + 140.513062;-30.455763;135.941559;, + 133.326996;-27.869246;126.520409;, + 134.998978;-30.947582;124.347214;, + 133.524338;-30.337019;122.600365;, + 135.090698;-28.901239;127.885551;, + 136.426865;-31.351122;126.151329;, + 136.754562;-29.240726;128.910980;, + 138.107239;-31.708241;127.158394;, + 137.655624;-29.584154;130.208908;, + 139.331543;-32.657040;128.033676;, + 139.067566;-31.050646;131.939789;, + 140.591125;-33.844181;129.962296;, + 140.683243;-31.965866;132.894485;, + 141.828308;-34.049400;131.412170;, + 141.569046;-32.582588;134.092957;, + 142.872879;-34.958260;132.404327;, + 141.965546;-32.937801;135.216400;, + 143.646179;-36.004208;133.038742;, + 143.291046;-34.413788;136.780243;, + 144.756668;-37.074436;134.884445;, + 144.992767;-35.061703;137.326050;, + 145.857040;-36.609371;136.213287;, + 146.025253;-35.446705;137.282303;, + 146.317627;-35.967274;136.906616;, + 135.283035;-31.410269;123.908699;, + 136.889267;-34.388729;121.786079;, + 135.487198;-33.834320;120.160095;, + 136.918472;-32.390182;125.135963;, + 138.202103;-34.760567;123.442123;, + 138.471878;-32.702595;126.052612;, + 139.771439;-35.090023;124.340836;, + 139.296295;-33.022293;127.247002;, + 140.906357;-35.995464;125.122398;, + 140.587006;-34.422878;128.824356;, + 142.050705;-37.125763;126.892921;, + 142.091629;-35.292908;129.670227;, + 143.191742;-37.308819;128.222427;, + 142.901459;-35.877598;130.768753;, + 144.154083;-38.176163;129.119446;, + 143.251007;-36.212845;131.812622;, + 144.865631;-39.179722;129.685654;, + 144.463196;-37.624027;133.234940;, + 145.871307;-40.198315;131.383316;, + 146.060104;-38.237057;133.695831;, + 146.890518;-39.734459;132.609009;, + 147.036926;-38.603104;133.622391;, + 147.317841;-39.106766;133.255463;, + 136.857193;-34.692177;121.075745;, + 138.085999;-37.138863;119.175186;, + 138.106750;-35.513153;121.891022;, + 139.088989;-37.460236;120.374466;, + 139.315872;-35.774200;122.489632;, + 140.310577;-37.735165;120.957130;, + 139.940460;-36.049793;123.361938;, + 141.172485;-38.492016;121.459724;, + 140.897690;-37.228283;124.465363;, + 142.017715;-39.448486;122.736076;, + 142.053253;-37.953835;124.992500;, + 142.895447;-39.609592;123.696373;, + 142.660355;-38.449345;125.780983;, + 143.619232;-40.337288;124.304420;, + 142.909821;-38.739342;126.569069;, + 144.145706;-41.176258;124.664856;, + 145.379715;-40.473606;125.913101;, + 143.807114;-39.925308;127.555336;, + 144.885223;-42.039631;125.897728;, + 145.050308;-40.431152;127.779945;, + 145.686615;-41.660812;126.807167;, + 145.817383;-40.728752;127.636574;, + 146.032715;-41.142326;127.308174;, + 124.282539;-24.769093;125.526192;, + 108.661095;-18.210699;110.956673;, + 113.002747;-28.165403;111.418968;, + 115.310875;-21.371449;114.672195;, + 111.886719;-19.639212;113.723465;, + 128.789810;-29.466074;108.954926;, + 41.310238;-5.151076;57.811226;, + 33.733215;8.483885;56.324486;, + 33.266479;-1.659648;55.141335;, + 33.266479;-1.659648;55.141335;, + -33.285355;-1.230055;35.845985;, + -60.913422;-12.097776;52.234310;, + -42.688854;-10.391947;41.524540;, + -33.422455;-6.066209;41.124596;, + -33.602604;-10.886051;47.766304;, + -78.272881;-9.570575;65.570358;, + -73.198547;1.385122;82.625679;, + -78.107506;-4.036117;86.370941;, + -86.948593;-19.603292;74.055412;, + -81.694946;-19.600500;68.102516;, + -86.009033;-18.624449;77.084511;, + -80.131180;-7.420639;85.493248;, + -67.202217;-1.205813;78.118034;, + -69.818512;2.367348;76.967026;, + -77.592583;-0.616339;69.076759;, + -78.272881;-9.570575;65.570358;, + -75.506836;-15.631029;66.051804;, + -71.032173;-15.793784;69.989906;, + -67.857689;-14.292745;73.173157;, + -66.464066;-8.248504;76.491966;, + -73.702766;2.056248;73.440269;, + -68.897133;6.252676;77.456337;, + -69.818512;2.367348;76.967026;, + -75.587021;-18.309942;63.527412;, + -75.506836;-15.631029;66.051804;, + -66.464066;-8.248504;76.491966;, + -86.073555;-12.696040;78.345314;, + -82.334358;-17.837059;80.497215;, + -114.561913;-29.371595;104.351395;, + -78.996300;-11.467393;85.242081;, + -79.468399;-17.333584;83.765121;, + -80.131180;-7.420639;85.493248;, + -85.469383;-14.398664;96.109703;, + -78.996300;-11.467393;85.242081;, + -86.009033;-18.624449;77.084511;, + -82.859459;-6.312282;83.425949;, + -99.563057;-17.848322;102.450645;, + -110.729401;-20.728708;110.111122;, + -105.696213;-28.288424;93.625603;, + -93.055344;-25.622944;81.159531;, + -86.009033;-18.624449;77.084511;, + -86.011993;-6.060749;79.316505;, + -51.312645;-7.577330;65.697365;, + -33.326355;16.538502;40.337154;, + -33.377022;12.971798;48.765106;, + -33.380333;8.824398;35.941063;, + -114.561913;-29.371595;104.351395;, + -116.141319;-21.406767;103.886070;, + -114.561913;-29.371595;104.351395;, + -110.244675;-25.897297;108.404938;, + -114.360168;-31.793995;101.703140;, + -110.729401;-20.728708;110.111122;, + -110.729401;-20.728708;110.111122;, + -118.763100;-32.416569;106.890343;, + -117.604637;-32.974075;105.142746;, + -119.195221;-22.221508;107.119102;, + -118.763100;-32.416569;106.890343;, + -118.763100;-32.416569;106.890343;, + -115.208687;-21.985653;115.587814;, + -128.864243;-29.984035;109.850922;, + -115.208687;-21.985653;115.587814;, + -114.103012;-23.569595;118.313278;, + -117.563560;-27.690514;126.991264;, + -120.423470;-25.533827;123.678185;, + -121.581490;-25.569689;123.884338;, + -114.556931;-23.727386;126.708763;, + -115.458870;-23.961578;128.988220;, + -119.802361;-29.029490;129.383438;, + -117.964737;-26.420248;131.961685;, + -120.245399;-29.574646;132.518158;, + -118.961952;-27.895647;134.431473;, + -119.833649;-29.315147;134.705521;, + -137.255630;-36.934776;118.303642;, + -131.314377;-26.758501;125.303482;, + -133.322495;-24.425945;126.440849;, + -129.349152;-23.487917;127.596153;, + -130.768127;-24.314178;128.528564;, + -132.245651;-27.011766;126.667183;, + -132.075287;-25.062017;129.438324;, + -133.256104;-27.208897;127.952965;, + -133.347275;-25.234171;130.110321;, + -134.542770;-27.396519;128.609299;, + -133.969086;-25.426950;131.042328;, + -135.450180;-28.119780;129.179245;, + -134.944672;-26.545113;132.246048;, + -136.291122;-28.993143;130.552338;, + -136.167953;-27.219339;132.852280;, + -137.179993;-29.045206;131.582748;, + -136.778458;-27.653521;133.701782;, + -137.930786;-29.735388;132.255539;, + -136.999939;-27.886042;134.532242;, + -138.485275;-30.573214;132.667130;, + -137.918381;-29.024487;135.612717;, + -139.213760;-31.356102;133.989075;, + -139.254013;-29.485641;135.905014;, + -140.018036;-30.841948;134.952103;, + -140.096344;-29.777664;135.793762;, + -140.354813;-30.233871;135.472046;, + -133.231537;-27.956072;126.594505;, + -134.925339;-31.048527;124.460655;, + -133.461777;-30.497587;122.817970;, + -134.989136;-28.931255;127.863777;, + -136.342789;-31.392393;126.160988;, + -136.657150;-29.224060;128.817413;, + -138.027634;-31.702929;127.096672;, + -137.548523;-29.526291;130.041809;, + -139.246399;-32.613304;127.906013;, + -138.940323;-30.932508;131.660553;, + -140.483856;-33.738888;129.718903;, + -140.554810;-31.801954;132.540863;, + -141.714996;-33.895096;131.085495;, + -141.429428;-32.379189;133.667358;, + -142.750443;-34.765797;132.009415;, + -141.811935;-32.704250;134.731705;, + -143.514694;-35.784763;132.593597;, + -143.118393;-34.124710;136.191864;, + -144.603409;-36.797626;134.330566;, + -144.828415;-34.734749;136.683197;, + -145.704269;-36.289589;135.590790;, + -145.871262;-35.104645;136.623108;, + -146.167557;-35.627628;136.254303;, + -135.214676;-31.515200;124.032562;, + -136.842163;-34.507912;121.949051;, + -135.449875;-34.009403;120.420280;, + -136.844757;-32.443195;125.172371;, + -138.145432;-34.824940;123.509781;, + -138.402664;-32.712887;126.023872;, + -139.719559;-35.111778;124.343742;, + -139.218048;-32.994740;127.150612;, + -140.849487;-35.982155;125.065216;, + -140.489838;-34.340195;128.625000;, + -141.972977;-37.056030;126.729210;, + -141.993790;-35.168465;129.403305;, + -143.108612;-37.194061;127.982307;, + -142.793137;-35.716938;130.435669;, + -144.062485;-38.026543;128.816864;, + -143.129379;-36.024429;131.424835;, + -144.765549;-39.005554;129.337189;, + -144.323669;-37.384869;132.751999;, + -145.750641;-39.971535;130.934662;, + -145.929031;-37.963417;133.163986;, + -146.770706;-39.468060;132.097397;, + -146.916077;-38.315838;133.076492;, + -147.200821;-38.821938;132.716400;, + -136.816589;-34.826042;121.267235;, + -138.063828;-37.289051;119.406982;, + -138.063034;-35.609749;122.020325;, + -139.060074;-37.569843;120.535957;, + -139.277069;-35.839912;122.573105;, + -140.286835;-37.814011;121.073189;, + -139.894958;-36.087437;123.395241;, + -141.145554;-38.545986;121.533401;, + -140.837692;-37.226124;124.423691;, + -141.974594;-39.461166;122.731110;, + -141.993881;-37.922039;124.903725;, + -142.848846;-39.588902;123.635170;, + -142.593063;-38.391006;125.643524;, + -143.566452;-40.291603;124.198372;, + -142.831924;-38.660183;126.390099;, + -144.086502;-41.113419;124.526360;, + -143.715500;-39.809662;127.307304;, + -144.809982;-41.938175;125.684982;, + -144.966858;-40.291412;127.499474;, + -145.612946;-41.529369;126.547478;, + -145.743073;-40.580086;127.348747;, + -145.961716;-40.996456;127.027367;, + -124.112961;-25.016518;125.801498;, + -108.473534;-18.210691;110.956665;, + -112.815208;-28.165394;111.418961;, + -111.699158;-19.639204;113.723457;, + -115.208687;-21.985653;115.587814;, + -41.122662;-5.151066;57.811222;, + -33.454399;8.516764;56.378914;, + -33.245544;-1.592087;55.511299;, + -33.245544;-1.592087;55.511299;, + 33.827938;10.960120;51.807289;, + 33.696419;-6.417687;40.866890;, + -33.285355;-1.230055;35.845985;, + -33.640362;10.960128;51.807285;, + -6.262792;13.473364;58.013275;, + -11.429913;16.434713;56.577648;, + 6.173337;13.337016;58.607582;, + 0.141490;12.205804;59.792637;, + 11.714142;16.434715;57.068302;, + -11.461862;93.826927;46.940403;, + -8.418667;86.102859;35.841724;, + -11.461862;93.826927;46.940403;, + -2.182251;64.795692;35.886501;, + -8.418667;86.102859;35.841724;, + -11.461862;93.826927;46.940403;, + -11.461862;93.826927;46.940403;, + -2.182251;64.795692;35.886501;, + -2.182251;64.795692;35.886501;, + -13.263326;61.285336;39.593838;, + -7.852941;94.312172;61.946106;, + -6.418187;97.562218;66.945374;, + -4.402893;95.093262;63.828449;, + -10.775403;96.597122;64.803986;, + -13.469022;92.920013;60.063766;, + 0.057848;95.886368;65.707542;, + -3.096079;86.564301;74.622665;, + 0.057848;84.042374;71.322975;, + -2.904975;98.340385;68.672066;, + -6.403885;85.831749;72.998459;, + -4.494127;83.274292;70.169548;, + -8.635912;82.575844;67.678185;, + -15.709467;82.386459;66.627968;, + -13.865308;81.275604;65.186821;, + -15.816927;87.518616;62.681839;, + -11.518435;84.699326;70.485474;, + -13.865308;81.275604;65.186821;, + -8.635912;82.575844;67.678185;, + -14.668218;94.575356;62.197353;, + -4.402893;95.093262;63.828449;, + -7.852941;94.312172;61.946106;, + -13.097512;71.430748;40.778584;, + -8.418667;86.102859;35.841724;, + -14.186148;74.380287;64.488983;, + -13.097512;71.430748;40.778584;, + -14.675630;70.832016;46.772766;, + -11.461862;93.826927;46.940403;, + -13.097512;71.430748;40.778584;, + -15.347429;57.616409;47.193058;, + -13.263326;61.285336;39.593838;, + 0.057848;63.606403;31.055357;, + -2.182251;64.795692;35.886501;, + -2.182251;64.795692;35.886501;, + 0.057848;63.606403;31.055357;, + -15.784473;69.911873;57.321053;, + -16.338684;73.054062;51.038074;, + -13.469022;92.920013;60.063766;, + 0.057848;90.668213;33.607914;, + -14.675630;70.832016;46.772766;, + -13.097512;71.430748;40.778584;, + -16.338684;73.054062;51.038074;, + 0.057848;75.714500;30.620197;, + -14.163750;71.116005;45.658489;, + -14.675630;70.832016;46.772766;, + -14.163750;71.116005;45.658489;, + -14.718096;68.331589;44.645512;, + 0.057848;99.177589;56.123409;, + -2.250754;97.063629;60.111290;, + 0.057848;99.177589;56.123409;, + -14.675630;70.832016;46.772766;, + -16.338684;73.054062;51.038074;, + -15.528388;63.130802;45.068886;, + -3.355227;56.332371;40.007046;, + -7.149835;52.817856;41.486317;, + -3.355227;56.332371;40.007046;, + -14.710178;77.561653;59.569633;, + -16.338684;73.054062;51.038074;, + -14.238920;86.733635;61.588871;, + -13.469022;92.920013;60.063766;, + -15.101998;82.440125;58.401062;, + -13.865308;81.275604;65.186821;, + 0.057848;99.177589;56.123409;, + 0.057848;97.662560;43.454536;, + -11.461862;93.826927;46.940403;, + 0.057848;75.714500;30.620197;, + 0.057848;90.668213;33.607914;, + -8.418667;86.102859;35.841724;, + -8.418667;86.102859;35.841724;, + -13.097512;71.430748;40.778584;, + -2.182251;64.795692;35.886501;, + -13.469022;92.920013;60.063766;, + -16.338684;73.054062;51.038074;, + -13.097512;71.430748;40.778584;, + 0.057848;99.177589;56.123409;, + -7.149835;52.817856;41.486317;, + -13.263326;61.285336;39.593838;, + -15.347429;57.616409;47.193058;, + -11.261707;52.068916;45.952110;, + 0.057848;99.177589;56.123409;, + 11.577548;93.826927;46.940403;, + 0.057848;90.668213;33.607914;, + 8.534353;86.102859;35.841724;, + 11.577548;93.826927;46.940403;, + 2.297937;64.795692;35.886501;, + 8.534353;86.102859;35.841724;, + 11.577548;93.826927;46.940403;, + 11.577548;93.826927;46.940403;, + 0.057848;97.662560;43.454536;, + 2.297937;64.795692;35.886501;, + 0.057848;63.606403;31.055357;, + 2.297937;64.795692;35.886501;, + 13.379013;61.285336;39.593838;, + 7.968627;94.312172;61.946106;, + 4.518579;95.093262;63.828449;, + 6.533874;97.562218;66.945374;, + 14.783904;94.575356;62.197353;, + 13.584708;92.920013;60.063766;, + 3.211765;86.564301;74.622665;, + 3.020661;98.340385;68.672066;, + 4.609814;83.274292;70.169548;, + 6.519572;85.831749;72.998459;, + 8.751598;82.575844;67.678185;, + 13.980994;81.275604;65.186821;, + 15.932613;87.518616;62.681839;, + 15.825153;82.386459;66.627968;, + 10.891089;96.597122;64.803986;, + 4.518579;95.093262;63.828449;, + 7.968627;94.312172;61.946106;, + 13.213199;71.430748;40.778584;, + 8.534353;86.102859;35.841724;, + 13.213199;71.430748;40.778584;, + 14.791316;70.832016;46.772766;, + 11.577548;93.826927;46.940403;, + 13.213199;71.430748;40.778584;, + 15.463116;57.616409;47.193058;, + 13.379013;61.285336;39.593838;, + 0.057848;63.606403;31.055357;, + 2.297937;64.795692;35.886501;, + 2.297937;64.795692;35.886501;, + 0.057848;53.154804;40.756420;, + 0.057848;63.606403;31.055357;, + 15.900160;69.911873;57.321053;, + 16.454370;73.054062;51.038074;, + 13.981975;76.274246;65.799950;, + 13.584708;92.920013;60.063766;, + 0.057848;90.668213;33.607914;, + 14.791316;70.832016;46.772766;, + 0.057848;75.714500;30.620197;, + 13.213199;71.430748;40.778584;, + 16.454370;73.054062;51.038074;, + 0.057848;75.714500;30.620197;, + 14.279436;71.116005;45.658489;, + 2.366440;97.063629;60.111290;, + 14.791316;70.832016;46.772766;, + 16.454370;73.054062;51.038074;, + 15.644074;63.130802;45.068886;, + 3.470914;56.332371;40.007046;, + 7.265521;52.817856;41.486317;, + 3.470914;56.332371;40.007046;, + 14.825865;77.561653;59.569633;, + 16.454370;73.054062;51.038074;, + 13.584708;92.920013;60.063766;, + 14.354607;86.733635;61.588871;, + 15.217685;82.440125;58.401062;, + 13.980994;81.275604;65.186821;, + 0.057848;99.177589;56.123409;, + 0.057848;97.662560;43.454536;, + 11.577548;93.826927;46.940403;, + 0.057848;75.714500;30.620197;, + 0.057848;90.668213;33.607914;, + 8.534353;86.102859;35.841724;, + 8.534353;86.102859;35.841724;, + 13.213199;71.430748;40.778584;, + 2.297937;64.795692;35.886501;, + 13.584708;92.920013;60.063766;, + 20.061501;88.506752;43.413734;, + 18.678795;84.403915;43.736874;, + 16.454370;73.054062;51.038074;, + 13.213199;71.430748;40.778584;, + 0.057848;99.177589;56.123409;, + 7.265521;52.817856;41.486317;, + 13.379013;61.285336;39.593838;, + 15.463116;57.616409;47.193058;, + 11.377394;52.068913;45.952110;, + 15.463116;57.616409;47.193058;, + 7.265521;52.817856;41.486317;, + 2.867495;39.371185;54.783699;, + 7.573774;40.307079;54.648247;, + 1.330886;37.590916;54.064663;, + 5.149999;41.098293;49.664669;, + -5.034308;41.098293;49.664669;, + -1.215191;37.590916;54.064663;, + -7.458086;40.307079;54.648247;, + -2.751802;39.371185;54.783699;, + 2.217954;38.776661;57.910744;, + -2.102260;38.776661;57.910744;, + -3.355227;56.332371;40.007046;, + 0.057848;53.154804;40.756420;, + 3.470914;56.332371;40.007046;, + 9.931857;27.639982;38.133949;, + 0.077734;27.263643;33.720470;, + -9.608727;27.597115;38.148296;, + -0.565651;37.436687;67.317482;, + -2.411773;37.506966;67.308975;, + 2.527462;37.506966;67.308975;, + 0.681345;37.436687;67.317482;, + -4.628216;39.976799;65.832298;, + -3.095984;38.031998;67.529678;, + -8.580020;44.714546;64.299896;, + -5.649843;41.666725;65.621597;, + -16.045902;55.654251;48.952625;, + -15.310171;52.496346;49.328674;, + -12.819518;47.844864;50.501919;, + -9.828319;42.345741;53.625164;, + -15.043728;50.197842;49.912075;, + -15.007770;66.809219;62.450409;, + -14.767531;62.889500;62.645046;, + -14.547876;60.533600;62.358631;, + -13.118661;55.010292;62.553223;, + -15.462021;56.205631;47.969166;, + -13.866287;76.274246;65.799950;, + -14.881803;70.420540;62.992817;, + -16.338850;66.013954;51.296288;, + -16.338684;73.054062;51.038074;, + -11.348783;70.134789;66.847923;, + -12.326240;69.568321;65.742271;, + -12.625326;68.411827;65.535583;, + -12.363090;67.291313;66.688377;, + -12.479330;68.737000;65.669327;, + -12.347851;69.289749;65.733955;, + -11.017628;49.345627;63.166481;, + -5.015405;68.108635;68.910416;, + -6.346445;70.041153;68.809387;, + -5.034431;67.060791;68.905960;, + -5.441578;66.767700;68.786415;, + -4.548992;67.765022;68.960190;, + -14.710178;77.561653;59.569633;, + -15.784473;69.911873;57.321053;, + -15.528388;63.130802;45.068886;, + -15.347429;57.616409;47.193058;, + -15.347429;57.616409;47.193058;, + -7.149835;52.817856;41.486317;, + -7.906905;51.757496;43.185513;, + -9.962842;51.383026;45.418407;, + -7.929698;44.502201;46.021900;, + -8.752393;35.209740;45.489132;, + -7.580388;47.204636;47.215710;, + -9.962842;51.383026;45.418407;, + -8.122182;48.950886;46.050209;, + -9.962842;51.383026;45.418407;, + -9.139874;26.594124;45.452682;, + -7.848414;66.116623;68.406441;, + -6.236395;66.607925;68.646599;, + -8.238889;70.568634;68.310120;, + -10.339741;70.382629;67.493866;, + -7.507647;70.645966;68.558647;, + -11.152501;66.503914;67.438225;, + -9.477689;65.951813;67.955978;, + -11.688239;66.665207;67.208046;, + -8.381545;65.898521;68.278526;, + 5.765529;41.666725;65.621597;, + 8.695706;44.714546;64.299896;, + 4.743902;39.976799;65.832298;, + 3.211673;38.031998;67.529678;, + 9.944007;42.345741;53.625164;, + 12.935205;47.844864;50.501919;, + 15.425858;52.496346;49.328674;, + 16.161591;55.654251;48.952625;, + 15.159414;50.197842;49.912075;, + 14.663563;60.533600;62.358627;, + 13.234347;55.010292;62.553223;, + 14.883218;62.889500;62.645046;, + 15.123456;66.809219;62.450409;, + 15.577708;56.205627;47.969166;, + 14.997487;70.420540;62.992817;, + 14.301835;74.380287;64.488983;, + 13.980994;81.275604;65.186821;, + 8.751598;82.575844;67.678185;, + 14.791316;70.832016;46.772766;, + 16.454370;73.054062;51.038074;, + 16.454536;66.013954;51.296288;, + 12.478778;67.291313;66.688377;, + 12.741013;68.411827;65.535583;, + 12.441926;69.568321;65.742271;, + 11.464467;70.134789;66.847923;, + 12.595016;68.737000;65.669327;, + 12.463537;69.289749;65.733955;, + 11.133315;49.345627;63.166481;, + 5.325842;67.702225;68.891853;, + 6.462132;70.041153;68.809387;, + 5.150118;67.060791;68.905960;, + 5.557265;66.767700;68.786423;, + 14.825865;77.561653;59.569633;, + 15.900160;69.911873;57.321053;, + 14.833782;68.331589;44.645512;, + 14.279436;71.116005;45.658489;, + 15.644074;63.130802;45.068886;, + 15.463116;57.616409;47.193058;, + 15.463116;57.616409;47.193058;, + 7.265521;52.817856;41.486317;, + 10.078528;51.383022;45.418407;, + 8.237869;48.950886;46.050209;, + 10.078528;51.383022;45.418407;, + 8.868079;35.209740;45.489132;, + 8.045384;44.502201;46.021900;, + 7.696074;47.204636;47.215710;, + 8.237869;48.950886;46.050209;, + 9.646603;26.610264;45.446602;, + 6.352082;66.607925;68.646599;, + 7.964100;66.116623;68.406441;, + 10.455427;70.382629;67.493866;, + 8.354575;70.568634;68.310120;, + 7.623333;70.645973;68.558647;, + 9.593375;65.951813;67.955978;, + 11.268188;66.503914;67.438225;, + 11.803926;66.665207;67.208046;, + 8.497231;65.898521;68.278526;, + 5.227813;27.441788;34.143456;, + -5.109205;27.415857;34.161194;, + 11.634122;84.699326;70.485474;, + 30.643127;-31.721945;45.652527;, + -30.350075;-31.719879;45.630089;; + 6841; + 3;28,62,1;, + 3;3,16,3420;, + 3;11,23,29;, + 3;104,69,7;, + 3;0,13,70;, + 3;9,97,96;, + 3;3421,71,2;, + 3;15,22,3;, + 3;3420,15,3;, + 3;68,4,15;, + 3;116,111,106;, + 3;3422,12,6;, + 3;6,12,1742;, + 3;24,14,12;, + 3;3423,108,119;, + 3;102,7,13;, + 3;13,30,23;, + 3;3420,2,15;, + 3;115,116,106;, + 3;100,3424,17;, + 3;100,1,3424;, + 3;1,18,19;, + 3;28,1,19;, + 3;104,94,69;, + 3;15,4,20;, + 3;98,8,97;, + 3;115,106,114;, + 3;29,23,126;, + 3;3422,24,12;, + 3;30,0,27;, + 3;26,11,29;, + 3;24,3422,3425;, + 3;27,126,23;, + 3;3426,3427,3428;, + 3;23,11,13;, + 3;13,0,30;, + 3;23,30,27;, + 3;108,107,120;, + 3;31,6,1741;, + 3;25,32,29;, + 3;32,26,29;, + 3;136,132,135;, + 3;32,25,65;, + 3;63,60,35;, + 3;3419,3429,63;, + 3;35,59,34;, + 3;58,59,16;, + 3;41,36,848;, + 3;51,53,49;, + 3;3430,55,49;, + 3;82,848,36;, + 3;24,38,14;, + 3;84,49,53;, + 3;81,82,43;, + 3;83,3431,39;, + 3;41,45,36;, + 3;40,3430,3432;, + 3;41,37,47;, + 3;24,52,48;, + 3;3430,49,84;, + 3;38,48,50;, + 3;38,24,48;, + 3;49,55,50;, + 3;50,51,49;, + 3;55,56,50;, + 3;48,51,50;, + 3;81,43,80;, + 3;67,54,3433;, + 3;39,66,44;, + 3;50,56,38;, + 3;3430,40,55;, + 3;56,57,38;, + 3;55,40,56;, + 3;56,436,57;, + 3;51,48,52;, + 3;3434,3435,3436;, + 3;3437,3438,3435;, + 3;3437,3439,3438;, + 3;33,3439,3437;, + 3;64,3440,3441;, + 3;3442,3443,33;, + 3;3440,3444,3445;, + 3;52,24,3425;, + 3;3434,3436,3446;, + 3;16,59,3420;, + 3;60,3420,59;, + 3;58,34,59;, + 3;60,3421,3420;, + 3;35,60,59;, + 3;61,27,0;, + 3;3447,61,3448;, + 3;28,3449,62;, + 3;3420,3421,2;, + 3;63,3429,3421;, + 3;3419,63,3450;, + 3;63,3421,60;, + 3;33,64,3442;, + 3;3450,63,35;, + 3;65,129,3447;, + 3;3434,3437,3435;, + 3;3444,42,3445;, + 3;3445,3441,3440;, + 3;39,3451,66;, + 3;3441,3442,64;, + 3;53,67,3433;, + 3;33,3443,3439;, + 3;2,68,15;, + 3;3452,3453,69;, + 3;70,13,7;, + 3;3421,3429,71;, + 3;0,70,73;, + 3;73,72,0;, + 3;7,69,75;, + 3;75,74,7;, + 3;3454,3455,77;, + 3;77,76,3454;, + 3;3453,3456,79;, + 3;79,78,3453;, + 3;70,7,74;, + 3;74,73,70;, + 3;69,3453,78;, + 3;78,75,69;, + 3;3456,3454,76;, + 3;76,79,3456;, + 3;3455,0,72;, + 3;72,77,3455;, + 3;80,43,3457;, + 3;43,82,44;, + 3;37,81,80;, + 3;44,82,83;, + 3;81,37,82;, + 3;44,83,39;, + 3;83,82,36;, + 3;3433,84,53;, + 3;83,36,3431;, + 3;3,22,85;, + 3;110,112,113;, + 3;22,89,85;, + 3;110,114,106;, + 3;95,118,111;, + 3;3447,128,61;, + 3;22,90,89;, + 3;110,113,114;, + 3;109,112,110;, + 3;90,22,91;, + 3;15,91,22;, + 3;15,92,91;, + 3;15,20,92;, + 3;92,20,93;, + 3;117,111,116;, + 3;3452,94,3458;, + 3;94,3452,69;, + 3;99,96,21;, + 3;111,117,95;, + 3;9,96,99;, + 3;1739,97,9;, + 3;97,8,21;, + 3;97,21,96;, + 3;10,98,97;, + 3;31,3422,6;, + 3;1741,6,1744;, + 3;88,99,845;, + 3;107,118,95;, + 3;18,100,17;, + 3;18,1,100;, + 3;101,102,13;, + 3;11,101,13;, + 3;119,108,120;, + 3;103,7,102;, + 3;107,121,120;, + 3;95,122,107;, + 3;107,123,121;, + 3;95,117,122;, + 3;107,122,123;, + 3;103,105,104;, + 3;103,104,7;, + 3;3459,5,106;, + 3;106,111,3459;, + 3;3423,3460,108;, + 3;3423,119,3461;, + 3;3462,3463,116;, + 3;116,115,3462;, + 3;3464,3465,122;, + 3;122,117,3464;, + 3;3466,3462,115;, + 3;115,114,3466;, + 3;107,108,3460;, + 3;3467,3468,113;, + 3;113,112,3467;, + 3;3469,3459,111;, + 3;111,118,3469;, + 3;3468,3466,114;, + 3;114,113,3468;, + 3;87,86,109;, + 3;109,110,87;, + 3;3463,3464,117;, + 3;117,116,3463;, + 3;3470,3469,118;, + 3;118,3471,3470;, + 3;3472,3461,119;, + 3;119,120,3472;, + 3;3473,3472,120;, + 3;120,121,3473;, + 3;3474,3473,121;, + 3;121,123,3474;, + 3;3465,3474,123;, + 3;123,122,3465;, + 3;65,25,124;, + 3;130,132,131;, + 3;127,126,27;, + 3;129,128,3447;, + 3;27,125,127;, + 3;29,126,25;, + 3;134,132,130;, + 3;130,133,134;, + 3;125,27,128;, + 3;128,27,61;, + 3;65,124,129;, + 3;131,132,136;, + 3;3475,3476,135;, + 3;135,132,3475;, + 3;3476,3477,136;, + 3;136,135,3476;, + 3;3478,3479,130;, + 3;130,131,3478;, + 3;3480,3481,134;, + 3;134,133,3480;, + 3;3481,3475,132;, + 3;132,134,3481;, + 3;3479,3480,133;, + 3;133,130,3479;, + 3;3477,3478,131;, + 3;131,136,3477;, + 3;158,138,184;, + 3;3,3482,16;, + 3;145,159,153;, + 3;221,143,191;, + 3;137,192,146;, + 3;144,214,215;, + 3;3483,139,193;, + 3;147,3,152;, + 3;3482,3,147;, + 3;190,147,140;, + 3;231,223,227;, + 3;3484,142,12;, + 3;142,1742,12;, + 3;154,12,14;, + 3;3485,234,225;, + 3;219,146,143;, + 3;146,153,160;, + 3;3482,147,139;, + 3;230,223,231;, + 3;217,17,3424;, + 3;217,3424,138;, + 3;138,149,148;, + 3;158,149,138;, + 3;221,191,212;, + 3;147,150,140;, + 3;98,215,8;, + 3;230,229,223;, + 3;159,241,153;, + 3;3484,12,154;, + 3;160,157,137;, + 3;156,159,145;, + 3;154,3486,3484;, + 3;157,153,241;, + 3;3487,3488,3489;, + 3;153,146,145;, + 3;146,160,137;, + 3;153,157,160;, + 3;225,235,224;, + 3;161,1743,142;, + 3;155,159,162;, + 3;162,159,156;, + 3;251,250,247;, + 3;162,187,155;, + 3;185,164,182;, + 3;183,3418,137;, + 3;164,34,181;, + 3;58,16,181;, + 3;168,37,847;, + 3;175,173,177;, + 3;165,173,179;, + 3;203,847,37;, + 3;154,14,38;, + 3;205,177,173;, + 3;202,169,203;, + 3;204,166,3490;, + 3;168,3491,171;, + 3;167,3492,165;, + 3;168,47,37;, + 3;154,172,176;, + 3;165,205,173;, + 3;38,174,172;, + 3;38,172,154;, + 3;173,174,179;, + 3;174,173,175;, + 3;179,174,180;, + 3;172,174,175;, + 3;202,80,169;, + 3;189,3493,178;, + 3;166,170,188;, + 3;174,38,180;, + 3;165,179,167;, + 3;180,38,57;, + 3;179,180,167;, + 3;734,57,46;, + 3;175,176,172;, + 3;3494,3495,3496;, + 3;3497,3496,3498;, + 3;3497,3498,3499;, + 3;163,3497,3499;, + 3;186,3500,3501;, + 3;3502,163,3503;, + 3;3501,3504,3444;, + 3;176,3486,154;, + 3;3494,3505,3495;, + 3;16,3482,181;, + 3;182,181,3482;, + 3;58,181,34;, + 3;182,3482,3483;, + 3;164,181,182;, + 3;183,137,157;, + 3;3506,3507,183;, + 3;158,184,3508;, + 3;3482,139,3483;, + 3;185,3483,3509;, + 3;183,3507,3418;, + 3;185,182,3483;, + 3;163,3502,186;, + 3;3510,164,185;, + 3;187,3506,244;, + 3;3494,3496,3497;, + 3;3444,3504,42;, + 3;3504,3501,3500;, + 3;166,188,3511;, + 3;3500,186,3502;, + 3;177,3493,189;, + 3;163,3499,3503;, + 3;139,147,190;, + 3;3512,191,3513;, + 3;192,143,146;, + 3;3483,193,3509;, + 3;137,195,192;, + 3;195,137,194;, + 3;143,197,191;, + 3;197,143,196;, + 3;3514,199,3515;, + 3;199,3514,198;, + 3;3513,201,3516;, + 3;201,3513,200;, + 3;192,196,143;, + 3;196,192,195;, + 3;191,200,3513;, + 3;200,191,197;, + 3;3516,198,3514;, + 3;198,3516,201;, + 3;3515,194,137;, + 3;194,3515,199;, + 3;80,3457,169;, + 3;169,170,203;, + 3;37,80,202;, + 3;170,204,203;, + 3;202,203,37;, + 3;170,166,204;, + 3;204,3491,203;, + 3;3493,177,205;, + 3;204,3490,3491;, + 3;3,85,152;, + 3;226,228,112;, + 3;152,85,89;, + 3;226,223,229;, + 3;213,227,233;, + 3;3506,183,243;, + 3;152,89,208;, + 3;226,229,228;, + 3;109,226,112;, + 3;208,209,152;, + 3;147,152,209;, + 3;147,209,210;, + 3;147,210,150;, + 3;210,211,150;, + 3;232,231,227;, + 3;3512,3517,212;, + 3;212,191,3512;, + 3;216,151,214;, + 3;227,213,232;, + 3;144,216,214;, + 3;10,1740,215;, + 3;215,151,8;, + 3;215,214,151;, + 3;10,215,98;, + 3;161,142,3484;, + 3;1745,1742,142;, + 3;846,151,216;, + 3;224,213,233;, + 3;148,17,217;, + 3;148,217,138;, + 3;218,146,219;, + 3;145,146,218;, + 3;234,235,225;, + 3;220,219,143;, + 3;224,235,236;, + 3;213,224,237;, + 3;224,236,238;, + 3;213,237,232;, + 3;224,238,237;, + 3;220,221,222;, + 3;220,143,221;, + 3;207,223,141;, + 3;223,207,227;, + 3;3485,225,3518;, + 3;3485,3519,234;, + 3;3520,231,3521;, + 3;231,3520,230;, + 3;3522,237,3523;, + 3;237,3522,232;, + 3;3524,230,3520;, + 3;230,3524,229;, + 3;224,3518,225;, + 3;3467,228,3525;, + 3;228,3467,112;, + 3;141,223,206;, + 3;226,206,223;, + 3;3526,227,207;, + 3;227,3526,233;, + 3;3525,229,3524;, + 3;229,3525,228;, + 3;206,109,86;, + 3;109,206,226;, + 3;3521,232,3522;, + 3;232,3521,231;, + 3;3527,233,3526;, + 3;233,3528,224;, + 3;3529,234,3519;, + 3;234,3529,235;, + 3;3530,235,3529;, + 3;235,3530,236;, + 3;3531,236,3530;, + 3;236,3531,238;, + 3;3523,238,3531;, + 3;238,3523,237;, + 3;187,239,155;, + 3;245,246,247;, + 3;242,157,241;, + 3;244,3506,243;, + 3;157,242,240;, + 3;159,155,241;, + 3;249,245,247;, + 3;245,249,248;, + 3;240,243,157;, + 3;243,183,157;, + 3;187,244,239;, + 3;246,251,247;, + 3;3532,250,3533;, + 3;250,3532,247;, + 3;3533,251,3534;, + 3;251,3533,250;, + 3;3535,245,3536;, + 3;245,3535,246;, + 3;3537,249,3538;, + 3;249,3537,248;, + 3;3538,247,3532;, + 3;247,3538,249;, + 3;3536,248,3537;, + 3;248,3536,245;, + 3;3534,246,3535;, + 3;246,3534,251;, + 3;255,472,550;, + 3;257,258,551;, + 3;252,467,554;, + 3;453,462,446;, + 3;439,447,448;, + 3;265,262,255;, + 3;462,463,460;, + 3;449,438,450;, + 3;439,443,447;, + 3;469,313,465;, + 3;254,289,466;, + 3;466,483,484;, + 3;260,435,432;, + 3;465,468,469;, + 3;260,473,474;, + 3;434,3539,3540;, + 3;259,465,474;, + 3;266,3541,262;, + 3;313,255,262;, + 3;438,449,445;, + 3;459,258,264;, + 3;265,266,262;, + 3;345,287,343;, + 3;486,485,271;, + 3;344,274,275;, + 3;335,534,535;, + 3;273,3542,340;, + 3;279,337,282;, + 3;393,333,269;, + 3;279,333,280;, + 3;3543,476,475;, + 3;397,400,417;, + 3;398,284,402;, + 3;388,284,405;, + 3;342,285,3544;, + 3;399,407,338;, + 3;394,392,3542;, + 3;480,479,285;, + 3;3542,392,342;, + 3;288,340,3542;, + 3;287,333,282;, + 3;344,334,274;, + 3;333,287,345;, + 3;343,275,270;, + 3;3544,285,552;, + 3;340,288,3544;, + 3;399,389,404;, + 3;290,295,296;, + 3;296,291,290;, + 3;291,296,297;, + 3;297,292,291;, + 3;292,297,298;, + 3;298,293,292;, + 3;309,310,299;, + 3;299,294,309;, + 3;300,301,424;, + 3;3545,422,3546;, + 3;301,302,424;, + 3;347,349,422;, + 3;305,423,306;, + 3;271,368,367;, + 3;3547,3548,301;, + 3;301,300,3547;, + 3;301,3549,426;, + 3;3549,301,3548;, + 3;358,426,359;, + 3;3550,359,426;, + 3;360,3551,364;, + 3;272,303,379;, + 3;374,276,277;, + 3;3552,3553,354;, + 3;3554,3555,306;, + 3;425,353,3553;, + 3;3555,3556,305;, + 3;305,306,3555;, + 3;305,3557,304;, + 3;3557,305,3556;, + 3;3558,3559,3546;, + 3;3546,3560,3558;, + 3;380,277,272;, + 3;294,299,308;, + 3;380,384,277;, + 3;3561,362,3550;, + 3;309,293,310;, + 3;310,293,298;, + 3;425,3553,3554;, + 3;518,517,330;, + 3;376,377,3562;, + 3;3543,477,476;, + 3;286,265,478;, + 3;487,277,488;, + 3;324,273,536;, + 3;313,470,255;, + 3;465,313,262;, + 3;502,501,314;, + 3;489,3562,490;, + 3;3563,491,317;, + 3;533,547,537;, + 3;318,492,493;, + 3;494,485,315;, + 3;330,503,504;, + 3;491,272,495;, + 3;495,487,319;, + 3;506,505,320;, + 3;488,277,496;, + 3;496,497,320;, + 3;519,312,520;, + 3;498,346,499;, + 3;499,489,316;, + 3;497,276,500;, + 3;500,3564,3565;, + 3;507,312,508;, + 3;510,509,319;, + 3;323,268,322;, + 3;512,511,3566;, + 3;466,3540,254;, + 3;550,478,255;, + 3;286,478,479;, + 3;410,387,411;, + 3;390,265,286;, + 3;332,289,254;, + 3;289,256,466;, + 3;281,256,289;, + 3;281,258,256;, + 3;279,548,391;, + 3;279,280,549;, + 3;549,280,261;, + 3;311,472,475;, + 3;3567,472,3568;, + 3;335,340,3544;, + 3;519,323,521;, + 3;513,511,325;, + 3;318,503,514;, + 3;3569,509,327;, + 3;515,505,328;, + 3;516,318,514;, + 3;506,3570,329;, + 3;504,501,330;, + 3;522,518,330;, + 3;267,538,539;, + 3;540,275,541;, + 3;526,278,527;, + 3;525,526,329;, + 3;507,321,515;, + 3;528,322,529;, + 3;521,528,331;, + 3;529,322,530;, + 3;502,513,325;, + 3;510,319,508;, + 3;531,328,527;, + 3;324,532,531;, + 3;325,3571,523;, + 3;420,400,418;, + 3;266,3572,3541;, + 3;279,282,333;, + 3;267,269,553;, + 3;414,409,416;, + 3;287,282,334;, + 3;536,544,336;, + 3;268,534,3573;, + 3;520,312,532;, + 3;548,281,391;, + 3;284,398,403;, + 3;410,416,409;, + 3;338,389,399;, + 3;288,341,3544;, + 3;3542,341,288;, + 3;273,340,543;, + 3;3542,339,341;, + 3;341,339,3544;, + 3;339,342,3544;, + 3;3542,342,339;, + 3;343,344,275;, + 3;267,343,270;, + 3;287,344,343;, + 3;287,334,344;, + 3;267,345,343;, + 3;553,345,267;, + 3;486,498,314;, + 3;347,3545,357;, + 3;271,367,346;, + 3;348,368,271;, + 3;493,348,494;, + 3;370,348,371;, + 3;350,3574,349;, + 3;422,3574,3560;, + 3;348,369,368;, + 3;3575,351,306;, + 3;369,348,370;, + 3;348,307,371;, + 3;306,425,3554;, + 3;351,352,306;, + 3;371,307,372;, + 3;354,3553,353;, + 3;384,374,277;, + 3;3576,276,375;, + 3;374,375,276;, + 3;346,376,3562;, + 3;367,376,346;, + 3;3577,302,358;, + 3;3550,426,3549;, + 3;359,3550,362;, + 3;3562,377,378;, + 3;385,373,3576;, + 3;3576,375,385;, + 3;355,3552,356;, + 3;3578,3552,355;, + 3;379,303,382;, + 3;3561,3551,360;, + 3;3551,361,364;, + 3;3551,3579,361;, + 3;378,381,3562;, + 3;3561,363,362;, + 3;360,363,3561;, + 3;383,380,272;, + 3;379,383,272;, + 3;361,3579,365;, + 3;3578,355,3580;, + 3;366,356,3552;, + 3;3552,354,366;, + 3;3581,3582,367;, + 3;367,368,3581;, + 3;3583,3584,378;, + 3;378,377,3583;, + 3;3585,3586,383;, + 3;383,379,3585;, + 3;3587,3588,371;, + 3;371,372,3587;, + 3;3589,3590,384;, + 3;384,380,3589;, + 3;3591,3583,377;, + 3;377,376,3591;, + 3;3582,3591,376;, + 3;376,367,3582;, + 3;3588,3592,370;, + 3;370,371,3588;, + 3;3593,3581,368;, + 3;368,369,3593;, + 3;3592,3593,369;, + 3;369,370,3592;, + 3;3590,3594,374;, + 3;374,384,3590;, + 3;3594,3595,375;, + 3;375,374,3594;, + 3;3584,3596,381;, + 3;381,378,3584;, + 3;3597,3598,373;, + 3;373,385,3597;, + 3;3595,3597,385;, + 3;385,375,3595;, + 3;3599,3585,379;, + 3;379,382,3599;, + 3;3586,3589,380;, + 3;380,383,3586;, + 3;338,386,389;, + 3;409,387,410;, + 3;418,400,401;, + 3;418,401,419;, + 3;409,412,387;, + 3;284,403,405;, + 3;419,401,413;, + 3;413,401,396;, + 3;415,413,396;, + 3;266,265,390;, + 3;405,408,388;, + 3;279,391,337;, + 3;395,479,480;, + 3;392,285,342;, + 3;393,280,333;, + 3;477,3543,3600;, + 3;338,407,406;, + 3;3601,274,334;, + 3;480,285,392;, + 3;395,392,394;, + 3;3602,3603,403;, + 3;403,398,3602;, + 3;3604,3605,400;, + 3;400,397,3604;, + 3;3606,3604,397;, + 3;397,408,3606;, + 3;3607,3602,398;, + 3;398,402,3607;, + 3;3603,3606,405;, + 3;405,403,3603;, + 3;3608,3609,399;, + 3;399,404,3608;, + 3;3605,3610,401;, + 3;401,400,3605;, + 3;3610,3611,396;, + 3;396,401,3610;, + 3;3612,3607,402;, + 3;402,406,3612;, + 3;3611,3608,404;, + 3;404,396,3611;, + 3;3609,3613,407;, + 3;407,399,3609;, + 3;3613,3612,406;, + 3;406,407,3613;, + 3;417,400,420;, + 3;408,405,3606;, + 3;397,417,408;, + 3;402,284,409;, + 3;409,414,402;, + 3;338,406,416;, + 3;416,410,338;, + 3;404,389,413;, + 3;413,415,404;, + 3;386,338,410;, + 3;410,411,386;, + 3;406,402,414;, + 3;414,416,406;, + 3;389,386,411;, + 3;411,413,389;, + 3;284,388,412;, + 3;412,409,284;, + 3;396,404,415;, + 3;388,408,417;, + 3;417,412,388;, + 3;411,387,418;, + 3;418,419,411;, + 3;387,412,420;, + 3;420,418,387;, + 3;413,411,419;, + 3;417,420,412;, + 3;258,421,264;, + 3;421,258,257;, + 3;3598,3576,373;, + 3;354,353,3614;, + 3;3587,372,307;, + 3;362,363,3615;, + 3;3599,382,303;, + 3;381,3596,3562;, + 3;422,349,3574;, + 3;422,3560,3546;, + 3;3575,306,423;, + 3;423,305,304;, + 3;424,302,3577;, + 3;422,3545,347;, + 3;306,352,425;, + 3;352,353,425;, + 3;358,302,426;, + 3;301,426,302;, + 3;444,443,442;, + 3;443,439,442;, + 3;454,457,455;, + 3;438,445,452;, + 3;432,431,464;, + 3;432,473,260;, + 3;263,433,434;, + 3;482,434,3540;, + 3;431,427,464;, + 3;464,427,556;, + 3;448,451,440;, + 3;448,440,439;, + 3;450,3616,3617;, + 3;438,3616,450;, + 3;429,433,263;, + 3;458,481,459;, + 3;452,445,3618;, + 3;454,456,457;, + 3;462,460,446;, + 3;428,3619,443;, + 3;443,444,428;, + 3;3620,3621,448;, + 3;448,447,3620;, + 3;3622,3623,449;, + 3;449,450,3622;, + 3;3619,3620,447;, + 3;447,443,3619;, + 3;3621,3624,451;, + 3;451,448,3621;, + 3;3625,3622,450;, + 3;450,3617,3625;, + 3;3623,3626,445;, + 3;445,449,3623;, + 3;3627,3628,442;, + 3;442,439,3627;, + 3;3629,3630,438;, + 3;438,452,3629;, + 3;3631,3627,439;, + 3;439,440,3631;, + 3;3630,3632,3616;, + 3;3616,438,3630;, + 3;3626,437,3618;, + 3;3618,445,3626;, + 3;3633,3634,3635;, + 3;3635,441,3633;, + 3;3636,3637,455;, + 3;455,457,3636;, + 3;3635,3636,457;, + 3;457,456,3635;, + 3;441,3635,456;, + 3;456,454,441;, + 3;429,458,3638;, + 3;429,481,458;, + 3;256,258,459;, + 3;463,461,460;, + 3;3638,458,462;, + 3;462,453,3638;, + 3;458,459,463;, + 3;463,462,458;, + 3;459,264,461;, + 3;461,463,459;, + 3;253,430,446;, + 3;446,460,253;, + 3;264,253,460;, + 3;3639,3640,3641;, + 3;556,427,554;, + 3;473,259,474;, + 3;3541,474,262;, + 3;259,468,465;, + 3;466,256,483;, + 3;3540,466,482;, + 3;259,467,468;, + 3;464,467,259;, + 3;467,252,468;, + 3;469,555,3568;, + 3;469,468,252;, + 3;470,313,469;, + 3;3568,470,469;, + 3;470,3568,471;, + 3;472,255,471;, + 3;470,471,255;, + 3;3568,472,471;, + 3;311,283,472;, + 3;432,464,473;, + 3;464,259,473;, + 3;474,465,262;, + 3;260,474,3541;, + 3;475,472,3567;, + 3;3543,475,3567;, + 3;476,477,311;, + 3;476,311,475;, + 3;3544,552,3600;, + 3;477,285,311;, + 3;265,255,478;, + 3;478,283,311;, + 3;479,478,311;, + 3;479,311,285;, + 3;395,480,392;, + 3;286,479,395;, + 3;429,263,481;, + 3;481,263,484;, + 3;482,466,484;, + 3;263,434,482;, + 3;483,256,459;, + 3;483,459,484;, + 3;484,459,481;, + 3;482,484,263;, + 3;486,315,485;, + 3;314,315,486;, + 3;319,487,488;, + 3;319,488,321;, + 3;316,489,490;, + 3;316,490,3566;, + 3;3563,272,491;, + 3;303,272,3563;, + 3;493,492,348;, + 3;492,307,348;, + 3;494,271,485;, + 3;348,271,494;, + 3;317,491,495;, + 3;317,495,319;, + 3;495,277,487;, + 3;272,277,495;, + 3;321,488,496;, + 3;321,496,320;, + 3;496,276,497;, + 3;277,276,496;, + 3;314,498,499;, + 3;314,499,316;, + 3;499,3562,489;, + 3;346,3562,499;, + 3;320,497,500;, + 3;320,500,3565;, + 3;500,3576,3564;, + 3;276,3576,500;, + 3;486,346,498;, + 3;271,346,486;, + 3;318,493,494;, + 3;318,494,315;, + 3;502,325,501;, + 3;325,545,501;, + 3;504,503,315;, + 3;503,318,315;, + 3;506,328,505;, + 3;329,328,506;, + 3;321,507,508;, + 3;321,508,319;, + 3;510,331,509;, + 3;331,327,509;, + 3;512,325,511;, + 3;3642,325,512;, + 3;513,3566,511;, + 3;316,3566,513;, + 3;514,503,326;, + 3;503,330,326;, + 3;3569,319,509;, + 3;317,319,3569;, + 3;515,320,505;, + 3;321,320,515;, + 3;3643,516,514;, + 3;3643,514,326;, + 3;506,3565,3570;, + 3;320,3565,506;, + 3;504,314,501;, + 3;315,314,504;, + 3;312,507,515;, + 3;312,515,328;, + 3;502,316,513;, + 3;314,316,502;, + 3;331,510,508;, + 3;331,508,312;, + 3;542,540,517;, + 3;336,519,520;, + 3;323,519,336;, + 3;331,519,521;, + 3;312,519,331;, + 3;538,542,522;, + 3;523,522,325;, + 3;522,545,325;, + 3;326,517,524;, + 3;330,517,326;, + 3;524,3644,326;, + 3;3644,3643,326;, + 3;329,526,527;, + 3;329,527,328;, + 3;525,278,526;, + 3;275,3645,541;, + 3;327,528,529;, + 3;331,528,327;, + 3;521,323,528;, + 3;323,322,528;, + 3;327,529,530;, + 3;3642,3571,325;, + 3;324,531,527;, + 3;324,527,278;, + 3;531,532,328;, + 3;532,312,328;, + 3;539,537,267;, + 3;336,520,532;, + 3;336,532,324;, + 3;267,537,547;, + 3;535,534,323;, + 3;534,268,323;, + 3;546,275,274;, + 3;278,273,324;, + 3;3646,533,537;, + 3;3646,537,3647;, + 3;536,336,324;, + 3;539,538,523;, + 3;538,522,523;, + 3;517,540,541;, + 3;517,541,524;, + 3;541,3644,524;, + 3;536,543,544;, + 3;273,543,536;, + 3;3573,534,335;, + 3;3573,335,3648;, + 3;535,323,336;, + 3;3542,273,3649;, + 3;518,542,517;, + 3;542,275,540;, + 3;270,275,542;, + 3;522,542,518;, + 3;538,267,542;, + 3;267,270,542;, + 3;541,3645,3644;, + 3;539,523,537;, + 3;523,3571,537;, + 3;3571,3647,537;, + 3;543,340,335;, + 3;543,335,535;, + 3;544,543,535;, + 3;544,535,336;, + 3;522,330,545;, + 3;545,330,501;, + 3;3649,273,278;, + 3;3645,275,546;, + 3;3648,335,3544;, + 3;547,269,267;, + 3;279,258,548;, + 3;258,281,548;, + 3;258,549,551;, + 3;279,549,258;, + 3;550,472,283;, + 3;283,478,550;, + 3;551,549,261;, + 3;257,551,261;, + 3;552,285,477;, + 3;552,477,3600;, + 3;553,269,333;, + 3;333,345,553;, + 3;554,427,3650;, + 3;469,252,555;, + 3;467,556,554;, + 3;464,556,467;, + 3;558,840,762;, + 3;257,841,560;, + 3;252,554,757;, + 3;747,446,752;, + 3;737,742,741;, + 3;566,558,564;, + 3;752,460,753;, + 3;743,744,736;, + 3;737,741,739;, + 3;759,755,614;, + 3;557,756,590;, + 3;756,774,773;, + 3;562,730,733;, + 3;755,759,758;, + 3;562,764,763;, + 3;732,3651,3652;, + 3;561,764,755;, + 3;567,564,3653;, + 3;614,564,558;, + 3;736,740,743;, + 3;751,264,560;, + 3;566,564,567;, + 3;646,644,588;, + 3;776,572,775;, + 3;645,576,575;, + 3;636,825,824;, + 3;574,641,3654;, + 3;580,583,638;, + 3;694,570,634;, + 3;580,581,634;, + 3;3655,765,766;, + 3;698,718,701;, + 3;699,703,585;, + 3;689,706,585;, + 3;643,3656,586;, + 3;700,639,708;, + 3;695,3654,693;, + 3;770,586,769;, + 3;3654,643,693;, + 3;589,3654,641;, + 3;588,583,634;, + 3;645,575,635;, + 3;634,646,588;, + 3;644,571,576;, + 3;3656,842,586;, + 3;641,3656,589;, + 3;700,705,690;, + 3;591,597,596;, + 3;597,591,592;, + 3;592,598,597;, + 3;598,592,593;, + 3;593,599,598;, + 3;599,593,594;, + 3;610,600,611;, + 3;600,610,595;, + 3;601,724,602;, + 3;3657,3658,722;, + 3;602,724,603;, + 3;648,722,650;, + 3;606,607,723;, + 3;572,668,669;, + 3;3659,602,3660;, + 3;602,3659,601;, + 3;602,726,3661;, + 3;3661,3660,602;, + 3;659,660,726;, + 3;3662,726,660;, + 3;661,665,3663;, + 3;573,680,604;, + 3;675,578,577;, + 3;3664,655,3665;, + 3;3666,607,3667;, + 3;725,3665,654;, + 3;3667,606,3668;, + 3;606,3667,607;, + 3;606,605,3669;, + 3;3669,3668,606;, + 3;3670,3658,3671;, + 3;3658,3670,3672;, + 3;681,573,578;, + 3;595,609,600;, + 3;681,578,685;, + 3;3673,3662,663;, + 3;610,611,594;, + 3;611,599,594;, + 3;725,3666,3665;, + 3;808,631,807;, + 3;677,3674,678;, + 3;3655,766,767;, + 3;587,768,566;, + 3;777,778,578;, + 3;625,826,574;, + 3;614,558,760;, + 3;755,564,614;, + 3;792,615,791;, + 3;779,780,3674;, + 3;3675,618,781;, + 3;823,827,837;, + 3;619,783,782;, + 3;784,616,775;, + 3;631,794,793;, + 3;781,785,573;, + 3;785,620,777;, + 3;796,621,795;, + 3;778,786,578;, + 3;786,621,787;, + 3;809,810,613;, + 3;788,789,647;, + 3;789,617,779;, + 3;787,790,577;, + 3;790,3676,3677;, + 3;797,798,613;, + 3;800,620,799;, + 3;624,623,569;, + 3;802,3678,801;, + 3;756,557,3651;, + 3;840,558,768;, + 3;587,769,768;, + 3;711,712,688;, + 3;691,587,566;, + 3;633,557,590;, + 3;590,756,559;, + 3;582,590,559;, + 3;582,559,560;, + 3;580,692,838;, + 3;580,839,581;, + 3;839,563,581;, + 3;612,765,762;, + 3;3679,3568,762;, + 3;636,3656,641;, + 3;809,811,624;, + 3;803,626,801;, + 3;619,804,793;, + 3;3680,628,799;, + 3;805,629,795;, + 3;806,804,619;, + 3;796,630,3681;, + 3;794,631,791;, + 3;812,631,808;, + 3;568,829,828;, + 3;830,831,576;, + 3;816,817,579;, + 3;815,630,816;, + 3;797,805,622;, + 3;818,819,623;, + 3;811,632,818;, + 3;819,820,623;, + 3;792,626,803;, + 3;800,798,620;, + 3;821,817,629;, + 3;625,821,822;, + 3;626,813,3682;, + 3;721,719,701;, + 3;567,3653,3683;, + 3;580,634,583;, + 3;568,843,570;, + 3;715,717,710;, + 3;588,635,583;, + 3;826,637,834;, + 3;569,3684,824;, + 3;810,822,613;, + 3;838,692,582;, + 3;585,704,699;, + 3;711,710,717;, + 3;639,700,690;, + 3;589,3656,642;, + 3;3654,589,642;, + 3;574,833,641;, + 3;3654,642,640;, + 3;642,3656,640;, + 3;640,3656,643;, + 3;3654,640,643;, + 3;644,576,645;, + 3;568,571,644;, + 3;588,644,645;, + 3;588,645,635;, + 3;568,644,646;, + 3;843,568,646;, + 3;776,615,788;, + 3;724,658,603;, + 3;572,647,668;, + 3;649,572,669;, + 3;783,784,649;, + 3;671,672,649;, + 3;651,650,3685;, + 3;722,3672,3685;, + 3;649,669,670;, + 3;3686,607,652;, + 3;670,671,649;, + 3;649,672,608;, + 3;607,3666,725;, + 3;652,607,653;, + 3;672,673,608;, + 3;655,654,3665;, + 3;685,578,675;, + 3;3687,676,577;, + 3;675,577,676;, + 3;647,3674,677;, + 3;668,647,677;, + 3;658,659,603;, + 3;3662,3661,726;, + 3;660,663,3662;, + 3;3674,679,678;, + 3;686,3687,674;, + 3;3687,686,676;, + 3;656,657,3664;, + 3;3688,656,3664;, + 3;680,683,604;, + 3;3673,661,3663;, + 3;3663,665,662;, + 3;3663,662,3689;, + 3;679,3674,682;, + 3;3673,663,664;, + 3;661,3673,664;, + 3;684,573,681;, + 3;680,573,684;, + 3;662,666,3689;, + 3;3688,3690,656;, + 3;667,3664,657;, + 3;3664,667,655;, + 3;3691,668,3692;, + 3;668,3691,669;, + 3;3693,679,3694;, + 3;679,3693,678;, + 3;3695,684,3696;, + 3;684,3695,680;, + 3;3697,672,3698;, + 3;672,3697,673;, + 3;3699,685,3700;, + 3;685,3699,681;, + 3;3701,678,3693;, + 3;678,3701,677;, + 3;3692,677,3701;, + 3;677,3692,668;, + 3;3698,671,3702;, + 3;671,3698,672;, + 3;3703,669,3691;, + 3;669,3703,670;, + 3;3702,670,3703;, + 3;670,3702,671;, + 3;3700,675,3704;, + 3;675,3700,685;, + 3;3704,676,3705;, + 3;676,3704,675;, + 3;3694,682,3706;, + 3;682,3694,679;, + 3;3707,674,3708;, + 3;674,3707,686;, + 3;3705,686,3707;, + 3;686,3705,676;, + 3;3709,680,3695;, + 3;680,3709,683;, + 3;3696,681,3699;, + 3;681,3696,684;, + 3;639,690,687;, + 3;710,711,688;, + 3;719,702,701;, + 3;719,720,702;, + 3;710,688,713;, + 3;585,706,704;, + 3;720,714,702;, + 3;714,697,702;, + 3;716,697,714;, + 3;567,691,566;, + 3;706,689,709;, + 3;580,638,692;, + 3;696,770,769;, + 3;693,643,586;, + 3;694,634,581;, + 3;767,3710,3655;, + 3;639,707,708;, + 3;3711,635,575;, + 3;770,693,586;, + 3;696,695,693;, + 3;3712,704,3713;, + 3;704,3712,699;, + 3;3714,701,3715;, + 3;701,3714,698;, + 3;3716,698,3714;, + 3;698,3716,709;, + 3;3717,699,3712;, + 3;699,3717,703;, + 3;3713,706,3716;, + 3;706,3713,704;, + 3;3718,700,3719;, + 3;700,3718,705;, + 3;3715,702,3720;, + 3;702,3715,701;, + 3;3720,697,3721;, + 3;697,3720,702;, + 3;3722,703,3717;, + 3;703,3722,707;, + 3;3721,705,3718;, + 3;705,3721,697;, + 3;3719,708,3723;, + 3;708,3719,700;, + 3;3723,707,3722;, + 3;707,3723,708;, + 3;718,721,701;, + 3;709,3716,706;, + 3;698,709,718;, + 3;703,710,585;, + 3;710,703,715;, + 3;639,717,707;, + 3;717,639,711;, + 3;705,714,690;, + 3;714,705,716;, + 3;687,711,639;, + 3;711,687,712;, + 3;707,715,703;, + 3;715,707,717;, + 3;690,712,687;, + 3;712,690,714;, + 3;585,713,689;, + 3;713,585,710;, + 3;697,716,705;, + 3;689,718,709;, + 3;718,689,713;, + 3;712,719,688;, + 3;719,712,720;, + 3;688,721,713;, + 3;721,688,719;, + 3;714,720,712;, + 3;718,713,721;, + 3;560,264,421;, + 3;421,257,560;, + 3;3708,674,3687;, + 3;655,3724,654;, + 3;3697,608,673;, + 3;663,3725,664;, + 3;3709,604,683;, + 3;682,3674,3706;, + 3;722,3685,650;, + 3;722,3658,3672;, + 3;3686,723,607;, + 3;723,605,606;, + 3;3657,648,3726;, + 3;722,648,3657;, + 3;607,725,653;, + 3;653,725,654;, + 3;659,726,603;, + 3;602,603,726;, + 3;444,442,739;, + 3;739,442,737;, + 3;454,455,749;, + 3;736,746,740;, + 3;730,754,729;, + 3;730,562,763;, + 3;565,732,731;, + 3;772,3651,732;, + 3;729,754,727;, + 3;754,844,727;, + 3;742,738,745;, + 3;742,737,738;, + 3;744,3727,3728;, + 3;736,744,3728;, + 3;728,565,731;, + 3;750,751,771;, + 3;746,3729,740;, + 3;454,749,748;, + 3;752,446,460;, + 3;428,739,3730;, + 3;739,428,444;, + 3;3731,742,3732;, + 3;742,3731,741;, + 3;3733,743,3734;, + 3;743,3733,744;, + 3;3730,741,3731;, + 3;741,3730,739;, + 3;3732,745,3735;, + 3;745,3732,742;, + 3;3736,744,3733;, + 3;744,3736,3727;, + 3;3734,740,3737;, + 3;740,3734,743;, + 3;3738,442,3628;, + 3;442,3738,737;, + 3;3739,736,3740;, + 3;736,3739,746;, + 3;3741,737,3738;, + 3;737,3741,738;, + 3;3740,3728,3742;, + 3;3728,3740,736;, + 3;3737,3729,735;, + 3;3729,3737,740;, + 3;3633,3743,3744;, + 3;3743,3633,441;, + 3;3745,455,3637;, + 3;455,3745,749;, + 3;3743,749,3745;, + 3;749,3743,748;, + 3;441,748,3743;, + 3;748,441,454;, + 3;728,3746,750;, + 3;728,750,771;, + 3;559,751,560;, + 3;753,460,461;, + 3;3746,752,750;, + 3;752,3746,747;, + 3;750,753,751;, + 3;753,750,752;, + 3;751,461,264;, + 3;461,751,753;, + 3;253,446,430;, + 3;446,253,460;, + 3;264,460,253;, + 3;460,264,461;, + 3;844,554,727;, + 3;763,764,561;, + 3;3653,564,764;, + 3;561,755,758;, + 3;756,773,559;, + 3;3651,772,756;, + 3;561,758,757;, + 3;754,561,757;, + 3;757,758,252;, + 3;759,3568,555;, + 3;759,252,758;, + 3;760,759,614;, + 3;3568,759,760;, + 3;760,761,3568;, + 3;762,761,558;, + 3;760,558,761;, + 3;3568,761,762;, + 3;612,762,584;, + 3;730,763,754;, + 3;754,763,561;, + 3;764,564,755;, + 3;562,3653,764;, + 3;765,3679,762;, + 3;3655,3679,765;, + 3;766,612,767;, + 3;766,765,612;, + 3;3656,3710,842;, + 3;767,612,586;, + 3;566,768,558;, + 3;768,612,584;, + 3;769,612,768;, + 3;769,586,612;, + 3;696,693,770;, + 3;587,696,769;, + 3;728,771,565;, + 3;771,774,565;, + 3;772,774,756;, + 3;565,772,732;, + 3;773,751,559;, + 3;773,774,751;, + 3;774,771,751;, + 3;772,565,774;, + 3;776,775,616;, + 3;615,776,616;, + 3;620,778,777;, + 3;620,622,778;, + 3;617,780,779;, + 3;617,3678,780;, + 3;3675,781,573;, + 3;604,3675,573;, + 3;783,649,782;, + 3;782,649,608;, + 3;784,775,572;, + 3;649,784,572;, + 3;618,785,781;, + 3;618,620,785;, + 3;785,777,578;, + 3;573,785,578;, + 3;622,786,778;, + 3;622,621,786;, + 3;786,787,577;, + 3;578,786,577;, + 3;615,789,788;, + 3;615,617,789;, + 3;789,779,3674;, + 3;647,789,3674;, + 3;621,790,787;, + 3;621,3676,790;, + 3;790,3677,3687;, + 3;577,790,3687;, + 3;776,788,647;, + 3;572,776,647;, + 3;619,784,783;, + 3;619,616,784;, + 3;792,791,626;, + 3;626,791,835;, + 3;794,616,793;, + 3;793,616,619;, + 3;796,795,629;, + 3;630,796,629;, + 3;622,798,797;, + 3;622,620,798;, + 3;800,799,632;, + 3;632,799,628;, + 3;802,801,626;, + 3;3747,802,626;, + 3;803,801,3678;, + 3;617,803,3678;, + 3;804,627,793;, + 3;793,627,631;, + 3;3680,799,620;, + 3;618,3680,620;, + 3;805,795,621;, + 3;622,805,621;, + 3;3748,804,806;, + 3;3748,627,804;, + 3;796,3681,3676;, + 3;621,796,3676;, + 3;794,791,615;, + 3;616,794,615;, + 3;613,805,797;, + 3;613,629,805;, + 3;792,803,617;, + 3;615,792,617;, + 3;632,798,800;, + 3;632,613,798;, + 3;832,807,830;, + 3;637,810,809;, + 3;624,637,809;, + 3;632,811,809;, + 3;613,632,809;, + 3;828,812,832;, + 3;813,626,812;, + 3;812,626,835;, + 3;627,814,807;, + 3;631,627,807;, + 3;814,627,3749;, + 3;3749,627,3748;, + 3;630,817,816;, + 3;630,629,817;, + 3;815,816,579;, + 3;576,831,3750;, + 3;628,819,818;, + 3;632,628,818;, + 3;811,818,624;, + 3;624,818,623;, + 3;628,820,819;, + 3;3747,626,3682;, + 3;625,817,821;, + 3;625,579,817;, + 3;821,629,822;, + 3;822,629,613;, + 3;829,568,827;, + 3;637,822,810;, + 3;637,625,822;, + 3;568,837,827;, + 3;825,624,824;, + 3;824,624,569;, + 3;836,575,576;, + 3;579,625,574;, + 3;3751,827,823;, + 3;3751,3752,827;, + 3;826,625,637;, + 3;829,813,828;, + 3;828,813,812;, + 3;807,831,830;, + 3;807,814,831;, + 3;831,814,3749;, + 3;826,834,833;, + 3;574,826,833;, + 3;3684,636,824;, + 3;3684,3753,636;, + 3;825,637,624;, + 3;3654,3754,574;, + 3;808,807,832;, + 3;832,830,576;, + 3;571,832,576;, + 3;812,808,832;, + 3;828,832,568;, + 3;568,832,571;, + 3;831,3749,3750;, + 3;829,827,813;, + 3;813,827,3682;, + 3;3682,827,3752;, + 3;833,636,641;, + 3;833,825,636;, + 3;834,825,833;, + 3;834,637,825;, + 3;812,835,631;, + 3;835,791,631;, + 3;3754,579,574;, + 3;3750,836,576;, + 3;3753,3656,636;, + 3;837,568,570;, + 3;580,838,560;, + 3;560,838,582;, + 3;560,841,839;, + 3;580,560,839;, + 3;840,584,762;, + 3;584,840,768;, + 3;841,563,839;, + 3;257,563,841;, + 3;842,767,586;, + 3;842,3710,767;, + 3;843,634,570;, + 3;634,843,646;, + 3;554,3650,727;, + 3;759,555,252;, + 3;757,554,844;, + 3;754,757,844;, + 3;845,99,21;, + 3;3755,846,216;, + 3;180,734,167;, + 3;180,57,734;, + 3;46,57,436;, + 3;436,56,40;, + 3;203,3491,847;, + 3;168,847,3491;, + 3;82,37,848;, + 3;41,848,37;, + 3;849,1291,850;, + 3;943,852,851;, + 3;849,1290,944;, + 3;1289,854,1293;, + 3;854,1289,944;, + 3;859,888,945;, + 3;855,861,887;, + 3;946,856,3756;, + 3;1292,3757,3758;, + 3;3757,3759,3760;, + 3;852,946,851;, + 3;857,889,849;, + 3;858,857,850;, + 3;850,857,849;, + 3;853,860,1290;, + 3;3761,861,3758;, + 3;3758,861,855;, + 3;887,859,945;, + 3;875,891,890;, + 3;893,892,862;, + 3;894,869,895;, + 3;897,896,863;, + 3;898,876,899;, + 3;900,862,892;, + 3;902,901,874;, + 3;898,877,903;, + 3;868,904,890;, + 3;894,864,905;, + 3;905,864,904;, + 3;896,872,895;, + 3;867,902,906;, + 3;3762,3763,891;, + 3;899,906,865;, + 3;903,3764,3765;, + 3;901,900,874;, + 3;3763,880,868;, + 3;880,3763,879;, + 3;867,882,878;, + 3;882,867,881;, + 3;3765,884,876;, + 3;884,3765,883;, + 3;866,886,869;, + 3;886,866,885;, + 3;868,880,866;, + 3;885,866,880;, + 3;869,3766,863;, + 3;3766,869,886;, + 3;876,881,867;, + 3;881,876,884;, + 3;878,3767,862;, + 3;3767,878,882;, + 3;870,3768,871;, + 3;3768,870,3769;, + 3;872,3770,864;, + 3;3770,872,3771;, + 3;873,3771,872;, + 3;3771,873,3772;, + 3;865,3773,877;, + 3;3773,865,3774;, + 3;871,3775,874;, + 3;3775,871,3768;, + 3;864,3776,875;, + 3;3776,864,3770;, + 3;874,3774,865;, + 3;3774,874,3775;, + 3;875,3777,3778;, + 3;3777,875,3776;, + 3;877,3779,3780;, + 3;3779,877,3773;, + 3;890,891,868;, + 3;868,891,3763;, + 3;892,893,871;, + 3;871,893,870;, + 3;894,895,864;, + 3;864,895,872;, + 3;896,897,872;, + 3;872,897,873;, + 3;898,899,877;, + 3;877,899,865;, + 3;900,892,874;, + 3;874,892,871;, + 3;901,902,878;, + 3;878,902,867;, + 3;898,903,876;, + 3;876,903,3765;, + 3;890,904,875;, + 3;875,904,864;, + 3;894,905,869;, + 3;869,905,866;, + 3;905,904,866;, + 3;866,904,868;, + 3;896,895,863;, + 3;863,895,869;, + 3;906,902,865;, + 3;865,902,874;, + 3;3762,891,3778;, + 3;3778,891,875;, + 3;906,899,867;, + 3;867,899,876;, + 3;3764,903,3780;, + 3;3780,903,877;, + 3;900,901,862;, + 3;862,901,878;, + 3;889,1290,849;, + 3;3781,858,850;, + 3;855,887,945;, + 3;921,939,908;, + 3;942,922,3782;, + 3;923,910,924;, + 3;907,926,925;, + 3;926,927,911;, + 3;929,928,915;, + 3;3783,919,913;, + 3;931,930,913;, + 3;941,920,908;, + 3;931,932,3784;, + 3;929,933,908;, + 3;916,918,3785;, + 3;917,3786,913;, + 3;935,934,914;, + 3;916,935,936;, + 3;937,3787,938;, + 3;3788,3785,918;, + 3;3789,909,919;, + 3;912,3790,3791;, + 3;916,3786,917;, + 3;934,930,914;, + 3;918,3792,3788;, + 3;936,3787,937;, + 3;3783,913,3786;, + 3;932,3793,3784;, + 3;928,3794,915;, + 3;940,908,939;, + 3;907,942,940;, + 3;927,933,911;, + 3;922,3795,3782;, + 3;925,910,923;, + 3;923,924,922;, + 3;922,924,3795;, + 3;925,926,910;, + 3;910,926,911;, + 3;927,926,921;, + 3;921,926,907;, + 3;928,929,920;, + 3;920,929,908;, + 3;930,931,914;, + 3;914,931,3784;, + 3;932,931,919;, + 3;919,931,913;, + 3;933,929,911;, + 3;911,929,915;, + 3;934,935,917;, + 3;917,935,916;, + 3;936,935,3787;, + 3;3787,935,914;, + 3;937,938,918;, + 3;918,938,3792;, + 3;930,934,913;, + 3;913,934,917;, + 3;936,937,916;, + 3;916,937,918;, + 3;3793,932,909;, + 3;909,932,919;, + 3;3794,928,912;, + 3;912,928,920;, + 3;933,927,908;, + 3;908,927,921;, + 3;925,923,907;, + 3;907,923,922;, + 3;912,920,3790;, + 3;3782,3795,3796;, + 3;940,3782,3797;, + 3;941,940,3790;, + 3;907,939,921;, + 3;939,907,940;, + 3;940,3797,3790;, + 3;3790,920,941;, + 3;908,940,941;, + 3;907,922,942;, + 3;942,3782,940;, + 3;3789,919,3783;, + 3;3785,3786,916;, + 3;1289,852,943;, + 3;849,944,1289;, + 3;854,944,1290;, + 3;3798,3781,850;, + 3;3799,3800,851;, + 3;852,856,946;, + 3;946,3801,3799;, + 3;1271,947,3802;, + 3;3802,3803,1271;, + 3;3804,949,3805;, + 3;1273,3804,3806;, + 3;3807,948,3803;, + 3;948,3807,1272;, + 3;1274,950,3808;, + 3;1274,3805,949;, + 3;1275,1276,1274;, + 3;1278,952,1277;, + 3;1279,1280,954;, + 3;1282,951,1281;, + 3;1283,1284,1273;, + 3;1283,3809,3810;, + 3;1008,1270,956;, + 3;955,3811,3812;, + 3;981,957,1267;, + 3;970,1009,973;, + 3;3813,959,953;, + 3;1268,963,988;, + 3;3814,1263,3815;, + 3;959,3813,982;, + 3;973,958,970;, + 3;959,984,953;, + 3;3816,962,957;, + 3;1011,955,974;, + 3;984,3817,953;, + 3;984,965,3817;, + 3;991,961,964;, + 3;1263,963,1012;, + 3;963,3814,3818;, + 3;989,990,964;, + 3;3819,3820,966;, + 3;991,967,992;, + 3;992,965,991;, + 3;3818,966,963;, + 3;966,3818,968;, + 3;961,986,964;, + 3;964,986,3821;, + 3;976,974,1008;, + 3;1009,956,973;, + 3;969,1008,971;, + 3;975,974,972;, + 3;1263,1012,973;, + 3;1270,1263,956;, + 3;955,3815,1270;, + 3;969,976,1008;, + 3;1011,974,975;, + 3;1010,974,976;, + 3;3816,981,982;, + 3;980,1267,957;, + 3;959,982,981;, + 3;3816,982,3813;, + 3;961,991,984;, + 3;959,983,984;, + 3;983,961,984;, + 3;1012,963,985;, + 3;963,1268,985;, + 3;983,986,961;, + 3;983,987,986;, + 3;3820,988,963;, + 3;963,966,3820;, + 3;964,3821,989;, + 3;967,964,990;, + 3;965,984,991;, + 3;964,967,991;, + 3;965,992,3822;, + 3;992,995,3822;, + 3;995,992,994;, + 3;966,993,3819;, + 3;993,966,996;, + 3;967,994,992;, + 3;994,967,997;, + 3;968,996,966;, + 3;996,968,3823;, + 3;990,997,967;, + 3;997,990,3824;, + 3;994,1000,995;, + 3;1000,994,999;, + 3;996,998,993;, + 3;998,996,1001;, + 3;3823,1001,996;, + 3;1001,3823,3825;, + 3;3826,1002,3827;, + 3;3828,3824,3829;, + 3;997,999,994;, + 3;999,997,3828;, + 3;999,1005,1000;, + 3;1005,999,1004;, + 3;1001,1003,998;, + 3;1003,1001,1006;, + 3;3825,1006,1001;, + 3;1006,3825,3830;, + 3;3829,1007,3828;, + 3;1007,3829,3831;, + 3;3828,1004,999;, + 3;1004,3828,1007;, + 3;1007,1005,1004;, + 3;3830,1003,1006;, + 3;3831,1005,1007;, + 3;974,955,1270;, + 3;971,1008,956;, + 3;971,956,1009;, + 3;972,974,1010;, + 3;3832,955,1011;, + 3;958,973,1012;, + 3;1016,1015,970;, + 3;958,1016,970;, + 3;1017,1016,958;, + 3;1012,1017,958;, + 3;1018,1017,1012;, + 3;985,1018,1012;, + 3;1019,3833,3834;, + 3;960,1019,3834;, + 3;1020,1019,960;, + 3;979,1020,960;, + 3;3835,1020,979;, + 3;3836,3835,979;, + 3;1022,1021,1015;, + 3;1016,1022,1015;, + 3;1023,1022,1016;, + 3;1017,1023,1016;, + 3;1024,1023,1017;, + 3;1018,1024,1017;, + 3;1025,3837,3833;, + 3;1019,1025,3833;, + 3;1026,1025,1019;, + 3;1020,1026,1019;, + 3;3838,1026,1020;, + 3;3835,3838,1020;, + 3;1028,1027,1021;, + 3;1022,1028,1021;, + 3;1029,1028,1022;, + 3;1023,1029,1022;, + 3;1030,1029,1023;, + 3;1024,1030,1023;, + 3;1031,3839,3837;, + 3;1025,1031,3837;, + 3;1032,1031,1025;, + 3;1026,1032,1025;, + 3;3840,1032,1026;, + 3;3838,3840,1026;, + 3;1034,1033,1027;, + 3;1028,1034,1027;, + 3;1035,1034,1028;, + 3;1029,1035,1028;, + 3;1036,1035,1029;, + 3;1030,1036,1029;, + 3;1037,3841,3839;, + 3;1031,1037,3839;, + 3;1038,1037,1031;, + 3;1032,1038,1031;, + 3;3842,1038,1032;, + 3;3840,3842,1032;, + 3;1040,1039,1033;, + 3;1034,1040,1033;, + 3;1041,1040,1034;, + 3;1035,1041,1034;, + 3;1042,1041,1035;, + 3;1036,1042,1035;, + 3;1043,3843,3841;, + 3;1037,1043,3841;, + 3;1044,1043,1037;, + 3;1038,1044,1037;, + 3;3844,1044,1038;, + 3;3842,3844,1038;, + 3;1046,1045,1039;, + 3;1040,1046,1039;, + 3;1047,1046,1040;, + 3;1041,1047,1040;, + 3;1048,1047,1041;, + 3;1042,1048,1041;, + 3;1049,3845,3843;, + 3;1043,1049,3843;, + 3;1050,1049,1043;, + 3;1044,1050,1043;, + 3;3846,1050,1044;, + 3;3844,3846,1044;, + 3;1052,1051,1045;, + 3;1046,1052,1045;, + 3;1053,1052,1046;, + 3;1047,1053,1046;, + 3;1054,1053,1047;, + 3;1048,1054,1047;, + 3;1055,3847,3845;, + 3;1049,1055,3845;, + 3;1056,1055,1049;, + 3;1050,1056,1049;, + 3;3848,1056,1050;, + 3;3846,3848,1050;, + 3;1058,1057,1051;, + 3;1052,1058,1051;, + 3;1059,1058,1052;, + 3;1053,1059,1052;, + 3;1060,1059,1053;, + 3;1054,1060,1053;, + 3;1061,3849,3847;, + 3;1055,1061,3847;, + 3;1062,1061,1055;, + 3;1056,1062,1055;, + 3;3850,1062,1056;, + 3;3848,3850,1056;, + 3;1064,1063,1057;, + 3;1058,1064,1057;, + 3;1065,1064,1058;, + 3;1059,1065,1058;, + 3;1066,1065,1059;, + 3;1060,1066,1059;, + 3;1067,3851,3849;, + 3;1061,1067,3849;, + 3;1068,1067,1061;, + 3;1062,1068,1061;, + 3;3852,1068,1062;, + 3;3850,3852,1062;, + 3;1070,1069,1063;, + 3;1064,1070,1063;, + 3;1071,1070,1064;, + 3;1065,1071,1064;, + 3;1072,1071,1065;, + 3;1066,1072,1065;, + 3;1073,3853,3851;, + 3;1067,1073,3851;, + 3;1074,1073,1067;, + 3;1068,1074,1067;, + 3;3854,1074,1068;, + 3;3852,3854,1068;, + 3;1070,1075,1069;, + 3;1071,1076,1070;, + 3;1075,1070,1076;, + 3;1072,1076,1071;, + 3;1073,3855,3853;, + 3;1074,3856,1073;, + 3;3855,1073,3856;, + 3;3854,3856,1074;, + 3;1078,1077,969;, + 3;971,1078,969;, + 3;1079,1078,971;, + 3;1009,1079,971;, + 3;1080,1079,1009;, + 3;970,1080,1009;, + 3;1081,3857,3836;, + 3;978,1081,3836;, + 3;1082,1081,978;, + 3;1013,1082,978;, + 3;3858,1082,1013;, + 3;3859,3858,1013;, + 3;1084,1083,1077;, + 3;1078,1084,1077;, + 3;1085,1084,1078;, + 3;1079,1085,1078;, + 3;1086,1085,1079;, + 3;1080,1086,1079;, + 3;1087,3860,3857;, + 3;1081,1087,3857;, + 3;1088,1087,1081;, + 3;1082,1088,1081;, + 3;3861,1088,1082;, + 3;3858,3861,1082;, + 3;1090,1089,1083;, + 3;1084,1090,1083;, + 3;1091,1090,1084;, + 3;1085,1091,1084;, + 3;1092,1091,1085;, + 3;1086,1092,1085;, + 3;1093,3862,3860;, + 3;1087,1093,3860;, + 3;1094,1093,1087;, + 3;1088,1094,1087;, + 3;3863,1094,1088;, + 3;3861,3863,1088;, + 3;1096,1095,1089;, + 3;1090,1096,1089;, + 3;1097,1096,1090;, + 3;1091,1097,1090;, + 3;1098,1097,1091;, + 3;1092,1098,1091;, + 3;1099,3864,3862;, + 3;1093,1099,3862;, + 3;1100,1099,1093;, + 3;1094,1100,1093;, + 3;3865,1100,1094;, + 3;3863,3865,1094;, + 3;1102,1101,1095;, + 3;1096,1102,1095;, + 3;1103,1102,1096;, + 3;1097,1103,1096;, + 3;1104,1103,1097;, + 3;1098,1104,1097;, + 3;1105,3866,3864;, + 3;1099,1105,3864;, + 3;1106,1105,1099;, + 3;1100,1106,1099;, + 3;3867,1106,1100;, + 3;3865,3867,1100;, + 3;1108,1107,1101;, + 3;1102,1108,1101;, + 3;1109,1108,1102;, + 3;1103,1109,1102;, + 3;1110,1109,1103;, + 3;1104,1110,1103;, + 3;1111,3868,3866;, + 3;1105,1111,3866;, + 3;1112,1111,1105;, + 3;1106,1112,1105;, + 3;3869,1112,1106;, + 3;3867,3869,1106;, + 3;1114,1113,1107;, + 3;1108,1114,1107;, + 3;1115,1114,1108;, + 3;1109,1115,1108;, + 3;1116,1115,1109;, + 3;1110,1116,1109;, + 3;1117,3870,3868;, + 3;1111,1117,3868;, + 3;1118,1117,1111;, + 3;1112,1118,1111;, + 3;3871,1118,1112;, + 3;3869,3871,1112;, + 3;1120,1119,1113;, + 3;1114,1120,1113;, + 3;1121,1120,1114;, + 3;1115,1121,1114;, + 3;1122,1121,1115;, + 3;1116,1122,1115;, + 3;1123,3872,3870;, + 3;1117,1123,3870;, + 3;1124,1123,1117;, + 3;1118,1124,1117;, + 3;3873,1124,1118;, + 3;3871,3873,1118;, + 3;1126,1125,1119;, + 3;1120,1126,1119;, + 3;1127,1126,1120;, + 3;1121,1127,1120;, + 3;1128,1127,1121;, + 3;1122,1128,1121;, + 3;1129,3874,3872;, + 3;1123,1129,3872;, + 3;1130,1129,1123;, + 3;1124,1130,1123;, + 3;3875,1130,1124;, + 3;3873,3875,1124;, + 3;1132,1131,1125;, + 3;1126,1132,1125;, + 3;1133,1132,1126;, + 3;1127,1133,1126;, + 3;1134,1133,1127;, + 3;1128,1134,1127;, + 3;1135,3876,3874;, + 3;1129,1135,3874;, + 3;1136,1135,1129;, + 3;1130,1136,1129;, + 3;3877,1136,1130;, + 3;3875,3877,1130;, + 3;1132,1137,1131;, + 3;1133,1138,1132;, + 3;1137,1132,1138;, + 3;1134,1138,1133;, + 3;1135,3878,3876;, + 3;1136,3879,1135;, + 3;3878,1135,3879;, + 3;3877,3879,1136;, + 3;1140,1139,972;, + 3;1010,1140,972;, + 3;1141,1140,1010;, + 3;976,1141,1010;, + 3;1142,1141,976;, + 3;969,1142,976;, + 3;1143,3880,3859;, + 3;1014,1143,3859;, + 3;1144,1143,1014;, + 3;977,1144,1014;, + 3;3881,1144,977;, + 3;3882,3881,977;, + 3;1146,1145,1139;, + 3;1140,1146,1139;, + 3;1147,1146,1140;, + 3;1141,1147,1140;, + 3;1148,1147,1141;, + 3;1142,1148,1141;, + 3;1149,3883,3880;, + 3;1143,1149,3880;, + 3;1150,1149,1143;, + 3;1144,1150,1143;, + 3;3884,1150,1144;, + 3;3881,3884,1144;, + 3;1152,1151,1145;, + 3;1146,1152,1145;, + 3;1153,1152,1146;, + 3;1147,1153,1146;, + 3;1154,1153,1147;, + 3;1148,1154,1147;, + 3;1155,3885,3883;, + 3;1149,1155,3883;, + 3;1156,1155,1149;, + 3;1150,1156,1149;, + 3;3886,1156,1150;, + 3;3884,3886,1150;, + 3;1158,1157,1151;, + 3;1152,1158,1151;, + 3;1159,1158,1152;, + 3;1153,1159,1152;, + 3;1160,1159,1153;, + 3;1154,1160,1153;, + 3;1161,3887,3885;, + 3;1155,1161,3885;, + 3;1162,1161,1155;, + 3;1156,1162,1155;, + 3;3888,1162,1156;, + 3;3886,3888,1156;, + 3;1164,1163,1157;, + 3;1158,1164,1157;, + 3;1165,1164,1158;, + 3;1159,1165,1158;, + 3;1166,1165,1159;, + 3;1160,1166,1159;, + 3;1167,3889,3887;, + 3;1161,1167,3887;, + 3;1168,1167,1161;, + 3;1162,1168,1161;, + 3;3890,1168,1162;, + 3;3888,3890,1162;, + 3;1170,1169,1163;, + 3;1164,1170,1163;, + 3;1171,1170,1164;, + 3;1165,1171,1164;, + 3;1172,1171,1165;, + 3;1166,1172,1165;, + 3;1173,3891,3889;, + 3;1167,1173,3889;, + 3;1174,1173,1167;, + 3;1168,1174,1167;, + 3;3892,1174,1168;, + 3;3890,3892,1168;, + 3;1176,1175,1169;, + 3;1170,1176,1169;, + 3;1177,1176,1170;, + 3;1171,1177,1170;, + 3;1178,1177,1171;, + 3;1172,1178,1171;, + 3;1179,3893,3891;, + 3;1173,1179,3891;, + 3;1180,1179,1173;, + 3;1174,1180,1173;, + 3;3894,1180,1174;, + 3;3892,3894,1174;, + 3;1182,1181,1175;, + 3;1176,1182,1175;, + 3;1183,1182,1176;, + 3;1177,1183,1176;, + 3;1184,1183,1177;, + 3;1178,1184,1177;, + 3;1185,3895,3893;, + 3;1179,1185,3893;, + 3;1186,1185,1179;, + 3;1180,1186,1179;, + 3;3896,1186,1180;, + 3;3894,3896,1180;, + 3;1188,1187,1181;, + 3;1182,1188,1181;, + 3;1189,1188,1182;, + 3;1183,1189,1182;, + 3;1190,1189,1183;, + 3;1184,1190,1183;, + 3;1191,3897,3895;, + 3;1185,1191,3895;, + 3;1192,1191,1185;, + 3;1186,1192,1185;, + 3;3898,1192,1186;, + 3;3896,3898,1186;, + 3;1194,1193,1187;, + 3;1188,1194,1187;, + 3;1195,1194,1188;, + 3;1189,1195,1188;, + 3;1196,1195,1189;, + 3;1190,1196,1189;, + 3;1197,3899,3897;, + 3;1191,1197,3897;, + 3;1198,1197,1191;, + 3;1192,1198,1191;, + 3;3900,1198,1192;, + 3;3898,3900,1192;, + 3;1194,1199,1193;, + 3;1195,1200,1194;, + 3;1199,1194,1200;, + 3;1196,1200,1195;, + 3;1197,3901,3899;, + 3;1198,3902,1197;, + 3;3901,1197,3902;, + 3;3900,3902,1198;, + 3;1202,1201,3832;, + 3;1011,1202,3832;, + 3;1203,1202,1011;, + 3;975,1203,1011;, + 3;1204,1203,975;, + 3;972,1204,975;, + 3;1205,3903,3882;, + 3;980,1205,3882;, + 3;1206,1205,980;, + 3;957,1206,980;, + 3;3904,1206,957;, + 3;962,3904,957;, + 3;1208,1207,1201;, + 3;1202,1208,1201;, + 3;1209,1208,1202;, + 3;1203,1209,1202;, + 3;1210,1209,1203;, + 3;1204,1210,1203;, + 3;1211,3905,3903;, + 3;1205,1211,3903;, + 3;1212,1211,1205;, + 3;1206,1212,1205;, + 3;3906,1212,1206;, + 3;3904,3906,1206;, + 3;1214,1213,1207;, + 3;1208,1214,1207;, + 3;1215,1214,1208;, + 3;1209,1215,1208;, + 3;1216,1215,1209;, + 3;1210,1216,1209;, + 3;1217,3907,3905;, + 3;1211,1217,3905;, + 3;1218,1217,1211;, + 3;1212,1218,1211;, + 3;3908,1218,1212;, + 3;3906,3908,1212;, + 3;1220,1219,1213;, + 3;1214,1220,1213;, + 3;1221,1220,1214;, + 3;1215,1221,1214;, + 3;1222,1221,1215;, + 3;1216,1222,1215;, + 3;1223,3909,3907;, + 3;1217,1223,3907;, + 3;1224,1223,1217;, + 3;1218,1224,1217;, + 3;3910,1224,1218;, + 3;3908,3910,1218;, + 3;1226,1225,1219;, + 3;1220,1226,1219;, + 3;1227,1226,1220;, + 3;1221,1227,1220;, + 3;1228,1227,1221;, + 3;1222,1228,1221;, + 3;1229,3911,3909;, + 3;1223,1229,3909;, + 3;1230,1229,1223;, + 3;1224,1230,1223;, + 3;3912,1230,1224;, + 3;3910,3912,1224;, + 3;1232,1231,1225;, + 3;1226,1232,1225;, + 3;1233,1232,1226;, + 3;1227,1233,1226;, + 3;1234,1233,1227;, + 3;1228,1234,1227;, + 3;1235,3913,3911;, + 3;1229,1235,3911;, + 3;1236,1235,1229;, + 3;1230,1236,1229;, + 3;3914,1236,1230;, + 3;3912,3914,1230;, + 3;1238,1237,1231;, + 3;1232,1238,1231;, + 3;1239,1238,1232;, + 3;1233,1239,1232;, + 3;1240,1239,1233;, + 3;1234,1240,1233;, + 3;1241,3915,3913;, + 3;1235,1241,3913;, + 3;1242,1241,1235;, + 3;1236,1242,1235;, + 3;3916,1242,1236;, + 3;3914,3916,1236;, + 3;1244,1243,1237;, + 3;1238,1244,1237;, + 3;1245,1244,1238;, + 3;1239,1245,1238;, + 3;1246,1245,1239;, + 3;1240,1246,1239;, + 3;1247,3917,3915;, + 3;1241,1247,3915;, + 3;1248,1247,1241;, + 3;1242,1248,1241;, + 3;3918,1248,1242;, + 3;3916,3918,1242;, + 3;1250,1249,3918;, + 3;1244,3919,1243;, + 3;1251,3919,1244;, + 3;1245,1251,1244;, + 3;1252,1251,1245;, + 3;1246,1252,1245;, + 3;1253,3920,3917;, + 3;1247,1253,3917;, + 3;1254,1253,1247;, + 3;1248,1254,1247;, + 3;1249,1254,1248;, + 3;3918,1249,1248;, + 3;1256,1255,3921;, + 3;3919,1256,3921;, + 3;1257,1256,3919;, + 3;1251,1257,3919;, + 3;1258,1257,1251;, + 3;1252,1258,1251;, + 3;1259,3922,3920;, + 3;1253,1259,3920;, + 3;1260,1259,1253;, + 3;1254,1260,1253;, + 3;3923,1260,1254;, + 3;1249,3923,1254;, + 3;1256,1261,1255;, + 3;1257,1262,1256;, + 3;1261,1256,1262;, + 3;1258,1262,1257;, + 3;1259,3924,3922;, + 3;1260,3925,1259;, + 3;3924,1259,3925;, + 3;3923,3925,1260;, + 3;3814,963,1263;, + 3;1263,973,956;, + 3;981,983,959;, + 3;983,981,1269;, + 3;3859,1264,1014;, + 3;1264,3859,1013;, + 3;3836,1265,978;, + 3;3836,979,1265;, + 3;3882,1266,980;, + 3;1266,3882,977;, + 3;1013,1265,1264;, + 3;1265,1013,978;, + 3;1014,1266,977;, + 3;1266,1014,1264;, + 3;1265,979,960;, + 3;957,981,3816;, + 3;3926,960,3834;, + 3;980,1266,1267;, + 3;1266,1269,1267;, + 3;983,1269,987;, + 3;1267,1269,981;, + 3;1269,1264,987;, + 3;1264,1269,1266;, + 3;1264,1265,987;, + 3;1265,986,987;, + 3;986,1265,960;, + 3;986,960,3926;, + 3;986,3926,3821;, + 3;1270,3815,1263;, + 3;974,1270,1008;, + 3;1277,1282,1271;, + 3;1271,3803,948;, + 3;1279,1278,1272;, + 3;1272,3807,3927;, + 3;949,3804,1273;, + 3;1284,3928,1275;, + 3;3808,3805,1274;, + 3;1276,3929,3930;, + 3;3928,1276,1275;, + 3;3928,3929,1276;, + 3;1274,949,1275;, + 3;1278,1277,948;, + 3;1272,1278,948;, + 3;1272,1280,1279;, + 3;1272,3927,1280;, + 3;1282,1281,947;, + 3;1271,1282,947;, + 3;1271,948,1277;, + 3;3810,1284,1283;, + 3;3810,3928,1284;, + 3;3806,3809,1283;, + 3;1273,3806,1283;, + 3;952,1282,1277;, + 3;952,3931,1282;, + 3;954,1278,1279;, + 3;954,952,1278;, + 3;1284,1275,949;, + 3;1273,1284,949;, + 3;1276,3930,950;, + 3;1274,1276,950;, + 3;1286,943,1285;, + 3;1286,850,1291;, + 3;1287,3759,3757;, + 3;1292,1287,3757;, + 3;1288,3798,1286;, + 3;1286,3798,850;, + 3;855,3932,1287;, + 3;855,945,3932;, + 3;849,1289,943;, + 3;1293,852,1289;, + 3;854,1290,860;, + 3;889,853,1290;, + 3;1286,1291,943;, + 3;849,943,1291;, + 3;855,1287,1292;, + 3;855,1292,3758;, + 3;856,852,1293;, + 3;1293,854,856;, + 3;3933,1286,1285;, + 3;946,3799,851;, + 3;946,3756,3801;, + 3;851,3800,943;, + 3;943,3800,1285;, + 3;3934,1286,3933;, + 3;3934,1288,1286;, + 3;1287,3932,3935;, + 3;1287,3935,3759;, + 3;1294,1295,1736;, + 3;1388,1296,1297;, + 3;1294,1389,1735;, + 3;1734,1738,1299;, + 3;1299,1389,1734;, + 3;1304,1390,1333;, + 3;1300,1332,1306;, + 3;1391,3936,1301;, + 3;1737,3937,3938;, + 3;3938,3939,3940;, + 3;1297,1296,1391;, + 3;1302,1294,1334;, + 3;1303,1295,1302;, + 3;1295,1294,1302;, + 3;1298,1735,1305;, + 3;3941,3937,1306;, + 3;3937,1300,1306;, + 3;1332,1390,1304;, + 3;1320,1335,1336;, + 3;1338,1307,1337;, + 3;1339,1340,1314;, + 3;1342,1308,1341;, + 3;1343,1344,1321;, + 3;1345,1337,1307;, + 3;1347,1319,1346;, + 3;1343,1348,1322;, + 3;1313,1335,1349;, + 3;1339,1350,1309;, + 3;1350,1349,1309;, + 3;1341,1340,1317;, + 3;1312,1351,1347;, + 3;3942,1336,3943;, + 3;1344,1310,1351;, + 3;1348,3944,3945;, + 3;1346,1319,1345;, + 3;3943,1313,1325;, + 3;1325,1324,3943;, + 3;1312,1323,1327;, + 3;1327,1326,1312;, + 3;3944,1321,1329;, + 3;1329,1328,3944;, + 3;1311,1314,1331;, + 3;1331,1330,1311;, + 3;1313,1311,1325;, + 3;1330,1325,1311;, + 3;1314,1308,3946;, + 3;3946,1331,1314;, + 3;1321,1312,1326;, + 3;1326,1329,1321;, + 3;1323,1307,3947;, + 3;3947,1327,1323;, + 3;1315,1316,3948;, + 3;3948,3949,1315;, + 3;1317,1309,3950;, + 3;3950,3951,1317;, + 3;1318,1317,3951;, + 3;3951,3952,1318;, + 3;1310,1322,3953;, + 3;3953,3954,1310;, + 3;1316,1319,3955;, + 3;3955,3948,1316;, + 3;1309,1320,3956;, + 3;3956,3950,1309;, + 3;1319,1310,3954;, + 3;3954,3955,1319;, + 3;1320,3957,3958;, + 3;3958,3956,1320;, + 3;1322,3959,3960;, + 3;3960,3953,1322;, + 3;1335,1313,1336;, + 3;1313,3943,1336;, + 3;1337,1316,1338;, + 3;1316,1315,1338;, + 3;1339,1309,1340;, + 3;1309,1317,1340;, + 3;1341,1317,1342;, + 3;1317,1318,1342;, + 3;1343,1322,1344;, + 3;1322,1310,1344;, + 3;1345,1319,1337;, + 3;1319,1316,1337;, + 3;1346,1323,1347;, + 3;1323,1312,1347;, + 3;1343,1321,1348;, + 3;1321,3944,1348;, + 3;1335,1320,1349;, + 3;1320,1309,1349;, + 3;1339,1314,1350;, + 3;1314,1311,1350;, + 3;1350,1311,1349;, + 3;1311,1313,1349;, + 3;1341,1308,1340;, + 3;1308,1314,1340;, + 3;1351,1310,1347;, + 3;1310,1319,1347;, + 3;3942,3957,1336;, + 3;3957,1320,1336;, + 3;1351,1312,1344;, + 3;1312,1321,1344;, + 3;3945,3959,1348;, + 3;3959,1322,1348;, + 3;1345,1307,1346;, + 3;1307,1323,1346;, + 3;1334,1294,1735;, + 3;3961,1295,1303;, + 3;1300,1390,1332;, + 3;1366,1353,1384;, + 3;1387,3962,1367;, + 3;1368,1369,1355;, + 3;1352,1370,1371;, + 3;1371,1356,1372;, + 3;1374,1360,1373;, + 3;3963,1358,1364;, + 3;1376,1358,1375;, + 3;1386,1353,1365;, + 3;1376,3964,1377;, + 3;1374,1353,1378;, + 3;1361,3965,1363;, + 3;1362,1358,3966;, + 3;1380,1359,1379;, + 3;1361,1381,1380;, + 3;1382,1383,1360;, + 3;3967,3968,3969;, + 3;3970,1364,1354;, + 3;1357,3967,3971;, + 3;1361,1362,3966;, + 3;1379,1359,1375;, + 3;3968,3967,1357;, + 3;1381,3972,3973;, + 3;3963,3966,1358;, + 3;1377,3964,3974;, + 3;1373,1360,1383;, + 3;1385,1384,1353;, + 3;1352,1385,1387;, + 3;1372,1356,1378;, + 3;1367,3962,3975;, + 3;1370,1368,1355;, + 3;1368,1367,1369;, + 3;1367,3975,1369;, + 3;1370,1355,1371;, + 3;1355,1356,1371;, + 3;1372,1366,1371;, + 3;1366,1352,1371;, + 3;1373,1365,1374;, + 3;1365,1353,1374;, + 3;1375,1359,1376;, + 3;1359,3964,1376;, + 3;1377,1364,1376;, + 3;1364,1358,1376;, + 3;1378,1356,1374;, + 3;1356,1360,1374;, + 3;1379,1362,1380;, + 3;1362,1361,1380;, + 3;1381,3973,1380;, + 3;3973,1359,1380;, + 3;1382,3968,1383;, + 3;3968,1357,1383;, + 3;1375,1358,1379;, + 3;1358,1362,1379;, + 3;1381,1361,3972;, + 3;1361,1363,3972;, + 3;3974,1354,1377;, + 3;1354,1364,1377;, + 3;1383,1357,1373;, + 3;1357,1365,1373;, + 3;1378,1353,1372;, + 3;1353,1366,1372;, + 3;1370,1352,1368;, + 3;1352,1367,1368;, + 3;1357,3971,1365;, + 3;1325,1324,1330;, + 3;3962,3976,3975;, + 3;1385,3977,3962;, + 3;1386,3971,1385;, + 3;1352,1366,1384;, + 3;1384,1385,1352;, + 3;1385,3971,3977;, + 3;3971,1386,1365;, + 3;1353,1386,1385;, + 3;1352,1387,1367;, + 3;1387,1385,3962;, + 3;3970,3963,1364;, + 3;3965,1361,3966;, + 3;1734,1388,1297;, + 3;1294,1734,1389;, + 3;1299,1735,1389;, + 3;3978,1295,3961;, + 3;3979,1296,3980;, + 3;1297,1391,1301;, + 3;1391,3979,3981;, + 3;1716,3982,1392;, + 3;3982,1716,3983;, + 3;3984,3985,1394;, + 3;1718,3986,3984;, + 3;3987,3983,1393;, + 3;1393,1717,3987;, + 3;1719,3988,1395;, + 3;1719,1394,3985;, + 3;1720,1719,1721;, + 3;1723,1722,1397;, + 3;1724,1399,1725;, + 3;1727,1726,1396;, + 3;1728,1718,1729;, + 3;1728,3989,3990;, + 3;1453,1401,1715;, + 3;1400,3991,3992;, + 3;1426,1712,1402;, + 3;1415,1418,1454;, + 3;3993,1398,1404;, + 3;1713,1433,1408;, + 3;3994,3991,1708;, + 3;1404,1427,3993;, + 3;1418,1415,1403;, + 3;1404,1398,1429;, + 3;3995,1402,1407;, + 3;1456,1419,1400;, + 3;1429,1398,3996;, + 3;1429,3996,1410;, + 3;1436,1409,1406;, + 3;1708,1457,1408;, + 3;1408,3997,3994;, + 3;1434,1409,1435;, + 3;3998,1411,3999;, + 3;1436,1437,1412;, + 3;1437,1436,1410;, + 3;3997,1408,1411;, + 3;1411,1413,3997;, + 3;1406,1409,1431;, + 3;1409,4000,1431;, + 3;1421,1453,1419;, + 3;1454,1418,1401;, + 3;1414,1416,1453;, + 3;1420,1417,1419;, + 3;1708,1418,1457;, + 3;1715,1401,1708;, + 3;1400,1715,3991;, + 3;1414,1453,1421;, + 3;1456,1420,1419;, + 3;1455,1421,1419;, + 3;3995,1427,1426;, + 3;1425,1402,1712;, + 3;1404,1426,1427;, + 3;3995,3993,1427;, + 3;1406,1429,1436;, + 3;1404,1429,1428;, + 3;1428,1429,1406;, + 3;1457,1430,1408;, + 3;1408,1430,1713;, + 3;1428,1406,1431;, + 3;1428,1431,1432;, + 3;3999,1408,1433;, + 3;1408,3999,1411;, + 3;1409,1434,4000;, + 3;1412,1435,1409;, + 3;1410,1436,1429;, + 3;1409,1436,1412;, + 3;1410,4001,1437;, + 3;1437,4001,1440;, + 3;1440,1439,1437;, + 3;1411,3998,1438;, + 3;1438,1441,1411;, + 3;1412,1437,1439;, + 3;1439,1442,1412;, + 3;1413,1411,1441;, + 3;1441,4002,1413;, + 3;1435,1412,1442;, + 3;1442,4003,1435;, + 3;1439,1440,1445;, + 3;1445,1444,1439;, + 3;1441,1438,1443;, + 3;1443,1446,1441;, + 3;4002,1441,1446;, + 3;1446,4004,4002;, + 3;4003,1442,1447;, + 3;1447,4005,4003;, + 3;1442,1439,1444;, + 3;1444,1447,1442;, + 3;1444,1445,1450;, + 3;1450,1449,1444;, + 3;1446,1443,1448;, + 3;1448,1451,1446;, + 3;4004,1446,1451;, + 3;1451,4006,4004;, + 3;4005,1447,1452;, + 3;1452,4007,4005;, + 3;1447,1444,1449;, + 3;1449,1452,1447;, + 3;1452,1449,1450;, + 3;4006,1451,1448;, + 3;4007,1452,1450;, + 3;1419,1715,1400;, + 3;1416,1401,1453;, + 3;1416,1454,1401;, + 3;1417,1455,1419;, + 3;4008,1456,1400;, + 3;1403,1457,1418;, + 3;1461,4009,1460;, + 3;1403,1415,4010;, + 3;1462,1403,4010;, + 3;1457,1403,1462;, + 3;1463,1457,1462;, + 3;1430,1457,1463;, + 3;1464,4011,4012;, + 3;1405,4011,1464;, + 3;1465,1405,1464;, + 3;1424,1405,1465;, + 3;1460,1424,1465;, + 3;4009,1424,1460;, + 3;1467,4013,1466;, + 3;4010,4013,1467;, + 3;1468,4010,1467;, + 3;1462,4010,1468;, + 3;1469,1462,1468;, + 3;1463,1462,1469;, + 3;1470,4012,4014;, + 3;1464,4012,1470;, + 3;1471,1464,1470;, + 3;1465,1464,1471;, + 3;4015,1465,1471;, + 3;1460,1465,4015;, + 3;1473,1466,1472;, + 3;1467,1466,1473;, + 3;1474,1467,1473;, + 3;1468,1467,1474;, + 3;1475,1468,1474;, + 3;1469,1468,1475;, + 3;1476,4014,4016;, + 3;1470,4014,1476;, + 3;1477,1470,1476;, + 3;1471,1470,1477;, + 3;4017,1471,1477;, + 3;4015,1471,4017;, + 3;1479,1472,1478;, + 3;1473,1472,1479;, + 3;1480,1473,1479;, + 3;1474,1473,1480;, + 3;1481,1474,1480;, + 3;1475,1474,1481;, + 3;1482,4016,4018;, + 3;1476,4016,1482;, + 3;1483,1476,1482;, + 3;1477,1476,1483;, + 3;4019,1477,1483;, + 3;4017,1477,4019;, + 3;1485,1478,1484;, + 3;1479,1478,1485;, + 3;1486,1479,1485;, + 3;1480,1479,1486;, + 3;1487,1480,1486;, + 3;1481,1480,1487;, + 3;1488,4018,4020;, + 3;1482,4018,1488;, + 3;1489,1482,1488;, + 3;1483,1482,1489;, + 3;4021,1483,1489;, + 3;4019,1483,4021;, + 3;1491,1484,1490;, + 3;1485,1484,1491;, + 3;1492,1485,1491;, + 3;1486,1485,1492;, + 3;1493,1486,1492;, + 3;1487,1486,1493;, + 3;1494,4020,4022;, + 3;1488,4020,1494;, + 3;1495,1488,1494;, + 3;1489,1488,1495;, + 3;4023,1489,1495;, + 3;4021,1489,4023;, + 3;1497,1490,1496;, + 3;1491,1490,1497;, + 3;1498,1491,1497;, + 3;1492,1491,1498;, + 3;1499,1492,1498;, + 3;1493,1492,1499;, + 3;1500,4022,4024;, + 3;1494,4022,1500;, + 3;1501,1494,1500;, + 3;1495,1494,1501;, + 3;4025,1495,1501;, + 3;4023,1495,4025;, + 3;1503,1496,1502;, + 3;1497,1496,1503;, + 3;1504,1497,1503;, + 3;1498,1497,1504;, + 3;1505,1498,1504;, + 3;1499,1498,1505;, + 3;1506,4024,4026;, + 3;1500,4024,1506;, + 3;1507,1500,1506;, + 3;1501,1500,1507;, + 3;4027,1501,1507;, + 3;4025,1501,4027;, + 3;1509,1502,1508;, + 3;1503,1502,1509;, + 3;1510,1503,1509;, + 3;1504,1503,1510;, + 3;1511,1504,1510;, + 3;1505,1504,1511;, + 3;1512,4026,4028;, + 3;1506,4026,1512;, + 3;1513,1506,1512;, + 3;1507,1506,1513;, + 3;4029,1507,1513;, + 3;4027,1507,4029;, + 3;1515,1508,1514;, + 3;1509,1508,1515;, + 3;1516,1509,1515;, + 3;1510,1509,1516;, + 3;1517,1510,1516;, + 3;1511,1510,1517;, + 3;1518,4028,4030;, + 3;1512,4028,1518;, + 3;1519,1512,1518;, + 3;1513,1512,1519;, + 3;4031,1513,1519;, + 3;4029,1513,4031;, + 3;1515,1514,1520;, + 3;1516,1515,1521;, + 3;1520,1521,1515;, + 3;1517,1516,1521;, + 3;1518,4030,4032;, + 3;1519,1518,4033;, + 3;4032,4033,1518;, + 3;4031,1519,4033;, + 3;1523,1414,1522;, + 3;1416,1414,1523;, + 3;1524,1416,1523;, + 3;1454,1416,1524;, + 3;1525,1454,1524;, + 3;1415,1454,1525;, + 3;1526,4009,4034;, + 3;1423,4009,1526;, + 3;1527,1423,1526;, + 3;1458,1423,1527;, + 3;4035,1458,1527;, + 3;4036,1458,4035;, + 3;1529,1522,1528;, + 3;1523,1522,1529;, + 3;1530,1523,1529;, + 3;1524,1523,1530;, + 3;1531,1524,1530;, + 3;1525,1524,1531;, + 3;1532,4034,4037;, + 3;1526,4034,1532;, + 3;1533,1526,1532;, + 3;1527,1526,1533;, + 3;4038,1527,1533;, + 3;4035,1527,4038;, + 3;1535,1528,1534;, + 3;1529,1528,1535;, + 3;1536,1529,1535;, + 3;1530,1529,1536;, + 3;1537,1530,1536;, + 3;1531,1530,1537;, + 3;1538,4037,4039;, + 3;1532,4037,1538;, + 3;1539,1532,1538;, + 3;1533,1532,1539;, + 3;4040,1533,1539;, + 3;4038,1533,4040;, + 3;1541,1534,1540;, + 3;1535,1534,1541;, + 3;1542,1535,1541;, + 3;1536,1535,1542;, + 3;1543,1536,1542;, + 3;1537,1536,1543;, + 3;1544,4039,4041;, + 3;1538,4039,1544;, + 3;1545,1538,1544;, + 3;1539,1538,1545;, + 3;4042,1539,1545;, + 3;4040,1539,4042;, + 3;1547,1540,1546;, + 3;1541,1540,1547;, + 3;1548,1541,1547;, + 3;1542,1541,1548;, + 3;1549,1542,1548;, + 3;1543,1542,1549;, + 3;1550,4041,4043;, + 3;1544,4041,1550;, + 3;1551,1544,1550;, + 3;1545,1544,1551;, + 3;4044,1545,1551;, + 3;4042,1545,4044;, + 3;1553,1546,1552;, + 3;1547,1546,1553;, + 3;1554,1547,1553;, + 3;1548,1547,1554;, + 3;1555,1548,1554;, + 3;1549,1548,1555;, + 3;1556,4043,4045;, + 3;1550,4043,1556;, + 3;1557,1550,1556;, + 3;1551,1550,1557;, + 3;4046,1551,1557;, + 3;4044,1551,4046;, + 3;1559,1552,1558;, + 3;1553,1552,1559;, + 3;1560,1553,1559;, + 3;1554,1553,1560;, + 3;1561,1554,1560;, + 3;1555,1554,1561;, + 3;1562,4045,4047;, + 3;1556,4045,1562;, + 3;1563,1556,1562;, + 3;1557,1556,1563;, + 3;4048,1557,1563;, + 3;4046,1557,4048;, + 3;1565,1558,1564;, + 3;1559,1558,1565;, + 3;1566,1559,1565;, + 3;1560,1559,1566;, + 3;1567,1560,1566;, + 3;1561,1560,1567;, + 3;1568,4047,4049;, + 3;1562,4047,1568;, + 3;1569,1562,1568;, + 3;1563,1562,1569;, + 3;4050,1563,1569;, + 3;4048,1563,4050;, + 3;1571,1564,1570;, + 3;1565,1564,1571;, + 3;1572,1565,1571;, + 3;1566,1565,1572;, + 3;1573,1566,1572;, + 3;1567,1566,1573;, + 3;1574,4049,4051;, + 3;1568,4049,1574;, + 3;1575,1568,1574;, + 3;1569,1568,1575;, + 3;4052,1569,1575;, + 3;4050,1569,4052;, + 3;1577,1570,1576;, + 3;1571,1570,1577;, + 3;1578,1571,1577;, + 3;1572,1571,1578;, + 3;1579,1572,1578;, + 3;1573,1572,1579;, + 3;1580,4051,4053;, + 3;1574,4051,1580;, + 3;1581,1574,1580;, + 3;1575,1574,1581;, + 3;4054,1575,1581;, + 3;4052,1575,4054;, + 3;1577,1576,1582;, + 3;1578,1577,1583;, + 3;1582,1583,1577;, + 3;1579,1578,1583;, + 3;1580,4053,4055;, + 3;1581,1580,4056;, + 3;4055,4056,1580;, + 3;4054,1581,4056;, + 3;1585,1417,1584;, + 3;1455,1417,1585;, + 3;1586,1455,1585;, + 3;1421,1455,1586;, + 3;1587,1421,1586;, + 3;1414,1421,1587;, + 3;1588,4036,4057;, + 3;1459,4036,1588;, + 3;1589,1459,1588;, + 3;1422,1459,1589;, + 3;4058,1422,1589;, + 3;4059,1422,4058;, + 3;1591,1584,1590;, + 3;1585,1584,1591;, + 3;1592,1585,1591;, + 3;1586,1585,1592;, + 3;1593,1586,1592;, + 3;1587,1586,1593;, + 3;1594,4057,4060;, + 3;1588,4057,1594;, + 3;1595,1588,1594;, + 3;1589,1588,1595;, + 3;4061,1589,1595;, + 3;4058,1589,4061;, + 3;1597,1590,1596;, + 3;1591,1590,1597;, + 3;1598,1591,1597;, + 3;1592,1591,1598;, + 3;1599,1592,1598;, + 3;1593,1592,1599;, + 3;1600,4060,4062;, + 3;1594,4060,1600;, + 3;1601,1594,1600;, + 3;1595,1594,1601;, + 3;4063,1595,1601;, + 3;4061,1595,4063;, + 3;1603,1596,1602;, + 3;1597,1596,1603;, + 3;1604,1597,1603;, + 3;1598,1597,1604;, + 3;1605,1598,1604;, + 3;1599,1598,1605;, + 3;1606,4062,4064;, + 3;1600,4062,1606;, + 3;1607,1600,1606;, + 3;1601,1600,1607;, + 3;4065,1601,1607;, + 3;4063,1601,4065;, + 3;1609,1602,1608;, + 3;1603,1602,1609;, + 3;1610,1603,1609;, + 3;1604,1603,1610;, + 3;1611,1604,1610;, + 3;1605,1604,1611;, + 3;1612,4064,4066;, + 3;1606,4064,1612;, + 3;1613,1606,1612;, + 3;1607,1606,1613;, + 3;4067,1607,1613;, + 3;4065,1607,4067;, + 3;1615,1608,1614;, + 3;1609,1608,1615;, + 3;1616,1609,1615;, + 3;1610,1609,1616;, + 3;1617,1610,1616;, + 3;1611,1610,1617;, + 3;1618,4066,4068;, + 3;1612,4066,1618;, + 3;1619,1612,1618;, + 3;1613,1612,1619;, + 3;4069,1613,1619;, + 3;4067,1613,4069;, + 3;1621,1614,1620;, + 3;1615,1614,1621;, + 3;1622,1615,1621;, + 3;1616,1615,1622;, + 3;1623,1616,1622;, + 3;1617,1616,1623;, + 3;1624,4068,4070;, + 3;1618,4068,1624;, + 3;1625,1618,1624;, + 3;1619,1618,1625;, + 3;4071,1619,1625;, + 3;4069,1619,4071;, + 3;1627,1620,1626;, + 3;1621,1620,1627;, + 3;1628,1621,1627;, + 3;1622,1621,1628;, + 3;1629,1622,1628;, + 3;1623,1622,1629;, + 3;1630,4070,4072;, + 3;1624,4070,1630;, + 3;1631,1624,1630;, + 3;1625,1624,1631;, + 3;4073,1625,1631;, + 3;4071,1625,4073;, + 3;1633,1626,1632;, + 3;1627,1626,1633;, + 3;1634,1627,1633;, + 3;1628,1627,1634;, + 3;1635,1628,1634;, + 3;1629,1628,1635;, + 3;1636,4072,4074;, + 3;1630,4072,1636;, + 3;1637,1630,1636;, + 3;1631,1630,1637;, + 3;4075,1631,1637;, + 3;4073,1631,4075;, + 3;1639,1632,1638;, + 3;1633,1632,1639;, + 3;1640,1633,1639;, + 3;1634,1633,1640;, + 3;1641,1634,1640;, + 3;1635,1634,1641;, + 3;1642,4074,4076;, + 3;1636,4074,1642;, + 3;1643,1636,1642;, + 3;1637,1636,1643;, + 3;4077,1637,1643;, + 3;4075,1637,4077;, + 3;1639,1638,1644;, + 3;1640,1639,1645;, + 3;1644,1645,1639;, + 3;1641,1640,1645;, + 3;1642,4076,4078;, + 3;1643,1642,4079;, + 3;4078,4079,1642;, + 3;4077,1643,4079;, + 3;1647,4008,1646;, + 3;1456,4008,1647;, + 3;1648,1456,1647;, + 3;1420,1456,1648;, + 3;1649,1420,1648;, + 3;1417,1420,1649;, + 3;1650,4059,4080;, + 3;1425,4059,1650;, + 3;1651,1425,1650;, + 3;1402,1425,1651;, + 3;4081,1402,1651;, + 3;1407,1402,4081;, + 3;1653,1646,1652;, + 3;1647,1646,1653;, + 3;1654,1647,1653;, + 3;1648,1647,1654;, + 3;1655,1648,1654;, + 3;1649,1648,1655;, + 3;1656,4080,4082;, + 3;1650,4080,1656;, + 3;1657,1650,1656;, + 3;1651,1650,1657;, + 3;4083,1651,1657;, + 3;4081,1651,4083;, + 3;1659,1652,1658;, + 3;1653,1652,1659;, + 3;1660,1653,1659;, + 3;1654,1653,1660;, + 3;1661,1654,1660;, + 3;1655,1654,1661;, + 3;1662,4082,4084;, + 3;1656,4082,1662;, + 3;1663,1656,1662;, + 3;1657,1656,1663;, + 3;4085,1657,1663;, + 3;4083,1657,4085;, + 3;1665,1658,1664;, + 3;1659,1658,1665;, + 3;1666,1659,1665;, + 3;1660,1659,1666;, + 3;1667,1660,1666;, + 3;1661,1660,1667;, + 3;1668,4084,4086;, + 3;1662,4084,1668;, + 3;1669,1662,1668;, + 3;1663,1662,1669;, + 3;4087,1663,1669;, + 3;4085,1663,4087;, + 3;1671,1664,1670;, + 3;1665,1664,1671;, + 3;1672,1665,1671;, + 3;1666,1665,1672;, + 3;1673,1666,1672;, + 3;1667,1666,1673;, + 3;1674,4086,4088;, + 3;1668,4086,1674;, + 3;1675,1668,1674;, + 3;1669,1668,1675;, + 3;4089,1669,1675;, + 3;4087,1669,4089;, + 3;1677,1670,1676;, + 3;1671,1670,1677;, + 3;1678,1671,1677;, + 3;1672,1671,1678;, + 3;1679,1672,1678;, + 3;1673,1672,1679;, + 3;1680,4088,4090;, + 3;1674,4088,1680;, + 3;1681,1674,1680;, + 3;1675,1674,1681;, + 3;4091,1675,1681;, + 3;4089,1675,4091;, + 3;1683,1676,1682;, + 3;1677,1676,1683;, + 3;1684,1677,1683;, + 3;1678,1677,1684;, + 3;1685,1678,1684;, + 3;1679,1678,1685;, + 3;1686,4090,4092;, + 3;1680,4090,1686;, + 3;1687,1680,1686;, + 3;1681,1680,1687;, + 3;4093,1681,1687;, + 3;4091,1681,4093;, + 3;1689,1682,1688;, + 3;1683,1682,1689;, + 3;1690,1683,1689;, + 3;1684,1683,1690;, + 3;1691,1684,1690;, + 3;1685,1684,1691;, + 3;1692,4092,4094;, + 3;1686,4092,1692;, + 3;1693,1686,1692;, + 3;1687,1686,1693;, + 3;4095,1687,1693;, + 3;4093,1687,4095;, + 3;1695,1688,1694;, + 3;1689,1688,1695;, + 3;1696,1689,1695;, + 3;1690,1689,1696;, + 3;1697,1690,1696;, + 3;1691,1690,1697;, + 3;1698,4094,4096;, + 3;1692,4094,1698;, + 3;1699,1692,1698;, + 3;1693,1692,1699;, + 3;4097,1693,1699;, + 3;4095,1693,4097;, + 3;1701,1694,1700;, + 3;1695,1694,1701;, + 3;1702,1695,1701;, + 3;1696,1695,1702;, + 3;1703,1696,1702;, + 3;1697,1696,1703;, + 3;1704,4096,4098;, + 3;1698,4096,1704;, + 3;1705,1698,1704;, + 3;1699,1698,1705;, + 3;4099,1699,1705;, + 3;4097,1699,4099;, + 3;1701,1700,1706;, + 3;1702,1701,1707;, + 3;1706,1707,1701;, + 3;1703,1702,1707;, + 3;1704,4098,4100;, + 3;1705,1704,4101;, + 3;4100,4101,1704;, + 3;4099,1705,4101;, + 3;3994,1708,1408;, + 3;1708,1401,1418;, + 3;1426,1404,1428;, + 3;1428,1714,1426;, + 3;4036,1459,1709;, + 3;1709,1458,4036;, + 3;4009,1423,1710;, + 3;4009,1710,1424;, + 3;4059,1425,1711;, + 3;1711,1422,4059;, + 3;1458,1709,1710;, + 3;1710,1423,1458;, + 3;1459,1422,1711;, + 3;1711,1709,1459;, + 3;1710,1405,1424;, + 3;1402,3995,1426;, + 3;4102,4011,1405;, + 3;1425,1712,1711;, + 3;1711,1712,1714;, + 3;1428,1432,1714;, + 3;1712,1426,1714;, + 3;1714,1432,1709;, + 3;1709,1711,1714;, + 3;1709,1432,1710;, + 3;1710,1432,1431;, + 3;1431,1405,1710;, + 3;1431,4102,1405;, + 3;1431,4000,4102;, + 3;1715,1708,3991;, + 3;1419,1453,1715;, + 3;1722,1716,1727;, + 3;1716,1393,3983;, + 3;1724,1717,1723;, + 3;1717,4103,3987;, + 3;1394,1718,3984;, + 3;1729,1720,4104;, + 3;3988,1719,3985;, + 3;1721,4105,4106;, + 3;4104,1720,1721;, + 3;4104,1721,4106;, + 3;1719,1720,1394;, + 3;1723,1393,1722;, + 3;1717,1393,1723;, + 3;1717,1724,1725;, + 3;1717,1725,4103;, + 3;1727,1392,1726;, + 3;1716,1392,1727;, + 3;1716,1722,1393;, + 3;3989,1728,1729;, + 3;3989,1729,4104;, + 3;3986,1728,3990;, + 3;1718,1728,3986;, + 3;1397,1722,1727;, + 3;1397,1727,1396;, + 3;1399,1724,1723;, + 3;1399,1723,1397;, + 3;1729,1394,1720;, + 3;1718,1394,1729;, + 3;1721,1395,4105;, + 3;1719,1395,1721;, + 3;1731,1730,1388;, + 3;1731,1736,1295;, + 3;1732,3938,3940;, + 3;1737,3938,1732;, + 3;1733,1731,3978;, + 3;1731,1295,3978;, + 3;1300,1732,4107;, + 3;1300,4107,1390;, + 3;1294,1388,1734;, + 3;1738,1734,1297;, + 3;1299,1305,1735;, + 3;1334,1735,1298;, + 3;1731,1388,1736;, + 3;1294,1736,1388;, + 3;1300,1737,1732;, + 3;1300,3937,1737;, + 3;1301,1738,1297;, + 3;1738,1301,1299;, + 3;4108,1730,1731;, + 3;1391,1296,3979;, + 3;1391,3981,3936;, + 3;1296,1388,3980;, + 3;1388,1730,3980;, + 3;4109,4108,1731;, + 3;4109,1731,1733;, + 3;1732,4110,4107;, + 3;1732,3940,4110;, + 3;196,4111,197;, + 3;3759,4112,3760;, + 3;3938,4113,3939;, + 3;74,75,4114;, + 3;1744,6,1742;, + 3;10,97,1739;, + 3;1743,1745,142;, + 3;1740,144,215;, + 3;4115,4116,1741;, + 3;1741,1744,4115;, + 3;4117,4118,1742;, + 3;1742,1745,4117;, + 3;4118,4115,1744;, + 3;1744,1742,4118;, + 3;4119,4117,1745;, + 3;1745,1743,4119;, + 3;118,107,3471;, + 3;3460,3471,107;, + 3;233,3527,3528;, + 3;3528,3518,224;, + 3;106,5,87;, + 3;106,87,110;, + 3;1779,1790,1756;, + 3;1757,1819,1751;, + 3;1825,1826,4120;, + 3;1758,1829,1748;, + 3;2386,2124,2140;, + 3;2330,2146,2425;, + 3;1870,1872,1782;, + 3;4121,1846,4122;, + 3;1834,1835,1759;, + 3;2183,2240,2182;, + 3;2698,2714,2138;, + 3;2344,2518,2356;, + 3;4123,1852,4124;, + 3;1761,1865,4125;, + 3;1818,1799,1766;, + 3;2711,2132,2707;, + 3;2288,2450,2748;, + 3;2129,2213,2725;, + 3;2726,2753,2169;, + 3;2461,2471,2433;, + 3;1762,1763,1760;, + 3;1770,1772,1771;, + 3;2214,2022,2040;, + 3;2457,2193,2206;, + 3;2749,2758,2168;, + 3;2184,2176,2239;, + 3;2041,2190,2052;, + 3;2163,2231,2287;, + 3;2739,2284,2036;, + 3;2724,2204,2180;, + 3;2194,2044,2056;, + 3;2185,2196,2175;, + 3;2186,2043,2195;, + 3;2189,2042,2178;, + 3;2205,2188,2179;, + 3;2113,2062,2070;, + 3;2192,2458,2064;, + 3;2075,2198,2074;, + 3;2177,2042,2187;, + 3;2199,2053,2073;, + 3;2191,2065,2051;, + 3;2174,2197,2076;, + 3;2200,2700,2211;, + 3;2712,2202,2131;, + 3;2121,2396,2209;, + 3;2203,2212,2130;, + 3;1833,1800,1831;, + 3;2222,2021,2215;, + 3;2173,2077,2090;, + 3;2221,2037,2034;, + 3;2084,2020,2223;, + 3;2285,2220,2035;, + 3;2723,2181,2232;, + 3;2256,2282,2245;, + 3;2261,2278,2270;, + 3;2251,2281,2257;, + 3;2246,2277,2262;, + 3;2269,2279,2275;, + 3;2164,2249,2230;, + 3;2248,2165,2243;, + 3;2170,2259,2238;, + 3;2258,2171,2255;, + 3;2216,2267,2226;, + 3;2266,2217,2265;, + 3;2081,2254,2172;, + 3;2253,2082,2273;, + 3;2224,2272,2083;, + 3;2271,2225,2268;, + 3;2228,2264,2218;, + 3;2263,2229,2250;, + 3;2236,2242,2166;, + 3;2241,2237,2260;, + 3;2280,2252,2274;, + 3;2276,2247,2244;, + 3;2160,2738,2732;, + 3;2227,2219,2286;, + 3;2143,2159,2429;, + 3;2297,2449,2289;, + 3;2142,2430,2291;, + 3;2309,2469,2495;, + 3;2434,2127,2768;, + 3;2472,2437,2308;, + 3;2477,2302,2444;, + 3;2730,2028,2746;, + 3;4126,1823,1747;, + 3;1769,1778,3416;, + 3;4127,1838,1750;, + 3;1883,1763,1762;, + 3;1765,1856,4128;, + 3;1764,1804,1784;, + 3;1858,1859,4129;, + 3;1777,1760,1763;, + 3;1749,1752,1763;, + 3;1746,1806,1767;, + 3;1773,3416,1775;, + 3;1771,1769,1770;, + 3;4130,4131,4132;, + 3;4133,4134,1768;, + 3;4135,4136,4137;, + 3;4136,4135,4138;, + 3;4137,4139,4140;, + 3;4139,4137,4136;, + 3;4141,4142,4143;, + 3;1776,4140,4139;, + 3;1774,1768,4134;, + 3;4144,4143,4142;, + 3;4132,4138,4135;, + 3;4138,4132,4131;, + 3;4143,4144,1774;, + 3;3416,1773,4145;, + 3;1768,1774,4144;, + 3;4142,4141,1776;, + 3;3416,4145,1770;, + 3;4146,2141,4147;, + 3;4140,1776,4141;, + 3;3416,4148,1775;, + 3;4131,4130,4133;, + 3;4149,1807,4150;, + 3;4134,4133,4130;, + 3;2715,2709,2333;, + 3;2319,2343,2549;, + 3;4151,1849,4152;, + 3;2145,4153,2704;, + 3;2710,2703,2332;, + 3;2524,2523,2346;, + 3;1783,1809,4154;, + 3;2320,2147,2342;, + 3;2335,2352,2329;, + 3;2351,2336,2350;, + 3;2363,2341,2148;, + 3;2367,2328,2353;, + 3;2375,2349,2337;, + 3;2370,2385,2536;, + 3;2537,2360,2135;, + 3;4155,1867,4156;, + 3;2327,2368,2362;, + 3;2513,2512,2355;, + 3;2149,2361,2369;, + 3;2531,2529,2374;, + 3;2348,2376,2372;, + 3;1785,1811,4157;, + 3;2389,2383,2378;, + 3;2381,2134,2357;, + 3;2384,2371,2377;, + 3;2133,2382,2390;, + 3;4158,1877,4159;, + 3;2338,2388,2379;, + 3;2393,2098,2401;, + 3;2392,2397,2115;, + 3;2109,2060,2399;, + 3;2394,2412,2097;, + 3;2411,2395,2122;, + 3;1755,1813,1787;, + 3;2407,2423,2101;, + 3;2422,2408,2415;, + 3;2402,2414,2409;, + 3;2413,2403,2418;, + 3;2419,2417,2404;, + 3;2416,2420,2108;, + 3;2099,2107,2421;, + 3;4160,1840,4161;, + 3;1788,1861,4162;, + 3;1754,1843,4163;, + 3;2102,2096,2406;, + 3;2114,2398,2061;, + 3;2112,2400,2091;, + 3;4164,1873,4165;, + 3;2424,2141,2318;, + 3;1779,1879,1790;, + 3;1756,1790,1879;, + 3;1757,4166,1820;, + 3;1751,1819,4166;, + 3;1825,4167,1827;, + 3;4120,1826,4167;, + 3;1758,1828,1830;, + 3;1748,1829,1828;, + 3;1870,1871,1794;, + 3;1782,1872,1871;, + 3;4121,4168,1847;, + 3;4122,1846,4168;, + 3;1834,1836,1796;, + 3;1759,1835,1753;, + 3;4123,4169,1853;, + 3;4124,1852,4169;, + 3;1761,1864,1866;, + 3;4125,1865,1864;, + 3;4170,1789,1799;, + 3;1766,1799,1789;, + 3;1833,1832,1800;, + 3;1831,1800,1832;, + 3;1824,1822,1801;, + 3;1747,1823,1822;, + 3;4127,4171,1837;, + 3;1750,1837,4171;, + 3;1857,1855,1803;, + 3;4128,1856,1855;, + 3;4154,1781,4172;, + 3;4173,4174,4175;, + 3;1858,1860,1805;, + 3;4129,1859,1786;, + 3;1746,4176,1881;, + 3;1767,1806,1880;, + 3;4149,4177,1807;, + 3;4150,1882,4178;, + 3;4151,1850,1851;, + 3;4152,1849,4179;, + 3;1783,1781,1809;, + 3;4154,1809,1781;, + 3;4155,4180,1868;, + 3;4156,1867,4180;, + 3;1785,4181,1811;, + 3;4157,1811,4181;, + 3;1878,1876,1812;, + 3;4159,1877,1876;, + 3;2410,2426,2405;, + 3;4160,4182,1841;, + 3;4161,1840,4182;, + 3;1788,4183,1862;, + 3;4162,1861,4183;, + 3;1754,4184,1844;, + 3;4163,1843,4184;, + 3;4164,1874,1875;, + 3;4165,1873,4185;, + 3;4186,4187,4188;, + 3;4187,4186,4189;, + 3;4170,1799,1818;, + 3;4187,4189,4190;, + 3;2152,2456,2489;, + 3;2431,2300,2290;, + 3;2156,2126,2435;, + 3;2476,2301,2478;, + 3;2438,2764,2307;, + 3;2501,2485,2296;, + 3;2446,2311,2728;, + 3;2310,2447,2468;, + 3;2155,2436,2473;, + 3;2452,2293,2491;, + 3;2459,2118,2063;, + 3;2150,2465,2428;, + 3;2432,2466,2299;, + 3;2451,2492,2488;, + 3;2467,2448,2298;, + 3;2153,2500,2455;, + 3;2454,2496,2505;, + 3;2453,2506,2292;, + 3;2295,2482,2316;, + 3;2462,2494,2470;, + 3;2493,2463,2487;, + 3;2315,2483,2442;, + 3;2440,2503,2481;, + 3;2502,2441,2484;, + 3;2151,2486,2464;, + 3;2479,2498,2475;, + 3;2497,2480,2504;, + 3;2154,2474,2499;, + 3;2317,2490,2294;, + 3;2507,2366,2354;, + 3;2550,2340,2364;, + 3;2326,2544,2561;, + 3;2345,2519,2517;, + 3;2562,2325,2556;, + 3;2373,2530,2347;, + 3;2568,2324,2563;, + 3;2359,2538,2534;, + 3;2323,2569,2541;, + 3;2535,2380,2358;, + 3;2574,2528,2532;, + 3;2717,2543,2136;, + 3;2620,2599,2606;, + 3;2548,2339,2551;, + 3;2621,2629,2598;, + 3;2508,2555,2365;, + 3;2590,2634,2601;, + 3;2630,2625,2600;, + 3;2613,2589,2612;, + 3;2592,2582,2558;, + 3;2655,2616,2649;, + 3;2615,2656,2654;, + 3;2570,2579,2540;, + 3;2539,2580,2533;, + 3;2583,2567,2557;, + 3;2614,2650,2588;, + 3;2611,2581,2593;, + 3;2610,2594,2602;, + 3;2525,2608,2522;, + 3;2607,2526,2619;, + 3;2514,2596,2511;, + 3;2595,2515,2605;, + 3;2545,2632,2560;, + 3;2631,2546,2624;, + 3;2520,2604,2516;, + 3;2603,2521,2609;, + 3;2564,2645,2573;, + 3;2644,2565,2639;, + 3;2575,2618,2527;, + 3;2617,2576,2648;, + 3;2552,2623,2547;, + 3;2622,2553,2628;, + 3;2509,2627,2554;, + 3;2626,2510,2597;, + 3;2591,2559,2633;, + 3;2661,2647,2577;, + 3;2666,2572,2640;, + 3;2584,2638,2566;, + 3;2683,2676,2671;, + 3;2684,2682,2675;, + 3;2689,2681,2685;, + 3;2680,2690,2697;, + 3;2578,2571,2667;, + 3;2662,2660,2646;, + 3;2657,2687,2653;, + 3;2686,2658,2693;, + 3;2651,2669,2587;, + 3;2668,2652,2688;, + 3;2635,2678,2643;, + 3;2677,2636,2674;, + 3;2641,2695,2665;, + 3;2694,2642,2679;, + 3;2585,2673,2637;, + 3;2672,2586,2670;, + 3;2663,2692,2659;, + 3;2691,2664,2696;, + 3;1819,1791,1821;, + 3;1757,1820,1819;, + 3;2701,2120,2210;, + 3;2119,2702,2139;, + 3;1820,1791,1819;, + 3;1820,1821,1791;, + 3;1819,1821,4166;, + 3;1820,4166,1821;, + 3;1747,1822,4191;, + 3;4126,4191,1822;, + 3;1823,1801,1822;, + 3;1824,1801,1823;, + 3;4126,1822,1824;, + 3;4126,1824,1823;, + 3;4192,4167,1825;, + 3;4192,1825,4120;, + 3;1826,1827,4167;, + 3;1825,1792,1826;, + 3;1825,1827,1792;, + 3;1826,1792,1827;, + 3;1748,1828,4193;, + 3;1758,4193,1828;, + 3;1829,1793,1828;, + 3;1758,1830,1829;, + 3;1830,1793,1829;, + 3;1830,1828,1793;, + 3;4194,1831,4195;, + 3;4195,1831,4196;, + 3;1831,1832,4196;, + 3;4194,4196,1832;, + 3;4194,1832,1833;, + 3;4194,1833,1831;, + 3;4197,1753,1834;, + 3;4197,1834,1759;, + 3;1835,1796,1836;, + 3;1834,1796,1835;, + 3;1835,1836,1753;, + 3;1834,1753,1836;, + 3;1839,1837,1802;, + 3;1750,1838,1837;, + 3;1838,1802,1837;, + 3;1839,1802,1838;, + 3;4127,1837,1839;, + 3;4127,1839,1838;, + 3;1840,1814,1842;, + 3;4160,1841,1840;, + 3;1841,1814,1840;, + 3;1841,1842,1814;, + 3;1840,1842,4182;, + 3;1841,4182,1842;, + 3;1843,1845,4184;, + 3;1754,1844,1843;, + 3;1844,1816,1843;, + 3;1844,4184,1845;, + 3;1844,1845,1816;, + 3;1843,1816,1845;, + 3;1846,1848,4168;, + 3;4121,1847,1846;, + 3;1847,1795,1846;, + 3;1847,4168,1848;, + 3;1847,1848,1795;, + 3;1846,1795,1848;, + 3;1849,1808,1850;, + 3;4151,1851,1849;, + 3;1849,1850,4179;, + 3;4151,4179,1850;, + 3;1851,1808,1849;, + 3;1851,1850,1808;, + 3;1852,1854,4169;, + 3;4123,1853,1852;, + 3;1853,1797,1852;, + 3;1853,4169,1854;, + 3;1853,1854,1797;, + 3;1852,1797,1854;, + 3;4128,1855,4198;, + 3;1765,4198,1855;, + 3;1856,1803,1855;, + 3;1857,1803,1856;, + 3;1765,1855,1857;, + 3;1765,1857,1856;, + 3;4199,1786,1858;, + 3;4199,1858,4129;, + 3;1859,1805,1860;, + 3;1858,1805,1859;, + 3;1859,1860,1786;, + 3;1858,1786,1860;, + 3;1861,1815,1863;, + 3;1788,1862,1861;, + 3;1862,1815,1861;, + 3;1862,1863,1815;, + 3;1861,1863,4183;, + 3;1862,4183,1863;, + 3;4125,1864,4200;, + 3;1761,4200,1864;, + 3;1865,1798,1864;, + 3;1761,1866,1865;, + 3;1866,1798,1865;, + 3;1866,1864,1798;, + 3;1867,1869,4180;, + 3;4155,1868,1867;, + 3;1868,1810,1867;, + 3;1868,4180,1869;, + 3;1868,1869,1810;, + 3;1867,1810,1869;, + 3;4201,1780,1870;, + 3;4201,1870,1782;, + 3;1782,1871,1780;, + 3;1870,1780,1871;, + 3;1872,1794,1871;, + 3;1870,1794,1872;, + 3;1873,1817,1874;, + 3;4164,1875,1873;, + 3;1873,1874,4185;, + 3;4164,4185,1874;, + 3;1875,1817,1873;, + 3;1875,1874,1817;, + 3;4159,1876,4202;, + 3;4158,4202,1876;, + 3;1877,1812,1876;, + 3;1878,1812,1877;, + 3;4158,1876,1878;, + 3;4158,1878,1877;, + 3;1756,1879,4203;, + 3;1779,4203,1879;, + 3;4177,4178,1882;, + 3;1880,1881,4176;, + 3;1746,1881,1806;, + 3;1880,1806,1881;, + 3;4177,1882,1807;, + 3;4150,1807,1882;, + 3;2144,2705,2158;, + 3;2706,2125,2157;, + 3;2699,2201,2713;, + 3;2137,2708,2716;, + 3;2322,2542,2718;, + 3;2321,2719,2334;, + 3;2117,2460,2207;, + 3;2116,2208,2391;, + 3;2306,2759,2756;, + 3;2303,2314,2443;, + 3;2168,2235,2167;, + 3;2445,2729,2747;, + 3;2027,2731,2733;, + 3;2161,2741,2737;, + 3;2162,2283,2740;, + 3;1749,1763,1883;, + 3;2745,2023,2030;, + 3;2313,2304,2751;, + 3;2727,2312,2752;, + 3;2750,2305,2757;, + 3;2761,2722,2233;, + 3;2760,2234,2755;, + 3;2439,2765,2763;, + 3;2766,2721,2762;, + 3;2767,2128,2720;, + 3;4204,1884,4205;, + 3;4206,1885,4207;, + 3;2387,2427,2123;, + 3;1884,4206,4205;, + 3;4204,4206,1884;, + 3;1885,4204,4207;, + 3;4206,4204,1885;, + 3;1910,1887,1921;, + 3;1888,4208,1950;, + 3;1956,4209,1957;, + 3;1889,4210,1960;, + 3;3044,2796,2780;, + 3;2987,3083,2802;, + 3;2001,1913,2003;, + 3;4211,4212,1977;, + 3;1965,1890,1966;, + 3;2839,2838,2896;, + 3;3357,2790,3373;, + 3;3001,3013,3177;, + 3;4213,4214,1983;, + 3;1892,4215,1996;, + 3;1949,1897,1930;, + 3;3369,3366,2788;, + 3;2944,3395,3109;, + 3;2783,3384,2869;, + 3;3385,2825,3400;, + 3;3120,3092,3130;, + 3;1893,1891,1894;, + 3;1901,1902,1903;, + 3;2870,2039,2017;, + 3;3116,2866,2849;, + 3;3399,2816,3405;, + 3;2843,2888,2832;, + 3;2048,2049,2846;, + 3;2821,2943,2887;, + 3;2744,2031,2941;, + 3;3379,2834,2868;, + 3;2850,2055,2045;, + 3;2842,2826,2854;, + 3;2841,2855,2046;, + 3;2847,2836,2047;, + 3;2867,2835,2848;, + 3;2769,2069,2057;, + 3;2844,2067,3119;, + 3;2080,2071,2852;, + 3;2837,2840,2047;, + 3;2851,2072,2054;, + 3;2845,2050,2066;, + 3;2827,2079,2853;, + 3;2856,2861,3360;, + 3;3368,2781,2858;, + 3;2777,2863,3054;, + 3;2857,2782,2860;, + 3;1964,1962,1931;, + 3;2878,2877,2018;, + 3;2828,2089,2078;, + 3;2871,2033,2038;, + 3;2085,2882,2019;, + 3;2940,2032,2872;, + 3;3380,2895,2833;, + 3;2912,2901,2938;, + 3;2917,2926,2935;, + 3;2907,2916,2932;, + 3;2902,2921,2936;, + 3;2922,2931,2934;, + 3;2820,2883,2904;, + 3;2905,2898,2819;, + 3;2831,2889,2914;, + 3;2915,2908,2830;, + 3;2876,2879,2924;, + 3;2925,2918,2875;, + 3;2088,2829,2909;, + 3;2910,2928,2087;, + 3;2881,2086,2929;, + 3;2930,2923,2880;, + 3;2885,2874,2919;, + 3;2920,2903,2884;, + 3;2891,2818,2899;, + 3;2900,2913,2890;, + 3;2933,2927,2911;, + 3;2937,2897,2906;, + 3;2824,3386,2735;, + 3;2886,2939,2873;, + 3;2799,3090,2815;, + 3;2953,2947,3104;, + 3;2800,2945,3089;, + 3;2965,3154,3126;, + 3;3093,3415,2785;, + 3;3131,2964,3096;, + 3;3136,3103,2962;, + 3;3388,3393,2025;, + 3;4216,4217,1954;, + 3;1900,1901,3417;, + 3;4218,4219,1969;, + 3;2014,1893,1894;, + 3;1896,4220,1987;, + 3;1895,1915,1935;, + 3;1989,4221,1990;, + 3;1908,1894,1891;, + 3;1749,1894,1752;, + 3;1746,1898,1937;, + 3;3417,1906,1899;, + 3;1902,1901,1900;, + 3;4222,4223,4224;, + 3;1909,4225,4226;, + 3;4135,4137,4227;, + 3;4227,4228,4135;, + 3;4137,4229,4230;, + 3;4230,4227,4137;, + 3;4231,4232,1904;, + 3;1907,4230,4229;, + 3;1905,4226,4225;, + 3;4233,1904,4232;, + 3;4223,4135,4228;, + 3;4228,4224,4223;, + 3;4232,1905,4233;, + 3;1906,3417,4234;, + 3;4225,4233,1905;, + 3;1904,1907,4231;, + 3;4235,1900,3417;, + 3;2801,1908,1891;, + 3;4229,4231,1907;, + 3;4235,3417,1899;, + 3;4224,1909,4222;, + 3;4236,4237,1938;, + 3;4226,4222,1909;, + 3;3374,2989,3371;, + 3;2975,3208,3000;, + 3;4238,4239,1980;, + 3;2802,3364,2991;, + 3;3370,2990,3365;, + 3;3183,3006,3182;, + 3;1914,4240,1940;, + 3;2982,2996,2805;, + 3;2995,2986,3011;, + 3;3012,3002,2994;, + 3;3021,2804,2997;, + 3;3024,3010,2983;, + 3;3033,2993,3003;, + 3;3028,3195,3043;, + 3;3196,2793,3017;, + 3;4241,4242,1998;, + 3;2984,3019,3023;, + 3;3176,3008,3171;, + 3;2803,3022,3020;, + 3;3194,3029,3185;, + 3;3004,3031,3037;, + 3;1916,4243,1942;, + 3;3046,3035,3039;, + 3;3041,3016,2794;, + 3;3038,3036,3032;, + 3;2795,3045,3040;, + 3;4244,4245,2008;, + 3;2992,3034,3047;, + 3;3051,3059,2093;, + 3;3052,2773,3058;, + 3;2110,3056,2059;, + 3;3050,2094,3070;, + 3;3064,2776,3049;, + 3;1886,1918,1944;, + 3;3068,2104,3080;, + 3;3081,3071,3067;, + 3;3060,3066,3072;, + 3;3073,3074,3063;, + 3;3077,3062,3075;, + 3;3076,2105,3079;, + 3;2100,3078,2106;, + 3;4246,4247,1971;, + 3;1919,4248,1992;, + 3;4249,4250,1974;, + 3;2103,3069,2095;, + 3;2774,2058,3057;, + 3;2111,2092,3055;, + 3;4251,4252,2004;, + 3;3082,2974,4253;, + 3;1910,1921,2010;, + 3;1887,2010,1921;, + 3;1888,1951,4254;, + 3;4208,4254,1950;, + 3;1956,1958,4255;, + 3;4209,4255,1957;, + 3;1889,1961,1959;, + 3;4210,1959,1960;, + 3;2001,1925,2002;, + 3;1913,2002,2003;, + 3;4211,1978,4256;, + 3;4212,4256,1977;, + 3;1965,1927,1967;, + 3;1890,4257,1966;, + 3;4213,1984,4258;, + 3;4214,4258,1983;, + 3;1892,1997,1995;, + 3;4215,1995,1996;, + 3;4259,1930,1920;, + 3;1897,1920,1930;, + 3;1964,1931,1963;, + 3;1962,1963,1931;, + 3;1955,1932,1953;, + 3;4217,1953,1954;, + 3;4218,1968,4260;, + 3;4219,4260,1968;, + 3;1988,1934,1986;, + 3;4220,1986,1987;, + 3;4240,4261,1912;, + 3;3018,2985,3084;, + 3;1989,1936,1991;, + 3;4221,1917,1990;, + 3;1746,2012,4176;, + 3;1898,2011,1937;, + 3;4236,1938,4262;, + 3;4237,4178,2013;, + 3;4238,1982,1981;, + 3;4239,4263,1980;, + 3;1914,1940,1912;, + 3;4240,1912,1940;, + 3;4241,1999,4264;, + 3;4242,4264,1998;, + 3;1916,1942,4265;, + 3;4243,4265,1942;, + 3;2009,1943,2007;, + 3;4245,2007,2008;, + 3;3065,3061,3086;, + 3;4246,1972,4266;, + 3;4247,4266,1971;, + 3;1919,1993,4267;, + 3;4248,4267,1992;, + 3;4249,1975,4268;, + 3;4250,4268,1974;, + 3;4251,2006,2005;, + 3;4252,4269,2004;, + 3;4270,4271,4272;, + 3;4272,4273,4270;, + 3;4259,1949,1930;, + 3;4272,4274,4273;, + 3;2812,3148,3115;, + 3;3088,2946,2954;, + 3;2808,3098,2786;, + 3;3132,3140,2963;, + 3;3095,2957,3411;, + 3;3160,2952,3144;, + 3;3107,3390,2972;, + 3;2973,3127,3106;, + 3;2809,3135,3097;, + 3;3113,3152,2950;, + 3;3118,2068,2770;, + 3;2814,3091,3121;, + 3;3087,2955,3129;, + 3;3114,3145,3151;, + 3;3128,2956,3105;, + 3;2811,3110,3159;, + 3;3111,3162,3158;, + 3;3112,2951,3161;, + 3;2948,2967,3143;, + 3;3124,3125,3149;, + 3;3150,3146,3123;, + 3;2968,3100,3142;, + 3;3102,3137,3164;, + 3;3165,3141,3101;, + 3;2813,3122,3147;, + 3;3139,3133,3156;, + 3;3157,3163,3138;, + 3;2810,3155,3134;, + 3;2966,2949,3153;, + 3;3170,3009,3025;, + 3;3209,3027,2998;, + 3;2976,3220,3207;, + 3;3007,3172,3181;, + 3;3221,3219,2977;, + 3;3030,3005,3184;, + 3;3227,3226,2978;, + 3;3014,3191,3202;, + 3;2979,3199,3232;, + 3;3190,3015,3042;, + 3;3233,3193,3186;, + 3;3377,2792,3197;, + 3;3279,3265,3258;, + 3;3203,3214,2999;, + 3;3284,3254,3288;, + 3;3169,3026,3210;, + 3;3249,3263,3293;, + 3;3292,3264,3280;, + 3;3272,3271,3248;, + 3;3252,3217,3246;, + 3;3314,3308,3276;, + 3;3277,3313,3319;, + 3;3231,3200,3235;, + 3;3201,3192,3234;, + 3;3245,3218,3222;, + 3;3278,3240,3312;, + 3;3266,3251,3247;, + 3;3267,3262,3250;, + 3;3189,3178,3269;, + 3;3270,3273,3188;, + 3;3175,3166,3256;, + 3;3257,3259,3174;, + 3;3206,3215,3290;, + 3;3291,3281,3205;, + 3;3180,3173,3260;, + 3;3261,3268,3179;, + 3;3225,3228,3304;, + 3;3299,3298,3224;, + 3;3239,3187,3274;, + 3;3275,3305,3238;, + 3;3213,3204,3282;, + 3;3283,3285,3212;, + 3;3168,3211,3286;, + 3;3287,3255,3167;, + 3;3253,3289,3216;, + 3;3320,3237,3306;, + 3;3322,3303,3229;, + 3;3244,3223,3294;, + 3;3342,3330,3335;, + 3;3347,3331,3341;, + 3;3348,3346,3336;, + 3;3337,3356,3352;, + 3;3236,3321,3230;, + 3;3326,3307,3315;, + 3;3318,3309,3344;, + 3;3345,3349,3317;, + 3;3311,3241,3328;, + 3;3329,3343,3310;, + 3;3297,3300,3339;, + 3;3340,3332,3296;, + 3;3302,3323,3354;, + 3;3355,3338,3301;, + 3;3243,3295,3333;, + 3;3334,3327,3242;, + 3;3325,3316,3350;, + 3;3351,3353,3324;, + 3;1950,1952,1922;, + 3;1888,1950,1951;, + 3;3359,2862,2778;, + 3;2779,2789,3358;, + 3;1951,1950,1922;, + 3;1951,1922,1952;, + 3;1950,4254,1952;, + 3;1951,1952,4254;, + 3;4217,4275,1953;, + 3;4216,1953,4275;, + 3;1954,1953,1932;, + 3;1955,1954,1932;, + 3;4216,1955,1953;, + 3;4216,1954,1955;, + 3;4276,1956,4255;, + 3;4276,4209,1956;, + 3;1957,4255,1958;, + 3;1956,1957,1923;, + 3;1956,1923,1958;, + 3;1957,1958,1923;, + 3;4210,4277,1959;, + 3;1889,1959,4277;, + 3;1960,1959,1924;, + 3;1889,1960,1961;, + 3;1961,1960,1924;, + 3;1961,1924,1959;, + 3;4278,4279,1962;, + 3;4279,4280,1962;, + 3;1962,4280,1963;, + 3;4278,1963,4280;, + 3;4278,1964,1963;, + 3;4278,1962,1964;, + 3;4281,1965,4257;, + 3;4281,1890,1965;, + 3;1966,1967,1927;, + 3;1965,1966,1927;, + 3;1966,4257,1967;, + 3;1965,1967,4257;, + 3;1970,1933,1968;, + 3;4219,1968,1969;, + 3;1969,1968,1933;, + 3;1970,1969,1933;, + 3;4218,1970,1968;, + 3;4218,1969,1970;, + 3;1971,1973,1945;, + 3;4246,1971,1972;, + 3;1972,1971,1945;, + 3;1972,1945,1973;, + 3;1971,4266,1973;, + 3;1972,1973,4266;, + 3;1974,4268,1976;, + 3;4249,1974,1975;, + 3;1975,1974,1947;, + 3;1975,1976,4268;, + 3;1975,1947,1976;, + 3;1974,1976,1947;, + 3;1977,4256,1979;, + 3;4211,1977,1978;, + 3;1978,1977,1926;, + 3;1978,1979,4256;, + 3;1978,1926,1979;, + 3;1977,1979,1926;, + 3;1980,1981,1939;, + 3;4238,1980,1982;, + 3;1980,4263,1981;, + 3;4238,1981,4263;, + 3;1982,1980,1939;, + 3;1982,1939,1981;, + 3;1983,4258,1985;, + 3;4213,1983,1984;, + 3;1984,1983,1928;, + 3;1984,1985,4258;, + 3;1984,1928,1985;, + 3;1983,1985,1928;, + 3;4220,4282,1986;, + 3;1896,1986,4282;, + 3;1987,1986,1934;, + 3;1988,1987,1934;, + 3;1896,1988,1986;, + 3;1896,1987,1988;, + 3;4283,1989,1917;, + 3;4283,4221,1989;, + 3;1990,1991,1936;, + 3;1989,1990,1936;, + 3;1990,1917,1991;, + 3;1989,1991,1917;, + 3;1992,1994,1946;, + 3;1919,1992,1993;, + 3;1993,1992,1946;, + 3;1993,1946,1994;, + 3;1992,4267,1994;, + 3;1993,1994,4267;, + 3;4215,4284,1995;, + 3;1892,1995,4284;, + 3;1996,1995,1929;, + 3;1892,1996,1997;, + 3;1997,1996,1929;, + 3;1997,1929,1995;, + 3;1998,4264,2000;, + 3;1915,4285,4286;, + 3;1999,1998,1941;, + 3;1999,2000,4264;, + 3;1999,1941,2000;, + 3;1998,2000,1941;, + 3;4287,2001,1911;, + 3;4287,1913,2001;, + 3;1913,1911,2002;, + 3;2001,2002,1911;, + 3;2003,2002,1925;, + 3;2001,2003,1925;, + 3;2004,2005,1948;, + 3;4251,2004,2006;, + 3;2004,4269,2005;, + 3;4251,2005,4269;, + 3;2006,2004,1948;, + 3;2006,1948,2005;, + 3;4245,4288,2007;, + 3;4244,2007,4288;, + 3;2008,2007,1943;, + 3;2009,2008,1943;, + 3;4244,2009,2007;, + 3;4244,2008,2009;, + 3;1887,4289,2010;, + 3;1910,2010,4289;, + 3;4262,2013,4178;, + 3;2011,4176,2012;, + 3;1746,1937,2012;, + 3;2011,2012,1937;, + 3;4262,1938,2013;, + 3;4237,2013,1938;, + 3;2798,2806,3363;, + 3;3362,2807,2787;, + 3;3361,3367,2859;, + 3;2791,3378,3372;, + 3;2980,3376,3198;, + 3;2981,2988,3375;, + 3;2771,2865,3117;, + 3;2772,3053,2864;, + 3;2958,3402,3410;, + 3;2961,3099,2969;, + 3;2893,2817,2892;, + 3;3108,3392,3389;, + 3;2026,2734,3387;, + 3;2823,2736,2742;, + 3;2822,2743,2942;, + 3;1749,2014,1894;, + 3;3394,2029,2024;, + 3;2970,3397,2960;, + 3;3391,3396,2971;, + 3;3398,3401,2959;, + 3;3408,2894,3381;, + 3;3409,3403,2893;, + 3;3094,3406,3414;, + 3;3413,3407,3382;, + 3;3412,3383,2784;, + 3;4290,4291,2015;, + 3;4292,4293,2016;, + 3;3048,2775,3085;, + 3;2015,4291,4294;, + 3;4290,2015,4294;, + 3;2016,4293,4295;, + 3;4292,2016,4295;, + 3;2017,2040,2022;, + 3;2017,2039,2040;, + 3;2018,2870,2017;, + 3;2018,2877,2870;, + 3;2019,2878,2018;, + 3;2019,2882,2878;, + 3;2020,2085,2019;, + 3;2020,2084,2085;, + 3;2021,2223,2020;, + 3;2021,2222,2223;, + 3;2022,2215,2021;, + 3;2022,2214,2215;, + 3;2019,2017,2020;, + 3;2020,2017,2022;, + 3;2020,2022,2021;, + 3;2017,2019,2018;, + 3;2023,2746,2028;, + 3;2023,2745,2746;, + 3;2024,2030,2023;, + 3;2024,2029,2030;, + 3;2025,3394,2024;, + 3;2025,3393,3394;, + 3;2026,3388,2025;, + 3;2026,3387,3388;, + 3;2027,2734,2026;, + 3;2027,2733,2734;, + 3;2028,2731,2027;, + 3;2028,2730,2731;, + 3;2025,2028,2026;, + 3;2026,2028,2027;, + 3;2028,2025,2024;, + 3;2028,2024,2023;, + 3;2029,2014,1749;, + 3;2029,3394,2014;, + 3;1749,2745,2030;, + 3;1749,1883,2745;, + 3;1749,2030,2029;, + 3;2031,2739,2036;, + 3;2031,2744,2739;, + 3;2032,2941,2031;, + 3;2032,2940,2941;, + 3;2033,2872,2032;, + 3;2033,2871,2872;, + 3;2034,2038,2033;, + 3;2034,2037,2038;, + 3;2035,2221,2034;, + 3;2035,2220,2221;, + 3;2036,2285,2035;, + 3;2036,2284,2285;, + 3;2031,2036,2034;, + 3;2031,2034,2033;, + 3;2031,2033,2032;, + 3;2034,2036,2035;, + 3;2037,2214,2040;, + 3;2037,2221,2214;, + 3;2039,2871,2038;, + 3;2039,2870,2871;, + 3;2039,2038,2040;, + 3;2040,2038,2037;, + 3;2041,2049,2048;, + 3;2041,2052,2049;, + 3;2042,2190,2041;, + 3;2042,2189,2190;, + 3;2042,2177,2178;, + 3;2043,2187,2042;, + 3;2043,2186,2187;, + 3;2044,2195,2043;, + 3;2044,2194,2195;, + 3;2045,2056,2044;, + 3;2045,2055,2056;, + 3;2046,2850,2045;, + 3;2046,2855,2850;, + 3;2047,2841,2046;, + 3;2047,2840,2841;, + 3;2047,2836,2837;, + 3;2048,2847,2047;, + 3;2048,2846,2847;, + 3;2045,2044,2048;, + 3;2045,2048,2046;, + 3;2046,2048,2047;, + 3;2048,2044,2041;, + 3;2041,2044,2043;, + 3;2041,2043,2042;, + 3;2050,2846,2049;, + 3;2050,2845,2846;, + 3;2051,2066,2050;, + 3;2051,2065,2066;, + 3;2052,2191,2051;, + 3;2052,2190,2191;, + 3;2050,2049,2051;, + 3;2051,2049,2052;, + 3;2053,2194,2056;, + 3;2053,2199,2194;, + 3;2054,2073,2053;, + 3;2054,2072,2073;, + 3;2055,2851,2054;, + 3;2055,2850,2851;, + 3;2055,2054,2056;, + 3;2056,2054,2053;, + 3;2057,2070,2062;, + 3;2057,2069,2070;, + 3;2058,2769,2057;, + 3;2058,2774,2769;, + 3;2059,3057,2058;, + 3;2059,3056,3057;, + 3;2060,2110,2059;, + 3;2060,2109,2110;, + 3;2061,2399,2060;, + 3;2061,2398,2399;, + 3;2062,2114,2061;, + 3;2062,2113,2114;, + 3;2057,2062,2058;, + 3;2058,2062,2061;, + 3;2058,2061,2059;, + 3;2059,2061,2060;, + 3;2063,2113,2070;, + 3;2063,2118,2113;, + 3;2064,2459,2063;, + 3;2064,2458,2459;, + 3;2065,2192,2064;, + 3;2065,2191,2192;, + 3;2067,2845,2066;, + 3;2067,2844,2845;, + 3;2068,3119,2067;, + 3;2068,3118,3119;, + 3;2069,2770,2068;, + 3;2069,2769,2770;, + 3;2066,2065,2069;, + 3;2066,2069,2068;, + 3;2066,2068,2067;, + 3;2069,2065,2070;, + 3;2070,2065,2063;, + 3;2063,2065,2064;, + 3;2071,2075,2074;, + 3;2071,2080,2075;, + 3;2072,2852,2071;, + 3;2072,2851,2852;, + 3;2074,2199,2073;, + 3;2074,2198,2199;, + 3;2072,2071,2073;, + 3;2073,2071,2074;, + 3;2076,2198,2075;, + 3;2076,2197,2198;, + 3;2077,2174,2076;, + 3;2077,2173,2174;, + 3;2078,2090,2077;, + 3;2078,2089,2090;, + 3;2079,2828,2078;, + 3;2079,2827,2828;, + 3;2080,2853,2079;, + 3;2080,2852,2853;, + 3;2078,2077,2079;, + 3;2079,2077,2076;, + 3;2079,2076,2080;, + 3;2080,2076,2075;, + 3;2081,2173,2090;, + 3;2081,2172,2173;, + 3;2082,2254,2081;, + 3;2082,2253,2254;, + 3;2083,2273,2082;, + 3;2083,2272,2273;, + 3;2084,2224,2083;, + 3;2084,2223,2224;, + 3;2086,2882,2085;, + 3;2086,2881,2882;, + 3;2087,2929,2086;, + 3;2087,2928,2929;, + 3;2088,2910,2087;, + 3;2088,2909,2910;, + 3;2089,2829,2088;, + 3;2089,2828,2829;, + 3;2085,2084,2090;, + 3;2085,2090,2089;, + 3;2085,2089,2086;, + 3;2086,2089,2087;, + 3;2087,2089,2088;, + 3;2090,2084,2083;, + 3;2090,2083,2082;, + 3;2090,2082,2081;, + 3;2091,2401,2098;, + 3;2091,2400,2401;, + 3;2092,2112,2091;, + 3;2092,2111,2112;, + 3;2093,3055,2092;, + 3;2093,3059,3055;, + 3;4296,3051,2093;, + 3;4296,4297,3051;, + 3;4298,3070,2094;, + 3;4298,4299,3070;, + 3;2096,2103,2095;, + 3;2096,2102,2103;, + 3;2097,4300,4301;, + 3;2097,2412,4300;, + 3;2098,4302,4303;, + 3;2098,2393,4302;, + 3;4304,4305,4298;, + 3;4304,4298,2094;, + 3;4298,4305,4301;, + 3;4301,4305,2097;, + 3;2098,2093,2092;, + 3;2098,2092,2091;, + 3;2099,4306,4307;, + 3;2099,2421,4306;, + 3;2100,2107,2099;, + 3;2100,2106,2107;, + 3;4307,3078,2100;, + 3;4307,4308,3078;, + 3;4307,2100,2099;, + 3;2101,21,8;, + 3;2101,2423,21;, + 3;2102,2407,2101;, + 3;2102,2406,2407;, + 3;2104,3069,2103;, + 3;2104,3068,3069;, + 3;8,3080,2104;, + 3;8,151,3080;, + 3;8,2102,2101;, + 3;8,2103,2102;, + 3;8,2104,2103;, + 3;2105,4309,4310;, + 3;2105,3076,4309;, + 3;2106,3079,2105;, + 3;2106,3078,3079;, + 3;2108,2421,2107;, + 3;2108,2420,2421;, + 3;4310,2416,2108;, + 3;4310,4311,2416;, + 3;4310,2106,2105;, + 3;4310,2107,2106;, + 3;4310,2108,2107;, + 3;4312,2400,2112;, + 3;4312,4313,2400;, + 3;2111,4314,4315;, + 3;2111,3055,4314;, + 3;4315,4312,2111;, + 3;2111,4312,2112;, + 3;4316,2398,2114;, + 3;2115,2397,4317;, + 3;2116,2392,2115;, + 3;2116,2391,2392;, + 3;2117,4318,4319;, + 3;2117,2207,4318;, + 3;2118,2460,2117;, + 3;2118,2459,2460;, + 3;2114,2118,2117;, + 3;2114,2117,4316;, + 3;4316,2117,4319;, + 3;2118,2114,2113;, + 3;2119,4320,4321;, + 3;2119,2139,4320;, + 3;2120,2702,2119;, + 3;2120,2701,2702;, + 3;2121,2210,2120;, + 3;2121,2209,2210;, + 3;4322,2396,2121;, + 3;4322,4323,2396;, + 3;1755,2411,2122;, + 3;1755,1787,2411;, + 3;2123,1813,1755;, + 3;2123,2427,1813;, + 3;2124,2387,2123;, + 3;2124,2386,2387;, + 3;1755,2124,2123;, + 3;4324,2119,4321;, + 3;4324,2120,2119;, + 3;4324,2121,2120;, + 3;4324,4322,2121;, + 3;2125,4325,4326;, + 3;2125,2706,4325;, + 3;2126,2157,2125;, + 3;2126,2156,2157;, + 3;2127,2435,2126;, + 3;2127,2434,2435;, + 3;2128,2768,2127;, + 3;2128,2767,2768;, + 3;2129,2720,2128;, + 3;2129,2725,2720;, + 3;2130,2213,2129;, + 3;2130,2212,2213;, + 3;4327,2203,2130;, + 3;2131,2202,4328;, + 3;2132,2712,2131;, + 3;2132,2711,2712;, + 3;4326,2127,2126;, + 3;4326,2126,2125;, + 3;2127,4326,4327;, + 3;2127,4327,2128;, + 3;2128,4327,2130;, + 3;2128,2130,2129;, + 3;2133,4329,4320;, + 3;2133,2390,4329;, + 3;2134,2382,2133;, + 3;2134,2381,2382;, + 3;2135,2357,2134;, + 3;2135,2360,2357;, + 3;2136,2537,2135;, + 3;2136,2543,2537;, + 3;2137,2717,2136;, + 3;2137,2716,2717;, + 3;2138,2708,2137;, + 3;2138,2714,2708;, + 3;2139,2698,2138;, + 3;2139,2702,2698;, + 3;2134,2133,2135;, + 3;2135,2133,4320;, + 3;2135,4320,2136;, + 3;2136,4320,2139;, + 3;2136,2139,2137;, + 3;2137,2139,2138;, + 3;2141,2425,2146;, + 3;2141,2424,2425;, + 3;2141,4146,2318;, + 3;4330,1760,1777;, + 3;2142,1762,1760;, + 3;2142,2291,1762;, + 3;2143,2430,2142;, + 3;2143,2429,2430;, + 3;2144,2159,2143;, + 3;2144,2158,2159;, + 3;2145,2705,2144;, + 3;2145,2704,2705;, + 3;2146,2331,4331;, + 3;2146,2330,2331;, + 3;1760,2143,2142;, + 3;1760,2144,2143;, + 3;1760,2145,2144;, + 3;1760,4330,2145;, + 3;2145,4330,4153;, + 3;2147,4332,4333;, + 3;2147,2320,4332;, + 3;2148,2342,2147;, + 3;2148,2341,2342;, + 3;2149,2363,2148;, + 3;2149,2369,2363;, + 3;4333,2361,2149;, + 3;4333,4173,2361;, + 3;4333,2148,2147;, + 3;4333,2149,2148;, + 3;2150,2429,2159;, + 3;2150,2428,2429;, + 3;2151,2465,2150;, + 3;2151,2464,2465;, + 3;2152,4334,4335;, + 3;2152,2489,4334;, + 3;2153,2456,2152;, + 3;2153,2455,2456;, + 3;4336,2500,2153;, + 3;4336,4337,2500;, + 3;2155,2474,2154;, + 3;2155,2473,2474;, + 3;2156,2436,2155;, + 3;2156,2435,2436;, + 3;2158,2706,2157;, + 3;2158,2705,2706;, + 3;2158,2154,4338;, + 3;2158,4338,4339;, + 3;2158,4339,2151;, + 3;2158,2151,2150;, + 3;2158,2150,2159;, + 3;2154,2158,2155;, + 3;2155,2158,2157;, + 3;2155,2157,2156;, + 3;2160,2726,2169;, + 3;2160,2732,2726;, + 3;2161,2738,2160;, + 3;2161,2737,2738;, + 3;2162,2741,2161;, + 3;2162,2740,2741;, + 3;2163,2283,2162;, + 3;2163,2287,2283;, + 3;2164,2231,2163;, + 3;2164,2230,2231;, + 3;2165,2249,2164;, + 3;2165,2248,2249;, + 3;2166,2243,2165;, + 3;2166,2242,2243;, + 3;2167,2236,2166;, + 3;2167,2235,2236;, + 3;2168,2754,2235;, + 3;2168,2758,2754;, + 3;2169,2749,2168;, + 3;2169,2753,2749;, + 3;2167,2165,2164;, + 3;2167,2164,2163;, + 3;2167,2163,2168;, + 3;2168,2163,2162;, + 3;2168,2162,2169;, + 3;2169,2162,2161;, + 3;2169,2161,2160;, + 3;2165,2167,2166;, + 3;2170,2239,2176;, + 3;2170,2238,2239;, + 3;2171,2259,2170;, + 3;2171,2258,2259;, + 3;2172,2255,2171;, + 3;2172,2254,2255;, + 3;2175,2197,2174;, + 3;2175,2196,2197;, + 3;2176,2185,2175;, + 3;2176,2184,2185;, + 3;2171,2176,2172;, + 3;2172,2176,2174;, + 3;2172,2174,2173;, + 3;2174,2176,2175;, + 3;2176,2171,2170;, + 3;2177,2183,2182;, + 3;2177,2187,2183;, + 3;2179,2189,2178;, + 3;2179,2188,2189;, + 3;2180,2205,2179;, + 3;2180,2204,2205;, + 3;2181,2724,2180;, + 3;2181,2723,2724;, + 3;2182,2232,2181;, + 3;2182,2240,2232;, + 3;2179,2178,2180;, + 3;2180,2178,2177;, + 3;2180,2177,2182;, + 3;2180,2182,2181;, + 3;2184,2240,2183;, + 3;2184,2239,2240;, + 3;2186,2196,2185;, + 3;2186,2195,2196;, + 3;2185,2187,2186;, + 3;2187,2185,2183;, + 3;2183,2185,2184;, + 3;2188,2206,2193;, + 3;2188,2205,2206;, + 3;2193,2458,2192;, + 3;2193,2457,2458;, + 3;2189,2193,2192;, + 3;2189,2192,2190;, + 3;2190,2192,2191;, + 3;2193,2189,2188;, + 3;2199,2195,2194;, + 3;2195,2199,2198;, + 3;2195,2198,2197;, + 3;2195,2197,2196;, + 3;2200,2211,4328;, + 3;2203,4340,2212;, + 3;2201,2700,2200;, + 3;2201,2699,2700;, + 3;2202,2713,2201;, + 3;2202,2712,2713;, + 3;4328,2201,2200;, + 3;2201,4328,2202;, + 3;2204,2725,2213;, + 3;2204,2724,2725;, + 3;2207,2457,2206;, + 3;2207,2460,2457;, + 3;2209,2391,2208;, + 3;2209,2396,2391;, + 3;2211,2701,2210;, + 3;2211,2700,2701;, + 3;2205,2207,2206;, + 3;2207,2205,2204;, + 3;2207,2204,4318;, + 3;4318,2204,4340;, + 3;2208,2211,2209;, + 3;2209,2211,2210;, + 3;4340,2204,2212;, + 3;2212,2204,2213;, + 3;2216,2222,2215;, + 3;2216,2226,2222;, + 3;2217,2267,2216;, + 3;2217,2266,2267;, + 3;2218,2265,2217;, + 3;2218,2264,2265;, + 3;2219,2228,2218;, + 3;2219,2227,2228;, + 3;2220,2286,2219;, + 3;2220,2285,2286;, + 3;2218,2216,2219;, + 3;2219,2216,2220;, + 3;2220,2216,2215;, + 3;2220,2215,2221;, + 3;2221,2215,2214;, + 3;2216,2218,2217;, + 3;2225,2272,2224;, + 3;2225,2271,2272;, + 3;2226,2268,2225;, + 3;2226,2267,2268;, + 3;2222,2226,2225;, + 3;2222,2225,2224;, + 3;2222,2224,2223;, + 3;2227,2287,2231;, + 3;2227,2286,2287;, + 3;2229,2264,2228;, + 3;2229,2263,2264;, + 3;2230,2250,2229;, + 3;2230,2249,2250;, + 3;2227,2231,2228;, + 3;2228,2231,2229;, + 3;2229,2231,2230;, + 3;2233,2723,2232;, + 3;2233,2722,2723;, + 3;2234,2761,2233;, + 3;2234,2760,2761;, + 3;2235,2754,2234;, + 3;2234,2754,2755;, + 3;2237,2242,2236;, + 3;2237,2241,2242;, + 3;2238,2260,2237;, + 3;2238,2259,2260;, + 3;2237,2236,2238;, + 3;2238,2236,2235;, + 3;2238,2235,2239;, + 3;2239,2235,2234;, + 3;2239,2234,2232;, + 3;2239,2232,2240;, + 3;2232,2234,2233;, + 3;2241,2256,2245;, + 3;2241,2260,2256;, + 3;2244,2248,2243;, + 3;2244,2247,2248;, + 3;2245,2276,2244;, + 3;2245,2282,2276;, + 3;2242,2241,2243;, + 3;2243,2241,2244;, + 3;2244,2241,2245;, + 3;2246,2263,2250;, + 3;2246,2262,2263;, + 3;2247,2277,2246;, + 3;2247,2276,2277;, + 3;2246,2250,2247;, + 3;2247,2250,2249;, + 3;2247,2249,2248;, + 3;2251,2258,2255;, + 3;2251,2257,2258;, + 3;2252,2281,2251;, + 3;2252,2280,2281;, + 3;2253,2274,2252;, + 3;2253,2273,2274;, + 3;2255,2252,2251;, + 3;2252,2255,2254;, + 3;2252,2254,2253;, + 3;2257,2282,2256;, + 3;2257,2281,2282;, + 3;2257,2259,2258;, + 3;2259,2257,2256;, + 3;2259,2256,2260;, + 3;2261,2266,2265;, + 3;2261,2270,2266;, + 3;2262,2278,2261;, + 3;2262,2277,2278;, + 3;2265,2263,2262;, + 3;2265,2262,2261;, + 3;2263,2265,2264;, + 3;2269,2271,2268;, + 3;2269,2275,2271;, + 3;2270,2279,2269;, + 3;2270,2278,2279;, + 3;2270,2269,2268;, + 3;2270,2268,2266;, + 3;2266,2268,2267;, + 3;2275,2280,2274;, + 3;2275,2279,2280;, + 3;2275,2273,2271;, + 3;2271,2273,2272;, + 3;2273,2275,2274;, + 3;2279,2278,2280;, + 3;2280,2278,2282;, + 3;2280,2282,2281;, + 3;2282,2278,2276;, + 3;2276,2278,2277;, + 3;2284,2740,2283;, + 3;2284,2739,2740;, + 3;2286,2283,2287;, + 3;2283,2286,2285;, + 3;2283,2285,2284;, + 3;2288,1883,1762;, + 3;2288,2748,1883;, + 3;2289,2450,2288;, + 3;2289,2449,2450;, + 3;2290,2297,2289;, + 3;2290,2300,2297;, + 3;2291,2431,2290;, + 3;2291,2430,2431;, + 3;1762,2289,2288;, + 3;1762,2290,2289;, + 3;1762,2291,2290;, + 3;2292,2501,2296;, + 3;2292,2506,2501;, + 3;2293,2453,2292;, + 3;2293,2452,2453;, + 3;2294,2491,2293;, + 3;2294,2490,2491;, + 3;2295,2317,2294;, + 3;2295,2316,2317;, + 3;2296,2482,2295;, + 3;2296,2485,2482;, + 3;2293,2296,2294;, + 3;2294,2296,2295;, + 3;2296,2293,2292;, + 3;2298,2449,2297;, + 3;2298,2448,2449;, + 3;2299,2467,2298;, + 3;2299,2466,2467;, + 3;2300,2432,2299;, + 3;2300,2431,2432;, + 3;2297,2299,2298;, + 3;2299,2297,2300;, + 3;2301,2472,2308;, + 3;2301,2476,2472;, + 3;2302,2478,2301;, + 3;2302,2477,2478;, + 3;2303,2444,2302;, + 3;2303,2443,2444;, + 3;2304,2314,2303;, + 3;2304,2313,2314;, + 3;2305,2751,2304;, + 3;2305,2750,2751;, + 3;2306,2757,2305;, + 3;2306,2756,2757;, + 3;2307,2759,2306;, + 3;2307,2764,2759;, + 3;2308,2438,2307;, + 3;2308,2437,2438;, + 3;2306,2302,2307;, + 3;2307,2302,2301;, + 3;2307,2301,2308;, + 3;2302,2306,2305;, + 3;2302,2305,2304;, + 3;2302,2304,2303;, + 3;4341,2490,2317;, + 3;4341,4342,2490;, + 3;2310,2469,2309;, + 3;2310,2468,2469;, + 3;2311,2447,2310;, + 3;2311,2446,2447;, + 3;2312,2728,2311;, + 3;2312,2727,2728;, + 3;2313,2752,2312;, + 3;2313,2751,2752;, + 3;2315,2443,2314;, + 3;2315,2442,2443;, + 3;4343,2483,2315;, + 3;2316,2482,4344;, + 3;2312,2315,2314;, + 3;2312,2314,2313;, + 3;2315,2312,2311;, + 3;2315,2311,4343;, + 3;4343,2311,2310;, + 3;2316,4345,2317;, + 3;2317,4345,4341;, + 3;4146,2424,2318;, + 3;4146,4346,2424;, + 3;2319,2544,2326;, + 3;2319,2549,2544;, + 3;2320,2343,2319;, + 3;2320,2342,2343;, + 3;2321,4347,4332;, + 3;2321,2334,4347;, + 3;2322,2719,2321;, + 3;2322,2718,2719;, + 3;2323,2542,2322;, + 3;2323,2541,2542;, + 3;2324,2569,2323;, + 3;2324,2568,2569;, + 3;2325,2563,2324;, + 3;2325,2562,2563;, + 3;2326,2556,2325;, + 3;2326,2561,2556;, + 3;4332,2322,2321;, + 3;4332,2323,2322;, + 3;4332,2324,2323;, + 3;4332,2325,2324;, + 3;4332,2326,2325;, + 3;4332,2319,2326;, + 3;4332,2320,2319;, + 3;4175,2335,2329;, + 3;4175,4348,2335;, + 3;2327,4173,4175;, + 3;2327,2362,4173;, + 3;2328,2368,2327;, + 3;2328,2367,2368;, + 3;2329,2353,2328;, + 3;2329,2352,2353;, + 3;4175,2328,2327;, + 3;4175,2329,2328;, + 3;2330,4346,4347;, + 3;2330,2425,4346;, + 3;2332,4331,2331;, + 3;2332,2703,4331;, + 3;2333,2710,2332;, + 3;2333,2709,2710;, + 3;2334,2715,2333;, + 3;2334,2719,2715;, + 3;4347,2331,2330;, + 3;4347,2332,2331;, + 3;4347,2333,2332;, + 3;4347,2334,2333;, + 3;2336,2352,2335;, + 3;2336,2351,2352;, + 3;2337,2350,2336;, + 3;2337,2349,2350;, + 3;2338,2375,2337;, + 3;2338,2379,2375;, + 3;4348,2388,2338;, + 3;4348,4349,2388;, + 3;4348,2336,2335;, + 3;4348,2337,2336;, + 3;4348,2338,2337;, + 3;2339,2549,2343;, + 3;2339,2548,2549;, + 3;2340,2551,2339;, + 3;2340,2550,2551;, + 3;2341,2364,2340;, + 3;2341,2363,2364;, + 3;2341,2340,2339;, + 3;2341,2339,2342;, + 3;2342,2339,2343;, + 3;2344,2351,2350;, + 3;2344,2356,2351;, + 3;2345,2518,2344;, + 3;2345,2517,2518;, + 3;2346,2519,2345;, + 3;2346,2523,2519;, + 3;2347,2524,2346;, + 3;2347,2530,2524;, + 3;2348,2373,2347;, + 3;2348,2372,2373;, + 3;2349,2376,2348;, + 3;2349,2375,2376;, + 3;2349,2346,2345;, + 3;2349,2345,2350;, + 3;2350,2345,2344;, + 3;2346,2349,2348;, + 3;2346,2348,2347;, + 3;2354,2367,2353;, + 3;2354,2366,2367;, + 3;2355,2507,2354;, + 3;2355,2512,2507;, + 3;2356,2513,2355;, + 3;2356,2518,2513;, + 3;2353,2355,2354;, + 3;2355,2353,2356;, + 3;2356,2353,2352;, + 3;2356,2352,2351;, + 3;2358,2381,2357;, + 3;2358,2380,2381;, + 3;2359,2535,2358;, + 3;2359,2534,2535;, + 3;2360,2538,2359;, + 3;2360,2537,2538;, + 3;2357,2360,2358;, + 3;2358,2360,2359;, + 3;2362,2369,2361;, + 3;2362,2368,2369;, + 3;4173,2362,2361;, + 3;2365,2550,2364;, + 3;2365,2555,2550;, + 3;2366,2508,2365;, + 3;2366,2507,2508;, + 3;2365,2364,2366;, + 3;2366,2364,2369;, + 3;2366,2369,2368;, + 3;2366,2368,2367;, + 3;2369,2364,2363;, + 3;2370,2531,2374;, + 3;2370,2536,2531;, + 3;2371,2385,2370;, + 3;2371,2384,2385;, + 3;2372,2377,2371;, + 3;2372,2376,2377;, + 3;2374,2530,2373;, + 3;2374,2529,2530;, + 3;2374,2373,2372;, + 3;2374,2372,2371;, + 3;2374,2371,2370;, + 3;2378,2384,2377;, + 3;2378,2383,2384;, + 3;2379,2389,2378;, + 3;2379,2388,2389;, + 3;2379,2376,2375;, + 3;2376,2379,2377;, + 3;2377,2379,2378;, + 3;2380,2536,2385;, + 3;2380,2535,2536;, + 3;2383,2390,2382;, + 3;2383,2389,2390;, + 3;2382,2380,2385;, + 3;2382,2385,2383;, + 3;2383,2385,2384;, + 3;2380,2382,2381;, + 3;4350,2427,2387;, + 3;4350,1813,2427;, + 3;4349,2389,2388;, + 3;4349,2390,2389;, + 3;4349,4329,2390;, + 3;4350,2387,2386;, + 3;2393,2397,2392;, + 3;2393,2401,2397;, + 3;2395,2412,2394;, + 3;2395,2411,2412;, + 3;4302,2396,4323;, + 3;2396,4302,2393;, + 3;2396,2393,2391;, + 3;2391,2393,2392;, + 3;4317,2397,4313;, + 3;4313,2397,2400;, + 3;2400,2397,2401;, + 3;2402,2410,2405;, + 3;2402,2409,2410;, + 3;2403,2414,2402;, + 3;2403,2413,2414;, + 3;2404,2418,2403;, + 3;2404,2417,2418;, + 3;4351,2419,2404;, + 3;4351,4306,2419;, + 3;4352,4207,4204;, + 3;4352,4353,4207;, + 3;4351,2402,2405;, + 3;4351,2403,2402;, + 3;4351,2404,2403;, + 3;2408,2423,2407;, + 3;2408,2422,2423;, + 3;4354,2415,2408;, + 3;4354,4355,2415;, + 3;4356,4357,4358;, + 3;1787,1813,4359;, + 3;1787,2412,2411;, + 3;1787,4300,2412;, + 3;4356,2407,2406;, + 3;4356,2408,2407;, + 3;4356,4354,2408;, + 3;4356,4358,4354;, + 3;2413,4311,4360;, + 3;2413,2418,4311;, + 3;88,2422,2415;, + 3;88,21,2422;, + 3;4360,2414,2413;, + 3;88,2415,4355;, + 3;2417,2420,2416;, + 3;2417,2419,2420;, + 3;4311,2418,2416;, + 3;2416,2418,2417;, + 3;4306,2420,2419;, + 3;4306,2421,2420;, + 3;21,2423,2422;, + 3;4346,2425,2424;, + 3;2428,2461,2433;, + 3;2428,2465,2461;, + 3;2433,2466,2432;, + 3;2433,2471,2466;, + 3;2429,2428,2430;, + 3;2430,2428,2433;, + 3;2430,2433,2431;, + 3;2431,2433,2432;, + 3;2434,2765,2439;, + 3;2434,2768,2765;, + 3;2437,2473,2436;, + 3;2437,2472,2473;, + 3;2439,2764,2438;, + 3;2439,2763,2764;, + 3;2436,2435,2437;, + 3;2437,2435,2434;, + 3;2437,2434,2439;, + 3;2437,2439,2438;, + 3;2440,2477,2444;, + 3;2440,2481,2477;, + 3;2441,2503,2440;, + 3;2441,2502,2503;, + 3;2442,2484,2441;, + 3;2442,2483,2484;, + 3;2442,2441,2443;, + 3;2443,2441,2444;, + 3;2444,2441,2440;, + 3;2445,2748,2450;, + 3;2445,2747,2748;, + 3;2446,2729,2445;, + 3;2446,2728,2729;, + 3;2448,2468,2447;, + 3;2448,2467,2468;, + 3;2446,2445,2447;, + 3;2447,2445,2448;, + 3;2448,2445,2449;, + 3;2449,2445,2450;, + 3;2451,2489,2456;, + 3;2451,2488,2489;, + 3;2452,2492,2451;, + 3;2452,2491,2492;, + 3;2454,2506,2453;, + 3;2454,2505,2506;, + 3;2455,2496,2454;, + 3;2455,2500,2496;, + 3;2456,2454,2451;, + 3;2451,2454,2453;, + 3;2451,2453,2452;, + 3;2454,2456,2455;, + 3;2460,2458,2457;, + 3;2458,2460,2459;, + 3;2462,2471,2461;, + 3;2462,2470,2471;, + 3;2463,2494,2462;, + 3;2463,2493,2494;, + 3;2464,2487,2463;, + 3;2464,2486,2487;, + 3;2465,2463,2461;, + 3;2461,2463,2462;, + 3;2463,2465,2464;, + 3;2470,2495,2469;, + 3;2470,2494,2495;, + 3;2467,2469,2468;, + 3;2469,2467,2470;, + 3;2470,2467,2466;, + 3;2470,2466,2471;, + 3;2475,2499,2474;, + 3;2475,2498,2499;, + 3;2476,2479,2475;, + 3;2476,2478,2479;, + 3;2474,2473,2475;, + 3;2475,2473,2472;, + 3;2475,2472,2476;, + 3;2480,2498,2479;, + 3;2480,2497,2498;, + 3;2481,2504,2480;, + 3;2481,2503,2504;, + 3;2478,2480,2479;, + 3;2480,2478,2481;, + 3;2481,2478,2477;, + 3;2485,4361,4362;, + 3;2485,2501,4361;, + 3;2482,4362,4344;, + 3;4362,2482,2485;, + 3;2488,4363,4364;, + 3;2488,2492,4363;, + 3;4334,2489,2488;, + 3;4334,2488,4364;, + 3;4342,4365,2490;, + 3;2490,4365,2491;, + 3;2491,4365,4363;, + 3;2491,4363,2492;, + 3;4366,2505,2496;, + 3;4366,4367,2505;, + 3;4337,4368,2500;, + 3;2500,4368,2496;, + 3;2496,4368,4366;, + 3;4369,2506,4367;, + 3;4367,2506,2505;, + 3;2506,4369,2501;, + 3;2501,4369,4361;, + 3;2509,2555,2508;, + 3;2509,2554,2555;, + 3;2510,2627,2509;, + 3;2510,2626,2627;, + 3;2511,2597,2510;, + 3;2511,2596,2597;, + 3;2512,2514,2511;, + 3;2512,2513,2514;, + 3;2510,2508,2511;, + 3;2511,2508,2507;, + 3;2511,2507,2512;, + 3;2508,2510,2509;, + 3;2515,2596,2514;, + 3;2515,2595,2596;, + 3;2516,2605,2515;, + 3;2516,2604,2605;, + 3;2517,2520,2516;, + 3;2517,2519,2520;, + 3;2516,2513,2518;, + 3;2516,2518,2517;, + 3;2513,2516,2515;, + 3;2513,2515,2514;, + 3;2521,2604,2520;, + 3;2521,2603,2604;, + 3;2522,2609,2521;, + 3;2522,2608,2609;, + 3;2523,2525,2522;, + 3;2523,2524,2525;, + 3;2519,2522,2521;, + 3;2519,2521,2520;, + 3;2522,2519,2523;, + 3;2526,2608,2525;, + 3;2526,2607,2608;, + 3;2527,2619,2526;, + 3;2527,2618,2619;, + 3;2528,2575,2527;, + 3;2528,2574,2575;, + 3;2529,2532,2528;, + 3;2529,2531,2532;, + 3;2527,2526,2528;, + 3;2528,2526,2529;, + 3;2529,2526,2530;, + 3;2530,2526,2525;, + 3;2530,2525,2524;, + 3;2533,2574,2532;, + 3;2533,2580,2574;, + 3;2534,2539,2533;, + 3;2534,2538,2539;, + 3;2536,2534,2531;, + 3;2531,2534,2532;, + 3;2532,2534,2533;, + 3;2534,2536,2535;, + 3;2540,2580,2539;, + 3;2540,2579,2580;, + 3;2541,2570,2540;, + 3;2541,2569,2570;, + 3;2543,2718,2542;, + 3;2543,2717,2718;, + 3;2543,2539,2538;, + 3;2543,2538,2537;, + 3;2539,2543,2540;, + 3;2540,2543,2542;, + 3;2540,2542,2541;, + 3;2545,2561,2544;, + 3;2545,2560,2561;, + 3;2546,2632,2545;, + 3;2546,2631,2632;, + 3;2547,2624,2546;, + 3;2547,2623,2624;, + 3;2548,2552,2547;, + 3;2548,2551,2552;, + 3;2546,2544,2549;, + 3;2546,2549,2547;, + 3;2547,2549,2548;, + 3;2544,2546,2545;, + 3;2553,2623,2552;, + 3;2553,2622,2623;, + 3;2554,2628,2553;, + 3;2554,2627,2628;, + 3;2554,2550,2555;, + 3;2550,2554,2551;, + 3;2551,2554,2553;, + 3;2551,2553,2552;, + 3;2557,2562,2556;, + 3;2557,2567,2562;, + 3;2558,2583,2557;, + 3;2558,2582,2583;, + 3;2559,2592,2558;, + 3;2559,2591,2592;, + 3;2560,2633,2559;, + 3;2560,2632,2633;, + 3;2560,2559,2557;, + 3;2560,2557,2556;, + 3;2560,2556,2561;, + 3;2557,2559,2558;, + 3;2564,2568,2563;, + 3;2564,2573,2568;, + 3;2565,2645,2564;, + 3;2565,2644,2645;, + 3;2566,2639,2565;, + 3;2566,2638,2639;, + 3;2567,2584,2566;, + 3;2567,2583,2584;, + 3;2565,2567,2566;, + 3;2567,2565,2564;, + 3;2567,2564,2562;, + 3;2562,2564,2563;, + 3;2571,2579,2570;, + 3;2571,2578,2579;, + 3;2572,2667,2571;, + 3;2572,2666,2667;, + 3;2573,2640,2572;, + 3;2573,2645,2640;, + 3;2572,2568,2573;, + 3;2568,2572,2569;, + 3;2569,2572,2571;, + 3;2569,2571,2570;, + 3;2576,2618,2575;, + 3;2576,2617,2618;, + 3;2577,2648,2576;, + 3;2577,2647,2648;, + 3;2578,2661,2577;, + 3;2578,2667,2661;, + 3;2576,2580,2577;, + 3;2577,2580,2579;, + 3;2577,2579,2578;, + 3;2580,2576,2574;, + 3;2574,2576,2575;, + 3;2581,2612,2589;, + 3;2581,2611,2612;, + 3;2582,2593,2581;, + 3;2582,2592,2593;, + 3;2585,2638,2584;, + 3;2585,2637,2638;, + 3;2586,2673,2585;, + 3;2586,2672,2673;, + 3;2587,2670,2586;, + 3;2587,2669,2670;, + 3;2588,2651,2587;, + 3;2588,2650,2651;, + 3;2589,2614,2588;, + 3;2589,2613,2614;, + 3;2584,2587,2585;, + 3;2585,2587,2586;, + 3;2587,2584,2582;, + 3;2587,2582,2581;, + 3;2587,2581,2588;, + 3;2588,2581,2589;, + 3;2582,2584,2583;, + 3;2590,2602,2594;, + 3;2590,2601,2602;, + 3;2591,2634,2590;, + 3;2591,2633,2634;, + 3;2594,2611,2593;, + 3;2594,2610,2611;, + 3;2592,2591,2593;, + 3;2593,2591,2590;, + 3;2593,2590,2594;, + 3;2595,2606,2599;, + 3;2595,2605,2606;, + 3;2598,2626,2597;, + 3;2598,2629,2626;, + 3;2599,2621,2598;, + 3;2599,2620,2621;, + 3;2597,2596,2598;, + 3;2598,2596,2599;, + 3;2599,2596,2595;, + 3;2600,2620,2606;, + 3;2600,2625,2620;, + 3;2601,2630,2600;, + 3;2601,2634,2630;, + 3;2603,2610,2602;, + 3;2603,2609,2610;, + 3;2604,2602,2605;, + 3;2605,2602,2601;, + 3;2605,2601,2606;, + 3;2606,2601,2600;, + 3;2602,2604,2603;, + 3;2607,2613,2612;, + 3;2607,2619,2613;, + 3;2609,2608,2610;, + 3;2610,2608,2612;, + 3;2610,2612,2611;, + 3;2612,2608,2607;, + 3;2615,2650,2614;, + 3;2615,2654,2650;, + 3;2616,2656,2615;, + 3;2616,2655,2656;, + 3;2617,2649,2616;, + 3;2617,2648,2649;, + 3;2618,2616,2619;, + 3;2619,2616,2615;, + 3;2619,2615,2614;, + 3;2619,2614,2613;, + 3;2616,2618,2617;, + 3;2622,2629,2621;, + 3;2622,2628,2629;, + 3;2625,2631,2624;, + 3;2625,2630,2631;, + 3;2624,2623,2625;, + 3;2625,2623,2621;, + 3;2625,2621,2620;, + 3;2621,2623,2622;, + 3;2627,2626,2628;, + 3;2628,2626,2629;, + 3;2633,2632,2631;, + 3;2633,2631,2630;, + 3;2633,2630,2634;, + 3;2635,2644,2639;, + 3;2635,2643,2644;, + 3;2636,2678,2635;, + 3;2636,2677,2678;, + 3;2637,2674,2636;, + 3;2637,2673,2674;, + 3;2638,2637,2639;, + 3;2639,2637,2635;, + 3;2635,2637,2636;, + 3;2641,2666,2640;, + 3;2641,2665,2666;, + 3;2642,2695,2641;, + 3;2642,2694,2695;, + 3;2643,2679,2642;, + 3;2643,2678,2679;, + 3;2640,2645,2644;, + 3;2640,2644,2643;, + 3;2640,2643,2641;, + 3;2641,2643,2642;, + 3;2646,2655,2649;, + 3;2646,2660,2655;, + 3;2647,2662,2646;, + 3;2647,2661,2662;, + 3;2648,2647,2649;, + 3;2649,2647,2646;, + 3;2652,2669,2651;, + 3;2652,2668,2669;, + 3;2653,2688,2652;, + 3;2653,2687,2688;, + 3;2654,2657,2653;, + 3;2654,2656,2657;, + 3;2650,2654,2653;, + 3;2650,2653,2651;, + 3;2651,2653,2652;, + 3;2658,2687,2657;, + 3;2658,2686,2687;, + 3;2659,2693,2658;, + 3;2659,2692,2693;, + 3;2660,2663,2659;, + 3;2660,2662,2663;, + 3;2656,2659,2657;, + 3;2657,2659,2658;, + 3;2659,2656,2660;, + 3;2660,2656,2655;, + 3;2664,2692,2663;, + 3;2664,2691,2692;, + 3;2665,2696,2664;, + 3;2665,2695,2696;, + 3;2662,2666,2665;, + 3;2662,2665,2663;, + 3;2663,2665,2664;, + 3;2666,2662,2667;, + 3;2667,2662,2661;, + 3;2668,2683,2671;, + 3;2668,2688,2683;, + 3;2671,2672,2670;, + 3;2671,2676,2672;, + 3;2671,2670,2668;, + 3;2668,2670,2669;, + 3;2675,2677,2674;, + 3;2675,2682,2677;, + 3;2676,2684,2675;, + 3;2676,2683,2684;, + 3;2675,2674,2676;, + 3;2676,2674,2672;, + 3;2672,2674,2673;, + 3;2680,2694,2679;, + 3;2680,2697,2694;, + 3;2681,2690,2680;, + 3;2681,2689,2690;, + 3;2682,2685,2681;, + 3;2682,2684,2685;, + 3;2680,2679,2681;, + 3;2681,2679,2682;, + 3;2682,2679,2677;, + 3;2677,2679,2678;, + 3;2686,2689,2685;, + 3;2686,2693,2689;, + 3;2685,2683,2688;, + 3;2685,2688,2686;, + 3;2686,2688,2687;, + 3;2683,2685,2684;, + 3;2691,2697,2690;, + 3;2691,2696,2697;, + 3;2689,2693,2690;, + 3;2690,2693,2691;, + 3;2691,2693,2692;, + 3;2697,2696,2694;, + 3;2694,2696,2695;, + 3;2699,2714,2698;, + 3;2699,2713,2714;, + 3;2701,2698,2702;, + 3;2698,2701,2699;, + 3;2699,2701,2700;, + 3;2703,2711,2707;, + 3;2703,2710,2711;, + 3;2704,2706,2705;, + 3;2707,4331,2703;, + 3;2706,2704,4325;, + 3;2709,2716,2708;, + 3;2709,2715,2716;, + 3;2709,2712,2711;, + 3;2709,2711,2710;, + 3;2712,2709,2713;, + 3;2713,2709,2714;, + 3;2714,2709,2708;, + 3;2718,2717,2716;, + 3;2718,2716,2719;, + 3;2719,2716,2715;, + 3;2721,2767,2720;, + 3;2721,2766,2767;, + 3;2722,2761,2721;, + 3;2721,2761,2762;, + 3;2722,2721,2720;, + 3;2722,2720,2725;, + 3;2722,2725,2723;, + 3;2723,2725,2724;, + 3;2727,2753,2726;, + 3;2727,2752,2753;, + 3;2730,2747,2729;, + 3;2730,2746,2747;, + 3;2732,2733,2731;, + 3;2732,2738,2733;, + 3;2728,2731,2729;, + 3;2729,2731,2730;, + 3;2731,2728,2727;, + 3;2731,2727,2732;, + 3;2732,2727,2726;, + 3;2735,3387,2734;, + 3;2735,3386,3387;, + 3;2736,2824,2735;, + 3;2736,2823,2824;, + 3;2737,2742,2736;, + 3;2737,2741,2742;, + 3;2734,2733,2735;, + 3;2735,2733,2738;, + 3;2735,2738,2736;, + 3;2736,2738,2737;, + 3;2743,2823,2742;, + 3;2743,2822,2823;, + 3;2744,2942,2743;, + 3;2744,2941,2942;, + 3;2742,2741,2744;, + 3;2742,2744,2743;, + 3;2744,2741,2739;, + 3;2739,2741,2740;, + 3;1883,2746,2745;, + 3;1883,2747,2746;, + 3;1883,2748,2747;, + 3;2750,2758,2749;, + 3;2750,2757,2758;, + 3;2753,2750,2749;, + 3;2750,2753,2751;, + 3;2751,2753,2752;, + 3;2756,2760,2755;, + 3;2756,2759,2760;, + 3;2757,2755,2758;, + 3;2758,2755,2754;, + 3;2755,2757,2756;, + 3;2763,2766,2762;, + 3;2763,2765,2766;, + 3;2759,2762,2761;, + 3;2759,2761,2760;, + 3;2762,2759,2764;, + 3;2762,2764,2763;, + 3;2765,2767,2766;, + 3;2767,2765,2768;, + 3;2771,3118,2770;, + 3;2771,3117,3118;, + 3;4370,2865,2771;, + 3;4370,4371,2865;, + 3;2773,3053,2772;, + 3;2773,3052,3053;, + 3;2774,3057,4372;, + 3;2773,4373,3058;, + 3;2774,2770,2769;, + 3;2770,2774,2771;, + 3;2771,2774,4372;, + 3;2771,4372,4370;, + 3;2775,3044,2780;, + 3;2775,3048,3044;, + 3;1886,3085,2775;, + 3;1886,1944,3085;, + 3;2776,1918,1886;, + 3;2776,3064,1918;, + 3;2777,4374,4375;, + 3;2777,3054,4374;, + 3;2778,2863,2777;, + 3;2778,2862,2863;, + 3;2779,3359,2778;, + 3;2779,3358,3359;, + 3;4376,2789,2779;, + 3;4376,4377,2789;, + 3;4378,2777,4375;, + 3;4378,2778,2777;, + 3;4378,2779,2778;, + 3;4378,4376,2779;, + 3;1886,2775,2780;, + 3;2781,3369,2788;, + 3;2781,3368,3369;, + 3;2782,2857,4379;, + 3;2781,4380,2858;, + 3;2783,2860,2782;, + 3;2783,2869,2860;, + 3;2784,3384,2783;, + 3;2784,3383,3384;, + 3;2785,3412,2784;, + 3;2785,3415,3412;, + 3;2786,3093,2785;, + 3;2786,3098,3093;, + 3;2787,2808,2786;, + 3;2787,2807,2808;, + 3;4381,3362,2787;, + 3;4381,4382,3362;, + 3;4381,2785,4379;, + 3;4379,2785,2784;, + 3;4379,2784,2782;, + 3;2782,2784,2783;, + 3;2785,4381,2786;, + 3;2786,4381,2787;, + 3;2790,3358,2789;, + 3;2790,3357,3358;, + 3;2791,3373,2790;, + 3;2791,3372,3373;, + 3;2792,3378,2791;, + 3;2792,3377,3378;, + 3;2793,3197,2792;, + 3;2793,3196,3197;, + 3;2794,3017,2793;, + 3;2794,3016,3017;, + 3;2795,3041,2794;, + 3;2795,3040,3041;, + 3;4377,3045,2795;, + 3;4377,4383,3045;, + 3;2794,2793,2795;, + 3;2795,2793,4377;, + 3;4377,2793,2792;, + 3;4377,2792,2789;, + 3;2789,2792,2791;, + 3;2789,2791,2790;, + 3;2797,4384,4385;, + 3;2802,2991,2987;, + 3;2798,4384,2797;, + 3;2798,3363,4384;, + 3;2799,2806,2798;, + 3;2799,2815,2806;, + 3;2800,3090,2799;, + 3;2800,3089,3090;, + 3;1891,2945,2800;, + 3;1891,1893,2945;, + 3;4253,4386,4387;, + 3;4253,2974,4386;, + 3;2802,3082,4253;, + 3;2802,3083,3082;, + 3;1891,4385,2801;, + 3;1891,2797,4385;, + 3;1891,2798,2797;, + 3;1891,2799,2798;, + 3;1891,2800,2799;, + 3;2803,4388,4389;, + 3;2803,3020,4388;, + 3;2804,3022,2803;, + 3;2804,3021,3022;, + 3;2805,2997,2804;, + 3;2805,2996,2997;, + 3;4389,2982,2805;, + 3;4389,4390,2982;, + 3;4389,2804,2803;, + 3;4389,2805,2804;, + 3;2807,3363,2806;, + 3;2807,3362,3363;, + 3;2809,3098,2808;, + 3;2809,3097,3098;, + 3;2810,3135,2809;, + 3;2810,3134,3135;, + 3;2811,4391,4392;, + 3;2811,3159,4391;, + 3;2812,3110,2811;, + 3;2812,3115,3110;, + 3;4393,3148,2812;, + 3;4393,4394,3148;, + 3;2814,3122,2813;, + 3;2814,3121,3122;, + 3;2815,3091,2814;, + 3;2815,3090,3091;, + 3;2806,2810,2809;, + 3;2806,2809,2807;, + 3;2807,2809,2808;, + 3;2810,2806,4395;, + 3;4395,2806,4396;, + 3;4396,2806,2813;, + 3;2813,2806,2814;, + 3;2814,2806,2815;, + 3;2816,3400,2825;, + 3;2816,3399,3400;, + 3;2817,3404,2816;, + 3;2816,3404,3405;, + 3;2818,2892,2817;, + 3;2818,2891,2892;, + 3;2819,2899,2818;, + 3;2819,2898,2899;, + 3;2820,2905,2819;, + 3;2820,2904,2905;, + 3;2821,2883,2820;, + 3;2821,2887,2883;, + 3;2822,2943,2821;, + 3;2822,2942,2943;, + 3;2825,3386,2824;, + 3;2825,3385,3386;, + 3;2817,2819,2818;, + 3;2819,2817,2820;, + 3;2820,2817,2821;, + 3;2821,2817,2816;, + 3;2821,2816,2822;, + 3;2822,2816,2825;, + 3;2822,2825,2823;, + 3;2823,2825,2824;, + 3;2826,2843,2832;, + 3;2826,2842,2843;, + 3;2827,2854,2826;, + 3;2827,2853,2854;, + 3;2830,2909,2829;, + 3;2830,2908,2909;, + 3;2831,2915,2830;, + 3;2831,2914,2915;, + 3;2832,2889,2831;, + 3;2832,2888,2889;, + 3;2830,2829,2832;, + 3;2830,2832,2831;, + 3;2832,2829,2827;, + 3;2832,2827,2826;, + 3;2827,2829,2828;, + 3;2833,2896,2838;, + 3;2833,2895,2896;, + 3;2834,3380,2833;, + 3;2834,3379,3380;, + 3;2835,2868,2834;, + 3;2835,2867,2868;, + 3;2836,2848,2835;, + 3;2836,2847,2848;, + 3;2838,2840,2837;, + 3;2838,2839,2840;, + 3;2835,2834,2836;, + 3;2836,2834,2837;, + 3;2837,2834,2838;, + 3;2838,2834,2833;, + 3;2839,2888,2843;, + 3;2839,2896,2888;, + 3;2842,2855,2841;, + 3;2842,2854,2855;, + 3;2842,2840,2839;, + 3;2842,2839,2843;, + 3;2840,2842,2841;, + 3;2844,3116,2849;, + 3;2844,3119,3116;, + 3;2849,2867,2848;, + 3;2849,2866,2867;, + 3;2847,2849,2848;, + 3;2849,2847,2844;, + 3;2844,2847,2846;, + 3;2844,2846,2845;, + 3;2851,2855,2852;, + 3;2852,2855,2853;, + 3;2853,2855,2854;, + 3;2855,2851,2850;, + 3;2856,3361,2859;, + 3;2856,3360,3361;, + 3;4380,2861,2856;, + 3;2857,2860,4397;, + 3;2859,3368,2858;, + 3;2859,3367,3368;, + 3;4380,2856,2859;, + 3;4380,2859,2858;, + 3;2862,3360,2861;, + 3;2862,3359,3360;, + 3;2864,3054,2863;, + 3;2864,3053,3054;, + 3;2866,3117,2865;, + 3;2866,3116,3117;, + 3;2869,3379,2868;, + 3;2869,3384,3379;, + 3;2867,2866,2865;, + 3;2867,2865,2868;, + 3;2868,2865,4371;, + 3;2868,4371,4397;, + 3;2868,4397,2860;, + 3;2868,2860,2869;, + 3;2861,2864,2863;, + 3;2861,2863,2862;, + 3;2873,2940,2872;, + 3;2873,2939,2940;, + 3;2874,2886,2873;, + 3;2874,2885,2886;, + 3;2875,2919,2874;, + 3;2875,2918,2919;, + 3;2876,2925,2875;, + 3;2876,2924,2925;, + 3;2877,2879,2876;, + 3;2877,2878,2879;, + 3;2874,2876,2875;, + 3;2876,2874,2873;, + 3;2876,2873,2872;, + 3;2876,2872,2877;, + 3;2877,2872,2871;, + 3;2877,2871,2870;, + 3;2880,2924,2879;, + 3;2880,2923,2924;, + 3;2881,2930,2880;, + 3;2881,2929,2930;, + 3;2878,2880,2879;, + 3;2880,2878,2881;, + 3;2881,2878,2882;, + 3;2884,2904,2883;, + 3;2884,2903,2904;, + 3;2885,2920,2884;, + 3;2885,2919,2920;, + 3;2887,2939,2886;, + 3;2887,2943,2939;, + 3;2886,2885,2887;, + 3;2887,2885,2884;, + 3;2887,2884,2883;, + 3;2890,2914,2889;, + 3;2890,2913,2914;, + 3;2891,2900,2890;, + 3;2891,2899,2900;, + 3;2893,3404,2817;, + 3;2893,3403,3404;, + 3;2894,3409,2893;, + 3;2894,3408,3409;, + 3;2895,3381,2894;, + 3;2895,3380,3381;, + 3;2890,2889,2891;, + 3;2891,2889,2892;, + 3;2892,2889,2888;, + 3;2892,2888,2893;, + 3;2893,2888,2895;, + 3;2893,2895,2894;, + 3;2895,2888,2896;, + 3;2897,2938,2901;, + 3;2897,2937,2938;, + 3;2898,2906,2897;, + 3;2898,2905,2906;, + 3;2901,2913,2900;, + 3;2901,2912,2913;, + 3;2899,2898,2900;, + 3;2900,2898,2897;, + 3;2900,2897,2901;, + 3;2902,2937,2906;, + 3;2902,2936,2937;, + 3;2903,2921,2902;, + 3;2903,2920,2921;, + 3;2902,2906,2903;, + 3;2903,2906,2904;, + 3;2904,2906,2905;, + 3;2907,2933,2911;, + 3;2907,2932,2933;, + 3;2908,2916,2907;, + 3;2908,2915,2916;, + 3;2911,2928,2910;, + 3;2911,2927,2928;, + 3;2908,2907,2911;, + 3;2908,2911,2909;, + 3;2909,2911,2910;, + 3;2912,2932,2916;, + 3;2912,2938,2932;, + 3;2916,2914,2912;, + 3;2912,2914,2913;, + 3;2914,2916,2915;, + 3;2917,2936,2921;, + 3;2917,2935,2936;, + 3;2918,2926,2917;, + 3;2918,2925,2926;, + 3;2918,2920,2919;, + 3;2920,2918,2921;, + 3;2921,2918,2917;, + 3;2922,2935,2926;, + 3;2922,2934,2935;, + 3;2923,2931,2922;, + 3;2923,2930,2931;, + 3;2926,2923,2922;, + 3;2923,2926,2925;, + 3;2923,2925,2924;, + 3;2927,2934,2931;, + 3;2927,2933,2934;, + 3;2931,2928,2927;, + 3;2928,2931,2930;, + 3;2928,2930,2929;, + 3;2934,2933,2935;, + 3;2935,2933,2938;, + 3;2935,2938,2937;, + 3;2935,2937,2936;, + 3;2938,2933,2932;, + 3;2939,2943,2942;, + 3;2939,2942,2940;, + 3;2940,2942,2941;, + 3;2944,3104,2947;, + 3;2944,3109,3104;, + 3;1893,3395,2944;, + 3;1893,2014,3395;, + 3;2946,3089,2945;, + 3;2946,3088,3089;, + 3;2947,2954,2946;, + 3;2947,2953,2954;, + 3;1893,2946,2945;, + 3;1893,2947,2946;, + 3;1893,2944,2947;, + 3;2948,3144,2952;, + 3;2948,3143,3144;, + 3;2949,2967,2948;, + 3;2949,2966,2967;, + 3;2950,3153,2949;, + 3;2950,3152,3153;, + 3;2951,3113,2950;, + 3;2951,3112,3113;, + 3;2952,3161,2951;, + 3;2952,3160,3161;, + 3;2950,2952,2951;, + 3;2952,2950,2949;, + 3;2952,2949,2948;, + 3;2953,3105,2956;, + 3;2953,3104,3105;, + 3;2955,3088,2954;, + 3;2955,3087,3088;, + 3;2956,3129,2955;, + 3;2956,3128,3129;, + 3;2953,2956,2955;, + 3;2953,2955,2954;, + 3;2957,3096,2964;, + 3;2957,3095,3096;, + 3;2958,3411,2957;, + 3;2958,3410,3411;, + 3;2959,3402,2958;, + 3;2959,3401,3402;, + 3;2960,3398,2959;, + 3;2960,3397,3398;, + 3;2961,2970,2960;, + 3;2961,2969,2970;, + 3;2962,3099,2961;, + 3;2962,3103,3099;, + 3;2963,3136,2962;, + 3;2963,3140,3136;, + 3;2964,3132,2963;, + 3;2964,3131,3132;, + 3;2958,2962,2959;, + 3;2959,2962,2960;, + 3;2960,2962,2961;, + 3;2962,2958,2957;, + 3;2962,2957,2963;, + 3;2963,2957,2964;, + 3;2965,3127,2973;, + 3;2965,3126,3127;, + 3;4398,3154,2965;, + 3;2966,3153,4399;, + 3;2968,3142,4400;, + 3;2967,4401,3143;, + 3;2969,3100,2968;, + 3;2969,3099,3100;, + 3;2971,3397,2970;, + 3;2971,3396,3397;, + 3;2972,3391,2971;, + 3;2972,3390,3391;, + 3;2973,3107,2972;, + 3;2973,3106,3107;, + 3;2971,2968,2972;, + 3;2972,2968,4400;, + 3;2972,4400,2973;, + 3;2973,4400,4398;, + 3;2973,4398,2965;, + 3;2968,2971,2969;, + 3;2969,2971,2970;, + 3;2974,4402,4386;, + 3;2974,3082,4402;, + 3;2975,2996,2982;, + 3;2975,3000,2996;, + 3;2976,3208,2975;, + 3;2976,3207,3208;, + 3;2977,3220,2976;, + 3;2977,3219,3220;, + 3;2978,3221,2977;, + 3;2978,3226,3221;, + 3;2979,3227,2978;, + 3;2979,3232,3227;, + 3;2980,3199,2979;, + 3;2980,3198,3199;, + 3;2981,3376,2980;, + 3;2981,3375,3376;, + 3;4390,2988,2981;, + 3;4390,4403,2988;, + 3;4390,2975,2982;, + 3;4390,2976,2975;, + 3;4390,2977,2976;, + 3;4390,2978,2977;, + 3;4390,2979,2978;, + 3;4390,2980,2979;, + 3;4390,2981,2980;, + 3;2983,3011,2986;, + 3;2983,3010,3011;, + 3;2984,3024,2983;, + 3;2984,3023,3024;, + 3;2985,3019,2984;, + 3;2985,3018,3019;, + 3;4404,3084,2985;, + 3;4404,4405,3084;, + 3;2986,4406,4404;, + 3;2986,2995,4406;, + 3;4404,2983,2986;, + 3;4404,2984,2983;, + 3;4404,2985,2984;, + 3;4403,3083,2987;, + 3;4403,4402,3083;, + 3;2989,3375,2988;, + 3;2989,3374,3375;, + 3;2990,3371,2989;, + 3;2990,3370,3371;, + 3;2991,3365,2990;, + 3;2991,3364,3365;, + 3;4403,2989,2988;, + 3;4403,2990,2989;, + 3;4403,2991,2990;, + 3;4403,2987,2991;, + 3;2992,4407,4406;, + 3;2992,3047,4407;, + 3;2993,3034,2992;, + 3;2993,3033,3034;, + 3;2994,3003,2993;, + 3;2994,3002,3003;, + 3;2995,3012,2994;, + 3;2995,3011,3012;, + 3;4406,2993,2992;, + 3;4406,2994,2993;, + 3;4406,2995,2994;, + 3;2998,3021,2997;, + 3;2998,3027,3021;, + 3;2999,3209,2998;, + 3;2999,3214,3209;, + 3;3000,3203,2999;, + 3;3000,3208,3203;, + 3;2997,2999,2998;, + 3;2999,2997,2996;, + 3;2999,2996,3000;, + 3;3001,3172,3007;, + 3;3001,3177,3172;, + 3;3002,3013,3001;, + 3;3002,3012,3013;, + 3;3004,3033,3003;, + 3;3004,3037,3033;, + 3;3005,3031,3004;, + 3;3005,3030,3031;, + 3;3006,3184,3005;, + 3;3006,3183,3184;, + 3;3007,3182,3006;, + 3;3007,3181,3182;, + 3;3003,3006,3004;, + 3;3004,3006,3005;, + 3;3006,3003,3007;, + 3;3007,3003,3002;, + 3;3007,3002,3001;, + 3;3008,3177,3013;, + 3;3008,3176,3177;, + 3;3009,3171,3008;, + 3;3009,3170,3171;, + 3;3010,3025,3009;, + 3;3010,3024,3025;, + 3;3010,3008,3013;, + 3;3010,3013,3011;, + 3;3011,3013,3012;, + 3;3008,3010,3009;, + 3;3014,3196,3017;, + 3;3014,3202,3196;, + 3;3015,3191,3014;, + 3;3015,3190,3191;, + 3;3016,3042,3015;, + 3;3016,3041,3042;, + 3;3016,3015,3017;, + 3;3017,3015,3014;, + 3;3018,4405,4388;, + 3;3018,3084,4405;, + 3;3020,3023,3019;, + 3;3020,3022,3023;, + 3;4388,3019,3018;, + 3;4388,3020,3019;, + 3;3026,3170,3025;, + 3;3026,3169,3170;, + 3;3027,3210,3026;, + 3;3027,3209,3210;, + 3;3026,3025,3027;, + 3;3027,3025,3022;, + 3;3027,3022,3021;, + 3;3022,3025,3023;, + 3;3023,3025,3024;, + 3;3028,3038,3032;, + 3;3028,3043,3038;, + 3;3029,3195,3028;, + 3;3029,3194,3195;, + 3;3030,3185,3029;, + 3;3030,3184,3185;, + 3;3032,3037,3031;, + 3;3032,3036,3037;, + 3;3029,3031,3030;, + 3;3031,3029,3032;, + 3;3032,3029,3028;, + 3;3035,3047,3034;, + 3;3035,3046,3047;, + 3;3036,3039,3035;, + 3;3036,3038,3039;, + 3;3034,3037,3036;, + 3;3034,3036,3035;, + 3;3037,3034,3033;, + 3;3040,3046,3039;, + 3;3040,3045,3046;, + 3;3043,3190,3042;, + 3;3043,3195,3190;, + 3;3040,3042,3041;, + 3;3042,3040,3043;, + 3;3043,3040,3039;, + 3;3043,3039,3038;, + 3;3048,1944,4408;, + 3;3048,3085,1944;, + 3;4408,3044,3048;, + 3;4407,3045,4383;, + 3;4407,3046,3045;, + 3;4407,3047,3046;, + 3;3050,3064,3049;, + 3;3050,3070,3064;, + 3;3052,3059,3051;, + 3;3052,3058,3059;, + 3;4297,3054,3051;, + 3;3051,3054,3053;, + 3;3051,3053,3052;, + 3;3054,4297,4374;, + 3;4373,4314,3058;, + 3;3058,4314,3055;, + 3;3058,3055,3059;, + 3;3060,3073,3063;, + 3;3060,3072,3073;, + 3;3061,3066,3060;, + 3;3061,3065,3066;, + 3;4409,3086,3061;, + 3;4295,4293,4410;, + 3;3062,4308,4409;, + 3;3062,3077,4308;, + 3;3063,3075,3062;, + 3;3063,3074,3075;, + 3;4409,3063,3062;, + 3;4409,3060,3063;, + 3;4409,3061,3060;, + 3;4411,1944,1918;, + 3;4411,4412,1944;, + 3;3067,4413,4414;, + 3;3067,3071,4413;, + 3;3068,3081,3067;, + 3;3068,3080,3081;, + 3;4415,4414,4416;, + 3;4415,3067,4414;, + 3;4415,3068,3067;, + 3;4415,3069,3068;, + 3;1918,3070,4299;, + 3;1918,3064,3070;, + 3;3071,151,3755;, + 3;3071,3081,151;, + 3;4417,3074,3073;, + 3;4417,4309,3074;, + 3;3755,4413,3071;, + 3;4417,3073,3072;, + 3;3076,3077,3075;, + 3;3076,3079,3077;, + 3;4309,3076,3074;, + 3;3074,3076,3075;, + 3;4308,3079,3078;, + 3;4308,3077,3079;, + 3;151,3081,3080;, + 3;4402,3082,3083;, + 3;3087,3130,3092;, + 3;3087,3129,3130;, + 3;3092,3121,3091;, + 3;3092,3120,3121;, + 3;3090,3089,3091;, + 3;3091,3089,3092;, + 3;3092,3089,3088;, + 3;3092,3088,3087;, + 3;3094,3415,3093;, + 3;3094,3414,3415;, + 3;3095,3406,3094;, + 3;3095,3411,3406;, + 3;3097,3131,3096;, + 3;3097,3135,3131;, + 3;3097,3096,3098;, + 3;3098,3096,3093;, + 3;3093,3096,3094;, + 3;3094,3096,3095;, + 3;3101,3142,3100;, + 3;3101,3141,3142;, + 3;3102,3165,3101;, + 3;3102,3164,3165;, + 3;3103,3137,3102;, + 3;3103,3136,3137;, + 3;3100,3099,3101;, + 3;3101,3099,3103;, + 3;3101,3103,3102;, + 3;3106,3128,3105;, + 3;3106,3127,3128;, + 3;3108,3390,3107;, + 3;3108,3389,3390;, + 3;3109,3392,3108;, + 3;3109,3395,3392;, + 3;3107,3106,3108;, + 3;3108,3106,3105;, + 3;3108,3105,3104;, + 3;3108,3104,3109;, + 3;3111,3159,3110;, + 3;3111,3158,3159;, + 3;3112,3162,3111;, + 3;3112,3161,3162;, + 3;3114,3152,3113;, + 3;3114,3151,3152;, + 3;3115,3145,3114;, + 3;3115,3148,3145;, + 3;3115,3111,3110;, + 3;3111,3115,3114;, + 3;3111,3114,3112;, + 3;3112,3114,3113;, + 3;3117,3119,3118;, + 3;3119,3117,3116;, + 3;3120,3125,3124;, + 3;3120,3130,3125;, + 3;3123,3147,3122;, + 3;3123,3146,3147;, + 3;3124,3150,3123;, + 3;3124,3149,3150;, + 3;3121,3123,3122;, + 3;3123,3121,3120;, + 3;3123,3120,3124;, + 3;3126,3149,3125;, + 3;3126,3154,3149;, + 3;3128,3126,3125;, + 3;3128,3125,3129;, + 3;3129,3125,3130;, + 3;3126,3128,3127;, + 3;3133,3140,3132;, + 3;3133,3139,3140;, + 3;3134,3156,3133;, + 3;3134,3155,3156;, + 3;3134,3133,3135;, + 3;3135,3133,3131;, + 3;3131,3133,3132;, + 3;3138,3164,3137;, + 3;3138,3163,3164;, + 3;3139,3157,3138;, + 3;3139,3156,3157;, + 3;3140,3138,3137;, + 3;3140,3137,3136;, + 3;3138,3140,3139;, + 3;4418,3160,3144;, + 3;4418,4419,3160;, + 3;3143,4401,4418;, + 3;3143,4418,3144;, + 3;4420,3151,3145;, + 3;4420,4421,3151;, + 3;4394,3145,3148;, + 3;3145,4394,4420;, + 3;4399,3153,4422;, + 3;4422,3153,3152;, + 3;4422,3152,4421;, + 3;4421,3152,3151;, + 3;3158,4423,4424;, + 3;3158,3162,4423;, + 3;4391,3159,4425;, + 3;4425,3159,3158;, + 3;4425,3158,4424;, + 3;4426,4423,3161;, + 3;4426,3161,3160;, + 3;4426,3160,4419;, + 3;3161,4423,3162;, + 3;3166,3176,3171;, + 3;3166,3175,3176;, + 3;3167,3256,3166;, + 3;3167,3255,3256;, + 3;3168,3287,3167;, + 3;3168,3286,3287;, + 3;3169,3211,3168;, + 3;3169,3210,3211;, + 3;3167,3169,3168;, + 3;3169,3167,3166;, + 3;3169,3166,3170;, + 3;3170,3166,3171;, + 3;3173,3181,3172;, + 3;3173,3180,3181;, + 3;3174,3260,3173;, + 3;3174,3259,3260;, + 3;3175,3257,3174;, + 3;3175,3256,3257;, + 3;3173,3176,3174;, + 3;3174,3176,3175;, + 3;3176,3173,3177;, + 3;3177,3173,3172;, + 3;3178,3183,3182;, + 3;3178,3189,3183;, + 3;3179,3269,3178;, + 3;3179,3268,3269;, + 3;3180,3261,3179;, + 3;3180,3260,3261;, + 3;3181,3178,3182;, + 3;3178,3181,3179;, + 3;3179,3181,3180;, + 3;3186,3194,3185;, + 3;3186,3193,3194;, + 3;3187,3233,3186;, + 3;3187,3239,3233;, + 3;3188,3274,3187;, + 3;3188,3273,3274;, + 3;3189,3270,3188;, + 3;3189,3269,3270;, + 3;3187,3186,3188;, + 3;3188,3186,3185;, + 3;3188,3185,3184;, + 3;3188,3184,3189;, + 3;3189,3184,3183;, + 3;3192,3202,3191;, + 3;3192,3201,3202;, + 3;3193,3234,3192;, + 3;3193,3233,3234;, + 3;3195,3191,3190;, + 3;3191,3195,3194;, + 3;3191,3194,3193;, + 3;3191,3193,3192;, + 3;3198,3377,3197;, + 3;3198,3376,3377;, + 3;3200,3232,3199;, + 3;3200,3231,3232;, + 3;3201,3235,3200;, + 3;3201,3234,3235;, + 3;3197,3201,3200;, + 3;3197,3200,3198;, + 3;3198,3200,3199;, + 3;3201,3197,3202;, + 3;3202,3197,3196;, + 3;3204,3214,3203;, + 3;3204,3213,3214;, + 3;3205,3282,3204;, + 3;3205,3281,3282;, + 3;3206,3291,3205;, + 3;3206,3290,3291;, + 3;3207,3215,3206;, + 3;3207,3220,3215;, + 3;3205,3207,3206;, + 3;3207,3205,3208;, + 3;3208,3205,3204;, + 3;3208,3204,3203;, + 3;3212,3286,3211;, + 3;3212,3285,3286;, + 3;3213,3283,3212;, + 3;3213,3282,3283;, + 3;3211,3209,3214;, + 3;3211,3214,3212;, + 3;3212,3214,3213;, + 3;3209,3211,3210;, + 3;3216,3290,3215;, + 3;3216,3289,3290;, + 3;3217,3253,3216;, + 3;3217,3252,3253;, + 3;3218,3246,3217;, + 3;3218,3245,3246;, + 3;3219,3222,3218;, + 3;3219,3221,3222;, + 3;3215,3218,3216;, + 3;3216,3218,3217;, + 3;3218,3215,3219;, + 3;3219,3215,3220;, + 3;3223,3245,3222;, + 3;3223,3244,3245;, + 3;3224,3294,3223;, + 3;3224,3298,3294;, + 3;3225,3299,3224;, + 3;3225,3304,3299;, + 3;3226,3228,3225;, + 3;3226,3227,3228;, + 3;3224,3222,3225;, + 3;3225,3222,3221;, + 3;3225,3221,3226;, + 3;3222,3224,3223;, + 3;3229,3304,3228;, + 3;3229,3303,3304;, + 3;3230,3322,3229;, + 3;3230,3321,3322;, + 3;3231,3236,3230;, + 3;3231,3235,3236;, + 3;3229,3228,3227;, + 3;3229,3227,3232;, + 3;3229,3232,3230;, + 3;3230,3232,3231;, + 3;3237,3321,3236;, + 3;3237,3320,3321;, + 3;3238,3306,3237;, + 3;3238,3305,3306;, + 3;3239,3275,3238;, + 3;3239,3274,3275;, + 3;3238,3237,3234;, + 3;3238,3234,3233;, + 3;3238,3233,3239;, + 3;3234,3237,3235;, + 3;3235,3237,3236;, + 3;3240,3272,3248;, + 3;3240,3278,3272;, + 3;3241,3312,3240;, + 3;3241,3311,3312;, + 3;3242,3328,3241;, + 3;3242,3327,3328;, + 3;3243,3334,3242;, + 3;3243,3333,3334;, + 3;3244,3295,3243;, + 3;3244,3294,3295;, + 3;3247,3252,3246;, + 3;3247,3251,3252;, + 3;3248,3266,3247;, + 3;3248,3271,3266;, + 3;3244,3241,3246;, + 3;3244,3246,3245;, + 3;3246,3241,3247;, + 3;3247,3241,3240;, + 3;3247,3240,3248;, + 3;3241,3244,3243;, + 3;3241,3243,3242;, + 3;3249,3289,3253;, + 3;3249,3293,3289;, + 3;3250,3263,3249;, + 3;3250,3262,3263;, + 3;3251,3267,3250;, + 3;3251,3266,3267;, + 3;3252,3251,3253;, + 3;3253,3251,3249;, + 3;3249,3251,3250;, + 3;3254,3279,3258;, + 3;3254,3284,3279;, + 3;3255,3288,3254;, + 3;3255,3287,3288;, + 3;3258,3259,3257;, + 3;3258,3265,3259;, + 3;3255,3254,3256;, + 3;3256,3254,3258;, + 3;3256,3258,3257;, + 3;3262,3268,3261;, + 3;3262,3267,3268;, + 3;3264,3293,3263;, + 3;3264,3292,3293;, + 3;3265,3280,3264;, + 3;3265,3279,3280;, + 3;3260,3259,3262;, + 3;3260,3262,3261;, + 3;3262,3259,3263;, + 3;3263,3259,3265;, + 3;3263,3265,3264;, + 3;3271,3273,3270;, + 3;3271,3272,3273;, + 3;3268,3267,3269;, + 3;3269,3267,3271;, + 3;3269,3271,3270;, + 3;3271,3267,3266;, + 3;3276,3305,3275;, + 3;3276,3308,3305;, + 3;3277,3314,3276;, + 3;3277,3319,3314;, + 3;3278,3313,3277;, + 3;3278,3312,3313;, + 3;3274,3276,3275;, + 3;3276,3274,3273;, + 3;3276,3273,3277;, + 3;3277,3273,3278;, + 3;3278,3273,3272;, + 3;3281,3292,3280;, + 3;3281,3291,3292;, + 3;3284,3285,3283;, + 3;3284,3288,3285;, + 3;3281,3280,3282;, + 3;3282,3280,3284;, + 3;3282,3284,3283;, + 3;3284,3280,3279;, + 3;3286,3285,3287;, + 3;3287,3285,3288;, + 3;3289,3291,3290;, + 3;3291,3289,3292;, + 3;3292,3289,3293;, + 3;3296,3333,3295;, + 3;3296,3332,3333;, + 3;3297,3340,3296;, + 3;3297,3339,3340;, + 3;3298,3300,3297;, + 3;3298,3299,3300;, + 3;3294,3298,3295;, + 3;3295,3298,3297;, + 3;3295,3297,3296;, + 3;3301,3339,3300;, + 3;3301,3338,3339;, + 3;3302,3355,3301;, + 3;3302,3354,3355;, + 3;3303,3323,3302;, + 3;3303,3322,3323;, + 3;3303,3299,3304;, + 3;3299,3303,3300;, + 3;3300,3303,3302;, + 3;3300,3302,3301;, + 3;3307,3320,3306;, + 3;3307,3326,3320;, + 3;3308,3315,3307;, + 3;3308,3314,3315;, + 3;3305,3308,3306;, + 3;3306,3308,3307;, + 3;3309,3319,3313;, + 3;3309,3318,3319;, + 3;3310,3344,3309;, + 3;3310,3343,3344;, + 3;3311,3329,3310;, + 3;3311,3328,3329;, + 3;3312,3309,3313;, + 3;3309,3312,3311;, + 3;3309,3311,3310;, + 3;3316,3326,3315;, + 3;3316,3325,3326;, + 3;3317,3350,3316;, + 3;3317,3349,3350;, + 3;3318,3345,3317;, + 3;3318,3344,3345;, + 3;3319,3316,3315;, + 3;3319,3315,3314;, + 3;3316,3319,3318;, + 3;3316,3318,3317;, + 3;3324,3354,3323;, + 3;3324,3353,3354;, + 3;3325,3351,3324;, + 3;3325,3350,3351;, + 3;3326,3322,3321;, + 3;3326,3321,3320;, + 3;3322,3326,3323;, + 3;3323,3326,3325;, + 3;3323,3325,3324;, + 3;3327,3335,3330;, + 3;3327,3334,3335;, + 3;3330,3343,3329;, + 3;3330,3342,3343;, + 3;3330,3329,3327;, + 3;3327,3329,3328;, + 3;3331,3342,3335;, + 3;3331,3347,3342;, + 3;3332,3341,3331;, + 3;3332,3340,3341;, + 3;3331,3335,3332;, + 3;3332,3335,3334;, + 3;3332,3334,3333;, + 3;3336,3347,3341;, + 3;3336,3346,3347;, + 3;3337,3348,3336;, + 3;3337,3352,3348;, + 3;3338,3356,3337;, + 3;3338,3355,3356;, + 3;3337,3336,3338;, + 3;3338,3336,3341;, + 3;3338,3341,3340;, + 3;3338,3340,3339;, + 3;3346,3349,3345;, + 3;3346,3348,3349;, + 3;3346,3342,3347;, + 3;3342,3346,3343;, + 3;3343,3346,3345;, + 3;3343,3345,3344;, + 3;3352,3353,3351;, + 3;3352,3356,3353;, + 3;3348,3352,3349;, + 3;3349,3352,3351;, + 3;3349,3351,3350;, + 3;3356,3355,3353;, + 3;3353,3355,3354;, + 3;3357,3367,3361;, + 3;3357,3373,3367;, + 3;3359,3357,3361;, + 3;3359,3361,3360;, + 3;3357,3359,3358;, + 3;3366,3370,3365;, + 3;3366,3369,3370;, + 3;4384,3362,4382;, + 3;3365,3364,3366;, + 3;3362,4384,3363;, + 3;3372,3374,3371;, + 3;3372,3378,3374;, + 3;3371,3368,3367;, + 3;3371,3367,3373;, + 3;3371,3373,3372;, + 3;3368,3371,3369;, + 3;3369,3371,3370;, + 3;3376,3378,3377;, + 3;3378,3376,3375;, + 3;3378,3375,3374;, + 3;3382,3408,3381;, + 3;3382,3407,3408;, + 3;3383,3413,3382;, + 3;3383,3412,3413;, + 3;3381,3383,3382;, + 3;3383,3381,3384;, + 3;3384,3381,3380;, + 3;3384,3380,3379;, + 3;3385,3396,3391;, + 3;3385,3400,3396;, + 3;3389,3393,3388;, + 3;3389,3392,3393;, + 3;3390,3389,3387;, + 3;3390,3387,3391;, + 3;3391,3387,3386;, + 3;3391,3386,3385;, + 3;3387,3389,3388;, + 3;2014,3392,3395;, + 3;2014,3393,3392;, + 3;2014,3394,3393;, + 3;3399,3401,3398;, + 3;3399,3405,3401;, + 3;3400,3399,3398;, + 3;3400,3398,3397;, + 3;3400,3397,3396;, + 3;3403,3410,3402;, + 3;3403,3409,3410;, + 3;3401,3405,3403;, + 3;3401,3403,3402;, + 3;3403,3405,3404;, + 3;3407,3414,3406;, + 3;3407,3413,3414;, + 3;3410,3407,3411;, + 3;3411,3407,3406;, + 3;3407,3410,3408;, + 3;3408,3410,3409;, + 3;3414,3413,3412;, + 3;3414,3412,3415;, + 3;21,88,845;, + 3;151,846,3755;, + 3;4310,4309,4427;, + 3;4310,4428,4311;, + 3;1769,3416,1770;, + 3;3416,1778,4148;, + 3;3417,1901,4429;, + 3;4429,4234,3417;, + 3;4430,3510,185;, + 3;4430,185,3509;, + 3;61,4431,3448;, + 3;61,0,4431;; + + MeshNormals { + 4432; + -0.989571;-0.011953;-0.143551;, + -0.433214;-0.193876;-0.880192;, + -0.984781;0.061328;-0.162622;, + -0.000005;0.123093;-0.992395;, + -0.989261;0.138490;-0.046722;, + -0.588256;0.730768;-0.346313;, + 0.077792;0.437259;0.895965;, + -0.812611;0.166144;0.558622;, + -0.008181;0.252116;0.967663;, + 0.485631;0.575618;0.657895;, + 0.055097;0.933688;0.353823;, + -0.093634;0.341116;0.935346;, + -0.006241;0.260589;0.965430;, + -0.649875;0.280683;0.706314;, + 0.000025;-0.011554;0.999933;, + -0.338437;0.350328;-0.873345;, + 0.000004;-0.093947;-0.995577;, + 0.000016;-0.316597;-0.948560;, + -0.015033;-0.328905;-0.944243;, + -0.576566;-0.459455;-0.675627;, + -0.434273;0.868349;-0.239535;, + -0.151234;0.506148;0.849083;, + -0.164626;0.337297;-0.926892;, + -0.802913;0.231146;0.549456;, + 0.210760;-0.136730;0.967928;, + -0.336341;-0.108795;0.935435;, + 0.244564;-0.065106;0.967445;, + -0.963334;-0.094433;0.251137;, + -0.885448;-0.301099;-0.354007;, + -0.495937;0.082114;0.864467;, + -0.957644;0.220431;0.185280;, + 0.693967;0.242883;0.677803;, + 0.527840;-0.168309;0.832500;, + 0.026768;-0.438717;0.898227;, + -0.000016;-0.990834;-0.135089;, + -0.701247;-0.651828;-0.288743;, + -0.982778;-0.084744;-0.164211;, + -0.001279;-0.024600;-0.999697;, + 0.000009;-0.204621;0.978841;, + -0.895650;-0.343271;-0.282799;, + -0.559206;0.508717;0.654596;, + -0.314707;0.781987;-0.538011;, + 0.000005;-0.999974;0.007152;, + 0.114825;-0.948131;-0.296416;, + -0.145665;-0.919602;-0.364848;, + -0.449270;0.893379;-0.005605;, + 0.000168;0.854980;0.518661;, + -0.000538;0.773627;-0.633641;, + -0.027645;-0.423869;0.905301;, + -0.705970;-0.446329;0.549906;, + -0.273835;-0.400153;0.874581;, + 0.233305;-0.886660;0.399253;, + 0.513833;-0.494239;0.701216;, + -0.790963;-0.525076;0.314122;, + 0.174039;-0.984266;0.030518;, + -0.591766;-0.268191;0.760188;, + -0.187456;-0.160792;0.969023;, + 0.000101;-0.114170;0.993461;, + 0.000002;0.058647;-0.998279;, + -0.131625;-0.050608;-0.990007;, + -0.731235;-0.158649;-0.663420;, + -0.974460;-0.127344;-0.184962;, + -0.859652;-0.309116;-0.406751;, + -0.916036;-0.145104;-0.373928;, + -0.817874;-0.539381;-0.200374;, + 0.278233;-0.273728;0.920684;, + 0.854774;-0.403493;0.326429;, + 0.853727;-0.007027;-0.520673;, + -0.977952;0.018441;0.208015;, + -0.951874;0.289606;0.100323;, + -0.979629;0.019166;-0.199899;, + -0.986179;0.140164;0.088351;, + -0.871225;-0.451441;0.192789;, + -0.529409;-0.220751;0.819143;, + -0.944779;0.327439;0.013305;, + -0.881035;0.426148;0.205365;, + -0.957604;-0.179816;-0.225078;, + -0.994196;0.051821;0.094280;, + -0.964421;0.191784;-0.181966;, + -0.980241;-0.139652;0.140090;, + 0.000023;-0.244851;-0.969561;, + -0.048245;-0.332029;-0.942035;, + -0.432334;-0.434648;-0.790043;, + -0.722354;-0.365988;-0.586734;, + -0.957758;-0.287242;0.013841;, + -0.000013;0.370748;-0.928733;, + -0.040453;0.710290;-0.702746;, + 0.313062;0.614710;0.723964;, + -0.460194;0.616751;0.638623;, + 0.000001;0.024616;-0.999697;, + -0.226499;-0.140193;-0.963869;, + -0.457101;-0.023022;-0.889117;, + -0.664851;0.117356;-0.737700;, + -0.897582;0.211412;-0.386848;, + -0.903847;0.420928;-0.076682;, + -0.135198;0.773486;0.619226;, + -0.141004;0.621292;0.770788;, + 0.124490;0.581568;0.803916;, + 0.000876;0.616105;0.787664;, + 0.387797;0.626448;0.676148;, + 0.149512;-0.247279;-0.957340;, + -0.905288;0.176534;0.386380;, + -0.867052;0.137579;0.478846;, + -0.829671;0.408671;0.380308;, + -0.701860;0.270507;0.658953;, + -0.892567;0.378889;-0.244475;, + 0.351384;0.936193;-0.008488;, + 0.237101;0.465138;0.852895;, + 0.221316;0.433286;0.873660;, + 0.000301;0.766126;0.642690;, + -0.037085;0.936295;-0.349251;, + 0.413738;0.852881;0.318456;, + 0.000002;0.301740;-0.953390;, + -0.138062;0.039474;-0.989637;, + -0.439435;0.173212;-0.881416;, + -0.632058;0.089542;-0.769730;, + -0.851652;0.387173;-0.353250;, + -0.886195;0.463152;-0.012222;, + 0.766299;0.388719;0.511550;, + -0.968326;0.059868;0.242406;, + -0.892378;0.166006;0.419647;, + -0.818963;0.564690;-0.102099;, + -0.830607;0.230508;0.506910;, + -0.758821;0.117889;0.640541;, + -0.044908;-0.611148;0.790241;, + -0.886549;0.392710;-0.244562;, + -0.899773;0.187812;0.393873;, + -0.898020;0.299543;-0.322233;, + -0.947696;-0.212901;-0.237792;, + -0.502434;-0.677413;0.537282;, + -0.291292;-0.349896;0.890349;, + -0.057118;-0.609638;0.790619;, + -0.987507;0.156917;-0.014374;, + -0.323785;0.508980;0.797560;, + -0.901688;0.259664;-0.345736;, + -0.805182;0.220087;-0.550676;, + -0.645712;-0.763581;-0.000279;, + 0.990082;-0.015546;-0.139630;, + 0.433214;-0.193877;-0.880192;, + 0.987185;0.081535;-0.137175;, + 0.990910;0.129582;-0.036136;, + 0.260508;0.727642;-0.634565;, + -0.091231;0.428920;0.898724;, + 0.811080;0.164853;0.561224;, + -0.559324;0.693597;0.453961;, + 0.100417;0.338390;0.935633;, + 0.649875;0.280683;0.706314;, + 0.338436;0.350327;-0.873346;, + 0.015042;-0.328899;-0.944245;, + 0.576566;-0.459455;-0.675627;, + 0.434273;0.868349;-0.239535;, + 0.306690;0.520580;0.796830;, + 0.164619;0.337297;-0.926893;, + 0.802913;0.231146;0.549456;, + -0.210733;-0.136750;0.967931;, + 0.336341;-0.108795;0.935435;, + -0.244564;-0.065106;0.967445;, + 0.963334;-0.094433;0.251137;, + 0.885448;-0.301099;-0.354007;, + 0.495937;0.082114;0.864467;, + 0.957644;0.220431;0.185280;, + -0.602846;0.290303;0.743169;, + -0.527840;-0.168309;0.832500;, + -0.026768;-0.438717;0.898227;, + 0.701248;-0.651828;-0.288742;, + 0.982279;-0.089104;-0.164890;, + 0.895650;-0.343271;-0.282799;, + 0.566570;0.495981;0.658028;, + 0.309521;0.783229;-0.539212;, + -0.114791;-0.948135;-0.296417;, + 0.145665;-0.919602;-0.364848;, + 0.481298;0.876550;-0.003471;, + 0.027647;-0.423868;0.905302;, + 0.705254;-0.446887;0.550372;, + 0.273873;-0.400246;0.874527;, + -0.233305;-0.886660;0.399253;, + -0.513833;-0.494239;0.701216;, + 0.790963;-0.525076;0.314122;, + -0.174039;-0.984266;0.030518;, + 0.591063;-0.270370;0.759963;, + 0.187382;-0.161599;0.968903;, + 0.131624;-0.050609;-0.990007;, + 0.731235;-0.158649;-0.663420;, + 0.974460;-0.127344;-0.184962;, + 0.859652;-0.309116;-0.406751;, + 0.916036;-0.145104;-0.373928;, + 0.817874;-0.539381;-0.200374;, + -0.278232;-0.273728;0.920684;, + -0.854773;-0.403493;0.326429;, + -0.853727;-0.007027;-0.520673;, + 0.972307;0.015440;0.233196;, + 0.956394;0.275771;0.096231;, + 0.981505;0.019792;-0.190410;, + 0.972924;0.196620;0.121487;, + 0.955178;-0.252865;0.153929;, + 0.506951;-0.238596;0.828295;, + 0.964289;0.264843;-0.002032;, + 0.916931;0.363083;0.165554;, + 0.987197;-0.118160;-0.107142;, + 0.774218;0.487454;0.403702;, + 0.963480;0.174780;-0.202875;, + 0.970183;-0.159926;0.182121;, + 0.048272;-0.332044;-0.942028;, + 0.430577;-0.435479;-0.790545;, + 0.722112;-0.366391;-0.586781;, + 0.957347;-0.288570;0.014659;, + -0.305307;0.626286;0.717324;, + 0.448693;0.679150;0.580886;, + 0.226504;-0.140193;-0.963868;, + 0.457101;-0.023022;-0.889117;, + 0.664851;0.117356;-0.737700;, + 0.897582;0.211412;-0.386848;, + 0.903847;0.420928;-0.076682;, + 0.135198;0.773486;0.619226;, + 0.122893;0.649057;0.750748;, + -0.142710;0.597235;0.789268;, + -0.439283;0.626634;0.643708;, + -0.149496;-0.247276;-0.957343;, + 0.905288;0.176534;0.386380;, + 0.867052;0.137579;0.478846;, + 0.829671;0.408671;0.380308;, + 0.701860;0.270507;0.658953;, + 0.892567;0.378889;-0.244475;, + -0.362258;0.932010;-0.011212;, + -0.188184;0.477638;0.858166;, + -0.167233;0.445019;0.879768;, + 0.042064;0.935662;-0.350382;, + -0.453111;0.835822;0.309986;, + 0.138068;0.039474;-0.989636;, + 0.439435;0.173212;-0.881416;, + 0.632058;0.089542;-0.769730;, + 0.851652;0.387173;-0.353250;, + 0.886195;0.463152;-0.012222;, + -0.740748;0.411825;0.530746;, + 0.968326;0.059868;0.242406;, + 0.892378;0.166006;0.419647;, + 0.818963;0.564690;-0.102099;, + 0.830607;0.230508;0.506910;, + 0.758821;0.117889;0.640541;, + 0.044907;-0.611148;0.790241;, + 0.886549;0.392710;-0.244561;, + 0.899773;0.187812;0.393873;, + 0.898020;0.299543;-0.322233;, + 0.947696;-0.212901;-0.237792;, + 0.502434;-0.677413;0.537282;, + 0.291292;-0.349896;0.890349;, + 0.057117;-0.609638;0.790619;, + 0.987507;0.156917;-0.014374;, + 0.323785;0.508980;0.797560;, + 0.901688;0.259664;-0.345736;, + 0.805182;0.220087;-0.550676;, + 0.645712;-0.763581;-0.000280;, + -0.000035;0.202257;-0.979333;, + 0.000000;-0.152057;-0.988372;, + -0.986678;0.148934;0.065464;, + -0.248728;-0.201732;-0.947332;, + -0.091949;-0.099791;0.990751;, + -0.000076;-0.461661;-0.887057;, + 0.675377;-0.238040;0.698000;, + -0.372066;0.352850;-0.858524;, + -0.920508;0.371208;0.121944;, + 0.954651;-0.166315;-0.246941;, + -0.770854;-0.091830;-0.630358;, + -0.522907;0.552336;0.649225;, + -0.269360;-0.762341;0.588456;, + -0.705008;-0.050622;-0.707390;, + -0.421748;0.283560;-0.861233;, + 0.643644;-0.015506;0.765168;, + 0.992661;-0.000187;-0.120932;, + 0.935445;-0.035033;-0.351732;, + -0.263483;-0.085234;0.960891;, + -0.344264;0.023341;0.938583;, + 0.887402;-0.082890;-0.453484;, + -0.649836;0.205407;-0.731793;, + -0.872109;0.095397;-0.479922;, + -0.894885;0.082610;0.438584;, + -0.554738;0.084178;-0.827756;, + 0.054057;-0.076987;-0.995566;, + -0.908432;0.107750;-0.403908;, + 0.495001;-0.126597;0.859620;, + 0.968704;-0.213268;-0.126998;, + 0.313056;0.378120;0.871219;, + 0.365426;-0.280297;0.887636;, + 0.067345;-0.084014;-0.994186;, + -0.012682;-0.010483;0.999865;, + 0.064836;-0.191491;-0.979351;, + -0.289534;0.030294;-0.956688;, + -0.200942;0.148449;0.968290;, + 0.020471;-0.061478;-0.997899;, + -0.400237;0.683181;0.610798;, + 0.453303;-0.497746;0.739435;, + 0.521055;-0.809078;0.271835;, + 0.735182;-0.666684;0.122637;, + 0.821914;-0.569537;-0.009215;, + 0.759558;-0.443873;-0.475446;, + -0.572197;-0.246884;0.782073;, + -0.565959;-0.798793;0.204013;, + -0.757874;-0.650275;-0.052618;, + -0.707861;-0.682627;-0.181530;, + -0.657196;-0.390140;-0.644891;, + 0.215407;0.452689;0.865259;, + 0.845085;0.295788;0.445355;, + 0.869444;0.325743;0.371427;, + 0.954242;-0.257523;0.152001;, + -0.520474;0.526586;0.672171;, + -0.936897;0.300664;0.178397;, + -0.940651;0.338859;-0.018731;, + -0.960352;-0.063982;-0.271348;, + 0.059122;-0.098574;-0.993372;, + 0.798460;-0.602012;-0.006594;, + -0.809310;-0.499093;-0.309716;, + 0.179068;-0.150961;-0.972186;, + -0.113992;0.003257;-0.993476;, + -0.245507;-0.085870;-0.965584;, + 0.381448;-0.090026;0.919996;, + -0.473877;0.315534;0.822119;, + 0.834619;-0.338308;0.434694;, + 0.968707;-0.002938;-0.248189;, + -0.984728;-0.003402;0.174069;, + 0.518085;0.053826;-0.853634;, + -0.717724;0.062444;-0.693523;, + -0.172176;-0.025937;-0.984725;, + 0.990528;-0.094784;-0.099347;, + 0.716933;-0.028565;-0.696556;, + -0.638618;0.047039;-0.768085;, + 0.860708;-0.108316;0.497444;, + -0.837234;0.055243;0.544046;, + 0.955485;-0.120740;-0.269203;, + -0.670236;0.022528;-0.741806;, + -0.945620;0.026607;-0.324184;, + -0.472020;0.096403;0.876301;, + 0.537901;-0.058446;-0.840980;, + -0.381353;0.920775;0.082119;, + 0.682106;-0.030649;0.730611;, + -0.557613;-0.562556;0.610408;, + 0.846805;0.072950;-0.526877;, + 0.049962;-0.004893;-0.998739;, + 0.666223;-0.143179;0.731879;, + -0.861291;-0.041597;-0.506406;, + 0.034482;-0.052609;-0.998020;, + 0.068707;0.488169;-0.870040;, + 0.007891;-0.135395;-0.990760;, + -0.145988;-0.211055;-0.966511;, + -0.279880;-0.147467;0.948641;, + -0.762165;0.039662;0.646167;, + 0.389810;-0.013375;0.920798;, + 0.757187;-0.049995;0.651282;, + 0.181561;-0.108135;0.977416;, + -0.887763;0.274320;0.369629;, + -0.354476;-0.066564;0.932693;, + -0.705742;-0.122863;0.697734;, + -0.804425;-0.481755;0.347580;, + -0.911357;-0.405828;0.068791;, + -0.868967;-0.391802;-0.302304;, + -0.955392;-0.286491;-0.071754;, + -0.212265;-0.554761;-0.804478;, + -0.300497;-0.671647;-0.677194;, + 0.566503;-0.333624;0.753505;, + 0.705192;-0.523353;0.478336;, + 0.734833;-0.590132;0.334314;, + 0.703206;-0.672001;-0.232197;, + 0.353830;-0.592859;-0.723410;, + 0.909177;-0.368835;-0.193282;, + 0.738914;-0.651028;0.173689;, + 0.318223;-0.742396;-0.589561;, + 0.039464;-0.745272;-0.665591;, + -0.507519;-0.687744;-0.519069;, + 0.143708;-0.090742;0.985451;, + -0.325692;0.036226;0.944782;, + -0.642110;-0.406225;0.650135;, + -0.726668;-0.619543;0.296850;, + -0.754218;-0.609442;0.244407;, + -0.480671;-0.816061;-0.320936;, + -0.438781;-0.895636;-0.072854;, + -0.216241;-0.550378;-0.806427;, + -0.375817;-0.659247;-0.651272;, + 0.524041;-0.621420;0.582424;, + 0.478543;-0.696415;0.534792;, + 0.479492;-0.729402;0.487915;, + 0.552158;-0.818101;-0.160724;, + 0.216081;-0.555173;-0.803176;, + 0.390037;-0.917415;-0.078869;, + 0.462565;-0.763825;0.450117;, + 0.298517;-0.762623;-0.573840;, + 0.099219;-0.723576;-0.683077;, + -0.363985;-0.781659;-0.506482;, + -0.687634;-0.340006;-0.641526;, + -0.554595;-0.700435;0.449238;, + 0.007793;-0.618390;0.785832;, + -0.700055;-0.676002;-0.230094;, + 0.152980;0.089858;-0.984136;, + 0.639689;-0.061333;0.766183;, + -0.671801;-0.148929;-0.725605;, + 0.982818;-0.144272;-0.115132;, + -0.539943;-0.790977;-0.287777;, + -0.425702;-0.452816;-0.783413;, + -0.120435;0.764300;-0.633515;, + 0.634155;0.239730;0.735103;, + 0.100998;-0.684788;0.721710;, + -0.373807;-0.009779;-0.927455;, + -0.400118;0.694772;0.597660;, + -0.642458;0.753052;0.141985;, + 0.220397;-0.805586;0.549959;, + 0.474612;-0.157723;0.865949;, + 0.286302;-0.330049;-0.899499;, + 0.364402;-0.047676;0.930020;, + -0.153579;-0.916119;-0.370324;, + -0.360583;-0.309427;-0.879906;, + 0.603621;-0.355989;0.713382;, + -0.339341;-0.048326;0.939421;, + -0.969969;-0.035649;-0.240603;, + -0.299431;-0.946414;-0.120998;, + 0.164304;-0.789581;0.591242;, + -0.678182;-0.699706;-0.224678;, + -0.069164;-0.822330;0.564792;, + -0.245535;-0.396112;-0.884764;, + -0.891450;-0.383892;-0.240717;, + 0.072762;-0.780842;0.620477;, + -0.595632;-0.621882;0.508414;, + -0.752466;-0.638225;0.162674;, + -0.299599;-0.795145;0.527243;, + -0.000137;-0.920182;0.391491;, + -0.114339;0.740537;0.662217;, + -0.673865;0.641908;0.365869;, + 0.368870;0.664338;0.650069;, + -0.929837;0.223510;-0.292314;, + 0.987497;0.100828;0.121175;, + -0.037200;-0.353239;-0.934793;, + 0.000005;-0.908853;-0.417117;, + -0.275159;-0.572461;0.772383;, + 1.000000;0.000000;0.000000;, + -0.311030;-0.795975;-0.519312;, + -0.790481;-0.221084;-0.571194;, + -0.264462;-0.862138;0.432178;, + -0.597714;-0.523944;0.606812;, + -0.550598;-0.834581;0.017782;, + -0.162744;0.615741;0.770959;, + -0.877145;-0.439089;0.194469;, + -0.415729;0.666519;0.618807;, + -0.278425;0.851658;-0.444026;, + -0.537797;0.842499;0.031136;, + 0.000014;0.999890;-0.014824;, + -0.000345;0.842160;-0.539228;, + -0.136592;-0.525506;-0.839754;, + 0.000010;-0.577151;-0.816638;, + -0.226785;-0.723353;0.652173;, + 0.000147;-0.426759;0.904366;, + -0.312156;-0.802806;-0.507998;, + -0.702614;-0.504599;-0.501711;, + -0.270629;-0.843099;0.464697;, + -0.618679;-0.620211;0.482259;, + -0.545698;-0.837393;0.031400;, + -0.530614;0.817949;0.222282;, + -0.520441;-0.817752;0.245812;, + 0.000135;0.503934;0.863742;, + 0.000081;-0.865374;0.501127;, + -0.494858;0.862986;0.101841;, + -0.877073;-0.347968;0.331150;, + -0.848954;-0.000633;0.528467;, + -0.435124;-0.365516;0.822840;, + -0.171310;-0.101103;0.980016;, + -0.280330;-0.874167;0.396545;, + -0.857649;-0.059936;0.510730;, + -0.851056;-0.296513;0.433340;, + -0.292987;0.538921;-0.789761;, + -0.385669;0.149737;-0.910405;, + -0.498102;0.070627;0.864237;, + 0.072329;0.379525;-0.922350;, + 0.076379;0.219461;-0.972627;, + 0.202960;-0.006085;-0.979168;, + 0.224477;-0.161615;-0.960984;, + 0.287531;-0.313110;-0.905145;, + 0.508736;-0.187881;-0.840171;, + -0.692298;0.454233;-0.560710;, + -0.793609;0.199236;-0.574882;, + 0.696581;-0.112033;-0.708677;, + 0.671521;-0.145121;-0.726636;, + 0.672596;-0.215313;-0.707993;, + -0.558239;-0.020619;-0.829424;, + -0.534769;-0.089005;-0.840298;, + -0.513705;-0.196613;-0.835135;, + -0.349154;0.242462;0.905154;, + -0.631346;0.402228;0.663035;, + -0.146145;-0.055401;0.987711;, + -0.321667;0.474266;0.819514;, + -0.592931;-0.025934;0.804835;, + 0.232003;0.000577;0.972715;, + 0.340346;0.050732;-0.938931;, + -0.044769;0.183553;-0.981990;, + 0.908812;-0.397053;0.128099;, + 0.918662;-0.341700;0.198244;, + 0.938847;-0.129908;-0.318889;, + -0.995822;0.066694;-0.062372;, + -0.913711;-0.184581;0.362025;, + -0.773515;-0.042525;0.632350;, + 0.562379;0.010758;-0.826809;, + -0.346217;0.118076;-0.930694;, + -0.716207;0.131762;-0.685336;, + 0.723032;0.009740;0.690746;, + 0.936260;-0.073710;0.343489;, + -0.899016;0.099518;-0.426458;, + 0.016111;-0.054691;0.998373;, + 0.652732;-0.056214;0.755500;, + -0.677075;0.091018;0.730264;, + -0.550517;-0.135376;0.823775;, + -0.748083;0.060359;-0.660855;, + -0.891510;0.146220;-0.428753;, + -0.200461;-0.141215;-0.969471;, + 0.229795;-0.207572;-0.950846;, + 0.832397;-0.148190;-0.534000;, + 0.583371;-0.208319;-0.785036;, + 0.980272;0.130639;0.148327;, + 0.965909;-0.084351;-0.244754;, + 0.951984;0.131127;0.276644;, + -0.935643;0.156818;0.316197;, + -0.559482;-0.050274;-0.827317;, + -0.972281;0.214777;-0.092415;, + -0.532795;-0.071842;0.843189;, + -0.476940;-0.083345;0.874975;, + 0.274845;-0.070215;-0.958921;, + 0.028471;-0.057604;-0.997933;, + 0.574856;-0.080803;-0.814255;, + 0.144145;-0.089235;0.985525;, + 0.827608;-0.099104;0.552489;, + -0.876485;-0.009071;0.481344;, + -0.995610;0.037774;-0.085641;, + -0.905860;0.032618;-0.422319;, + -0.808523;0.001652;-0.588462;, + 0.845060;-0.044480;-0.532817;, + 0.979465;-0.039533;-0.197703;, + 0.956895;-0.080204;0.279139;, + -0.691297;-0.047071;-0.721036;, + -0.412896;-0.055933;-0.909059;, + 0.999321;0.028755;-0.023042;, + 0.912214;-0.035085;-0.408209;, + 0.563445;-0.089914;-0.821246;, + -0.351468;0.039937;-0.935348;, + 0.956673;-0.049558;0.286915;, + 0.269123;0.056572;0.961443;, + 0.740501;-0.038151;0.670971;, + -0.562631;0.056481;0.824776;, + -0.925797;0.040436;0.375851;, + -0.315953;0.018351;0.948597;, + 0.056900;0.108101;-0.992510;, + 0.090328;-0.066382;-0.993697;, + 0.226044;-0.018716;0.973937;, + -0.906954;0.117975;-0.404371;, + 0.992970;-0.002293;0.118346;, + 0.263526;0.009804;0.964602;, + 0.960000;-0.111524;0.256830;, + 0.046754;-0.041359;-0.998050;, + 0.975814;-0.094575;0.197085;, + 0.713467;-0.239290;-0.658563;, + 0.796247;0.046297;0.603198;, + -0.000011;0.371222;-0.928544;, + -0.000042;-0.118764;-0.992922;, + 0.045742;0.462090;-0.885653;, + 0.986678;0.148934;0.065464;, + 0.248728;-0.201732;-0.947332;, + 0.091949;-0.099791;0.990751;, + -0.675428;-0.237979;0.697971;, + 0.372066;0.352850;-0.858524;, + 0.920508;0.371208;0.121944;, + -0.954652;-0.166280;-0.246961;, + 0.770854;-0.091830;-0.630359;, + 0.522907;0.552336;0.649225;, + 0.705008;-0.050621;-0.707390;, + 0.421748;0.283560;-0.861233;, + -0.643644;-0.015506;0.765168;, + -0.992661;-0.000187;-0.120933;, + -0.935445;-0.035034;-0.351733;, + 0.263483;-0.085234;0.960891;, + 0.344265;0.023340;0.938582;, + -0.887402;-0.082890;-0.453483;, + 0.649836;0.205407;-0.731793;, + 0.872109;0.095396;-0.479922;, + 0.894885;0.082610;0.438585;, + 0.554737;0.084178;-0.827756;, + -0.054057;-0.076987;-0.995566;, + 0.908432;0.107750;-0.403908;, + -0.495001;-0.126597;0.859620;, + -0.968704;-0.213269;-0.126998;, + -0.313056;0.378120;0.871218;, + -0.365426;-0.280297;0.887636;, + -0.067345;-0.084014;-0.994186;, + 0.012681;-0.010483;0.999865;, + -0.064836;-0.191491;-0.979351;, + 0.289534;0.030294;-0.956688;, + 0.200942;0.148449;0.968290;, + -0.020470;-0.061480;-0.997898;, + 0.400237;0.683181;0.610797;, + -0.453304;-0.497746;0.739435;, + -0.521055;-0.809078;0.271836;, + -0.735182;-0.666684;0.122637;, + -0.821914;-0.569537;-0.009216;, + -0.759558;-0.443871;-0.475447;, + 0.572196;-0.246884;0.782074;, + 0.565958;-0.798793;0.204014;, + 0.757874;-0.650275;-0.052618;, + 0.707861;-0.682627;-0.181531;, + 0.657196;-0.390140;-0.644891;, + -0.215408;0.452689;0.865258;, + -0.845086;0.295787;0.445354;, + -0.869444;0.325743;0.371427;, + -0.954242;-0.257523;0.152001;, + 0.520473;0.526586;0.672172;, + 0.936897;0.300664;0.178397;, + 0.940651;0.338859;-0.018732;, + 0.960352;-0.063982;-0.271348;, + -0.059122;-0.098573;-0.993372;, + -0.798459;-0.602012;-0.006595;, + 0.809310;-0.499092;-0.309716;, + -0.179068;-0.150961;-0.972186;, + 0.113992;0.003257;-0.993476;, + 0.245507;-0.085870;-0.965584;, + -0.381448;-0.090025;0.919996;, + 0.473877;0.315534;0.822118;, + -0.834619;-0.338308;0.434694;, + -0.968707;-0.002938;-0.248190;, + 0.984728;-0.003402;0.174069;, + -0.518085;0.053827;-0.853634;, + 0.717724;0.062444;-0.693523;, + 0.172176;-0.025937;-0.984725;, + -0.990528;-0.094784;-0.099347;, + -0.716933;-0.028565;-0.696556;, + 0.638618;0.047039;-0.768085;, + -0.860708;-0.108316;0.497444;, + 0.837234;0.055243;0.544047;, + -0.955485;-0.120740;-0.269203;, + 0.670236;0.022528;-0.741806;, + 0.945620;0.026607;-0.324184;, + 0.472020;0.096403;0.876301;, + -0.537901;-0.058446;-0.840980;, + 0.381356;0.920774;0.082120;, + -0.682106;-0.030649;0.730611;, + 0.557614;-0.562555;0.610409;, + -0.846805;0.072950;-0.526877;, + -0.049962;-0.004893;-0.998739;, + -0.666223;-0.143179;0.731879;, + 0.861291;-0.041597;-0.506406;, + -0.034481;-0.052611;-0.998020;, + -0.068707;0.488169;-0.870040;, + -0.007891;-0.135398;-0.990760;, + 0.145989;-0.211055;-0.966511;, + 0.279880;-0.147467;0.948642;, + 0.762165;0.039663;0.646167;, + -0.389810;-0.013375;0.920798;, + -0.757187;-0.049996;0.651282;, + -0.181560;-0.108135;0.977416;, + 0.887763;0.274319;0.369629;, + 0.354475;-0.066564;0.932693;, + 0.705738;-0.122868;0.697737;, + 0.804429;-0.481751;0.347578;, + 0.911362;-0.405818;0.068789;, + 0.868969;-0.391799;-0.302303;, + 0.955392;-0.286490;-0.071755;, + 0.212267;-0.554751;-0.804484;, + 0.300504;-0.671641;-0.677197;, + -0.566507;-0.333623;0.753502;, + -0.705199;-0.523347;0.478333;, + -0.734835;-0.590129;0.334313;, + -0.703206;-0.672002;-0.232196;, + -0.353826;-0.592860;-0.723412;, + -0.909176;-0.368837;-0.193284;, + -0.738915;-0.651028;0.173686;, + -0.318224;-0.742397;-0.589560;, + -0.039462;-0.745268;-0.665596;, + 0.507518;-0.687743;-0.519071;, + -0.143709;-0.090742;0.985451;, + 0.325692;0.036224;0.944782;, + 0.642109;-0.406228;0.650135;, + 0.726679;-0.619532;0.296847;, + 0.754223;-0.609436;0.244406;, + 0.480673;-0.816061;-0.320933;, + 0.438780;-0.895636;-0.072859;, + 0.216240;-0.550371;-0.806432;, + 0.375822;-0.659238;-0.651277;, + -0.524041;-0.621421;0.582424;, + -0.478550;-0.696413;0.534789;, + -0.479503;-0.729395;0.487914;, + -0.552157;-0.818101;-0.160725;, + -0.216079;-0.555173;-0.803177;, + -0.390036;-0.917416;-0.078869;, + -0.462568;-0.763826;0.450113;, + -0.298518;-0.762626;-0.573837;, + -0.099215;-0.723576;-0.683077;, + 0.363989;-0.781657;-0.506483;, + 0.687634;-0.340007;-0.641526;, + 0.554595;-0.700435;0.449238;, + -0.007792;-0.618390;0.785833;, + 0.700058;-0.676000;-0.230095;, + -0.152979;0.089859;-0.984136;, + -0.639690;-0.061333;0.766182;, + 0.671802;-0.148929;-0.725605;, + -0.982818;-0.144272;-0.115132;, + 0.539944;-0.790977;-0.287776;, + 0.425700;-0.452817;-0.783413;, + 0.120436;0.764300;-0.633515;, + -0.634158;0.239730;0.735101;, + -0.100997;-0.684786;0.721711;, + 0.373807;-0.009780;-0.927455;, + 0.400118;0.694773;0.597659;, + 0.642459;0.753051;0.141986;, + -0.220398;-0.805586;0.549960;, + -0.474612;-0.157723;0.865949;, + -0.286301;-0.330049;-0.899500;, + -0.364402;-0.047676;0.930020;, + 0.153577;-0.916119;-0.370323;, + 0.360580;-0.309427;-0.879907;, + -0.603625;-0.355989;0.713378;, + 0.339341;-0.048326;0.939421;, + 0.969969;-0.035649;-0.240603;, + 0.299429;-0.946415;-0.121000;, + -0.164303;-0.789579;0.591244;, + 0.678182;-0.699706;-0.224678;, + 0.069165;-0.822329;0.564792;, + 0.245531;-0.396115;-0.884764;, + 0.891451;-0.383891;-0.240714;, + -0.072761;-0.780841;0.620478;, + 0.595631;-0.621884;0.508413;, + 0.752462;-0.638231;0.162672;, + 0.299598;-0.795145;0.527243;, + 0.114341;0.740537;0.662217;, + 0.673864;0.641909;0.365870;, + -0.368870;0.664338;0.650069;, + 0.929837;0.223510;-0.292314;, + -0.987497;0.100827;0.121175;, + 0.037200;-0.353240;-0.934793;, + 0.275160;-0.572458;0.772385;, + 0.311029;-0.795977;-0.519309;, + 0.790480;-0.221084;-0.571194;, + 0.264462;-0.862137;0.432180;, + 0.597714;-0.523943;0.606812;, + 0.550599;-0.834580;0.017784;, + 0.162598;0.616218;0.770608;, + 0.877144;-0.439088;0.194473;, + 0.415142;0.667643;0.617989;, + 0.286302;0.846489;-0.448874;, + 0.557573;0.829476;0.032896;, + 0.136611;-0.525509;-0.839749;, + 0.226786;-0.723350;0.652175;, + 0.312154;-0.802808;-0.507996;, + 0.702613;-0.504600;-0.501711;, + 0.270630;-0.843098;0.464698;, + 0.618680;-0.620209;0.482260;, + 0.545698;-0.837393;0.031400;, + 0.530646;0.817913;0.222337;, + 0.520501;-0.817725;0.245773;, + 0.494932;0.862948;0.101798;, + 0.877148;-0.347914;0.331008;, + 0.848954;-0.000633;0.528467;, + 0.435262;-0.365357;0.822837;, + 0.857736;-0.059938;0.510585;, + 0.851169;-0.296328;0.433244;, + 0.292987;0.538920;-0.789761;, + 0.385669;0.149737;-0.910405;, + 0.498102;0.070626;0.864237;, + -0.072353;0.379524;-0.922348;, + -0.076406;0.219458;-0.972625;, + -0.203011;-0.006085;-0.979158;, + -0.224521;-0.161613;-0.960974;, + -0.287588;-0.313105;-0.905129;, + -0.508756;-0.187868;-0.840163;, + 0.692298;0.454233;-0.560710;, + 0.793609;0.199236;-0.574882;, + -0.696581;-0.112033;-0.708677;, + -0.671520;-0.145121;-0.726636;, + -0.672596;-0.215313;-0.707993;, + 0.558239;-0.020619;-0.829424;, + 0.534769;-0.089005;-0.840298;, + 0.513705;-0.196613;-0.835135;, + 0.349154;0.242462;0.905154;, + 0.631346;0.402228;0.663035;, + 0.146145;-0.055401;0.987711;, + 0.321667;0.474265;0.819514;, + 0.592932;-0.025934;0.804835;, + -0.232003;0.000577;0.972715;, + -0.340346;0.050732;-0.938931;, + 0.044769;0.183553;-0.981990;, + -0.908812;-0.397053;0.128100;, + -0.918662;-0.341700;0.198244;, + -0.938847;-0.129909;-0.318890;, + 0.995822;0.066694;-0.062372;, + 0.913711;-0.184581;0.362025;, + 0.773514;-0.042525;0.632351;, + -0.562379;0.010758;-0.826810;, + 0.346217;0.118076;-0.930694;, + 0.716207;0.131762;-0.685337;, + -0.723032;0.009739;0.690746;, + -0.936259;-0.073710;0.343490;, + 0.899016;0.099517;-0.426458;, + -0.016111;-0.054691;0.998373;, + -0.652733;-0.056213;0.755500;, + 0.677075;0.091018;0.730264;, + 0.550517;-0.135376;0.823775;, + 0.748083;0.060359;-0.660855;, + 0.891510;0.146220;-0.428753;, + 0.200461;-0.141215;-0.969471;, + -0.229795;-0.207571;-0.950846;, + -0.832396;-0.148190;-0.534000;, + -0.583371;-0.208318;-0.785036;, + -0.980272;0.130639;0.148328;, + -0.965909;-0.084351;-0.244754;, + -0.951984;0.131127;0.276643;, + 0.935643;0.156818;0.316197;, + 0.559482;-0.050274;-0.827317;, + 0.972281;0.214776;-0.092415;, + 0.532795;-0.071842;0.843189;, + 0.476940;-0.083345;0.874975;, + -0.274846;-0.070215;-0.958921;, + -0.028471;-0.057604;-0.997933;, + -0.574856;-0.080803;-0.814255;, + -0.144145;-0.089235;0.985525;, + -0.827608;-0.099104;0.552489;, + 0.876485;-0.009071;0.481343;, + 0.995610;0.037774;-0.085641;, + 0.905860;0.032618;-0.422319;, + 0.808523;0.001652;-0.588462;, + -0.845060;-0.044480;-0.532817;, + -0.979465;-0.039533;-0.197703;, + -0.956895;-0.080204;0.279139;, + 0.691297;-0.047071;-0.721036;, + 0.412896;-0.055933;-0.909059;, + -0.999321;0.028755;-0.023042;, + -0.912214;-0.035085;-0.408209;, + -0.563445;-0.089914;-0.821246;, + 0.351468;0.039937;-0.935348;, + -0.956673;-0.049558;0.286915;, + -0.269123;0.056572;0.961443;, + -0.740501;-0.038151;0.670971;, + 0.562631;0.056481;0.824777;, + 0.925797;0.040436;0.375851;, + 0.315953;0.018351;0.948597;, + -0.056900;0.108101;-0.992510;, + -0.090328;-0.066382;-0.993697;, + -0.226043;-0.018716;0.973937;, + 0.906954;0.117975;-0.404371;, + -0.992970;-0.002293;0.118346;, + -0.263526;0.009803;0.964602;, + -0.960000;-0.111524;0.256830;, + -0.046754;-0.041359;-0.998050;, + -0.975831;-0.094528;0.197025;, + -0.713467;-0.239291;-0.658563;, + -0.796247;0.046297;0.603198;, + -0.045755;0.462090;-0.885652;, + -0.120567;0.889102;0.441544;, + 0.089110;0.886500;0.454068;, + 0.495887;0.107622;-0.861692;, + -0.501661;0.110800;-0.857939;, + 0.381150;0.923821;0.035779;, + -0.392218;0.560751;0.729194;, + 0.186388;0.976894;0.104581;, + 0.567905;0.521114;-0.637122;, + -0.473718;0.414055;-0.777271;, + 0.529914;-0.324726;-0.783418;, + -0.226517;-0.970474;0.082885;, + 0.207701;-0.604118;-0.769351;, + -0.527039;0.781296;-0.334374;, + -0.834983;0.264476;-0.482552;, + -0.675963;0.077412;-0.732858;, + -0.160126;0.190092;-0.968620;, + -0.228376;-0.127237;-0.965223;, + 0.068168;0.237165;0.969075;, + 0.657416;-0.744773;-0.114531;, + 0.274099;0.701037;-0.658344;, + -0.876642;-0.442049;-0.189978;, + 0.779259;0.312381;0.543299;, + -0.327724;-0.696016;0.638873;, + 0.594374;0.647132;0.477430;, + 0.984981;0.135781;-0.106662;, + -0.422834;0.836078;-0.349551;, + -0.828790;0.540637;-0.144288;, + 0.034244;0.095893;-0.994802;, + -0.641365;-0.305210;-0.703916;, + -0.923773;-0.052793;0.379284;, + 0.076548;0.939750;-0.333181;, + 0.119540;-0.960477;0.251383;, + -0.669596;-0.615981;-0.414980;, + -0.303029;-0.186091;0.934635;, + -0.234676;0.256475;0.937629;, + 0.295362;0.740439;0.603748;, + -0.353633;-0.752104;0.556133;, + -0.520041;-0.156983;0.839592;, + 0.509538;-0.839165;-0.190193;, + -0.146089;-0.981553;0.123336;, + 0.914801;0.309243;0.259824;, + 0.897041;0.033289;-0.440692;, + -0.839542;-0.269781;-0.471581;, + -0.963227;0.157435;-0.217736;, + -0.259132;0.699308;-0.666197;, + 0.604434;0.762690;0.230139;, + 0.423330;0.778916;0.462689;, + -0.434554;0.075723;0.897457;, + 0.006566;0.677354;0.735628;, + 0.749936;0.407739;-0.520908;, + 0.822491;0.188949;-0.536477;, + 0.756906;-0.145054;-0.637223;, + 0.423190;-0.716621;-0.554404;, + -0.227209;-0.966292;0.121064;, + -0.317550;-0.933835;0.164662;, + -0.496371;-0.182434;0.848725;, + -0.533776;-0.178235;0.826629;, + -0.604641;-0.410889;0.682334;, + -0.097373;-0.993304;-0.062171;, + 0.544150;0.817947;0.186717;, + 0.671652;0.718204;-0.181845;, + -0.520633;-0.800173;0.297766;, + 0.610984;0.085141;-0.787051;, + 0.315955;0.940947;0.121620;, + 0.450770;-0.364624;-0.814773;, + 0.034059;-0.236374;-0.971065;, + 0.126855;0.710394;-0.692277;, + -0.318398;0.686232;0.653995;, + -0.509804;-0.823253;0.249710;, + -0.828231;-0.560343;0.007058;, + -0.898012;0.382182;0.217971;, + -0.638411;-0.335141;0.692901;, + -0.521920;-0.736948;0.429543;, + -0.653621;0.114522;0.748107;, + -0.219228;-0.910600;-0.350351;, + -0.117938;0.862199;0.492649;, + 0.701914;0.653797;-0.282606;, + 0.566939;-0.044140;-0.822576;, + 0.698404;-0.196958;-0.688069;, + 0.634338;-0.406257;-0.657701;, + 0.726870;-0.133185;-0.673737;, + 0.790864;0.239727;-0.563086;, + 0.657555;0.711316;-0.248296;, + -0.154310;0.679156;0.717590;, + 0.231918;0.882106;0.410004;, + -0.412377;-0.755835;0.508585;, + -0.140943;-0.970084;0.197668;, + 0.311225;-0.875510;-0.369624;, + 0.597394;0.775849;-0.202927;, + -0.489055;-0.692585;0.530237;, + -0.491338;-0.534968;0.687311;, + -0.489758;-0.036774;0.871083;, + -0.438815;0.143442;0.887054;, + -0.286418;0.500490;0.816991;, + 0.627373;0.683168;-0.373745;, + 0.326963;0.774904;-0.540942;, + -0.154464;0.954555;0.254884;, + 0.414311;0.073885;-0.907131;, + 0.104101;0.966242;0.235666;, + 0.755011;0.321454;-0.571512;, + -0.578072;-0.401336;0.710466;, + 0.308722;0.426939;-0.849949;, + -0.156866;-0.502085;-0.850473;, + -0.244364;0.495312;-0.833638;, + -0.891274;-0.244321;-0.382017;, + -0.886836;0.434833;0.156336;, + 0.396048;-0.852920;0.340107;, + 0.958459;-0.005318;0.285179;, + -0.727155;-0.559204;0.398166;, + 0.313446;0.294967;0.902633;, + 0.568943;-0.193580;-0.799269;, + 0.540259;0.790932;-0.287309;, + -0.190782;-0.966119;-0.173828;, + 0.699601;0.319552;-0.639097;, + -0.461959;-0.866725;0.188099;, + -0.593538;-0.430185;0.680187;, + -0.129662;-0.954140;0.269823;, + 0.507759;-0.548313;-0.664480;, + -0.102172;0.911919;0.397447;, + 0.280146;-0.794859;0.538254;, + -0.896153;0.443634;0.009920;, + 0.604915;0.795184;0.041942;, + -0.370304;-0.909123;-0.190710;, + -0.469045;0.851012;0.236169;, + 0.715283;-0.213463;0.665435;, + 0.725324;-0.198324;0.659221;, + 0.906461;0.267020;-0.327153;, + 0.730965;-0.293094;0.616268;, + 0.426783;0.803078;-0.415839;, + 0.656180;0.614047;-0.438605;, + 0.414340;0.787894;0.455572;, + 0.387641;0.909810;0.148256;, + 0.067928;-0.995530;0.065615;, + -0.546062;-0.385173;0.743947;, + 0.023950;-0.995082;0.096118;, + -0.517968;-0.562667;0.644294;, + -0.214003;-0.959327;0.184103;, + 0.088411;-0.867050;-0.490314;, + -0.168195;-0.803638;0.570856;, + -0.761202;-0.602561;0.239776;, + -0.362576;0.544444;0.756386;, + -0.135361;-0.825017;0.548656;, + -0.403113;-0.761478;0.507594;, + -0.205138;-0.005818;0.978716;, + 0.500952;0.279713;0.819029;, + 0.826841;-0.523263;-0.206226;, + -0.600234;-0.799045;0.035307;, + -0.970404;-0.229202;0.076040;, + 0.780352;-0.359300;-0.511814;, + -0.914460;-0.230698;0.332477;, + -0.502437;0.667098;0.550034;, + 0.719999;0.682490;-0.125735;, + -0.268806;-0.896766;-0.351502;, + 0.915472;-0.398064;-0.058788;, + -0.888214;-0.136248;0.438762;, + -0.506181;0.569758;0.647422;, + 0.756777;0.576678;0.307785;, + -0.129004;-0.984436;0.119344;, + 0.777616;-0.116615;0.617830;, + -0.770465;-0.143678;0.621080;, + -0.343908;0.401841;0.848676;, + 0.264638;0.646667;0.715394;, + 0.216767;-0.499110;0.838989;, + 0.807418;0.487228;-0.332693;, + 0.374558;0.861007;0.344055;, + 0.808068;0.254617;-0.531221;, + 0.818120;0.339082;-0.464439;, + 0.221900;0.974980;0.013185;, + -0.108706;-0.976161;0.187863;, + -0.368776;-0.455644;0.810181;, + 0.538295;-0.631424;-0.558159;, + 0.867721;0.146537;-0.474959;, + 0.452458;0.832414;0.319950;, + -0.257983;0.544602;0.798031;, + -0.597196;-0.209677;0.774204;, + -0.171970;-0.985088;-0.005321;, + 0.456380;-0.580050;-0.674729;, + 0.769932;0.170761;-0.614854;, + 0.382238;0.901984;0.200798;, + -0.276717;0.544754;0.791625;, + -0.379263;-0.183823;0.906845;, + -0.068508;-0.994742;0.076127;, + 0.314063;-0.536259;-0.783448;, + 0.579129;0.233663;-0.781032;, + 0.240758;0.970584;-0.001211;, + -0.464359;0.605477;0.646350;, + -0.699843;-0.168934;0.694032;, + -0.205561;-0.977861;-0.039144;, + 0.329202;-0.554979;-0.763953;, + 0.738986;0.202412;-0.642596;, + 0.334240;0.935996;0.110429;, + -0.470908;0.619311;0.628251;, + -0.896664;-0.131474;0.422738;, + -0.491550;-0.803875;-0.334908;, + 0.488072;-0.623641;-0.610621;, + 0.885331;0.131251;-0.446051;, + 0.509708;0.786985;0.347638;, + -0.242430;0.521770;0.817914;, + -0.613783;-0.209259;0.761236;, + -0.262272;-0.961626;-0.080548;, + 0.450906;-0.603711;-0.657432;, + 0.828994;0.160795;-0.535644;, + 0.441803;0.858053;0.261828;, + -0.339070;0.554869;0.759705;, + -0.677756;-0.206419;0.705719;, + -0.259052;-0.964613;-0.049126;, + 0.229922;-0.482476;-0.845194;, + 0.778129;0.185891;-0.599966;, + 0.358173;0.924866;0.127809;, + -0.560979;0.636505;0.529305;, + -0.921070;-0.106291;0.374610;, + -0.585179;-0.715104;-0.382351;, + 0.327893;-0.527492;-0.783734;, + 0.868350;0.160550;-0.469245;, + 0.532377;0.790350;0.303185;, + -0.480825;0.612885;0.627040;, + -0.898116;-0.162902;0.408473;, + -0.523134;-0.798786;-0.297106;, + 0.582448;-0.641920;-0.498692;, + 0.908436;0.168554;-0.382535;, + 0.589372;0.731411;0.343042;, + -0.130859;0.472769;0.871416;, + -0.448382;-0.259742;0.855271;, + -0.122373;-0.962341;0.242745;, + 0.738199;-0.672946;-0.046963;, + 0.954319;0.143966;-0.261819;, + 0.684008;0.694622;0.222786;, + 0.114891;0.475550;0.872154;, + 0.045777;-0.249705;0.967239;, + 0.271381;-0.699800;0.660782;, + 0.788837;-0.361752;0.496862;, + 0.654098;0.265568;0.708258;, + 0.497233;-0.613394;-0.613602;, + 0.827960;0.156360;-0.538548;, + 0.441440;0.854796;0.272864;, + -0.263126;0.546005;0.795389;, + -0.560849;-0.216898;0.799002;, + -0.170563;-0.985283;0.011240;, + 0.446317;-0.594873;-0.668526;, + 0.761715;0.172975;-0.624396;, + 0.374777;0.907354;0.190397;, + -0.306469;0.543138;0.781715;, + -0.462053;-0.212056;0.861127;, + -0.101970;-0.991153;0.084961;, + 0.308543;-0.543003;-0.780992;, + 0.601734;0.229221;-0.765097;, + 0.257610;0.966081;0.018033;, + -0.452795;0.600684;0.658905;, + -0.728428;-0.184026;0.659945;, + -0.306842;-0.947200;-0.093060;, + 0.335867;-0.559796;-0.757510;, + 0.736062;0.204405;-0.645315;, + 0.336864;0.934902;0.111722;, + -0.456215;0.614991;0.643159;, + -0.874861;-0.145367;0.462046;, + -0.474606;-0.826156;-0.303671;, + 0.471488;-0.618541;-0.628574;, + 0.864110;0.144078;-0.482240;, + 0.488532;0.813107;0.316535;, + -0.263346;0.532405;0.804484;, + -0.629310;-0.211268;0.747886;, + -0.275179;-0.957479;-0.086667;, + 0.439782;-0.600782;-0.667573;, + 0.813245;0.167489;-0.557296;, + 0.428662;0.870727;0.241007;, + -0.345261;0.558515;0.754225;, + -0.683079;-0.206987;0.700399;, + -0.272796;-0.960329;-0.057884;, + 0.252684;-0.497453;-0.829875;, + 0.769539;0.190134;-0.609638;, + 0.357894;0.925399;0.124696;, + -0.537976;0.628508;0.561747;, + -0.898785;-0.123848;0.420531;, + -0.560059;-0.751673;-0.348312;, + 0.333904;-0.534319;-0.776538;, + 0.850206;0.173471;-0.497050;, + 0.514423;0.813291;0.271896;, + -0.467237;0.607846;0.642038;, + -0.877223;-0.172768;0.447918;, + -0.507195;-0.819398;-0.267097;, + 0.554845;-0.638321;-0.533566;, + 0.886565;0.182189;-0.425217;, + 0.568559;0.763899;0.305283;, + -0.165833;0.490715;0.855393;, + -0.481870;-0.264147;0.835480;, + -0.153896;-0.966580;0.205035;, + 0.701497;-0.701342;-0.126576;, + 0.933336;0.163949;-0.319380;, + 0.662234;0.725654;0.186743;, + 0.068015;0.505465;0.860162;, + -0.023671;-0.259197;0.965534;, + 0.209331;-0.750697;0.626605;, + 0.782976;-0.407275;0.470186;, + 0.636095;0.307826;0.707549;, + 0.501872;-0.611244;-0.611969;, + 0.840103;0.146832;-0.522176;, + 0.462884;0.829633;0.312165;, + -0.265565;0.544402;0.795677;, + -0.559285;-0.215968;0.800349;, + -0.160805;-0.986764;0.020920;, + 0.440673;-0.592878;-0.674020;, + 0.759649;0.173641;-0.626724;, + 0.382754;0.902313;0.198317;, + -0.292472;0.536722;0.791448;, + -0.440960;-0.214732;0.871461;, + -0.091558;-0.991696;0.090310;, + 0.294817;-0.536769;-0.790545;, + 0.589764;0.232855;-0.773277;, + 0.257798;0.966021;0.018516;, + -0.447421;0.598812;0.664258;, + -0.724551;-0.183967;0.664215;, + -0.309688;-0.945740;-0.098333;, + 0.324769;-0.553847;-0.766667;, + 0.732523;0.205397;-0.649017;, + 0.341567;0.932610;0.116491;, + -0.451790;0.613142;0.648030;, + -0.878402;-0.141688;0.456437;, + -0.485264;-0.815031;-0.316611;, + 0.467816;-0.617010;-0.632809;, + 0.867241;0.140845;-0.477553;, + 0.500477;0.800802;0.328997;, + -0.247760;0.524381;0.814641;, + -0.619273;-0.212829;0.755781;, + -0.276709;-0.956627;-0.091087;, + 0.434085;-0.598441;-0.673379;, + 0.814055;0.166484;-0.556415;, + 0.438174;0.862994;0.251485;, + -0.334234;0.553031;0.763180;, + -0.676607;-0.208759;0.706132;, + -0.274057;-0.959798;-0.060661;, + 0.236650;-0.488015;-0.840142;, + 0.767921;0.190323;-0.611616;, + 0.363214;0.922428;0.131159;, + -0.537145;0.628597;0.562442;, + -0.902882;-0.118846;0.413135;, + -0.572783;-0.736091;-0.360680;, + 0.323287;-0.527601;-0.785571;, + 0.852535;0.170393;-0.494115;, + 0.524892;0.802194;0.284559;, + -0.462849;0.606173;0.646780;, + -0.880811;-0.169994;0.441898;, + -0.517099;-0.808991;-0.279539;, + 0.555697;-0.637603;-0.533538;, + 0.890633;0.178263;-0.418325;, + 0.579718;0.749722;0.319132;, + -0.146317;0.479991;0.864985;, + -0.465888;-0.265274;0.844143;, + -0.147113;-0.966458;0.210517;, + 0.709732;-0.695413;-0.112611;, + 0.938240;0.157523;-0.308047;, + 0.672570;0.712761;0.199049;, + 0.090407;0.490418;0.866785;, + 0.003757;-0.259574;0.965716;, + 0.230207;-0.738918;0.633249;, + 0.787167;-0.396002;0.472811;, + 0.646355;0.289593;0.705947;, + 0.516966;-0.608447;-0.602112;, + 0.874128;0.114718;-0.471953;, + 0.517818;0.767923;0.377039;, + -0.212404;0.516342;0.829624;, + -0.588810;-0.221694;0.777274;, + -0.185391;-0.982309;-0.026433;, + 0.400936;-0.557240;-0.727141;, + 0.742127;0.178734;-0.645989;, + 0.419212;0.878727;0.228253;, + -0.215861;0.514387;0.829946;, + -0.329958;-0.208178;0.920755;, + -0.091396;-0.995301;0.031967;, + 0.255763;-0.507343;-0.822915;, + 0.544399;0.251635;-0.800193;, + 0.270805;0.961926;0.036910;, + -0.409694;0.584477;0.700383;, + -0.665604;-0.180080;0.724253;, + -0.229438;-0.970608;-0.072654;, + 0.271222;-0.525963;-0.806102;, + 0.711132;0.211599;-0.670461;, + 0.367730;0.919170;0.141072;, + -0.416769;0.599193;0.683573;, + -0.878049;-0.128957;0.460869;, + -0.529271;-0.771744;-0.352540;, + 0.434921;-0.604440;-0.667455;, + 0.865473;0.129965;-0.483804;, + 0.547625;0.754213;0.362311;, + -0.182521;0.489258;0.852827;, + -0.578412;-0.225413;0.783982;, + -0.294771;-0.948174;-0.118642;, + 0.395442;-0.582473;-0.710176;, + 0.805338;0.164263;-0.569604;, + 0.478885;0.830388;0.284824;, + -0.280896;0.526446;0.802466;, + -0.646450;-0.219247;0.730776;, + -0.290151;-0.953341;-0.083390;, + 0.170371;-0.449244;-0.877014;, + 0.752258;0.192773;-0.630037;, + 0.391734;0.906032;0.160159;, + -0.512610;0.622446;0.591432;, + -0.904174;-0.101462;0.414939;, + -0.620865;-0.680541;-0.389089;, + 0.271016;-0.497964;-0.823761;, + 0.848604;0.160114;-0.504217;, + 0.567325;0.759364;0.318604;, + -0.427834;0.592777;0.682329;, + -0.881165;-0.159727;0.445011;, + -0.558070;-0.768267;-0.313567;, + 0.535967;-0.630109;-0.561873;, + 0.892887;0.164047;-0.419335;, + 0.623516;0.698005;0.352159;, + -0.071795;0.436064;0.897047;, + -0.409232;-0.281070;0.868060;, + -0.136787;-0.970094;0.200516;, + 0.717370;-0.686582;-0.118260;, + 0.944105;0.133893;-0.301228;, + 0.711039;0.665994;0.225558;, + 0.170183;0.433298;0.885037;, + 0.089845;-0.282505;0.955049;, + 0.288287;-0.730355;0.619251;, + 0.804020;-0.394183;0.445166;, + 0.689840;0.223648;0.688551;, + 0.361674;0.913139;-0.188064;, + -0.306548;-0.658610;0.687213;, + -0.365602;-0.684685;0.630508;, + -0.220903;-0.824258;0.521346;, + -0.581318;-0.745933;0.325044;, + -0.588806;0.000143;0.808275;, + -0.496007;-0.714259;0.493772;, + 0.593600;0.707690;-0.383162;, + -0.196206;0.085242;-0.976851;, + -0.140780;0.989203;-0.040729;, + -0.715299;-0.614274;-0.333189;, + -0.975349;0.164237;-0.147377;, + -0.212301;-0.514564;0.830754;, + -0.297653;-0.114959;0.947727;, + 0.980593;0.188926;-0.052382;, + 0.665653;0.649226;0.367983;, + 0.302101;0.824457;0.478545;, + -0.123513;0.634708;0.762817;, + 0.426128;-0.774572;-0.467389;, + 0.781451;-0.186179;-0.595543;, + -0.113738;-0.981032;0.156973;, + -0.125935;-0.756333;0.641950;, + 0.214009;0.839435;0.499548;, + -0.315118;0.517253;0.795707;, + -0.459333;-0.851040;0.254447;, + -0.557305;-0.389761;0.733143;, + 0.644141;0.420432;-0.638999;, + 0.740902;0.430944;-0.515123;, + -0.149490;0.928257;0.340575;, + -0.077287;-0.823913;-0.561422;, + 0.511461;-0.189138;-0.838233;, + -0.381149;0.923821;0.035779;, + 0.392217;0.560751;0.729194;, + -0.184282;0.976156;0.114712;, + -0.567905;0.521114;-0.637122;, + 0.473718;0.414055;-0.777271;, + -0.529914;-0.324726;-0.783418;, + 0.226517;-0.970474;0.082885;, + -0.148924;-0.632604;-0.760022;, + 0.527039;0.781296;-0.334374;, + 0.834983;0.264476;-0.482552;, + 0.675963;0.077412;-0.732859;, + 0.160126;0.190092;-0.968620;, + 0.228376;-0.127237;-0.965223;, + -0.057386;0.245516;0.967692;, + -0.657416;-0.744773;-0.114531;, + -0.274099;0.701037;-0.658344;, + 0.876642;-0.442049;-0.189978;, + -0.779526;0.329121;0.532934;, + 0.327724;-0.696016;0.638873;, + -0.578535;0.674540;0.458576;, + -0.984941;0.135767;-0.107045;, + 0.422834;0.836078;-0.349550;, + 0.828789;0.540638;-0.144288;, + -0.034244;0.095893;-0.994802;, + 0.641365;-0.305210;-0.703916;, + 0.923772;-0.052794;0.379286;, + -0.076548;0.939750;-0.333181;, + -0.119540;-0.960478;0.251382;, + 0.669596;-0.615981;-0.414980;, + 0.303030;-0.186090;0.934635;, + 0.391442;0.389355;0.833772;, + -0.190416;0.835663;0.515178;, + 0.353633;-0.752104;0.556133;, + 0.520040;-0.156982;0.839592;, + -0.509830;-0.838926;-0.190465;, + 0.146090;-0.981553;0.123336;, + -0.607672;0.793048;-0.042537;, + -0.897162;0.033159;-0.440455;, + 0.839542;-0.269781;-0.471581;, + 0.963227;0.157435;-0.217736;, + 0.259132;0.699308;-0.666198;, + -0.604433;0.762690;0.230140;, + -0.423330;0.778916;0.462689;, + 0.434554;0.075722;0.897457;, + -0.006566;0.677353;0.735628;, + -0.749936;0.407739;-0.520908;, + -0.822491;0.188949;-0.536477;, + -0.756906;-0.145054;-0.637223;, + -0.423190;-0.716621;-0.554404;, + 0.227209;-0.966292;0.121063;, + 0.317550;-0.933835;0.164662;, + 0.496370;-0.182435;0.848725;, + 0.533776;-0.178235;0.826629;, + 0.604641;-0.410889;0.682334;, + 0.097373;-0.993304;-0.062171;, + -0.544149;0.817947;0.186718;, + -0.671652;0.718204;-0.181845;, + 0.520633;-0.800173;0.297766;, + -0.610984;0.085141;-0.787051;, + -0.315955;0.940947;0.121620;, + -0.451041;-0.364729;-0.814576;, + -0.034059;-0.236375;-0.971065;, + -0.126856;0.710394;-0.692277;, + 0.329848;0.675467;0.659503;, + 0.509804;-0.823253;0.249710;, + 0.828231;-0.560342;0.007058;, + 0.898012;0.382183;0.217970;, + 0.638411;-0.335141;0.692901;, + 0.521920;-0.736948;0.429544;, + 0.653620;0.114523;0.748107;, + 0.219228;-0.910600;-0.350351;, + 0.106711;0.863012;0.493785;, + -0.701914;0.653797;-0.282606;, + -0.566975;-0.044447;-0.822535;, + -0.698404;-0.196958;-0.688069;, + -0.634338;-0.406257;-0.657701;, + -0.726870;-0.133185;-0.673737;, + -0.790864;0.239728;-0.563085;, + -0.657555;0.711316;-0.248296;, + 0.154310;0.679156;0.717590;, + -0.231918;0.882106;0.410004;, + 0.412377;-0.755835;0.508585;, + 0.140943;-0.970084;0.197668;, + -0.311225;-0.875510;-0.369624;, + -0.597394;0.775849;-0.202926;, + 0.489055;-0.692585;0.530237;, + 0.491338;-0.534968;0.687311;, + 0.489758;-0.036774;0.871083;, + 0.438815;0.143443;0.887054;, + 0.286417;0.500491;0.816991;, + -0.627373;0.683167;-0.373744;, + -0.335799;0.770037;-0.542478;, + 0.129022;0.958535;0.254096;, + -0.414688;0.073903;-0.906958;, + -0.101432;0.966761;0.234701;, + -0.755011;0.321454;-0.571512;, + 0.578072;-0.401336;0.710466;, + -0.311908;0.427644;-0.848430;, + 0.156866;-0.502085;-0.850473;, + 0.197343;0.520839;-0.830532;, + 0.891275;-0.244321;-0.382017;, + 0.886836;0.434833;0.156336;, + -0.667053;-0.649082;0.365696;, + -0.890395;-0.035250;0.453822;, + 0.773169;-0.532910;0.343826;, + -0.301252;0.328615;0.895131;, + -0.552096;-0.122315;-0.824760;, + -0.523265;0.793302;-0.311232;, + 0.178067;-0.970384;-0.163240;, + -0.685065;0.319620;-0.654621;, + 0.472466;-0.858796;0.198106;, + 0.564413;-0.431202;0.703920;, + 0.113817;-0.948975;0.294097;, + -0.499148;-0.545190;-0.673512;, + 0.108599;0.911995;0.395565;, + -0.283846;-0.779062;0.559012;, + 0.894433;0.447026;-0.012553;, + -0.593050;0.804457;0.033773;, + 0.369368;-0.910324;-0.186757;, + 0.475166;0.851493;0.221757;, + -0.703251;-0.226621;0.673855;, + -0.714900;-0.212902;0.666026;, + -0.901123;0.269970;-0.339253;, + -0.721934;-0.308194;0.619538;, + -0.406662;0.800438;-0.440369;, + -0.636644;0.614134;-0.466395;, + -0.410648;0.785543;0.462915;, + -0.378074;0.914236;0.145713;, + -0.082476;-0.992964;0.084972;, + 0.519481;-0.388496;0.761059;, + -0.037907;-0.992141;0.119241;, + 0.491463;-0.565202;0.662579;, + 0.194400;-0.959689;0.202992;, + -0.096513;-0.870901;-0.481889;, + 0.146372;-0.791374;0.593551;, + 0.771799;-0.600975;0.207740;, + 0.351827;0.537583;0.766305;, + 0.117570;-0.811190;0.572842;, + 0.382914;-0.755359;0.531799;, + 0.188469;-0.005536;0.982064;, + -0.489616;0.263036;0.831317;, + -0.823845;-0.530391;-0.199912;, + 0.593325;-0.803737;0.044415;, + 0.971456;-0.226261;0.071272;, + -0.774625;-0.362944;-0.517907;, + 0.910154;-0.232627;0.342788;, + 0.500593;0.666086;0.552935;, + -0.712383;0.688225;-0.137322;, + 0.268876;-0.898540;-0.346889;, + -0.913491;-0.404743;-0.041435;, + 0.880171;-0.136698;0.454546;, + 0.498824;0.566633;0.655822;, + -0.755600;0.570720;0.321476;, + 0.122431;-0.981567;0.146753;, + -0.765877;-0.131961;0.629300;, + 0.760728;-0.149787;0.631552;, + 0.338248;0.393374;0.854895;, + -0.264307;0.634389;0.726424;, + -0.213763;-0.497719;0.840584;, + -0.797886;0.487994;-0.353892;, + -0.371167;0.862227;0.344672;, + -0.796796;0.254304;-0.548129;, + -0.806062;0.342622;-0.482571;, + -0.211446;0.977387;0.002139;, + 0.091470;-0.973373;0.210186;, + 0.342640;-0.450430;0.824445;, + -0.533434;-0.631638;-0.562567;, + -0.857968;0.149295;-0.491531;, + -0.449701;0.833860;0.320073;, + 0.247538;0.533303;0.808896;, + 0.568264;-0.213516;0.794661;, + 0.155037;-0.987820;0.013252;, + -0.447982;-0.577196;-0.682757;, + -0.751659;0.174053;-0.636172;, + -0.374900;0.906643;0.193515;, + 0.266062;0.534893;0.801936;, + 0.351269;-0.182121;0.918391;, + 0.050535;-0.994436;0.092426;, + -0.302952;-0.528059;-0.793330;, + -0.549673;0.237349;-0.800952;, + -0.224332;0.974321;-0.019323;, + 0.457685;0.602796;0.653575;, + 0.684758;-0.171791;0.708233;, + 0.194642;-0.980191;-0.036613;, + -0.320375;-0.545709;-0.774314;, + -0.721049;0.208194;-0.660866;, + -0.322509;0.941211;0.100551;, + 0.464637;0.616931;0.635224;, + 0.890129;-0.133886;0.435598;, + 0.489652;-0.803849;-0.337738;, + -0.482310;-0.621551;-0.617294;, + -0.877595;0.134138;-0.460255;, + -0.508349;0.786638;0.350401;, + 0.231555;0.510140;0.828335;, + 0.589307;-0.209611;0.780244;, + 0.252160;-0.965191;-0.069438;, + -0.443595;-0.600833;-0.664998;, + -0.815942;0.164862;-0.554130;, + -0.437536;0.861083;0.259033;, + 0.330057;0.546220;0.769874;, + 0.657713;-0.211590;0.722941;, + 0.245100;-0.968694;-0.039466;, + -0.218196;-0.468925;-0.855862;, + -0.762091;0.193297;-0.617943;, + -0.349430;0.929707;0.116373;, + 0.557674;0.637189;0.531969;, + 0.917107;-0.107418;0.383895;, + 0.584169;-0.712581;-0.388554;, + -0.320194;-0.517249;-0.793681;, + -0.861337;0.165443;-0.480341;, + -0.529397;0.791179;0.306226;, + 0.475036;0.610817;0.633438;, + 0.891719;-0.164077;0.421801;, + 0.519657;-0.799974;-0.299996;, + -0.579460;-0.642332;-0.501632;, + -0.902703;0.169362;-0.395530;, + -0.586870;0.729783;0.350716;, + 0.120529;0.460012;0.879694;, + 0.424021;-0.257028;0.868414;, + 0.109887;-0.957719;0.265895;, + -0.737915;-0.674242;-0.029655;, + -0.953246;0.142139;-0.266682;, + -0.681447;0.696126;0.225917;, + -0.117801;0.461501;0.879284;, + -0.057760;-0.247480;0.967170;, + -0.276840;-0.682651;0.676274;, + -0.783249;-0.356084;0.509632;, + -0.649761;0.259288;0.714549;, + -0.490701;-0.611734;-0.620479;, + -0.814477;0.160417;-0.557578;, + -0.437465;0.857775;0.269901;, + 0.252546;0.535085;0.806166;, + 0.530851;-0.218848;0.818720;, + 0.153105;-0.987769;0.029507;, + -0.438220;-0.592052;-0.676341;, + -0.742663;0.176560;-0.645971;, + -0.366910;0.912208;0.182358;, + 0.295401;0.533999;0.792201;, + 0.430440;-0.211071;0.877593;, + 0.080883;-0.991491;0.101995;, + -0.297424;-0.534529;-0.791086;, + -0.573038;0.233183;-0.785654;, + -0.241843;0.970315;0.000870;, + 0.445511;0.597421;0.666789;, + 0.711169;-0.187864;0.677455;, + 0.294543;-0.951626;-0.087479;, + -0.326742;-0.550893;-0.767956;, + -0.717174;0.210252;-0.664422;, + -0.325128;0.940226;0.101326;, + 0.449368;0.612043;0.650747;, + 0.866118;-0.148627;0.477232;, + 0.471883;-0.827537;-0.304152;, + -0.465089;-0.615834;-0.635956;, + -0.854249;0.147700;-0.498441;, + -0.486239;0.814255;0.317113;, + 0.252472;0.521534;0.815021;, + 0.604359;-0.212396;0.767879;, + 0.264549;-0.961449;-0.075028;, + -0.432019;-0.597419;-0.675611;, + -0.798667;0.171837;-0.576717;, + -0.423554;0.874399;0.236705;, + 0.335949;0.550139;0.764517;, + 0.662056;-0.212295;0.718758;, + 0.258679;-0.964803;-0.047336;, + -0.240978;-0.484831;-0.840755;, + -0.752439;0.197302;-0.628417;, + -0.348656;0.930401;0.113105;, + 0.533739;0.628202;0.566114;, + 0.892616;-0.126233;0.432784;, + 0.558454;-0.751040;-0.352235;, + -0.325458;-0.524380;-0.786831;, + -0.841062;0.178988;-0.510468;, + -0.510649;0.815434;0.272590;, + 0.460786;0.605148;0.649209;, + 0.868674;-0.174616;0.463589;, + 0.503088;-0.821745;-0.267651;, + -0.550996;-0.638131;-0.537766;, + -0.878623;0.183950;-0.440663;, + -0.565503;0.764222;0.310116;, + 0.154787;0.478816;0.864162;, + 0.455817;-0.261788;0.850704;, + 0.139459;-0.963610;0.228052;, + -0.702169;-0.703184;-0.111764;, + -0.930325;0.163693;-0.328175;, + -0.658831;0.728629;0.187194;, + -0.072427;0.492303;0.867406;, + 0.007565;-0.256091;0.966623;, + -0.219306;-0.733148;0.643738;, + -0.780241;-0.399104;0.481601;, + -0.633977;0.303269;0.711408;, + -0.495277;-0.609732;-0.618812;, + -0.827977;0.150869;-0.540085;, + -0.460415;0.831003;0.312174;, + 0.254891;0.533546;0.806448;, + 0.529349;-0.217483;0.820055;, + 0.143045;-0.988931;0.039412;, + -0.432483;-0.589889;-0.681901;, + -0.740510;0.177313;-0.648232;, + -0.375236;0.907074;0.190826;, + 0.281251;0.527055;0.801942;, + 0.409295;-0.213533;0.887063;, + 0.070334;-0.991770;0.106986;, + -0.283571;-0.527836;-0.800610;, + -0.560679;0.236847;-0.793437;, + -0.241981;0.970280;0.001457;, + 0.440073;0.595333;0.672246;, + 0.707551;-0.187802;0.681250;, + 0.297766;-0.950032;-0.093671;, + -0.315564;-0.544433;-0.777182;, + -0.713702;0.211367;-0.667797;, + -0.330019;0.937937;0.106587;, + 0.444854;0.609993;0.655754;, + 0.870079;-0.144889;0.471136;, + 0.482938;-0.815853;-0.318049;, + -0.461342;-0.614098;-0.640349;, + -0.857754;0.144449;-0.493348;, + -0.498612;0.801373;0.330434;, + 0.236801;0.512915;0.825133;, + 0.594213;-0.213844;0.775359;, + 0.266370;-0.960543;-0.080021;, + -0.426219;-0.594861;-0.681526;, + -0.799637;0.170933;-0.575641;, + -0.433484;0.866383;0.247934;, + 0.324837;0.544170;0.773537;, + 0.655674;-0.214147;0.724039;, + 0.260147;-0.964238;-0.050689;, + -0.224869;-0.474782;-0.850891;, + -0.750921;0.197735;-0.630094;, + -0.354271;0.927410;0.120013;, + 0.532960;0.628250;0.566794;, + 0.897185;-0.121051;0.424742;, + 0.571470;-0.734766;-0.365432;, + -0.314900;-0.517199;-0.795828;, + -0.843867;0.175890;-0.506904;, + -0.521492;0.803821;0.286214;, + 0.456355;0.603310;0.654031;, + 0.872676;-0.171770;0.457090;, + 0.513321;-0.810862;-0.281077;, + -0.551857;-0.637341;-0.537819;, + -0.883114;0.179896;-0.433297;, + -0.576959;0.749316;0.325029;, + 0.135489;0.467543;0.873525;, + 0.440209;-0.262810;0.858573;, + 0.133199;-0.963203;0.233450;, + -0.710203;-0.697232;-0.097362;, + -0.935703;0.156918;-0.315970;, + -0.669545;0.715214;0.200446;, + -0.094199;0.476771;0.873966;, + -0.018339;-0.256626;0.966337;, + -0.238806;-0.721445;0.649991;, + -0.783588;-0.388614;0.484736;, + -0.643422;0.284541;0.710665;, + -0.510465;-0.607468;-0.608611;, + -0.865352;0.117258;-0.487255;, + -0.517106;0.766062;0.381772;, + 0.201577;0.503110;0.840385;, + 0.559705;-0.225972;0.797288;, + 0.169147;-0.985551;-0.008917;, + -0.391192;-0.551987;-0.736396;, + -0.722016;0.183057;-0.667221;, + -0.413059;0.883017;0.222853;, + 0.204883;0.502219;0.840119;, + 0.302341;-0.206622;0.930536;, + 0.074487;-0.996148;0.046270;, + -0.244152;-0.497096;-0.832638;, + -0.514194;0.255863;-0.818620;, + -0.255335;0.966621;0.021159;, + 0.401612;0.579399;0.709228;, + 0.649553;-0.183473;0.737847;, + 0.220057;-0.972841;-0.071803;, + -0.261639;-0.514291;-0.816731;, + -0.692069;0.218095;-0.688095;, + -0.357168;0.924491;0.133220;, + 0.408987;0.594527;0.692291;, + 0.870070;-0.132357;0.474826;, + 0.528108;-0.770628;-0.356699;, + -0.427611;-0.599957;-0.676166;, + -0.856204;0.133913;-0.498980;, + -0.546962;0.752871;0.366086;, + 0.171512;0.475490;0.862840;, + 0.552739;-0.226309;0.802037;, + 0.285690;-0.951981;-0.110058;, + -0.386791;-0.577398;-0.719030;, + -0.790608;0.169376;-0.588431;, + -0.475563;0.832664;0.283745;, + 0.271095;0.515384;0.812949;, + 0.625528;-0.224964;0.747065;, + 0.277394;-0.957771;-0.075676;, + -0.158619;-0.433804;-0.886935;, + -0.735093;0.201108;-0.647452;, + -0.383943;0.910904;0.151136;, + 0.507899;0.621019;0.596970;, + 0.898964;-0.103555;0.425605;, + 0.620222;-0.677171;-0.395935;, + -0.262650;-0.485562;-0.833813;, + -0.840648;0.165742;-0.515597;, + -0.564993;0.759241;0.323012;, + 0.420631;0.588517;0.690447;, + 0.873310;-0.161587;0.459587;, + 0.555273;-0.768494;-0.317946;, + -0.531432;-0.628929;-0.567476;, + -0.885679;0.165648;-0.433744;, + -0.621552;0.695340;0.360798;, + 0.062071;0.421776;0.904573;, + 0.384608;-0.278152;0.880175;, + 0.124293;-0.966893;0.222865;, + -0.717453;-0.688923;-0.103178;, + -0.942100;0.132658;-0.307975;, + -0.709039;0.666859;0.229265;, + -0.171508;0.418312;0.891964;, + -0.099615;-0.279056;0.955094;, + -0.293476;-0.713393;0.636351;, + -0.798889;-0.388529;0.459153;, + -0.684430;0.217897;0.695756;, + -0.341059;0.917128;-0.206289;, + 0.285530;-0.650577;0.703720;, + 0.340151;-0.678735;0.650858;, + 0.201228;-0.818516;0.538087;, + 0.561306;-0.750896;0.347982;, + 0.563755;-0.000870;0.825942;, + 0.476551;-0.712046;0.515644;, + -0.572616;0.710735;-0.408614;, + 0.160884;0.118423;-0.979843;, + 0.092128;0.995149;-0.034495;, + 0.715299;-0.614274;-0.333189;, + 0.975349;0.164237;-0.147377;, + 0.212302;-0.514565;0.830753;, + 0.364121;-0.117457;0.923915;, + -0.972391;0.228560;0.047083;, + -0.721943;0.609310;0.327933;, + -0.355783;0.818541;0.451009;, + 0.166307;0.647301;0.743870;, + -0.492298;-0.784288;-0.377538;, + -0.924095;-0.209976;-0.319310;, + 0.079861;-0.979451;0.185195;, + 0.091672;-0.754828;0.649485;, + -0.169599;0.852875;0.493802;, + 0.305489;0.522454;0.796064;, + 0.451821;-0.854320;0.256893;, + 0.549353;-0.390720;0.738613;, + -0.644141;0.420432;-0.638999;, + -0.740902;0.430944;-0.515123;, + 0.149490;0.928257;0.340575;, + 0.077287;-0.823913;-0.561422;, + -0.511461;-0.189138;-0.838233;, + 0.343698;0.922858;0.173795;, + -0.260653;0.953967;0.148347;, + 0.783381;0.503370;0.364599;, + -0.066996;0.879109;0.471889;, + -0.710934;0.444973;0.544584;, + 0.289636;0.949061;0.124075;, + -0.362112;0.926712;0.100395;, + -0.000001;0.818760;0.574136;, + -0.000000;0.868934;-0.494927;, + -0.000000;0.630324;-0.776332;, + 0.022686;-0.036383;0.999080;, + -0.000000;0.298174;-0.954511;, + -0.000000;0.998500;0.054759;, + -0.000000;-0.444151;0.895952;, + -0.000000;-0.029730;-0.999558;, + -0.142878;-0.121955;-0.982198;, + -0.808123;-0.461550;-0.365936;, + -0.793812;0.600245;-0.097818;, + -0.540286;0.724558;-0.427911;, + -0.496164;0.335976;-0.800588;, + -0.654263;-0.049613;-0.754638;, + -0.660157;-0.104107;0.743878;, + -0.861728;0.431543;-0.266824;, + -0.338650;-0.330283;0.881039;, + -0.231714;-0.275342;0.933003;, + -0.899678;-0.251384;-0.356911;, + -0.563708;-0.395781;-0.724976;, + -0.944986;-0.217661;0.244183;, + -0.232970;0.970399;0.063643;, + -0.886311;0.419497;-0.196151;, + -0.284112;0.944212;0.166567;, + -0.394637;-0.137254;0.908528;, + 0.012819;0.940525;0.339483;, + 0.382016;0.040071;0.923286;, + -0.733140;-0.437535;0.520643;, + -0.879018;0.070016;-0.471619;, + -0.965289;-0.090055;-0.245168;, + -0.404283;-0.450662;0.795902;, + -0.432713;-0.354931;0.828724;, + -0.302341;0.947980;-0.099615;, + -0.235609;0.971832;-0.005539;, + -0.978433;-0.005143;0.206502;, + -0.422789;0.519154;-0.742784;, + -0.929825;-0.231328;0.286203;, + -0.699443;-0.209423;-0.683316;, + -0.534104;0.546724;-0.644846;, + -0.806852;-0.393759;-0.440389;, + -0.691836;-0.542995;-0.475940;, + -0.877724;-0.460197;-0.133489;, + -0.178300;-0.323577;-0.929251;, + -0.937849;0.041613;0.344540;, + 0.109013;0.571900;0.813048;, + -0.863890;0.503678;-0.001488;, + -0.683696;0.235194;-0.690828;, + -0.778100;0.232231;-0.583635;, + -0.438702;-0.571900;-0.693160;, + -0.650020;0.481538;-0.587874;, + 0.244916;-0.017761;-0.969382;, + -0.903353;-0.418768;0.092664;, + -0.958406;0.281953;-0.044275;, + -0.880526;-0.190072;0.434220;, + -0.935327;-0.048151;-0.350493;, + -0.760323;0.281570;-0.585344;, + -0.722182;-0.107325;-0.683326;, + -0.967430;-0.242896;0.071282;, + -0.927251;-0.170149;-0.333550;, + -0.812213;-0.330990;0.480369;, + -0.587234;0.666265;-0.459617;, + 0.466081;0.838695;0.281709;, + -0.994998;-0.099822;0.003920;, + -0.742055;0.487282;0.460338;, + -0.638869;-0.759326;-0.123572;, + -0.715743;0.327208;0.616966;, + 0.371066;-0.555663;-0.744008;, + -0.559606;-0.645175;-0.520183;, + -0.649884;-0.689957;-0.318763;, + 0.681463;-0.724191;0.105620;, + -0.880620;-0.412930;0.232375;, + 0.709052;-0.704833;0.021360;, + -0.701635;0.645253;-0.302255;, + 0.427690;0.903455;0.029168;, + -0.710107;0.193070;-0.677105;, + -0.778125;0.252214;0.575248;, + 0.148716;0.940575;0.305291;, + 0.238521;-0.062437;-0.969128;, + -0.963144;0.085488;-0.255042;, + 0.369513;0.922029;-0.115428;, + -0.958565;-0.067036;-0.276873;, + 0.270983;-0.447194;-0.852400;, + -0.772474;0.623053;0.122835;, + 0.815356;0.157407;-0.557151;, + -0.138796;-0.893977;-0.426076;, + 0.364772;0.804729;-0.468352;, + -0.981550;-0.062615;-0.180661;, + 0.260027;-0.887566;-0.380279;, + -0.491771;0.675224;-0.549758;, + 0.216661;-0.945949;-0.241328;, + 0.945124;0.201537;-0.257146;, + 0.329095;0.723521;-0.606806;, + 0.194660;-0.960634;0.198216;, + -0.996307;-0.033233;-0.079173;, + -0.909493;0.374402;-0.180680;, + 0.854421;0.045584;-0.517577;, + 0.133919;-0.936841;0.323101;, + 0.090562;0.392235;-0.915396;, + -0.081213;-0.839344;0.537500;, + -0.974141;-0.162751;0.156724;, + -0.567495;0.823354;0.006191;, + 0.012874;0.004539;-0.999907;, + -0.920422;-0.390245;0.023083;, + 0.556206;0.718401;-0.417774;, + -0.948091;-0.001386;0.317996;, + -0.050023;-0.977498;-0.204928;, + -0.311902;0.571486;-0.759026;, + -0.196380;-0.929366;-0.312591;, + -0.949563;-0.144224;0.278441;, + -0.792912;0.574314;-0.203603;, + 0.639171;-0.463937;-0.613370;, + -0.225631;-0.823775;0.520082;, + 0.170996;0.152764;-0.973357;, + -0.879432;-0.156838;0.449446;, + 0.524143;-0.666593;0.530026;, + -0.269195;0.577034;-0.771081;, + 0.852228;-0.478675;-0.211134;, + -0.343783;-0.770945;0.536151;, + -0.679363;0.590395;0.435775;, + -0.069213;0.427125;-0.901540;, + -0.757904;-0.558344;-0.337392;, + 0.136274;0.884818;0.445562;, + 0.102555;-0.767205;-0.633151;, + -0.844716;-0.397357;0.358555;, + -0.146612;0.912426;-0.382077;, + 0.511756;-0.836540;-0.195723;, + -0.619780;-0.487134;0.615283;, + -0.387513;0.049103;-0.920555;, + -0.707902;-0.012374;0.706203;, + 0.139613;-0.971369;0.192223;, + -0.431272;0.675463;-0.598125;, + 0.565995;-0.635897;-0.524676;, + -0.798576;-0.307164;0.517617;, + 0.372732;0.864234;-0.337891;, + 0.014166;0.945681;-0.324786;, + 0.287479;0.796616;-0.531751;, + 0.136032;0.650716;-0.747037;, + -0.122359;-0.207776;0.970493;, + -0.744782;-0.430097;-0.510212;, + 0.065371;-0.737389;0.672298;, + 0.825383;-0.420119;-0.377152;, + 0.793812;0.600245;-0.097818;, + 0.540286;0.724558;-0.427911;, + 0.496164;0.335976;-0.800588;, + 0.654263;-0.049613;-0.754638;, + 0.690046;-0.132524;0.711529;, + 0.945515;0.306078;-0.110984;, + 0.329239;-0.308298;0.892499;, + 0.231714;-0.275342;0.933003;, + 0.899678;-0.251384;-0.356911;, + 0.563708;-0.395781;-0.724976;, + 0.930868;-0.256053;0.260617;, + 0.232970;0.970399;0.063643;, + 0.886230;0.418543;-0.198540;, + 0.284111;0.944212;0.166568;, + 0.394636;-0.137254;0.908528;, + -0.012819;0.940525;0.339483;, + -0.382017;0.040070;0.923286;, + 0.732571;-0.437022;0.521873;, + 0.879018;0.070016;-0.471619;, + 0.965023;-0.089095;-0.246563;, + 0.404283;-0.450662;0.795902;, + 0.432713;-0.354931;0.828724;, + 0.302341;0.947980;-0.099615;, + 0.235609;0.971832;-0.005539;, + 0.993793;-0.011471;0.110653;, + 0.629863;0.520365;-0.576622;, + 0.930521;-0.221376;0.291758;, + 0.490285;-0.201883;-0.847858;, + 0.553016;0.656553;-0.512944;, + 0.836668;-0.377812;-0.396542;, + 0.642185;-0.647026;-0.411043;, + 0.872770;-0.467932;-0.138969;, + 0.366430;-0.311048;-0.876914;, + 0.940115;0.027121;0.339777;, + -0.109013;0.571900;0.813048;, + 0.863890;0.503678;-0.001488;, + 0.683696;0.235194;-0.690828;, + 0.778100;0.232231;-0.583635;, + 0.438702;-0.571900;-0.693160;, + 0.650020;0.481538;-0.587874;, + -0.244916;-0.017761;-0.969382;, + 0.903353;-0.418768;0.092664;, + 0.958406;0.281953;-0.044275;, + 0.880526;-0.190072;0.434220;, + 0.935327;-0.048151;-0.350493;, + 0.760323;0.281570;-0.585344;, + 0.722182;-0.107325;-0.683326;, + 0.967430;-0.242896;0.071282;, + 0.932085;0.115972;-0.343175;, + 0.812213;-0.330991;0.480370;, + 0.587234;0.666265;-0.459616;, + -0.466081;0.838695;0.281709;, + 0.994998;-0.099822;0.003920;, + 0.742055;0.487282;0.460338;, + 0.638869;-0.759326;-0.123572;, + 0.715743;0.327208;0.616966;, + -0.371067;-0.555662;-0.744008;, + 0.559606;-0.645176;-0.520182;, + 0.649884;-0.689957;-0.318763;, + -0.681463;-0.724191;0.105620;, + 0.880620;-0.412930;0.232375;, + -0.709052;-0.704833;0.021360;, + 0.701635;0.645253;-0.302255;, + -0.427690;0.903455;0.029168;, + 0.710107;0.193070;-0.677105;, + 0.778125;0.252214;0.575248;, + -0.148717;0.940575;0.305291;, + -0.238521;-0.062437;-0.969128;, + 0.963144;0.085488;-0.255042;, + -0.369513;0.922029;-0.115427;, + 0.958565;-0.067035;-0.276873;, + -0.270983;-0.447194;-0.852400;, + 0.772474;0.623053;0.122835;, + -0.815356;0.157406;-0.557151;, + 0.138796;-0.893977;-0.426076;, + -0.364772;0.804729;-0.468351;, + 0.981550;-0.062615;-0.180662;, + -0.260027;-0.887566;-0.380279;, + 0.491771;0.675224;-0.549757;, + -0.216662;-0.945949;-0.241327;, + -0.945124;0.201537;-0.257145;, + -0.329095;0.723521;-0.606806;, + -0.194660;-0.960634;0.198216;, + 0.996307;-0.033233;-0.079173;, + 0.909493;0.374402;-0.180680;, + -0.854421;0.045584;-0.517577;, + -0.133919;-0.936841;0.323101;, + -0.090562;0.392236;-0.915396;, + 0.081214;-0.839343;0.537501;, + 0.974141;-0.162751;0.156724;, + 0.567495;0.823354;0.006191;, + -0.012874;0.004539;-0.999907;, + 0.920422;-0.390245;0.023083;, + -0.556206;0.718401;-0.417774;, + 0.948091;-0.001386;0.317996;, + 0.050023;-0.977498;-0.204928;, + 0.311902;0.571486;-0.759026;, + 0.196380;-0.929366;-0.312591;, + 0.949563;-0.144224;0.278441;, + 0.792912;0.574314;-0.203603;, + -0.639171;-0.463937;-0.613370;, + 0.225631;-0.823775;0.520082;, + -0.170996;0.152764;-0.973357;, + 0.879431;-0.156838;0.449446;, + -0.524143;-0.666593;0.530026;, + 0.269195;0.577035;-0.771081;, + -0.852228;-0.478675;-0.211134;, + 0.343783;-0.770945;0.536151;, + 0.679363;0.590395;0.435775;, + 0.069213;0.427125;-0.901540;, + 0.757904;-0.558344;-0.337392;, + -0.136274;0.884818;0.445562;, + -0.102555;-0.767205;-0.633151;, + 0.844716;-0.397357;0.358555;, + 0.146612;0.912426;-0.382077;, + -0.511756;-0.836540;-0.195723;, + 0.619780;-0.487134;0.615283;, + 0.387513;0.049103;-0.920555;, + 0.707902;-0.012374;0.706203;, + -0.139613;-0.971369;0.192223;, + 0.431272;0.675463;-0.598125;, + -0.565995;-0.635897;-0.524676;, + 0.798576;-0.307164;0.517617;, + -0.372732;0.864234;-0.337891;, + -0.014166;0.945682;-0.324786;, + -0.287480;0.796615;-0.531751;, + -0.136031;0.650716;-0.747037;, + 0.063281;-0.182379;0.981190;, + 0.744782;-0.430097;-0.510212;, + -0.065371;-0.737389;0.672297;, + 0.242215;-0.246754;0.938320;, + 0.635245;-0.260985;0.726877;, + 0.443696;-0.614785;0.652053;, + -0.265295;-0.652176;0.710130;, + -0.648919;-0.348867;0.676163;, + -0.397813;-0.198937;0.895639;, + 0.049073;-0.204317;0.977674;, + -0.039297;-0.189054;0.981180;, + 0.042148;-0.245267;0.968539;, + 0.122612;-0.131708;0.983676;, + -0.082911;-0.112202;0.990220;, + -0.065750;-0.212323;0.974985;, + -0.107811;-0.124346;0.986365;, + 0.072040;-0.126121;0.989396;, + 0.286232;0.533920;0.795614;, + 0.681710;0.448230;0.578240;, + 0.442638;0.535858;0.718977;, + -0.272537;0.592573;0.758011;, + -0.678219;0.463836;0.569978;, + -0.469139;0.498329;0.729093;, + -0.486813;0.401144;0.775949;, + 0.270328;0.467343;0.841733;, + 0.481839;0.061419;0.874105;, + -0.260992;0.019086;0.965152;, + -0.066960;-0.234819;0.969730;, + -0.176247;-0.368579;0.912736;, + -0.079517;-0.598520;0.797152;, + -0.104641;-0.637894;0.762982;, + 0.096455;-0.656739;0.747924;, + 0.084066;-0.581895;0.808907;, + 0.160432;-0.493238;0.854973;, + 0.092826;-0.336818;0.936983;, + 0.092734;0.032753;0.995152;, + 0.229366;-0.570134;0.788884;, + -0.129323;-0.659103;0.740850;, + -0.183671;-0.023684;0.982702;, + -0.067661;0.044691;0.996707;, + 0.019304;0.109444;0.993806;, + 0.226330;-0.455250;0.861117;, + -0.140511;-0.530214;0.836140;, + 0.173978;0.048446;0.983557;, + 0.259238;-0.273146;0.926384;, + 0.073201;-0.495418;0.865565;, + -0.058649;-0.557668;0.827990;, + -0.219771;-0.310915;0.924680;, + -0.239988;-0.091534;0.966451;, + -0.291412;-0.211959;0.932820;, + -0.286618;-0.466882;0.836583;, + -0.190235;-0.605085;0.773099;, + 0.172409;-0.697401;0.695634;, + 0.280972;-0.565349;0.775523;, + 0.289547;-0.289019;0.912486;, + 0.186923;-0.086989;0.978516;, + -0.151991;-0.014575;0.988274;, + -0.131683;0.178611;0.975068;, + -0.206562;0.358665;0.910325;, + 0.105053;0.413601;0.904377;, + 0.222869;0.170993;0.959735;, + 0.108320;0.139524;0.984276;, + 0.003378;0.187304;0.982296;, + -0.090953;-0.194377;0.976701;, + 0.077236;-0.374250;0.924106;, + 0.038429;0.134035;0.990231;, + -0.111070;0.170840;0.979018;, + -0.204097;-0.632222;0.747422;, + -0.161637;-0.628760;0.760614;, + -0.175808;-0.446894;0.877142;, + -0.281966;-0.632869;0.721091;, + 0.179888;-0.708343;0.682562;, + 0.214505;-0.445287;0.869314;, + 0.152468;-0.594574;0.789453;, + 0.193876;-0.662157;0.723851;, + 0.123846;-0.611873;0.781200;, + -0.079249;-0.616369;0.783460;, + 0.049874;-0.978437;-0.200432;, + -0.035951;-0.982834;-0.180953;, + 0.077777;-0.993666;-0.081114;, + 0.403086;-0.867962;-0.290108;, + 0.558443;-0.699105;0.446535;, + -0.488240;-0.590800;0.642322;, + -0.607999;-0.786791;-0.106285;, + -0.091466;-0.994758;-0.045715;, + 0.256995;0.268178;-0.928458;, + -0.166142;0.251406;-0.953516;, + -0.095345;0.037239;0.994747;, + -0.370667;-0.065770;0.926434;, + 0.280533;-0.103181;0.954282;, + 0.207488;0.068228;0.975855;, + 0.038993;0.114275;-0.992684;, + -0.175719;0.233559;-0.956333;, + 0.165697;0.233366;-0.958167;, + 0.053631;0.218456;-0.974372;, + -0.010918;-0.937228;0.348545;, + 0.014300;-0.847026;0.531360;, + 0.004816;-0.999834;-0.017554;, + 0.002019;-0.991929;-0.126778;, + -0.393237;-0.075695;0.916316;, + -0.593252;-0.198602;0.780134;, + -0.801728;-0.276819;0.529721;, + -0.745782;-0.452954;0.488509;, + -0.649090;-0.376567;0.660969;, + -0.458591;-0.157315;0.874612;, + -0.968072;-0.167164;0.186798;, + -0.934333;-0.238125;0.265177;, + -0.890013;-0.434949;0.136735;, + -0.707919;-0.624087;-0.330705;, + -0.639626;-0.282386;-0.714938;, + -0.856324;-0.247040;-0.453521;, + -0.832452;-0.027354;0.553421;, + -0.841263;0.012869;0.540474;, + -0.853170;-0.076223;0.516034;, + -0.834930;-0.138418;0.532666;, + -0.827207;-0.174679;0.534056;, + -0.881766;-0.204181;0.425205;, + -0.920811;-0.172908;0.349584;, + -0.930713;-0.092278;0.353918;, + 0.122342;-0.917267;-0.379018;, + 0.795254;-0.584691;0.160333;, + 0.561923;-0.336734;0.755548;, + -0.150071;-0.273204;0.950178;, + -0.980461;-0.107800;0.164548;, + -0.960272;-0.212083;0.181378;, + -0.960078;-0.207732;0.187344;, + -0.932337;-0.361278;-0.015029;, + -0.945731;0.117071;0.303128;, + -0.334038;-0.502642;0.797352;, + -0.350540;-0.465852;0.812468;, + -0.651677;-0.366116;0.664286;, + -0.967035;-0.000199;0.254642;, + -0.984181;0.095585;0.149171;, + -0.626720;0.119837;0.769975;, + -0.469079;0.821207;0.324936;, + 0.328196;0.910764;-0.250592;, + -0.727588;-0.072780;0.682143;, + -0.689076;-0.199468;0.696697;, + -0.759279;0.153427;0.632421;, + -0.823955;0.147553;0.547108;, + -0.741015;0.256716;0.620479;, + -0.905729;0.033236;0.422553;, + -0.846614;0.094112;0.523821;, + -0.711348;-0.027696;0.702294;, + -0.628541;-0.139705;0.765127;, + -0.517895;-0.349245;0.780905;, + -0.389382;0.113081;0.914108;, + -0.398643;0.133025;0.907407;, + -0.438066;0.181809;0.880366;, + -0.630900;0.151210;0.760987;, + -0.683144;0.666444;0.298609;, + -0.765711;0.612011;0.197811;, + -0.885977;0.311352;-0.343665;, + -0.882389;0.457062;-0.111735;, + -0.312289;-0.020978;0.949755;, + -0.282556;0.149017;0.947605;, + -0.841467;-0.090092;0.532745;, + -0.788033;-0.596961;0.150471;, + -0.281499;-0.319000;0.904985;, + -0.196716;-0.369433;0.908197;, + -0.161057;0.188926;0.968694;, + -0.117921;0.367554;0.922496;, + -0.165544;0.271340;0.948140;, + -0.448479;-0.324300;0.832884;, + -0.373171;-0.182007;0.909735;, + -0.585369;-0.257475;0.768797;, + -0.646693;-0.180851;0.741000;, + -0.433896;-0.034239;0.900312;, + -0.544015;0.013208;0.838971;, + -0.625281;0.038322;0.779458;, + -0.369810;0.339166;0.864990;, + -0.204468;0.130905;0.970081;, + -0.120885;-0.263543;0.957043;, + -0.337644;-0.437144;0.833607;, + -0.578208;-0.404603;0.708500;, + -0.370647;-0.182064;0.910754;, + -0.290198;-0.101172;0.951603;, + -0.376940;-0.512489;0.771538;, + -0.368633;-0.522608;0.768759;, + -0.486995;-0.560041;0.670216;, + -0.278178;-0.381573;0.881487;, + -0.075087;-0.187485;0.979393;, + -0.067375;0.165266;0.983945;, + -0.074430;0.262323;0.962105;, + 0.123594;0.167946;0.978018;, + 0.073851;0.127234;0.989120;, + -0.922972;-0.305031;0.234690;, + -0.940045;-0.272592;0.204959;, + -0.942479;-0.228737;0.243746;, + -0.916339;-0.265300;0.299899;, + -0.855199;-0.298439;0.423756;, + -0.762216;-0.394376;0.513317;, + -0.591911;-0.483389;0.644962;, + -0.696085;-0.423324;0.579881;, + -0.793967;-0.433457;0.426300;, + -0.881668;-0.367645;0.295802;, + -0.919076;-0.289884;0.266959;, + -0.896238;-0.324230;0.302709;, + -0.875589;-0.290272;0.386116;, + -0.837502;-0.227848;0.496665;, + -0.720126;0.080544;0.689153;, + -0.681826;0.051070;0.729729;, + -0.541528;0.261668;0.798923;, + -0.412827;0.304371;0.858448;, + -0.544132;0.538485;0.643393;, + -0.766691;0.438289;0.469135;, + -0.727958;0.390427;0.563599;, + -0.713113;0.317666;0.624947;, + -0.568038;-0.171249;0.804989;, + -0.614593;-0.512301;0.599852;, + -0.324992;-0.273417;0.905330;, + -0.325078;-0.097406;0.940657;, + -0.427217;0.076319;0.900922;, + -0.776082;0.381416;0.502213;, + -0.672565;0.634444;0.380968;, + -0.608698;0.697609;0.377927;, + -0.527897;0.632893;0.566367;, + -0.603113;0.411655;0.683224;, + -0.313344;0.022068;0.949383;, + -0.231524;-0.066876;0.970528;, + -0.168915;0.015046;0.985516;, + -0.221507;-0.014091;0.975057;, + -0.641279;-0.037093;-0.766410;, + -0.703969;-0.213682;-0.677324;, + -0.536901;-0.391985;-0.747051;, + -0.249177;0.220454;0.943033;, + -0.581291;0.278155;0.764677;, + -0.999289;-0.036353;-0.009963;, + -0.980048;-0.042446;-0.194177;, + -0.915136;0.144087;0.376517;, + -0.891750;0.158913;0.423707;, + -0.938708;0.033166;0.343115;, + -0.828350;0.374825;0.416345;, + -0.780750;0.319185;0.537169;, + -0.755930;0.332141;0.564138;, + -0.617201;0.537677;0.574427;, + -0.677696;0.597263;0.428958;, + -0.719767;-0.501742;0.479782;, + -0.506828;-0.552613;0.661622;, + -0.280970;-0.686116;0.671044;, + -0.292440;-0.656510;0.695323;, + -0.545799;-0.705691;0.451778;, + -0.967562;-0.216680;0.129901;, + -0.902540;-0.358906;0.237926;, + -0.767894;-0.587008;-0.256438;, + -0.649296;-0.476465;-0.592786;, + -0.838696;-0.334311;-0.429913;, + -0.596950;0.129505;0.791757;, + -0.784941;0.297168;0.543653;, + -0.720007;0.579195;0.382260;, + -0.583842;0.689444;0.428713;, + -0.529134;0.371967;0.762664;, + -0.395432;0.106411;0.912310;, + -0.447528;0.159246;0.879977;, + -0.407621;0.029059;0.912689;, + -0.490926;-0.004529;0.871189;, + -0.502973;0.024472;0.863955;, + -0.333013;-0.145713;0.931595;, + -0.207654;-0.252851;0.944958;, + -0.240287;-0.513231;0.823927;, + -0.450979;-0.500707;0.738857;, + -0.471005;-0.228916;0.851911;, + -0.842645;0.074691;0.533264;, + -0.816604;0.149701;0.557447;, + -0.737941;-0.003814;0.674855;, + -0.624475;-0.079418;0.776996;, + -0.702800;-0.238155;0.670339;, + -0.742410;-0.287823;0.604968;, + -0.834300;-0.079963;0.545482;, + -0.604495;0.234318;0.761367;, + -0.597482;0.269303;0.755308;, + -0.733246;0.420582;0.534286;, + -0.770729;0.354878;0.529187;, + -0.633754;0.199721;0.747307;, + -0.297362;-0.358005;0.885104;, + -0.394508;-0.419178;0.817712;, + -0.387859;-0.471158;0.792196;, + -0.360382;-0.488667;0.794563;, + -0.242655;-0.150104;0.958430;, + -0.204607;0.076638;0.975839;, + -0.075224;0.067895;0.994853;, + -0.072401;-0.157753;0.984821;, + -0.133760;-0.197065;0.971223;, + -0.421526;-0.376333;0.825039;, + -0.113815;0.102436;0.988207;, + -0.159036;0.237863;0.958190;, + -0.363394;-0.347889;0.864244;, + -0.340875;-0.250973;0.905990;, + -0.219814;-0.109322;0.969397;, + -0.110721;-0.227332;0.967502;, + -0.265841;0.064822;0.961835;, + -0.260969;0.257763;0.930297;, + -0.225523;0.367916;0.902096;, + -0.204636;0.250687;0.946192;, + -0.308536;-0.035566;0.950548;, + -0.280865;-0.155167;0.947121;, + -0.110123;-0.025715;0.993585;, + -0.225990;0.073774;0.971332;, + -0.317850;0.048584;0.946896;, + -0.286787;0.050884;0.956642;, + -0.135234;-0.128575;0.982436;, + -0.098581;0.034918;0.994516;, + -0.124352;-0.098909;0.987296;, + -0.027583;0.019128;0.999436;, + -0.990331;0.017071;0.137667;, + -0.973450;-0.198124;0.114640;, + -0.717508;-0.023630;0.696149;, + -0.990362;-0.013131;0.137880;, + -0.815899;-0.068843;0.574082;, + -0.919591;0.065600;0.387362;, + -0.964646;0.236442;-0.116421;, + -0.989021;0.026042;-0.145459;, + -0.960207;-0.224177;-0.166577;, + 0.341914;0.604075;-0.719853;, + 0.241749;0.480642;-0.842935;, + 0.136048;0.087503;-0.986830;, + -0.982644;0.096174;0.158626;, + -0.984714;0.084891;0.152090;, + -0.991473;0.037463;0.124814;, + -0.996531;0.005498;0.083044;, + -0.995489;-0.011539;0.094178;, + 0.157896;-0.099878;-0.982391;, + 0.117619;-0.172655;-0.977935;, + -0.023180;-0.471546;-0.881537;, + -0.642136;-0.415229;-0.644396;, + -0.985193;-0.114772;0.127367;, + -0.993842;-0.033310;0.105682;, + -0.840599;0.446641;0.306441;, + -0.751975;0.132709;0.645695;, + -0.940162;-0.115533;0.320542;, + -0.950011;-0.074948;-0.303088;, + -0.993523;-0.078642;0.082022;, + -0.991151;0.039768;-0.126645;, + -0.994943;0.013556;-0.099526;, + -0.485395;-0.513452;-0.707643;, + -0.229693;-0.529630;-0.816537;, + -0.295188;-0.242851;-0.924060;, + -0.210467;-0.041045;-0.976739;, + 0.040312;0.039373;-0.998411;, + -0.151436;0.353247;-0.923192;, + -0.835409;0.275429;-0.475637;, + -0.991667;-0.120179;-0.046409;, + -0.908512;0.062801;-0.413114;, + 0.083516;-0.876226;0.474609;, + -0.924920;-0.380144;0.003835;, + -0.947722;-0.049450;0.315243;, + -0.412440;-0.292679;0.862689;, + 0.402210;0.838808;-0.366918;, + 0.353181;0.729221;-0.586089;, + -0.198901;0.958333;-0.205027;, + -0.944823;0.308675;-0.109675;, + -0.884493;-0.444527;0.141662;, + -0.862185;0.430269;-0.267406;, + 0.013499;0.694024;-0.719825;, + 0.243556;0.731189;-0.637214;, + 0.197513;0.873282;-0.445384;, + -0.894910;-0.105076;-0.433700;, + -0.436112;-0.188372;-0.879956;, + -0.364055;-0.473683;-0.801928;, + -0.948565;-0.199078;-0.246157;, + -0.983673;-0.040697;-0.175301;, + -0.146382;-0.629542;-0.763052;, + 0.096478;-0.559529;-0.823176;, + 0.011927;-0.262782;-0.964781;, + -0.155590;-0.145800;-0.977003;, + -0.465377;-0.324842;-0.823348;, + -0.755154;-0.384266;-0.531113;, + -0.133038;-0.902773;-0.409025;, + 0.312386;-0.697431;-0.644985;, + 0.031574;-0.305537;-0.951657;, + -0.104452;-0.154902;-0.982393;, + -0.562599;-0.284042;-0.776403;, + -0.604821;-0.388772;-0.695017;, + -0.655051;-0.290024;-0.697707;, + -0.745770;-0.205337;-0.633769;, + -0.250413;-0.254174;-0.934178;, + 0.041562;-0.583144;-0.811305;, + -0.805809;-0.543792;0.234439;, + -0.782100;-0.570279;0.251199;, + -0.467073;-0.873594;-0.136662;, + -0.337534;-0.853552;-0.396886;, + -0.531094;-0.706015;-0.468489;, + -0.807521;-0.589785;0.008036;, + -0.602368;-0.756955;0.253322;, + -0.615086;-0.386827;0.687047;, + -0.238496;-0.799571;0.551186;, + -0.108202;-0.994107;-0.006522;, + -0.125377;-0.986922;-0.101321;, + -0.994704;0.028536;-0.098745;, + -0.987761;0.119054;-0.100772;, + -0.795270;0.185639;-0.577134;, + -0.767636;-0.389543;-0.508912;, + -0.833821;-0.284781;0.472909;, + -0.441591;0.115885;0.889701;, + -0.780037;0.083871;0.620087;, + -0.979289;0.016954;0.201754;, + -0.923625;-0.293416;-0.246623;, + -0.398686;-0.661959;-0.634713;, + -0.527934;-0.707186;-0.470290;, + -0.993981;0.072042;0.082538;, + -0.966193;0.076246;0.246286;, + -0.900595;0.023678;0.434013;, + -0.459569;0.109067;-0.881420;, + -0.609266;0.169694;-0.774596;, + -0.918178;0.118657;-0.377982;, + -0.473589;0.230470;-0.850057;, + -0.211760;0.199717;-0.956698;, + 0.270304;0.211165;-0.939332;, + -0.757123;0.021836;0.652907;, + -0.275522;0.128453;0.952674;, + -0.989453;0.037270;0.139976;, + -0.985345;0.075214;0.153095;, + -0.551796;-0.574616;-0.604431;, + -0.618692;-0.292564;-0.729127;, + -0.619769;0.060159;0.782475;, + -0.464479;-0.316670;0.827030;, + -0.372076;-0.368062;0.852109;, + -0.335690;-0.341328;0.877957;, + -0.285852;0.046274;0.957156;, + -0.355919;0.171383;0.918667;, + -0.723480;0.060884;0.687656;, + -0.814232;0.061779;0.577242;, + -0.886198;-0.021061;0.462827;, + -0.574120;-0.035273;0.818011;, + -0.243173;0.255052;0.935850;, + -0.418313;0.238912;0.876319;, + -0.255998;0.077691;0.963550;, + -0.261345;0.340963;0.903019;, + -0.153140;0.531302;0.833226;, + -0.004476;-0.270980;0.962575;, + -0.119564;-0.240178;0.963337;, + -0.327186;-0.256872;0.909377;, + -0.359013;-0.037721;0.932570;, + -0.047590;0.027451;0.998490;, + 0.022833;0.095235;0.995193;, + -0.377306;-0.316942;0.870166;, + -0.316548;-0.333267;0.888105;, + -0.477778;0.346040;0.807456;, + -0.323246;0.228712;0.918261;, + -0.376991;-0.033966;0.925594;, + -0.487857;-0.060488;0.870825;, + -0.761142;0.077824;0.643899;, + -0.720495;0.311094;0.619764;, + -0.524578;-0.521170;0.673201;, + -0.394926;-0.548853;0.736746;, + -0.356540;-0.270657;0.894217;, + -0.495468;-0.323313;0.806213;, + -0.463451;0.231939;0.855229;, + -0.256676;-0.425986;0.867556;, + -0.257064;-0.717534;0.647351;, + -0.264882;-0.777358;0.570571;, + -0.736052;0.062723;0.674013;, + -0.102010;0.499266;0.860423;, + 0.150316;0.449108;0.880743;, + 0.111995;0.138436;0.984019;, + -0.367057;-0.255284;0.894483;, + -0.278556;-0.296929;0.913367;, + -0.225628;0.375599;0.898898;, + -0.508485;-0.316227;0.800902;, + -0.840384;-0.146036;0.521946;, + -0.606247;0.434214;0.666275;, + -0.283006;0.307167;0.908601;, + -0.385943;-0.260360;0.885020;, + -0.221460;-0.237371;0.945839;, + -0.291186;-0.238537;0.926451;, + -0.160623;0.266772;0.950280;, + -0.283084;0.054206;0.957562;, + -0.282781;0.044475;0.958153;, + -0.135725;-0.254987;0.957371;, + -0.205252;0.312404;0.927510;, + -0.246128;0.432303;0.867488;, + -0.112957;-0.187289;0.975789;, + -0.531997;-0.340199;0.775399;, + -0.207669;-0.717728;0.664635;, + -0.470701;0.239290;0.849224;, + -0.660192;0.366644;0.655530;, + -0.098482;0.067836;0.992824;, + -0.227864;0.179884;0.956933;, + -0.333711;0.277181;0.901004;, + -0.304277;-0.311038;0.900372;, + -0.223441;-0.620814;0.751442;, + -0.478361;-0.492783;0.726868;, + -0.524366;-0.091050;0.846611;, + -0.371514;-0.104033;0.922580;, + -0.291101;0.296117;0.909711;, + -0.216517;0.601928;0.768637;, + -0.765717;0.109372;0.633811;, + -0.176319;-0.181296;0.967493;, + -0.237549;0.171176;0.956174;, + -0.290228;0.134824;0.947413;, + -0.292418;0.016174;0.956154;, + -0.352538;-0.172693;0.919725;, + -0.290964;-0.200100;0.935575;, + -0.909284;-0.286981;0.301404;, + -0.860343;-0.416762;0.293459;, + -0.527449;-0.725822;0.441566;, + -0.192717;-0.752991;0.629178;, + -0.413665;-0.662196;0.624803;, + -0.782661;-0.436604;0.443643;, + -0.739736;-0.304424;0.600097;, + -0.419309;-0.612197;0.670369;, + -0.178542;-0.532663;0.827280;, + -0.307625;-0.164296;0.937216;, + -0.692050;0.067912;0.718648;, + -0.773362;-0.044449;0.632405;, + -0.701142;0.222645;0.677370;, + -0.343154;0.141029;0.928631;, + -0.086339;0.227970;0.969832;, + -0.233405;0.474742;0.848612;, + -0.772564;0.372095;0.514481;, + -0.862219;0.333573;0.381192;, + -0.487320;0.574617;0.657522;, + -0.404061;0.641958;0.651632;, + -0.313427;0.711856;0.628510;, + -0.874726;0.363852;0.320104;, + -0.908715;0.258689;0.327593;, + -0.872452;0.309571;0.378146;, + -0.994626;0.037375;0.096552;, + -0.971560;0.138241;0.192251;, + -0.984564;0.133388;0.113322;, + -0.990615;0.053638;0.125719;, + -0.992423;-0.070546;-0.100601;, + -0.981912;-0.082005;-0.170656;, + 0.108071;-0.116143;0.987336;, + -0.797789;0.037538;0.601767;, + -0.920796;0.066458;0.384342;, + -0.928255;0.072027;0.364903;, + -0.930240;0.046030;0.364053;, + -0.415124;-0.114103;0.902581;, + -0.106608;-0.130975;0.985637;, + -0.933404;-0.160810;-0.320776;, + -0.736619;0.210971;-0.642560;, + -0.542357;0.242229;-0.804471;, + -0.523618;-0.179358;-0.832859;, + -0.870587;-0.276500;-0.406972;, + -0.922853;-0.232871;-0.306778;, + -0.901311;-0.421112;-0.101504;, + -0.851667;-0.383724;-0.356959;, + -0.545095;-0.326982;-0.771981;, + -0.333063;-0.417249;-0.845560;, + -0.554572;-0.744477;-0.371758;, + -0.863997;-0.496842;0.081586;, + -0.969478;-0.059688;-0.237801;, + -0.923894;-0.017241;-0.382259;, + -0.945693;-0.072099;-0.316964;, + -0.728538;0.351876;-0.587721;, + -0.723866;0.286506;-0.627640;, + -0.930880;-0.167827;-0.324496;, + -0.959100;-0.011290;-0.282843;, + -0.938731;0.123199;-0.321879;, + -0.709700;-0.318460;-0.628417;, + -0.330597;-0.726300;-0.602656;, + -0.452113;-0.839250;-0.302082;, + -0.857815;-0.222583;-0.463260;, + -0.902102;0.133251;-0.410435;, + -0.961728;0.190595;-0.196857;, + -0.978222;0.168444;-0.121282;, + -0.662740;0.264455;-0.700599;, + -0.476309;0.136397;-0.868634;, + -0.504309;-0.221320;-0.834679;, + -0.901494;0.354920;0.247672;, + -0.525457;0.668071;0.526854;, + -0.431549;0.860523;0.270676;, + -0.461883;0.559990;-0.687804;, + -0.494105;0.296706;-0.817206;, + -0.898829;0.268320;-0.346570;, + -0.941727;0.336079;-0.014200;, + -0.963121;0.021678;0.268195;, + -0.973111;-0.228118;-0.031884;, + -0.919379;-0.216115;-0.328690;, + -0.744589;-0.666942;-0.027853;, + -0.190314;-0.795142;0.575786;, + -0.060500;-0.787818;0.612930;, + -0.441276;-0.350415;0.826126;, + -0.840007;0.268555;0.471451;, + -0.964913;0.106253;0.240112;, + -0.995174;0.032352;0.092644;, + -0.934966;0.248566;-0.253088;, + -0.961037;0.049848;-0.271888;, + -0.998822;0.028759;0.039091;, + -0.990336;-0.002167;0.138672;, + -0.519203;-0.619776;0.588478;, + -0.391770;-0.654128;0.647018;, + -0.304486;-0.716860;0.627216;, + -0.910280;-0.362455;0.200043;, + -0.920418;-0.334077;0.203034;, + -0.988204;-0.086301;0.126514;, + -0.971693;-0.063695;0.227500;, + -0.923098;-0.057285;0.380275;, + -0.488334;0.063730;0.870327;, + -0.231105;-0.031755;0.972411;, + -0.512220;-0.385547;0.767453;, + -0.933438;-0.231048;0.274427;, + -0.473499;0.583805;0.659523;, + -0.308586;0.551748;0.774822;, + -0.255754;0.295329;0.920527;, + -0.877571;0.152218;0.454641;, + -0.979923;0.112462;0.164628;, + -0.889948;0.248106;0.382669;, + -0.883469;0.360672;0.298994;, + -0.946941;0.292536;0.133139;, + -0.962565;0.225045;0.151073;, + -0.879996;0.362170;0.307310;, + -0.453901;0.679771;0.576094;, + -0.231858;0.768436;0.596446;, + -0.521367;0.619633;0.586713;, + -0.987626;-0.156503;0.010098;, + -0.950732;-0.158522;-0.266418;, + -0.559545;-0.268517;-0.784097;, + -0.547278;-0.203637;-0.811799;, + -0.555973;0.130853;-0.820836;, + -0.983075;-0.050169;-0.176203;, + -0.589184;-0.777856;0.218638;, + -0.173867;-0.956818;0.232956;, + -0.412436;-0.546600;-0.728783;, + -0.867346;-0.396857;-0.300360;, + -0.999127;0.006755;-0.041222;, + -0.737443;0.369253;-0.565534;, + -0.294691;0.557341;-0.776227;, + -0.702347;0.471707;-0.533105;, + -0.999253;0.038278;0.005340;, + -0.208681;-0.785150;-0.583088;, + -0.214903;-0.821849;-0.527618;, + -0.174480;-0.970501;-0.166386;, + -0.133487;-0.990413;0.035549;, + -0.146752;-0.878664;-0.454328;, + -0.159714;-0.112935;-0.980682;, + -0.114641;0.109429;-0.987361;, + -0.097975;0.047333;-0.994063;, + -0.155868;-0.350626;-0.923454;, + -0.161498;-0.608488;-0.776956;, + -0.174065;-0.534580;-0.826998;, + -0.963396;0.255594;-0.080872;, + -0.495971;0.499732;-0.710127;, + -0.391198;0.918452;-0.058392;, + -0.910511;0.383051;0.155695;, + -0.801319;0.421929;0.424102;, + -0.173816;0.424341;0.888663;, + 0.132056;0.386729;0.912689;, + -0.059642;0.521187;0.851356;, + -0.717995;0.461191;0.521331;, + -0.963654;0.185646;0.192113;, + -0.826151;0.456218;0.330667;, + -0.202592;0.794997;0.571784;, + 0.122156;0.828715;0.546178;, + -0.156667;0.773674;0.613909;, + -0.783959;0.522880;0.334672;, + -0.247328;0.278644;-0.928001;, + -0.514676;0.484402;-0.707434;, + -0.221209;0.975219;-0.003702;, + 0.152157;0.982339;-0.108898;, + -0.086863;0.565088;-0.820445;, + -0.120370;0.286062;-0.950621;, + -0.217075;0.288626;-0.932509;, + -0.046481;0.258131;0.964991;, + 0.086883;0.146423;0.985399;, + -0.126526;-0.572079;0.810381;, + -0.678205;-0.266807;0.684728;, + -0.390094;-0.893060;0.224213;, + -0.215648;-0.938949;0.268088;, + -0.426159;-0.836851;-0.343610;, + -0.891225;-0.365388;-0.268717;, + -0.922702;-0.380591;0.061411;, + -0.479805;-0.561201;-0.674419;, + -0.263961;-0.572476;-0.776271;, + -0.401044;-0.160466;-0.901895;, + -0.812645;0.076717;-0.577688;, + -0.985268;-0.013185;-0.170509;, + -0.929545;-0.091642;-0.357137;, + -0.706692;0.408356;0.577781;, + -0.971905;0.201947;0.120901;, + -0.780984;0.429796;0.453144;, + -0.101385;0.740749;0.664088;, + 0.112055;0.771742;0.625986;, + -0.063776;0.461704;0.884738;, + -0.644377;0.580936;0.497285;, + -0.726201;0.594292;0.345614;, + -0.064509;0.887130;0.456988;, + 0.151722;0.889454;0.431106;, + 0.004774;0.752502;0.658573;, + -0.180513;0.319591;-0.930202;, + -0.071812;0.376860;-0.923482;, + -0.055318;0.875614;-0.479834;, + -0.604713;0.765248;-0.220720;, + -0.947576;-0.246188;0.203695;, + -0.945100;-0.267159;0.188180;, + -0.929894;-0.301728;0.210374;, + -0.938122;-0.247356;0.242367;, + -0.948037;-0.205364;0.243004;, + -0.982289;0.005861;0.187281;, + -0.970327;0.034796;0.239279;, + -0.821069;-0.164374;0.546650;, + -0.788342;-0.076790;0.610426;, + -0.948825;-0.033448;0.314026;, + -0.984684;-0.100876;0.142201;, + -0.990691;-0.060390;0.122001;, + -0.991477;-0.014669;0.129452;, + -0.977761;-0.074429;0.196069;, + -0.968921;-0.148629;0.197740;, + -0.963259;-0.202188;0.176785;, + -0.965124;-0.190436;0.179640;, + -0.996668;-0.000055;0.081571;, + -0.992952;-0.010172;0.118079;, + -0.653195;-0.150269;0.742129;, + -0.393828;-0.197542;0.897707;, + -0.986199;-0.027926;0.163190;, + -0.698788;-0.183747;0.691326;, + -0.477199;-0.092968;0.873864;, + -0.408888;-0.121595;0.904447;, + -0.383912;-0.053672;0.921808;, + -0.668225;-0.119696;0.734267;, + -0.707558;-0.149489;0.690662;, + -0.333263;0.082750;0.939196;, + -0.380632;0.065214;0.922424;, + -0.424222;0.027945;0.905127;, + -0.344899;-0.178549;0.921501;, + -0.228579;-0.246387;0.941831;, + -0.295296;-0.069069;0.952906;, + -0.351717;0.069372;0.933532;, + -0.150503;0.003474;0.988603;, + 0.100381;-0.018321;0.994780;, + 0.184877;0.074293;0.979949;, + 0.196102;0.167844;0.966112;, + -0.150811;0.174292;0.973077;, + -0.204636;0.123817;0.970976;, + -0.230074;0.372461;0.899077;, + -0.506615;0.220020;0.833626;, + -0.303228;0.319910;0.897613;, + 0.259931;0.297731;0.918581;, + 0.467914;0.186614;0.863847;, + 0.291782;0.351503;0.889555;, + 0.135206;-0.197296;0.970976;, + -0.056462;-0.303649;0.951110;, + -0.259365;-0.317494;0.912101;, + -0.300044;-0.323635;0.897348;, + -0.158828;0.184032;0.970003;, + -0.232666;0.262793;0.936379;, + -0.328859;0.141047;0.933787;, + -0.388761;0.111134;0.914611;, + -0.320469;0.119524;0.939688;, + -0.241856;-0.015663;0.970186;, + -0.206723;0.090179;0.974235;, + -0.214559;0.312331;0.925426;, + -0.214040;0.335101;0.917548;, + -0.175599;0.167179;0.970163;, + -0.207314;0.342570;0.916333;, + -0.204677;0.145172;0.968004;, + -0.267360;0.048646;0.962368;, + -0.242820;0.143189;0.959445;, + -0.216371;0.266677;0.939184;, + -0.191125;0.333044;0.923338;, + -0.546439;0.124024;0.828265;, + -0.421343;0.043606;0.905852;, + -0.710324;-0.088882;0.698241;, + -0.759262;-0.042020;0.649427;, + 0.457664;-0.046073;0.887931;, + 0.415472;-0.131980;0.899980;, + 0.601990;-0.320637;0.731300;, + 0.732447;-0.463382;0.498797;, + 0.796203;-0.311752;0.518528;, + 0.618889;-0.216199;0.755138;, + 0.650858;-0.279521;-0.705870;, + 0.627769;-0.641265;-0.441233;, + 0.881339;-0.465948;0.078326;, + 0.928462;-0.263842;0.261431;, + 0.964094;-0.165413;0.207751;, + 0.924341;-0.229764;-0.304633;, + 0.927430;-0.166498;0.334890;, + 0.883252;-0.199217;0.424473;, + 0.843025;-0.193507;0.501860;, + 0.834563;-0.142862;0.532067;, + 0.847343;-0.090185;0.523332;, + 0.859241;0.003695;0.511557;, + 0.786163;-0.008241;0.617964;, + 0.922761;-0.080766;0.376814;, + 0.964606;-0.206993;0.163368;, + 0.954750;-0.229736;0.188876;, + 0.977642;-0.134009;0.162042;, + 0.556167;-0.235673;0.796955;, + -0.566294;-0.282990;0.774098;, + -0.779621;-0.549588;0.300240;, + -0.453973;-0.875337;-0.166413;, + 0.885166;-0.437540;-0.158241;, + 0.965433;-0.004688;0.260610;, + 0.745205;-0.297817;0.596636;, + 0.383889;-0.464132;0.798255;, + 0.323830;-0.489051;0.809916;, + 0.924672;0.127786;0.358681;, + 0.983531;0.088214;0.157748;, + -0.363776;0.894300;-0.260567;, + 0.270665;0.955941;0.113652;, + 0.641266;0.188129;0.743899;, + 0.616460;-0.165561;0.769783;, + 0.677762;-0.074270;0.731521;, + 0.829313;0.074463;0.553800;, + 0.887257;0.039798;0.459556;, + 0.781695;0.234974;0.577703;, + 0.819624;0.148430;0.553340;, + 0.781224;0.181945;0.597148;, + 0.679518;-0.160347;0.715922;, + 0.771375;-0.034845;0.635426;, + 0.535532;-0.307662;0.786480;, + 0.285775;0.030248;0.957819;, + 0.817277;0.454475;0.354275;, + 0.810140;0.435116;-0.392871;, + 0.839666;0.520528;0.154955;, + 0.709256;0.641012;0.293361;, + 0.614890;0.217033;0.758160;, + 0.420168;0.159950;0.893238;, + 0.483411;0.190762;0.854356;, + 0.360033;0.104427;0.927077;, + 0.286110;0.137586;0.948268;, + 0.070070;0.358867;0.930755;, + 0.165214;0.238175;0.957067;, + 0.196627;-0.192079;0.961480;, + 0.247128;-0.341305;0.906884;, + 0.643177;-0.541832;0.541056;, + 0.809334;-0.483823;-0.333007;, + 0.218364;0.254619;0.942065;, + 0.396152;0.003364;0.918179;, + 0.609373;-0.153995;0.777786;, + 0.663145;-0.277587;0.695115;, + 0.382906;-0.177032;0.906666;, + 0.413901;-0.346606;0.841754;, + 0.585242;-0.040809;0.809831;, + 0.626492;0.149889;0.764880;, + 0.412419;-0.359405;0.837102;, + 0.144547;-0.399892;0.905093;, + 0.214707;0.074209;0.973855;, + 0.235312;0.330449;0.914019;, + 0.402156;-0.544015;0.736423;, + 0.349444;-0.577169;0.738081;, + 0.335755;-0.089838;0.937655;, + 0.309502;-0.188143;0.932100;, + 0.531786;-0.357341;0.767796;, + 0.532413;-0.519111;0.668625;, + 0.198806;-0.407566;0.891272;, + 0.050237;0.021161;0.998513;, + -0.154151;0.164731;0.974218;, + 0.014259;0.242570;0.970029;, + 0.101190;0.244238;0.964421;, + 0.075895;-0.122424;0.989572;, + 0.926394;-0.303016;0.223553;, + 0.916339;-0.265300;0.299899;, + 0.941193;-0.231274;0.246311;, + 0.942736;-0.258883;0.210308;, + 0.872017;-0.277751;0.403040;, + 0.891387;-0.329329;0.311403;, + 0.920623;-0.287190;0.264530;, + 0.888242;-0.359291;0.286246;, + 0.823502;-0.420165;0.381189;, + 0.712448;-0.424274;0.558935;, + 0.572964;-0.461769;0.677112;, + 0.734110;-0.436861;0.519842;, + 0.859424;-0.304858;0.410430;, + 0.820103;-0.223413;0.526800;, + 0.694020;0.045381;0.718524;, + 0.732903;0.294085;0.613487;, + 0.704924;0.372480;0.603606;, + 0.767741;0.423284;0.481046;, + 0.610611;0.550799;0.569012;, + 0.428564;0.378854;0.820246;, + 0.528841;0.287979;0.798370;, + 0.657818;0.087537;0.748073;, + 0.585630;-0.275362;0.762373;, + 0.487759;0.040891;0.872020;, + 0.366793;-0.058552;0.928458;, + 0.300364;-0.225631;0.926754;, + 0.529462;-0.449192;0.719651;, + 0.530125;0.561389;0.635461;, + 0.592261;0.685382;0.423648;, + 0.622463;0.688709;0.371779;, + 0.792469;0.431830;0.430715;, + 0.631199;0.391605;0.669503;, + 0.299096;0.239203;0.923755;, + 0.820659;-0.346212;-0.454594;, + 0.626383;-0.271076;-0.730864;, + 0.638572;-0.117365;-0.760560;, + 0.788158;0.351005;0.505571;, + 0.200084;-0.052108;0.978392;, + 0.246747;-0.051308;0.967721;, + 0.295036;-0.000370;0.955486;, + 0.509111;0.214011;0.833670;, + 0.902799;0.118400;0.413443;, + 0.910089;0.167693;0.378969;, + 0.999735;0.022967;0.001488;, + 0.996072;-0.042387;-0.077740;, + 0.968689;-0.002135;0.248269;, + 0.832590;0.320635;0.451650;, + 0.730488;0.555207;0.397659;, + 0.597202;0.573938;0.560308;, + 0.720968;0.387938;0.574203;, + 0.775558;0.322202;0.542858;, + 0.694246;-0.474535;0.541146;, + 0.644048;-0.677994;0.354297;, + 0.306835;-0.637411;0.706795;, + 0.266653;-0.673114;0.689793;, + 0.448030;-0.595143;0.667138;, + 0.953942;-0.228941;0.193855;, + 0.938814;-0.254695;-0.231861;, + 0.681733;-0.472937;-0.558184;, + 0.645724;-0.571945;-0.505885;, + 0.884756;-0.428469;0.183360;, + 0.649040;0.135351;0.748617;, + 0.529791;0.315074;0.787432;, + 0.553748;0.630029;0.544451;, + 0.678128;0.634870;0.370248;, + 0.796340;0.360973;0.485325;, + 0.510516;-0.005648;0.859850;, + 0.416079;0.034303;0.908681;, + 0.410099;0.086002;0.907977;, + 0.420062;0.136052;0.897239;, + 0.478583;0.042049;0.877035;, + 0.504686;-0.416381;0.756253;, + 0.267406;-0.542263;0.796520;, + 0.189664;-0.341747;0.920454;, + 0.305752;-0.160267;0.938525;, + 0.443105;-0.186385;0.876880;, + 0.785203;-0.238678;0.571392;, + 0.702825;-0.257963;0.662942;, + 0.632744;-0.132306;0.762974;, + 0.707627;-0.023756;0.706187;, + 0.823076;0.132453;0.552270;, + 0.827196;0.109153;0.551210;, + 0.840927;-0.044262;0.539336;, + 0.764042;0.302636;0.569781;, + 0.742909;0.415406;0.524903;, + 0.699619;0.385348;0.601698;, + 0.578906;0.224993;0.783739;, + 0.590168;0.194655;0.783461;, + 0.302061;-0.359334;0.882971;, + 0.349642;-0.508600;0.786814;, + 0.384855;-0.464307;0.797688;, + 0.416260;-0.438975;0.796259;, + 0.099726;-0.233237;0.967293;, + 0.048634;0.031907;0.998307;, + 0.180176;0.105444;0.977966;, + 0.252687;-0.100086;0.962358;, + 0.155669;-0.183842;0.970551;, + 0.411002;-0.338944;0.846282;, + 0.383695;-0.396116;0.834188;, + 0.249542;0.061763;0.966392;, + -0.016457;0.327055;0.944862;, + 0.224850;0.215443;0.950277;, + 0.196803;0.368723;0.908467;, + 0.250180;0.310646;0.917011;, + 0.277343;0.101996;0.955342;, + 0.152847;-0.155989;0.975861;, + 0.195391;-0.110401;0.974492;, + 0.305812;-0.230212;0.923841;, + 0.368641;-0.213324;0.904763;, + 0.330326;-0.205628;0.921196;, + 0.041593;0.020366;0.998927;, + 0.105429;-0.086429;0.990664;, + 0.129328;0.092742;0.987255;, + 0.068386;-0.183487;0.980641;, + 0.278092;0.030516;0.960070;, + 0.303773;0.055120;0.951149;, + 0.271522;0.061913;0.960439;, + 0.081953;0.023311;0.996364;, + 0.990331;0.017071;0.137667;, + 0.953548;-0.160770;0.254755;, + 0.955059;-0.249767;-0.159623;, + 0.989051;-0.010385;-0.147209;, + 0.968564;0.208434;-0.135792;, + 0.962753;0.114072;0.245141;, + 0.744378;-0.064698;0.664617;, + 0.986376;-0.020071;0.163278;, + 0.669899;-0.004795;0.742437;, + -0.235778;0.425628;-0.873642;, + -0.220215;0.603569;-0.766296;, + 0.417851;0.563338;-0.712777;, + -0.117525;0.013779;-0.992974;, + 0.982667;0.097694;0.157550;, + 0.995367;-0.011631;0.095439;, + 0.996248;-0.000196;0.086542;, + 0.993018;0.025522;0.115170;, + 0.985216;0.087350;0.147373;, + 0.723129;-0.344431;-0.598709;, + 0.154335;-0.521647;-0.839086;, + -0.133014;-0.196421;-0.971456;, + -0.156278;-0.099901;-0.982648;, + 0.783722;0.054151;0.618747;, + 0.800117;0.416289;0.431874;, + 0.984353;0.134697;0.113601;, + 0.979461;-0.119954;0.162070;, + 0.979140;-0.146299;0.141004;, + 0.991670;-0.062397;0.112684;, + 0.457966;-0.192146;-0.867956;, + 0.237393;-0.461566;-0.854752;, + 0.286927;-0.568203;-0.771244;, + 0.948440;-0.169360;-0.267917;, + 0.986431;0.066300;-0.150194;, + 0.998816;-0.041285;0.025724;, + 0.997505;-0.067738;-0.019863;, + 0.977410;0.022278;-0.210173;, + 0.251890;0.415533;-0.874004;, + -0.049975;0.093433;-0.994371;, + 0.097770;-0.050793;-0.993912;, + 0.766098;0.059984;-0.639918;, + 0.884732;-0.053391;0.463033;, + 0.961439;-0.267549;0.063666;, + 0.356172;-0.920978;0.157925;, + 0.137541;-0.415914;0.898943;, + 0.601662;0.572761;-0.556730;, + -0.202958;0.734881;-0.647115;, + -0.398591;0.825562;-0.399465;, + 0.467679;0.871282;-0.148809;, + -0.170588;0.897489;-0.406710;, + -0.258260;0.761324;-0.594717;, + -0.103593;0.680661;-0.725237;, + 0.665282;0.581928;-0.467718;, + 0.906891;-0.362904;0.214125;, + 0.986874;0.076429;-0.142259;, + 0.748399;-0.135655;-0.649228;, + 0.972144;-0.068447;-0.224170;, + 0.994963;-0.047062;-0.088507;, + 0.528323;-0.487037;-0.695464;, + 0.335614;-0.233313;-0.912649;, + 0.007851;-0.660221;-0.751031;, + 0.455960;-0.390419;-0.799796;, + 0.279711;-0.160851;-0.946514;, + -0.004749;-0.220237;-0.975435;, + -0.084670;-0.487141;-0.869209;, + 0.247045;-0.169890;-0.953995;, + 0.006335;-0.246126;-0.969217;, + -0.214712;-0.642232;-0.735824;, + -0.275438;-0.893885;-0.353699;, + 0.710787;-0.466778;-0.526214;, + 0.633158;-0.292738;-0.716530;, + 0.618095;-0.351774;-0.703004;, + 0.147006;-0.604143;-0.783199;, + 0.088495;-0.303567;-0.948692;, + 0.682342;-0.196035;-0.704258;, + 0.643874;-0.292915;-0.706843;, + 0.663539;-0.666241;-0.340352;, + 0.373002;-0.795669;-0.477263;, + 0.420448;-0.891526;-0.168539;, + 0.723608;-0.669946;0.166023;, + 0.799573;-0.544703;0.252945;, + 0.813432;-0.577021;0.073316;, + 0.073674;-0.995832;-0.053775;, + 0.193201;-0.890421;0.412097;, + 0.557281;-0.410177;0.721937;, + 0.626008;-0.721638;0.295555;, + 0.253351;-0.965876;-0.053822;, + 0.996795;0.059173;-0.053828;, + 0.870487;-0.276909;-0.406907;, + 0.718742;0.207815;-0.663493;, + 0.972577;0.124346;-0.196549;, + 0.360242;-0.674562;-0.644354;, + 0.831536;-0.420486;-0.362960;, + 0.992970;0.009011;0.118019;, + 0.832630;0.062414;0.550302;, + 0.429350;0.141609;0.891967;, + 0.772381;-0.152248;0.616642;, + 0.619530;-0.709222;-0.336434;, + 0.868190;-0.002769;0.496225;, + 0.955968;0.074254;0.283920;, + 0.993664;0.087718;0.070268;, + 0.944767;0.116170;-0.306464;, + 0.737612;0.161042;-0.655740;, + 0.449994;0.091497;-0.888332;, + 0.445506;0.217708;-0.868405;, + -0.291086;0.220952;-0.930833;, + 0.064085;0.200510;-0.977593;, + 0.166541;0.103506;0.980587;, + 0.694153;0.049571;0.718118;, + 0.988650;0.046011;0.143017;, + 0.984565;0.081079;0.155104;, + 0.893652;0.299498;-0.334196;, + 0.618693;-0.292564;-0.729127;, + 0.551796;-0.574616;-0.604431;, + 0.251449;0.254655;0.933769;, + 0.329189;-0.298075;0.895983;, + 0.374162;-0.369333;0.850644;, + 0.394027;-0.385974;0.834126;, + 0.629716;-0.045172;0.775511;, + 0.414482;0.150122;0.897590;, + 0.752482;0.042277;0.657254;, + 0.497044;0.192697;0.846059;, + 0.233967;0.315946;0.919477;, + 0.509045;0.023685;0.860414;, + 0.837737;-0.103276;0.536219;, + 0.825693;0.084952;0.557686;, + 0.037052;-0.285163;0.957763;, + 0.072545;0.261091;0.962584;, + 0.254955;0.442961;0.859525;, + 0.279810;0.168723;0.945113;, + 0.138900;-0.213260;0.967071;, + 0.368508;-0.334070;0.867525;, + 0.140609;-0.045717;0.989009;, + -0.019079;0.066742;0.997588;, + 0.299362;0.006168;0.954120;, + 0.352172;-0.219694;0.909785;, + 0.309812;-0.324424;0.893737;, + 0.805112;0.138732;0.576669;, + 0.538357;-0.045396;0.841493;, + 0.380736;-0.067302;0.922231;, + 0.328487;0.183332;0.926545;, + 0.432615;0.307403;0.847554;, + 0.653253;0.367666;0.661878;, + 0.492323;-0.585442;0.644108;, + 0.502064;-0.355000;0.788610;, + 0.401739;-0.251939;0.880416;, + 0.376888;-0.493204;0.784032;, + 0.408002;0.182946;0.894464;, + 0.686633;0.144018;0.712597;, + 0.519245;-0.551574;0.652803;, + 0.241814;-0.736624;0.631594;, + 0.189975;-0.684424;0.703898;, + 0.231331;-0.089643;0.968736;, + 0.437328;-0.396663;0.807095;, + -0.019958;0.064292;0.997732;, + -0.162579;0.374547;0.912843;, + 0.021642;0.552809;0.833027;, + 0.240174;0.350884;0.905095;, + 0.590551;-0.317529;0.741907;, + 0.378809;-0.263028;0.887310;, + 0.356270;0.140360;0.923781;, + 0.292827;0.581198;0.759250;, + 0.887962;-0.080435;0.452829;, + 0.232714;-0.268412;0.934772;, + 0.270973;-0.021494;0.962347;, + 0.249117;0.137702;0.958634;, + 0.240587;0.147886;0.959295;, + 0.297294;-0.186777;0.936339;, + 0.218225;0.244375;0.944806;, + 0.222570;0.434020;0.872977;, + 0.144213;-0.238035;0.960491;, + 0.105285;-0.243661;0.964129;, + 0.499498;0.317571;0.806009;, + 0.323872;-0.438181;0.838513;, + 0.358587;-0.591042;0.722554;, + 0.709020;0.269606;0.651616;, + 0.298672;-0.579421;0.758332;, + 0.236939;-0.570878;0.786103;, + 0.348584;0.203164;0.914994;, + 0.260867;0.212941;0.941597;, + 0.097898;0.105821;0.989554;, + 0.377267;-0.289994;0.879530;, + 0.479423;0.478311;0.735780;, + 0.249071;0.370670;0.894744;, + 0.302334;0.087757;0.949154;, + 0.470067;-0.109278;0.875840;, + 0.727706;0.050030;0.684063;, + 0.159681;-0.153441;0.975171;, + 0.267587;-0.200427;0.942457;, + 0.365349;-0.233476;0.901116;, + 0.305557;-0.031119;0.951665;, + 0.278707;0.095201;0.955646;, + 0.291626;0.332066;0.897043;, + 0.501613;-0.618956;0.604382;, + 0.178903;-0.749707;0.637129;, + 0.274708;-0.796173;0.539115;, + 0.841050;-0.462941;0.279859;, + 0.915403;-0.281528;0.287713;, + 0.874537;-0.332222;0.353288;, + 0.799068;0.056915;0.598541;, + 0.406283;-0.083515;0.909923;, + 0.131733;-0.475879;0.869589;, + 0.238303;-0.649785;0.721797;, + 0.701135;-0.368935;0.610161;, + 0.788343;-0.078957;0.610149;, + 0.396116;0.496106;0.772638;, + 0.080690;0.269931;0.959493;, + 0.097838;0.136147;0.985846;, + 0.673078;0.201405;0.711620;, + 0.814615;0.305380;0.493097;, + 0.791616;0.414216;0.449188;, + 0.871315;0.302480;0.386414;, + 0.904561;0.262540;0.335921;, + 0.910079;0.308658;0.276563;, + 0.525509;0.655009;0.542957;, + 0.397477;0.642652;0.654989;, + 0.369469;0.615521;0.696152;, + 0.980166;-0.106355;-0.167220;, + 0.993832;0.046691;0.100592;, + 0.981920;0.086298;0.168479;, + 0.981368;0.156012;0.112144;, + 0.974808;0.085085;0.206180;, + 0.988089;-0.076583;-0.133471;, + 0.233487;-0.090126;0.968174;, + 0.078736;-0.116167;0.990104;, + 0.160509;-0.156800;0.974500;, + 0.853642;0.016690;0.520593;, + 0.939670;0.050263;0.338368;, + 0.923190;0.094626;0.372514;, + 0.862014;0.056065;0.503774;, + 0.936010;-0.253687;-0.243985;, + 0.608655;-0.245946;-0.754353;, + 0.523086;0.163014;-0.836545;, + 0.568395;0.375488;-0.732077;, + 0.917980;-0.141801;-0.370411;, + 0.923300;-0.237465;-0.301874;, + 0.909875;-0.400036;-0.109997;, + 0.906412;-0.421235;0.031280;, + 0.675045;-0.722669;-0.148538;, + 0.309013;-0.470378;-0.826593;, + 0.372917;-0.313993;-0.873122;, + 0.818454;-0.384125;-0.427295;, + 0.810462;0.143367;-0.567977;, + 0.626725;0.447627;-0.637844;, + 0.910464;0.049229;-0.410649;, + 0.935713;-0.058966;-0.347798;, + 0.964018;-0.036088;-0.263376;, + 0.945373;-0.182223;-0.270306;, + 0.963343;0.024740;-0.267130;, + 0.880786;-0.181630;-0.437296;, + 0.650930;-0.680013;-0.337449;, + 0.335037;-0.782036;-0.525518;, + 0.563778;-0.458869;-0.686727;, + 0.913321;0.104053;-0.393723;, + 0.937081;0.163116;-0.308662;, + 0.668251;-0.161916;-0.726102;, + 0.486568;0.053293;-0.872016;, + 0.533594;0.277429;-0.798943;, + 0.928577;0.194671;-0.315987;, + 0.969092;0.183829;-0.164523;, + 0.866079;0.407632;0.289384;, + 0.941173;0.337920;-0.002044;, + 0.938375;0.259917;-0.227806;, + 0.624232;0.279202;-0.729644;, + 0.502694;0.464741;-0.728913;, + 0.436435;0.894881;0.093339;, + 0.353823;0.758467;0.547299;, + 0.933666;0.245227;0.261020;, + 0.535134;-0.219852;0.815657;, + 0.024104;-0.703755;0.710034;, + 0.178308;-0.751297;0.635421;, + 0.602066;-0.782297;0.159777;, + 0.901219;-0.248765;-0.354853;, + 0.961986;-0.258591;-0.087825;, + 0.968198;-0.019433;0.249429;, + 0.974126;0.109867;0.197503;, + 0.998120;0.046379;0.040070;, + 0.989245;0.018948;0.145036;, + 0.998196;0.033204;0.050015;, + 0.987221;0.030678;-0.156373;, + 0.915666;0.230725;-0.329122;, + 0.929875;-0.332924;0.156510;, + 0.548129;-0.661438;0.511912;, + 0.328608;-0.695385;0.639105;, + 0.393459;-0.640623;0.659388;, + 0.887822;-0.363940;0.281637;, + 0.667999;-0.377721;0.641174;, + 0.176666;-0.140491;0.974193;, + 0.341914;0.096830;0.934729;, + 0.887877;-0.038319;0.458482;, + 0.969393;-0.056384;0.238953;, + 0.987385;-0.098273;0.124147;, + 0.957678;-0.180684;0.224067;, + 0.978399;0.092216;0.185021;, + 0.903224;0.146776;0.403292;, + 0.492552;0.233622;0.838340;, + 0.283857;0.492640;0.822637;, + 0.297955;0.637549;0.710460;, + 0.848610;0.319927;0.421318;, + 0.905296;0.318015;0.281611;, + 0.636969;0.566446;0.522885;, + 0.186839;0.733572;0.653424;, + 0.320731;0.757519;0.568591;, + 0.837352;0.395678;0.377200;, + 0.959055;0.246703;0.139112;, + 0.955218;0.282513;0.088003;, + 0.990080;-0.140504;-0.000454;, + 0.987431;-0.083124;-0.134427;, + 0.770556;0.153218;-0.618683;, + 0.514955;-0.136927;-0.846211;, + 0.487689;-0.291792;-0.822810;, + 0.911993;-0.179968;-0.368620;, + 0.554420;-0.498946;-0.666086;, + 0.175684;-0.958552;-0.224307;, + 0.440194;-0.833213;0.334641;, + 0.883002;-0.445236;-0.148568;, + 0.833256;0.378313;-0.403191;, + 0.280903;0.598074;-0.750601;, + 0.607836;0.418934;-0.674559;, + 0.994040;0.019054;-0.107342;, + 0.998649;0.042991;0.029202;, + 0.067520;-0.991070;-0.114981;, + 0.206828;-0.976295;-0.063794;, + 0.201725;-0.842948;-0.498745;, + 0.199110;-0.789128;-0.581061;, + 0.182351;-0.838223;-0.513937;, + 0.179619;-0.612115;-0.770099;, + 0.161976;-0.446886;-0.879805;, + 0.103521;-0.032143;-0.994108;, + 0.083882;0.118846;-0.989363;, + 0.162750;-0.049292;-0.985435;, + 0.155187;-0.395059;-0.905453;, + 0.567095;0.799478;0.198086;, + 0.449374;0.616302;-0.646711;, + 0.849927;0.303096;-0.430996;, + 0.936005;0.320009;0.146594;, + 0.155449;0.563615;0.811279;, + -0.138213;0.387227;0.911566;, + -0.004277;0.391231;0.920283;, + 0.721355;0.437806;0.536631;, + 0.852050;0.350687;0.388626;, + 0.964763;0.203925;0.166276;, + 0.871839;0.392583;0.292873;, + 0.274136;0.799417;0.534586;, + -0.141042;0.765026;0.628365;, + 0.116728;0.857063;0.501815;, + 0.732098;0.530474;0.427353;, + 0.288643;0.263589;-0.920438;, + 0.254733;0.326813;-0.910112;, + 0.156678;0.269554;-0.950154;, + 0.107469;0.490481;-0.864800;, + -0.142335;0.937356;-0.317971;, + 0.076965;0.997000;-0.008263;, + 0.564368;0.602211;-0.564651;, + 0.240721;-0.608347;0.756285;, + -0.073068;-0.148548;0.986202;, + -0.009780;0.272046;0.962235;, + 0.570934;0.068021;0.818174;, + 0.970937;-0.213567;-0.108028;, + 0.499315;-0.779570;-0.378095;, + 0.230800;-0.972814;0.019097;, + 0.323398;-0.895943;0.304467;, + 0.834135;-0.545842;0.079219;, + 0.981707;0.015920;-0.189730;, + 0.949298;0.051192;-0.310183;, + 0.429925;-0.097791;-0.897553;, + 0.244202;-0.464371;-0.851308;, + 0.420516;-0.601479;-0.679256;, + 0.847608;-0.252333;-0.466786;, + 0.842275;0.348065;0.411611;, + 0.123801;0.481601;0.867602;, + -0.131402;0.605188;0.785163;, + 0.049951;0.809325;0.585234;, + 0.649010;0.538182;0.537723;, + 0.974070;0.179720;0.137432;, + 0.810052;0.462959;0.359841;, + 0.071975;0.766775;0.637868;, + -0.167942;0.811266;0.560038;, + -0.017901;0.898223;0.439175;, + 0.575245;0.693252;0.434161;, + 0.126094;0.962221;-0.241310;, + 0.028226;0.494821;-0.868536;, + 0.153941;0.305601;-0.939633;, + 0.584262;0.539674;-0.606128;, + 0.947656;-0.251190;0.197106;, + 0.949985;-0.211068;0.230172;, + 0.940140;-0.240408;0.241536;, + 0.930866;-0.286260;0.227033;, + 0.941418;-0.276414;0.193203;, + 0.845017;-0.054953;0.531908;, + 0.750383;-0.181846;0.635498;, + 0.962843;0.019373;0.269367;, + 0.984408;0.024365;0.174202;, + 0.959207;-0.033141;0.280754;, + 0.962017;-0.206528;0.178519;, + 0.966498;-0.168546;0.193582;, + 0.976406;-0.086182;0.198001;, + 0.987549;-0.026149;0.155126;, + 0.990651;-0.059208;0.122906;, + 0.991572;-0.052289;0.118536;, + 0.967265;-0.179678;0.179202;, + 0.996580;-0.008069;0.082235;, + 0.991472;-0.016919;0.129214;, + 0.747666;-0.139847;0.649183;, + 0.119081;-0.211793;0.970033;, + 0.990935;-0.007248;0.134150;, + 0.721351;-0.142669;0.677715;, + 0.443972;-0.060466;0.893998;, + 0.376067;-0.110373;0.919995;, + 0.434429;-0.090333;0.896165;, + 0.672873;-0.178482;0.717903;, + 0.709868;-0.146248;0.688984;, + 0.362721;0.087395;0.927791;, + 0.374887;0.073105;0.924183;, + 0.312884;-0.023254;0.949507;, + 0.212041;-0.224883;0.951034;, + 0.297241;-0.210499;0.931310;, + 0.417830;-0.014675;0.908406;, + 0.383091;0.055913;0.922017;, + 0.285816;-0.314551;0.905189;, + 0.097390;-0.315817;0.943809;, + -0.106431;-0.217381;0.970267;, + 0.289110;-0.330505;0.898433;, + 0.368538;0.102287;0.923968;, + 0.324933;0.131935;0.936489;, + 0.269458;0.248871;0.930299;, + 0.190265;0.215570;0.957773;, + 0.284323;0.139703;0.948496;, + 0.190706;0.300576;0.934497;, + 0.242287;0.344618;0.906937;, + 0.209863;0.120826;0.970236;, + 0.253672;-0.005589;0.967274;, + 0.192077;0.138798;0.971515;, + 0.242108;0.270614;0.931746;, + 0.243379;0.149539;0.958335;, + 0.258802;0.073888;0.963100;, + 0.212004;0.101858;0.971946;, + 0.216250;0.294970;0.930714;, + 0.145512;0.372407;0.916591;, + 0.741126;-0.084012;0.666089;, + 0.498990;-0.008124;0.866570;, + 0.473728;0.138060;0.869782;, + 0.731146;-0.000413;0.682221;, + -0.631357;0.354670;0.689636;, + 0.632039;0.355130;0.688773;, + 0.914875;-0.152402;-0.373869;, + -0.914875;-0.152402;-0.373869;, + -0.433214;-0.193876;-0.880192;, + -0.859652;-0.309116;-0.406751;, + -0.093634;0.341116;0.935346;, + -0.093634;0.341116;0.935346;, + 0.000004;-0.093947;-0.995577;, + 0.244564;-0.065106;0.967445;, + -0.963334;-0.094433;0.251137;, + -0.989571;-0.011953;-0.143551;, + -0.885448;-0.301099;-0.354007;, + -0.989571;-0.011953;-0.143551;, + -0.982778;-0.084744;-0.164211;, + -0.957758;-0.287242;0.013841;, + -0.449270;0.893379;-0.005605;, + -0.895650;-0.343271;-0.282799;, + 0.527840;-0.168309;0.832500;, + 0.233305;-0.886660;0.399253;, + 0.513833;-0.494239;0.701216;, + 0.278233;-0.273728;0.920684;, + -0.790963;-0.525076;0.314122;, + 0.853727;-0.007027;-0.520673;, + -0.701247;-0.651828;-0.288743;, + -0.145665;-0.919602;-0.364848;, + 0.854774;-0.403493;0.326429;, + 0.174039;-0.984266;0.030518;, + -0.000016;-0.990834;-0.135089;, + 0.114825;-0.948131;-0.296416;, + 0.244564;-0.065106;0.967445;, + 0.026768;-0.438717;0.898227;, + -0.817874;-0.539381;-0.200374;, + -0.989571;-0.011953;-0.143551;, + -0.817874;-0.539381;-0.200374;, + 0.174039;-0.984266;0.030518;, + -0.434273;0.868349;-0.239535;, + -0.989261;0.138490;-0.046722;, + -0.984781;0.061328;-0.162622;, + -0.986179;0.140164;0.088351;, + -0.977952;0.018441;0.208015;, + 0.000005;-0.999974;0.007152;, + -0.897582;0.211412;-0.386848;, + -0.460194;0.616751;0.638623;, + 0.693967;0.242883;0.677803;, + -0.905288;0.176534;0.386380;, + -0.664851;0.117356;-0.737700;, + -0.897582;0.211412;-0.386848;, + -0.903847;0.420928;-0.076682;, + -0.701860;0.270507;0.658953;, + -0.457101;-0.023022;-0.889117;, + 0.000001;0.024616;-0.999697;, + -0.226499;-0.140193;-0.963869;, + 0.387797;0.626448;0.676148;, + 0.485631;0.575618;0.657895;, + 0.783381;0.503370;0.364599;, + -0.867052;0.137579;0.478846;, + -0.829671;0.408671;0.380308;, + -0.892567;0.378889;-0.244475;, + -0.886549;0.392710;-0.244562;, + -0.947696;-0.212901;-0.237792;, + -0.502434;-0.677413;0.537282;, + -0.044908;-0.611148;0.790241;, + -0.336341;-0.108795;0.935435;, + -0.899773;0.187812;0.393873;, + -0.898020;0.299543;-0.322233;, + 0.433214;-0.193877;-0.880192;, + 0.859652;-0.309116;-0.406751;, + 0.100417;0.338390;0.935633;, + 0.100417;0.338390;0.935633;, + -0.244564;-0.065106;0.967445;, + 0.963334;-0.094433;0.251137;, + 0.885448;-0.301099;-0.354007;, + 0.990082;-0.015546;-0.139630;, + 0.957347;-0.288570;0.014659;, + 0.982279;-0.089104;-0.164890;, + 0.481298;0.876550;-0.003471;, + 0.895650;-0.343271;-0.282799;, + -0.527840;-0.168309;0.832500;, + -0.513833;-0.494239;0.701216;, + -0.233305;-0.886660;0.399253;, + -0.278232;-0.273728;0.920684;, + 0.790963;-0.525076;0.314122;, + -0.853727;-0.007027;-0.520673;, + 0.145665;-0.919602;-0.364848;, + 0.701248;-0.651828;-0.288742;, + -0.854773;-0.403493;0.326429;, + -0.174039;-0.984266;0.030518;, + -0.114791;-0.948135;-0.296417;, + -0.244564;-0.065106;0.967445;, + -0.026768;-0.438717;0.898227;, + 0.817874;-0.539381;-0.200374;, + 0.990082;-0.015546;-0.139630;, + 0.990082;-0.015546;-0.139630;, + 0.817874;-0.539381;-0.200374;, + -0.174039;-0.984266;0.030518;, + 0.434273;0.868349;-0.239535;, + 0.990910;0.129582;-0.036136;, + 0.987185;0.081535;-0.137175;, + 0.972924;0.196620;0.121487;, + 0.972307;0.015440;0.233196;, + 0.897582;0.211412;-0.386848;, + -0.602846;0.290303;0.743169;, + 0.905288;0.176534;0.386380;, + 0.664851;0.117356;-0.737700;, + 0.897582;0.211412;-0.386848;, + 0.903847;0.420928;-0.076682;, + 0.701860;0.270507;0.658953;, + 0.457101;-0.023022;-0.889117;, + 0.226504;-0.140193;-0.963868;, + -0.439283;0.626634;0.643708;, + -0.559324;0.693597;0.453961;, + -0.710934;0.444973;0.544584;, + 0.867052;0.137579;0.478846;, + 0.829671;0.408671;0.380308;, + 0.892567;0.378889;-0.244475;, + 0.886549;0.392710;-0.244561;, + 0.947696;-0.212901;-0.237792;, + 0.502434;-0.677413;0.537282;, + 0.044907;-0.611148;0.790241;, + 0.336341;-0.108795;0.935435;, + 0.899773;0.187812;0.393873;, + 0.898020;0.299543;-0.322233;, + -0.550598;-0.834581;0.017782;, + -0.920508;0.371208;0.121944;, + -0.986678;0.148934;0.065464;, + -0.872109;0.095397;-0.479922;, + 0.968704;-0.213268;-0.126998;, + 0.935445;-0.035033;-0.351732;, + 0.368870;0.664338;0.650069;, + 0.215407;0.452689;0.865259;, + 0.453303;-0.497746;0.739435;, + 0.521055;-0.809078;0.271835;, + 0.735182;-0.666684;0.122637;, + 0.821914;-0.569537;-0.009215;, + 0.759558;-0.443873;-0.475446;, + -0.657196;-0.390140;-0.644891;, + -0.809310;-0.499093;-0.309716;, + -0.707861;-0.682627;-0.181530;, + -0.757874;-0.650275;-0.052618;, + -0.565959;-0.798793;0.204013;, + -0.572197;-0.246884;0.782073;, + -0.572197;-0.246884;0.782073;, + 0.453303;-0.497746;0.739435;, + -0.520474;0.526586;0.672171;, + 0.798460;-0.602012;-0.006594;, + 0.954242;-0.257523;0.152001;, + 0.918662;-0.341700;0.198244;, + -0.995822;0.066694;-0.062372;, + -0.984728;-0.003402;0.174069;, + 0.968707;-0.002938;-0.248189;, + 0.954651;-0.166315;-0.246941;, + -0.000076;-0.461661;-0.887057;, + 0.965909;-0.084351;-0.244754;, + -0.972281;0.214777;-0.092415;, + 0.956895;-0.080204;0.279139;, + -0.381353;0.920775;0.082119;, + 0.999321;0.028755;-0.023042;, + -0.673865;0.641908;0.365869;, + -0.705742;-0.122863;0.697734;, + -0.960352;-0.063982;-0.271348;, + 0.566503;-0.333624;0.753505;, + 0.059122;-0.098574;-0.993372;, + 0.059122;-0.098574;-0.993372;, + 0.039464;-0.745272;-0.665591;, + -0.354476;-0.066564;0.932693;, + 0.181561;-0.108135;0.977416;, + 0.705192;-0.523353;0.478336;, + 0.734833;-0.590132;0.334314;, + 0.703206;-0.672001;-0.232197;, + 0.318223;-0.742396;-0.589561;, + -0.868967;-0.391802;-0.302304;, + -0.911357;-0.405828;0.068791;, + 0.353830;-0.592859;-0.723410;, + 0.039464;-0.745272;-0.665591;, + 0.566503;-0.333624;0.753505;, + -0.804425;-0.481755;0.347580;, + -0.705742;-0.122863;0.697734;, + -0.212265;-0.554761;-0.804478;, + -0.300497;-0.671647;-0.677194;, + 0.909177;-0.368835;-0.193282;, + -0.507519;-0.687744;-0.519069;, + -0.955392;-0.286491;-0.071754;, + 0.738914;-0.651028;0.173689;, + 0.982818;-0.144272;-0.115132;, + -0.539943;-0.790977;-0.287777;, + 0.365426;-0.280297;0.887636;, + 0.666223;-0.143179;0.731879;, + 0.313056;0.378120;0.871219;, + -0.400237;0.683181;0.610798;, + 0.639689;-0.061333;0.766183;, + -0.557613;-0.562556;0.610408;, + 0.152980;0.089858;-0.984136;, + -0.289534;0.030294;-0.956688;, + -0.381353;0.920775;0.082119;, + -0.421748;0.283560;-0.861233;, + -0.539943;-0.790977;-0.287777;, + -0.425702;-0.452816;-0.783413;, + -0.960352;-0.063982;-0.271348;, + 0.954242;-0.257523;0.152001;, + -0.537797;0.842499;0.031136;, + -0.545698;-0.837393;0.031400;, + -0.520441;-0.817752;0.245812;, + -0.037200;-0.353239;-0.934793;, + -0.311030;-0.795975;-0.519312;, + -0.790481;-0.221084;-0.571194;, + -0.597714;-0.523944;0.606812;, + -0.264462;-0.862138;0.432178;, + -0.550598;-0.834581;0.017782;, + -0.550598;-0.834581;0.017782;, + -0.275159;-0.572461;0.772383;, + -0.314707;0.781987;-0.538011;, + -0.000538;0.773627;-0.633641;, + -0.162744;0.615741;0.770959;, + -0.559206;0.508717;0.654596;, + -0.449270;0.893379;-0.005605;, + -0.449270;0.893379;-0.005605;, + 0.000168;0.854980;0.518661;, + -0.162744;0.615741;0.770959;, + -0.530614;0.817949;0.222282;, + -0.520441;-0.817752;0.245812;, + 0.000147;-0.426759;0.904366;, + -0.877145;-0.439089;0.194469;, + 1.000000;-0.000000;0.000000;, + 1.000000;-0.000000;0.000000;, + 1.000000;-0.000000;0.000000;, + 0.955485;-0.120740;-0.269203;, + -0.945620;0.026607;-0.324184;, + -0.995610;0.037774;-0.085641;, + -0.908432;0.107750;-0.403908;, + 0.992661;-0.000187;-0.120932;, + 0.990528;-0.094784;-0.099347;, + 0.992970;-0.002293;0.118346;, + -0.906954;0.117975;-0.404371;, + 0.000005;-0.908853;-0.417117;, + 0.920508;0.371208;0.121944;, + 0.550599;-0.834580;0.017784;, + 0.986678;0.148934;0.065464;, + 0.872109;0.095396;-0.479922;, + -0.968704;-0.213269;-0.126998;, + -0.935445;-0.035034;-0.351733;, + -0.368870;0.664338;0.650069;, + -0.215408;0.452689;0.865258;, + -0.453304;-0.497746;0.739435;, + -0.521055;-0.809078;0.271836;, + -0.735182;-0.666684;0.122637;, + -0.821914;-0.569537;-0.009216;, + -0.759558;-0.443871;-0.475447;, + 0.657196;-0.390140;-0.644891;, + 0.809310;-0.499092;-0.309716;, + 0.707861;-0.682627;-0.181531;, + 0.757874;-0.650275;-0.052618;, + 0.565958;-0.798793;0.204014;, + 0.572196;-0.246884;0.782074;, + 0.572196;-0.246884;0.782074;, + -0.453304;-0.497746;0.739435;, + 0.520473;0.526586;0.672172;, + -0.798459;-0.602012;-0.006595;, + -0.954242;-0.257523;0.152001;, + -0.918662;-0.341700;0.198244;, + 0.984728;-0.003402;0.174069;, + 0.995822;0.066694;-0.062372;, + -0.968707;-0.002938;-0.248190;, + -0.954652;-0.166280;-0.246961;, + -0.965909;-0.084351;-0.244754;, + 0.972281;0.214776;-0.092415;, + -0.956895;-0.080204;0.279139;, + 0.381356;0.920774;0.082120;, + -0.999321;0.028755;-0.023042;, + 0.673864;0.641909;0.365870;, + 0.705738;-0.122868;0.697737;, + 0.960352;-0.063982;-0.271348;, + -0.059122;-0.098573;-0.993372;, + -0.059122;-0.098573;-0.993372;, + -0.039462;-0.745268;-0.665596;, + 0.354475;-0.066564;0.932693;, + -0.181560;-0.108135;0.977416;, + -0.705199;-0.523347;0.478333;, + -0.734835;-0.590129;0.334313;, + -0.703206;-0.672002;-0.232196;, + -0.318224;-0.742397;-0.589560;, + 0.868969;-0.391799;-0.302303;, + 0.911362;-0.405818;0.068789;, + -0.353826;-0.592860;-0.723412;, + -0.039462;-0.745268;-0.665596;, + -0.566507;-0.333623;0.753502;, + 0.804429;-0.481751;0.347578;, + 0.705738;-0.122868;0.697737;, + 0.212267;-0.554751;-0.804484;, + 0.300504;-0.671641;-0.677197;, + -0.909176;-0.368837;-0.193284;, + 0.507518;-0.687743;-0.519071;, + 0.955392;-0.286490;-0.071755;, + -0.738915;-0.651028;0.173686;, + -0.982818;-0.144272;-0.115132;, + 0.539944;-0.790977;-0.287776;, + -0.365426;-0.280297;0.887636;, + -0.666223;-0.143179;0.731879;, + -0.313056;0.378120;0.871218;, + 0.400237;0.683181;0.610797;, + -0.639690;-0.061333;0.766182;, + 0.557614;-0.562555;0.610409;, + -0.152979;0.089859;-0.984136;, + 0.289534;0.030294;-0.956688;, + 0.381356;0.920774;0.082120;, + 0.421748;0.283560;-0.861233;, + 0.539944;-0.790977;-0.287776;, + 0.425700;-0.452817;-0.783413;, + 0.960352;-0.063982;-0.271348;, + -0.954242;-0.257523;0.152001;, + -0.566507;-0.333623;0.753502;, + 0.545698;-0.837393;0.031400;, + 0.557573;0.829476;0.032896;, + 0.520501;-0.817725;0.245773;, + 0.037200;-0.353240;-0.934793;, + 0.311029;-0.795977;-0.519309;, + 0.790480;-0.221084;-0.571194;, + 0.597714;-0.523943;0.606812;, + 0.264462;-0.862137;0.432180;, + 0.550599;-0.834580;0.017784;, + 0.550599;-0.834580;0.017784;, + 0.275160;-0.572458;0.772385;, + 0.309521;0.783229;-0.539212;, + 0.162598;0.616218;0.770608;, + 0.566570;0.495981;0.658028;, + 0.481298;0.876550;-0.003471;, + 0.481298;0.876550;-0.003471;, + 0.530646;0.817913;0.222337;, + 0.162598;0.616218;0.770608;, + 0.520501;-0.817725;0.245773;, + 0.877144;-0.439088;0.194473;, + -0.955485;-0.120740;-0.269203;, + 0.945620;0.026607;-0.324184;, + 0.995610;0.037774;-0.085641;, + 0.908432;0.107750;-0.403908;, + -0.992661;-0.000187;-0.120933;, + -0.990528;-0.094784;-0.099347;, + -0.992970;-0.002293;0.118346;, + 0.906954;0.117975;-0.404371;, + 0.448693;0.679150;0.580886;, + 0.987197;-0.118160;-0.107142;, + 0.207701;-0.604118;-0.769351;, + 0.529914;-0.324726;-0.783418;, + 0.955178;-0.252865;0.153929;, + 0.987197;-0.118160;-0.107142;, + -0.160126;0.190092;-0.968620;, + 0.006566;0.677354;0.735628;, + 0.068168;0.237165;0.969075;, + 0.423190;-0.716621;-0.554404;, + 0.657416;-0.744773;-0.114531;, + 0.509538;-0.839165;-0.190193;, + -0.234676;0.256475;0.937629;, + -0.834983;0.264476;-0.482552;, + -0.527039;0.781296;-0.334374;, + -0.473718;0.414055;-0.777271;, + -0.160126;0.190092;-0.968620;, + -0.228376;-0.127237;-0.965223;, + -0.839542;-0.269781;-0.471581;, + -0.675963;0.077412;-0.732858;, + -0.963227;0.157435;-0.217736;, + -0.259132;0.699308;-0.666197;, + -0.527039;0.781296;-0.334374;, + -0.422834;0.836078;-0.349551;, + -0.228376;-0.127237;-0.965223;, + -0.641365;-0.305210;-0.703916;, + -0.963227;0.157435;-0.217736;, + 0.897041;0.033289;-0.440692;, + -0.146089;-0.981553;0.123336;, + 0.034059;-0.236374;-0.971065;, + -0.520041;-0.156983;0.839592;, + -0.353633;-0.752104;0.556133;, + -0.898012;0.382182;0.217971;, + -0.234676;0.256475;0.937629;, + 0.509538;-0.839165;-0.190193;, + 0.295362;0.740439;0.603748;, + -0.234676;0.256475;0.937629;, + -0.318398;0.686232;0.653995;, + 0.634338;-0.406257;-0.657701;, + -0.286418;0.500490;0.816991;, + 0.450770;-0.364624;-0.814773;, + 0.509538;-0.839165;-0.190193;, + 0.914801;0.309243;0.259824;, + -0.578072;-0.401336;0.710466;, + 0.963480;0.174780;-0.202875;, + 0.916931;0.363083;0.165554;, + 0.970183;-0.159926;0.182121;, + 0.034059;-0.236374;-0.971065;, + 0.126855;0.710394;-0.692277;, + 0.034059;-0.236374;-0.971065;, + -0.828231;-0.560343;0.007058;, + -0.156866;-0.502085;-0.850473;, + -0.898012;0.382182;0.217971;, + -0.898012;0.382182;0.217971;, + 0.426128;-0.774572;-0.467389;, + 0.396048;-0.852920;0.340107;, + -0.039929;-0.807710;-0.588227;, + 0.303641;-0.441458;-0.844344;, + -0.039929;-0.807710;-0.588227;, + -0.472468;0.843730;0.254742;, + 0.489036;0.859909;-0.146290;, + 0.568943;-0.193580;-0.799269;, + -0.472468;0.843730;0.254742;, + -0.896153;0.443634;0.009920;, + 0.826841;-0.523263;-0.206226;, + 0.500952;0.279713;0.819029;, + -0.205138;-0.005818;0.978716;, + -0.469045;0.851012;0.236169;, + -0.502437;0.667098;0.550034;, + 0.780352;-0.359300;-0.511814;, + -0.506181;0.569758;0.647422;, + 0.780352;-0.359300;-0.511814;, + -0.268806;-0.896766;-0.351502;, + -0.129004;-0.984436;0.119344;, + 0.915472;-0.398064;-0.058788;, + -0.343908;0.401841;0.848676;, + 0.777616;-0.116615;0.617830;, + 0.507759;-0.548313;-0.664480;, + -0.257983;0.544602;0.798031;, + -0.362576;0.544444;0.756386;, + 0.538295;-0.631424;-0.558159;, + 0.725324;-0.198324;0.659221;, + -0.276717;0.544754;0.791625;, + 0.456380;-0.580050;-0.674729;, + -0.464359;0.605477;0.646350;, + 0.314063;-0.536259;-0.783448;, + -0.470908;0.619311;0.628251;, + 0.329202;-0.554979;-0.763953;, + -0.242430;0.521770;0.817914;, + 0.488072;-0.623641;-0.610621;, + -0.339070;0.554869;0.759705;, + 0.450906;-0.603711;-0.657432;, + -0.560979;0.636505;0.529305;, + 0.229922;-0.482476;-0.845194;, + -0.480825;0.612885;0.627040;, + 0.327893;-0.527492;-0.783734;, + -0.130859;0.472769;0.871416;, + 0.582448;-0.641920;-0.498692;, + 0.114891;0.475550;0.872154;, + 0.738199;-0.672946;-0.046963;, + 0.654098;0.265568;0.708258;, + 0.788837;-0.361752;0.496862;, + -0.263126;0.546005;0.795389;, + 0.497233;-0.613394;-0.613602;, + 0.715283;-0.213463;0.665435;, + -0.306469;0.543138;0.781715;, + 0.446317;-0.594873;-0.668526;, + -0.452795;0.600684;0.658905;, + 0.308543;-0.543003;-0.780992;, + -0.456215;0.614991;0.643159;, + 0.335867;-0.559796;-0.757510;, + -0.263346;0.532405;0.804484;, + 0.471488;-0.618541;-0.628574;, + -0.345261;0.558515;0.754225;, + 0.439782;-0.600782;-0.667573;, + -0.537976;0.628508;0.561747;, + 0.252684;-0.497453;-0.829875;, + -0.467237;0.607846;0.642038;, + 0.333904;-0.534319;-0.776538;, + -0.165833;0.490715;0.855393;, + 0.554845;-0.638321;-0.533566;, + 0.068015;0.505465;0.860162;, + 0.701497;-0.701342;-0.126576;, + 0.636095;0.307826;0.707549;, + 0.782976;-0.407275;0.470186;, + -0.265565;0.544402;0.795677;, + 0.501872;-0.611244;-0.611969;, + 0.730965;-0.293094;0.616268;, + -0.292472;0.536722;0.791448;, + 0.440673;-0.592878;-0.674020;, + -0.447421;0.598812;0.664258;, + 0.294817;-0.536769;-0.790545;, + -0.451790;0.613142;0.648030;, + 0.324769;-0.553847;-0.766667;, + -0.247760;0.524381;0.814641;, + 0.467816;-0.617010;-0.632809;, + -0.334234;0.553031;0.763180;, + 0.434085;-0.598441;-0.673379;, + -0.537145;0.628597;0.562442;, + 0.236650;-0.488015;-0.840142;, + -0.462849;0.606173;0.646780;, + 0.323287;-0.527601;-0.785571;, + -0.146317;0.479991;0.864985;, + 0.555697;-0.637603;-0.533538;, + 0.090407;0.490418;0.866785;, + 0.709732;-0.695413;-0.112611;, + 0.646355;0.289593;0.705947;, + 0.787167;-0.396002;0.472811;, + -0.212404;0.516342;0.829624;, + 0.516966;-0.608447;-0.602112;, + -0.215861;0.514387;0.829946;, + 0.400936;-0.557240;-0.727141;, + -0.409694;0.584477;0.700383;, + 0.255763;-0.507343;-0.822915;, + -0.416769;0.599193;0.683573;, + 0.271222;-0.525963;-0.806102;, + -0.182521;0.489258;0.852827;, + 0.434921;-0.604440;-0.667455;, + -0.280896;0.526446;0.802466;, + 0.395442;-0.582473;-0.710176;, + -0.512610;0.622446;0.591432;, + 0.170371;-0.449244;-0.877014;, + -0.427834;0.592777;0.682329;, + 0.271016;-0.497964;-0.823761;, + 0.892887;0.164047;-0.419335;, + -0.071795;0.436064;0.897047;, + 0.535967;-0.630109;-0.561873;, + 0.170183;0.433298;0.885037;, + 0.717370;-0.686582;-0.118260;, + 0.689840;0.223648;0.688551;, + 0.804020;-0.394183;0.445166;, + -0.588806;0.000143;0.808275;, + -0.886836;0.434833;0.156336;, + 0.226188;-0.397375;0.889344;, + 0.313446;0.294967;0.902633;, + -0.123513;0.634708;0.762817;, + 0.396692;0.282270;-0.873475;, + -0.557305;-0.389761;0.733143;, + 0.964289;0.264843;-0.002032;, + 0.506951;-0.238596;0.828295;, + 0.506951;-0.238596;0.828295;, + -0.957604;-0.179816;-0.225078;, + -0.529914;-0.324726;-0.783418;, + -0.148924;-0.632604;-0.760022;, + -0.994196;0.051821;0.094280;, + -0.871225;-0.451441;0.192789;, + 0.160126;0.190092;-0.968620;, + -0.006566;0.677353;0.735628;, + -0.057386;0.245516;0.967692;, + -0.657416;-0.744773;-0.114531;, + -0.423190;-0.716621;-0.554404;, + -0.509830;-0.838926;-0.190465;, + 0.391442;0.389355;0.833772;, + 0.834983;0.264476;-0.482552;, + 0.527039;0.781296;-0.334374;, + 0.473718;0.414055;-0.777271;, + 0.160126;0.190092;-0.968620;, + 0.228376;-0.127237;-0.965223;, + 0.839542;-0.269781;-0.471581;, + 0.675963;0.077412;-0.732859;, + 0.963227;0.157435;-0.217736;, + 0.259132;0.699308;-0.666198;, + 0.422834;0.836078;-0.349550;, + 0.527039;0.781296;-0.334374;, + 0.641365;-0.305210;-0.703916;, + 0.228376;-0.127237;-0.965223;, + 0.963227;0.157435;-0.217736;, + -0.897162;0.033159;-0.440455;, + 0.146090;-0.981553;0.123336;, + -0.034059;-0.236375;-0.971065;, + 0.520040;-0.156982;0.839592;, + 0.353633;-0.752104;0.556133;, + 0.391442;0.389355;0.833772;, + 0.653620;0.114523;0.748107;, + 0.520040;-0.156982;0.839592;, + -0.509830;-0.838926;-0.190465;, + -0.190416;0.835663;0.515178;, + 0.438815;0.143443;0.887054;, + 0.898012;0.382183;0.217970;, + -0.634338;-0.406257;-0.657701;, + -0.451041;-0.364729;-0.814576;, + -0.509830;-0.838926;-0.190465;, + -0.607672;0.793048;-0.042537;, + 0.578072;-0.401336;0.710466;, + -0.964421;0.191784;-0.181966;, + -0.881035;0.426148;0.205365;, + -0.980241;-0.139652;0.140090;, + -0.034059;-0.236375;-0.971065;, + -0.126856;0.710394;-0.692277;, + -0.034059;-0.236375;-0.971065;, + 0.828231;-0.560342;0.007058;, + 0.156866;-0.502085;-0.850473;, + 0.898012;0.382183;0.217970;, + 0.898012;0.382183;0.217970;, + -0.667053;-0.649082;0.365696;, + -0.492298;-0.784288;-0.377538;, + -0.494156;0.758623;-0.424618;, + 0.063298;-0.757803;-0.649405;, + 0.063298;-0.757803;-0.649405;, + 0.505009;0.836271;0.213581;, + -0.552096;-0.122315;-0.824760;, + 0.505009;0.836271;0.213581;, + 0.894433;0.447026;-0.012553;, + -0.823845;-0.530391;-0.199912;, + -0.489616;0.263036;0.831317;, + 0.188469;-0.005536;0.982064;, + 0.475166;0.851493;0.221757;, + 0.500593;0.666086;0.552935;, + -0.774625;-0.362944;-0.517907;, + 0.498824;0.566633;0.655822;, + -0.913491;-0.404743;-0.041435;, + 0.338248;0.393374;0.854895;, + -0.765877;-0.131961;0.629300;, + -0.499148;-0.545190;-0.673512;, + -0.714900;-0.212902;0.666026;, + -0.857968;0.149295;-0.491531;, + 0.351827;0.537583;0.766305;, + 0.247538;0.533303;0.808896;, + -0.533434;-0.631638;-0.562567;, + 0.266062;0.534893;0.801936;, + -0.447982;-0.577196;-0.682757;, + 0.457685;0.602796;0.653575;, + -0.302952;-0.528059;-0.793330;, + 0.464637;0.616931;0.635224;, + -0.320375;-0.545709;-0.774314;, + 0.231555;0.510140;0.828335;, + -0.482310;-0.621551;-0.617294;, + 0.330057;0.546220;0.769874;, + -0.443595;-0.600833;-0.664998;, + 0.557674;0.637189;0.531969;, + -0.218196;-0.468925;-0.855862;, + 0.475036;0.610817;0.633438;, + -0.320194;-0.517249;-0.793681;, + 0.120529;0.460012;0.879694;, + -0.579460;-0.642332;-0.501632;, + -0.117801;0.461501;0.879284;, + -0.737915;-0.674242;-0.029655;, + -0.649761;0.259288;0.714549;, + -0.783249;-0.356084;0.509632;, + 0.252546;0.535085;0.806166;, + -0.490701;-0.611734;-0.620479;, + -0.703251;-0.226621;0.673855;, + 0.295401;0.533999;0.792201;, + -0.438220;-0.592052;-0.676341;, + 0.445511;0.597421;0.666789;, + -0.297424;-0.534529;-0.791086;, + 0.449368;0.612043;0.650747;, + -0.326742;-0.550893;-0.767956;, + 0.252472;0.521534;0.815021;, + -0.465089;-0.615834;-0.635956;, + 0.335949;0.550139;0.764517;, + -0.432019;-0.597419;-0.675611;, + 0.533739;0.628202;0.566114;, + -0.240978;-0.484831;-0.840755;, + 0.460786;0.605148;0.649209;, + -0.325458;-0.524380;-0.786831;, + 0.154787;0.478816;0.864162;, + -0.550996;-0.638131;-0.537766;, + -0.072427;0.492303;0.867406;, + -0.702169;-0.703184;-0.111764;, + -0.633977;0.303269;0.711408;, + -0.780241;-0.399104;0.481601;, + 0.254891;0.533546;0.806448;, + -0.495277;-0.609732;-0.618812;, + -0.721934;-0.308194;0.619538;, + 0.281251;0.527055;0.801942;, + -0.432483;-0.589889;-0.681901;, + 0.440073;0.595333;0.672246;, + -0.283571;-0.527836;-0.800610;, + 0.444854;0.609993;0.655754;, + -0.315564;-0.544433;-0.777182;, + 0.236801;0.512915;0.825133;, + -0.461342;-0.614098;-0.640349;, + 0.324837;0.544170;0.773537;, + -0.426219;-0.594861;-0.681526;, + 0.532960;0.628250;0.566794;, + -0.224869;-0.474782;-0.850891;, + 0.456355;0.603310;0.654031;, + -0.314900;-0.517199;-0.795828;, + 0.135489;0.467543;0.873525;, + -0.551857;-0.637341;-0.537819;, + -0.094199;0.476771;0.873966;, + -0.710203;-0.697232;-0.097362;, + -0.643422;0.284541;0.710665;, + -0.783588;-0.388614;0.484736;, + 0.201577;0.503110;0.840385;, + -0.510465;-0.607468;-0.608611;, + 0.204883;0.502219;0.840119;, + -0.391192;-0.551987;-0.736396;, + 0.401612;0.579399;0.709228;, + -0.244152;-0.497096;-0.832638;, + 0.408987;0.594527;0.692291;, + -0.261639;-0.514291;-0.816731;, + 0.171512;0.475490;0.862840;, + -0.427611;-0.599957;-0.676166;, + 0.271095;0.515384;0.812949;, + -0.386791;-0.577398;-0.719030;, + 0.507899;0.621019;0.596970;, + -0.158619;-0.433804;-0.886935;, + 0.420631;0.588517;0.690447;, + -0.262650;-0.485562;-0.833813;, + 0.062071;0.421776;0.904573;, + -0.531432;-0.628929;-0.567476;, + -0.171508;0.418312;0.891964;, + -0.717453;-0.688923;-0.103178;, + -0.684430;0.217897;0.695756;, + -0.798889;-0.388529;0.459153;, + 0.563755;-0.000870;0.825942;, + 0.886836;0.434833;0.156336;, + -0.202243;-0.425807;0.881922;, + 0.166307;0.647301;0.743870;, + -0.301252;0.328615;0.895131;, + 0.549353;-0.390720;0.738613;, + -0.944779;0.327439;0.013305;, + -0.529409;-0.220751;0.819143;, + -0.529409;-0.220751;0.819143;, + 0.214009;0.839435;0.499548;, + 0.774218;0.487454;0.403702;, + -0.957604;-0.179816;-0.225078;, + -0.169599;0.852875;0.493802;, + 0.343698;0.922858;0.173795;, + 0.485631;0.575618;0.657895;, + -0.260653;0.953967;0.148347;, + 0.055097;0.933688;0.353823;, + -0.559324;0.693597;0.453961;, + -0.540286;0.724558;-0.427911;, + -0.496164;0.335976;-0.800588;, + -0.540286;0.724558;-0.427911;, + -0.654263;-0.049613;-0.754638;, + -0.496164;0.335976;-0.800588;, + -0.540286;0.724558;-0.427911;, + -0.540286;0.724558;-0.427911;, + -0.654263;-0.049613;-0.754638;, + -0.654263;-0.049613;-0.754638;, + -0.563708;-0.395781;-0.724976;, + -0.235609;0.971832;-0.005539;, + -0.284112;0.944212;0.166567;, + -0.232970;0.970399;0.063643;, + -0.302341;0.947980;-0.099615;, + -0.793812;0.600245;-0.097818;, + -0.000001;0.818760;0.574136;, + 0.382016;0.040071;0.923286;, + -0.000000;-0.444151;0.895952;, + 0.012819;0.940525;0.339483;, + -0.394637;-0.137254;0.908528;, + -0.231714;-0.275342;0.933003;, + -0.432713;-0.354931;0.828724;, + -0.733140;-0.437535;0.520643;, + -0.944986;-0.217661;0.244183;, + -0.965289;-0.090055;-0.245168;, + -0.404283;-0.450662;0.795902;, + -0.944986;-0.217661;0.244183;, + -0.432713;-0.354931;0.828724;, + -0.886311;0.419497;-0.196151;, + -0.232970;0.970399;0.063643;, + -0.235609;0.971832;-0.005539;, + -0.899678;-0.251384;-0.356911;, + -0.496164;0.335976;-0.800588;, + -0.984181;0.095585;0.149171;, + -0.899678;-0.251384;-0.356911;, + -0.534104;0.546724;-0.644846;, + -0.540286;0.724558;-0.427911;, + -0.899678;-0.251384;-0.356911;, + -0.806852;-0.393759;-0.440389;, + -0.563708;-0.395781;-0.724976;, + -0.000000;0.298174;-0.954511;, + -0.654263;-0.049613;-0.754638;, + -0.654263;-0.049613;-0.754638;, + -0.000000;0.298174;-0.954511;, + -0.929825;-0.231328;0.286203;, + -0.861728;0.431543;-0.266824;, + -0.793812;0.600245;-0.097818;, + -0.000000;0.630324;-0.776332;, + -0.534104;0.546724;-0.644846;, + -0.899678;-0.251384;-0.356911;, + -0.861728;0.431543;-0.266824;, + -0.000000;-0.029730;-0.999558;, + -0.927251;-0.170149;-0.333550;, + -0.534104;0.546724;-0.644846;, + -0.927251;-0.170149;-0.333550;, + -0.422789;0.519154;-0.742784;, + -0.000000;0.998500;0.054759;, + 0.014166;0.945681;-0.324786;, + -0.000000;0.998500;0.054759;, + -0.534104;0.546724;-0.644846;, + -0.861728;0.431543;-0.266824;, + -0.699443;-0.209423;-0.683316;, + -0.178300;-0.323577;-0.929251;, + -0.691836;-0.542995;-0.475940;, + -0.178300;-0.323577;-0.929251;, + -0.937849;0.041613;0.344540;, + -0.861728;0.431543;-0.266824;, + -0.879018;0.070016;-0.471619;, + -0.793812;0.600245;-0.097818;, + -0.701635;0.645253;-0.302255;, + -0.944986;-0.217661;0.244183;, + -0.000000;0.998500;0.054759;, + -0.000000;0.868934;-0.494927;, + -0.540286;0.724558;-0.427911;, + -0.000000;-0.029730;-0.999558;, + -0.000000;0.630324;-0.776332;, + -0.496164;0.335976;-0.800588;, + -0.496164;0.335976;-0.800588;, + -0.899678;-0.251384;-0.356911;, + -0.654263;-0.049613;-0.754638;, + -0.793812;0.600245;-0.097818;, + -0.861728;0.431543;-0.266824;, + -0.899678;-0.251384;-0.356911;, + -0.000000;0.998500;0.054759;, + -0.691836;-0.542995;-0.475940;, + -0.563708;-0.395781;-0.724976;, + -0.806852;-0.393759;-0.440389;, + -0.559606;-0.645175;-0.520183;, + -0.000000;0.998500;0.054759;, + 0.540286;0.724558;-0.427911;, + -0.000000;0.630324;-0.776332;, + 0.496164;0.335976;-0.800588;, + 0.540286;0.724558;-0.427911;, + 0.654263;-0.049613;-0.754638;, + 0.496164;0.335976;-0.800588;, + 0.540286;0.724558;-0.427911;, + 0.540286;0.724558;-0.427911;, + -0.000000;0.868934;-0.494927;, + 0.654263;-0.049613;-0.754638;, + -0.000000;0.298174;-0.954511;, + 0.654263;-0.049613;-0.754638;, + 0.563708;-0.395781;-0.724976;, + 0.235609;0.971832;-0.005539;, + 0.232970;0.970399;0.063643;, + 0.284111;0.944212;0.166568;, + 0.886230;0.418543;-0.198540;, + 0.793812;0.600245;-0.097818;, + -0.382017;0.040070;0.923286;, + -0.012819;0.940525;0.339483;, + 0.231714;-0.275342;0.933003;, + 0.394636;-0.137254;0.908528;, + 0.432713;-0.354931;0.828724;, + 0.930868;-0.256053;0.260617;, + 0.965023;-0.089095;-0.246563;, + 0.732571;-0.437022;0.521873;, + 0.302341;0.947980;-0.099615;, + 0.232970;0.970399;0.063643;, + 0.235609;0.971832;-0.005539;, + 0.899678;-0.251384;-0.356911;, + 0.496164;0.335976;-0.800588;, + 0.899678;-0.251384;-0.356911;, + 0.553016;0.656553;-0.512944;, + 0.540286;0.724558;-0.427911;, + 0.899678;-0.251384;-0.356911;, + 0.836668;-0.377812;-0.396542;, + 0.563708;-0.395781;-0.724976;, + -0.000000;0.298174;-0.954511;, + 0.654263;-0.049613;-0.754638;, + 0.654263;-0.049613;-0.754638;, + -0.142878;-0.121955;-0.982198;, + -0.000000;0.298174;-0.954511;, + 0.930521;-0.221376;0.291758;, + 0.945515;0.306078;-0.110984;, + 0.924672;0.127786;0.358681;, + 0.793812;0.600245;-0.097818;, + -0.000000;0.630324;-0.776332;, + 0.553016;0.656553;-0.512944;, + -0.000000;-0.029730;-0.999558;, + 0.899678;-0.251384;-0.356911;, + 0.945515;0.306078;-0.110984;, + -0.000000;-0.029730;-0.999558;, + 0.932085;0.115972;-0.343175;, + -0.014166;0.945682;-0.324786;, + 0.553016;0.656553;-0.512944;, + 0.945515;0.306078;-0.110984;, + 0.490285;-0.201883;-0.847858;, + 0.366430;-0.311048;-0.876914;, + 0.642185;-0.647026;-0.411043;, + 0.366430;-0.311048;-0.876914;, + 0.940115;0.027121;0.339777;, + 0.945515;0.306078;-0.110984;, + 0.793812;0.600245;-0.097818;, + 0.879018;0.070016;-0.471619;, + 0.701635;0.645253;-0.302255;, + 0.930868;-0.256053;0.260617;, + -0.000000;0.998500;0.054759;, + -0.000000;0.868934;-0.494927;, + 0.540286;0.724558;-0.427911;, + -0.000000;-0.029730;-0.999558;, + -0.000000;0.630324;-0.776332;, + 0.496164;0.335976;-0.800588;, + 0.496164;0.335976;-0.800588;, + 0.899678;-0.251384;-0.356911;, + 0.654263;-0.049613;-0.754638;, + 0.793812;0.600245;-0.097818;, + -0.136274;0.884818;0.445562;, + -0.102555;-0.767205;-0.633151;, + 0.945515;0.306078;-0.110984;, + 0.899678;-0.251384;-0.356911;, + -0.000000;0.998500;0.054759;, + 0.642185;-0.647026;-0.411043;, + 0.563708;-0.395781;-0.724976;, + 0.836668;-0.377812;-0.396542;, + 0.559606;-0.645176;-0.520182;, + 0.836668;-0.377812;-0.396542;, + 0.642185;-0.647026;-0.411043;, + 0.403086;-0.867962;-0.290108;, + 0.373002;-0.795669;-0.477263;, + 0.558443;-0.699105;0.446535;, + 0.772381;-0.152248;0.616642;, + -0.833821;-0.284781;0.472909;, + -0.488240;-0.590800;0.642322;, + -0.337534;-0.853552;-0.396886;, + -0.607999;-0.786791;-0.106285;, + 0.077777;-0.993666;-0.081114;, + -0.091466;-0.994758;-0.045715;, + -0.178300;-0.323577;-0.929251;, + -0.142878;-0.121955;-0.982198;, + 0.366430;-0.311048;-0.876914;, + 0.260508;0.727642;-0.634565;, + -0.040453;0.710290;-0.702746;, + -0.588256;0.730768;-0.346313;, + -0.010918;-0.937228;0.348545;, + -0.238496;-0.799571;0.551186;, + 0.193201;-0.890421;0.412097;, + 0.014300;-0.847026;0.531360;, + -0.801728;-0.276819;0.529721;, + -0.615086;-0.386827;0.687047;, + -0.793967;-0.433457;0.426300;, + -0.745782;-0.452954;0.488509;, + -0.932337;-0.361278;-0.015029;, + -0.856324;-0.247040;-0.453521;, + -0.707919;-0.624087;-0.330705;, + -0.531094;-0.706015;-0.468489;, + -0.808123;-0.461550;-0.365936;, + -0.948825;-0.033448;0.314026;, + -0.930713;-0.092278;0.353918;, + -0.920811;-0.172908;0.349584;, + -0.916339;-0.265300;0.299899;, + -0.604821;-0.388772;-0.695017;, + -0.945731;0.117071;0.303128;, + -0.970327;0.034796;0.239279;, + -0.978433;-0.005143;0.206502;, + -0.861728;0.431543;-0.266824;, + -0.531997;-0.340199;0.775399;, + -0.689076;-0.199468;0.696697;, + -0.741015;0.256716;0.620479;, + -0.216517;0.601928;0.768637;, + -0.823955;0.147553;0.547108;, + -0.759279;0.153427;0.632421;, + -0.896238;-0.324230;0.302709;, + -0.280865;-0.155167;0.947121;, + -0.478361;-0.492783;0.726868;, + -0.124352;-0.098909;0.987296;, + -0.205252;0.312404;0.927510;, + -0.110123;-0.025715;0.993585;, + -0.937849;0.041613;0.344540;, + -0.929825;-0.231328;0.286203;, + -0.699443;-0.209423;-0.683316;, + -0.806852;-0.393759;-0.440389;, + -0.806852;-0.393759;-0.440389;, + -0.691836;-0.542995;-0.475940;, + -0.767636;-0.389543;-0.508912;, + -0.551796;-0.574616;-0.604431;, + -0.979289;0.016954;0.201754;, + -0.966193;0.076246;0.246286;, + -0.877724;-0.460197;-0.133489;, + -0.551796;-0.574616;-0.604431;, + -0.923625;-0.293416;-0.246623;, + -0.551796;-0.574616;-0.604431;, + -0.460194;0.616751;0.638623;, + -0.237549;0.171176;0.956174;, + -0.246128;0.432303;0.867488;, + -0.304277;-0.311038;0.900372;, + -0.207669;-0.717728;0.664635;, + -0.223441;-0.620814;0.751442;, + -0.371514;-0.104033;0.922580;, + -0.292418;0.016174;0.956154;, + -0.291101;0.296117;0.909711;, + -0.290228;0.134824;0.947413;, + 0.732447;-0.463382;0.498797;, + 0.823502;-0.420165;0.381189;, + 0.796203;-0.311752;0.518528;, + 0.557281;-0.410177;0.721937;, + 0.663539;-0.666241;-0.340352;, + 0.627769;-0.641265;-0.441233;, + 0.924341;-0.229764;-0.304633;, + 0.885166;-0.437540;-0.158241;, + 0.825383;-0.420119;-0.377152;, + 0.927430;-0.166498;0.334890;, + 0.916339;-0.265300;0.299899;, + 0.922761;-0.080766;0.376814;, + 0.959207;-0.033141;0.280754;, + 0.618095;-0.351774;-0.703004;, + 0.962843;0.019373;0.269367;, + 0.983531;0.088214;0.157748;, + 0.930868;-0.256053;0.260617;, + 0.432713;-0.354931;0.828724;, + 0.553016;0.656553;-0.512944;, + 0.945515;0.306078;-0.110984;, + 0.993793;-0.011471;0.110653;, + 0.479423;0.478311;0.735780;, + 0.781695;0.234974;0.577703;, + 0.679518;-0.160347;0.715922;, + 0.358587;-0.591042;0.722554;, + 0.819624;0.148430;0.553340;, + 0.781224;0.181945;0.597148;, + 0.891387;-0.329329;0.311403;, + 0.041593;0.020366;0.998927;, + 0.377267;-0.289994;0.879530;, + 0.105429;-0.086429;0.990664;, + 0.222570;0.434020;0.872977;, + 0.940115;0.027121;0.339777;, + 0.930521;-0.221376;0.291758;, + 0.629863;0.520365;-0.576622;, + 0.932085;0.115972;-0.343175;, + 0.490285;-0.201883;-0.847858;, + 0.836668;-0.377812;-0.396542;, + 0.836668;-0.377812;-0.396542;, + 0.642185;-0.647026;-0.411043;, + 0.551796;-0.574616;-0.604431;, + 0.831536;-0.420486;-0.362960;, + 0.551796;-0.574616;-0.604431;, + 0.955968;0.074254;0.283920;, + 0.992970;0.009011;0.118019;, + 0.872770;-0.467932;-0.138969;, + 0.831536;-0.420486;-0.362960;, + 0.448693;0.679150;0.580886;, + 0.218225;0.244375;0.944806;, + 0.291626;0.332066;0.897043;, + 0.323872;-0.438181;0.838513;, + 0.236939;-0.570878;0.786103;, + 0.298672;-0.579421;0.758332;, + 0.305557;-0.031119;0.951665;, + 0.302334;0.087757;0.949154;, + 0.249071;0.370670;0.894744;, + 0.278707;0.095201;0.955646;, + -0.305307;0.626286;0.717324;, + 0.313062;0.614710;0.723964;, + 0.404283;-0.450662;0.795902;, + 0.914875;-0.152402;-0.373869;, + -0.914875;-0.152402;-0.373869;; + 6841; + 3;28,62,1;, + 3;3,16,3420;, + 3;11,23,29;, + 3;104,69,7;, + 3;0,13,70;, + 3;9,97,96;, + 3;3421,71,2;, + 3;15,22,3;, + 3;3420,15,3;, + 3;68,4,15;, + 3;116,111,106;, + 3;3422,12,6;, + 3;6,12,1742;, + 3;24,14,12;, + 3;3423,108,119;, + 3;102,7,13;, + 3;13,30,23;, + 3;3420,2,15;, + 3;115,116,106;, + 3;100,3424,17;, + 3;100,1,3424;, + 3;1,18,19;, + 3;28,1,19;, + 3;104,94,69;, + 3;15,4,20;, + 3;98,8,97;, + 3;115,106,114;, + 3;29,23,126;, + 3;3422,24,12;, + 3;30,0,27;, + 3;26,11,29;, + 3;24,3422,3425;, + 3;27,126,23;, + 3;3426,3427,3428;, + 3;23,11,13;, + 3;13,0,30;, + 3;23,30,27;, + 3;108,107,120;, + 3;31,6,1741;, + 3;25,32,29;, + 3;32,26,29;, + 3;136,132,135;, + 3;32,25,65;, + 3;63,60,35;, + 3;3419,3429,63;, + 3;35,59,34;, + 3;58,59,16;, + 3;41,36,848;, + 3;51,53,49;, + 3;3430,55,49;, + 3;82,848,36;, + 3;24,38,14;, + 3;84,49,53;, + 3;81,82,43;, + 3;83,3431,39;, + 3;41,45,36;, + 3;40,3430,3432;, + 3;41,37,47;, + 3;24,52,48;, + 3;3430,49,84;, + 3;38,48,50;, + 3;38,24,48;, + 3;49,55,50;, + 3;50,51,49;, + 3;55,56,50;, + 3;48,51,50;, + 3;81,43,80;, + 3;67,54,3433;, + 3;39,66,44;, + 3;50,56,38;, + 3;3430,40,55;, + 3;56,57,38;, + 3;55,40,56;, + 3;56,436,57;, + 3;51,48,52;, + 3;3434,3435,3436;, + 3;3437,3438,3435;, + 3;3437,3439,3438;, + 3;33,3439,3437;, + 3;64,3440,3441;, + 3;3442,3443,33;, + 3;3440,3444,3445;, + 3;52,24,3425;, + 3;3434,3436,3446;, + 3;16,59,3420;, + 3;60,3420,59;, + 3;58,34,59;, + 3;60,3421,3420;, + 3;35,60,59;, + 3;61,27,0;, + 3;3447,61,3448;, + 3;28,3449,62;, + 3;3420,3421,2;, + 3;63,3429,3421;, + 3;3419,63,3450;, + 3;63,3421,60;, + 3;33,64,3442;, + 3;3450,63,35;, + 3;65,129,3447;, + 3;3434,3437,3435;, + 3;3444,42,3445;, + 3;3445,3441,3440;, + 3;39,3451,66;, + 3;3441,3442,64;, + 3;53,67,3433;, + 3;33,3443,3439;, + 3;2,68,15;, + 3;3452,3453,69;, + 3;70,13,7;, + 3;3421,3429,71;, + 3;0,70,73;, + 3;73,72,0;, + 3;7,69,75;, + 3;75,74,7;, + 3;3454,3455,77;, + 3;77,76,3454;, + 3;3453,3456,79;, + 3;79,78,3453;, + 3;70,7,74;, + 3;74,73,70;, + 3;69,3453,78;, + 3;78,75,69;, + 3;3456,3454,76;, + 3;76,79,3456;, + 3;3455,0,72;, + 3;72,77,3455;, + 3;80,43,3457;, + 3;43,82,44;, + 3;37,81,80;, + 3;44,82,83;, + 3;81,37,82;, + 3;44,83,39;, + 3;83,82,36;, + 3;3433,84,53;, + 3;83,36,3431;, + 3;3,22,85;, + 3;110,112,113;, + 3;22,89,85;, + 3;110,114,106;, + 3;95,118,111;, + 3;3447,128,61;, + 3;22,90,89;, + 3;110,113,114;, + 3;109,112,110;, + 3;90,22,91;, + 3;15,91,22;, + 3;15,92,91;, + 3;15,20,92;, + 3;92,20,93;, + 3;117,111,116;, + 3;3452,94,3458;, + 3;94,3452,69;, + 3;99,96,21;, + 3;111,117,95;, + 3;9,96,99;, + 3;1739,97,9;, + 3;97,8,21;, + 3;97,21,96;, + 3;10,98,97;, + 3;31,3422,6;, + 3;1741,6,1744;, + 3;88,99,845;, + 3;107,118,95;, + 3;18,100,17;, + 3;18,1,100;, + 3;101,102,13;, + 3;11,101,13;, + 3;119,108,120;, + 3;103,7,102;, + 3;107,121,120;, + 3;95,122,107;, + 3;107,123,121;, + 3;95,117,122;, + 3;107,122,123;, + 3;103,105,104;, + 3;103,104,7;, + 3;3459,5,106;, + 3;106,111,3459;, + 3;3423,3460,108;, + 3;3423,119,3461;, + 3;3462,3463,116;, + 3;116,115,3462;, + 3;3464,3465,122;, + 3;122,117,3464;, + 3;3466,3462,115;, + 3;115,114,3466;, + 3;107,108,3460;, + 3;3467,3468,113;, + 3;113,112,3467;, + 3;3469,3459,111;, + 3;111,118,3469;, + 3;3468,3466,114;, + 3;114,113,3468;, + 3;87,86,109;, + 3;109,110,87;, + 3;3463,3464,117;, + 3;117,116,3463;, + 3;3470,3469,118;, + 3;118,3471,3470;, + 3;3472,3461,119;, + 3;119,120,3472;, + 3;3473,3472,120;, + 3;120,121,3473;, + 3;3474,3473,121;, + 3;121,123,3474;, + 3;3465,3474,123;, + 3;123,122,3465;, + 3;65,25,124;, + 3;130,132,131;, + 3;127,126,27;, + 3;129,128,3447;, + 3;27,125,127;, + 3;29,126,25;, + 3;134,132,130;, + 3;130,133,134;, + 3;125,27,128;, + 3;128,27,61;, + 3;65,124,129;, + 3;131,132,136;, + 3;3475,3476,135;, + 3;135,132,3475;, + 3;3476,3477,136;, + 3;136,135,3476;, + 3;3478,3479,130;, + 3;130,131,3478;, + 3;3480,3481,134;, + 3;134,133,3480;, + 3;3481,3475,132;, + 3;132,134,3481;, + 3;3479,3480,133;, + 3;133,130,3479;, + 3;3477,3478,131;, + 3;131,136,3477;, + 3;158,138,184;, + 3;3,3482,16;, + 3;145,159,153;, + 3;221,143,191;, + 3;137,192,146;, + 3;144,214,215;, + 3;3483,139,193;, + 3;147,3,152;, + 3;3482,3,147;, + 3;190,147,140;, + 3;231,223,227;, + 3;3484,142,12;, + 3;142,1742,12;, + 3;154,12,14;, + 3;3485,234,225;, + 3;219,146,143;, + 3;146,153,160;, + 3;3482,147,139;, + 3;230,223,231;, + 3;217,17,3424;, + 3;217,3424,138;, + 3;138,149,148;, + 3;158,149,138;, + 3;221,191,212;, + 3;147,150,140;, + 3;98,215,8;, + 3;230,229,223;, + 3;159,241,153;, + 3;3484,12,154;, + 3;160,157,137;, + 3;156,159,145;, + 3;154,3486,3484;, + 3;157,153,241;, + 3;3487,3488,3489;, + 3;153,146,145;, + 3;146,160,137;, + 3;153,157,160;, + 3;225,235,224;, + 3;161,1743,142;, + 3;155,159,162;, + 3;162,159,156;, + 3;251,250,247;, + 3;162,187,155;, + 3;185,164,182;, + 3;183,3418,137;, + 3;164,34,181;, + 3;58,16,181;, + 3;168,37,847;, + 3;175,173,177;, + 3;165,173,179;, + 3;203,847,37;, + 3;154,14,38;, + 3;205,177,173;, + 3;202,169,203;, + 3;204,166,3490;, + 3;168,3491,171;, + 3;167,3492,165;, + 3;168,47,37;, + 3;154,172,176;, + 3;165,205,173;, + 3;38,174,172;, + 3;38,172,154;, + 3;173,174,179;, + 3;174,173,175;, + 3;179,174,180;, + 3;172,174,175;, + 3;202,80,169;, + 3;189,3493,178;, + 3;166,170,188;, + 3;174,38,180;, + 3;165,179,167;, + 3;180,38,57;, + 3;179,180,167;, + 3;734,57,46;, + 3;175,176,172;, + 3;3494,3495,3496;, + 3;3497,3496,3498;, + 3;3497,3498,3499;, + 3;163,3497,3499;, + 3;186,3500,3501;, + 3;3502,163,3503;, + 3;3501,3504,3444;, + 3;176,3486,154;, + 3;3494,3505,3495;, + 3;16,3482,181;, + 3;182,181,3482;, + 3;58,181,34;, + 3;182,3482,3483;, + 3;164,181,182;, + 3;183,137,157;, + 3;3506,3507,183;, + 3;158,184,3508;, + 3;3482,139,3483;, + 3;185,3483,3509;, + 3;183,3507,3418;, + 3;185,182,3483;, + 3;163,3502,186;, + 3;3510,164,185;, + 3;187,3506,244;, + 3;3494,3496,3497;, + 3;3444,3504,42;, + 3;3504,3501,3500;, + 3;166,188,3511;, + 3;3500,186,3502;, + 3;177,3493,189;, + 3;163,3499,3503;, + 3;139,147,190;, + 3;3512,191,3513;, + 3;192,143,146;, + 3;3483,193,3509;, + 3;137,195,192;, + 3;195,137,194;, + 3;143,197,191;, + 3;197,143,196;, + 3;3514,199,3515;, + 3;199,3514,198;, + 3;3513,201,3516;, + 3;201,3513,200;, + 3;192,196,143;, + 3;196,192,195;, + 3;191,200,3513;, + 3;200,191,197;, + 3;3516,198,3514;, + 3;198,3516,201;, + 3;3515,194,137;, + 3;194,3515,199;, + 3;80,3457,169;, + 3;169,170,203;, + 3;37,80,202;, + 3;170,204,203;, + 3;202,203,37;, + 3;170,166,204;, + 3;204,3491,203;, + 3;3493,177,205;, + 3;204,3490,3491;, + 3;3,85,152;, + 3;226,228,112;, + 3;152,85,89;, + 3;226,223,229;, + 3;213,227,233;, + 3;3506,183,243;, + 3;152,89,208;, + 3;226,229,228;, + 3;109,226,112;, + 3;208,209,152;, + 3;147,152,209;, + 3;147,209,210;, + 3;147,210,150;, + 3;210,211,150;, + 3;232,231,227;, + 3;3512,3517,212;, + 3;212,191,3512;, + 3;216,151,214;, + 3;227,213,232;, + 3;144,216,214;, + 3;10,1740,215;, + 3;215,151,8;, + 3;215,214,151;, + 3;10,215,98;, + 3;161,142,3484;, + 3;1745,1742,142;, + 3;846,151,216;, + 3;224,213,233;, + 3;148,17,217;, + 3;148,217,138;, + 3;218,146,219;, + 3;145,146,218;, + 3;234,235,225;, + 3;220,219,143;, + 3;224,235,236;, + 3;213,224,237;, + 3;224,236,238;, + 3;213,237,232;, + 3;224,238,237;, + 3;220,221,222;, + 3;220,143,221;, + 3;207,223,141;, + 3;223,207,227;, + 3;3485,225,3518;, + 3;3485,3519,234;, + 3;3520,231,3521;, + 3;231,3520,230;, + 3;3522,237,3523;, + 3;237,3522,232;, + 3;3524,230,3520;, + 3;230,3524,229;, + 3;224,3518,225;, + 3;3467,228,3525;, + 3;228,3467,112;, + 3;141,223,206;, + 3;226,206,223;, + 3;3526,227,207;, + 3;227,3526,233;, + 3;3525,229,3524;, + 3;229,3525,228;, + 3;206,109,86;, + 3;109,206,226;, + 3;3521,232,3522;, + 3;232,3521,231;, + 3;3527,233,3526;, + 3;233,3528,224;, + 3;3529,234,3519;, + 3;234,3529,235;, + 3;3530,235,3529;, + 3;235,3530,236;, + 3;3531,236,3530;, + 3;236,3531,238;, + 3;3523,238,3531;, + 3;238,3523,237;, + 3;187,239,155;, + 3;245,246,247;, + 3;242,157,241;, + 3;244,3506,243;, + 3;157,242,240;, + 3;159,155,241;, + 3;249,245,247;, + 3;245,249,248;, + 3;240,243,157;, + 3;243,183,157;, + 3;187,244,239;, + 3;246,251,247;, + 3;3532,250,3533;, + 3;250,3532,247;, + 3;3533,251,3534;, + 3;251,3533,250;, + 3;3535,245,3536;, + 3;245,3535,246;, + 3;3537,249,3538;, + 3;249,3537,248;, + 3;3538,247,3532;, + 3;247,3538,249;, + 3;3536,248,3537;, + 3;248,3536,245;, + 3;3534,246,3535;, + 3;246,3534,251;, + 3;255,472,550;, + 3;257,258,551;, + 3;252,467,554;, + 3;453,462,446;, + 3;439,447,448;, + 3;265,262,255;, + 3;462,463,460;, + 3;449,438,450;, + 3;439,443,447;, + 3;469,313,465;, + 3;254,289,466;, + 3;466,483,484;, + 3;260,435,432;, + 3;465,468,469;, + 3;260,473,474;, + 3;434,3539,3540;, + 3;259,465,474;, + 3;266,3541,262;, + 3;313,255,262;, + 3;438,449,445;, + 3;459,258,264;, + 3;265,266,262;, + 3;345,287,343;, + 3;486,485,271;, + 3;344,274,275;, + 3;335,534,535;, + 3;273,3542,340;, + 3;279,337,282;, + 3;393,333,269;, + 3;279,333,280;, + 3;3543,476,475;, + 3;397,400,417;, + 3;398,284,402;, + 3;388,284,405;, + 3;342,285,3544;, + 3;399,407,338;, + 3;394,392,3542;, + 3;480,479,285;, + 3;3542,392,342;, + 3;288,340,3542;, + 3;287,333,282;, + 3;344,334,274;, + 3;333,287,345;, + 3;343,275,270;, + 3;3544,285,552;, + 3;340,288,3544;, + 3;399,389,404;, + 3;290,295,296;, + 3;296,291,290;, + 3;291,296,297;, + 3;297,292,291;, + 3;292,297,298;, + 3;298,293,292;, + 3;309,310,299;, + 3;299,294,309;, + 3;300,301,424;, + 3;3545,422,3546;, + 3;301,302,424;, + 3;347,349,422;, + 3;305,423,306;, + 3;271,368,367;, + 3;3547,3548,301;, + 3;301,300,3547;, + 3;301,3549,426;, + 3;3549,301,3548;, + 3;358,426,359;, + 3;3550,359,426;, + 3;360,3551,364;, + 3;272,303,379;, + 3;374,276,277;, + 3;3552,3553,354;, + 3;3554,3555,306;, + 3;425,353,3553;, + 3;3555,3556,305;, + 3;305,306,3555;, + 3;305,3557,304;, + 3;3557,305,3556;, + 3;3558,3559,3546;, + 3;3546,3560,3558;, + 3;380,277,272;, + 3;294,299,308;, + 3;380,384,277;, + 3;3561,362,3550;, + 3;309,293,310;, + 3;310,293,298;, + 3;425,3553,3554;, + 3;518,517,330;, + 3;376,377,3562;, + 3;3543,477,476;, + 3;286,265,478;, + 3;487,277,488;, + 3;324,273,536;, + 3;313,470,255;, + 3;465,313,262;, + 3;502,501,314;, + 3;489,3562,490;, + 3;3563,491,317;, + 3;533,547,537;, + 3;318,492,493;, + 3;494,485,315;, + 3;330,503,504;, + 3;491,272,495;, + 3;495,487,319;, + 3;506,505,320;, + 3;488,277,496;, + 3;496,497,320;, + 3;519,312,520;, + 3;498,346,499;, + 3;499,489,316;, + 3;497,276,500;, + 3;500,3564,3565;, + 3;507,312,508;, + 3;510,509,319;, + 3;323,268,322;, + 3;512,511,3566;, + 3;466,3540,254;, + 3;550,478,255;, + 3;286,478,479;, + 3;410,387,411;, + 3;390,265,286;, + 3;332,289,254;, + 3;289,256,466;, + 3;281,256,289;, + 3;281,258,256;, + 3;279,548,391;, + 3;279,280,549;, + 3;549,280,261;, + 3;311,472,475;, + 3;3567,472,3568;, + 3;335,340,3544;, + 3;519,323,521;, + 3;513,511,325;, + 3;318,503,514;, + 3;3569,509,327;, + 3;515,505,328;, + 3;516,318,514;, + 3;506,3570,329;, + 3;504,501,330;, + 3;522,518,330;, + 3;267,538,539;, + 3;540,275,541;, + 3;526,278,527;, + 3;525,526,329;, + 3;507,321,515;, + 3;528,322,529;, + 3;521,528,331;, + 3;529,322,530;, + 3;502,513,325;, + 3;510,319,508;, + 3;531,328,527;, + 3;324,532,531;, + 3;325,3571,523;, + 3;420,400,418;, + 3;266,3572,3541;, + 3;279,282,333;, + 3;267,269,553;, + 3;414,409,416;, + 3;287,282,334;, + 3;536,544,336;, + 3;268,534,3573;, + 3;520,312,532;, + 3;548,281,391;, + 3;284,398,403;, + 3;410,416,409;, + 3;338,389,399;, + 3;288,341,3544;, + 3;3542,341,288;, + 3;273,340,543;, + 3;3542,339,341;, + 3;341,339,3544;, + 3;339,342,3544;, + 3;3542,342,339;, + 3;343,344,275;, + 3;267,343,270;, + 3;287,344,343;, + 3;287,334,344;, + 3;267,345,343;, + 3;553,345,267;, + 3;486,498,314;, + 3;347,3545,357;, + 3;271,367,346;, + 3;348,368,271;, + 3;493,348,494;, + 3;370,348,371;, + 3;350,3574,349;, + 3;422,3574,3560;, + 3;348,369,368;, + 3;3575,351,306;, + 3;369,348,370;, + 3;348,307,371;, + 3;306,425,3554;, + 3;351,352,306;, + 3;371,307,372;, + 3;354,3553,353;, + 3;384,374,277;, + 3;3576,276,375;, + 3;374,375,276;, + 3;346,376,3562;, + 3;367,376,346;, + 3;3577,302,358;, + 3;3550,426,3549;, + 3;359,3550,362;, + 3;3562,377,378;, + 3;385,373,3576;, + 3;3576,375,385;, + 3;355,3552,356;, + 3;3578,3552,355;, + 3;379,303,382;, + 3;3561,3551,360;, + 3;3551,361,364;, + 3;3551,3579,361;, + 3;378,381,3562;, + 3;3561,363,362;, + 3;360,363,3561;, + 3;383,380,272;, + 3;379,383,272;, + 3;361,3579,365;, + 3;3578,355,3580;, + 3;366,356,3552;, + 3;3552,354,366;, + 3;3581,3582,367;, + 3;367,368,3581;, + 3;3583,3584,378;, + 3;378,377,3583;, + 3;3585,3586,383;, + 3;383,379,3585;, + 3;3587,3588,371;, + 3;371,372,3587;, + 3;3589,3590,384;, + 3;384,380,3589;, + 3;3591,3583,377;, + 3;377,376,3591;, + 3;3582,3591,376;, + 3;376,367,3582;, + 3;3588,3592,370;, + 3;370,371,3588;, + 3;3593,3581,368;, + 3;368,369,3593;, + 3;3592,3593,369;, + 3;369,370,3592;, + 3;3590,3594,374;, + 3;374,384,3590;, + 3;3594,3595,375;, + 3;375,374,3594;, + 3;3584,3596,381;, + 3;381,378,3584;, + 3;3597,3598,373;, + 3;373,385,3597;, + 3;3595,3597,385;, + 3;385,375,3595;, + 3;3599,3585,379;, + 3;379,382,3599;, + 3;3586,3589,380;, + 3;380,383,3586;, + 3;338,386,389;, + 3;409,387,410;, + 3;418,400,401;, + 3;418,401,419;, + 3;409,412,387;, + 3;284,403,405;, + 3;419,401,413;, + 3;413,401,396;, + 3;415,413,396;, + 3;266,265,390;, + 3;405,408,388;, + 3;279,391,337;, + 3;395,479,480;, + 3;392,285,342;, + 3;393,280,333;, + 3;477,3543,3600;, + 3;338,407,406;, + 3;3601,274,334;, + 3;480,285,392;, + 3;395,392,394;, + 3;3602,3603,403;, + 3;403,398,3602;, + 3;3604,3605,400;, + 3;400,397,3604;, + 3;3606,3604,397;, + 3;397,408,3606;, + 3;3607,3602,398;, + 3;398,402,3607;, + 3;3603,3606,405;, + 3;405,403,3603;, + 3;3608,3609,399;, + 3;399,404,3608;, + 3;3605,3610,401;, + 3;401,400,3605;, + 3;3610,3611,396;, + 3;396,401,3610;, + 3;3612,3607,402;, + 3;402,406,3612;, + 3;3611,3608,404;, + 3;404,396,3611;, + 3;3609,3613,407;, + 3;407,399,3609;, + 3;3613,3612,406;, + 3;406,407,3613;, + 3;417,400,420;, + 3;408,405,3606;, + 3;397,417,408;, + 3;402,284,409;, + 3;409,414,402;, + 3;338,406,416;, + 3;416,410,338;, + 3;404,389,413;, + 3;413,415,404;, + 3;386,338,410;, + 3;410,411,386;, + 3;406,402,414;, + 3;414,416,406;, + 3;389,386,411;, + 3;411,413,389;, + 3;284,388,412;, + 3;412,409,284;, + 3;396,404,415;, + 3;388,408,417;, + 3;417,412,388;, + 3;411,387,418;, + 3;418,419,411;, + 3;387,412,420;, + 3;420,418,387;, + 3;413,411,419;, + 3;417,420,412;, + 3;258,421,264;, + 3;421,258,257;, + 3;3598,3576,373;, + 3;354,353,3614;, + 3;3587,372,307;, + 3;362,363,3615;, + 3;3599,382,303;, + 3;381,3596,3562;, + 3;422,349,3574;, + 3;422,3560,3546;, + 3;3575,306,423;, + 3;423,305,304;, + 3;424,302,3577;, + 3;422,3545,347;, + 3;306,352,425;, + 3;352,353,425;, + 3;358,302,426;, + 3;301,426,302;, + 3;444,443,442;, + 3;443,439,442;, + 3;454,457,455;, + 3;438,445,452;, + 3;432,431,464;, + 3;432,473,260;, + 3;263,433,434;, + 3;482,434,3540;, + 3;431,427,464;, + 3;464,427,556;, + 3;448,451,440;, + 3;448,440,439;, + 3;450,3616,3617;, + 3;438,3616,450;, + 3;429,433,263;, + 3;458,481,459;, + 3;452,445,3618;, + 3;454,456,457;, + 3;462,460,446;, + 3;428,3619,443;, + 3;443,444,428;, + 3;3620,3621,448;, + 3;448,447,3620;, + 3;3622,3623,449;, + 3;449,450,3622;, + 3;3619,3620,447;, + 3;447,443,3619;, + 3;3621,3624,451;, + 3;451,448,3621;, + 3;3625,3622,450;, + 3;450,3617,3625;, + 3;3623,3626,445;, + 3;445,449,3623;, + 3;3627,3628,442;, + 3;442,439,3627;, + 3;3629,3630,438;, + 3;438,452,3629;, + 3;3631,3627,439;, + 3;439,440,3631;, + 3;3630,3632,3616;, + 3;3616,438,3630;, + 3;3626,437,3618;, + 3;3618,445,3626;, + 3;3633,3634,3635;, + 3;3635,441,3633;, + 3;3636,3637,455;, + 3;455,457,3636;, + 3;3635,3636,457;, + 3;457,456,3635;, + 3;441,3635,456;, + 3;456,454,441;, + 3;429,458,3638;, + 3;429,481,458;, + 3;256,258,459;, + 3;463,461,460;, + 3;3638,458,462;, + 3;462,453,3638;, + 3;458,459,463;, + 3;463,462,458;, + 3;459,264,461;, + 3;461,463,459;, + 3;253,430,446;, + 3;446,460,253;, + 3;264,253,460;, + 3;3639,3640,3641;, + 3;556,427,554;, + 3;473,259,474;, + 3;3541,474,262;, + 3;259,468,465;, + 3;466,256,483;, + 3;3540,466,482;, + 3;259,467,468;, + 3;464,467,259;, + 3;467,252,468;, + 3;469,555,3568;, + 3;469,468,252;, + 3;470,313,469;, + 3;3568,470,469;, + 3;470,3568,471;, + 3;472,255,471;, + 3;470,471,255;, + 3;3568,472,471;, + 3;311,283,472;, + 3;432,464,473;, + 3;464,259,473;, + 3;474,465,262;, + 3;260,474,3541;, + 3;475,472,3567;, + 3;3543,475,3567;, + 3;476,477,311;, + 3;476,311,475;, + 3;3544,552,3600;, + 3;477,285,311;, + 3;265,255,478;, + 3;478,283,311;, + 3;479,478,311;, + 3;479,311,285;, + 3;395,480,392;, + 3;286,479,395;, + 3;429,263,481;, + 3;481,263,484;, + 3;482,466,484;, + 3;263,434,482;, + 3;483,256,459;, + 3;483,459,484;, + 3;484,459,481;, + 3;482,484,263;, + 3;486,315,485;, + 3;314,315,486;, + 3;319,487,488;, + 3;319,488,321;, + 3;316,489,490;, + 3;316,490,3566;, + 3;3563,272,491;, + 3;303,272,3563;, + 3;493,492,348;, + 3;492,307,348;, + 3;494,271,485;, + 3;348,271,494;, + 3;317,491,495;, + 3;317,495,319;, + 3;495,277,487;, + 3;272,277,495;, + 3;321,488,496;, + 3;321,496,320;, + 3;496,276,497;, + 3;277,276,496;, + 3;314,498,499;, + 3;314,499,316;, + 3;499,3562,489;, + 3;346,3562,499;, + 3;320,497,500;, + 3;320,500,3565;, + 3;500,3576,3564;, + 3;276,3576,500;, + 3;486,346,498;, + 3;271,346,486;, + 3;318,493,494;, + 3;318,494,315;, + 3;502,325,501;, + 3;325,545,501;, + 3;504,503,315;, + 3;503,318,315;, + 3;506,328,505;, + 3;329,328,506;, + 3;321,507,508;, + 3;321,508,319;, + 3;510,331,509;, + 3;331,327,509;, + 3;512,325,511;, + 3;3642,325,512;, + 3;513,3566,511;, + 3;316,3566,513;, + 3;514,503,326;, + 3;503,330,326;, + 3;3569,319,509;, + 3;317,319,3569;, + 3;515,320,505;, + 3;321,320,515;, + 3;3643,516,514;, + 3;3643,514,326;, + 3;506,3565,3570;, + 3;320,3565,506;, + 3;504,314,501;, + 3;315,314,504;, + 3;312,507,515;, + 3;312,515,328;, + 3;502,316,513;, + 3;314,316,502;, + 3;331,510,508;, + 3;331,508,312;, + 3;542,540,517;, + 3;336,519,520;, + 3;323,519,336;, + 3;331,519,521;, + 3;312,519,331;, + 3;538,542,522;, + 3;523,522,325;, + 3;522,545,325;, + 3;326,517,524;, + 3;330,517,326;, + 3;524,3644,326;, + 3;3644,3643,326;, + 3;329,526,527;, + 3;329,527,328;, + 3;525,278,526;, + 3;275,3645,541;, + 3;327,528,529;, + 3;331,528,327;, + 3;521,323,528;, + 3;323,322,528;, + 3;327,529,530;, + 3;3642,3571,325;, + 3;324,531,527;, + 3;324,527,278;, + 3;531,532,328;, + 3;532,312,328;, + 3;539,537,267;, + 3;336,520,532;, + 3;336,532,324;, + 3;267,537,547;, + 3;535,534,323;, + 3;534,268,323;, + 3;546,275,274;, + 3;278,273,324;, + 3;3646,533,537;, + 3;3646,537,3647;, + 3;536,336,324;, + 3;539,538,523;, + 3;538,522,523;, + 3;517,540,541;, + 3;517,541,524;, + 3;541,3644,524;, + 3;536,543,544;, + 3;273,543,536;, + 3;3573,534,335;, + 3;3573,335,3648;, + 3;535,323,336;, + 3;3542,273,3649;, + 3;518,542,517;, + 3;542,275,540;, + 3;270,275,542;, + 3;522,542,518;, + 3;538,267,542;, + 3;267,270,542;, + 3;541,3645,3644;, + 3;539,523,537;, + 3;523,3571,537;, + 3;3571,3647,537;, + 3;543,340,335;, + 3;543,335,535;, + 3;544,543,535;, + 3;544,535,336;, + 3;522,330,545;, + 3;545,330,501;, + 3;3649,273,278;, + 3;3645,275,546;, + 3;3648,335,3544;, + 3;547,269,267;, + 3;279,258,548;, + 3;258,281,548;, + 3;258,549,551;, + 3;279,549,258;, + 3;550,472,283;, + 3;283,478,550;, + 3;551,549,261;, + 3;257,551,261;, + 3;552,285,477;, + 3;552,477,3600;, + 3;553,269,333;, + 3;333,345,553;, + 3;554,427,3650;, + 3;469,252,555;, + 3;467,556,554;, + 3;464,556,467;, + 3;558,840,762;, + 3;257,841,560;, + 3;252,554,757;, + 3;747,446,752;, + 3;737,742,741;, + 3;566,558,564;, + 3;752,460,753;, + 3;743,744,736;, + 3;737,741,739;, + 3;759,755,614;, + 3;557,756,590;, + 3;756,774,773;, + 3;562,730,733;, + 3;755,759,758;, + 3;562,764,763;, + 3;732,3651,3652;, + 3;561,764,755;, + 3;567,564,3653;, + 3;614,564,558;, + 3;736,740,743;, + 3;751,264,560;, + 3;566,564,567;, + 3;646,644,588;, + 3;776,572,775;, + 3;645,576,575;, + 3;636,825,824;, + 3;574,641,3654;, + 3;580,583,638;, + 3;694,570,634;, + 3;580,581,634;, + 3;3655,765,766;, + 3;698,718,701;, + 3;699,703,585;, + 3;689,706,585;, + 3;643,3656,586;, + 3;700,639,708;, + 3;695,3654,693;, + 3;770,586,769;, + 3;3654,643,693;, + 3;589,3654,641;, + 3;588,583,634;, + 3;645,575,635;, + 3;634,646,588;, + 3;644,571,576;, + 3;3656,842,586;, + 3;641,3656,589;, + 3;700,705,690;, + 3;591,597,596;, + 3;597,591,592;, + 3;592,598,597;, + 3;598,592,593;, + 3;593,599,598;, + 3;599,593,594;, + 3;610,600,611;, + 3;600,610,595;, + 3;601,724,602;, + 3;3657,3658,722;, + 3;602,724,603;, + 3;648,722,650;, + 3;606,607,723;, + 3;572,668,669;, + 3;3659,602,3660;, + 3;602,3659,601;, + 3;602,726,3661;, + 3;3661,3660,602;, + 3;659,660,726;, + 3;3662,726,660;, + 3;661,665,3663;, + 3;573,680,604;, + 3;675,578,577;, + 3;3664,655,3665;, + 3;3666,607,3667;, + 3;725,3665,654;, + 3;3667,606,3668;, + 3;606,3667,607;, + 3;606,605,3669;, + 3;3669,3668,606;, + 3;3670,3658,3671;, + 3;3658,3670,3672;, + 3;681,573,578;, + 3;595,609,600;, + 3;681,578,685;, + 3;3673,3662,663;, + 3;610,611,594;, + 3;611,599,594;, + 3;725,3666,3665;, + 3;808,631,807;, + 3;677,3674,678;, + 3;3655,766,767;, + 3;587,768,566;, + 3;777,778,578;, + 3;625,826,574;, + 3;614,558,760;, + 3;755,564,614;, + 3;792,615,791;, + 3;779,780,3674;, + 3;3675,618,781;, + 3;823,827,837;, + 3;619,783,782;, + 3;784,616,775;, + 3;631,794,793;, + 3;781,785,573;, + 3;785,620,777;, + 3;796,621,795;, + 3;778,786,578;, + 3;786,621,787;, + 3;809,810,613;, + 3;788,789,647;, + 3;789,617,779;, + 3;787,790,577;, + 3;790,3676,3677;, + 3;797,798,613;, + 3;800,620,799;, + 3;624,623,569;, + 3;802,3678,801;, + 3;756,557,3651;, + 3;840,558,768;, + 3;587,769,768;, + 3;711,712,688;, + 3;691,587,566;, + 3;633,557,590;, + 3;590,756,559;, + 3;582,590,559;, + 3;582,559,560;, + 3;580,692,838;, + 3;580,839,581;, + 3;839,563,581;, + 3;612,765,762;, + 3;3679,3568,762;, + 3;636,3656,641;, + 3;809,811,624;, + 3;803,626,801;, + 3;619,804,793;, + 3;3680,628,799;, + 3;805,629,795;, + 3;806,804,619;, + 3;796,630,3681;, + 3;794,631,791;, + 3;812,631,808;, + 3;568,829,828;, + 3;830,831,576;, + 3;816,817,579;, + 3;815,630,816;, + 3;797,805,622;, + 3;818,819,623;, + 3;811,632,818;, + 3;819,820,623;, + 3;792,626,803;, + 3;800,798,620;, + 3;821,817,629;, + 3;625,821,822;, + 3;626,813,3682;, + 3;721,719,701;, + 3;567,3653,3683;, + 3;580,634,583;, + 3;568,843,570;, + 3;715,717,710;, + 3;588,635,583;, + 3;826,637,834;, + 3;569,3684,824;, + 3;810,822,613;, + 3;838,692,582;, + 3;585,704,699;, + 3;711,710,717;, + 3;639,700,690;, + 3;589,3656,642;, + 3;3654,589,642;, + 3;574,833,641;, + 3;3654,642,640;, + 3;642,3656,640;, + 3;640,3656,643;, + 3;3654,640,643;, + 3;644,576,645;, + 3;568,571,644;, + 3;588,644,645;, + 3;588,645,635;, + 3;568,644,646;, + 3;843,568,646;, + 3;776,615,788;, + 3;724,658,603;, + 3;572,647,668;, + 3;649,572,669;, + 3;783,784,649;, + 3;671,672,649;, + 3;651,650,3685;, + 3;722,3672,3685;, + 3;649,669,670;, + 3;3686,607,652;, + 3;670,671,649;, + 3;649,672,608;, + 3;607,3666,725;, + 3;652,607,653;, + 3;672,673,608;, + 3;655,654,3665;, + 3;685,578,675;, + 3;3687,676,577;, + 3;675,577,676;, + 3;647,3674,677;, + 3;668,647,677;, + 3;658,659,603;, + 3;3662,3661,726;, + 3;660,663,3662;, + 3;3674,679,678;, + 3;686,3687,674;, + 3;3687,686,676;, + 3;656,657,3664;, + 3;3688,656,3664;, + 3;680,683,604;, + 3;3673,661,3663;, + 3;3663,665,662;, + 3;3663,662,3689;, + 3;679,3674,682;, + 3;3673,663,664;, + 3;661,3673,664;, + 3;684,573,681;, + 3;680,573,684;, + 3;662,666,3689;, + 3;3688,3690,656;, + 3;667,3664,657;, + 3;3664,667,655;, + 3;3691,668,3692;, + 3;668,3691,669;, + 3;3693,679,3694;, + 3;679,3693,678;, + 3;3695,684,3696;, + 3;684,3695,680;, + 3;3697,672,3698;, + 3;672,3697,673;, + 3;3699,685,3700;, + 3;685,3699,681;, + 3;3701,678,3693;, + 3;678,3701,677;, + 3;3692,677,3701;, + 3;677,3692,668;, + 3;3698,671,3702;, + 3;671,3698,672;, + 3;3703,669,3691;, + 3;669,3703,670;, + 3;3702,670,3703;, + 3;670,3702,671;, + 3;3700,675,3704;, + 3;675,3700,685;, + 3;3704,676,3705;, + 3;676,3704,675;, + 3;3694,682,3706;, + 3;682,3694,679;, + 3;3707,674,3708;, + 3;674,3707,686;, + 3;3705,686,3707;, + 3;686,3705,676;, + 3;3709,680,3695;, + 3;680,3709,683;, + 3;3696,681,3699;, + 3;681,3696,684;, + 3;639,690,687;, + 3;710,711,688;, + 3;719,702,701;, + 3;719,720,702;, + 3;710,688,713;, + 3;585,706,704;, + 3;720,714,702;, + 3;714,697,702;, + 3;716,697,714;, + 3;567,691,566;, + 3;706,689,709;, + 3;580,638,692;, + 3;696,770,769;, + 3;693,643,586;, + 3;694,634,581;, + 3;767,3710,3655;, + 3;639,707,708;, + 3;3711,635,575;, + 3;770,693,586;, + 3;696,695,693;, + 3;3712,704,3713;, + 3;704,3712,699;, + 3;3714,701,3715;, + 3;701,3714,698;, + 3;3716,698,3714;, + 3;698,3716,709;, + 3;3717,699,3712;, + 3;699,3717,703;, + 3;3713,706,3716;, + 3;706,3713,704;, + 3;3718,700,3719;, + 3;700,3718,705;, + 3;3715,702,3720;, + 3;702,3715,701;, + 3;3720,697,3721;, + 3;697,3720,702;, + 3;3722,703,3717;, + 3;703,3722,707;, + 3;3721,705,3718;, + 3;705,3721,697;, + 3;3719,708,3723;, + 3;708,3719,700;, + 3;3723,707,3722;, + 3;707,3723,708;, + 3;718,721,701;, + 3;709,3716,706;, + 3;698,709,718;, + 3;703,710,585;, + 3;710,703,715;, + 3;639,717,707;, + 3;717,639,711;, + 3;705,714,690;, + 3;714,705,716;, + 3;687,711,639;, + 3;711,687,712;, + 3;707,715,703;, + 3;715,707,717;, + 3;690,712,687;, + 3;712,690,714;, + 3;585,713,689;, + 3;713,585,710;, + 3;697,716,705;, + 3;689,718,709;, + 3;718,689,713;, + 3;712,719,688;, + 3;719,712,720;, + 3;688,721,713;, + 3;721,688,719;, + 3;714,720,712;, + 3;718,713,721;, + 3;560,264,421;, + 3;421,257,560;, + 3;3708,674,3687;, + 3;655,3724,654;, + 3;3697,608,673;, + 3;663,3725,664;, + 3;3709,604,683;, + 3;682,3674,3706;, + 3;722,3685,650;, + 3;722,3658,3672;, + 3;3686,723,607;, + 3;723,605,606;, + 3;3657,648,3726;, + 3;722,648,3657;, + 3;607,725,653;, + 3;653,725,654;, + 3;659,726,603;, + 3;602,603,726;, + 3;444,442,739;, + 3;739,442,737;, + 3;454,455,749;, + 3;736,746,740;, + 3;730,754,729;, + 3;730,562,763;, + 3;565,732,731;, + 3;772,3651,732;, + 3;729,754,727;, + 3;754,844,727;, + 3;742,738,745;, + 3;742,737,738;, + 3;744,3727,3728;, + 3;736,744,3728;, + 3;728,565,731;, + 3;750,751,771;, + 3;746,3729,740;, + 3;454,749,748;, + 3;752,446,460;, + 3;428,739,3730;, + 3;739,428,444;, + 3;3731,742,3732;, + 3;742,3731,741;, + 3;3733,743,3734;, + 3;743,3733,744;, + 3;3730,741,3731;, + 3;741,3730,739;, + 3;3732,745,3735;, + 3;745,3732,742;, + 3;3736,744,3733;, + 3;744,3736,3727;, + 3;3734,740,3737;, + 3;740,3734,743;, + 3;3738,442,3628;, + 3;442,3738,737;, + 3;3739,736,3740;, + 3;736,3739,746;, + 3;3741,737,3738;, + 3;737,3741,738;, + 3;3740,3728,3742;, + 3;3728,3740,736;, + 3;3737,3729,735;, + 3;3729,3737,740;, + 3;3633,3743,3744;, + 3;3743,3633,441;, + 3;3745,455,3637;, + 3;455,3745,749;, + 3;3743,749,3745;, + 3;749,3743,748;, + 3;441,748,3743;, + 3;748,441,454;, + 3;728,3746,750;, + 3;728,750,771;, + 3;559,751,560;, + 3;753,460,461;, + 3;3746,752,750;, + 3;752,3746,747;, + 3;750,753,751;, + 3;753,750,752;, + 3;751,461,264;, + 3;461,751,753;, + 3;253,446,430;, + 3;446,253,460;, + 3;264,460,253;, + 3;460,264,461;, + 3;844,554,727;, + 3;763,764,561;, + 3;3653,564,764;, + 3;561,755,758;, + 3;756,773,559;, + 3;3651,772,756;, + 3;561,758,757;, + 3;754,561,757;, + 3;757,758,252;, + 3;759,3568,555;, + 3;759,252,758;, + 3;760,759,614;, + 3;3568,759,760;, + 3;760,761,3568;, + 3;762,761,558;, + 3;760,558,761;, + 3;3568,761,762;, + 3;612,762,584;, + 3;730,763,754;, + 3;754,763,561;, + 3;764,564,755;, + 3;562,3653,764;, + 3;765,3679,762;, + 3;3655,3679,765;, + 3;766,612,767;, + 3;766,765,612;, + 3;3656,3710,842;, + 3;767,612,586;, + 3;566,768,558;, + 3;768,612,584;, + 3;769,612,768;, + 3;769,586,612;, + 3;696,693,770;, + 3;587,696,769;, + 3;728,771,565;, + 3;771,774,565;, + 3;772,774,756;, + 3;565,772,732;, + 3;773,751,559;, + 3;773,774,751;, + 3;774,771,751;, + 3;772,565,774;, + 3;776,775,616;, + 3;615,776,616;, + 3;620,778,777;, + 3;620,622,778;, + 3;617,780,779;, + 3;617,3678,780;, + 3;3675,781,573;, + 3;604,3675,573;, + 3;783,649,782;, + 3;782,649,608;, + 3;784,775,572;, + 3;649,784,572;, + 3;618,785,781;, + 3;618,620,785;, + 3;785,777,578;, + 3;573,785,578;, + 3;622,786,778;, + 3;622,621,786;, + 3;786,787,577;, + 3;578,786,577;, + 3;615,789,788;, + 3;615,617,789;, + 3;789,779,3674;, + 3;647,789,3674;, + 3;621,790,787;, + 3;621,3676,790;, + 3;790,3677,3687;, + 3;577,790,3687;, + 3;776,788,647;, + 3;572,776,647;, + 3;619,784,783;, + 3;619,616,784;, + 3;792,791,626;, + 3;626,791,835;, + 3;794,616,793;, + 3;793,616,619;, + 3;796,795,629;, + 3;630,796,629;, + 3;622,798,797;, + 3;622,620,798;, + 3;800,799,632;, + 3;632,799,628;, + 3;802,801,626;, + 3;3747,802,626;, + 3;803,801,3678;, + 3;617,803,3678;, + 3;804,627,793;, + 3;793,627,631;, + 3;3680,799,620;, + 3;618,3680,620;, + 3;805,795,621;, + 3;622,805,621;, + 3;3748,804,806;, + 3;3748,627,804;, + 3;796,3681,3676;, + 3;621,796,3676;, + 3;794,791,615;, + 3;616,794,615;, + 3;613,805,797;, + 3;613,629,805;, + 3;792,803,617;, + 3;615,792,617;, + 3;632,798,800;, + 3;632,613,798;, + 3;832,807,830;, + 3;637,810,809;, + 3;624,637,809;, + 3;632,811,809;, + 3;613,632,809;, + 3;828,812,832;, + 3;813,626,812;, + 3;812,626,835;, + 3;627,814,807;, + 3;631,627,807;, + 3;814,627,3749;, + 3;3749,627,3748;, + 3;630,817,816;, + 3;630,629,817;, + 3;815,816,579;, + 3;576,831,3750;, + 3;628,819,818;, + 3;632,628,818;, + 3;811,818,624;, + 3;624,818,623;, + 3;628,820,819;, + 3;3747,626,3682;, + 3;625,817,821;, + 3;625,579,817;, + 3;821,629,822;, + 3;822,629,613;, + 3;829,568,827;, + 3;637,822,810;, + 3;637,625,822;, + 3;568,837,827;, + 3;825,624,824;, + 3;824,624,569;, + 3;836,575,576;, + 3;579,625,574;, + 3;3751,827,823;, + 3;3751,3752,827;, + 3;826,625,637;, + 3;829,813,828;, + 3;828,813,812;, + 3;807,831,830;, + 3;807,814,831;, + 3;831,814,3749;, + 3;826,834,833;, + 3;574,826,833;, + 3;3684,636,824;, + 3;3684,3753,636;, + 3;825,637,624;, + 3;3654,3754,574;, + 3;808,807,832;, + 3;832,830,576;, + 3;571,832,576;, + 3;812,808,832;, + 3;828,832,568;, + 3;568,832,571;, + 3;831,3749,3750;, + 3;829,827,813;, + 3;813,827,3682;, + 3;3682,827,3752;, + 3;833,636,641;, + 3;833,825,636;, + 3;834,825,833;, + 3;834,637,825;, + 3;812,835,631;, + 3;835,791,631;, + 3;3754,579,574;, + 3;3750,836,576;, + 3;3753,3656,636;, + 3;837,568,570;, + 3;580,838,560;, + 3;560,838,582;, + 3;560,841,839;, + 3;580,560,839;, + 3;840,584,762;, + 3;584,840,768;, + 3;841,563,839;, + 3;257,563,841;, + 3;842,767,586;, + 3;842,3710,767;, + 3;843,634,570;, + 3;634,843,646;, + 3;554,3650,727;, + 3;759,555,252;, + 3;757,554,844;, + 3;754,757,844;, + 3;845,99,21;, + 3;3755,846,216;, + 3;180,734,167;, + 3;180,57,734;, + 3;46,57,436;, + 3;436,56,40;, + 3;203,3491,847;, + 3;168,847,3491;, + 3;82,37,848;, + 3;41,848,37;, + 3;849,1291,850;, + 3;943,852,851;, + 3;849,1290,944;, + 3;1289,854,1293;, + 3;854,1289,944;, + 3;859,888,945;, + 3;855,861,887;, + 3;946,856,3756;, + 3;1292,3757,3758;, + 3;3757,3759,3760;, + 3;852,946,851;, + 3;857,889,849;, + 3;858,857,850;, + 3;850,857,849;, + 3;853,860,1290;, + 3;3761,861,3758;, + 3;3758,861,855;, + 3;887,859,945;, + 3;875,891,890;, + 3;893,892,862;, + 3;894,869,895;, + 3;897,896,863;, + 3;898,876,899;, + 3;900,862,892;, + 3;902,901,874;, + 3;898,877,903;, + 3;868,904,890;, + 3;894,864,905;, + 3;905,864,904;, + 3;896,872,895;, + 3;867,902,906;, + 3;3762,3763,891;, + 3;899,906,865;, + 3;903,3764,3765;, + 3;901,900,874;, + 3;3763,880,868;, + 3;880,3763,879;, + 3;867,882,878;, + 3;882,867,881;, + 3;3765,884,876;, + 3;884,3765,883;, + 3;866,886,869;, + 3;886,866,885;, + 3;868,880,866;, + 3;885,866,880;, + 3;869,3766,863;, + 3;3766,869,886;, + 3;876,881,867;, + 3;881,876,884;, + 3;878,3767,862;, + 3;3767,878,882;, + 3;870,3768,871;, + 3;3768,870,3769;, + 3;872,3770,864;, + 3;3770,872,3771;, + 3;873,3771,872;, + 3;3771,873,3772;, + 3;865,3773,877;, + 3;3773,865,3774;, + 3;871,3775,874;, + 3;3775,871,3768;, + 3;864,3776,875;, + 3;3776,864,3770;, + 3;874,3774,865;, + 3;3774,874,3775;, + 3;875,3777,3778;, + 3;3777,875,3776;, + 3;877,3779,3780;, + 3;3779,877,3773;, + 3;890,891,868;, + 3;868,891,3763;, + 3;892,893,871;, + 3;871,893,870;, + 3;894,895,864;, + 3;864,895,872;, + 3;896,897,872;, + 3;872,897,873;, + 3;898,899,877;, + 3;877,899,865;, + 3;900,892,874;, + 3;874,892,871;, + 3;901,902,878;, + 3;878,902,867;, + 3;898,903,876;, + 3;876,903,3765;, + 3;890,904,875;, + 3;875,904,864;, + 3;894,905,869;, + 3;869,905,866;, + 3;905,904,866;, + 3;866,904,868;, + 3;896,895,863;, + 3;863,895,869;, + 3;906,902,865;, + 3;865,902,874;, + 3;3762,891,3778;, + 3;3778,891,875;, + 3;906,899,867;, + 3;867,899,876;, + 3;3764,903,3780;, + 3;3780,903,877;, + 3;900,901,862;, + 3;862,901,878;, + 3;889,1290,849;, + 3;3781,858,850;, + 3;855,887,945;, + 3;921,939,908;, + 3;942,922,3782;, + 3;923,910,924;, + 3;907,926,925;, + 3;926,927,911;, + 3;929,928,915;, + 3;3783,919,913;, + 3;931,930,913;, + 3;941,920,908;, + 3;931,932,3784;, + 3;929,933,908;, + 3;916,918,3785;, + 3;917,3786,913;, + 3;935,934,914;, + 3;916,935,936;, + 3;937,3787,938;, + 3;3788,3785,918;, + 3;3789,909,919;, + 3;912,3790,3791;, + 3;916,3786,917;, + 3;934,930,914;, + 3;918,3792,3788;, + 3;936,3787,937;, + 3;3783,913,3786;, + 3;932,3793,3784;, + 3;928,3794,915;, + 3;940,908,939;, + 3;907,942,940;, + 3;927,933,911;, + 3;922,3795,3782;, + 3;925,910,923;, + 3;923,924,922;, + 3;922,924,3795;, + 3;925,926,910;, + 3;910,926,911;, + 3;927,926,921;, + 3;921,926,907;, + 3;928,929,920;, + 3;920,929,908;, + 3;930,931,914;, + 3;914,931,3784;, + 3;932,931,919;, + 3;919,931,913;, + 3;933,929,911;, + 3;911,929,915;, + 3;934,935,917;, + 3;917,935,916;, + 3;936,935,3787;, + 3;3787,935,914;, + 3;937,938,918;, + 3;918,938,3792;, + 3;930,934,913;, + 3;913,934,917;, + 3;936,937,916;, + 3;916,937,918;, + 3;3793,932,909;, + 3;909,932,919;, + 3;3794,928,912;, + 3;912,928,920;, + 3;933,927,908;, + 3;908,927,921;, + 3;925,923,907;, + 3;907,923,922;, + 3;912,920,3790;, + 3;3782,3795,3796;, + 3;940,3782,3797;, + 3;941,940,3790;, + 3;907,939,921;, + 3;939,907,940;, + 3;940,3797,3790;, + 3;3790,920,941;, + 3;908,940,941;, + 3;907,922,942;, + 3;942,3782,940;, + 3;3789,919,3783;, + 3;3785,3786,916;, + 3;1289,852,943;, + 3;849,944,1289;, + 3;854,944,1290;, + 3;3798,3781,850;, + 3;3799,3800,851;, + 3;852,856,946;, + 3;946,3801,3799;, + 3;1271,947,3802;, + 3;3802,3803,1271;, + 3;3804,949,3805;, + 3;1273,3804,3806;, + 3;3807,948,3803;, + 3;948,3807,1272;, + 3;1274,950,3808;, + 3;1274,3805,949;, + 3;1275,1276,1274;, + 3;1278,952,1277;, + 3;1279,1280,954;, + 3;1282,951,1281;, + 3;1283,1284,1273;, + 3;1283,3809,3810;, + 3;1008,1270,956;, + 3;955,3811,3812;, + 3;981,957,1267;, + 3;970,1009,973;, + 3;3813,959,953;, + 3;1268,963,988;, + 3;3814,1263,3815;, + 3;959,3813,982;, + 3;973,958,970;, + 3;959,984,953;, + 3;3816,962,957;, + 3;1011,955,974;, + 3;984,3817,953;, + 3;984,965,3817;, + 3;991,961,964;, + 3;1263,963,1012;, + 3;963,3814,3818;, + 3;989,990,964;, + 3;3819,3820,966;, + 3;991,967,992;, + 3;992,965,991;, + 3;3818,966,963;, + 3;966,3818,968;, + 3;961,986,964;, + 3;964,986,3821;, + 3;976,974,1008;, + 3;1009,956,973;, + 3;969,1008,971;, + 3;975,974,972;, + 3;1263,1012,973;, + 3;1270,1263,956;, + 3;955,3815,1270;, + 3;969,976,1008;, + 3;1011,974,975;, + 3;1010,974,976;, + 3;3816,981,982;, + 3;980,1267,957;, + 3;959,982,981;, + 3;3816,982,3813;, + 3;961,991,984;, + 3;959,983,984;, + 3;983,961,984;, + 3;1012,963,985;, + 3;963,1268,985;, + 3;983,986,961;, + 3;983,987,986;, + 3;3820,988,963;, + 3;963,966,3820;, + 3;964,3821,989;, + 3;967,964,990;, + 3;965,984,991;, + 3;964,967,991;, + 3;965,992,3822;, + 3;992,995,3822;, + 3;995,992,994;, + 3;966,993,3819;, + 3;993,966,996;, + 3;967,994,992;, + 3;994,967,997;, + 3;968,996,966;, + 3;996,968,3823;, + 3;990,997,967;, + 3;997,990,3824;, + 3;994,1000,995;, + 3;1000,994,999;, + 3;996,998,993;, + 3;998,996,1001;, + 3;3823,1001,996;, + 3;1001,3823,3825;, + 3;3826,1002,3827;, + 3;3828,3824,3829;, + 3;997,999,994;, + 3;999,997,3828;, + 3;999,1005,1000;, + 3;1005,999,1004;, + 3;1001,1003,998;, + 3;1003,1001,1006;, + 3;3825,1006,1001;, + 3;1006,3825,3830;, + 3;3829,1007,3828;, + 3;1007,3829,3831;, + 3;3828,1004,999;, + 3;1004,3828,1007;, + 3;1007,1005,1004;, + 3;3830,1003,1006;, + 3;3831,1005,1007;, + 3;974,955,1270;, + 3;971,1008,956;, + 3;971,956,1009;, + 3;972,974,1010;, + 3;3832,955,1011;, + 3;958,973,1012;, + 3;1016,1015,970;, + 3;958,1016,970;, + 3;1017,1016,958;, + 3;1012,1017,958;, + 3;1018,1017,1012;, + 3;985,1018,1012;, + 3;1019,3833,3834;, + 3;960,1019,3834;, + 3;1020,1019,960;, + 3;979,1020,960;, + 3;3835,1020,979;, + 3;3836,3835,979;, + 3;1022,1021,1015;, + 3;1016,1022,1015;, + 3;1023,1022,1016;, + 3;1017,1023,1016;, + 3;1024,1023,1017;, + 3;1018,1024,1017;, + 3;1025,3837,3833;, + 3;1019,1025,3833;, + 3;1026,1025,1019;, + 3;1020,1026,1019;, + 3;3838,1026,1020;, + 3;3835,3838,1020;, + 3;1028,1027,1021;, + 3;1022,1028,1021;, + 3;1029,1028,1022;, + 3;1023,1029,1022;, + 3;1030,1029,1023;, + 3;1024,1030,1023;, + 3;1031,3839,3837;, + 3;1025,1031,3837;, + 3;1032,1031,1025;, + 3;1026,1032,1025;, + 3;3840,1032,1026;, + 3;3838,3840,1026;, + 3;1034,1033,1027;, + 3;1028,1034,1027;, + 3;1035,1034,1028;, + 3;1029,1035,1028;, + 3;1036,1035,1029;, + 3;1030,1036,1029;, + 3;1037,3841,3839;, + 3;1031,1037,3839;, + 3;1038,1037,1031;, + 3;1032,1038,1031;, + 3;3842,1038,1032;, + 3;3840,3842,1032;, + 3;1040,1039,1033;, + 3;1034,1040,1033;, + 3;1041,1040,1034;, + 3;1035,1041,1034;, + 3;1042,1041,1035;, + 3;1036,1042,1035;, + 3;1043,3843,3841;, + 3;1037,1043,3841;, + 3;1044,1043,1037;, + 3;1038,1044,1037;, + 3;3844,1044,1038;, + 3;3842,3844,1038;, + 3;1046,1045,1039;, + 3;1040,1046,1039;, + 3;1047,1046,1040;, + 3;1041,1047,1040;, + 3;1048,1047,1041;, + 3;1042,1048,1041;, + 3;1049,3845,3843;, + 3;1043,1049,3843;, + 3;1050,1049,1043;, + 3;1044,1050,1043;, + 3;3846,1050,1044;, + 3;3844,3846,1044;, + 3;1052,1051,1045;, + 3;1046,1052,1045;, + 3;1053,1052,1046;, + 3;1047,1053,1046;, + 3;1054,1053,1047;, + 3;1048,1054,1047;, + 3;1055,3847,3845;, + 3;1049,1055,3845;, + 3;1056,1055,1049;, + 3;1050,1056,1049;, + 3;3848,1056,1050;, + 3;3846,3848,1050;, + 3;1058,1057,1051;, + 3;1052,1058,1051;, + 3;1059,1058,1052;, + 3;1053,1059,1052;, + 3;1060,1059,1053;, + 3;1054,1060,1053;, + 3;1061,3849,3847;, + 3;1055,1061,3847;, + 3;1062,1061,1055;, + 3;1056,1062,1055;, + 3;3850,1062,1056;, + 3;3848,3850,1056;, + 3;1064,1063,1057;, + 3;1058,1064,1057;, + 3;1065,1064,1058;, + 3;1059,1065,1058;, + 3;1066,1065,1059;, + 3;1060,1066,1059;, + 3;1067,3851,3849;, + 3;1061,1067,3849;, + 3;1068,1067,1061;, + 3;1062,1068,1061;, + 3;3852,1068,1062;, + 3;3850,3852,1062;, + 3;1070,1069,1063;, + 3;1064,1070,1063;, + 3;1071,1070,1064;, + 3;1065,1071,1064;, + 3;1072,1071,1065;, + 3;1066,1072,1065;, + 3;1073,3853,3851;, + 3;1067,1073,3851;, + 3;1074,1073,1067;, + 3;1068,1074,1067;, + 3;3854,1074,1068;, + 3;3852,3854,1068;, + 3;1070,1075,1069;, + 3;1071,1076,1070;, + 3;1075,1070,1076;, + 3;1072,1076,1071;, + 3;1073,3855,3853;, + 3;1074,3856,1073;, + 3;3855,1073,3856;, + 3;3854,3856,1074;, + 3;1078,1077,969;, + 3;971,1078,969;, + 3;1079,1078,971;, + 3;1009,1079,971;, + 3;1080,1079,1009;, + 3;970,1080,1009;, + 3;1081,3857,3836;, + 3;978,1081,3836;, + 3;1082,1081,978;, + 3;1013,1082,978;, + 3;3858,1082,1013;, + 3;3859,3858,1013;, + 3;1084,1083,1077;, + 3;1078,1084,1077;, + 3;1085,1084,1078;, + 3;1079,1085,1078;, + 3;1086,1085,1079;, + 3;1080,1086,1079;, + 3;1087,3860,3857;, + 3;1081,1087,3857;, + 3;1088,1087,1081;, + 3;1082,1088,1081;, + 3;3861,1088,1082;, + 3;3858,3861,1082;, + 3;1090,1089,1083;, + 3;1084,1090,1083;, + 3;1091,1090,1084;, + 3;1085,1091,1084;, + 3;1092,1091,1085;, + 3;1086,1092,1085;, + 3;1093,3862,3860;, + 3;1087,1093,3860;, + 3;1094,1093,1087;, + 3;1088,1094,1087;, + 3;3863,1094,1088;, + 3;3861,3863,1088;, + 3;1096,1095,1089;, + 3;1090,1096,1089;, + 3;1097,1096,1090;, + 3;1091,1097,1090;, + 3;1098,1097,1091;, + 3;1092,1098,1091;, + 3;1099,3864,3862;, + 3;1093,1099,3862;, + 3;1100,1099,1093;, + 3;1094,1100,1093;, + 3;3865,1100,1094;, + 3;3863,3865,1094;, + 3;1102,1101,1095;, + 3;1096,1102,1095;, + 3;1103,1102,1096;, + 3;1097,1103,1096;, + 3;1104,1103,1097;, + 3;1098,1104,1097;, + 3;1105,3866,3864;, + 3;1099,1105,3864;, + 3;1106,1105,1099;, + 3;1100,1106,1099;, + 3;3867,1106,1100;, + 3;3865,3867,1100;, + 3;1108,1107,1101;, + 3;1102,1108,1101;, + 3;1109,1108,1102;, + 3;1103,1109,1102;, + 3;1110,1109,1103;, + 3;1104,1110,1103;, + 3;1111,3868,3866;, + 3;1105,1111,3866;, + 3;1112,1111,1105;, + 3;1106,1112,1105;, + 3;3869,1112,1106;, + 3;3867,3869,1106;, + 3;1114,1113,1107;, + 3;1108,1114,1107;, + 3;1115,1114,1108;, + 3;1109,1115,1108;, + 3;1116,1115,1109;, + 3;1110,1116,1109;, + 3;1117,3870,3868;, + 3;1111,1117,3868;, + 3;1118,1117,1111;, + 3;1112,1118,1111;, + 3;3871,1118,1112;, + 3;3869,3871,1112;, + 3;1120,1119,1113;, + 3;1114,1120,1113;, + 3;1121,1120,1114;, + 3;1115,1121,1114;, + 3;1122,1121,1115;, + 3;1116,1122,1115;, + 3;1123,3872,3870;, + 3;1117,1123,3870;, + 3;1124,1123,1117;, + 3;1118,1124,1117;, + 3;3873,1124,1118;, + 3;3871,3873,1118;, + 3;1126,1125,1119;, + 3;1120,1126,1119;, + 3;1127,1126,1120;, + 3;1121,1127,1120;, + 3;1128,1127,1121;, + 3;1122,1128,1121;, + 3;1129,3874,3872;, + 3;1123,1129,3872;, + 3;1130,1129,1123;, + 3;1124,1130,1123;, + 3;3875,1130,1124;, + 3;3873,3875,1124;, + 3;1132,1131,1125;, + 3;1126,1132,1125;, + 3;1133,1132,1126;, + 3;1127,1133,1126;, + 3;1134,1133,1127;, + 3;1128,1134,1127;, + 3;1135,3876,3874;, + 3;1129,1135,3874;, + 3;1136,1135,1129;, + 3;1130,1136,1129;, + 3;3877,1136,1130;, + 3;3875,3877,1130;, + 3;1132,1137,1131;, + 3;1133,1138,1132;, + 3;1137,1132,1138;, + 3;1134,1138,1133;, + 3;1135,3878,3876;, + 3;1136,3879,1135;, + 3;3878,1135,3879;, + 3;3877,3879,1136;, + 3;1140,1139,972;, + 3;1010,1140,972;, + 3;1141,1140,1010;, + 3;976,1141,1010;, + 3;1142,1141,976;, + 3;969,1142,976;, + 3;1143,3880,3859;, + 3;1014,1143,3859;, + 3;1144,1143,1014;, + 3;977,1144,1014;, + 3;3881,1144,977;, + 3;3882,3881,977;, + 3;1146,1145,1139;, + 3;1140,1146,1139;, + 3;1147,1146,1140;, + 3;1141,1147,1140;, + 3;1148,1147,1141;, + 3;1142,1148,1141;, + 3;1149,3883,3880;, + 3;1143,1149,3880;, + 3;1150,1149,1143;, + 3;1144,1150,1143;, + 3;3884,1150,1144;, + 3;3881,3884,1144;, + 3;1152,1151,1145;, + 3;1146,1152,1145;, + 3;1153,1152,1146;, + 3;1147,1153,1146;, + 3;1154,1153,1147;, + 3;1148,1154,1147;, + 3;1155,3885,3883;, + 3;1149,1155,3883;, + 3;1156,1155,1149;, + 3;1150,1156,1149;, + 3;3886,1156,1150;, + 3;3884,3886,1150;, + 3;1158,1157,1151;, + 3;1152,1158,1151;, + 3;1159,1158,1152;, + 3;1153,1159,1152;, + 3;1160,1159,1153;, + 3;1154,1160,1153;, + 3;1161,3887,3885;, + 3;1155,1161,3885;, + 3;1162,1161,1155;, + 3;1156,1162,1155;, + 3;3888,1162,1156;, + 3;3886,3888,1156;, + 3;1164,1163,1157;, + 3;1158,1164,1157;, + 3;1165,1164,1158;, + 3;1159,1165,1158;, + 3;1166,1165,1159;, + 3;1160,1166,1159;, + 3;1167,3889,3887;, + 3;1161,1167,3887;, + 3;1168,1167,1161;, + 3;1162,1168,1161;, + 3;3890,1168,1162;, + 3;3888,3890,1162;, + 3;1170,1169,1163;, + 3;1164,1170,1163;, + 3;1171,1170,1164;, + 3;1165,1171,1164;, + 3;1172,1171,1165;, + 3;1166,1172,1165;, + 3;1173,3891,3889;, + 3;1167,1173,3889;, + 3;1174,1173,1167;, + 3;1168,1174,1167;, + 3;3892,1174,1168;, + 3;3890,3892,1168;, + 3;1176,1175,1169;, + 3;1170,1176,1169;, + 3;1177,1176,1170;, + 3;1171,1177,1170;, + 3;1178,1177,1171;, + 3;1172,1178,1171;, + 3;1179,3893,3891;, + 3;1173,1179,3891;, + 3;1180,1179,1173;, + 3;1174,1180,1173;, + 3;3894,1180,1174;, + 3;3892,3894,1174;, + 3;1182,1181,1175;, + 3;1176,1182,1175;, + 3;1183,1182,1176;, + 3;1177,1183,1176;, + 3;1184,1183,1177;, + 3;1178,1184,1177;, + 3;1185,3895,3893;, + 3;1179,1185,3893;, + 3;1186,1185,1179;, + 3;1180,1186,1179;, + 3;3896,1186,1180;, + 3;3894,3896,1180;, + 3;1188,1187,1181;, + 3;1182,1188,1181;, + 3;1189,1188,1182;, + 3;1183,1189,1182;, + 3;1190,1189,1183;, + 3;1184,1190,1183;, + 3;1191,3897,3895;, + 3;1185,1191,3895;, + 3;1192,1191,1185;, + 3;1186,1192,1185;, + 3;3898,1192,1186;, + 3;3896,3898,1186;, + 3;1194,1193,1187;, + 3;1188,1194,1187;, + 3;1195,1194,1188;, + 3;1189,1195,1188;, + 3;1196,1195,1189;, + 3;1190,1196,1189;, + 3;1197,3899,3897;, + 3;1191,1197,3897;, + 3;1198,1197,1191;, + 3;1192,1198,1191;, + 3;3900,1198,1192;, + 3;3898,3900,1192;, + 3;1194,1199,1193;, + 3;1195,1200,1194;, + 3;1199,1194,1200;, + 3;1196,1200,1195;, + 3;1197,3901,3899;, + 3;1198,3902,1197;, + 3;3901,1197,3902;, + 3;3900,3902,1198;, + 3;1202,1201,3832;, + 3;1011,1202,3832;, + 3;1203,1202,1011;, + 3;975,1203,1011;, + 3;1204,1203,975;, + 3;972,1204,975;, + 3;1205,3903,3882;, + 3;980,1205,3882;, + 3;1206,1205,980;, + 3;957,1206,980;, + 3;3904,1206,957;, + 3;962,3904,957;, + 3;1208,1207,1201;, + 3;1202,1208,1201;, + 3;1209,1208,1202;, + 3;1203,1209,1202;, + 3;1210,1209,1203;, + 3;1204,1210,1203;, + 3;1211,3905,3903;, + 3;1205,1211,3903;, + 3;1212,1211,1205;, + 3;1206,1212,1205;, + 3;3906,1212,1206;, + 3;3904,3906,1206;, + 3;1214,1213,1207;, + 3;1208,1214,1207;, + 3;1215,1214,1208;, + 3;1209,1215,1208;, + 3;1216,1215,1209;, + 3;1210,1216,1209;, + 3;1217,3907,3905;, + 3;1211,1217,3905;, + 3;1218,1217,1211;, + 3;1212,1218,1211;, + 3;3908,1218,1212;, + 3;3906,3908,1212;, + 3;1220,1219,1213;, + 3;1214,1220,1213;, + 3;1221,1220,1214;, + 3;1215,1221,1214;, + 3;1222,1221,1215;, + 3;1216,1222,1215;, + 3;1223,3909,3907;, + 3;1217,1223,3907;, + 3;1224,1223,1217;, + 3;1218,1224,1217;, + 3;3910,1224,1218;, + 3;3908,3910,1218;, + 3;1226,1225,1219;, + 3;1220,1226,1219;, + 3;1227,1226,1220;, + 3;1221,1227,1220;, + 3;1228,1227,1221;, + 3;1222,1228,1221;, + 3;1229,3911,3909;, + 3;1223,1229,3909;, + 3;1230,1229,1223;, + 3;1224,1230,1223;, + 3;3912,1230,1224;, + 3;3910,3912,1224;, + 3;1232,1231,1225;, + 3;1226,1232,1225;, + 3;1233,1232,1226;, + 3;1227,1233,1226;, + 3;1234,1233,1227;, + 3;1228,1234,1227;, + 3;1235,3913,3911;, + 3;1229,1235,3911;, + 3;1236,1235,1229;, + 3;1230,1236,1229;, + 3;3914,1236,1230;, + 3;3912,3914,1230;, + 3;1238,1237,1231;, + 3;1232,1238,1231;, + 3;1239,1238,1232;, + 3;1233,1239,1232;, + 3;1240,1239,1233;, + 3;1234,1240,1233;, + 3;1241,3915,3913;, + 3;1235,1241,3913;, + 3;1242,1241,1235;, + 3;1236,1242,1235;, + 3;3916,1242,1236;, + 3;3914,3916,1236;, + 3;1244,1243,1237;, + 3;1238,1244,1237;, + 3;1245,1244,1238;, + 3;1239,1245,1238;, + 3;1246,1245,1239;, + 3;1240,1246,1239;, + 3;1247,3917,3915;, + 3;1241,1247,3915;, + 3;1248,1247,1241;, + 3;1242,1248,1241;, + 3;3918,1248,1242;, + 3;3916,3918,1242;, + 3;1250,1249,3918;, + 3;1244,3919,1243;, + 3;1251,3919,1244;, + 3;1245,1251,1244;, + 3;1252,1251,1245;, + 3;1246,1252,1245;, + 3;1253,3920,3917;, + 3;1247,1253,3917;, + 3;1254,1253,1247;, + 3;1248,1254,1247;, + 3;1249,1254,1248;, + 3;3918,1249,1248;, + 3;1256,1255,3921;, + 3;3919,1256,3921;, + 3;1257,1256,3919;, + 3;1251,1257,3919;, + 3;1258,1257,1251;, + 3;1252,1258,1251;, + 3;1259,3922,3920;, + 3;1253,1259,3920;, + 3;1260,1259,1253;, + 3;1254,1260,1253;, + 3;3923,1260,1254;, + 3;1249,3923,1254;, + 3;1256,1261,1255;, + 3;1257,1262,1256;, + 3;1261,1256,1262;, + 3;1258,1262,1257;, + 3;1259,3924,3922;, + 3;1260,3925,1259;, + 3;3924,1259,3925;, + 3;3923,3925,1260;, + 3;3814,963,1263;, + 3;1263,973,956;, + 3;981,983,959;, + 3;983,981,1269;, + 3;3859,1264,1014;, + 3;1264,3859,1013;, + 3;3836,1265,978;, + 3;3836,979,1265;, + 3;3882,1266,980;, + 3;1266,3882,977;, + 3;1013,1265,1264;, + 3;1265,1013,978;, + 3;1014,1266,977;, + 3;1266,1014,1264;, + 3;1265,979,960;, + 3;957,981,3816;, + 3;3926,960,3834;, + 3;980,1266,1267;, + 3;1266,1269,1267;, + 3;983,1269,987;, + 3;1267,1269,981;, + 3;1269,1264,987;, + 3;1264,1269,1266;, + 3;1264,1265,987;, + 3;1265,986,987;, + 3;986,1265,960;, + 3;986,960,3926;, + 3;986,3926,3821;, + 3;1270,3815,1263;, + 3;974,1270,1008;, + 3;1277,1282,1271;, + 3;1271,3803,948;, + 3;1279,1278,1272;, + 3;1272,3807,3927;, + 3;949,3804,1273;, + 3;1284,3928,1275;, + 3;3808,3805,1274;, + 3;1276,3929,3930;, + 3;3928,1276,1275;, + 3;3928,3929,1276;, + 3;1274,949,1275;, + 3;1278,1277,948;, + 3;1272,1278,948;, + 3;1272,1280,1279;, + 3;1272,3927,1280;, + 3;1282,1281,947;, + 3;1271,1282,947;, + 3;1271,948,1277;, + 3;3810,1284,1283;, + 3;3810,3928,1284;, + 3;3806,3809,1283;, + 3;1273,3806,1283;, + 3;952,1282,1277;, + 3;952,3931,1282;, + 3;954,1278,1279;, + 3;954,952,1278;, + 3;1284,1275,949;, + 3;1273,1284,949;, + 3;1276,3930,950;, + 3;1274,1276,950;, + 3;1286,943,1285;, + 3;1286,850,1291;, + 3;1287,3759,3757;, + 3;1292,1287,3757;, + 3;1288,3798,1286;, + 3;1286,3798,850;, + 3;855,3932,1287;, + 3;855,945,3932;, + 3;849,1289,943;, + 3;1293,852,1289;, + 3;854,1290,860;, + 3;889,853,1290;, + 3;1286,1291,943;, + 3;849,943,1291;, + 3;855,1287,1292;, + 3;855,1292,3758;, + 3;856,852,1293;, + 3;1293,854,856;, + 3;3933,1286,1285;, + 3;946,3799,851;, + 3;946,3756,3801;, + 3;851,3800,943;, + 3;943,3800,1285;, + 3;3934,1286,3933;, + 3;3934,1288,1286;, + 3;1287,3932,3935;, + 3;1287,3935,3759;, + 3;1294,1295,1736;, + 3;1388,1296,1297;, + 3;1294,1389,1735;, + 3;1734,1738,1299;, + 3;1299,1389,1734;, + 3;1304,1390,1333;, + 3;1300,1332,1306;, + 3;1391,3936,1301;, + 3;1737,3937,3938;, + 3;3938,3939,3940;, + 3;1297,1296,1391;, + 3;1302,1294,1334;, + 3;1303,1295,1302;, + 3;1295,1294,1302;, + 3;1298,1735,1305;, + 3;3941,3937,1306;, + 3;3937,1300,1306;, + 3;1332,1390,1304;, + 3;1320,1335,1336;, + 3;1338,1307,1337;, + 3;1339,1340,1314;, + 3;1342,1308,1341;, + 3;1343,1344,1321;, + 3;1345,1337,1307;, + 3;1347,1319,1346;, + 3;1343,1348,1322;, + 3;1313,1335,1349;, + 3;1339,1350,1309;, + 3;1350,1349,1309;, + 3;1341,1340,1317;, + 3;1312,1351,1347;, + 3;3942,1336,3943;, + 3;1344,1310,1351;, + 3;1348,3944,3945;, + 3;1346,1319,1345;, + 3;3943,1313,1325;, + 3;1325,1324,3943;, + 3;1312,1323,1327;, + 3;1327,1326,1312;, + 3;3944,1321,1329;, + 3;1329,1328,3944;, + 3;1311,1314,1331;, + 3;1331,1330,1311;, + 3;1313,1311,1325;, + 3;1330,1325,1311;, + 3;1314,1308,3946;, + 3;3946,1331,1314;, + 3;1321,1312,1326;, + 3;1326,1329,1321;, + 3;1323,1307,3947;, + 3;3947,1327,1323;, + 3;1315,1316,3948;, + 3;3948,3949,1315;, + 3;1317,1309,3950;, + 3;3950,3951,1317;, + 3;1318,1317,3951;, + 3;3951,3952,1318;, + 3;1310,1322,3953;, + 3;3953,3954,1310;, + 3;1316,1319,3955;, + 3;3955,3948,1316;, + 3;1309,1320,3956;, + 3;3956,3950,1309;, + 3;1319,1310,3954;, + 3;3954,3955,1319;, + 3;1320,3957,3958;, + 3;3958,3956,1320;, + 3;1322,3959,3960;, + 3;3960,3953,1322;, + 3;1335,1313,1336;, + 3;1313,3943,1336;, + 3;1337,1316,1338;, + 3;1316,1315,1338;, + 3;1339,1309,1340;, + 3;1309,1317,1340;, + 3;1341,1317,1342;, + 3;1317,1318,1342;, + 3;1343,1322,1344;, + 3;1322,1310,1344;, + 3;1345,1319,1337;, + 3;1319,1316,1337;, + 3;1346,1323,1347;, + 3;1323,1312,1347;, + 3;1343,1321,1348;, + 3;1321,3944,1348;, + 3;1335,1320,1349;, + 3;1320,1309,1349;, + 3;1339,1314,1350;, + 3;1314,1311,1350;, + 3;1350,1311,1349;, + 3;1311,1313,1349;, + 3;1341,1308,1340;, + 3;1308,1314,1340;, + 3;1351,1310,1347;, + 3;1310,1319,1347;, + 3;3942,3957,1336;, + 3;3957,1320,1336;, + 3;1351,1312,1344;, + 3;1312,1321,1344;, + 3;3945,3959,1348;, + 3;3959,1322,1348;, + 3;1345,1307,1346;, + 3;1307,1323,1346;, + 3;1334,1294,1735;, + 3;3961,1295,1303;, + 3;1300,1390,1332;, + 3;1366,1353,1384;, + 3;1387,3962,1367;, + 3;1368,1369,1355;, + 3;1352,1370,1371;, + 3;1371,1356,1372;, + 3;1374,1360,1373;, + 3;3963,1358,1364;, + 3;1376,1358,1375;, + 3;1386,1353,1365;, + 3;1376,3964,1377;, + 3;1374,1353,1378;, + 3;1361,3965,1363;, + 3;1362,1358,3966;, + 3;1380,1359,1379;, + 3;1361,1381,1380;, + 3;1382,1383,1360;, + 3;3967,3968,3969;, + 3;3970,1364,1354;, + 3;1357,3967,3971;, + 3;1361,1362,3966;, + 3;1379,1359,1375;, + 3;3968,3967,1357;, + 3;1381,3972,3973;, + 3;3963,3966,1358;, + 3;1377,3964,3974;, + 3;1373,1360,1383;, + 3;1385,1384,1353;, + 3;1352,1385,1387;, + 3;1372,1356,1378;, + 3;1367,3962,3975;, + 3;1370,1368,1355;, + 3;1368,1367,1369;, + 3;1367,3975,1369;, + 3;1370,1355,1371;, + 3;1355,1356,1371;, + 3;1372,1366,1371;, + 3;1366,1352,1371;, + 3;1373,1365,1374;, + 3;1365,1353,1374;, + 3;1375,1359,1376;, + 3;1359,3964,1376;, + 3;1377,1364,1376;, + 3;1364,1358,1376;, + 3;1378,1356,1374;, + 3;1356,1360,1374;, + 3;1379,1362,1380;, + 3;1362,1361,1380;, + 3;1381,3973,1380;, + 3;3973,1359,1380;, + 3;1382,3968,1383;, + 3;3968,1357,1383;, + 3;1375,1358,1379;, + 3;1358,1362,1379;, + 3;1381,1361,3972;, + 3;1361,1363,3972;, + 3;3974,1354,1377;, + 3;1354,1364,1377;, + 3;1383,1357,1373;, + 3;1357,1365,1373;, + 3;1378,1353,1372;, + 3;1353,1366,1372;, + 3;1370,1352,1368;, + 3;1352,1367,1368;, + 3;1357,3971,1365;, + 3;1325,1324,1330;, + 3;3962,3976,3975;, + 3;1385,3977,3962;, + 3;1386,3971,1385;, + 3;1352,1366,1384;, + 3;1384,1385,1352;, + 3;1385,3971,3977;, + 3;3971,1386,1365;, + 3;1353,1386,1385;, + 3;1352,1387,1367;, + 3;1387,1385,3962;, + 3;3970,3963,1364;, + 3;3965,1361,3966;, + 3;1734,1388,1297;, + 3;1294,1734,1389;, + 3;1299,1735,1389;, + 3;3978,1295,3961;, + 3;3979,1296,3980;, + 3;1297,1391,1301;, + 3;1391,3979,3981;, + 3;1716,3982,1392;, + 3;3982,1716,3983;, + 3;3984,3985,1394;, + 3;1718,3986,3984;, + 3;3987,3983,1393;, + 3;1393,1717,3987;, + 3;1719,3988,1395;, + 3;1719,1394,3985;, + 3;1720,1719,1721;, + 3;1723,1722,1397;, + 3;1724,1399,1725;, + 3;1727,1726,1396;, + 3;1728,1718,1729;, + 3;1728,3989,3990;, + 3;1453,1401,1715;, + 3;1400,3991,3992;, + 3;1426,1712,1402;, + 3;1415,1418,1454;, + 3;3993,1398,1404;, + 3;1713,1433,1408;, + 3;3994,3991,1708;, + 3;1404,1427,3993;, + 3;1418,1415,1403;, + 3;1404,1398,1429;, + 3;3995,1402,1407;, + 3;1456,1419,1400;, + 3;1429,1398,3996;, + 3;1429,3996,1410;, + 3;1436,1409,1406;, + 3;1708,1457,1408;, + 3;1408,3997,3994;, + 3;1434,1409,1435;, + 3;3998,1411,3999;, + 3;1436,1437,1412;, + 3;1437,1436,1410;, + 3;3997,1408,1411;, + 3;1411,1413,3997;, + 3;1406,1409,1431;, + 3;1409,4000,1431;, + 3;1421,1453,1419;, + 3;1454,1418,1401;, + 3;1414,1416,1453;, + 3;1420,1417,1419;, + 3;1708,1418,1457;, + 3;1715,1401,1708;, + 3;1400,1715,3991;, + 3;1414,1453,1421;, + 3;1456,1420,1419;, + 3;1455,1421,1419;, + 3;3995,1427,1426;, + 3;1425,1402,1712;, + 3;1404,1426,1427;, + 3;3995,3993,1427;, + 3;1406,1429,1436;, + 3;1404,1429,1428;, + 3;1428,1429,1406;, + 3;1457,1430,1408;, + 3;1408,1430,1713;, + 3;1428,1406,1431;, + 3;1428,1431,1432;, + 3;3999,1408,1433;, + 3;1408,3999,1411;, + 3;1409,1434,4000;, + 3;1412,1435,1409;, + 3;1410,1436,1429;, + 3;1409,1436,1412;, + 3;1410,4001,1437;, + 3;1437,4001,1440;, + 3;1440,1439,1437;, + 3;1411,3998,1438;, + 3;1438,1441,1411;, + 3;1412,1437,1439;, + 3;1439,1442,1412;, + 3;1413,1411,1441;, + 3;1441,4002,1413;, + 3;1435,1412,1442;, + 3;1442,4003,1435;, + 3;1439,1440,1445;, + 3;1445,1444,1439;, + 3;1441,1438,1443;, + 3;1443,1446,1441;, + 3;4002,1441,1446;, + 3;1446,4004,4002;, + 3;4003,1442,1447;, + 3;1447,4005,4003;, + 3;1442,1439,1444;, + 3;1444,1447,1442;, + 3;1444,1445,1450;, + 3;1450,1449,1444;, + 3;1446,1443,1448;, + 3;1448,1451,1446;, + 3;4004,1446,1451;, + 3;1451,4006,4004;, + 3;4005,1447,1452;, + 3;1452,4007,4005;, + 3;1447,1444,1449;, + 3;1449,1452,1447;, + 3;1452,1449,1450;, + 3;4006,1451,1448;, + 3;4007,1452,1450;, + 3;1419,1715,1400;, + 3;1416,1401,1453;, + 3;1416,1454,1401;, + 3;1417,1455,1419;, + 3;4008,1456,1400;, + 3;1403,1457,1418;, + 3;1461,4009,1460;, + 3;1403,1415,4010;, + 3;1462,1403,4010;, + 3;1457,1403,1462;, + 3;1463,1457,1462;, + 3;1430,1457,1463;, + 3;1464,4011,4012;, + 3;1405,4011,1464;, + 3;1465,1405,1464;, + 3;1424,1405,1465;, + 3;1460,1424,1465;, + 3;4009,1424,1460;, + 3;1467,4013,1466;, + 3;4010,4013,1467;, + 3;1468,4010,1467;, + 3;1462,4010,1468;, + 3;1469,1462,1468;, + 3;1463,1462,1469;, + 3;1470,4012,4014;, + 3;1464,4012,1470;, + 3;1471,1464,1470;, + 3;1465,1464,1471;, + 3;4015,1465,1471;, + 3;1460,1465,4015;, + 3;1473,1466,1472;, + 3;1467,1466,1473;, + 3;1474,1467,1473;, + 3;1468,1467,1474;, + 3;1475,1468,1474;, + 3;1469,1468,1475;, + 3;1476,4014,4016;, + 3;1470,4014,1476;, + 3;1477,1470,1476;, + 3;1471,1470,1477;, + 3;4017,1471,1477;, + 3;4015,1471,4017;, + 3;1479,1472,1478;, + 3;1473,1472,1479;, + 3;1480,1473,1479;, + 3;1474,1473,1480;, + 3;1481,1474,1480;, + 3;1475,1474,1481;, + 3;1482,4016,4018;, + 3;1476,4016,1482;, + 3;1483,1476,1482;, + 3;1477,1476,1483;, + 3;4019,1477,1483;, + 3;4017,1477,4019;, + 3;1485,1478,1484;, + 3;1479,1478,1485;, + 3;1486,1479,1485;, + 3;1480,1479,1486;, + 3;1487,1480,1486;, + 3;1481,1480,1487;, + 3;1488,4018,4020;, + 3;1482,4018,1488;, + 3;1489,1482,1488;, + 3;1483,1482,1489;, + 3;4021,1483,1489;, + 3;4019,1483,4021;, + 3;1491,1484,1490;, + 3;1485,1484,1491;, + 3;1492,1485,1491;, + 3;1486,1485,1492;, + 3;1493,1486,1492;, + 3;1487,1486,1493;, + 3;1494,4020,4022;, + 3;1488,4020,1494;, + 3;1495,1488,1494;, + 3;1489,1488,1495;, + 3;4023,1489,1495;, + 3;4021,1489,4023;, + 3;1497,1490,1496;, + 3;1491,1490,1497;, + 3;1498,1491,1497;, + 3;1492,1491,1498;, + 3;1499,1492,1498;, + 3;1493,1492,1499;, + 3;1500,4022,4024;, + 3;1494,4022,1500;, + 3;1501,1494,1500;, + 3;1495,1494,1501;, + 3;4025,1495,1501;, + 3;4023,1495,4025;, + 3;1503,1496,1502;, + 3;1497,1496,1503;, + 3;1504,1497,1503;, + 3;1498,1497,1504;, + 3;1505,1498,1504;, + 3;1499,1498,1505;, + 3;1506,4024,4026;, + 3;1500,4024,1506;, + 3;1507,1500,1506;, + 3;1501,1500,1507;, + 3;4027,1501,1507;, + 3;4025,1501,4027;, + 3;1509,1502,1508;, + 3;1503,1502,1509;, + 3;1510,1503,1509;, + 3;1504,1503,1510;, + 3;1511,1504,1510;, + 3;1505,1504,1511;, + 3;1512,4026,4028;, + 3;1506,4026,1512;, + 3;1513,1506,1512;, + 3;1507,1506,1513;, + 3;4029,1507,1513;, + 3;4027,1507,4029;, + 3;1515,1508,1514;, + 3;1509,1508,1515;, + 3;1516,1509,1515;, + 3;1510,1509,1516;, + 3;1517,1510,1516;, + 3;1511,1510,1517;, + 3;1518,4028,4030;, + 3;1512,4028,1518;, + 3;1519,1512,1518;, + 3;1513,1512,1519;, + 3;4031,1513,1519;, + 3;4029,1513,4031;, + 3;1515,1514,1520;, + 3;1516,1515,1521;, + 3;1520,1521,1515;, + 3;1517,1516,1521;, + 3;1518,4030,4032;, + 3;1519,1518,4033;, + 3;4032,4033,1518;, + 3;4031,1519,4033;, + 3;1523,1414,1522;, + 3;1416,1414,1523;, + 3;1524,1416,1523;, + 3;1454,1416,1524;, + 3;1525,1454,1524;, + 3;1415,1454,1525;, + 3;1526,4009,4034;, + 3;1423,4009,1526;, + 3;1527,1423,1526;, + 3;1458,1423,1527;, + 3;4035,1458,1527;, + 3;4036,1458,4035;, + 3;1529,1522,1528;, + 3;1523,1522,1529;, + 3;1530,1523,1529;, + 3;1524,1523,1530;, + 3;1531,1524,1530;, + 3;1525,1524,1531;, + 3;1532,4034,4037;, + 3;1526,4034,1532;, + 3;1533,1526,1532;, + 3;1527,1526,1533;, + 3;4038,1527,1533;, + 3;4035,1527,4038;, + 3;1535,1528,1534;, + 3;1529,1528,1535;, + 3;1536,1529,1535;, + 3;1530,1529,1536;, + 3;1537,1530,1536;, + 3;1531,1530,1537;, + 3;1538,4037,4039;, + 3;1532,4037,1538;, + 3;1539,1532,1538;, + 3;1533,1532,1539;, + 3;4040,1533,1539;, + 3;4038,1533,4040;, + 3;1541,1534,1540;, + 3;1535,1534,1541;, + 3;1542,1535,1541;, + 3;1536,1535,1542;, + 3;1543,1536,1542;, + 3;1537,1536,1543;, + 3;1544,4039,4041;, + 3;1538,4039,1544;, + 3;1545,1538,1544;, + 3;1539,1538,1545;, + 3;4042,1539,1545;, + 3;4040,1539,4042;, + 3;1547,1540,1546;, + 3;1541,1540,1547;, + 3;1548,1541,1547;, + 3;1542,1541,1548;, + 3;1549,1542,1548;, + 3;1543,1542,1549;, + 3;1550,4041,4043;, + 3;1544,4041,1550;, + 3;1551,1544,1550;, + 3;1545,1544,1551;, + 3;4044,1545,1551;, + 3;4042,1545,4044;, + 3;1553,1546,1552;, + 3;1547,1546,1553;, + 3;1554,1547,1553;, + 3;1548,1547,1554;, + 3;1555,1548,1554;, + 3;1549,1548,1555;, + 3;1556,4043,4045;, + 3;1550,4043,1556;, + 3;1557,1550,1556;, + 3;1551,1550,1557;, + 3;4046,1551,1557;, + 3;4044,1551,4046;, + 3;1559,1552,1558;, + 3;1553,1552,1559;, + 3;1560,1553,1559;, + 3;1554,1553,1560;, + 3;1561,1554,1560;, + 3;1555,1554,1561;, + 3;1562,4045,4047;, + 3;1556,4045,1562;, + 3;1563,1556,1562;, + 3;1557,1556,1563;, + 3;4048,1557,1563;, + 3;4046,1557,4048;, + 3;1565,1558,1564;, + 3;1559,1558,1565;, + 3;1566,1559,1565;, + 3;1560,1559,1566;, + 3;1567,1560,1566;, + 3;1561,1560,1567;, + 3;1568,4047,4049;, + 3;1562,4047,1568;, + 3;1569,1562,1568;, + 3;1563,1562,1569;, + 3;4050,1563,1569;, + 3;4048,1563,4050;, + 3;1571,1564,1570;, + 3;1565,1564,1571;, + 3;1572,1565,1571;, + 3;1566,1565,1572;, + 3;1573,1566,1572;, + 3;1567,1566,1573;, + 3;1574,4049,4051;, + 3;1568,4049,1574;, + 3;1575,1568,1574;, + 3;1569,1568,1575;, + 3;4052,1569,1575;, + 3;4050,1569,4052;, + 3;1577,1570,1576;, + 3;1571,1570,1577;, + 3;1578,1571,1577;, + 3;1572,1571,1578;, + 3;1579,1572,1578;, + 3;1573,1572,1579;, + 3;1580,4051,4053;, + 3;1574,4051,1580;, + 3;1581,1574,1580;, + 3;1575,1574,1581;, + 3;4054,1575,1581;, + 3;4052,1575,4054;, + 3;1577,1576,1582;, + 3;1578,1577,1583;, + 3;1582,1583,1577;, + 3;1579,1578,1583;, + 3;1580,4053,4055;, + 3;1581,1580,4056;, + 3;4055,4056,1580;, + 3;4054,1581,4056;, + 3;1585,1417,1584;, + 3;1455,1417,1585;, + 3;1586,1455,1585;, + 3;1421,1455,1586;, + 3;1587,1421,1586;, + 3;1414,1421,1587;, + 3;1588,4036,4057;, + 3;1459,4036,1588;, + 3;1589,1459,1588;, + 3;1422,1459,1589;, + 3;4058,1422,1589;, + 3;4059,1422,4058;, + 3;1591,1584,1590;, + 3;1585,1584,1591;, + 3;1592,1585,1591;, + 3;1586,1585,1592;, + 3;1593,1586,1592;, + 3;1587,1586,1593;, + 3;1594,4057,4060;, + 3;1588,4057,1594;, + 3;1595,1588,1594;, + 3;1589,1588,1595;, + 3;4061,1589,1595;, + 3;4058,1589,4061;, + 3;1597,1590,1596;, + 3;1591,1590,1597;, + 3;1598,1591,1597;, + 3;1592,1591,1598;, + 3;1599,1592,1598;, + 3;1593,1592,1599;, + 3;1600,4060,4062;, + 3;1594,4060,1600;, + 3;1601,1594,1600;, + 3;1595,1594,1601;, + 3;4063,1595,1601;, + 3;4061,1595,4063;, + 3;1603,1596,1602;, + 3;1597,1596,1603;, + 3;1604,1597,1603;, + 3;1598,1597,1604;, + 3;1605,1598,1604;, + 3;1599,1598,1605;, + 3;1606,4062,4064;, + 3;1600,4062,1606;, + 3;1607,1600,1606;, + 3;1601,1600,1607;, + 3;4065,1601,1607;, + 3;4063,1601,4065;, + 3;1609,1602,1608;, + 3;1603,1602,1609;, + 3;1610,1603,1609;, + 3;1604,1603,1610;, + 3;1611,1604,1610;, + 3;1605,1604,1611;, + 3;1612,4064,4066;, + 3;1606,4064,1612;, + 3;1613,1606,1612;, + 3;1607,1606,1613;, + 3;4067,1607,1613;, + 3;4065,1607,4067;, + 3;1615,1608,1614;, + 3;1609,1608,1615;, + 3;1616,1609,1615;, + 3;1610,1609,1616;, + 3;1617,1610,1616;, + 3;1611,1610,1617;, + 3;1618,4066,4068;, + 3;1612,4066,1618;, + 3;1619,1612,1618;, + 3;1613,1612,1619;, + 3;4069,1613,1619;, + 3;4067,1613,4069;, + 3;1621,1614,1620;, + 3;1615,1614,1621;, + 3;1622,1615,1621;, + 3;1616,1615,1622;, + 3;1623,1616,1622;, + 3;1617,1616,1623;, + 3;1624,4068,4070;, + 3;1618,4068,1624;, + 3;1625,1618,1624;, + 3;1619,1618,1625;, + 3;4071,1619,1625;, + 3;4069,1619,4071;, + 3;1627,1620,1626;, + 3;1621,1620,1627;, + 3;1628,1621,1627;, + 3;1622,1621,1628;, + 3;1629,1622,1628;, + 3;1623,1622,1629;, + 3;1630,4070,4072;, + 3;1624,4070,1630;, + 3;1631,1624,1630;, + 3;1625,1624,1631;, + 3;4073,1625,1631;, + 3;4071,1625,4073;, + 3;1633,1626,1632;, + 3;1627,1626,1633;, + 3;1634,1627,1633;, + 3;1628,1627,1634;, + 3;1635,1628,1634;, + 3;1629,1628,1635;, + 3;1636,4072,4074;, + 3;1630,4072,1636;, + 3;1637,1630,1636;, + 3;1631,1630,1637;, + 3;4075,1631,1637;, + 3;4073,1631,4075;, + 3;1639,1632,1638;, + 3;1633,1632,1639;, + 3;1640,1633,1639;, + 3;1634,1633,1640;, + 3;1641,1634,1640;, + 3;1635,1634,1641;, + 3;1642,4074,4076;, + 3;1636,4074,1642;, + 3;1643,1636,1642;, + 3;1637,1636,1643;, + 3;4077,1637,1643;, + 3;4075,1637,4077;, + 3;1639,1638,1644;, + 3;1640,1639,1645;, + 3;1644,1645,1639;, + 3;1641,1640,1645;, + 3;1642,4076,4078;, + 3;1643,1642,4079;, + 3;4078,4079,1642;, + 3;4077,1643,4079;, + 3;1647,4008,1646;, + 3;1456,4008,1647;, + 3;1648,1456,1647;, + 3;1420,1456,1648;, + 3;1649,1420,1648;, + 3;1417,1420,1649;, + 3;1650,4059,4080;, + 3;1425,4059,1650;, + 3;1651,1425,1650;, + 3;1402,1425,1651;, + 3;4081,1402,1651;, + 3;1407,1402,4081;, + 3;1653,1646,1652;, + 3;1647,1646,1653;, + 3;1654,1647,1653;, + 3;1648,1647,1654;, + 3;1655,1648,1654;, + 3;1649,1648,1655;, + 3;1656,4080,4082;, + 3;1650,4080,1656;, + 3;1657,1650,1656;, + 3;1651,1650,1657;, + 3;4083,1651,1657;, + 3;4081,1651,4083;, + 3;1659,1652,1658;, + 3;1653,1652,1659;, + 3;1660,1653,1659;, + 3;1654,1653,1660;, + 3;1661,1654,1660;, + 3;1655,1654,1661;, + 3;1662,4082,4084;, + 3;1656,4082,1662;, + 3;1663,1656,1662;, + 3;1657,1656,1663;, + 3;4085,1657,1663;, + 3;4083,1657,4085;, + 3;1665,1658,1664;, + 3;1659,1658,1665;, + 3;1666,1659,1665;, + 3;1660,1659,1666;, + 3;1667,1660,1666;, + 3;1661,1660,1667;, + 3;1668,4084,4086;, + 3;1662,4084,1668;, + 3;1669,1662,1668;, + 3;1663,1662,1669;, + 3;4087,1663,1669;, + 3;4085,1663,4087;, + 3;1671,1664,1670;, + 3;1665,1664,1671;, + 3;1672,1665,1671;, + 3;1666,1665,1672;, + 3;1673,1666,1672;, + 3;1667,1666,1673;, + 3;1674,4086,4088;, + 3;1668,4086,1674;, + 3;1675,1668,1674;, + 3;1669,1668,1675;, + 3;4089,1669,1675;, + 3;4087,1669,4089;, + 3;1677,1670,1676;, + 3;1671,1670,1677;, + 3;1678,1671,1677;, + 3;1672,1671,1678;, + 3;1679,1672,1678;, + 3;1673,1672,1679;, + 3;1680,4088,4090;, + 3;1674,4088,1680;, + 3;1681,1674,1680;, + 3;1675,1674,1681;, + 3;4091,1675,1681;, + 3;4089,1675,4091;, + 3;1683,1676,1682;, + 3;1677,1676,1683;, + 3;1684,1677,1683;, + 3;1678,1677,1684;, + 3;1685,1678,1684;, + 3;1679,1678,1685;, + 3;1686,4090,4092;, + 3;1680,4090,1686;, + 3;1687,1680,1686;, + 3;1681,1680,1687;, + 3;4093,1681,1687;, + 3;4091,1681,4093;, + 3;1689,1682,1688;, + 3;1683,1682,1689;, + 3;1690,1683,1689;, + 3;1684,1683,1690;, + 3;1691,1684,1690;, + 3;1685,1684,1691;, + 3;1692,4092,4094;, + 3;1686,4092,1692;, + 3;1693,1686,1692;, + 3;1687,1686,1693;, + 3;4095,1687,1693;, + 3;4093,1687,4095;, + 3;1695,1688,1694;, + 3;1689,1688,1695;, + 3;1696,1689,1695;, + 3;1690,1689,1696;, + 3;1697,1690,1696;, + 3;1691,1690,1697;, + 3;1698,4094,4096;, + 3;1692,4094,1698;, + 3;1699,1692,1698;, + 3;1693,1692,1699;, + 3;4097,1693,1699;, + 3;4095,1693,4097;, + 3;1701,1694,1700;, + 3;1695,1694,1701;, + 3;1702,1695,1701;, + 3;1696,1695,1702;, + 3;1703,1696,1702;, + 3;1697,1696,1703;, + 3;1704,4096,4098;, + 3;1698,4096,1704;, + 3;1705,1698,1704;, + 3;1699,1698,1705;, + 3;4099,1699,1705;, + 3;4097,1699,4099;, + 3;1701,1700,1706;, + 3;1702,1701,1707;, + 3;1706,1707,1701;, + 3;1703,1702,1707;, + 3;1704,4098,4100;, + 3;1705,1704,4101;, + 3;4100,4101,1704;, + 3;4099,1705,4101;, + 3;3994,1708,1408;, + 3;1708,1401,1418;, + 3;1426,1404,1428;, + 3;1428,1714,1426;, + 3;4036,1459,1709;, + 3;1709,1458,4036;, + 3;4009,1423,1710;, + 3;4009,1710,1424;, + 3;4059,1425,1711;, + 3;1711,1422,4059;, + 3;1458,1709,1710;, + 3;1710,1423,1458;, + 3;1459,1422,1711;, + 3;1711,1709,1459;, + 3;1710,1405,1424;, + 3;1402,3995,1426;, + 3;4102,4011,1405;, + 3;1425,1712,1711;, + 3;1711,1712,1714;, + 3;1428,1432,1714;, + 3;1712,1426,1714;, + 3;1714,1432,1709;, + 3;1709,1711,1714;, + 3;1709,1432,1710;, + 3;1710,1432,1431;, + 3;1431,1405,1710;, + 3;1431,4102,1405;, + 3;1431,4000,4102;, + 3;1715,1708,3991;, + 3;1419,1453,1715;, + 3;1722,1716,1727;, + 3;1716,1393,3983;, + 3;1724,1717,1723;, + 3;1717,4103,3987;, + 3;1394,1718,3984;, + 3;1729,1720,4104;, + 3;3988,1719,3985;, + 3;1721,4105,4106;, + 3;4104,1720,1721;, + 3;4104,1721,4106;, + 3;1719,1720,1394;, + 3;1723,1393,1722;, + 3;1717,1393,1723;, + 3;1717,1724,1725;, + 3;1717,1725,4103;, + 3;1727,1392,1726;, + 3;1716,1392,1727;, + 3;1716,1722,1393;, + 3;3989,1728,1729;, + 3;3989,1729,4104;, + 3;3986,1728,3990;, + 3;1718,1728,3986;, + 3;1397,1722,1727;, + 3;1397,1727,1396;, + 3;1399,1724,1723;, + 3;1399,1723,1397;, + 3;1729,1394,1720;, + 3;1718,1394,1729;, + 3;1721,1395,4105;, + 3;1719,1395,1721;, + 3;1731,1730,1388;, + 3;1731,1736,1295;, + 3;1732,3938,3940;, + 3;1737,3938,1732;, + 3;1733,1731,3978;, + 3;1731,1295,3978;, + 3;1300,1732,4107;, + 3;1300,4107,1390;, + 3;1294,1388,1734;, + 3;1738,1734,1297;, + 3;1299,1305,1735;, + 3;1334,1735,1298;, + 3;1731,1388,1736;, + 3;1294,1736,1388;, + 3;1300,1737,1732;, + 3;1300,3937,1737;, + 3;1301,1738,1297;, + 3;1738,1301,1299;, + 3;4108,1730,1731;, + 3;1391,1296,3979;, + 3;1391,3981,3936;, + 3;1296,1388,3980;, + 3;1388,1730,3980;, + 3;4109,4108,1731;, + 3;4109,1731,1733;, + 3;1732,4110,4107;, + 3;1732,3940,4110;, + 3;196,4111,197;, + 3;3759,4112,3760;, + 3;3938,4113,3939;, + 3;74,75,4114;, + 3;1744,6,1742;, + 3;10,97,1739;, + 3;1743,1745,142;, + 3;1740,144,215;, + 3;4115,4116,1741;, + 3;1741,1744,4115;, + 3;4117,4118,1742;, + 3;1742,1745,4117;, + 3;4118,4115,1744;, + 3;1744,1742,4118;, + 3;4119,4117,1745;, + 3;1745,1743,4119;, + 3;118,107,3471;, + 3;3460,3471,107;, + 3;233,3527,3528;, + 3;3528,3518,224;, + 3;106,5,87;, + 3;106,87,110;, + 3;1779,1790,1756;, + 3;1757,1819,1751;, + 3;1825,1826,4120;, + 3;1758,1829,1748;, + 3;2386,2124,2140;, + 3;2330,2146,2425;, + 3;1870,1872,1782;, + 3;4121,1846,4122;, + 3;1834,1835,1759;, + 3;2183,2240,2182;, + 3;2698,2714,2138;, + 3;2344,2518,2356;, + 3;4123,1852,4124;, + 3;1761,1865,4125;, + 3;1818,1799,1766;, + 3;2711,2132,2707;, + 3;2288,2450,2748;, + 3;2129,2213,2725;, + 3;2726,2753,2169;, + 3;2461,2471,2433;, + 3;1762,1763,1760;, + 3;1770,1772,1771;, + 3;2214,2022,2040;, + 3;2457,2193,2206;, + 3;2749,2758,2168;, + 3;2184,2176,2239;, + 3;2041,2190,2052;, + 3;2163,2231,2287;, + 3;2739,2284,2036;, + 3;2724,2204,2180;, + 3;2194,2044,2056;, + 3;2185,2196,2175;, + 3;2186,2043,2195;, + 3;2189,2042,2178;, + 3;2205,2188,2179;, + 3;2113,2062,2070;, + 3;2192,2458,2064;, + 3;2075,2198,2074;, + 3;2177,2042,2187;, + 3;2199,2053,2073;, + 3;2191,2065,2051;, + 3;2174,2197,2076;, + 3;2200,2700,2211;, + 3;2712,2202,2131;, + 3;2121,2396,2209;, + 3;2203,2212,2130;, + 3;1833,1800,1831;, + 3;2222,2021,2215;, + 3;2173,2077,2090;, + 3;2221,2037,2034;, + 3;2084,2020,2223;, + 3;2285,2220,2035;, + 3;2723,2181,2232;, + 3;2256,2282,2245;, + 3;2261,2278,2270;, + 3;2251,2281,2257;, + 3;2246,2277,2262;, + 3;2269,2279,2275;, + 3;2164,2249,2230;, + 3;2248,2165,2243;, + 3;2170,2259,2238;, + 3;2258,2171,2255;, + 3;2216,2267,2226;, + 3;2266,2217,2265;, + 3;2081,2254,2172;, + 3;2253,2082,2273;, + 3;2224,2272,2083;, + 3;2271,2225,2268;, + 3;2228,2264,2218;, + 3;2263,2229,2250;, + 3;2236,2242,2166;, + 3;2241,2237,2260;, + 3;2280,2252,2274;, + 3;2276,2247,2244;, + 3;2160,2738,2732;, + 3;2227,2219,2286;, + 3;2143,2159,2429;, + 3;2297,2449,2289;, + 3;2142,2430,2291;, + 3;2309,2469,2495;, + 3;2434,2127,2768;, + 3;2472,2437,2308;, + 3;2477,2302,2444;, + 3;2730,2028,2746;, + 3;4126,1823,1747;, + 3;1769,1778,3416;, + 3;4127,1838,1750;, + 3;1883,1763,1762;, + 3;1765,1856,4128;, + 3;1764,1804,1784;, + 3;1858,1859,4129;, + 3;1777,1760,1763;, + 3;1749,1752,1763;, + 3;1746,1806,1767;, + 3;1773,3416,1775;, + 3;1771,1769,1770;, + 3;4130,4131,4132;, + 3;4133,4134,1768;, + 3;4135,4136,4137;, + 3;4136,4135,4138;, + 3;4137,4139,4140;, + 3;4139,4137,4136;, + 3;4141,4142,4143;, + 3;1776,4140,4139;, + 3;1774,1768,4134;, + 3;4144,4143,4142;, + 3;4132,4138,4135;, + 3;4138,4132,4131;, + 3;4143,4144,1774;, + 3;3416,1773,4145;, + 3;1768,1774,4144;, + 3;4142,4141,1776;, + 3;3416,4145,1770;, + 3;4146,2141,4147;, + 3;4140,1776,4141;, + 3;3416,4148,1775;, + 3;4131,4130,4133;, + 3;4149,1807,4150;, + 3;4134,4133,4130;, + 3;2715,2709,2333;, + 3;2319,2343,2549;, + 3;4151,1849,4152;, + 3;2145,4153,2704;, + 3;2710,2703,2332;, + 3;2524,2523,2346;, + 3;1783,1809,4154;, + 3;2320,2147,2342;, + 3;2335,2352,2329;, + 3;2351,2336,2350;, + 3;2363,2341,2148;, + 3;2367,2328,2353;, + 3;2375,2349,2337;, + 3;2370,2385,2536;, + 3;2537,2360,2135;, + 3;4155,1867,4156;, + 3;2327,2368,2362;, + 3;2513,2512,2355;, + 3;2149,2361,2369;, + 3;2531,2529,2374;, + 3;2348,2376,2372;, + 3;1785,1811,4157;, + 3;2389,2383,2378;, + 3;2381,2134,2357;, + 3;2384,2371,2377;, + 3;2133,2382,2390;, + 3;4158,1877,4159;, + 3;2338,2388,2379;, + 3;2393,2098,2401;, + 3;2392,2397,2115;, + 3;2109,2060,2399;, + 3;2394,2412,2097;, + 3;2411,2395,2122;, + 3;1755,1813,1787;, + 3;2407,2423,2101;, + 3;2422,2408,2415;, + 3;2402,2414,2409;, + 3;2413,2403,2418;, + 3;2419,2417,2404;, + 3;2416,2420,2108;, + 3;2099,2107,2421;, + 3;4160,1840,4161;, + 3;1788,1861,4162;, + 3;1754,1843,4163;, + 3;2102,2096,2406;, + 3;2114,2398,2061;, + 3;2112,2400,2091;, + 3;4164,1873,4165;, + 3;2424,2141,2318;, + 3;1779,1879,1790;, + 3;1756,1790,1879;, + 3;1757,4166,1820;, + 3;1751,1819,4166;, + 3;1825,4167,1827;, + 3;4120,1826,4167;, + 3;1758,1828,1830;, + 3;1748,1829,1828;, + 3;1870,1871,1794;, + 3;1782,1872,1871;, + 3;4121,4168,1847;, + 3;4122,1846,4168;, + 3;1834,1836,1796;, + 3;1759,1835,1753;, + 3;4123,4169,1853;, + 3;4124,1852,4169;, + 3;1761,1864,1866;, + 3;4125,1865,1864;, + 3;4170,1789,1799;, + 3;1766,1799,1789;, + 3;1833,1832,1800;, + 3;1831,1800,1832;, + 3;1824,1822,1801;, + 3;1747,1823,1822;, + 3;4127,4171,1837;, + 3;1750,1837,4171;, + 3;1857,1855,1803;, + 3;4128,1856,1855;, + 3;4154,1781,4172;, + 3;4173,4174,4175;, + 3;1858,1860,1805;, + 3;4129,1859,1786;, + 3;1746,4176,1881;, + 3;1767,1806,1880;, + 3;4149,4177,1807;, + 3;4150,1882,4178;, + 3;4151,1850,1851;, + 3;4152,1849,4179;, + 3;1783,1781,1809;, + 3;4154,1809,1781;, + 3;4155,4180,1868;, + 3;4156,1867,4180;, + 3;1785,4181,1811;, + 3;4157,1811,4181;, + 3;1878,1876,1812;, + 3;4159,1877,1876;, + 3;2410,2426,2405;, + 3;4160,4182,1841;, + 3;4161,1840,4182;, + 3;1788,4183,1862;, + 3;4162,1861,4183;, + 3;1754,4184,1844;, + 3;4163,1843,4184;, + 3;4164,1874,1875;, + 3;4165,1873,4185;, + 3;4186,4187,4188;, + 3;4187,4186,4189;, + 3;4170,1799,1818;, + 3;4187,4189,4190;, + 3;2152,2456,2489;, + 3;2431,2300,2290;, + 3;2156,2126,2435;, + 3;2476,2301,2478;, + 3;2438,2764,2307;, + 3;2501,2485,2296;, + 3;2446,2311,2728;, + 3;2310,2447,2468;, + 3;2155,2436,2473;, + 3;2452,2293,2491;, + 3;2459,2118,2063;, + 3;2150,2465,2428;, + 3;2432,2466,2299;, + 3;2451,2492,2488;, + 3;2467,2448,2298;, + 3;2153,2500,2455;, + 3;2454,2496,2505;, + 3;2453,2506,2292;, + 3;2295,2482,2316;, + 3;2462,2494,2470;, + 3;2493,2463,2487;, + 3;2315,2483,2442;, + 3;2440,2503,2481;, + 3;2502,2441,2484;, + 3;2151,2486,2464;, + 3;2479,2498,2475;, + 3;2497,2480,2504;, + 3;2154,2474,2499;, + 3;2317,2490,2294;, + 3;2507,2366,2354;, + 3;2550,2340,2364;, + 3;2326,2544,2561;, + 3;2345,2519,2517;, + 3;2562,2325,2556;, + 3;2373,2530,2347;, + 3;2568,2324,2563;, + 3;2359,2538,2534;, + 3;2323,2569,2541;, + 3;2535,2380,2358;, + 3;2574,2528,2532;, + 3;2717,2543,2136;, + 3;2620,2599,2606;, + 3;2548,2339,2551;, + 3;2621,2629,2598;, + 3;2508,2555,2365;, + 3;2590,2634,2601;, + 3;2630,2625,2600;, + 3;2613,2589,2612;, + 3;2592,2582,2558;, + 3;2655,2616,2649;, + 3;2615,2656,2654;, + 3;2570,2579,2540;, + 3;2539,2580,2533;, + 3;2583,2567,2557;, + 3;2614,2650,2588;, + 3;2611,2581,2593;, + 3;2610,2594,2602;, + 3;2525,2608,2522;, + 3;2607,2526,2619;, + 3;2514,2596,2511;, + 3;2595,2515,2605;, + 3;2545,2632,2560;, + 3;2631,2546,2624;, + 3;2520,2604,2516;, + 3;2603,2521,2609;, + 3;2564,2645,2573;, + 3;2644,2565,2639;, + 3;2575,2618,2527;, + 3;2617,2576,2648;, + 3;2552,2623,2547;, + 3;2622,2553,2628;, + 3;2509,2627,2554;, + 3;2626,2510,2597;, + 3;2591,2559,2633;, + 3;2661,2647,2577;, + 3;2666,2572,2640;, + 3;2584,2638,2566;, + 3;2683,2676,2671;, + 3;2684,2682,2675;, + 3;2689,2681,2685;, + 3;2680,2690,2697;, + 3;2578,2571,2667;, + 3;2662,2660,2646;, + 3;2657,2687,2653;, + 3;2686,2658,2693;, + 3;2651,2669,2587;, + 3;2668,2652,2688;, + 3;2635,2678,2643;, + 3;2677,2636,2674;, + 3;2641,2695,2665;, + 3;2694,2642,2679;, + 3;2585,2673,2637;, + 3;2672,2586,2670;, + 3;2663,2692,2659;, + 3;2691,2664,2696;, + 3;1819,1791,1821;, + 3;1757,1820,1819;, + 3;2701,2120,2210;, + 3;2119,2702,2139;, + 3;1820,1791,1819;, + 3;1820,1821,1791;, + 3;1819,1821,4166;, + 3;1820,4166,1821;, + 3;1747,1822,4191;, + 3;4126,4191,1822;, + 3;1823,1801,1822;, + 3;1824,1801,1823;, + 3;4126,1822,1824;, + 3;4126,1824,1823;, + 3;4192,4167,1825;, + 3;4192,1825,4120;, + 3;1826,1827,4167;, + 3;1825,1792,1826;, + 3;1825,1827,1792;, + 3;1826,1792,1827;, + 3;1748,1828,4193;, + 3;1758,4193,1828;, + 3;1829,1793,1828;, + 3;1758,1830,1829;, + 3;1830,1793,1829;, + 3;1830,1828,1793;, + 3;4194,1831,4195;, + 3;4195,1831,4196;, + 3;1831,1832,4196;, + 3;4194,4196,1832;, + 3;4194,1832,1833;, + 3;4194,1833,1831;, + 3;4197,1753,1834;, + 3;4197,1834,1759;, + 3;1835,1796,1836;, + 3;1834,1796,1835;, + 3;1835,1836,1753;, + 3;1834,1753,1836;, + 3;1839,1837,1802;, + 3;1750,1838,1837;, + 3;1838,1802,1837;, + 3;1839,1802,1838;, + 3;4127,1837,1839;, + 3;4127,1839,1838;, + 3;1840,1814,1842;, + 3;4160,1841,1840;, + 3;1841,1814,1840;, + 3;1841,1842,1814;, + 3;1840,1842,4182;, + 3;1841,4182,1842;, + 3;1843,1845,4184;, + 3;1754,1844,1843;, + 3;1844,1816,1843;, + 3;1844,4184,1845;, + 3;1844,1845,1816;, + 3;1843,1816,1845;, + 3;1846,1848,4168;, + 3;4121,1847,1846;, + 3;1847,1795,1846;, + 3;1847,4168,1848;, + 3;1847,1848,1795;, + 3;1846,1795,1848;, + 3;1849,1808,1850;, + 3;4151,1851,1849;, + 3;1849,1850,4179;, + 3;4151,4179,1850;, + 3;1851,1808,1849;, + 3;1851,1850,1808;, + 3;1852,1854,4169;, + 3;4123,1853,1852;, + 3;1853,1797,1852;, + 3;1853,4169,1854;, + 3;1853,1854,1797;, + 3;1852,1797,1854;, + 3;4128,1855,4198;, + 3;1765,4198,1855;, + 3;1856,1803,1855;, + 3;1857,1803,1856;, + 3;1765,1855,1857;, + 3;1765,1857,1856;, + 3;4199,1786,1858;, + 3;4199,1858,4129;, + 3;1859,1805,1860;, + 3;1858,1805,1859;, + 3;1859,1860,1786;, + 3;1858,1786,1860;, + 3;1861,1815,1863;, + 3;1788,1862,1861;, + 3;1862,1815,1861;, + 3;1862,1863,1815;, + 3;1861,1863,4183;, + 3;1862,4183,1863;, + 3;4125,1864,4200;, + 3;1761,4200,1864;, + 3;1865,1798,1864;, + 3;1761,1866,1865;, + 3;1866,1798,1865;, + 3;1866,1864,1798;, + 3;1867,1869,4180;, + 3;4155,1868,1867;, + 3;1868,1810,1867;, + 3;1868,4180,1869;, + 3;1868,1869,1810;, + 3;1867,1810,1869;, + 3;4201,1780,1870;, + 3;4201,1870,1782;, + 3;1782,1871,1780;, + 3;1870,1780,1871;, + 3;1872,1794,1871;, + 3;1870,1794,1872;, + 3;1873,1817,1874;, + 3;4164,1875,1873;, + 3;1873,1874,4185;, + 3;4164,4185,1874;, + 3;1875,1817,1873;, + 3;1875,1874,1817;, + 3;4159,1876,4202;, + 3;4158,4202,1876;, + 3;1877,1812,1876;, + 3;1878,1812,1877;, + 3;4158,1876,1878;, + 3;4158,1878,1877;, + 3;1756,1879,4203;, + 3;1779,4203,1879;, + 3;4177,4178,1882;, + 3;1880,1881,4176;, + 3;1746,1881,1806;, + 3;1880,1806,1881;, + 3;4177,1882,1807;, + 3;4150,1807,1882;, + 3;2144,2705,2158;, + 3;2706,2125,2157;, + 3;2699,2201,2713;, + 3;2137,2708,2716;, + 3;2322,2542,2718;, + 3;2321,2719,2334;, + 3;2117,2460,2207;, + 3;2116,2208,2391;, + 3;2306,2759,2756;, + 3;2303,2314,2443;, + 3;2168,2235,2167;, + 3;2445,2729,2747;, + 3;2027,2731,2733;, + 3;2161,2741,2737;, + 3;2162,2283,2740;, + 3;1749,1763,1883;, + 3;2745,2023,2030;, + 3;2313,2304,2751;, + 3;2727,2312,2752;, + 3;2750,2305,2757;, + 3;2761,2722,2233;, + 3;2760,2234,2755;, + 3;2439,2765,2763;, + 3;2766,2721,2762;, + 3;2767,2128,2720;, + 3;4204,1884,4205;, + 3;4206,1885,4207;, + 3;2387,2427,2123;, + 3;1884,4206,4205;, + 3;4204,4206,1884;, + 3;1885,4204,4207;, + 3;4206,4204,1885;, + 3;1910,1887,1921;, + 3;1888,4208,1950;, + 3;1956,4209,1957;, + 3;1889,4210,1960;, + 3;3044,2796,2780;, + 3;2987,3083,2802;, + 3;2001,1913,2003;, + 3;4211,4212,1977;, + 3;1965,1890,1966;, + 3;2839,2838,2896;, + 3;3357,2790,3373;, + 3;3001,3013,3177;, + 3;4213,4214,1983;, + 3;1892,4215,1996;, + 3;1949,1897,1930;, + 3;3369,3366,2788;, + 3;2944,3395,3109;, + 3;2783,3384,2869;, + 3;3385,2825,3400;, + 3;3120,3092,3130;, + 3;1893,1891,1894;, + 3;1901,1902,1903;, + 3;2870,2039,2017;, + 3;3116,2866,2849;, + 3;3399,2816,3405;, + 3;2843,2888,2832;, + 3;2048,2049,2846;, + 3;2821,2943,2887;, + 3;2744,2031,2941;, + 3;3379,2834,2868;, + 3;2850,2055,2045;, + 3;2842,2826,2854;, + 3;2841,2855,2046;, + 3;2847,2836,2047;, + 3;2867,2835,2848;, + 3;2769,2069,2057;, + 3;2844,2067,3119;, + 3;2080,2071,2852;, + 3;2837,2840,2047;, + 3;2851,2072,2054;, + 3;2845,2050,2066;, + 3;2827,2079,2853;, + 3;2856,2861,3360;, + 3;3368,2781,2858;, + 3;2777,2863,3054;, + 3;2857,2782,2860;, + 3;1964,1962,1931;, + 3;2878,2877,2018;, + 3;2828,2089,2078;, + 3;2871,2033,2038;, + 3;2085,2882,2019;, + 3;2940,2032,2872;, + 3;3380,2895,2833;, + 3;2912,2901,2938;, + 3;2917,2926,2935;, + 3;2907,2916,2932;, + 3;2902,2921,2936;, + 3;2922,2931,2934;, + 3;2820,2883,2904;, + 3;2905,2898,2819;, + 3;2831,2889,2914;, + 3;2915,2908,2830;, + 3;2876,2879,2924;, + 3;2925,2918,2875;, + 3;2088,2829,2909;, + 3;2910,2928,2087;, + 3;2881,2086,2929;, + 3;2930,2923,2880;, + 3;2885,2874,2919;, + 3;2920,2903,2884;, + 3;2891,2818,2899;, + 3;2900,2913,2890;, + 3;2933,2927,2911;, + 3;2937,2897,2906;, + 3;2824,3386,2735;, + 3;2886,2939,2873;, + 3;2799,3090,2815;, + 3;2953,2947,3104;, + 3;2800,2945,3089;, + 3;2965,3154,3126;, + 3;3093,3415,2785;, + 3;3131,2964,3096;, + 3;3136,3103,2962;, + 3;3388,3393,2025;, + 3;4216,4217,1954;, + 3;1900,1901,3417;, + 3;4218,4219,1969;, + 3;2014,1893,1894;, + 3;1896,4220,1987;, + 3;1895,1915,1935;, + 3;1989,4221,1990;, + 3;1908,1894,1891;, + 3;1749,1894,1752;, + 3;1746,1898,1937;, + 3;3417,1906,1899;, + 3;1902,1901,1900;, + 3;4222,4223,4224;, + 3;1909,4225,4226;, + 3;4135,4137,4227;, + 3;4227,4228,4135;, + 3;4137,4229,4230;, + 3;4230,4227,4137;, + 3;4231,4232,1904;, + 3;1907,4230,4229;, + 3;1905,4226,4225;, + 3;4233,1904,4232;, + 3;4223,4135,4228;, + 3;4228,4224,4223;, + 3;4232,1905,4233;, + 3;1906,3417,4234;, + 3;4225,4233,1905;, + 3;1904,1907,4231;, + 3;4235,1900,3417;, + 3;2801,1908,1891;, + 3;4229,4231,1907;, + 3;4235,3417,1899;, + 3;4224,1909,4222;, + 3;4236,4237,1938;, + 3;4226,4222,1909;, + 3;3374,2989,3371;, + 3;2975,3208,3000;, + 3;4238,4239,1980;, + 3;2802,3364,2991;, + 3;3370,2990,3365;, + 3;3183,3006,3182;, + 3;1914,4240,1940;, + 3;2982,2996,2805;, + 3;2995,2986,3011;, + 3;3012,3002,2994;, + 3;3021,2804,2997;, + 3;3024,3010,2983;, + 3;3033,2993,3003;, + 3;3028,3195,3043;, + 3;3196,2793,3017;, + 3;4241,4242,1998;, + 3;2984,3019,3023;, + 3;3176,3008,3171;, + 3;2803,3022,3020;, + 3;3194,3029,3185;, + 3;3004,3031,3037;, + 3;1916,4243,1942;, + 3;3046,3035,3039;, + 3;3041,3016,2794;, + 3;3038,3036,3032;, + 3;2795,3045,3040;, + 3;4244,4245,2008;, + 3;2992,3034,3047;, + 3;3051,3059,2093;, + 3;3052,2773,3058;, + 3;2110,3056,2059;, + 3;3050,2094,3070;, + 3;3064,2776,3049;, + 3;1886,1918,1944;, + 3;3068,2104,3080;, + 3;3081,3071,3067;, + 3;3060,3066,3072;, + 3;3073,3074,3063;, + 3;3077,3062,3075;, + 3;3076,2105,3079;, + 3;2100,3078,2106;, + 3;4246,4247,1971;, + 3;1919,4248,1992;, + 3;4249,4250,1974;, + 3;2103,3069,2095;, + 3;2774,2058,3057;, + 3;2111,2092,3055;, + 3;4251,4252,2004;, + 3;3082,2974,4253;, + 3;1910,1921,2010;, + 3;1887,2010,1921;, + 3;1888,1951,4254;, + 3;4208,4254,1950;, + 3;1956,1958,4255;, + 3;4209,4255,1957;, + 3;1889,1961,1959;, + 3;4210,1959,1960;, + 3;2001,1925,2002;, + 3;1913,2002,2003;, + 3;4211,1978,4256;, + 3;4212,4256,1977;, + 3;1965,1927,1967;, + 3;1890,4257,1966;, + 3;4213,1984,4258;, + 3;4214,4258,1983;, + 3;1892,1997,1995;, + 3;4215,1995,1996;, + 3;4259,1930,1920;, + 3;1897,1920,1930;, + 3;1964,1931,1963;, + 3;1962,1963,1931;, + 3;1955,1932,1953;, + 3;4217,1953,1954;, + 3;4218,1968,4260;, + 3;4219,4260,1968;, + 3;1988,1934,1986;, + 3;4220,1986,1987;, + 3;4240,4261,1912;, + 3;3018,2985,3084;, + 3;1989,1936,1991;, + 3;4221,1917,1990;, + 3;1746,2012,4176;, + 3;1898,2011,1937;, + 3;4236,1938,4262;, + 3;4237,4178,2013;, + 3;4238,1982,1981;, + 3;4239,4263,1980;, + 3;1914,1940,1912;, + 3;4240,1912,1940;, + 3;4241,1999,4264;, + 3;4242,4264,1998;, + 3;1916,1942,4265;, + 3;4243,4265,1942;, + 3;2009,1943,2007;, + 3;4245,2007,2008;, + 3;3065,3061,3086;, + 3;4246,1972,4266;, + 3;4247,4266,1971;, + 3;1919,1993,4267;, + 3;4248,4267,1992;, + 3;4249,1975,4268;, + 3;4250,4268,1974;, + 3;4251,2006,2005;, + 3;4252,4269,2004;, + 3;4270,4271,4272;, + 3;4272,4273,4270;, + 3;4259,1949,1930;, + 3;4272,4274,4273;, + 3;2812,3148,3115;, + 3;3088,2946,2954;, + 3;2808,3098,2786;, + 3;3132,3140,2963;, + 3;3095,2957,3411;, + 3;3160,2952,3144;, + 3;3107,3390,2972;, + 3;2973,3127,3106;, + 3;2809,3135,3097;, + 3;3113,3152,2950;, + 3;3118,2068,2770;, + 3;2814,3091,3121;, + 3;3087,2955,3129;, + 3;3114,3145,3151;, + 3;3128,2956,3105;, + 3;2811,3110,3159;, + 3;3111,3162,3158;, + 3;3112,2951,3161;, + 3;2948,2967,3143;, + 3;3124,3125,3149;, + 3;3150,3146,3123;, + 3;2968,3100,3142;, + 3;3102,3137,3164;, + 3;3165,3141,3101;, + 3;2813,3122,3147;, + 3;3139,3133,3156;, + 3;3157,3163,3138;, + 3;2810,3155,3134;, + 3;2966,2949,3153;, + 3;3170,3009,3025;, + 3;3209,3027,2998;, + 3;2976,3220,3207;, + 3;3007,3172,3181;, + 3;3221,3219,2977;, + 3;3030,3005,3184;, + 3;3227,3226,2978;, + 3;3014,3191,3202;, + 3;2979,3199,3232;, + 3;3190,3015,3042;, + 3;3233,3193,3186;, + 3;3377,2792,3197;, + 3;3279,3265,3258;, + 3;3203,3214,2999;, + 3;3284,3254,3288;, + 3;3169,3026,3210;, + 3;3249,3263,3293;, + 3;3292,3264,3280;, + 3;3272,3271,3248;, + 3;3252,3217,3246;, + 3;3314,3308,3276;, + 3;3277,3313,3319;, + 3;3231,3200,3235;, + 3;3201,3192,3234;, + 3;3245,3218,3222;, + 3;3278,3240,3312;, + 3;3266,3251,3247;, + 3;3267,3262,3250;, + 3;3189,3178,3269;, + 3;3270,3273,3188;, + 3;3175,3166,3256;, + 3;3257,3259,3174;, + 3;3206,3215,3290;, + 3;3291,3281,3205;, + 3;3180,3173,3260;, + 3;3261,3268,3179;, + 3;3225,3228,3304;, + 3;3299,3298,3224;, + 3;3239,3187,3274;, + 3;3275,3305,3238;, + 3;3213,3204,3282;, + 3;3283,3285,3212;, + 3;3168,3211,3286;, + 3;3287,3255,3167;, + 3;3253,3289,3216;, + 3;3320,3237,3306;, + 3;3322,3303,3229;, + 3;3244,3223,3294;, + 3;3342,3330,3335;, + 3;3347,3331,3341;, + 3;3348,3346,3336;, + 3;3337,3356,3352;, + 3;3236,3321,3230;, + 3;3326,3307,3315;, + 3;3318,3309,3344;, + 3;3345,3349,3317;, + 3;3311,3241,3328;, + 3;3329,3343,3310;, + 3;3297,3300,3339;, + 3;3340,3332,3296;, + 3;3302,3323,3354;, + 3;3355,3338,3301;, + 3;3243,3295,3333;, + 3;3334,3327,3242;, + 3;3325,3316,3350;, + 3;3351,3353,3324;, + 3;1950,1952,1922;, + 3;1888,1950,1951;, + 3;3359,2862,2778;, + 3;2779,2789,3358;, + 3;1951,1950,1922;, + 3;1951,1922,1952;, + 3;1950,4254,1952;, + 3;1951,1952,4254;, + 3;4217,4275,1953;, + 3;4216,1953,4275;, + 3;1954,1953,1932;, + 3;1955,1954,1932;, + 3;4216,1955,1953;, + 3;4216,1954,1955;, + 3;4276,1956,4255;, + 3;4276,4209,1956;, + 3;1957,4255,1958;, + 3;1956,1957,1923;, + 3;1956,1923,1958;, + 3;1957,1958,1923;, + 3;4210,4277,1959;, + 3;1889,1959,4277;, + 3;1960,1959,1924;, + 3;1889,1960,1961;, + 3;1961,1960,1924;, + 3;1961,1924,1959;, + 3;4278,4279,1962;, + 3;4279,4280,1962;, + 3;1962,4280,1963;, + 3;4278,1963,4280;, + 3;4278,1964,1963;, + 3;4278,1962,1964;, + 3;4281,1965,4257;, + 3;4281,1890,1965;, + 3;1966,1967,1927;, + 3;1965,1966,1927;, + 3;1966,4257,1967;, + 3;1965,1967,4257;, + 3;1970,1933,1968;, + 3;4219,1968,1969;, + 3;1969,1968,1933;, + 3;1970,1969,1933;, + 3;4218,1970,1968;, + 3;4218,1969,1970;, + 3;1971,1973,1945;, + 3;4246,1971,1972;, + 3;1972,1971,1945;, + 3;1972,1945,1973;, + 3;1971,4266,1973;, + 3;1972,1973,4266;, + 3;1974,4268,1976;, + 3;4249,1974,1975;, + 3;1975,1974,1947;, + 3;1975,1976,4268;, + 3;1975,1947,1976;, + 3;1974,1976,1947;, + 3;1977,4256,1979;, + 3;4211,1977,1978;, + 3;1978,1977,1926;, + 3;1978,1979,4256;, + 3;1978,1926,1979;, + 3;1977,1979,1926;, + 3;1980,1981,1939;, + 3;4238,1980,1982;, + 3;1980,4263,1981;, + 3;4238,1981,4263;, + 3;1982,1980,1939;, + 3;1982,1939,1981;, + 3;1983,4258,1985;, + 3;4213,1983,1984;, + 3;1984,1983,1928;, + 3;1984,1985,4258;, + 3;1984,1928,1985;, + 3;1983,1985,1928;, + 3;4220,4282,1986;, + 3;1896,1986,4282;, + 3;1987,1986,1934;, + 3;1988,1987,1934;, + 3;1896,1988,1986;, + 3;1896,1987,1988;, + 3;4283,1989,1917;, + 3;4283,4221,1989;, + 3;1990,1991,1936;, + 3;1989,1990,1936;, + 3;1990,1917,1991;, + 3;1989,1991,1917;, + 3;1992,1994,1946;, + 3;1919,1992,1993;, + 3;1993,1992,1946;, + 3;1993,1946,1994;, + 3;1992,4267,1994;, + 3;1993,1994,4267;, + 3;4215,4284,1995;, + 3;1892,1995,4284;, + 3;1996,1995,1929;, + 3;1892,1996,1997;, + 3;1997,1996,1929;, + 3;1997,1929,1995;, + 3;1998,4264,2000;, + 3;1915,4285,4286;, + 3;1999,1998,1941;, + 3;1999,2000,4264;, + 3;1999,1941,2000;, + 3;1998,2000,1941;, + 3;4287,2001,1911;, + 3;4287,1913,2001;, + 3;1913,1911,2002;, + 3;2001,2002,1911;, + 3;2003,2002,1925;, + 3;2001,2003,1925;, + 3;2004,2005,1948;, + 3;4251,2004,2006;, + 3;2004,4269,2005;, + 3;4251,2005,4269;, + 3;2006,2004,1948;, + 3;2006,1948,2005;, + 3;4245,4288,2007;, + 3;4244,2007,4288;, + 3;2008,2007,1943;, + 3;2009,2008,1943;, + 3;4244,2009,2007;, + 3;4244,2008,2009;, + 3;1887,4289,2010;, + 3;1910,2010,4289;, + 3;4262,2013,4178;, + 3;2011,4176,2012;, + 3;1746,1937,2012;, + 3;2011,2012,1937;, + 3;4262,1938,2013;, + 3;4237,2013,1938;, + 3;2798,2806,3363;, + 3;3362,2807,2787;, + 3;3361,3367,2859;, + 3;2791,3378,3372;, + 3;2980,3376,3198;, + 3;2981,2988,3375;, + 3;2771,2865,3117;, + 3;2772,3053,2864;, + 3;2958,3402,3410;, + 3;2961,3099,2969;, + 3;2893,2817,2892;, + 3;3108,3392,3389;, + 3;2026,2734,3387;, + 3;2823,2736,2742;, + 3;2822,2743,2942;, + 3;1749,2014,1894;, + 3;3394,2029,2024;, + 3;2970,3397,2960;, + 3;3391,3396,2971;, + 3;3398,3401,2959;, + 3;3408,2894,3381;, + 3;3409,3403,2893;, + 3;3094,3406,3414;, + 3;3413,3407,3382;, + 3;3412,3383,2784;, + 3;4290,4291,2015;, + 3;4292,4293,2016;, + 3;3048,2775,3085;, + 3;2015,4291,4294;, + 3;4290,2015,4294;, + 3;2016,4293,4295;, + 3;4292,2016,4295;, + 3;2017,2040,2022;, + 3;2017,2039,2040;, + 3;2018,2870,2017;, + 3;2018,2877,2870;, + 3;2019,2878,2018;, + 3;2019,2882,2878;, + 3;2020,2085,2019;, + 3;2020,2084,2085;, + 3;2021,2223,2020;, + 3;2021,2222,2223;, + 3;2022,2215,2021;, + 3;2022,2214,2215;, + 3;2019,2017,2020;, + 3;2020,2017,2022;, + 3;2020,2022,2021;, + 3;2017,2019,2018;, + 3;2023,2746,2028;, + 3;2023,2745,2746;, + 3;2024,2030,2023;, + 3;2024,2029,2030;, + 3;2025,3394,2024;, + 3;2025,3393,3394;, + 3;2026,3388,2025;, + 3;2026,3387,3388;, + 3;2027,2734,2026;, + 3;2027,2733,2734;, + 3;2028,2731,2027;, + 3;2028,2730,2731;, + 3;2025,2028,2026;, + 3;2026,2028,2027;, + 3;2028,2025,2024;, + 3;2028,2024,2023;, + 3;2029,2014,1749;, + 3;2029,3394,2014;, + 3;1749,2745,2030;, + 3;1749,1883,2745;, + 3;1749,2030,2029;, + 3;2031,2739,2036;, + 3;2031,2744,2739;, + 3;2032,2941,2031;, + 3;2032,2940,2941;, + 3;2033,2872,2032;, + 3;2033,2871,2872;, + 3;2034,2038,2033;, + 3;2034,2037,2038;, + 3;2035,2221,2034;, + 3;2035,2220,2221;, + 3;2036,2285,2035;, + 3;2036,2284,2285;, + 3;2031,2036,2034;, + 3;2031,2034,2033;, + 3;2031,2033,2032;, + 3;2034,2036,2035;, + 3;2037,2214,2040;, + 3;2037,2221,2214;, + 3;2039,2871,2038;, + 3;2039,2870,2871;, + 3;2039,2038,2040;, + 3;2040,2038,2037;, + 3;2041,2049,2048;, + 3;2041,2052,2049;, + 3;2042,2190,2041;, + 3;2042,2189,2190;, + 3;2042,2177,2178;, + 3;2043,2187,2042;, + 3;2043,2186,2187;, + 3;2044,2195,2043;, + 3;2044,2194,2195;, + 3;2045,2056,2044;, + 3;2045,2055,2056;, + 3;2046,2850,2045;, + 3;2046,2855,2850;, + 3;2047,2841,2046;, + 3;2047,2840,2841;, + 3;2047,2836,2837;, + 3;2048,2847,2047;, + 3;2048,2846,2847;, + 3;2045,2044,2048;, + 3;2045,2048,2046;, + 3;2046,2048,2047;, + 3;2048,2044,2041;, + 3;2041,2044,2043;, + 3;2041,2043,2042;, + 3;2050,2846,2049;, + 3;2050,2845,2846;, + 3;2051,2066,2050;, + 3;2051,2065,2066;, + 3;2052,2191,2051;, + 3;2052,2190,2191;, + 3;2050,2049,2051;, + 3;2051,2049,2052;, + 3;2053,2194,2056;, + 3;2053,2199,2194;, + 3;2054,2073,2053;, + 3;2054,2072,2073;, + 3;2055,2851,2054;, + 3;2055,2850,2851;, + 3;2055,2054,2056;, + 3;2056,2054,2053;, + 3;2057,2070,2062;, + 3;2057,2069,2070;, + 3;2058,2769,2057;, + 3;2058,2774,2769;, + 3;2059,3057,2058;, + 3;2059,3056,3057;, + 3;2060,2110,2059;, + 3;2060,2109,2110;, + 3;2061,2399,2060;, + 3;2061,2398,2399;, + 3;2062,2114,2061;, + 3;2062,2113,2114;, + 3;2057,2062,2058;, + 3;2058,2062,2061;, + 3;2058,2061,2059;, + 3;2059,2061,2060;, + 3;2063,2113,2070;, + 3;2063,2118,2113;, + 3;2064,2459,2063;, + 3;2064,2458,2459;, + 3;2065,2192,2064;, + 3;2065,2191,2192;, + 3;2067,2845,2066;, + 3;2067,2844,2845;, + 3;2068,3119,2067;, + 3;2068,3118,3119;, + 3;2069,2770,2068;, + 3;2069,2769,2770;, + 3;2066,2065,2069;, + 3;2066,2069,2068;, + 3;2066,2068,2067;, + 3;2069,2065,2070;, + 3;2070,2065,2063;, + 3;2063,2065,2064;, + 3;2071,2075,2074;, + 3;2071,2080,2075;, + 3;2072,2852,2071;, + 3;2072,2851,2852;, + 3;2074,2199,2073;, + 3;2074,2198,2199;, + 3;2072,2071,2073;, + 3;2073,2071,2074;, + 3;2076,2198,2075;, + 3;2076,2197,2198;, + 3;2077,2174,2076;, + 3;2077,2173,2174;, + 3;2078,2090,2077;, + 3;2078,2089,2090;, + 3;2079,2828,2078;, + 3;2079,2827,2828;, + 3;2080,2853,2079;, + 3;2080,2852,2853;, + 3;2078,2077,2079;, + 3;2079,2077,2076;, + 3;2079,2076,2080;, + 3;2080,2076,2075;, + 3;2081,2173,2090;, + 3;2081,2172,2173;, + 3;2082,2254,2081;, + 3;2082,2253,2254;, + 3;2083,2273,2082;, + 3;2083,2272,2273;, + 3;2084,2224,2083;, + 3;2084,2223,2224;, + 3;2086,2882,2085;, + 3;2086,2881,2882;, + 3;2087,2929,2086;, + 3;2087,2928,2929;, + 3;2088,2910,2087;, + 3;2088,2909,2910;, + 3;2089,2829,2088;, + 3;2089,2828,2829;, + 3;2085,2084,2090;, + 3;2085,2090,2089;, + 3;2085,2089,2086;, + 3;2086,2089,2087;, + 3;2087,2089,2088;, + 3;2090,2084,2083;, + 3;2090,2083,2082;, + 3;2090,2082,2081;, + 3;2091,2401,2098;, + 3;2091,2400,2401;, + 3;2092,2112,2091;, + 3;2092,2111,2112;, + 3;2093,3055,2092;, + 3;2093,3059,3055;, + 3;4296,3051,2093;, + 3;4296,4297,3051;, + 3;4298,3070,2094;, + 3;4298,4299,3070;, + 3;2096,2103,2095;, + 3;2096,2102,2103;, + 3;2097,4300,4301;, + 3;2097,2412,4300;, + 3;2098,4302,4303;, + 3;2098,2393,4302;, + 3;4304,4305,4298;, + 3;4304,4298,2094;, + 3;4298,4305,4301;, + 3;4301,4305,2097;, + 3;2098,2093,2092;, + 3;2098,2092,2091;, + 3;2099,4306,4307;, + 3;2099,2421,4306;, + 3;2100,2107,2099;, + 3;2100,2106,2107;, + 3;4307,3078,2100;, + 3;4307,4308,3078;, + 3;4307,2100,2099;, + 3;2101,21,8;, + 3;2101,2423,21;, + 3;2102,2407,2101;, + 3;2102,2406,2407;, + 3;2104,3069,2103;, + 3;2104,3068,3069;, + 3;8,3080,2104;, + 3;8,151,3080;, + 3;8,2102,2101;, + 3;8,2103,2102;, + 3;8,2104,2103;, + 3;2105,4309,4310;, + 3;2105,3076,4309;, + 3;2106,3079,2105;, + 3;2106,3078,3079;, + 3;2108,2421,2107;, + 3;2108,2420,2421;, + 3;4310,2416,2108;, + 3;4310,4311,2416;, + 3;4310,2106,2105;, + 3;4310,2107,2106;, + 3;4310,2108,2107;, + 3;4312,2400,2112;, + 3;4312,4313,2400;, + 3;2111,4314,4315;, + 3;2111,3055,4314;, + 3;4315,4312,2111;, + 3;2111,4312,2112;, + 3;4316,2398,2114;, + 3;2115,2397,4317;, + 3;2116,2392,2115;, + 3;2116,2391,2392;, + 3;2117,4318,4319;, + 3;2117,2207,4318;, + 3;2118,2460,2117;, + 3;2118,2459,2460;, + 3;2114,2118,2117;, + 3;2114,2117,4316;, + 3;4316,2117,4319;, + 3;2118,2114,2113;, + 3;2119,4320,4321;, + 3;2119,2139,4320;, + 3;2120,2702,2119;, + 3;2120,2701,2702;, + 3;2121,2210,2120;, + 3;2121,2209,2210;, + 3;4322,2396,2121;, + 3;4322,4323,2396;, + 3;1755,2411,2122;, + 3;1755,1787,2411;, + 3;2123,1813,1755;, + 3;2123,2427,1813;, + 3;2124,2387,2123;, + 3;2124,2386,2387;, + 3;1755,2124,2123;, + 3;4324,2119,4321;, + 3;4324,2120,2119;, + 3;4324,2121,2120;, + 3;4324,4322,2121;, + 3;2125,4325,4326;, + 3;2125,2706,4325;, + 3;2126,2157,2125;, + 3;2126,2156,2157;, + 3;2127,2435,2126;, + 3;2127,2434,2435;, + 3;2128,2768,2127;, + 3;2128,2767,2768;, + 3;2129,2720,2128;, + 3;2129,2725,2720;, + 3;2130,2213,2129;, + 3;2130,2212,2213;, + 3;4327,2203,2130;, + 3;2131,2202,4328;, + 3;2132,2712,2131;, + 3;2132,2711,2712;, + 3;4326,2127,2126;, + 3;4326,2126,2125;, + 3;2127,4326,4327;, + 3;2127,4327,2128;, + 3;2128,4327,2130;, + 3;2128,2130,2129;, + 3;2133,4329,4320;, + 3;2133,2390,4329;, + 3;2134,2382,2133;, + 3;2134,2381,2382;, + 3;2135,2357,2134;, + 3;2135,2360,2357;, + 3;2136,2537,2135;, + 3;2136,2543,2537;, + 3;2137,2717,2136;, + 3;2137,2716,2717;, + 3;2138,2708,2137;, + 3;2138,2714,2708;, + 3;2139,2698,2138;, + 3;2139,2702,2698;, + 3;2134,2133,2135;, + 3;2135,2133,4320;, + 3;2135,4320,2136;, + 3;2136,4320,2139;, + 3;2136,2139,2137;, + 3;2137,2139,2138;, + 3;2141,2425,2146;, + 3;2141,2424,2425;, + 3;2141,4146,2318;, + 3;4330,1760,1777;, + 3;2142,1762,1760;, + 3;2142,2291,1762;, + 3;2143,2430,2142;, + 3;2143,2429,2430;, + 3;2144,2159,2143;, + 3;2144,2158,2159;, + 3;2145,2705,2144;, + 3;2145,2704,2705;, + 3;2146,2331,4331;, + 3;2146,2330,2331;, + 3;1760,2143,2142;, + 3;1760,2144,2143;, + 3;1760,2145,2144;, + 3;1760,4330,2145;, + 3;2145,4330,4153;, + 3;2147,4332,4333;, + 3;2147,2320,4332;, + 3;2148,2342,2147;, + 3;2148,2341,2342;, + 3;2149,2363,2148;, + 3;2149,2369,2363;, + 3;4333,2361,2149;, + 3;4333,4173,2361;, + 3;4333,2148,2147;, + 3;4333,2149,2148;, + 3;2150,2429,2159;, + 3;2150,2428,2429;, + 3;2151,2465,2150;, + 3;2151,2464,2465;, + 3;2152,4334,4335;, + 3;2152,2489,4334;, + 3;2153,2456,2152;, + 3;2153,2455,2456;, + 3;4336,2500,2153;, + 3;4336,4337,2500;, + 3;2155,2474,2154;, + 3;2155,2473,2474;, + 3;2156,2436,2155;, + 3;2156,2435,2436;, + 3;2158,2706,2157;, + 3;2158,2705,2706;, + 3;2158,2154,4338;, + 3;2158,4338,4339;, + 3;2158,4339,2151;, + 3;2158,2151,2150;, + 3;2158,2150,2159;, + 3;2154,2158,2155;, + 3;2155,2158,2157;, + 3;2155,2157,2156;, + 3;2160,2726,2169;, + 3;2160,2732,2726;, + 3;2161,2738,2160;, + 3;2161,2737,2738;, + 3;2162,2741,2161;, + 3;2162,2740,2741;, + 3;2163,2283,2162;, + 3;2163,2287,2283;, + 3;2164,2231,2163;, + 3;2164,2230,2231;, + 3;2165,2249,2164;, + 3;2165,2248,2249;, + 3;2166,2243,2165;, + 3;2166,2242,2243;, + 3;2167,2236,2166;, + 3;2167,2235,2236;, + 3;2168,2754,2235;, + 3;2168,2758,2754;, + 3;2169,2749,2168;, + 3;2169,2753,2749;, + 3;2167,2165,2164;, + 3;2167,2164,2163;, + 3;2167,2163,2168;, + 3;2168,2163,2162;, + 3;2168,2162,2169;, + 3;2169,2162,2161;, + 3;2169,2161,2160;, + 3;2165,2167,2166;, + 3;2170,2239,2176;, + 3;2170,2238,2239;, + 3;2171,2259,2170;, + 3;2171,2258,2259;, + 3;2172,2255,2171;, + 3;2172,2254,2255;, + 3;2175,2197,2174;, + 3;2175,2196,2197;, + 3;2176,2185,2175;, + 3;2176,2184,2185;, + 3;2171,2176,2172;, + 3;2172,2176,2174;, + 3;2172,2174,2173;, + 3;2174,2176,2175;, + 3;2176,2171,2170;, + 3;2177,2183,2182;, + 3;2177,2187,2183;, + 3;2179,2189,2178;, + 3;2179,2188,2189;, + 3;2180,2205,2179;, + 3;2180,2204,2205;, + 3;2181,2724,2180;, + 3;2181,2723,2724;, + 3;2182,2232,2181;, + 3;2182,2240,2232;, + 3;2179,2178,2180;, + 3;2180,2178,2177;, + 3;2180,2177,2182;, + 3;2180,2182,2181;, + 3;2184,2240,2183;, + 3;2184,2239,2240;, + 3;2186,2196,2185;, + 3;2186,2195,2196;, + 3;2185,2187,2186;, + 3;2187,2185,2183;, + 3;2183,2185,2184;, + 3;2188,2206,2193;, + 3;2188,2205,2206;, + 3;2193,2458,2192;, + 3;2193,2457,2458;, + 3;2189,2193,2192;, + 3;2189,2192,2190;, + 3;2190,2192,2191;, + 3;2193,2189,2188;, + 3;2199,2195,2194;, + 3;2195,2199,2198;, + 3;2195,2198,2197;, + 3;2195,2197,2196;, + 3;2200,2211,4328;, + 3;2203,4340,2212;, + 3;2201,2700,2200;, + 3;2201,2699,2700;, + 3;2202,2713,2201;, + 3;2202,2712,2713;, + 3;4328,2201,2200;, + 3;2201,4328,2202;, + 3;2204,2725,2213;, + 3;2204,2724,2725;, + 3;2207,2457,2206;, + 3;2207,2460,2457;, + 3;2209,2391,2208;, + 3;2209,2396,2391;, + 3;2211,2701,2210;, + 3;2211,2700,2701;, + 3;2205,2207,2206;, + 3;2207,2205,2204;, + 3;2207,2204,4318;, + 3;4318,2204,4340;, + 3;2208,2211,2209;, + 3;2209,2211,2210;, + 3;4340,2204,2212;, + 3;2212,2204,2213;, + 3;2216,2222,2215;, + 3;2216,2226,2222;, + 3;2217,2267,2216;, + 3;2217,2266,2267;, + 3;2218,2265,2217;, + 3;2218,2264,2265;, + 3;2219,2228,2218;, + 3;2219,2227,2228;, + 3;2220,2286,2219;, + 3;2220,2285,2286;, + 3;2218,2216,2219;, + 3;2219,2216,2220;, + 3;2220,2216,2215;, + 3;2220,2215,2221;, + 3;2221,2215,2214;, + 3;2216,2218,2217;, + 3;2225,2272,2224;, + 3;2225,2271,2272;, + 3;2226,2268,2225;, + 3;2226,2267,2268;, + 3;2222,2226,2225;, + 3;2222,2225,2224;, + 3;2222,2224,2223;, + 3;2227,2287,2231;, + 3;2227,2286,2287;, + 3;2229,2264,2228;, + 3;2229,2263,2264;, + 3;2230,2250,2229;, + 3;2230,2249,2250;, + 3;2227,2231,2228;, + 3;2228,2231,2229;, + 3;2229,2231,2230;, + 3;2233,2723,2232;, + 3;2233,2722,2723;, + 3;2234,2761,2233;, + 3;2234,2760,2761;, + 3;2235,2754,2234;, + 3;2234,2754,2755;, + 3;2237,2242,2236;, + 3;2237,2241,2242;, + 3;2238,2260,2237;, + 3;2238,2259,2260;, + 3;2237,2236,2238;, + 3;2238,2236,2235;, + 3;2238,2235,2239;, + 3;2239,2235,2234;, + 3;2239,2234,2232;, + 3;2239,2232,2240;, + 3;2232,2234,2233;, + 3;2241,2256,2245;, + 3;2241,2260,2256;, + 3;2244,2248,2243;, + 3;2244,2247,2248;, + 3;2245,2276,2244;, + 3;2245,2282,2276;, + 3;2242,2241,2243;, + 3;2243,2241,2244;, + 3;2244,2241,2245;, + 3;2246,2263,2250;, + 3;2246,2262,2263;, + 3;2247,2277,2246;, + 3;2247,2276,2277;, + 3;2246,2250,2247;, + 3;2247,2250,2249;, + 3;2247,2249,2248;, + 3;2251,2258,2255;, + 3;2251,2257,2258;, + 3;2252,2281,2251;, + 3;2252,2280,2281;, + 3;2253,2274,2252;, + 3;2253,2273,2274;, + 3;2255,2252,2251;, + 3;2252,2255,2254;, + 3;2252,2254,2253;, + 3;2257,2282,2256;, + 3;2257,2281,2282;, + 3;2257,2259,2258;, + 3;2259,2257,2256;, + 3;2259,2256,2260;, + 3;2261,2266,2265;, + 3;2261,2270,2266;, + 3;2262,2278,2261;, + 3;2262,2277,2278;, + 3;2265,2263,2262;, + 3;2265,2262,2261;, + 3;2263,2265,2264;, + 3;2269,2271,2268;, + 3;2269,2275,2271;, + 3;2270,2279,2269;, + 3;2270,2278,2279;, + 3;2270,2269,2268;, + 3;2270,2268,2266;, + 3;2266,2268,2267;, + 3;2275,2280,2274;, + 3;2275,2279,2280;, + 3;2275,2273,2271;, + 3;2271,2273,2272;, + 3;2273,2275,2274;, + 3;2279,2278,2280;, + 3;2280,2278,2282;, + 3;2280,2282,2281;, + 3;2282,2278,2276;, + 3;2276,2278,2277;, + 3;2284,2740,2283;, + 3;2284,2739,2740;, + 3;2286,2283,2287;, + 3;2283,2286,2285;, + 3;2283,2285,2284;, + 3;2288,1883,1762;, + 3;2288,2748,1883;, + 3;2289,2450,2288;, + 3;2289,2449,2450;, + 3;2290,2297,2289;, + 3;2290,2300,2297;, + 3;2291,2431,2290;, + 3;2291,2430,2431;, + 3;1762,2289,2288;, + 3;1762,2290,2289;, + 3;1762,2291,2290;, + 3;2292,2501,2296;, + 3;2292,2506,2501;, + 3;2293,2453,2292;, + 3;2293,2452,2453;, + 3;2294,2491,2293;, + 3;2294,2490,2491;, + 3;2295,2317,2294;, + 3;2295,2316,2317;, + 3;2296,2482,2295;, + 3;2296,2485,2482;, + 3;2293,2296,2294;, + 3;2294,2296,2295;, + 3;2296,2293,2292;, + 3;2298,2449,2297;, + 3;2298,2448,2449;, + 3;2299,2467,2298;, + 3;2299,2466,2467;, + 3;2300,2432,2299;, + 3;2300,2431,2432;, + 3;2297,2299,2298;, + 3;2299,2297,2300;, + 3;2301,2472,2308;, + 3;2301,2476,2472;, + 3;2302,2478,2301;, + 3;2302,2477,2478;, + 3;2303,2444,2302;, + 3;2303,2443,2444;, + 3;2304,2314,2303;, + 3;2304,2313,2314;, + 3;2305,2751,2304;, + 3;2305,2750,2751;, + 3;2306,2757,2305;, + 3;2306,2756,2757;, + 3;2307,2759,2306;, + 3;2307,2764,2759;, + 3;2308,2438,2307;, + 3;2308,2437,2438;, + 3;2306,2302,2307;, + 3;2307,2302,2301;, + 3;2307,2301,2308;, + 3;2302,2306,2305;, + 3;2302,2305,2304;, + 3;2302,2304,2303;, + 3;4341,2490,2317;, + 3;4341,4342,2490;, + 3;2310,2469,2309;, + 3;2310,2468,2469;, + 3;2311,2447,2310;, + 3;2311,2446,2447;, + 3;2312,2728,2311;, + 3;2312,2727,2728;, + 3;2313,2752,2312;, + 3;2313,2751,2752;, + 3;2315,2443,2314;, + 3;2315,2442,2443;, + 3;4343,2483,2315;, + 3;2316,2482,4344;, + 3;2312,2315,2314;, + 3;2312,2314,2313;, + 3;2315,2312,2311;, + 3;2315,2311,4343;, + 3;4343,2311,2310;, + 3;2316,4345,2317;, + 3;2317,4345,4341;, + 3;4146,2424,2318;, + 3;4146,4346,2424;, + 3;2319,2544,2326;, + 3;2319,2549,2544;, + 3;2320,2343,2319;, + 3;2320,2342,2343;, + 3;2321,4347,4332;, + 3;2321,2334,4347;, + 3;2322,2719,2321;, + 3;2322,2718,2719;, + 3;2323,2542,2322;, + 3;2323,2541,2542;, + 3;2324,2569,2323;, + 3;2324,2568,2569;, + 3;2325,2563,2324;, + 3;2325,2562,2563;, + 3;2326,2556,2325;, + 3;2326,2561,2556;, + 3;4332,2322,2321;, + 3;4332,2323,2322;, + 3;4332,2324,2323;, + 3;4332,2325,2324;, + 3;4332,2326,2325;, + 3;4332,2319,2326;, + 3;4332,2320,2319;, + 3;4175,2335,2329;, + 3;4175,4348,2335;, + 3;2327,4173,4175;, + 3;2327,2362,4173;, + 3;2328,2368,2327;, + 3;2328,2367,2368;, + 3;2329,2353,2328;, + 3;2329,2352,2353;, + 3;4175,2328,2327;, + 3;4175,2329,2328;, + 3;2330,4346,4347;, + 3;2330,2425,4346;, + 3;2332,4331,2331;, + 3;2332,2703,4331;, + 3;2333,2710,2332;, + 3;2333,2709,2710;, + 3;2334,2715,2333;, + 3;2334,2719,2715;, + 3;4347,2331,2330;, + 3;4347,2332,2331;, + 3;4347,2333,2332;, + 3;4347,2334,2333;, + 3;2336,2352,2335;, + 3;2336,2351,2352;, + 3;2337,2350,2336;, + 3;2337,2349,2350;, + 3;2338,2375,2337;, + 3;2338,2379,2375;, + 3;4348,2388,2338;, + 3;4348,4349,2388;, + 3;4348,2336,2335;, + 3;4348,2337,2336;, + 3;4348,2338,2337;, + 3;2339,2549,2343;, + 3;2339,2548,2549;, + 3;2340,2551,2339;, + 3;2340,2550,2551;, + 3;2341,2364,2340;, + 3;2341,2363,2364;, + 3;2341,2340,2339;, + 3;2341,2339,2342;, + 3;2342,2339,2343;, + 3;2344,2351,2350;, + 3;2344,2356,2351;, + 3;2345,2518,2344;, + 3;2345,2517,2518;, + 3;2346,2519,2345;, + 3;2346,2523,2519;, + 3;2347,2524,2346;, + 3;2347,2530,2524;, + 3;2348,2373,2347;, + 3;2348,2372,2373;, + 3;2349,2376,2348;, + 3;2349,2375,2376;, + 3;2349,2346,2345;, + 3;2349,2345,2350;, + 3;2350,2345,2344;, + 3;2346,2349,2348;, + 3;2346,2348,2347;, + 3;2354,2367,2353;, + 3;2354,2366,2367;, + 3;2355,2507,2354;, + 3;2355,2512,2507;, + 3;2356,2513,2355;, + 3;2356,2518,2513;, + 3;2353,2355,2354;, + 3;2355,2353,2356;, + 3;2356,2353,2352;, + 3;2356,2352,2351;, + 3;2358,2381,2357;, + 3;2358,2380,2381;, + 3;2359,2535,2358;, + 3;2359,2534,2535;, + 3;2360,2538,2359;, + 3;2360,2537,2538;, + 3;2357,2360,2358;, + 3;2358,2360,2359;, + 3;2362,2369,2361;, + 3;2362,2368,2369;, + 3;4173,2362,2361;, + 3;2365,2550,2364;, + 3;2365,2555,2550;, + 3;2366,2508,2365;, + 3;2366,2507,2508;, + 3;2365,2364,2366;, + 3;2366,2364,2369;, + 3;2366,2369,2368;, + 3;2366,2368,2367;, + 3;2369,2364,2363;, + 3;2370,2531,2374;, + 3;2370,2536,2531;, + 3;2371,2385,2370;, + 3;2371,2384,2385;, + 3;2372,2377,2371;, + 3;2372,2376,2377;, + 3;2374,2530,2373;, + 3;2374,2529,2530;, + 3;2374,2373,2372;, + 3;2374,2372,2371;, + 3;2374,2371,2370;, + 3;2378,2384,2377;, + 3;2378,2383,2384;, + 3;2379,2389,2378;, + 3;2379,2388,2389;, + 3;2379,2376,2375;, + 3;2376,2379,2377;, + 3;2377,2379,2378;, + 3;2380,2536,2385;, + 3;2380,2535,2536;, + 3;2383,2390,2382;, + 3;2383,2389,2390;, + 3;2382,2380,2385;, + 3;2382,2385,2383;, + 3;2383,2385,2384;, + 3;2380,2382,2381;, + 3;4350,2427,2387;, + 3;4350,1813,2427;, + 3;4349,2389,2388;, + 3;4349,2390,2389;, + 3;4349,4329,2390;, + 3;4350,2387,2386;, + 3;2393,2397,2392;, + 3;2393,2401,2397;, + 3;2395,2412,2394;, + 3;2395,2411,2412;, + 3;4302,2396,4323;, + 3;2396,4302,2393;, + 3;2396,2393,2391;, + 3;2391,2393,2392;, + 3;4317,2397,4313;, + 3;4313,2397,2400;, + 3;2400,2397,2401;, + 3;2402,2410,2405;, + 3;2402,2409,2410;, + 3;2403,2414,2402;, + 3;2403,2413,2414;, + 3;2404,2418,2403;, + 3;2404,2417,2418;, + 3;4351,2419,2404;, + 3;4351,4306,2419;, + 3;4352,4207,4204;, + 3;4352,4353,4207;, + 3;4351,2402,2405;, + 3;4351,2403,2402;, + 3;4351,2404,2403;, + 3;2408,2423,2407;, + 3;2408,2422,2423;, + 3;4354,2415,2408;, + 3;4354,4355,2415;, + 3;4356,4357,4358;, + 3;1787,1813,4359;, + 3;1787,2412,2411;, + 3;1787,4300,2412;, + 3;4356,2407,2406;, + 3;4356,2408,2407;, + 3;4356,4354,2408;, + 3;4356,4358,4354;, + 3;2413,4311,4360;, + 3;2413,2418,4311;, + 3;88,2422,2415;, + 3;88,21,2422;, + 3;4360,2414,2413;, + 3;88,2415,4355;, + 3;2417,2420,2416;, + 3;2417,2419,2420;, + 3;4311,2418,2416;, + 3;2416,2418,2417;, + 3;4306,2420,2419;, + 3;4306,2421,2420;, + 3;21,2423,2422;, + 3;4346,2425,2424;, + 3;2428,2461,2433;, + 3;2428,2465,2461;, + 3;2433,2466,2432;, + 3;2433,2471,2466;, + 3;2429,2428,2430;, + 3;2430,2428,2433;, + 3;2430,2433,2431;, + 3;2431,2433,2432;, + 3;2434,2765,2439;, + 3;2434,2768,2765;, + 3;2437,2473,2436;, + 3;2437,2472,2473;, + 3;2439,2764,2438;, + 3;2439,2763,2764;, + 3;2436,2435,2437;, + 3;2437,2435,2434;, + 3;2437,2434,2439;, + 3;2437,2439,2438;, + 3;2440,2477,2444;, + 3;2440,2481,2477;, + 3;2441,2503,2440;, + 3;2441,2502,2503;, + 3;2442,2484,2441;, + 3;2442,2483,2484;, + 3;2442,2441,2443;, + 3;2443,2441,2444;, + 3;2444,2441,2440;, + 3;2445,2748,2450;, + 3;2445,2747,2748;, + 3;2446,2729,2445;, + 3;2446,2728,2729;, + 3;2448,2468,2447;, + 3;2448,2467,2468;, + 3;2446,2445,2447;, + 3;2447,2445,2448;, + 3;2448,2445,2449;, + 3;2449,2445,2450;, + 3;2451,2489,2456;, + 3;2451,2488,2489;, + 3;2452,2492,2451;, + 3;2452,2491,2492;, + 3;2454,2506,2453;, + 3;2454,2505,2506;, + 3;2455,2496,2454;, + 3;2455,2500,2496;, + 3;2456,2454,2451;, + 3;2451,2454,2453;, + 3;2451,2453,2452;, + 3;2454,2456,2455;, + 3;2460,2458,2457;, + 3;2458,2460,2459;, + 3;2462,2471,2461;, + 3;2462,2470,2471;, + 3;2463,2494,2462;, + 3;2463,2493,2494;, + 3;2464,2487,2463;, + 3;2464,2486,2487;, + 3;2465,2463,2461;, + 3;2461,2463,2462;, + 3;2463,2465,2464;, + 3;2470,2495,2469;, + 3;2470,2494,2495;, + 3;2467,2469,2468;, + 3;2469,2467,2470;, + 3;2470,2467,2466;, + 3;2470,2466,2471;, + 3;2475,2499,2474;, + 3;2475,2498,2499;, + 3;2476,2479,2475;, + 3;2476,2478,2479;, + 3;2474,2473,2475;, + 3;2475,2473,2472;, + 3;2475,2472,2476;, + 3;2480,2498,2479;, + 3;2480,2497,2498;, + 3;2481,2504,2480;, + 3;2481,2503,2504;, + 3;2478,2480,2479;, + 3;2480,2478,2481;, + 3;2481,2478,2477;, + 3;2485,4361,4362;, + 3;2485,2501,4361;, + 3;2482,4362,4344;, + 3;4362,2482,2485;, + 3;2488,4363,4364;, + 3;2488,2492,4363;, + 3;4334,2489,2488;, + 3;4334,2488,4364;, + 3;4342,4365,2490;, + 3;2490,4365,2491;, + 3;2491,4365,4363;, + 3;2491,4363,2492;, + 3;4366,2505,2496;, + 3;4366,4367,2505;, + 3;4337,4368,2500;, + 3;2500,4368,2496;, + 3;2496,4368,4366;, + 3;4369,2506,4367;, + 3;4367,2506,2505;, + 3;2506,4369,2501;, + 3;2501,4369,4361;, + 3;2509,2555,2508;, + 3;2509,2554,2555;, + 3;2510,2627,2509;, + 3;2510,2626,2627;, + 3;2511,2597,2510;, + 3;2511,2596,2597;, + 3;2512,2514,2511;, + 3;2512,2513,2514;, + 3;2510,2508,2511;, + 3;2511,2508,2507;, + 3;2511,2507,2512;, + 3;2508,2510,2509;, + 3;2515,2596,2514;, + 3;2515,2595,2596;, + 3;2516,2605,2515;, + 3;2516,2604,2605;, + 3;2517,2520,2516;, + 3;2517,2519,2520;, + 3;2516,2513,2518;, + 3;2516,2518,2517;, + 3;2513,2516,2515;, + 3;2513,2515,2514;, + 3;2521,2604,2520;, + 3;2521,2603,2604;, + 3;2522,2609,2521;, + 3;2522,2608,2609;, + 3;2523,2525,2522;, + 3;2523,2524,2525;, + 3;2519,2522,2521;, + 3;2519,2521,2520;, + 3;2522,2519,2523;, + 3;2526,2608,2525;, + 3;2526,2607,2608;, + 3;2527,2619,2526;, + 3;2527,2618,2619;, + 3;2528,2575,2527;, + 3;2528,2574,2575;, + 3;2529,2532,2528;, + 3;2529,2531,2532;, + 3;2527,2526,2528;, + 3;2528,2526,2529;, + 3;2529,2526,2530;, + 3;2530,2526,2525;, + 3;2530,2525,2524;, + 3;2533,2574,2532;, + 3;2533,2580,2574;, + 3;2534,2539,2533;, + 3;2534,2538,2539;, + 3;2536,2534,2531;, + 3;2531,2534,2532;, + 3;2532,2534,2533;, + 3;2534,2536,2535;, + 3;2540,2580,2539;, + 3;2540,2579,2580;, + 3;2541,2570,2540;, + 3;2541,2569,2570;, + 3;2543,2718,2542;, + 3;2543,2717,2718;, + 3;2543,2539,2538;, + 3;2543,2538,2537;, + 3;2539,2543,2540;, + 3;2540,2543,2542;, + 3;2540,2542,2541;, + 3;2545,2561,2544;, + 3;2545,2560,2561;, + 3;2546,2632,2545;, + 3;2546,2631,2632;, + 3;2547,2624,2546;, + 3;2547,2623,2624;, + 3;2548,2552,2547;, + 3;2548,2551,2552;, + 3;2546,2544,2549;, + 3;2546,2549,2547;, + 3;2547,2549,2548;, + 3;2544,2546,2545;, + 3;2553,2623,2552;, + 3;2553,2622,2623;, + 3;2554,2628,2553;, + 3;2554,2627,2628;, + 3;2554,2550,2555;, + 3;2550,2554,2551;, + 3;2551,2554,2553;, + 3;2551,2553,2552;, + 3;2557,2562,2556;, + 3;2557,2567,2562;, + 3;2558,2583,2557;, + 3;2558,2582,2583;, + 3;2559,2592,2558;, + 3;2559,2591,2592;, + 3;2560,2633,2559;, + 3;2560,2632,2633;, + 3;2560,2559,2557;, + 3;2560,2557,2556;, + 3;2560,2556,2561;, + 3;2557,2559,2558;, + 3;2564,2568,2563;, + 3;2564,2573,2568;, + 3;2565,2645,2564;, + 3;2565,2644,2645;, + 3;2566,2639,2565;, + 3;2566,2638,2639;, + 3;2567,2584,2566;, + 3;2567,2583,2584;, + 3;2565,2567,2566;, + 3;2567,2565,2564;, + 3;2567,2564,2562;, + 3;2562,2564,2563;, + 3;2571,2579,2570;, + 3;2571,2578,2579;, + 3;2572,2667,2571;, + 3;2572,2666,2667;, + 3;2573,2640,2572;, + 3;2573,2645,2640;, + 3;2572,2568,2573;, + 3;2568,2572,2569;, + 3;2569,2572,2571;, + 3;2569,2571,2570;, + 3;2576,2618,2575;, + 3;2576,2617,2618;, + 3;2577,2648,2576;, + 3;2577,2647,2648;, + 3;2578,2661,2577;, + 3;2578,2667,2661;, + 3;2576,2580,2577;, + 3;2577,2580,2579;, + 3;2577,2579,2578;, + 3;2580,2576,2574;, + 3;2574,2576,2575;, + 3;2581,2612,2589;, + 3;2581,2611,2612;, + 3;2582,2593,2581;, + 3;2582,2592,2593;, + 3;2585,2638,2584;, + 3;2585,2637,2638;, + 3;2586,2673,2585;, + 3;2586,2672,2673;, + 3;2587,2670,2586;, + 3;2587,2669,2670;, + 3;2588,2651,2587;, + 3;2588,2650,2651;, + 3;2589,2614,2588;, + 3;2589,2613,2614;, + 3;2584,2587,2585;, + 3;2585,2587,2586;, + 3;2587,2584,2582;, + 3;2587,2582,2581;, + 3;2587,2581,2588;, + 3;2588,2581,2589;, + 3;2582,2584,2583;, + 3;2590,2602,2594;, + 3;2590,2601,2602;, + 3;2591,2634,2590;, + 3;2591,2633,2634;, + 3;2594,2611,2593;, + 3;2594,2610,2611;, + 3;2592,2591,2593;, + 3;2593,2591,2590;, + 3;2593,2590,2594;, + 3;2595,2606,2599;, + 3;2595,2605,2606;, + 3;2598,2626,2597;, + 3;2598,2629,2626;, + 3;2599,2621,2598;, + 3;2599,2620,2621;, + 3;2597,2596,2598;, + 3;2598,2596,2599;, + 3;2599,2596,2595;, + 3;2600,2620,2606;, + 3;2600,2625,2620;, + 3;2601,2630,2600;, + 3;2601,2634,2630;, + 3;2603,2610,2602;, + 3;2603,2609,2610;, + 3;2604,2602,2605;, + 3;2605,2602,2601;, + 3;2605,2601,2606;, + 3;2606,2601,2600;, + 3;2602,2604,2603;, + 3;2607,2613,2612;, + 3;2607,2619,2613;, + 3;2609,2608,2610;, + 3;2610,2608,2612;, + 3;2610,2612,2611;, + 3;2612,2608,2607;, + 3;2615,2650,2614;, + 3;2615,2654,2650;, + 3;2616,2656,2615;, + 3;2616,2655,2656;, + 3;2617,2649,2616;, + 3;2617,2648,2649;, + 3;2618,2616,2619;, + 3;2619,2616,2615;, + 3;2619,2615,2614;, + 3;2619,2614,2613;, + 3;2616,2618,2617;, + 3;2622,2629,2621;, + 3;2622,2628,2629;, + 3;2625,2631,2624;, + 3;2625,2630,2631;, + 3;2624,2623,2625;, + 3;2625,2623,2621;, + 3;2625,2621,2620;, + 3;2621,2623,2622;, + 3;2627,2626,2628;, + 3;2628,2626,2629;, + 3;2633,2632,2631;, + 3;2633,2631,2630;, + 3;2633,2630,2634;, + 3;2635,2644,2639;, + 3;2635,2643,2644;, + 3;2636,2678,2635;, + 3;2636,2677,2678;, + 3;2637,2674,2636;, + 3;2637,2673,2674;, + 3;2638,2637,2639;, + 3;2639,2637,2635;, + 3;2635,2637,2636;, + 3;2641,2666,2640;, + 3;2641,2665,2666;, + 3;2642,2695,2641;, + 3;2642,2694,2695;, + 3;2643,2679,2642;, + 3;2643,2678,2679;, + 3;2640,2645,2644;, + 3;2640,2644,2643;, + 3;2640,2643,2641;, + 3;2641,2643,2642;, + 3;2646,2655,2649;, + 3;2646,2660,2655;, + 3;2647,2662,2646;, + 3;2647,2661,2662;, + 3;2648,2647,2649;, + 3;2649,2647,2646;, + 3;2652,2669,2651;, + 3;2652,2668,2669;, + 3;2653,2688,2652;, + 3;2653,2687,2688;, + 3;2654,2657,2653;, + 3;2654,2656,2657;, + 3;2650,2654,2653;, + 3;2650,2653,2651;, + 3;2651,2653,2652;, + 3;2658,2687,2657;, + 3;2658,2686,2687;, + 3;2659,2693,2658;, + 3;2659,2692,2693;, + 3;2660,2663,2659;, + 3;2660,2662,2663;, + 3;2656,2659,2657;, + 3;2657,2659,2658;, + 3;2659,2656,2660;, + 3;2660,2656,2655;, + 3;2664,2692,2663;, + 3;2664,2691,2692;, + 3;2665,2696,2664;, + 3;2665,2695,2696;, + 3;2662,2666,2665;, + 3;2662,2665,2663;, + 3;2663,2665,2664;, + 3;2666,2662,2667;, + 3;2667,2662,2661;, + 3;2668,2683,2671;, + 3;2668,2688,2683;, + 3;2671,2672,2670;, + 3;2671,2676,2672;, + 3;2671,2670,2668;, + 3;2668,2670,2669;, + 3;2675,2677,2674;, + 3;2675,2682,2677;, + 3;2676,2684,2675;, + 3;2676,2683,2684;, + 3;2675,2674,2676;, + 3;2676,2674,2672;, + 3;2672,2674,2673;, + 3;2680,2694,2679;, + 3;2680,2697,2694;, + 3;2681,2690,2680;, + 3;2681,2689,2690;, + 3;2682,2685,2681;, + 3;2682,2684,2685;, + 3;2680,2679,2681;, + 3;2681,2679,2682;, + 3;2682,2679,2677;, + 3;2677,2679,2678;, + 3;2686,2689,2685;, + 3;2686,2693,2689;, + 3;2685,2683,2688;, + 3;2685,2688,2686;, + 3;2686,2688,2687;, + 3;2683,2685,2684;, + 3;2691,2697,2690;, + 3;2691,2696,2697;, + 3;2689,2693,2690;, + 3;2690,2693,2691;, + 3;2691,2693,2692;, + 3;2697,2696,2694;, + 3;2694,2696,2695;, + 3;2699,2714,2698;, + 3;2699,2713,2714;, + 3;2701,2698,2702;, + 3;2698,2701,2699;, + 3;2699,2701,2700;, + 3;2703,2711,2707;, + 3;2703,2710,2711;, + 3;2704,2706,2705;, + 3;2707,4331,2703;, + 3;2706,2704,4325;, + 3;2709,2716,2708;, + 3;2709,2715,2716;, + 3;2709,2712,2711;, + 3;2709,2711,2710;, + 3;2712,2709,2713;, + 3;2713,2709,2714;, + 3;2714,2709,2708;, + 3;2718,2717,2716;, + 3;2718,2716,2719;, + 3;2719,2716,2715;, + 3;2721,2767,2720;, + 3;2721,2766,2767;, + 3;2722,2761,2721;, + 3;2721,2761,2762;, + 3;2722,2721,2720;, + 3;2722,2720,2725;, + 3;2722,2725,2723;, + 3;2723,2725,2724;, + 3;2727,2753,2726;, + 3;2727,2752,2753;, + 3;2730,2747,2729;, + 3;2730,2746,2747;, + 3;2732,2733,2731;, + 3;2732,2738,2733;, + 3;2728,2731,2729;, + 3;2729,2731,2730;, + 3;2731,2728,2727;, + 3;2731,2727,2732;, + 3;2732,2727,2726;, + 3;2735,3387,2734;, + 3;2735,3386,3387;, + 3;2736,2824,2735;, + 3;2736,2823,2824;, + 3;2737,2742,2736;, + 3;2737,2741,2742;, + 3;2734,2733,2735;, + 3;2735,2733,2738;, + 3;2735,2738,2736;, + 3;2736,2738,2737;, + 3;2743,2823,2742;, + 3;2743,2822,2823;, + 3;2744,2942,2743;, + 3;2744,2941,2942;, + 3;2742,2741,2744;, + 3;2742,2744,2743;, + 3;2744,2741,2739;, + 3;2739,2741,2740;, + 3;1883,2746,2745;, + 3;1883,2747,2746;, + 3;1883,2748,2747;, + 3;2750,2758,2749;, + 3;2750,2757,2758;, + 3;2753,2750,2749;, + 3;2750,2753,2751;, + 3;2751,2753,2752;, + 3;2756,2760,2755;, + 3;2756,2759,2760;, + 3;2757,2755,2758;, + 3;2758,2755,2754;, + 3;2755,2757,2756;, + 3;2763,2766,2762;, + 3;2763,2765,2766;, + 3;2759,2762,2761;, + 3;2759,2761,2760;, + 3;2762,2759,2764;, + 3;2762,2764,2763;, + 3;2765,2767,2766;, + 3;2767,2765,2768;, + 3;2771,3118,2770;, + 3;2771,3117,3118;, + 3;4370,2865,2771;, + 3;4370,4371,2865;, + 3;2773,3053,2772;, + 3;2773,3052,3053;, + 3;2774,3057,4372;, + 3;2773,4373,3058;, + 3;2774,2770,2769;, + 3;2770,2774,2771;, + 3;2771,2774,4372;, + 3;2771,4372,4370;, + 3;2775,3044,2780;, + 3;2775,3048,3044;, + 3;1886,3085,2775;, + 3;1886,1944,3085;, + 3;2776,1918,1886;, + 3;2776,3064,1918;, + 3;2777,4374,4375;, + 3;2777,3054,4374;, + 3;2778,2863,2777;, + 3;2778,2862,2863;, + 3;2779,3359,2778;, + 3;2779,3358,3359;, + 3;4376,2789,2779;, + 3;4376,4377,2789;, + 3;4378,2777,4375;, + 3;4378,2778,2777;, + 3;4378,2779,2778;, + 3;4378,4376,2779;, + 3;1886,2775,2780;, + 3;2781,3369,2788;, + 3;2781,3368,3369;, + 3;2782,2857,4379;, + 3;2781,4380,2858;, + 3;2783,2860,2782;, + 3;2783,2869,2860;, + 3;2784,3384,2783;, + 3;2784,3383,3384;, + 3;2785,3412,2784;, + 3;2785,3415,3412;, + 3;2786,3093,2785;, + 3;2786,3098,3093;, + 3;2787,2808,2786;, + 3;2787,2807,2808;, + 3;4381,3362,2787;, + 3;4381,4382,3362;, + 3;4381,2785,4379;, + 3;4379,2785,2784;, + 3;4379,2784,2782;, + 3;2782,2784,2783;, + 3;2785,4381,2786;, + 3;2786,4381,2787;, + 3;2790,3358,2789;, + 3;2790,3357,3358;, + 3;2791,3373,2790;, + 3;2791,3372,3373;, + 3;2792,3378,2791;, + 3;2792,3377,3378;, + 3;2793,3197,2792;, + 3;2793,3196,3197;, + 3;2794,3017,2793;, + 3;2794,3016,3017;, + 3;2795,3041,2794;, + 3;2795,3040,3041;, + 3;4377,3045,2795;, + 3;4377,4383,3045;, + 3;2794,2793,2795;, + 3;2795,2793,4377;, + 3;4377,2793,2792;, + 3;4377,2792,2789;, + 3;2789,2792,2791;, + 3;2789,2791,2790;, + 3;2797,4384,4385;, + 3;2802,2991,2987;, + 3;2798,4384,2797;, + 3;2798,3363,4384;, + 3;2799,2806,2798;, + 3;2799,2815,2806;, + 3;2800,3090,2799;, + 3;2800,3089,3090;, + 3;1891,2945,2800;, + 3;1891,1893,2945;, + 3;4253,4386,4387;, + 3;4253,2974,4386;, + 3;2802,3082,4253;, + 3;2802,3083,3082;, + 3;1891,4385,2801;, + 3;1891,2797,4385;, + 3;1891,2798,2797;, + 3;1891,2799,2798;, + 3;1891,2800,2799;, + 3;2803,4388,4389;, + 3;2803,3020,4388;, + 3;2804,3022,2803;, + 3;2804,3021,3022;, + 3;2805,2997,2804;, + 3;2805,2996,2997;, + 3;4389,2982,2805;, + 3;4389,4390,2982;, + 3;4389,2804,2803;, + 3;4389,2805,2804;, + 3;2807,3363,2806;, + 3;2807,3362,3363;, + 3;2809,3098,2808;, + 3;2809,3097,3098;, + 3;2810,3135,2809;, + 3;2810,3134,3135;, + 3;2811,4391,4392;, + 3;2811,3159,4391;, + 3;2812,3110,2811;, + 3;2812,3115,3110;, + 3;4393,3148,2812;, + 3;4393,4394,3148;, + 3;2814,3122,2813;, + 3;2814,3121,3122;, + 3;2815,3091,2814;, + 3;2815,3090,3091;, + 3;2806,2810,2809;, + 3;2806,2809,2807;, + 3;2807,2809,2808;, + 3;2810,2806,4395;, + 3;4395,2806,4396;, + 3;4396,2806,2813;, + 3;2813,2806,2814;, + 3;2814,2806,2815;, + 3;2816,3400,2825;, + 3;2816,3399,3400;, + 3;2817,3404,2816;, + 3;2816,3404,3405;, + 3;2818,2892,2817;, + 3;2818,2891,2892;, + 3;2819,2899,2818;, + 3;2819,2898,2899;, + 3;2820,2905,2819;, + 3;2820,2904,2905;, + 3;2821,2883,2820;, + 3;2821,2887,2883;, + 3;2822,2943,2821;, + 3;2822,2942,2943;, + 3;2825,3386,2824;, + 3;2825,3385,3386;, + 3;2817,2819,2818;, + 3;2819,2817,2820;, + 3;2820,2817,2821;, + 3;2821,2817,2816;, + 3;2821,2816,2822;, + 3;2822,2816,2825;, + 3;2822,2825,2823;, + 3;2823,2825,2824;, + 3;2826,2843,2832;, + 3;2826,2842,2843;, + 3;2827,2854,2826;, + 3;2827,2853,2854;, + 3;2830,2909,2829;, + 3;2830,2908,2909;, + 3;2831,2915,2830;, + 3;2831,2914,2915;, + 3;2832,2889,2831;, + 3;2832,2888,2889;, + 3;2830,2829,2832;, + 3;2830,2832,2831;, + 3;2832,2829,2827;, + 3;2832,2827,2826;, + 3;2827,2829,2828;, + 3;2833,2896,2838;, + 3;2833,2895,2896;, + 3;2834,3380,2833;, + 3;2834,3379,3380;, + 3;2835,2868,2834;, + 3;2835,2867,2868;, + 3;2836,2848,2835;, + 3;2836,2847,2848;, + 3;2838,2840,2837;, + 3;2838,2839,2840;, + 3;2835,2834,2836;, + 3;2836,2834,2837;, + 3;2837,2834,2838;, + 3;2838,2834,2833;, + 3;2839,2888,2843;, + 3;2839,2896,2888;, + 3;2842,2855,2841;, + 3;2842,2854,2855;, + 3;2842,2840,2839;, + 3;2842,2839,2843;, + 3;2840,2842,2841;, + 3;2844,3116,2849;, + 3;2844,3119,3116;, + 3;2849,2867,2848;, + 3;2849,2866,2867;, + 3;2847,2849,2848;, + 3;2849,2847,2844;, + 3;2844,2847,2846;, + 3;2844,2846,2845;, + 3;2851,2855,2852;, + 3;2852,2855,2853;, + 3;2853,2855,2854;, + 3;2855,2851,2850;, + 3;2856,3361,2859;, + 3;2856,3360,3361;, + 3;4380,2861,2856;, + 3;2857,2860,4397;, + 3;2859,3368,2858;, + 3;2859,3367,3368;, + 3;4380,2856,2859;, + 3;4380,2859,2858;, + 3;2862,3360,2861;, + 3;2862,3359,3360;, + 3;2864,3054,2863;, + 3;2864,3053,3054;, + 3;2866,3117,2865;, + 3;2866,3116,3117;, + 3;2869,3379,2868;, + 3;2869,3384,3379;, + 3;2867,2866,2865;, + 3;2867,2865,2868;, + 3;2868,2865,4371;, + 3;2868,4371,4397;, + 3;2868,4397,2860;, + 3;2868,2860,2869;, + 3;2861,2864,2863;, + 3;2861,2863,2862;, + 3;2873,2940,2872;, + 3;2873,2939,2940;, + 3;2874,2886,2873;, + 3;2874,2885,2886;, + 3;2875,2919,2874;, + 3;2875,2918,2919;, + 3;2876,2925,2875;, + 3;2876,2924,2925;, + 3;2877,2879,2876;, + 3;2877,2878,2879;, + 3;2874,2876,2875;, + 3;2876,2874,2873;, + 3;2876,2873,2872;, + 3;2876,2872,2877;, + 3;2877,2872,2871;, + 3;2877,2871,2870;, + 3;2880,2924,2879;, + 3;2880,2923,2924;, + 3;2881,2930,2880;, + 3;2881,2929,2930;, + 3;2878,2880,2879;, + 3;2880,2878,2881;, + 3;2881,2878,2882;, + 3;2884,2904,2883;, + 3;2884,2903,2904;, + 3;2885,2920,2884;, + 3;2885,2919,2920;, + 3;2887,2939,2886;, + 3;2887,2943,2939;, + 3;2886,2885,2887;, + 3;2887,2885,2884;, + 3;2887,2884,2883;, + 3;2890,2914,2889;, + 3;2890,2913,2914;, + 3;2891,2900,2890;, + 3;2891,2899,2900;, + 3;2893,3404,2817;, + 3;2893,3403,3404;, + 3;2894,3409,2893;, + 3;2894,3408,3409;, + 3;2895,3381,2894;, + 3;2895,3380,3381;, + 3;2890,2889,2891;, + 3;2891,2889,2892;, + 3;2892,2889,2888;, + 3;2892,2888,2893;, + 3;2893,2888,2895;, + 3;2893,2895,2894;, + 3;2895,2888,2896;, + 3;2897,2938,2901;, + 3;2897,2937,2938;, + 3;2898,2906,2897;, + 3;2898,2905,2906;, + 3;2901,2913,2900;, + 3;2901,2912,2913;, + 3;2899,2898,2900;, + 3;2900,2898,2897;, + 3;2900,2897,2901;, + 3;2902,2937,2906;, + 3;2902,2936,2937;, + 3;2903,2921,2902;, + 3;2903,2920,2921;, + 3;2902,2906,2903;, + 3;2903,2906,2904;, + 3;2904,2906,2905;, + 3;2907,2933,2911;, + 3;2907,2932,2933;, + 3;2908,2916,2907;, + 3;2908,2915,2916;, + 3;2911,2928,2910;, + 3;2911,2927,2928;, + 3;2908,2907,2911;, + 3;2908,2911,2909;, + 3;2909,2911,2910;, + 3;2912,2932,2916;, + 3;2912,2938,2932;, + 3;2916,2914,2912;, + 3;2912,2914,2913;, + 3;2914,2916,2915;, + 3;2917,2936,2921;, + 3;2917,2935,2936;, + 3;2918,2926,2917;, + 3;2918,2925,2926;, + 3;2918,2920,2919;, + 3;2920,2918,2921;, + 3;2921,2918,2917;, + 3;2922,2935,2926;, + 3;2922,2934,2935;, + 3;2923,2931,2922;, + 3;2923,2930,2931;, + 3;2926,2923,2922;, + 3;2923,2926,2925;, + 3;2923,2925,2924;, + 3;2927,2934,2931;, + 3;2927,2933,2934;, + 3;2931,2928,2927;, + 3;2928,2931,2930;, + 3;2928,2930,2929;, + 3;2934,2933,2935;, + 3;2935,2933,2938;, + 3;2935,2938,2937;, + 3;2935,2937,2936;, + 3;2938,2933,2932;, + 3;2939,2943,2942;, + 3;2939,2942,2940;, + 3;2940,2942,2941;, + 3;2944,3104,2947;, + 3;2944,3109,3104;, + 3;1893,3395,2944;, + 3;1893,2014,3395;, + 3;2946,3089,2945;, + 3;2946,3088,3089;, + 3;2947,2954,2946;, + 3;2947,2953,2954;, + 3;1893,2946,2945;, + 3;1893,2947,2946;, + 3;1893,2944,2947;, + 3;2948,3144,2952;, + 3;2948,3143,3144;, + 3;2949,2967,2948;, + 3;2949,2966,2967;, + 3;2950,3153,2949;, + 3;2950,3152,3153;, + 3;2951,3113,2950;, + 3;2951,3112,3113;, + 3;2952,3161,2951;, + 3;2952,3160,3161;, + 3;2950,2952,2951;, + 3;2952,2950,2949;, + 3;2952,2949,2948;, + 3;2953,3105,2956;, + 3;2953,3104,3105;, + 3;2955,3088,2954;, + 3;2955,3087,3088;, + 3;2956,3129,2955;, + 3;2956,3128,3129;, + 3;2953,2956,2955;, + 3;2953,2955,2954;, + 3;2957,3096,2964;, + 3;2957,3095,3096;, + 3;2958,3411,2957;, + 3;2958,3410,3411;, + 3;2959,3402,2958;, + 3;2959,3401,3402;, + 3;2960,3398,2959;, + 3;2960,3397,3398;, + 3;2961,2970,2960;, + 3;2961,2969,2970;, + 3;2962,3099,2961;, + 3;2962,3103,3099;, + 3;2963,3136,2962;, + 3;2963,3140,3136;, + 3;2964,3132,2963;, + 3;2964,3131,3132;, + 3;2958,2962,2959;, + 3;2959,2962,2960;, + 3;2960,2962,2961;, + 3;2962,2958,2957;, + 3;2962,2957,2963;, + 3;2963,2957,2964;, + 3;2965,3127,2973;, + 3;2965,3126,3127;, + 3;4398,3154,2965;, + 3;2966,3153,4399;, + 3;2968,3142,4400;, + 3;2967,4401,3143;, + 3;2969,3100,2968;, + 3;2969,3099,3100;, + 3;2971,3397,2970;, + 3;2971,3396,3397;, + 3;2972,3391,2971;, + 3;2972,3390,3391;, + 3;2973,3107,2972;, + 3;2973,3106,3107;, + 3;2971,2968,2972;, + 3;2972,2968,4400;, + 3;2972,4400,2973;, + 3;2973,4400,4398;, + 3;2973,4398,2965;, + 3;2968,2971,2969;, + 3;2969,2971,2970;, + 3;2974,4402,4386;, + 3;2974,3082,4402;, + 3;2975,2996,2982;, + 3;2975,3000,2996;, + 3;2976,3208,2975;, + 3;2976,3207,3208;, + 3;2977,3220,2976;, + 3;2977,3219,3220;, + 3;2978,3221,2977;, + 3;2978,3226,3221;, + 3;2979,3227,2978;, + 3;2979,3232,3227;, + 3;2980,3199,2979;, + 3;2980,3198,3199;, + 3;2981,3376,2980;, + 3;2981,3375,3376;, + 3;4390,2988,2981;, + 3;4390,4403,2988;, + 3;4390,2975,2982;, + 3;4390,2976,2975;, + 3;4390,2977,2976;, + 3;4390,2978,2977;, + 3;4390,2979,2978;, + 3;4390,2980,2979;, + 3;4390,2981,2980;, + 3;2983,3011,2986;, + 3;2983,3010,3011;, + 3;2984,3024,2983;, + 3;2984,3023,3024;, + 3;2985,3019,2984;, + 3;2985,3018,3019;, + 3;4404,3084,2985;, + 3;4404,4405,3084;, + 3;2986,4406,4404;, + 3;2986,2995,4406;, + 3;4404,2983,2986;, + 3;4404,2984,2983;, + 3;4404,2985,2984;, + 3;4403,3083,2987;, + 3;4403,4402,3083;, + 3;2989,3375,2988;, + 3;2989,3374,3375;, + 3;2990,3371,2989;, + 3;2990,3370,3371;, + 3;2991,3365,2990;, + 3;2991,3364,3365;, + 3;4403,2989,2988;, + 3;4403,2990,2989;, + 3;4403,2991,2990;, + 3;4403,2987,2991;, + 3;2992,4407,4406;, + 3;2992,3047,4407;, + 3;2993,3034,2992;, + 3;2993,3033,3034;, + 3;2994,3003,2993;, + 3;2994,3002,3003;, + 3;2995,3012,2994;, + 3;2995,3011,3012;, + 3;4406,2993,2992;, + 3;4406,2994,2993;, + 3;4406,2995,2994;, + 3;2998,3021,2997;, + 3;2998,3027,3021;, + 3;2999,3209,2998;, + 3;2999,3214,3209;, + 3;3000,3203,2999;, + 3;3000,3208,3203;, + 3;2997,2999,2998;, + 3;2999,2997,2996;, + 3;2999,2996,3000;, + 3;3001,3172,3007;, + 3;3001,3177,3172;, + 3;3002,3013,3001;, + 3;3002,3012,3013;, + 3;3004,3033,3003;, + 3;3004,3037,3033;, + 3;3005,3031,3004;, + 3;3005,3030,3031;, + 3;3006,3184,3005;, + 3;3006,3183,3184;, + 3;3007,3182,3006;, + 3;3007,3181,3182;, + 3;3003,3006,3004;, + 3;3004,3006,3005;, + 3;3006,3003,3007;, + 3;3007,3003,3002;, + 3;3007,3002,3001;, + 3;3008,3177,3013;, + 3;3008,3176,3177;, + 3;3009,3171,3008;, + 3;3009,3170,3171;, + 3;3010,3025,3009;, + 3;3010,3024,3025;, + 3;3010,3008,3013;, + 3;3010,3013,3011;, + 3;3011,3013,3012;, + 3;3008,3010,3009;, + 3;3014,3196,3017;, + 3;3014,3202,3196;, + 3;3015,3191,3014;, + 3;3015,3190,3191;, + 3;3016,3042,3015;, + 3;3016,3041,3042;, + 3;3016,3015,3017;, + 3;3017,3015,3014;, + 3;3018,4405,4388;, + 3;3018,3084,4405;, + 3;3020,3023,3019;, + 3;3020,3022,3023;, + 3;4388,3019,3018;, + 3;4388,3020,3019;, + 3;3026,3170,3025;, + 3;3026,3169,3170;, + 3;3027,3210,3026;, + 3;3027,3209,3210;, + 3;3026,3025,3027;, + 3;3027,3025,3022;, + 3;3027,3022,3021;, + 3;3022,3025,3023;, + 3;3023,3025,3024;, + 3;3028,3038,3032;, + 3;3028,3043,3038;, + 3;3029,3195,3028;, + 3;3029,3194,3195;, + 3;3030,3185,3029;, + 3;3030,3184,3185;, + 3;3032,3037,3031;, + 3;3032,3036,3037;, + 3;3029,3031,3030;, + 3;3031,3029,3032;, + 3;3032,3029,3028;, + 3;3035,3047,3034;, + 3;3035,3046,3047;, + 3;3036,3039,3035;, + 3;3036,3038,3039;, + 3;3034,3037,3036;, + 3;3034,3036,3035;, + 3;3037,3034,3033;, + 3;3040,3046,3039;, + 3;3040,3045,3046;, + 3;3043,3190,3042;, + 3;3043,3195,3190;, + 3;3040,3042,3041;, + 3;3042,3040,3043;, + 3;3043,3040,3039;, + 3;3043,3039,3038;, + 3;3048,1944,4408;, + 3;3048,3085,1944;, + 3;4408,3044,3048;, + 3;4407,3045,4383;, + 3;4407,3046,3045;, + 3;4407,3047,3046;, + 3;3050,3064,3049;, + 3;3050,3070,3064;, + 3;3052,3059,3051;, + 3;3052,3058,3059;, + 3;4297,3054,3051;, + 3;3051,3054,3053;, + 3;3051,3053,3052;, + 3;3054,4297,4374;, + 3;4373,4314,3058;, + 3;3058,4314,3055;, + 3;3058,3055,3059;, + 3;3060,3073,3063;, + 3;3060,3072,3073;, + 3;3061,3066,3060;, + 3;3061,3065,3066;, + 3;4409,3086,3061;, + 3;4295,4293,4410;, + 3;3062,4308,4409;, + 3;3062,3077,4308;, + 3;3063,3075,3062;, + 3;3063,3074,3075;, + 3;4409,3063,3062;, + 3;4409,3060,3063;, + 3;4409,3061,3060;, + 3;4411,1944,1918;, + 3;4411,4412,1944;, + 3;3067,4413,4414;, + 3;3067,3071,4413;, + 3;3068,3081,3067;, + 3;3068,3080,3081;, + 3;4415,4414,4416;, + 3;4415,3067,4414;, + 3;4415,3068,3067;, + 3;4415,3069,3068;, + 3;1918,3070,4299;, + 3;1918,3064,3070;, + 3;3071,151,3755;, + 3;3071,3081,151;, + 3;4417,3074,3073;, + 3;4417,4309,3074;, + 3;3755,4413,3071;, + 3;4417,3073,3072;, + 3;3076,3077,3075;, + 3;3076,3079,3077;, + 3;4309,3076,3074;, + 3;3074,3076,3075;, + 3;4308,3079,3078;, + 3;4308,3077,3079;, + 3;151,3081,3080;, + 3;4402,3082,3083;, + 3;3087,3130,3092;, + 3;3087,3129,3130;, + 3;3092,3121,3091;, + 3;3092,3120,3121;, + 3;3090,3089,3091;, + 3;3091,3089,3092;, + 3;3092,3089,3088;, + 3;3092,3088,3087;, + 3;3094,3415,3093;, + 3;3094,3414,3415;, + 3;3095,3406,3094;, + 3;3095,3411,3406;, + 3;3097,3131,3096;, + 3;3097,3135,3131;, + 3;3097,3096,3098;, + 3;3098,3096,3093;, + 3;3093,3096,3094;, + 3;3094,3096,3095;, + 3;3101,3142,3100;, + 3;3101,3141,3142;, + 3;3102,3165,3101;, + 3;3102,3164,3165;, + 3;3103,3137,3102;, + 3;3103,3136,3137;, + 3;3100,3099,3101;, + 3;3101,3099,3103;, + 3;3101,3103,3102;, + 3;3106,3128,3105;, + 3;3106,3127,3128;, + 3;3108,3390,3107;, + 3;3108,3389,3390;, + 3;3109,3392,3108;, + 3;3109,3395,3392;, + 3;3107,3106,3108;, + 3;3108,3106,3105;, + 3;3108,3105,3104;, + 3;3108,3104,3109;, + 3;3111,3159,3110;, + 3;3111,3158,3159;, + 3;3112,3162,3111;, + 3;3112,3161,3162;, + 3;3114,3152,3113;, + 3;3114,3151,3152;, + 3;3115,3145,3114;, + 3;3115,3148,3145;, + 3;3115,3111,3110;, + 3;3111,3115,3114;, + 3;3111,3114,3112;, + 3;3112,3114,3113;, + 3;3117,3119,3118;, + 3;3119,3117,3116;, + 3;3120,3125,3124;, + 3;3120,3130,3125;, + 3;3123,3147,3122;, + 3;3123,3146,3147;, + 3;3124,3150,3123;, + 3;3124,3149,3150;, + 3;3121,3123,3122;, + 3;3123,3121,3120;, + 3;3123,3120,3124;, + 3;3126,3149,3125;, + 3;3126,3154,3149;, + 3;3128,3126,3125;, + 3;3128,3125,3129;, + 3;3129,3125,3130;, + 3;3126,3128,3127;, + 3;3133,3140,3132;, + 3;3133,3139,3140;, + 3;3134,3156,3133;, + 3;3134,3155,3156;, + 3;3134,3133,3135;, + 3;3135,3133,3131;, + 3;3131,3133,3132;, + 3;3138,3164,3137;, + 3;3138,3163,3164;, + 3;3139,3157,3138;, + 3;3139,3156,3157;, + 3;3140,3138,3137;, + 3;3140,3137,3136;, + 3;3138,3140,3139;, + 3;4418,3160,3144;, + 3;4418,4419,3160;, + 3;3143,4401,4418;, + 3;3143,4418,3144;, + 3;4420,3151,3145;, + 3;4420,4421,3151;, + 3;4394,3145,3148;, + 3;3145,4394,4420;, + 3;4399,3153,4422;, + 3;4422,3153,3152;, + 3;4422,3152,4421;, + 3;4421,3152,3151;, + 3;3158,4423,4424;, + 3;3158,3162,4423;, + 3;4391,3159,4425;, + 3;4425,3159,3158;, + 3;4425,3158,4424;, + 3;4426,4423,3161;, + 3;4426,3161,3160;, + 3;4426,3160,4419;, + 3;3161,4423,3162;, + 3;3166,3176,3171;, + 3;3166,3175,3176;, + 3;3167,3256,3166;, + 3;3167,3255,3256;, + 3;3168,3287,3167;, + 3;3168,3286,3287;, + 3;3169,3211,3168;, + 3;3169,3210,3211;, + 3;3167,3169,3168;, + 3;3169,3167,3166;, + 3;3169,3166,3170;, + 3;3170,3166,3171;, + 3;3173,3181,3172;, + 3;3173,3180,3181;, + 3;3174,3260,3173;, + 3;3174,3259,3260;, + 3;3175,3257,3174;, + 3;3175,3256,3257;, + 3;3173,3176,3174;, + 3;3174,3176,3175;, + 3;3176,3173,3177;, + 3;3177,3173,3172;, + 3;3178,3183,3182;, + 3;3178,3189,3183;, + 3;3179,3269,3178;, + 3;3179,3268,3269;, + 3;3180,3261,3179;, + 3;3180,3260,3261;, + 3;3181,3178,3182;, + 3;3178,3181,3179;, + 3;3179,3181,3180;, + 3;3186,3194,3185;, + 3;3186,3193,3194;, + 3;3187,3233,3186;, + 3;3187,3239,3233;, + 3;3188,3274,3187;, + 3;3188,3273,3274;, + 3;3189,3270,3188;, + 3;3189,3269,3270;, + 3;3187,3186,3188;, + 3;3188,3186,3185;, + 3;3188,3185,3184;, + 3;3188,3184,3189;, + 3;3189,3184,3183;, + 3;3192,3202,3191;, + 3;3192,3201,3202;, + 3;3193,3234,3192;, + 3;3193,3233,3234;, + 3;3195,3191,3190;, + 3;3191,3195,3194;, + 3;3191,3194,3193;, + 3;3191,3193,3192;, + 3;3198,3377,3197;, + 3;3198,3376,3377;, + 3;3200,3232,3199;, + 3;3200,3231,3232;, + 3;3201,3235,3200;, + 3;3201,3234,3235;, + 3;3197,3201,3200;, + 3;3197,3200,3198;, + 3;3198,3200,3199;, + 3;3201,3197,3202;, + 3;3202,3197,3196;, + 3;3204,3214,3203;, + 3;3204,3213,3214;, + 3;3205,3282,3204;, + 3;3205,3281,3282;, + 3;3206,3291,3205;, + 3;3206,3290,3291;, + 3;3207,3215,3206;, + 3;3207,3220,3215;, + 3;3205,3207,3206;, + 3;3207,3205,3208;, + 3;3208,3205,3204;, + 3;3208,3204,3203;, + 3;3212,3286,3211;, + 3;3212,3285,3286;, + 3;3213,3283,3212;, + 3;3213,3282,3283;, + 3;3211,3209,3214;, + 3;3211,3214,3212;, + 3;3212,3214,3213;, + 3;3209,3211,3210;, + 3;3216,3290,3215;, + 3;3216,3289,3290;, + 3;3217,3253,3216;, + 3;3217,3252,3253;, + 3;3218,3246,3217;, + 3;3218,3245,3246;, + 3;3219,3222,3218;, + 3;3219,3221,3222;, + 3;3215,3218,3216;, + 3;3216,3218,3217;, + 3;3218,3215,3219;, + 3;3219,3215,3220;, + 3;3223,3245,3222;, + 3;3223,3244,3245;, + 3;3224,3294,3223;, + 3;3224,3298,3294;, + 3;3225,3299,3224;, + 3;3225,3304,3299;, + 3;3226,3228,3225;, + 3;3226,3227,3228;, + 3;3224,3222,3225;, + 3;3225,3222,3221;, + 3;3225,3221,3226;, + 3;3222,3224,3223;, + 3;3229,3304,3228;, + 3;3229,3303,3304;, + 3;3230,3322,3229;, + 3;3230,3321,3322;, + 3;3231,3236,3230;, + 3;3231,3235,3236;, + 3;3229,3228,3227;, + 3;3229,3227,3232;, + 3;3229,3232,3230;, + 3;3230,3232,3231;, + 3;3237,3321,3236;, + 3;3237,3320,3321;, + 3;3238,3306,3237;, + 3;3238,3305,3306;, + 3;3239,3275,3238;, + 3;3239,3274,3275;, + 3;3238,3237,3234;, + 3;3238,3234,3233;, + 3;3238,3233,3239;, + 3;3234,3237,3235;, + 3;3235,3237,3236;, + 3;3240,3272,3248;, + 3;3240,3278,3272;, + 3;3241,3312,3240;, + 3;3241,3311,3312;, + 3;3242,3328,3241;, + 3;3242,3327,3328;, + 3;3243,3334,3242;, + 3;3243,3333,3334;, + 3;3244,3295,3243;, + 3;3244,3294,3295;, + 3;3247,3252,3246;, + 3;3247,3251,3252;, + 3;3248,3266,3247;, + 3;3248,3271,3266;, + 3;3244,3241,3246;, + 3;3244,3246,3245;, + 3;3246,3241,3247;, + 3;3247,3241,3240;, + 3;3247,3240,3248;, + 3;3241,3244,3243;, + 3;3241,3243,3242;, + 3;3249,3289,3253;, + 3;3249,3293,3289;, + 3;3250,3263,3249;, + 3;3250,3262,3263;, + 3;3251,3267,3250;, + 3;3251,3266,3267;, + 3;3252,3251,3253;, + 3;3253,3251,3249;, + 3;3249,3251,3250;, + 3;3254,3279,3258;, + 3;3254,3284,3279;, + 3;3255,3288,3254;, + 3;3255,3287,3288;, + 3;3258,3259,3257;, + 3;3258,3265,3259;, + 3;3255,3254,3256;, + 3;3256,3254,3258;, + 3;3256,3258,3257;, + 3;3262,3268,3261;, + 3;3262,3267,3268;, + 3;3264,3293,3263;, + 3;3264,3292,3293;, + 3;3265,3280,3264;, + 3;3265,3279,3280;, + 3;3260,3259,3262;, + 3;3260,3262,3261;, + 3;3262,3259,3263;, + 3;3263,3259,3265;, + 3;3263,3265,3264;, + 3;3271,3273,3270;, + 3;3271,3272,3273;, + 3;3268,3267,3269;, + 3;3269,3267,3271;, + 3;3269,3271,3270;, + 3;3271,3267,3266;, + 3;3276,3305,3275;, + 3;3276,3308,3305;, + 3;3277,3314,3276;, + 3;3277,3319,3314;, + 3;3278,3313,3277;, + 3;3278,3312,3313;, + 3;3274,3276,3275;, + 3;3276,3274,3273;, + 3;3276,3273,3277;, + 3;3277,3273,3278;, + 3;3278,3273,3272;, + 3;3281,3292,3280;, + 3;3281,3291,3292;, + 3;3284,3285,3283;, + 3;3284,3288,3285;, + 3;3281,3280,3282;, + 3;3282,3280,3284;, + 3;3282,3284,3283;, + 3;3284,3280,3279;, + 3;3286,3285,3287;, + 3;3287,3285,3288;, + 3;3289,3291,3290;, + 3;3291,3289,3292;, + 3;3292,3289,3293;, + 3;3296,3333,3295;, + 3;3296,3332,3333;, + 3;3297,3340,3296;, + 3;3297,3339,3340;, + 3;3298,3300,3297;, + 3;3298,3299,3300;, + 3;3294,3298,3295;, + 3;3295,3298,3297;, + 3;3295,3297,3296;, + 3;3301,3339,3300;, + 3;3301,3338,3339;, + 3;3302,3355,3301;, + 3;3302,3354,3355;, + 3;3303,3323,3302;, + 3;3303,3322,3323;, + 3;3303,3299,3304;, + 3;3299,3303,3300;, + 3;3300,3303,3302;, + 3;3300,3302,3301;, + 3;3307,3320,3306;, + 3;3307,3326,3320;, + 3;3308,3315,3307;, + 3;3308,3314,3315;, + 3;3305,3308,3306;, + 3;3306,3308,3307;, + 3;3309,3319,3313;, + 3;3309,3318,3319;, + 3;3310,3344,3309;, + 3;3310,3343,3344;, + 3;3311,3329,3310;, + 3;3311,3328,3329;, + 3;3312,3309,3313;, + 3;3309,3312,3311;, + 3;3309,3311,3310;, + 3;3316,3326,3315;, + 3;3316,3325,3326;, + 3;3317,3350,3316;, + 3;3317,3349,3350;, + 3;3318,3345,3317;, + 3;3318,3344,3345;, + 3;3319,3316,3315;, + 3;3319,3315,3314;, + 3;3316,3319,3318;, + 3;3316,3318,3317;, + 3;3324,3354,3323;, + 3;3324,3353,3354;, + 3;3325,3351,3324;, + 3;3325,3350,3351;, + 3;3326,3322,3321;, + 3;3326,3321,3320;, + 3;3322,3326,3323;, + 3;3323,3326,3325;, + 3;3323,3325,3324;, + 3;3327,3335,3330;, + 3;3327,3334,3335;, + 3;3330,3343,3329;, + 3;3330,3342,3343;, + 3;3330,3329,3327;, + 3;3327,3329,3328;, + 3;3331,3342,3335;, + 3;3331,3347,3342;, + 3;3332,3341,3331;, + 3;3332,3340,3341;, + 3;3331,3335,3332;, + 3;3332,3335,3334;, + 3;3332,3334,3333;, + 3;3336,3347,3341;, + 3;3336,3346,3347;, + 3;3337,3348,3336;, + 3;3337,3352,3348;, + 3;3338,3356,3337;, + 3;3338,3355,3356;, + 3;3337,3336,3338;, + 3;3338,3336,3341;, + 3;3338,3341,3340;, + 3;3338,3340,3339;, + 3;3346,3349,3345;, + 3;3346,3348,3349;, + 3;3346,3342,3347;, + 3;3342,3346,3343;, + 3;3343,3346,3345;, + 3;3343,3345,3344;, + 3;3352,3353,3351;, + 3;3352,3356,3353;, + 3;3348,3352,3349;, + 3;3349,3352,3351;, + 3;3349,3351,3350;, + 3;3356,3355,3353;, + 3;3353,3355,3354;, + 3;3357,3367,3361;, + 3;3357,3373,3367;, + 3;3359,3357,3361;, + 3;3359,3361,3360;, + 3;3357,3359,3358;, + 3;3366,3370,3365;, + 3;3366,3369,3370;, + 3;4384,3362,4382;, + 3;3365,3364,3366;, + 3;3362,4384,3363;, + 3;3372,3374,3371;, + 3;3372,3378,3374;, + 3;3371,3368,3367;, + 3;3371,3367,3373;, + 3;3371,3373,3372;, + 3;3368,3371,3369;, + 3;3369,3371,3370;, + 3;3376,3378,3377;, + 3;3378,3376,3375;, + 3;3378,3375,3374;, + 3;3382,3408,3381;, + 3;3382,3407,3408;, + 3;3383,3413,3382;, + 3;3383,3412,3413;, + 3;3381,3383,3382;, + 3;3383,3381,3384;, + 3;3384,3381,3380;, + 3;3384,3380,3379;, + 3;3385,3396,3391;, + 3;3385,3400,3396;, + 3;3389,3393,3388;, + 3;3389,3392,3393;, + 3;3390,3389,3387;, + 3;3390,3387,3391;, + 3;3391,3387,3386;, + 3;3391,3386,3385;, + 3;3387,3389,3388;, + 3;2014,3392,3395;, + 3;2014,3393,3392;, + 3;2014,3394,3393;, + 3;3399,3401,3398;, + 3;3399,3405,3401;, + 3;3400,3399,3398;, + 3;3400,3398,3397;, + 3;3400,3397,3396;, + 3;3403,3410,3402;, + 3;3403,3409,3410;, + 3;3401,3405,3403;, + 3;3401,3403,3402;, + 3;3403,3405,3404;, + 3;3407,3414,3406;, + 3;3407,3413,3414;, + 3;3410,3407,3411;, + 3;3411,3407,3406;, + 3;3407,3410,3408;, + 3;3408,3410,3409;, + 3;3414,3413,3412;, + 3;3414,3412,3415;, + 3;21,88,845;, + 3;151,846,3755;, + 3;4310,4309,4427;, + 3;4310,4428,4311;, + 3;1769,3416,1770;, + 3;3416,1778,4148;, + 3;3417,1901,4429;, + 3;4429,4234,3417;, + 3;4430,3510,185;, + 3;4430,185,3509;, + 3;61,4431,3448;, + 3;61,0,4431;; + } + + MeshTextureCoords { + 4432; + 0.551713;0.158481;, + 0.442939;0.266364;, + 0.465760;0.091118;, + 0.359428;0.057171;, + 0.465760;0.024419;, + 0.815422;0.057523;, + 0.083667;0.060652;, + 0.597076;0.069576;, + 0.920137;0.671109;, + 0.842554;0.693424;, + 0.920019;0.713969;, + 0.728562;0.172729;, + 0.118906;0.107861;, + 0.644406;0.127337;, + 0.118913;0.144835;, + 0.430296;0.052895;, + 0.359428;0.116154;, + 0.356021;0.319790;, + 0.394347;0.323160;, + 0.427233;0.319079;, + 0.430296;0.009352;, + 0.886645;0.662715;, + 0.381887;0.022695;, + 0.658351;0.174014;, + 0.092993;0.146098;, + 0.685906;0.229150;, + 0.736179;0.215636;, + 0.629846;0.219982;, + 0.464459;0.320677;, + 0.700253;0.195920;, + 0.610610;0.168595;, + 0.066200;0.058208;, + 0.733851;0.325871;, + 0.054606;0.442647;, + 0.359428;0.246170;, + 0.427560;0.247468;, + 0.438618;0.408674;, + 0.356022;0.415064;, + 0.118913;0.173767;, + 0.455026;0.364714;, + 0.052464;0.254765;, + 0.419322;0.437861;, + 0.116059;0.366961;, + 0.394347;0.328619;, + 0.427233;0.324538;, + 0.442698;0.438188;, + 0.118774;0.254205;, + 0.356153;0.437792;, + 0.059890;0.171424;, + 0.032251;0.182250;, + 0.066673;0.190119;, + 0.023519;0.157546;, + 0.058251;0.145266;, + 0.005628;0.152079;, + 0.006431;0.150480;, + 0.049446;0.218747;, + 0.095581;0.212780;, + 0.118913;0.212000;, + 0.359428;0.181162;, + 0.398753;0.181862;, + 0.432820;0.182511;, + 0.574290;0.239863;, + 0.458415;0.271707;, + 0.446591;0.185893;, + 0.065339;0.442780;, + 0.669024;0.320480;, + 0.445846;0.325337;, + 0.006030;0.151279;, + 0.465760;0.051887;, + 0.559147;0.049519;, + 0.595529;0.117266;, + 0.465925;0.109701;, + 0.549941;0.151917;, + 0.587717;0.115217;, + 0.590694;0.071521;, + 0.557217;0.052500;, + 0.495192;0.111541;, + 0.522997;0.132857;, + 0.516882;0.039315;, + 0.495714;0.070258;, + 0.356021;0.382789;, + 0.375183;0.384474;, + 0.391626;0.382434;, + 0.425472;0.376874;, + 0.031504;0.215546;, + 0.359428;0.024842;, + 0.867640;0.034178;, + 0.839678;0.036502;, + 0.857340;0.649725;, + 0.359428;0.008334;, + 0.379332;0.007404;, + 0.389688;0.008235;, + 0.400856;0.002144;, + 0.409716;0.001197;, + 0.583239;0.012330;, + 0.793406;0.132263;, + 0.861711;0.672549;, + 0.893865;0.675224;, + 0.920564;0.687001;, + 0.845283;0.668070;, + 0.385765;0.310131;, + 0.667913;0.113729;, + 0.650023;0.087602;, + 0.631536;0.052867;, + 0.617447;0.029000;, + 0.639832;0.037988;, + 0.812486;0.054699;, + 0.803245;0.160421;, + 0.785495;0.208704;, + 0.867984;0.031841;, + 0.836932;0.034143;, + 0.815334;0.099408;, + 0.867984;0.017331;, + 0.830556;0.015332;, + 0.812307;0.023785;, + 0.792631;0.034435;, + 0.777019;0.056595;, + 0.764128;0.102698;, + 0.806759;0.138419;, + 0.758543;0.203424;, + 0.756451;0.178241;, + 0.750154;0.161070;, + 0.757487;0.141824;, + 0.779602;0.155868;, + 0.644346;0.272464;, + 0.639107;0.250146;, + 0.671632;0.200776;, + 0.662200;0.223137;, + 0.613887;0.268609;, + 0.631047;0.289558;, + 0.902852;0.117289;, + 0.850579;0.117328;, + 0.858474;0.096123;, + 0.901940;0.096616;, + 0.888860;0.096164;, + 0.832815;0.095553;, + 0.833973;0.117980;, + 0.551713;0.158481;, + 0.269100;0.266364;, + 0.251153;0.091117;, + 0.251153;0.024419;, + 0.920762;0.057447;, + 0.154150;0.060652;, + 0.597076;0.069576;, + 0.999127;0.694070;, + 0.728563;0.172729;, + 0.644406;0.127337;, + 0.286617;0.052895;, + 0.317692;0.323160;, + 0.284805;0.319079;, + 0.288556;0.009352;, + 0.953569;0.662737;, + 0.336965;0.022695;, + 0.658351;0.174014;, + 0.144837;0.146098;, + 0.685906;0.229150;, + 0.736179;0.215636;, + 0.629846;0.219982;, + 0.247580;0.320677;, + 0.700253;0.195920;, + 0.610610;0.168595;, + 0.171617;0.058208;, + 0.733851;0.325871;, + 0.181585;0.442779;, + 0.289352;0.247468;, + 0.205506;0.226805;, + 0.257013;0.364714;, + 0.184968;0.254780;, + 0.293026;0.437918;, + 0.317692;0.328619;, + 0.284805;0.324538;, + 0.269586;0.437793;, + 0.177940;0.171424;, + 0.205578;0.182250;, + 0.171156;0.190119;, + 0.214310;0.157546;, + 0.179579;0.145266;, + 0.229734;0.152079;, + 0.228932;0.150480;, + 0.188350;0.218747;, + 0.142249;0.212780;, + 0.318160;0.181862;, + 0.284092;0.182511;, + 0.574290;0.239863;, + 0.253624;0.271707;, + 0.270321;0.185893;, + 0.170852;0.442780;, + 0.669025;0.320480;, + 0.266193;0.325337;, + 0.229333;0.151279;, + 0.251153;0.051887;, + 0.559147;0.049519;, + 0.595529;0.117266;, + 0.250988;0.109701;, + 0.549531;0.151558;, + 0.585685;0.115494;, + 0.590395;0.071657;, + 0.557163;0.051913;, + 0.495714;0.111887;, + 0.521581;0.134300;, + 0.516917;0.039559;, + 0.495684;0.070180;, + 0.336856;0.384474;, + 0.320412;0.382434;, + 0.286567;0.376874;, + 0.206326;0.215546;, + 0.895403;0.036408;, + 0.919225;0.096002;, + 0.339520;0.007404;, + 0.329164;0.008235;, + 0.317996;0.002144;, + 0.309135;0.001197;, + 0.583239;0.012330;, + 0.942568;0.132263;, + 0.979425;0.675217;, + 0.946726;0.677891;, + 0.996398;0.668070;, + 0.326274;0.310131;, + 0.667913;0.113729;, + 0.650023;0.087602;, + 0.631536;0.052867;, + 0.617447;0.029000;, + 0.639832;0.037988;, + 0.923488;0.054699;, + 0.932729;0.160421;, + 0.950479;0.208704;, + 0.899042;0.034144;, + 0.920641;0.099408;, + 0.905419;0.015332;, + 0.923667;0.023785;, + 0.943344;0.034435;, + 0.958955;0.056595;, + 0.971847;0.102698;, + 0.929215;0.138419;, + 0.977432;0.203424;, + 0.979524;0.178241;, + 0.985820;0.161071;, + 0.978488;0.141824;, + 0.956372;0.155868;, + 0.644346;0.272464;, + 0.639107;0.250146;, + 0.671632;0.200776;, + 0.662200;0.223137;, + 0.613887;0.268609;, + 0.631047;0.289558;, + 0.902852;0.117289;, + 0.850579;0.117328;, + 0.858475;0.096123;, + 0.901940;0.096616;, + 0.888860;0.096164;, + 0.832815;0.095553;, + 0.833973;0.117980;, + 0.362779;0.521593;, + 0.114079;0.496280;, + 0.015593;0.538621;, + 0.413067;0.590996;, + 0.071282;0.556579;, + 0.114079;0.567406;, + 0.099956;0.579574;, + 0.424300;0.515014;, + 0.462475;0.504546;, + 0.109294;0.615708;, + 0.446455;0.570659;, + 0.063583;0.507001;, + 0.114079;0.543305;, + 0.431632;0.586910;, + 0.460591;0.574244;, + 0.088110;0.748276;, + 0.375357;0.785656;, + 0.112550;0.731015;, + 0.049365;0.760989;, + 0.041062;0.962565;, + 0.410288;0.967981;, + 0.434010;0.752783;, + 0.015465;0.715644;, + 0.033054;0.737854;, + 0.457389;0.965598;, + 0.433322;0.965919;, + 0.477819;0.771756;, + 0.082704;0.664352;, + 0.114762;0.674474;, + 0.061982;0.570639;, + 0.046172;0.686846;, + 0.410308;0.618813;, + 0.788717;0.583537;, + 0.413698;0.695212;, + 0.446559;0.645880;, + 0.058540;0.706405;, + 0.418117;0.723574;, + 0.031199;0.570609;, + 0.742190;0.313064;, + 0.756779;0.321579;, + 0.783375;0.328557;, + 0.826151;0.329094;, + 0.853820;0.326370;, + 0.746033;0.275270;, + 0.762350;0.266786;, + 0.789513;0.268192;, + 0.831224;0.279205;, + 0.857563;0.289306;, + 0.724828;0.460339;, + 0.739319;0.455172;, + 0.757159;0.439798;, + 0.414408;0.971032;, + 0.728309;0.346757;, + 0.745926;0.344262;, + 0.772846;0.351868;, + 0.010735;0.967181;, + 0.861627;0.308964;, + 0.837868;0.327705;, + 0.842297;0.284145;, + 0.411091;0.651182;, + 0.428698;0.876513;, + 0.423699;0.568455;, + 0.065047;0.942678;, + 0.037106;0.942847;, + 0.079040;0.940766;, + 0.391091;0.940519;, + 0.011332;0.941808;, + 0.412732;0.940671;, + 0.462371;0.941498;, + 0.437517;0.942397;, + 0.375061;0.808473;, + 0.399631;0.794862;, + 0.442565;0.794868;, + 0.081790;0.877027;, + 0.024359;0.876663;, + 0.383056;0.878540;, + 0.449565;0.876567;, + 0.480165;0.877379;, + 0.046689;0.877006;, + 0.407005;0.875615;, + 0.013484;0.572291;, + 0.084679;0.696575;, + 0.030451;0.697677;, + 0.392449;0.753106;, + 0.421098;0.794206;, + 0.051990;0.644457;, + 0.750745;0.580656;, + 0.416248;0.711576;, + 0.418268;0.732598;, + 0.416528;0.716968;, + 0.415048;0.703811;, + 0.054057;0.740134;, + 0.043962;0.728755;, + 0.072651;0.727710;, + 0.061716;0.964870;, + 0.784783;0.408719;, + 0.023733;0.964338;, + 0.784278;0.388010;, + 0.790879;0.373359;, + 0.787672;0.372002;, + 0.799093;0.370321;, + 0.819904;0.363746;, + 0.836925;0.361193;, + 0.856879;0.367989;, + 0.852722;0.366515;, + 0.789870;0.422196;, + 0.790150;0.426709;, + 0.802645;0.438063;, + 0.841137;0.441531;, + 0.855986;0.431918;, + 0.818542;0.442967;, + 0.830870;0.443475;, + 0.849598;0.436887;, + 0.861367;0.437046;, + 0.844150;0.363301;, + 0.046193;0.968453;, + 0.034249;0.969452;, + 0.026167;0.976093;, + 0.024562;0.979040;, + 0.023590;0.980527;, + 0.021595;0.986662;, + 0.458536;0.990264;, + 0.443083;0.983817;, + 0.451432;0.985102;, + 0.054884;0.971077;, + 0.058812;0.974886;, + 0.061081;0.985310;, + 0.421917;0.990046;, + 0.429331;0.982643;, + 0.061489;0.988962;, + 0.423160;0.991430;, + 0.422049;0.986512;, + 0.437053;0.983662;, + 0.455713;0.987962;, + 0.751936;0.511608;, + 0.775565;0.511382;, + 0.790667;0.510828;, + 0.742260;0.511058;, + 0.446359;0.592000;, + 0.056469;0.615493;, + 0.429093;0.704697;, + 0.113358;0.698276;, + 0.471054;0.693874;, + 0.443694;0.677693;, + 0.732967;0.488721;, + 0.824812;0.489415;, + 0.811150;0.610036;, + 0.725246;0.572015;, + 0.797433;0.490302;, + 0.757124;0.490022;, + 0.786758;0.613931;, + 0.823818;0.573700;, + 0.726973;0.508449;, + 0.825801;0.540741;, + 0.750561;0.617018;, + 0.726834;0.606098;, + 0.821824;0.510894;, + 0.790460;0.583701;, + 0.752506;0.580815;, + 0.753155;0.511554;, + 0.793248;0.510776;, + 0.740977;0.510621;, + 0.788229;0.614117;, + 0.724265;0.508140;, + 0.752135;0.617252;, + 0.826553;0.510835;, + 0.777823;0.511251;, + 0.754149;0.511440;, + 0.805126;0.511381;, + 0.114079;0.557341;, + 0.759721;0.398421;, + 0.761054;0.366386;, + 0.752224;0.439813;, + 0.816369;0.348071;, + 0.763538;0.460181;, + 0.395296;0.477256;, + 0.359862;0.470419;, + 0.088767;0.477079;, + 0.114079;0.476699;, + 0.411840;0.477331;, + 0.424655;0.477418;, + 0.066498;0.477187;, + 0.054242;0.477230;, + 0.439588;0.477494;, + 0.104660;0.254436;, + 0.096806;0.469878;, + 0.042134;0.449763;, + 0.414949;0.445141;, + 0.445503;0.445173;, + 0.848943;0.392358;, + 0.359862;0.445094;, + 0.391297;0.471167;, + 0.359862;0.470734;, + 0.076342;0.470898;, + 0.114079;0.476851;, + 0.414326;0.471332;, + 0.432164;0.471525;, + 0.042403;0.471131;, + 0.023723;0.471226;, + 0.448021;0.471691;, + 0.096201;0.449182;, + 0.104436;0.476901;, + 0.848942;0.395254;, + 0.848943;0.414986;, + 0.838153;0.395231;, + 0.838152;0.414996;, + 0.104420;0.486605;, + 0.106000;0.540169;, + 0.114079;0.496443;, + 0.114079;0.543468;, + 0.104114;0.486767;, + 0.105694;0.540332;, + 0.418093;0.495004;, + 0.423993;0.537540;, + 0.052028;0.528907;, + 0.392382;0.518528;, + 0.393769;0.530518;, + 0.396684;0.550706;, + 0.396337;0.568785;, + 0.392230;0.581982;, + 0.393079;0.606632;, + 0.438065;0.499238;, + 0.444577;0.525255;, + 0.387594;0.633179;, + 0.392223;0.662757;, + 0.396860;0.687511;, + 0.428691;0.622255;, + 0.435371;0.647317;, + 0.432617;0.685648;, + 0.087463;0.497126;, + 0.044563;0.505211;, + 0.079294;0.533408;, + 0.064206;0.504727;, + 0.039557;0.954539;, + 0.047283;0.954585;, + 0.427587;0.955639;, + 0.436284;0.955532;, + 0.074460;0.952724;, + 0.107172;0.957531;, + 0.394046;0.960089;, + 0.011938;0.955578;, + 0.025135;0.953131;, + 0.031836;0.953763;, + 0.418250;0.955939;, + 0.445123;0.955762;, + 0.454737;0.955923;, + 0.060252;0.954128;, + 0.064395;0.953699;, + 0.468310;0.956951;, + 0.048881;0.923002;, + 0.067036;0.922724;, + 0.034866;0.922252;, + 0.041046;0.922410;, + 0.453757;0.921277;, + 0.459086;0.921847;, + 0.435977;0.920548;, + 0.429060;0.920667;, + 0.411319;0.921527;, + 0.418037;0.920760;, + 0.082849;0.921580;, + 0.105367;0.921562;, + 0.076317;0.922237;, + 0.022332;0.921620;, + 0.446710;0.921015;, + 0.009127;0.921034;, + 0.039900;0.830890;, + 0.047550;0.831189;, + 0.410351;0.830272;, + 0.423955;0.828454;, + 0.402420;0.830320;, + 0.067293;0.831602;, + 0.082288;0.830912;, + 0.028250;0.831256;, + 0.480055;0.833255;, + 0.466431;0.833260;, + 0.456669;0.830024;, + 0.393812;0.832157;, + 0.385383;0.831460;, + 0.377789;0.834202;, + 0.445359;0.830391;, + 0.437600;0.830169;, + 0.109740;0.773655;, + 0.394735;0.772286;, + 0.400492;0.771751;, + 0.434800;0.771486;, + 0.095454;0.772777;, + 0.068958;0.775796;, + 0.086328;0.774353;, + 0.039592;0.773128;, + 0.027588;0.773542;, + 0.051030;0.774597;, + 0.415238;0.750555;, + 0.418145;0.769176;, + 0.068759;0.877502;, + 0.013073;0.740827;, + 0.110236;0.754382;, + 0.078908;0.601144;, + 0.100667;0.632553;, + 0.410634;0.615525;, + 0.105165;0.597111;, + 0.392799;0.705637;, + 0.086349;0.723962;, + 0.362779;0.491146;, + 0.362779;0.547658;, + 0.394008;0.495494;, + 0.214445;0.539488;, + 0.312502;0.590996;, + 0.156867;0.556579;, + 0.127949;0.579574;, + 0.296719;0.515014;, + 0.263475;0.504546;, + 0.120939;0.615708;, + 0.274563;0.570659;, + 0.166661;0.506808;, + 0.293936;0.586910;, + 0.259858;0.571459;, + 0.148894;0.749622;, + 0.353177;0.784954;, + 0.127105;0.730907;, + 0.178784;0.760989;, + 0.194710;0.961754;, + 0.315281;0.967981;, + 0.291559;0.752783;, + 0.221894;0.714124;, + 0.202002;0.739201;, + 0.268180;0.965598;, + 0.292247;0.965919;, + 0.250861;0.773185;, + 0.148102;0.666339;, + 0.126837;0.672304;, + 0.166167;0.570639;, + 0.187128;0.679052;, + 0.315261;0.618812;, + 0.788717;0.583537;, + 0.311871;0.695212;, + 0.279010;0.645879;, + 0.176804;0.706885;, + 0.307451;0.723574;, + 0.198839;0.571476;, + 0.742190;0.312541;, + 0.756779;0.321055;, + 0.783375;0.328033;, + 0.826151;0.328571;, + 0.853820;0.325847;, + 0.746033;0.274746;, + 0.762350;0.266262;, + 0.789513;0.267668;, + 0.831224;0.278682;, + 0.857563;0.288782;, + 0.724828;0.460339;, + 0.739319;0.455172;, + 0.757159;0.439798;, + 0.319470;0.975754;, + 0.728309;0.346757;, + 0.745926;0.344262;, + 0.772846;0.351868;, + 0.227252;0.968539;, + 0.861627;0.308441;, + 0.837868;0.327181;, + 0.842297;0.283622;, + 0.314478;0.651182;, + 0.296871;0.876513;, + 0.297319;0.568455;, + 0.170740;0.942462;, + 0.198680;0.942631;, + 0.156747;0.940551;, + 0.346972;0.946444;, + 0.227556;0.941050;, + 0.312837;0.940671;, + 0.263198;0.941498;, + 0.288052;0.942397;, + 0.350771;0.806681;, + 0.325938;0.794862;, + 0.283003;0.794868;, + 0.154964;0.877145;, + 0.209435;0.877359;, + 0.350023;0.880017;, + 0.276004;0.876567;, + 0.248126;0.876903;, + 0.189592;0.877125;, + 0.327467;0.876705;, + 0.216554;0.573159;, + 0.150901;0.696187;, + 0.195986;0.685920;, + 0.333119;0.753106;, + 0.304470;0.794206;, + 0.179704;0.645000;, + 0.750745;0.580656;, + 0.309321;0.711576;, + 0.307301;0.732598;, + 0.309041;0.716968;, + 0.310520;0.703811;, + 0.179110;0.740324;, + 0.196462;0.720314;, + 0.163874;0.727025;, + 0.175639;0.964059;, + 0.784588;0.408840;, + 0.212039;0.963527;, + 0.784082;0.388131;, + 0.790683;0.373480;, + 0.787672;0.372002;, + 0.799093;0.370321;, + 0.819904;0.363746;, + 0.836925;0.361193;, + 0.856879;0.367989;, + 0.852722;0.366515;, + 0.781318;0.421781;, + 0.790151;0.426709;, + 0.802645;0.438063;, + 0.841137;0.441531;, + 0.855986;0.431918;, + 0.818542;0.442967;, + 0.830870;0.443475;, + 0.849598;0.436887;, + 0.861065;0.436308;, + 0.844150;0.363301;, + 0.188198;0.969250;, + 0.200851;0.969815;, + 0.208933;0.976456;, + 0.210538;0.979402;, + 0.211510;0.980889;, + 0.212619;0.987459;, + 0.267032;0.990264;, + 0.282486;0.983817;, + 0.274136;0.985102;, + 0.177024;0.972308;, + 0.172563;0.978070;, + 0.167812;0.984370;, + 0.311368;0.988230;, + 0.296237;0.982643;, + 0.167404;0.988023;, + 0.321700;0.992157;, + 0.303520;0.986512;, + 0.288516;0.983662;, + 0.269855;0.987962;, + 0.751936;0.511608;, + 0.775565;0.511382;, + 0.790667;0.510828;, + 0.742260;0.511058;, + 0.279210;0.591999;, + 0.172625;0.617805;, + 0.296476;0.704697;, + 0.127747;0.694998;, + 0.259571;0.683877;, + 0.281486;0.677693;, + 0.732967;0.488721;, + 0.824812;0.489415;, + 0.811150;0.610036;, + 0.725246;0.572015;, + 0.797433;0.490302;, + 0.757124;0.490022;, + 0.786758;0.613931;, + 0.823818;0.573700;, + 0.726973;0.508449;, + 0.825801;0.540741;, + 0.750561;0.617018;, + 0.726834;0.606098;, + 0.821824;0.510894;, + 0.790460;0.583701;, + 0.752506;0.580815;, + 0.753155;0.511554;, + 0.793248;0.510776;, + 0.740977;0.510621;, + 0.788229;0.614117;, + 0.724265;0.508140;, + 0.752135;0.617252;, + 0.826553;0.510835;, + 0.777823;0.511251;, + 0.754149;0.511440;, + 0.805126;0.511381;, + 0.759526;0.398542;, + 0.761054;0.366386;, + 0.752224;0.439813;, + 0.816369;0.348071;, + 0.763538;0.460181;, + 0.325722;0.477256;, + 0.139382;0.477079;, + 0.309178;0.477331;, + 0.296364;0.477418;, + 0.163540;0.478054;, + 0.175796;0.478097;, + 0.286362;0.477494;, + 0.132862;0.254436;, + 0.127918;0.469878;, + 0.186151;0.449763;, + 0.309627;0.445141;, + 0.276170;0.445173;, + 0.330860;0.471167;, + 0.152834;0.470898;, + 0.307830;0.471332;, + 0.289993;0.471525;, + 0.186773;0.471131;, + 0.205453;0.471226;, + 0.274619;0.471691;, + 0.128523;0.449182;, + 0.124295;0.476901;, + 0.858050;0.395224;, + 0.858013;0.415012;, + 0.124310;0.488385;, + 0.123749;0.539991;, + 0.124616;0.488548;, + 0.124054;0.540154;, + 0.302926;0.495004;, + 0.297025;0.537540;, + 0.178010;0.529774;, + 0.328636;0.518528;, + 0.327249;0.530518;, + 0.324335;0.550706;, + 0.324681;0.568785;, + 0.333339;0.581982;, + 0.332490;0.606632;, + 0.282953;0.499238;, + 0.276441;0.525255;, + 0.337974;0.633179;, + 0.333346;0.662757;, + 0.328709;0.687511;, + 0.296878;0.622255;, + 0.290197;0.647317;, + 0.292952;0.685648;, + 0.140893;0.496067;, + 0.185508;0.505018;, + 0.148854;0.533408;, + 0.166039;0.504534;, + 0.195019;0.954017;, + 0.187293;0.954062;, + 0.297982;0.955639;, + 0.289285;0.955532;, + 0.159912;0.950756;, + 0.134967;0.960262;, + 0.323148;0.959549;, + 0.227794;0.956682;, + 0.209442;0.952609;, + 0.202741;0.953240;, + 0.307318;0.955939;, + 0.280446;0.955762;, + 0.270832;0.955923;, + 0.174324;0.953605;, + 0.170182;0.953177;, + 0.267761;0.956475;, + 0.185260;0.923093;, + 0.166869;0.922238;, + 0.200928;0.922343;, + 0.194040;0.922790;, + 0.271812;0.921277;, + 0.266483;0.921847;, + 0.289591;0.920548;, + 0.296509;0.920667;, + 0.323153;0.922617;, + 0.307532;0.920760;, + 0.149462;0.921383;, + 0.134007;0.919990;, + 0.155182;0.922040;, + 0.211948;0.922290;, + 0.278858;0.921015;, + 0.225949;0.921414;, + 0.194927;0.831623;, + 0.186805;0.832210;, + 0.315217;0.830272;, + 0.301614;0.828454;, + 0.323149;0.830320;, + 0.167299;0.832624;, + 0.152776;0.831645;, + 0.208876;0.832250;, + 0.253050;0.830737;, + 0.267081;0.829903;, + 0.274345;0.830976;, + 0.328922;0.829025;, + 0.338526;0.829644;, + 0.351328;0.831822;, + 0.280209;0.830391;, + 0.287969;0.830169;, + 0.126361;0.773469;, + 0.330834;0.772286;, + 0.325077;0.771751;, + 0.290768;0.771486;, + 0.141975;0.768795;, + 0.164453;0.775643;, + 0.148027;0.773912;, + 0.195235;0.772686;, + 0.207004;0.772233;, + 0.179311;0.769531;, + 0.310331;0.750555;, + 0.307424;0.769176;, + 0.167049;0.878487;, + 0.222577;0.740583;, + 0.127126;0.753815;, + 0.151890;0.600774;, + 0.134216;0.634865;, + 0.314934;0.615524;, + 0.126647;0.597111;, + 0.332770;0.705637;, + 0.149467;0.725011;, + 0.327010;0.495494;, + 0.860789;0.657454;, + 0.978336;0.654931;, + 0.313267;0.411755;, + 0.400447;0.411627;, + 0.536289;0.424917;, + 0.499467;0.433281;, + 0.571290;0.353491;, + 0.590379;0.363402;, + 0.579112;0.483381;, + 0.615218;0.411951;, + 0.665610;0.410428;, + 0.615331;0.353127;, + 0.515344;0.481729;, + 0.498592;0.482057;, + 0.698075;0.478723;, + 0.614392;0.483897;, + 0.645237;0.478272;, + 0.715733;0.529411;, + 0.612983;0.524847;, + 0.523967;0.489788;, + 0.652416;0.486671;, + 0.526120;0.521423;, + 0.653761;0.532059;, + 0.495030;0.522681;, + 0.576437;0.524074;, + 0.715714;0.485627;, + 0.699421;0.485627;, + 0.577420;0.491458;, + 0.615127;0.491934;, + 0.679818;0.486289;, + 0.490235;0.487956;, + 0.635713;0.529981;, + 0.635720;0.486830;, + 0.678267;0.532636;, + 0.486373;0.534489;, + 0.494039;0.535189;, + 0.654239;0.538592;, + 0.679198;0.539289;, + 0.619681;0.536690;, + 0.636359;0.538445;, + 0.527499;0.535352;, + 0.576745;0.536475;, + 0.681707;0.479236;, + 0.716165;0.476668;, + 0.544027;0.484449;, + 0.501868;0.507433;, + 0.493455;0.506823;, + 0.697537;0.508227;, + 0.715163;0.508854;, + 0.550096;0.509441;, + 0.576243;0.509953;, + 0.593682;0.510741;, + 0.612347;0.510925;, + 0.633337;0.509019;, + 0.642214;0.509013;, + 0.687735;0.508461;, + 0.680802;0.508655;, + 0.669120;0.508902;, + 0.628648;0.508941;, + 0.520188;0.508274;, + 0.531694;0.509755;, + 0.653675;0.509091;, + 0.568360;0.596314;, + 0.521581;0.593697;, + 0.615591;0.580289;, + 0.570231;0.714150;, + 0.541700;0.715288;, + 0.505061;0.580731;, + 0.638820;0.606874;, + 0.670871;0.714940;, + 0.522733;0.717029;, + 0.693528;0.607941;, + 0.666459;0.608484;, + 0.706173;0.594310;, + 0.625995;0.593169;, + 0.512624;0.594919;, + 0.545974;0.592953;, + 0.580745;0.598731;, + 0.582736;0.661778;, + 0.592837;0.662044;, + 0.573003;0.661443;, + 0.563094;0.661023;, + 0.549894;0.660271;, + 0.517677;0.658749;, + 0.529421;0.658867;, + 0.647622;0.658026;, + 0.636012;0.658320;, + 0.623324;0.658018;, + 0.540126;0.659521;, + 0.662431;0.658703;, + 0.676303;0.658561;, + 0.685399;0.659635;, + 0.695076;0.660466;, + 0.710549;0.661174;, + 0.544941;0.576131;, + 0.541656;0.556865;, + 0.523025;0.572790;, + 0.563141;0.575307;, + 0.553866;0.374524;, + 0.579122;0.410083;, + 0.715663;0.424895;, + 0.599689;0.345884;, + 0.873230;0.274025;, + 0.898854;0.274219;, + 0.958184;0.540522;, + 0.935286;0.536674;, + 0.874609;0.301468;, + 0.894704;0.289223;, + 0.960279;0.517513;, + 0.923442;0.290776;, + 0.873524;0.323161;, + 0.908654;0.364066;, + 0.990069;0.437218;, + 0.921995;0.366162;, + 0.975391;0.495368;, + 0.936371;0.444829;, + 0.952487;0.485622;, + 0.992783;0.435764;, + 0.927528;0.325647;, + 0.939277;0.476721;, + 0.936325;0.504751;, + 0.946497;0.334246;, + 0.926817;0.477177;, + 0.949882;0.328775;, + 0.900982;0.369442;, + 0.917022;0.367144;, + 0.905700;0.368564;, + 0.885802;0.371364;, + 0.919110;0.361178;, + 0.887784;0.366305;, + 0.883099;0.371914;, + 0.897381;0.369979;, + 0.975720;0.439230;, + 0.952400;0.442506;, + 0.942930;0.443943;, + 0.983446;0.438196;, + 0.987224;0.471182;, + 0.988285;0.492297;, + 0.958862;0.483089;, + 0.957743;0.501239;, + 0.931439;0.365235;, + 0.948438;0.470833;, + 0.954353;0.469827;, + 0.927964;0.338719;, + 0.934931;0.474721;, + 0.927571;0.472571;, + 0.941879;0.487722;, + 0.921776;0.482053;, + 0.939058;0.353581;, + 0.919942;0.473511;, + 0.912300;0.476143;, + 0.946882;0.345223;, + 0.929139;0.466241;, + 0.944801;0.363381;, + 0.917960;0.459364;, + 0.913105;0.460961;, + 0.949839;0.357962;, + 1.000000;1.000000;, + 0.950983;0.367857;, + 0.913408;0.450900;, + 0.911252;0.451536;, + 0.953230;0.365413;, + 0.915244;0.449142;, + 0.900640;0.363431;, + 0.913324;0.367647;, + 0.890638;0.370774;, + 0.876313;0.372530;, + 0.928631;0.365429;, + 0.959662;0.441499;, + 0.968760;0.440024;, + 0.918587;0.373211;, + 0.921969;0.372736;, + 0.927792;0.372084;, + 0.930233;0.371906;, + 0.936779;0.438485;, + 0.942792;0.437735;, + 0.919984;0.379212;, + 0.922713;0.378822;, + 0.927354;0.378302;, + 0.929268;0.378172;, + 0.937025;0.432481;, + 0.941818;0.431883;, + 0.919581;0.384226;, + 0.922252;0.383857;, + 0.926937;0.383332;, + 0.928951;0.383176;, + 0.937170;0.427349;, + 0.942009;0.426744;, + 0.918353;0.388611;, + 0.921672;0.388155;, + 0.927494;0.387502;, + 0.929998;0.387306;, + 0.936685;0.423466;, + 0.942698;0.422715;, + 0.918796;0.395081;, + 0.921850;0.394655;, + 0.927143;0.394062;, + 0.929382;0.393895;, + 0.936942;0.417357;, + 0.942408;0.416675;, + 0.920034;0.399980;, + 0.922304;0.399663;, + 0.926264;0.399219;, + 0.927954;0.399093;, + 0.937559;0.412281;, + 0.941648;0.411769;, + 0.919307;0.404223;, + 0.921874;0.403869;, + 0.926387;0.403363;, + 0.928332;0.403212;, + 0.937409;0.408406;, + 0.942069;0.407823;, + 0.917905;0.407449;, + 0.921148;0.407016;, + 0.926970;0.406363;, + 0.929548;0.406145;, + 0.936795;0.405668;, + 0.942807;0.404917;, + 0.918548;0.413426;, + 0.921333;0.413058;, + 0.926395;0.412491;, + 0.928671;0.412292;, + 0.937141;0.399905;, + 0.942368;0.399251;, + 0.920875;0.417398;, + 0.922434;0.417195;, + 0.925394;0.416864;, + 0.926796;0.416735;, + 0.937785;0.395465;, + 0.940842;0.395081;, + 0.922919;0.418989;, + 0.924915;0.418765;, + 0.901952;0.377814;, + 0.905828;0.377270;, + 0.912504;0.376521;, + 0.915302;0.376318;, + 0.952663;0.433953;, + 0.959556;0.433094;, + 0.903532;0.386027;, + 0.906660;0.385579;, + 0.911981;0.384983;, + 0.914175;0.384834;, + 0.952869;0.425673;, + 0.958364;0.424987;, + 0.903053;0.392854;, + 0.906115;0.392431;, + 0.911486;0.391829;, + 0.913794;0.391650;, + 0.953130;0.418898;, + 0.958676;0.418205;, + 0.901631;0.398799;, + 0.905435;0.398276;, + 0.912109;0.397528;, + 0.914980;0.397303;, + 0.952576;0.413568;, + 0.959469;0.412708;, + 0.902116;0.407623;, + 0.905616;0.407134;, + 0.911684;0.406454;, + 0.914251;0.406263;, + 0.952875;0.405219;, + 0.959141;0.404437;, + 0.903517;0.414330;, + 0.906120;0.413967;, + 0.910659;0.413459;, + 0.912596;0.413313;, + 0.953585;0.398356;, + 0.958273;0.397770;, + 0.902669;0.420094;, + 0.905613;0.419688;, + 0.910786;0.419108;, + 0.913016;0.418935;, + 0.953416;0.393054;, + 0.958758;0.392386;, + 0.901052;0.424454;, + 0.904769;0.423957;, + 0.911443;0.423209;, + 0.914399;0.422959;, + 0.952714;0.389283;, + 0.959606;0.388422;, + 0.901767;0.432611;, + 0.904961;0.432189;, + 0.910763;0.431539;, + 0.913372;0.431311;, + 0.953114;0.381429;, + 0.959106;0.380679;, + 0.904421;0.438084;, + 0.906207;0.437851;, + 0.909601;0.437471;, + 0.911209;0.437325;, + 0.953855;0.375458;, + 0.957360;0.375018;, + 0.906757;0.440305;, + 0.909046;0.440049;, + 0.886697;0.379215;, + 0.890457;0.378707;, + 0.896932;0.378021;, + 0.899646;0.377844;, + 0.968718;0.432149;, + 0.975405;0.431354;, + 0.888142;0.386760;, + 0.891176;0.386342;, + 0.896337;0.385796;, + 0.898465;0.385667;, + 0.969012;0.424526;, + 0.974343;0.423891;, + 0.887606;0.393030;, + 0.890576;0.392636;, + 0.895785;0.392084;, + 0.898024;0.391927;, + 0.969344;0.418289;, + 0.974724;0.417647;, + 0.886166;0.398492;, + 0.889856;0.398005;, + 0.896330;0.397319;, + 0.899114;0.397121;, + 0.968874;0.413398;, + 0.975560;0.412602;, + 0.886544;0.406601;, + 0.889939;0.406144;, + 0.895825;0.405521;, + 0.898314;0.405354;, + 0.969265;0.405734;, + 0.975344;0.405010;, + 0.887831;0.412762;, + 0.890355;0.412423;, + 0.894759;0.411957;, + 0.896637;0.411830;, + 0.970033;0.399417;, + 0.974581;0.398875;, + 0.886950;0.418057;, + 0.889805;0.417679;, + 0.894822;0.417148;, + 0.896985;0.416995;, + 0.969934;0.394550;, + 0.975116;0.393932;, + 0.885337;0.422064;, + 0.888943;0.421602;, + 0.895416;0.420917;, + 0.898283;0.420694;, + 0.969302;0.391091;, + 0.975987;0.390294;, + 0.885945;0.429560;, + 0.889043;0.429168;, + 0.894671;0.428572;, + 0.897201;0.428368;, + 0.969784;0.383876;, + 0.975597;0.383182;, + 0.888458;0.434587;, + 0.890191;0.434371;, + 0.893483;0.434023;, + 0.895042;0.433891;, + 0.970570;0.378374;, + 0.973970;0.377966;, + 0.890699;0.436626;, + 0.892918;0.436391;, + 0.873590;0.378201;, + 0.876754;0.377927;, + 0.882197;0.377665;, + 0.884478;0.377676;, + 0.983808;0.432077;, + 0.989434;0.431709;, + 0.874466;0.383837;, + 0.877019;0.383608;, + 0.881358;0.383399;, + 0.883146;0.383419;, + 0.984483;0.426530;, + 0.988968;0.426236;, + 0.873741;0.388449;, + 0.876240;0.388241;, + 0.880620;0.388030;, + 0.882501;0.388027;, + 0.984975;0.421784;, + 0.989502;0.421487;, + 0.872297;0.392437;, + 0.875400;0.392181;, + 0.880844;0.391919;, + 0.883183;0.391913;, + 0.984828;0.418156;, + 0.990454;0.417787;, + 0.872256;0.398460;, + 0.875112;0.398216;, + 0.880061;0.397978;, + 0.882153;0.397983;, + 0.985540;0.412506;, + 0.990654;0.412170;, + 0.873061;0.403065;, + 0.875184;0.402884;, + 0.878886;0.402706;, + 0.880465;0.402709;, + 0.986482;0.407841;, + 0.990308;0.407589;, + 0.872091;0.406953;, + 0.874492;0.406754;, + 0.878711;0.406551;, + 0.880528;0.406547;, + 0.986642;0.404240;, + 0.991003;0.403953;, + 0.870567;0.409862;, + 0.873600;0.409628;, + 0.879042;0.409366;, + 0.881452;0.409338;, + 0.986290;0.401667;, + 0.991915;0.401297;, + 0.994179;0.395552;, + 0.991526;0.395405;, + 0.878083;0.415017;, + 0.880210;0.414985;, + 0.987050;0.396345;, + 0.991941;0.396022;, + 0.872625;0.419247;, + 0.874082;0.419141;, + 0.876850;0.419008;, + 0.878160;0.418981;, + 0.987960;0.392274;, + 0.990821;0.392084;, + 0.874408;0.420834;, + 0.876274;0.420745;, + 0.914444;0.330564;, + 0.962526;0.444760;, + 0.947098;0.447390;, + 0.979132;0.443610;, + 0.985271;0.454609;, + 0.930510;0.349332;, + 0.967355;0.470956;, + 0.895790;0.329672;, + 0.886980;0.274433;, + 0.919031;0.270101;, + 0.979186;0.534000;, + 0.947140;0.538822;, + 0.957002;0.521258;, + 0.942677;0.521568;, + 0.893105;0.283020;, + 0.900449;0.283372;, + 0.922519;0.283117;, + 0.928835;0.282544;, + 0.874763;0.291310;, + 0.881797;0.290567;, + 0.984320;0.517049;, + 0.965323;0.519657;, + 0.518646;0.336598;, + 0.519827;0.371410;, + 0.671119;0.374923;, + 0.486141;0.378023;, + 0.588878;0.384537;, + 0.569369;0.436791;, + 0.534201;0.395395;, + 0.634315;0.390683;, + 0.607304;0.371257;, + 0.535522;0.425621;, + 0.498701;0.433986;, + 0.570523;0.354195;, + 0.589889;0.363950;, + 0.579469;0.482740;, + 0.614731;0.411675;, + 0.665839;0.411302;, + 0.615331;0.353206;, + 0.514578;0.482433;, + 0.498517;0.482369;, + 0.698304;0.479598;, + 0.614112;0.483887;, + 0.645466;0.479147;, + 0.715264;0.526177;, + 0.613551;0.534271;, + 0.531096;0.486869;, + 0.661319;0.486708;, + 0.533898;0.532181;, + 0.661506;0.529282;, + 0.504149;0.531138;, + 0.578216;0.532151;, + 0.715484;0.485370;, + 0.707527;0.484666;, + 0.579350;0.488162;, + 0.611873;0.490245;, + 0.684034;0.484824;, + 0.499835;0.486315;, + 0.635407;0.528739;, + 0.636344;0.485738;, + 0.685374;0.525285;, + 0.485483;0.536544;, + 0.504181;0.535788;, + 0.662302;0.538686;, + 0.686436;0.536711;, + 0.619347;0.535324;, + 0.637355;0.536477;, + 0.534074;0.539453;, + 0.580776;0.536237;, + 0.681936;0.480111;, + 0.716394;0.477543;, + 0.543261;0.485154;, + 0.512380;0.507259;, + 0.504256;0.507372;, + 0.707913;0.505918;, + 0.715722;0.505571;, + 0.553334;0.507820;, + 0.578888;0.508498;, + 0.595809;0.509229;, + 0.612006;0.510097;, + 0.636064;0.506550;, + 0.642318;0.506299;, + 0.693723;0.505835;, + 0.684686;0.505729;, + 0.670350;0.505681;, + 0.629570;0.506812;, + 0.529308;0.507480;, + 0.536796;0.507313;, + 0.661416;0.507466;, + 0.517391;0.595133;, + 0.564857;0.592438;, + 0.620836;0.580957;, + 0.510599;0.715034;, + 0.533576;0.715994;, + 0.581447;0.576337;, + 0.651435;0.606044;, + 0.671670;0.716734;, + 0.561921;0.715897;, + 0.698810;0.603964;, + 0.674236;0.605860;, + 0.714006;0.590496;, + 0.634894;0.593138;, + 0.573783;0.592411;, + 0.540258;0.592834;, + 0.504639;0.596143;, + 0.509154;0.659816;, + 0.499862;0.659718;, + 0.514719;0.660512;, + 0.521908;0.660850;, + 0.535305;0.660098;, + 0.572964;0.654723;, + 0.560465;0.658285;, + 0.662012;0.654201;, + 0.650061;0.654890;, + 0.638790;0.656414;, + 0.548662;0.659348;, + 0.673319;0.653810;, + 0.686816;0.653084;, + 0.698475;0.652173;, + 0.586011;0.659448;, + 0.579484;0.655725;, + 0.541523;0.575780;, + 0.545091;0.556142;, + 0.563590;0.570593;, + 0.522875;0.573126;, + 0.553099;0.375229;, + 0.578355;0.410788;, + 0.715892;0.425770;, + 0.599584;0.345902;, + 0.869675;0.267770;, + 0.891620;0.274340;, + 0.956631;0.542084;, + 0.936131;0.537141;, + 0.875823;0.291903;, + 0.893307;0.290193;, + 0.959778;0.518762;, + 0.919671;0.294804;, + 0.874479;0.328054;, + 0.905832;0.366700;, + 0.991250;0.437386;, + 0.918895;0.367352;, + 0.973930;0.494549;, + 0.935919;0.443871;, + 0.950260;0.484642;, + 0.995481;0.435612;, + 0.924402;0.321874;, + 0.936502;0.475754;, + 0.934527;0.502788;, + 0.947699;0.339652;, + 0.925497;0.472065;, + 0.951238;0.332417;, + 0.899767;0.368320;, + 0.915033;0.365409;, + 0.903303;0.370687;, + 0.885310;0.370839;, + 0.916506;0.360664;, + 0.886275;0.368562;, + 0.881875;0.374620;, + 0.895343;0.372597;, + 0.976255;0.439156;, + 0.952245;0.441938;, + 0.942662;0.443125;, + 0.984457;0.438215;, + 0.987884;0.470638;, + 0.988977;0.491286;, + 0.957438;0.482110;, + 0.956048;0.499888;, + 0.928789;0.362833;, + 0.947826;0.469637;, + 0.954265;0.468662;, + 0.925919;0.332234;, + 0.933349;0.473352;, + 0.927207;0.467318;, + 0.938676;0.486689;, + 0.920476;0.476691;, + 0.942098;0.355717;, + 0.917880;0.468511;, + 0.911620;0.470496;, + 0.948399;0.350490;, + 0.927114;0.461639;, + 0.948339;0.363541;, + 0.915516;0.454745;, + 0.911867;0.455840;, + 0.952128;0.361098;, + 0.919864;0.450733;, + 0.954704;0.366563;, + 0.910633;0.446448;, + 0.909327;0.446777;, + 0.956207;0.366122;, + 0.912421;0.444793;, + 0.898308;0.365823;, + 0.910559;0.369492;, + 0.888924;0.373638;, + 0.875394;0.375543;, + 0.925274;0.366156;, + 0.959696;0.441092;, + 0.969126;0.439797;, + 0.946551;0.435660;, + 0.944197;0.435084;, + 0.924834;0.372188;, + 0.927874;0.369346;, + 0.936435;0.437653;, + 0.942611;0.437033;, + 0.918336;0.376837;, + 0.920307;0.378600;, + 0.924728;0.377903;, + 0.927179;0.375442;, + 0.936819;0.431756;, + 0.941743;0.431260;, + 0.918002;0.382171;, + 0.920028;0.383564;, + 0.924491;0.382858;, + 0.926928;0.380758;, + 0.937546;0.426583;, + 0.942517;0.426082;, + 0.917018;0.386350;, + 0.919551;0.388025;, + 0.925096;0.387150;, + 0.928109;0.384601;, + 0.936815;0.422845;, + 0.942991;0.422224;, + 0.917843;0.391984;, + 0.920124;0.393698;, + 0.925165;0.392903;, + 0.927926;0.390393;, + 0.936796;0.416961;, + 0.942410;0.416396;, + 0.919169;0.396797;, + 0.920867;0.398064;, + 0.924640;0.397465;, + 0.926715;0.395600;, + 0.937739;0.411927;, + 0.941942;0.411503;, + 0.918694;0.400689;, + 0.920646;0.402013;, + 0.924945;0.401331;, + 0.927293;0.399326;, + 0.937422;0.408184;, + 0.942210;0.407701;, + 0.917571;0.403505;, + 0.920137;0.404827;, + 0.925683;0.403949;, + 0.928663;0.401749;, + 0.936576;0.405558;, + 0.942753;0.404935;, + 0.918567;0.408659;, + 0.920806;0.409677;, + 0.925629;0.408910;, + 0.928213;0.407126;, + 0.936823;0.399965;, + 0.942195;0.399422;, + 0.920804;0.412883;, + 0.922075;0.413388;, + 0.924898;0.412934;, + 0.926450;0.411976;, + 0.938017;0.395490;, + 0.941162;0.395171;, + 0.922702;0.414751;, + 0.924606;0.414444;, + 0.901020;0.376297;, + 0.903892;0.378556;, + 0.910249;0.377557;, + 0.913734;0.374299;, + 0.952605;0.433562;, + 0.959684;0.432851;, + 0.902829;0.384176;, + 0.905088;0.386198;, + 0.910156;0.385399;, + 0.912966;0.382578;, + 0.953165;0.425379;, + 0.958810;0.424811;, + 0.902468;0.391336;, + 0.904790;0.392933;, + 0.909907;0.392123;, + 0.912701;0.389716;, + 0.953864;0.418645;, + 0.959563;0.418070;, + 0.901359;0.397016;, + 0.904262;0.398936;, + 0.910620;0.397933;, + 0.914074;0.395011;, + 0.953027;0.413502;, + 0.960107;0.412790;, + 0.902334;0.404835;, + 0.904949;0.406801;, + 0.910728;0.405890;, + 0.913893;0.403013;, + 0.953007;0.405443;, + 0.959443;0.404795;, + 0.903877;0.411410;, + 0.905823;0.412862;, + 0.910148;0.412176;, + 0.912527;0.410037;, + 0.954090;0.398652;, + 0.958908;0.398166;, + 0.903351;0.416741;, + 0.905589;0.418259;, + 0.910517;0.417478;, + 0.913209;0.415179;, + 0.953727;0.393522;, + 0.959217;0.392968;, + 0.902077;0.420610;, + 0.905019;0.422126;, + 0.911377;0.421119;, + 0.914793;0.418597;, + 0.952759;0.389894;, + 0.959840;0.389180;, + 0.903247;0.427782;, + 0.905813;0.428948;, + 0.911342;0.428069;, + 0.914305;0.426024;, + 0.953043;0.382263;, + 0.959202;0.381641;, + 0.905831;0.433515;, + 0.907288;0.434093;, + 0.910524;0.433573;, + 0.912302;0.432475;, + 0.954414;0.376274;, + 0.958019;0.375908;, + 0.908014;0.436040;, + 0.910197;0.435688;, + 0.886462;0.378350;, + 0.889248;0.380562;, + 0.895415;0.379631;, + 0.898797;0.376490;, + 0.969164;0.432079;, + 0.976032;0.431427;, + 0.888116;0.385590;, + 0.890308;0.387567;, + 0.895226;0.386822;, + 0.897951;0.384102;, + 0.969812;0.424541;, + 0.975288;0.424020;, + 0.887686;0.392198;, + 0.889939;0.393763;, + 0.894903;0.393008;, + 0.897614;0.390688;, + 0.970571;0.418336;, + 0.976099;0.417809;, + 0.886541;0.397415;, + 0.889358;0.399297;, + 0.895526;0.398363;, + 0.898877;0.395548;, + 0.969828;0.413622;, + 0.976697;0.412968;, + 0.887382;0.404568;, + 0.889919;0.406492;, + 0.895526;0.405643;, + 0.898596;0.402871;, + 0.969914;0.406230;, + 0.976158;0.405636;, + 0.888797;0.410616;, + 0.890686;0.412037;, + 0.894882;0.411398;, + 0.897189;0.409337;, + 0.971047;0.399978;, + 0.975720;0.399531;, + 0.888220;0.415505;, + 0.890391;0.416991;, + 0.895172;0.416264;, + 0.897783;0.414049;, + 0.970763;0.395271;, + 0.976088;0.394763;, + 0.886935;0.419043;, + 0.889789;0.420533;, + 0.895957;0.419595;, + 0.899271;0.417168;, + 0.969873;0.391947;, + 0.976742;0.391292;, + 0.887972;0.425601;, + 0.890462;0.426749;, + 0.895826;0.425931;, + 0.898700;0.423963;, + 0.970247;0.384942;, + 0.976222;0.384371;, + 0.890410;0.430892;, + 0.891823;0.431463;, + 0.894963;0.430978;, + 0.896688;0.429923;, + 0.971646;0.379415;, + 0.975143;0.379079;, + 0.892499;0.433232;, + 0.894616;0.432903;, + 0.873872;0.377973;, + 0.876220;0.379989;, + 0.881417;0.379511;, + 0.884266;0.377016;, + 0.984894;0.432226;, + 0.990673;0.431971;, + 0.874913;0.383392;, + 0.876760;0.385179;, + 0.880904;0.384796;, + 0.883200;0.382625;, + 0.985712;0.426784;, + 0.990320;0.426580;, + 0.874264;0.388323;, + 0.876163;0.389764;, + 0.880345;0.389374;, + 0.882630;0.387543;, + 0.986773;0.422001;, + 0.991425;0.421794;, + 0.873056;0.392136;, + 0.875429;0.393874;, + 0.880627;0.393393;, + 0.883450;0.391174;, + 0.986405;0.418515;, + 0.992184;0.418259;, + 0.873392;0.397396;, + 0.875529;0.399156;, + 0.880254;0.398719;, + 0.882841;0.396521;, + 0.986871;0.413082;, + 0.992125;0.412849;, + 0.874295;0.401938;, + 0.875886;0.403239;, + 0.879422;0.402908;, + 0.881366;0.401276;, + 0.988130;0.408461;, + 0.992063;0.408285;, + 0.873570;0.405513;, + 0.875399;0.406883;, + 0.879428;0.406507;, + 0.881628;0.404760;, + 0.988142;0.404988;, + 0.992623;0.404789;, + 0.872311;0.408050;, + 0.874716;0.409457;, + 0.879914;0.408973;, + 0.882707;0.407081;, + 0.987578;0.402524;, + 0.993359;0.402267;, + 0.872840;0.412876;, + 0.874937;0.413976;, + 0.879457;0.413552;, + 0.881880;0.412028;, + 0.988259;0.397367;, + 0.993286;0.397142;, + 0.874650;0.416931;, + 0.875841;0.417487;, + 0.878486;0.417234;, + 0.879940;0.416425;, + 0.989694;0.393267;, + 0.992637;0.393134;, + 0.876305;0.418781;, + 0.878089;0.418609;, + 0.911057;0.330810;, + 0.962285;0.444429;, + 0.946781;0.446617;, + 0.979370;0.443607;, + 0.986266;0.454302;, + 0.928386;0.343665;, + 0.967542;0.470029;, + 0.896709;0.331334;, + 0.879637;0.273628;, + 0.911211;0.271340;, + 0.978944;0.536142;, + 0.945667;0.539949;, + 0.955485;0.522522;, + 0.942009;0.522236;, + 0.891179;0.290655;, + 0.898435;0.289028;, + 0.916592;0.283109;, + 0.923544;0.279476;, + 0.872025;0.285035;, + 0.877537;0.287973;, + 0.984743;0.519101;, + 0.964298;0.521165;, + 0.517879;0.337303;, + 0.520333;0.371133;, + 0.671348;0.375798;, + 0.485728;0.377416;, + 0.588111;0.385241;, + 0.568603;0.437496;, + 0.533434;0.396100;, + 0.634543;0.391558;, + 0.608087;0.371187;, + 0.877145;0.707672;, + 0.960400;0.709690;, + 0.077470;0.007941;, + 0.118900;0.021439;, + 0.160343;0.007951;, + 0.096191;0.017550;, + 0.140289;0.017968;, + 0.746671;0.625954;, + 0.734244;0.671234;, + 0.732498;0.666622;, + 0.900272;0.786620;, + 0.731710;0.674849;, + 0.736027;0.666579;, + 0.900272;0.728227;, + 0.732977;0.667789;, + 0.734000;0.718795;, + 0.761074;0.747759;, + 0.736147;0.623785;, + 0.737496;0.718913;, + 0.734226;0.717671;, + 0.732523;0.718817;, + 0.810386;0.782411;, + 0.734467;0.716557;, + 0.851573;0.787367;, + 0.870436;0.732683;, + 0.553889;0.962996;, + 0.734131;0.719579;, + 0.720172;0.621381;, + 0.735588;0.646949;, + 0.030986;0.280838;, + 0.076380;0.281037;, + 0.076934;0.343481;, + 0.096103;0.280763;, + 0.095504;0.343480;, + 0.032738;0.343592;, + 0.000699;0.307701;, + 0.020304;0.311989;, + 0.047293;0.346485;, + 0.843288;0.736734;, + 0.053339;0.280612;, + 0.736338;0.664520;, + 0.725489;0.717083;, + 0.744737;0.664570;, + 0.721900;0.673406;, + 0.745925;0.715421;, + 0.562853;0.971381;, + 0.737065;0.715344;, + 0.733007;0.717941;, + 0.727989;0.737487;, + 0.733483;0.671167;, + 0.719031;0.668882;, + 0.834806;0.663521;, + 0.835007;0.658223;, + 0.834090;0.664155;, + 0.833989;0.663805;, + 0.829690;0.670101;, + 0.835801;0.668607;, + 0.835224;0.668707;, + 0.835029;0.670638;, + 0.835300;0.663893;, + 0.823120;0.662826;, + 0.832812;0.669285;, + 0.834416;0.664233;, + 0.835037;0.669733;, + 0.834887;0.666282;, + 0.561345;0.969626;, + 0.834183;0.666440;, + 0.834986;0.637076;, + 0.834482;0.664408;, + 0.835577;0.670567;, + 0.833537;0.664226;, + 0.834299;0.670158;, + 0.834830;0.672989;, + 0.833870;0.666754;, + 0.744960;0.730714;, + 0.834660;0.670688;, + 0.834070;0.669709;, + 0.832908;0.665243;, + 0.835705;0.664286;, + 0.737865;0.662673;, + 0.785973;0.667074;, + 0.787948;0.715301;, + 0.783925;0.625418;, + 0.783915;0.623808;, + 0.788056;0.716995;, + 0.784784;0.667199;, + 0.776092;0.624747;, + 0.775797;0.671137;, + 0.776148;0.714559;, + 0.786121;0.625026;, + 0.786733;0.665233;, + 0.789037;0.713793;, + 0.789604;0.625259;, + 0.792483;0.668681;, + 0.795224;0.714966;, + 0.789775;0.626794;, + 0.791308;0.716656;, + 0.788398;0.671637;, + 0.794055;0.624668;, + 0.793033;0.715686;, + 0.793153;0.675128;, + 0.789065;0.672254;, + 0.790982;0.624697;, + 0.788096;0.715701;, + 0.787237;0.625265;, + 0.782224;0.716131;, + 0.785418;0.669593;, + 0.786326;0.625266;, + 0.788118;0.668707;, + 0.790773;0.716699;, + 0.781179;0.626686;, + 0.783592;0.674061;, + 0.784872;0.713970;, + 0.792927;0.627680;, + 0.788729;0.713246;, + 0.790605;0.673075;, + 0.790030;0.625399;, + 0.791012;0.673650;, + 0.792563;0.715100;, + 0.794127;0.624315;, + 0.794834;0.671248;, + 0.795672;0.713800;, + 0.789358;0.626194;, + 0.791458;0.670782;, + 0.793092;0.716678;, + 0.788395;0.624014;, + 0.787444;0.664515;, + 0.787465;0.716819;, + 0.787466;0.627272;, + 0.786838;0.716115;, + 0.782936;0.672655;, + 0.789318;0.623431;, + 0.791531;0.717724;, + 0.791033;0.671303;, + 0.789060;0.669716;, + 0.787419;0.626528;, + 0.791040;0.712023;, + 0.785307;0.628266;, + 0.786651;0.674963;, + 0.788611;0.715906;, + 0.794461;0.691096;, + 0.735370;0.683056;, + 0.774251;0.692068;, + 0.799990;0.689774;, + 0.888227;0.790976;, + 0.835395;0.665671;, + 0.836233;0.664675;, + 0.627047;0.766014;, + 0.744572;0.715680;, + 0.736329;0.716113;, + 0.734454;0.717191;, + 0.735098;0.716966;, + 0.990159;0.782411;, + 0.734561;0.716147;, + 0.948971;0.787367;, + 0.930109;0.732683;, + 0.553889;0.962996;, + 0.734728;0.719064;, + 0.720913;0.621553;, + 0.735588;0.646949;, + 0.202979;0.278588;, + 0.159030;0.278453;, + 0.158950;0.343644;, + 0.137414;0.278462;, + 0.138487;0.343650;, + 0.204731;0.346559;, + 0.233593;0.308306;, + 0.216053;0.311410;, + 0.194414;0.346637;, + 0.957257;0.736734;, + 0.190507;0.280790;, + 0.742980;0.665126;, + 0.723160;0.707602;, + 0.740648;0.670873;, + 0.723155;0.622981;, + 0.739766;0.716934;, + 0.562853;0.971381;, + 0.733230;0.718871;, + 0.734658;0.719848;, + 0.659531;0.747477;, + 0.734644;0.670166;, + 0.721758;0.660849;, + 0.834509;0.661387;, + 0.835535;0.668135;, + 0.835670;0.666180;, + 0.834486;0.664209;, + 0.835569;0.668806;, + 0.833301;0.672000;, + 0.833602;0.671423;, + 0.834827;0.669711;, + 0.835528;0.660376;, + 0.834968;0.660657;, + 0.834747;0.664916;, + 0.834723;0.664911;, + 0.834790;0.666129;, + 0.834147;0.668202;, + 0.561345;0.969626;, + 0.836388;0.669082;, + 0.835301;0.637076;, + 0.834482;0.664408;, + 0.835101;0.665603;, + 0.834303;0.669128;, + 0.835741;0.665606;, + 0.833432;0.665737;, + 0.834464;0.665420;, + 0.642311;0.740696;, + 0.834776;0.666456;, + 0.834707;0.669011;, + 0.834423;0.666673;, + 0.833723;0.664507;, + 0.743295;0.664272;, + 0.778282;0.671219;, + 0.780253;0.710248;, + 0.775491;0.629282;, + 0.775715;0.625039;, + 0.775269;0.711772;, + 0.775669;0.666770;, + 0.776430;0.624558;, + 0.773472;0.669872;, + 0.782015;0.718525;, + 0.776570;0.627422;, + 0.778013;0.664842;, + 0.779315;0.713218;, + 0.789332;0.622118;, + 0.789420;0.664889;, + 0.792645;0.717509;, + 0.786473;0.622338;, + 0.792480;0.716735;, + 0.789424;0.671332;, + 0.789729;0.625677;, + 0.790252;0.715710;, + 0.789600;0.668773;, + 0.791820;0.669964;, + 0.789582;0.625337;, + 0.793545;0.715484;, + 0.788233;0.624304;, + 0.790431;0.718265;, + 0.790284;0.670447;, + 0.785843;0.626007;, + 0.782577;0.667710;, + 0.783500;0.716741;, + 0.790782;0.625718;, + 0.792564;0.716505;, + 0.791922;0.671684;, + 0.794635;0.627982;, + 0.794680;0.715878;, + 0.796221;0.672350;, + 0.788721;0.627413;, + 0.789794;0.670452;, + 0.791182;0.714226;, + 0.790307;0.624378;, + 0.792533;0.671815;, + 0.793801;0.716549;, + 0.784641;0.627340;, + 0.786011;0.670554;, + 0.787199;0.717576;, + 0.790351;0.663633;, + 0.793786;0.630159;, + 0.792190;0.703334;, + 0.795066;0.628478;, + 0.796832;0.714275;, + 0.796356;0.670301;, + 0.791512;0.670914;, + 0.793029;0.706406;, + 0.784249;0.635497;, + 0.771596;0.664582;, + 0.771802;0.630441;, + 0.773771;0.712776;, + 0.788489;0.625167;, + 0.799017;0.715708;, + 0.789250;0.665407;, + 0.796848;0.652952;, + 0.734108;0.683056;, + 0.774251;0.692068;, + 0.799990;0.689774;, + 0.912318;0.790976;, + 0.835605;0.668551;, + 0.834549;0.669792;, + 0.902768;0.883465;, + 0.904724;0.885479;, + 0.902228;0.888187;, + 0.898316;0.888187;, + 0.895821;0.885479;, + 0.897777;0.883465;, + 0.898265;0.798929;, + 0.902280;0.798929;, + 0.904863;0.804096;, + 0.902855;0.809357;, + 0.897690;0.809357;, + 0.895682;0.804096;, + 0.902280;0.790246;, + 0.898265;0.790246;, + 0.902880;0.857875;, + 0.905375;0.862172;, + 0.902768;0.863497;, + 0.897777;0.863497;, + 0.895169;0.862172;, + 0.897665;0.857875;, + 0.897777;0.869929;, + 0.902768;0.869929;, + 0.902768;0.875028;, + 0.897777;0.875028;, + 0.893694;0.933727;, + 0.885232;0.932009;, + 0.892792;0.930218;, + 0.898382;0.930471;, + 0.902162;0.930471;, + 0.907753;0.930218;, + 0.915313;0.932009;, + 0.906851;0.933727;, + 0.906851;0.948663;, + 0.906851;0.952882;, + 0.893694;0.952882;, + 0.893694;0.948663;, + 0.898382;0.921391;, + 0.902162;0.921391;, + 0.902162;0.926208;, + 0.898382;0.926208;, + 0.904359;0.976397;, + 0.908446;0.983814;, + 0.904359;0.987846;, + 0.896186;0.987846;, + 0.892099;0.983814;, + 0.896186;0.976397;, + 0.890317;0.960901;, + 0.887826;0.955517;, + 0.893694;0.954704;, + 0.906851;0.954704;, + 0.912719;0.955517;, + 0.910227;0.960901;, + 0.904359;0.964521;, + 0.896186;0.964521;, + 0.902162;0.914181;, + 0.902162;0.917807;, + 0.898382;0.917807;, + 0.898382;0.914181;, + 0.898382;0.906892;, + 0.895345;0.904106;, + 0.897235;0.900407;, + 0.903310;0.900407;, + 0.905199;0.904106;, + 0.902162;0.906892;, + 0.893278;0.895433;, + 0.893172;0.893912;, + 0.895173;0.891507;, + 0.898316;0.890593;, + 0.902228;0.890593;, + 0.905371;0.891507;, + 0.907373;0.893912;, + 0.907267;0.895433;, + 0.903310;0.896025;, + 0.897235;0.896025;, + 0.809585;0.995319;, + 0.809585;0.995319;, + 0.796174;0.997421;, + 0.680570;0.784109;, + 0.928526;0.597825;, + 0.911482;0.597825;, + 0.707399;0.779975;, + 0.796174;0.997421;, + 0.560395;0.749918;, + 0.553202;0.749918;, + 0.907074;0.649439;, + 0.911482;0.636891;, + 0.928526;0.636891;, + 0.932934;0.649439;, + 0.543036;0.821058;, + 0.553587;0.805318;, + 0.560009;0.805318;, + 0.570560;0.821058;, + 0.896186;0.998590;, + 0.904359;0.998590;, + 0.853099;0.996938;, + 0.853099;0.996938;, + 0.883254;0.975313;, + 0.880549;0.981966;, + 0.868039;0.983920;, + 0.861578;0.975339;, + 0.868286;0.967611;, + 0.877687;0.970762;, + 0.723494;0.934189;, + 0.746615;0.939569;, + 0.750123;0.952141;, + 0.752018;0.752872;, + 0.760772;0.738986;, + 0.765195;0.741466;, + 0.806068;0.843381;, + 0.808596;0.847477;, + 0.810932;0.854328;, + 0.813587;0.861508;, + 0.814928;0.876023;, + 0.811185;0.878414;, + 0.800855;0.868571;, + 0.799856;0.854877;, + 0.699911;0.911896;, + 0.703264;0.913021;, + 0.706468;0.908363;, + 0.706162;0.903342;, + 0.714873;0.897777;, + 0.723917;0.904455;, + 0.716064;0.916632;, + 0.767956;0.739408;, + 0.806619;0.772049;, + 0.820056;0.785642;, + 0.814083;0.790165;, + 0.809808;0.792812;, + 0.806591;0.792094;, + 0.804323;0.784892;, + 0.700241;0.822974;, + 0.693042;0.817639;, + 0.688890;0.819799;, + 0.818973;0.810336;, + 0.819099;0.812192;, + 0.836745;0.213089;, + 0.835593;0.219284;, + 0.816293;0.818786;, + 0.815805;0.820421;, + 0.814192;0.825581;, + 0.811307;0.821517;, + 0.812778;0.808834;, + 0.816886;0.806200;, + 0.878804;0.857303;, + 0.881376;0.861716;, + 0.878829;0.869526;, + 0.875890;0.874631;, + 0.874610;0.876410;, + 0.872738;0.877913;, + 0.872011;0.878691;, + 0.875817;0.878190;, + 0.870373;0.868288;, + 0.874192;0.861851;, + 0.878967;0.896213;, + 0.879498;0.898184;, + 0.884256;0.898560;, + 0.888144;0.899414;, + 0.886178;0.903064;, + 0.880760;0.905962;, + 0.878120;0.900733;, + 0.858925;0.929667;, + 0.857641;0.934125;, + 0.847363;0.935745;, + 0.842772;0.924998;, + 0.848758;0.915479;, + 0.854634;0.921769;, + 0.864692;0.915242;, + 0.870238;0.910052;, + 0.873209;0.915066;, + 0.875924;0.920533;, + 0.868938;0.923141;, + 0.854440;0.942270;, + 0.864958;0.940644;, + 0.873896;0.944310;, + 0.874080;0.948382;, + 0.868064;0.948617;, + 0.857362;0.946171;, + 0.892692;0.920061;, + 0.887110;0.919186;, + 0.884115;0.913800;, + 0.889644;0.911032;, + 0.892703;0.913806;, + 0.892756;0.917449;, + 0.801819;0.909866;, + 0.788935;0.898076;, + 0.796995;0.887735;, + 0.813905;0.896644;, + 0.837738;0.930561;, + 0.842607;0.941175;, + 0.845069;0.945218;, + 0.847347;0.950804;, + 0.841881;0.956079;, + 0.812113;0.950778;, + 0.808814;0.938359;, + 0.825141;0.930378;, + 0.827105;0.920651;, + 0.830349;0.918516;, + 0.890228;0.876990;, + 0.888016;0.878593;, + 0.885001;0.878102;, + 0.883550;0.877809;, + 0.883811;0.876027;, + 0.884569;0.874258;, + 0.887538;0.871524;, + 0.890442;0.871983;, + 0.889999;0.881860;, + 0.892460;0.884911;, + 0.889233;0.885429;, + 0.886009;0.883818;, + 0.886436;0.881270;, + 0.883464;0.873827;, + 0.882424;0.875494;, + 0.880876;0.876215;, + 0.879842;0.875642;, + 0.881287;0.873936;, + 0.862513;0.892170;, + 0.861865;0.879474;, + 0.866388;0.875409;, + 0.873781;0.879035;, + 0.873094;0.883435;, + 0.873229;0.886138;, + 0.874904;0.888885;, + 0.874217;0.893384;, + 0.868208;0.898628;, + 0.871998;0.885239;, + 0.871976;0.882555;, + 0.872387;0.881660;, + 0.872785;0.883681;, + 0.872319;0.885711;, + 0.876354;0.881234;, + 0.875097;0.881843;, + 0.874745;0.879917;, + 0.876504;0.878342;, + 0.877554;0.878922;, + 0.875559;0.894556;, + 0.877148;0.894288;, + 0.881282;0.895325;, + 0.881391;0.896768;, + 0.876803;0.896405;, + 0.872657;0.890011;, + 0.873574;0.892165;, + 0.874760;0.894155;, + 0.874214;0.892318;, + 0.872608;0.889474;, + 0.877867;0.881632;, + 0.877351;0.880920;, + 0.878578;0.878622;, + 0.880091;0.877871;, + 0.879672;0.879604;, + 0.880438;0.882205;, + 0.882153;0.882616;, + 0.881530;0.885276;, + 0.879267;0.886324;, + 0.878742;0.884308;, + 0.882323;0.888704;, + 0.885747;0.890207;, + 0.883744;0.892684;, + 0.879543;0.891763;, + 0.880101;0.889732;, + 0.874627;0.885988;, + 0.875759;0.885288;, + 0.876435;0.886058;, + 0.876968;0.888077;, + 0.876348;0.890096;, + 0.874900;0.890194;, + 0.874116;0.887997;, + 0.885181;0.866347;, + 0.889779;0.863299;, + 0.887402;0.868633;, + 0.884410;0.871352;, + 0.882180;0.871419;, + 0.861419;0.793048;, + 0.856019;0.794881;, + 0.848222;0.791381;, + 0.840650;0.788120;, + 0.868772;0.227338;, + 0.871877;0.218340;, + 0.882605;0.222061;, + 0.884179;0.229250;, + 0.877209;0.231043;, + 0.858143;0.802183;, + 0.858817;0.805122;, + 0.851020;0.801622;, + 0.850346;0.798683;, + 0.841668;0.841308;, + 0.849162;0.841548;, + 0.854411;0.840199;, + 0.855954;0.843593;, + 0.854116;0.848424;, + 0.848984;0.849435;, + 0.841452;0.846086;, + 0.837548;0.841441;, + 0.864295;0.820660;, + 0.867352;0.822653;, + 0.874914;0.824710;, + 0.874712;0.830074;, + 0.868457;0.834824;, + 0.866846;0.831410;, + 0.866617;0.828470;, + 0.900825;0.238070;, + 0.899286;0.230881;, + 0.792524;0.758021;, + 0.705076;0.847899;, + 0.705513;0.842839;, + 0.714572;0.852197;, + 0.709570;0.865796;, + 0.708642;0.862587;, + 0.705810;0.858129;, + 0.704047;0.856128;, + 0.704582;0.853479;, + 0.659696;0.842488;, + 0.656503;0.844340;, + 0.656245;0.853573;, + 0.762387;0.807790;, + 0.769007;0.814582;, + 0.759728;0.829314;, + 0.744754;0.840151;, + 0.735158;0.837187;, + 0.661040;0.868118;, + 0.662092;0.873280;, + 0.667446;0.880470;, + 0.671850;0.884983;, + 0.693052;0.825544;, + 0.688060;0.821769;, + 0.690343;0.819868;, + 0.697497;0.825214;, + 0.697128;0.830256;, + 0.660014;0.869543;, + 0.663290;0.874126;, + 0.667721;0.879178;, + 0.670059;0.882396;, + 0.668880;0.883441;, + 0.665559;0.881576;, + 0.660559;0.874149;, + 0.654537;0.855994;, + 0.653216;0.850818;, + 0.654017;0.841614;, + 0.656962;0.838804;, + 0.656277;0.843395;, + 0.654654;0.851382;, + 0.706763;0.916055;, + 0.704907;0.914299;, + 0.708048;0.909580;, + 0.709904;0.911336;, + 0.673717;0.828513;, + 0.666418;0.834185;, + 0.676727;0.821513;, + 0.674409;0.823336;, + 0.671732;0.825354;, + 0.666087;0.828624;, + 0.662138;0.831262;, + 0.665145;0.829193;, + 0.672670;0.823785;, + 0.686417;0.897062;, + 0.684116;0.895030;, + 0.679361;0.888850;, + 0.680547;0.887802;, + 0.685477;0.891393;, + 0.676015;0.884643;, + 0.678762;0.886893;, + 0.683705;0.892958;, + 0.684863;0.895504;, + 0.680052;0.889403;, + 0.695233;0.914254;, + 0.696896;0.916164;, + 0.693427;0.914360;, + 0.689562;0.910409;, + 0.688484;0.907834;, + 0.690686;0.909875;, + 0.764102;0.734585;, + 0.759679;0.732105;, + 0.683424;0.899463;, + 0.687842;0.905828;, + 0.691611;0.909855;, + 0.807160;0.984871;, + 0.811076;0.992991;, + 0.796303;0.997435;, + 0.727330;0.775774;, + 0.737141;0.770505;, + 0.781718;0.979152;, + 0.853488;0.992247;, + 0.879600;0.995136;, + 0.884085;0.998182;, + 0.853121;0.996991;, + 0.839008;0.997396;, + 0.609087;0.764632;, + 0.608054;0.773833;, + 0.600940;0.751850;, + 0.607154;0.743363;, + 0.885369;0.580065;, + 0.879410;0.592575;, + 0.868069;0.591687;, + 0.617169;0.768622;, + 0.613975;0.756093;, + 0.734130;0.748148;, + 0.723692;0.752707;, + 0.619519;0.824099;, + 0.624525;0.802560;, + 0.864390;0.635775;, + 0.601057;0.823984;, + 0.603096;0.809459;, + 0.615766;0.831442;, + 0.588944;0.744363;, + 0.581349;0.758888;, + 0.571184;0.743148;, + 0.880440;0.641059;, + 0.889476;0.646513;, + 0.773385;0.772241;, + 0.765851;0.784683;, + 0.620152;0.744959;, + 0.749855;0.729434;, + 0.825102;0.801492;, + 0.822392;0.797440;, + 0.828673;0.792745;, + 0.835934;0.796180;, + 0.836558;0.799146;, + 0.832007;0.799764;, + 0.816657;0.843915;, + 0.814437;0.836935;, + 0.817320;0.832012;, + 0.822209;0.837181;, + 0.825497;0.841743;, + 0.822828;0.843553;, + 0.855544;0.831362;, + 0.859143;0.830035;, + 0.861639;0.829097;, + 0.861907;0.832046;, + 0.856590;0.833373;, + 0.878130;0.813309;, + 0.875581;0.819497;, + 0.870798;0.817379;, + 0.867840;0.813108;, + 0.867186;0.810154;, + 0.872694;0.808236;, + 0.851931;0.212439;, + 0.856292;0.215979;, + 0.853159;0.224970;, + 0.847090;0.227705;, + 0.841223;0.221426;, + 0.842931;0.215151;, + 0.859569;0.950864;, + 0.870221;0.953350;, + 0.872713;0.958843;, + 0.862061;0.956357;, + 0.831396;0.804920;, + 0.835696;0.805432;, + 0.831419;0.806932;, + 0.824765;0.808377;, + 0.824615;0.806530;, + 0.850927;0.803168;, + 0.858731;0.806700;, + 0.861498;0.810894;, + 0.858434;0.811439;, + 0.850713;0.807974;, + 0.845972;0.803898;, + 0.822828;0.832534;, + 0.817294;0.827383;, + 0.817703;0.825787;, + 0.822270;0.829261;, + 0.826417;0.832514;, + 0.845619;0.836729;, + 0.838159;0.836479;, + 0.833506;0.833424;, + 0.837442;0.832998;, + 0.844602;0.833326;, + 0.893943;0.238008;, + 0.861501;0.828439;, + 0.859016;0.829365;, + 0.886979;0.239799;, + 0.825506;0.808906;, + 0.832120;0.807468;, + 0.853968;0.203984;, + 0.845126;0.206762;, + 0.887612;0.209226;, + 0.877060;0.205589;, + 0.872370;0.201897;, + 0.845702;0.805354;, + 0.850683;0.808355;, + 0.858295;0.811864;, + 0.844156;0.238056;, + 0.826793;0.828244;, + 0.823281;0.827308;, + 0.819797;0.824826;, + 0.838144;0.231817;, + 0.872906;0.245257;, + 0.848450;0.832215;, + 0.844955;0.832101;, + 0.837770;0.831792;, + 0.858237;0.244246;, + 0.864579;0.241448;, + 0.672033;0.833431;, + 0.677807;0.830377;, + 0.680709;0.830944;, + 0.679630;0.832272;, + 0.675688;0.836035;, + 0.670993;0.837761;, + 0.663100;0.846806;, + 0.666956;0.844848;, + 0.665079;0.848028;, + 0.663611;0.854284;, + 0.662887;0.859062;, + 0.660499;0.854764;, + 0.667818;0.869181;, + 0.667184;0.864531;, + 0.668931;0.867557;, + 0.673075;0.872891;, + 0.672055;0.874351;, + 0.681144;0.879570;, + 0.682419;0.877888;, + 0.685425;0.879351;, + 0.690262;0.881969;, + 0.691271;0.885215;, + 0.688674;0.886066;, + 0.683347;0.882783;, + 0.690935;0.896052;, + 0.693695;0.894958;, + 0.697324;0.896188;, + 0.699246;0.901554;, + 0.696117;0.906264;, + 0.691436;0.901991;, + 0.709604;0.897148;, + 0.707652;0.895403;, + 0.706068;0.890008;, + 0.707265;0.884132;, + 0.708739;0.879243;, + 0.709690;0.882449;, + 0.709279;0.891750;, + 0.698001;0.848790;, + 0.694731;0.848453;, + 0.695212;0.847373;, + 0.694722;0.842825;, + 0.694640;0.838382;, + 0.698400;0.843269;, + 0.683941;0.825341;, + 0.688958;0.829089;, + 0.689393;0.833098;, + 0.687063;0.830490;, + 0.684377;0.828104;, + 0.681690;0.826964;, + 0.694539;0.855245;, + 0.690615;0.856789;, + 0.688785;0.856515;, + 0.689343;0.854694;, + 0.691759;0.852310;, + 0.695125;0.852587;, + 0.695784;0.859438;, + 0.697654;0.861366;, + 0.696067;0.863077;, + 0.694364;0.862584;, + 0.692101;0.862333;, + 0.691934;0.860897;, + 0.701740;0.863271;, + 0.704339;0.867671;, + 0.702837;0.872650;, + 0.700954;0.870057;, + 0.700777;0.866784;, + 0.700061;0.864978;, + 0.696764;0.887057;, + 0.695813;0.883870;, + 0.697109;0.884063;, + 0.699090;0.882660;, + 0.699974;0.879929;, + 0.701745;0.882398;, + 0.700150;0.887901;, + 0.682791;0.865085;, + 0.686164;0.862035;, + 0.687662;0.862175;, + 0.687917;0.863596;, + 0.688128;0.864328;, + 0.687422;0.865453;, + 0.686734;0.866131;, + 0.686434;0.868148;, + 0.683230;0.868455;, + 0.680190;0.857580;, + 0.685190;0.858012;, + 0.684571;0.859844;, + 0.680929;0.862779;, + 0.676758;0.860502;, + 0.672221;0.839192;, + 0.674948;0.836003;, + 0.678899;0.832260;, + 0.681542;0.834280;, + 0.677631;0.838280;, + 0.671368;0.850586;, + 0.669374;0.852969;, + 0.666111;0.855920;, + 0.663889;0.857693;, + 0.662654;0.854286;, + 0.664069;0.848025;, + 0.669448;0.847198;, + 0.675476;0.874545;, + 0.672524;0.872924;, + 0.668080;0.867719;, + 0.670016;0.865994;, + 0.674082;0.868366;, + 0.675098;0.871712;, + 0.684220;0.876796;, + 0.687623;0.876853;, + 0.689145;0.878057;, + 0.690589;0.880286;, + 0.691315;0.882437;, + 0.689607;0.882089;, + 0.684693;0.879534;, + 0.686810;0.844696;, + 0.690521;0.840850;, + 0.692060;0.839733;, + 0.694180;0.842825;, + 0.694638;0.847394;, + 0.688808;0.848147;, + 0.682379;0.829107;, + 0.683790;0.828069;, + 0.686594;0.830238;, + 0.685183;0.831276;, + 0.685882;0.851965;, + 0.691829;0.851125;, + 0.691147;0.852386;, + 0.688693;0.854737;, + 0.683767;0.854326;, + 0.694711;0.863557;, + 0.693094;0.863536;, + 0.690980;0.862835;, + 0.691446;0.862372;, + 0.693808;0.862659;, + 0.700238;0.866960;, + 0.699964;0.868510;, + 0.699518;0.867847;, + 0.698620;0.865539;, + 0.698097;0.864320;, + 0.699268;0.865078;, + 0.697861;0.880863;, + 0.698608;0.882973;, + 0.696609;0.884348;, + 0.695862;0.882238;, + 0.689170;0.871016;, + 0.688397;0.868920;, + 0.689273;0.869881;, + 0.690624;0.871065;, + 0.690629;0.872304;, + 0.694403;0.875504;, + 0.692846;0.873609;, + 0.693085;0.872105;, + 0.693891;0.872222;, + 0.695408;0.872942;, + 0.696159;0.874720;, + 0.698803;0.876854;, + 0.698569;0.874951;, + 0.698109;0.873383;, + 0.698025;0.873732;, + 0.699234;0.872247;, + 0.700303;0.870748;, + 0.699830;0.873806;, + 0.686162;0.868655;, + 0.685702;0.867312;, + 0.685787;0.866385;, + 0.686247;0.867728;, + 0.688933;0.865106;, + 0.690211;0.864034;, + 0.692367;0.864878;, + 0.691761;0.866467;, + 0.689389;0.866404;, + 0.696289;0.866667;, + 0.698091;0.866703;, + 0.698808;0.869151;, + 0.697715;0.870637;, + 0.696397;0.869990;, + 0.695690;0.868468;, + 0.688500;0.870302;, + 0.690574;0.870874;, + 0.691320;0.872191;, + 0.690675;0.872854;, + 0.689815;0.872503;, + 0.688385;0.871268;, + 0.693553;0.873419;, + 0.695096;0.873894;, + 0.695274;0.874506;, + 0.694662;0.874263;, + 0.692990;0.873850;, + 0.698496;0.872792;, + 0.698611;0.873595;, + 0.697475;0.875110;, + 0.697360;0.874307;, + 0.752419;0.911565;, + 0.768600;0.909906;, + 0.781542;0.921746;, + 0.767724;0.929157;, + 0.744573;0.923751;, + 0.783132;0.826576;, + 0.802348;0.807248;, + 0.805375;0.807970;, + 0.804374;0.820607;, + 0.799209;0.833329;, + 0.745404;0.878402;, + 0.752976;0.864062;, + 0.767966;0.853234;, + 0.777948;0.859594;, + 0.778925;0.873285;, + 0.770940;0.883665;, + 0.754637;0.885236;, + 0.723141;0.869933;, + 0.715669;0.884309;, + 0.707286;0.889890;, + 0.708161;0.880536;, + 0.713583;0.866968;, + 0.827892;0.872505;, + 0.834214;0.872050;, + 0.841195;0.877118;, + 0.842540;0.889659;, + 0.836716;0.899163;, + 0.829049;0.887077;, + 0.880758;0.832548;, + 0.880652;0.824610;, + 0.880761;0.819253;, + 0.883634;0.813028;, + 0.888066;0.810723;, + 0.889764;0.816036;, + 0.885281;0.828016;, + 0.897690;0.818794;, + 0.902855;0.818794;, + 0.907566;0.830695;, + 0.904983;0.835183;, + 0.895561;0.835183;, + 0.892979;0.830695;, + 0.897665;0.850874;, + 0.892954;0.852870;, + 0.895561;0.845903;, + 0.904983;0.845903;, + 0.907591;0.852870;, + 0.902880;0.850874;, + 0.892242;0.792424;, + 0.889659;0.797544;, + 0.885280;0.799848;, + 0.879746;0.794853;, + 0.870430;0.855508;, + 0.866426;0.850510;, + 0.868293;0.845675;, + 0.874568;0.840974;, + 0.874367;0.848880;, + 0.864964;0.864889;, + 0.859859;0.861579;, + 0.855510;0.855004;, + 0.860682;0.853995;, + 0.864797;0.859048;, + 0.845572;0.854480;, + 0.849888;0.860753;, + 0.845250;0.864668;, + 0.837521;0.860045;, + 0.834652;0.852847;, + 0.838065;0.851071;, + 0.827484;0.852926;, + 0.830296;0.860081;, + 0.824296;0.860464;, + 0.821483;0.853309;, + 0.917291;0.975313;, + 0.922858;0.970762;, + 0.932259;0.967611;, + 0.861297;0.974650;, + 0.868039;0.983920;, + 0.919995;0.981966;, + 0.631865;0.755748;, + 0.637632;0.767666;, + 0.750123;0.952141;, + 0.746615;0.939569;, + 0.723494;0.934189;, + 0.628816;0.758604;, + 0.800855;0.868571;, + 0.989360;0.878414;, + 0.985617;0.876023;, + 0.986957;0.861508;, + 0.989613;0.854328;, + 0.991949;0.847477;, + 0.994477;0.843381;, + 0.799856;0.854877;, + 0.716064;0.916632;, + 0.723917;0.904455;, + 0.714873;0.897777;, + 0.706162;0.903342;, + 0.706468;0.908363;, + 0.703264;0.913021;, + 0.699911;0.911896;, + 0.625080;0.756874;, + 0.993953;0.792095;, + 0.990736;0.792812;, + 0.986462;0.790165;, + 0.980489;0.785642;, + 0.991540;0.773290;, + 0.804323;0.784892;, + 0.688890;0.819799;, + 0.693042;0.817639;, + 0.700241;0.822974;, + 0.987767;0.808834;, + 0.989237;0.821517;, + 0.986353;0.825581;, + 0.985491;0.820881;, + 0.985003;0.819246;, + 0.905184;0.219462;, + 0.903939;0.213590;, + 0.981445;0.812192;, + 0.981572;0.810336;, + 0.983659;0.806201;, + 0.930171;0.868288;, + 0.925550;0.878190;, + 0.928534;0.878691;, + 0.927806;0.877913;, + 0.925935;0.876410;, + 0.924655;0.874631;, + 0.921715;0.869526;, + 0.919169;0.861716;, + 0.921740;0.857303;, + 0.926353;0.861851;, + 0.919785;0.905962;, + 0.914367;0.903064;, + 0.912401;0.899414;, + 0.916289;0.898560;, + 0.921047;0.898184;, + 0.921578;0.896213;, + 0.922425;0.900733;, + 0.951787;0.915479;, + 0.957773;0.924998;, + 0.953182;0.935745;, + 0.942904;0.934125;, + 0.941619;0.929668;, + 0.945911;0.921769;, + 0.935853;0.915242;, + 0.931607;0.923141;, + 0.924621;0.920533;, + 0.927335;0.915066;, + 0.930306;0.910052;, + 0.932480;0.948617;, + 0.926465;0.948382;, + 0.926648;0.944310;, + 0.935587;0.940644;, + 0.946105;0.942270;, + 0.943182;0.946171;, + 0.907853;0.920061;, + 0.907789;0.917449;, + 0.907842;0.913806;, + 0.910900;0.911032;, + 0.916429;0.913800;, + 0.913434;0.919187;, + 0.801819;0.909866;, + 0.986639;0.896644;, + 0.796995;0.887735;, + 0.788935;0.898076;, + 0.973440;0.920651;, + 0.825141;0.930378;, + 0.808814;0.938359;, + 0.812113;0.950778;, + 0.841881;0.956079;, + 0.953198;0.950804;, + 0.955475;0.945218;, + 0.957938;0.941175;, + 0.962807;0.930561;, + 0.970195;0.918516;, + 0.910316;0.876990;, + 0.910102;0.871983;, + 0.913007;0.871524;, + 0.915975;0.874258;, + 0.916734;0.876027;, + 0.916994;0.877809;, + 0.915543;0.878102;, + 0.912529;0.878593;, + 0.910545;0.881860;, + 0.914109;0.881270;, + 0.914535;0.883818;, + 0.911312;0.885429;, + 0.908085;0.884911;, + 0.920703;0.875642;, + 0.919669;0.876215;, + 0.918121;0.875494;, + 0.917081;0.873827;, + 0.919258;0.873936;, + 0.926327;0.893384;, + 0.925641;0.888885;, + 0.927316;0.886138;, + 0.927450;0.883435;, + 0.926763;0.879035;, + 0.934157;0.875138;, + 0.938680;0.879474;, + 0.938032;0.892170;, + 0.932337;0.898628;, + 0.927759;0.883681;, + 0.928158;0.881660;, + 0.928568;0.882555;, + 0.928547;0.885239;, + 0.928226;0.885711;, + 0.924191;0.881234;, + 0.922991;0.878922;, + 0.924041;0.878342;, + 0.925799;0.879917;, + 0.925448;0.881843;, + 0.924985;0.894556;, + 0.923742;0.896405;, + 0.919153;0.896768;, + 0.919262;0.895325;, + 0.923396;0.894288;, + 0.927887;0.890011;, + 0.927937;0.889474;, + 0.926330;0.892318;, + 0.925785;0.894155;, + 0.926971;0.892165;, + 0.922678;0.881632;, + 0.920873;0.879604;, + 0.920453;0.877871;, + 0.921967;0.878622;, + 0.923194;0.880920;, + 0.921278;0.886324;, + 0.919014;0.885276;, + 0.918391;0.882616;, + 0.920106;0.882205;, + 0.921802;0.884308;, + 0.921002;0.891763;, + 0.916801;0.892684;, + 0.914798;0.890207;, + 0.918222;0.888704;, + 0.920444;0.889732;, + 0.925645;0.890194;, + 0.924197;0.890096;, + 0.923576;0.888077;, + 0.924110;0.886058;, + 0.924786;0.885288;, + 0.925917;0.885988;, + 0.926428;0.887997;, + 0.916135;0.871352;, + 0.913143;0.868633;, + 0.910766;0.863299;, + 0.915364;0.866347;, + 0.918364;0.871419;, + 0.939125;0.793048;, + 0.959895;0.788120;, + 0.952322;0.791381;, + 0.944526;0.794881;, + 0.852650;0.228909;, + 0.854352;0.222094;, + 0.865952;0.218567;, + 0.869308;0.227096;, + 0.860187;0.230609;, + 0.942402;0.802183;, + 0.950198;0.798683;, + 0.949524;0.801622;, + 0.941728;0.805122;, + 0.959092;0.846086;, + 0.951561;0.849435;, + 0.946429;0.848424;, + 0.944591;0.843593;, + 0.946133;0.840199;, + 0.951383;0.841548;, + 0.958877;0.841308;, + 0.962996;0.841441;, + 0.933526;0.820660;, + 0.836316;0.230455;, + 0.834651;0.237269;, + 0.931203;0.828470;, + 0.933698;0.831410;, + 0.932088;0.834824;, + 0.925832;0.830074;, + 0.925630;0.824710;, + 0.930468;0.822653;, + 0.792524;0.758021;, + 0.705076;0.847899;, + 0.704582;0.853479;, + 0.704047;0.856128;, + 0.705810;0.858129;, + 0.708642;0.862587;, + 0.709570;0.865796;, + 0.714572;0.852197;, + 0.705513;0.842839;, + 0.656503;0.844340;, + 0.659696;0.842488;, + 0.658583;0.844044;, + 0.656245;0.853573;, + 0.762387;0.807790;, + 0.735158;0.837187;, + 0.744754;0.840151;, + 0.759728;0.829314;, + 0.769007;0.814582;, + 0.671850;0.884983;, + 0.667446;0.880470;, + 0.662092;0.873280;, + 0.661040;0.868118;, + 0.697497;0.825214;, + 0.690343;0.819868;, + 0.688060;0.821769;, + 0.693052;0.825544;, + 0.697128;0.830256;, + 0.660014;0.869543;, + 0.660559;0.874149;, + 0.665559;0.881576;, + 0.668880;0.883441;, + 0.670059;0.882396;, + 0.667721;0.879178;, + 0.663290;0.874126;, + 0.656277;0.843395;, + 0.656962;0.838804;, + 0.654017;0.841614;, + 0.653216;0.850818;, + 0.654537;0.855994;, + 0.654654;0.851382;, + 0.708048;0.909580;, + 0.704907;0.914299;, + 0.706763;0.916055;, + 0.709904;0.911336;, + 0.665306;0.835742;, + 0.666418;0.834185;, + 0.673717;0.828513;, + 0.676727;0.821513;, + 0.672670;0.823785;, + 0.665146;0.829193;, + 0.662138;0.831262;, + 0.666087;0.828624;, + 0.671732;0.825354;, + 0.674409;0.823336;, + 0.686417;0.897062;, + 0.685477;0.891393;, + 0.680547;0.887802;, + 0.679361;0.888850;, + 0.684116;0.895030;, + 0.676015;0.884643;, + 0.680052;0.889403;, + 0.684863;0.895504;, + 0.683705;0.892958;, + 0.678762;0.886893;, + 0.688484;0.907834;, + 0.689562;0.910409;, + 0.693427;0.914360;, + 0.696896;0.916164;, + 0.695233;0.914254;, + 0.690686;0.909875;, + 0.626382;0.751791;, + 0.691611;0.909855;, + 0.687843;0.905828;, + 0.683424;0.899463;, + 0.629431;0.748934;, + 0.649842;0.784379;, + 0.661634;0.789005;, + 0.796303;0.997435;, + 0.811076;0.992991;, + 0.807160;0.984871;, + 0.781718;0.979152;, + 0.853121;0.996991;, + 0.916460;0.998182;, + 0.920944;0.995136;, + 0.853488;0.992247;, + 0.839008;0.997396;, + 0.501649;0.767269;, + 0.502150;0.750869;, + 0.512657;0.751850;, + 0.505542;0.773833;, + 0.652023;0.759221;, + 0.496782;0.758581;, + 0.495945;0.774158;, + 0.973029;0.592354;, + 0.962233;0.596576;, + 0.954638;0.582066;, + 0.663138;0.761836;, + 0.975073;0.631107;, + 0.491802;0.807701;, + 0.493658;0.821015;, + 0.497831;0.831442;, + 0.510501;0.809459;, + 0.512540;0.823984;, + 0.524652;0.744363;, + 0.542413;0.743148;, + 0.532247;0.758888;, + 0.949442;0.647846;, + 0.958479;0.641726;, + 0.773385;0.772241;, + 0.765851;0.784683;, + 0.660818;0.835561;, + 0.637646;0.745354;, + 0.493444;0.744959;, + 0.963987;0.799146;, + 0.964611;0.796180;, + 0.971871;0.792745;, + 0.978153;0.797440;, + 0.975442;0.801492;, + 0.968537;0.799764;, + 0.983888;0.843915;, + 0.977716;0.843553;, + 0.975048;0.841743;, + 0.978336;0.837181;, + 0.983225;0.832012;, + 0.986108;0.836936;, + 0.938638;0.832046;, + 0.936181;0.829097;, + 0.941401;0.830035;, + 0.945000;0.831362;, + 0.943954;0.833373;, + 0.933359;0.810154;, + 0.932705;0.813108;, + 0.929746;0.817379;, + 0.924964;0.819497;, + 0.922414;0.813309;, + 0.927851;0.808236;, + 0.899096;0.221492;, + 0.892752;0.227445;, + 0.886190;0.224852;, + 0.882803;0.216330;, + 0.887518;0.212975;, + 0.897249;0.215545;, + 0.940975;0.950864;, + 0.938484;0.956357;, + 0.927832;0.958843;, + 0.930323;0.953350;, + 0.969148;0.804920;, + 0.975929;0.806530;, + 0.975779;0.808377;, + 0.969125;0.806932;, + 0.964660;0.806467;, + 0.949832;0.807745;, + 0.942110;0.811209;, + 0.939047;0.810894;, + 0.941813;0.806700;, + 0.949618;0.803168;, + 0.954573;0.803898;, + 0.977716;0.832534;, + 0.974127;0.832514;, + 0.978275;0.829261;, + 0.982842;0.825787;, + 0.983251;0.827383;, + 0.954926;0.836729;, + 0.955943;0.833556;, + 0.963103;0.833228;, + 0.967039;0.832274;, + 0.962386;0.836479;, + 0.941529;0.829365;, + 0.936319;0.828439;, + 0.842092;0.237210;, + 0.849622;0.238907;, + 0.885316;0.204961;, + 0.968425;0.807468;, + 0.975039;0.808906;, + 0.894876;0.207594;, + 0.949861;0.808125;, + 0.954654;0.806389;, + 0.865418;0.202982;, + 0.860347;0.206482;, + 0.848938;0.209929;, + 0.942250;0.811634;, + 0.981687;0.824251;, + 0.977264;0.826044;, + 0.973752;0.827899;, + 0.895925;0.237256;, + 0.902426;0.231342;, + 0.864838;0.244081;, + 0.873842;0.240471;, + 0.880699;0.243123;, + 0.962774;0.831447;, + 0.955589;0.832331;, + 0.952095;0.832215;, + 0.675688;0.836035;, + 0.679630;0.832272;, + 0.680709;0.830944;, + 0.677807;0.830377;, + 0.672033;0.833431;, + 0.670993;0.837761;, + 0.662887;0.859062;, + 0.663611;0.854284;, + 0.665079;0.848028;, + 0.666956;0.844848;, + 0.663100;0.846806;, + 0.660499;0.854764;, + 0.673075;0.872891;, + 0.668931;0.867557;, + 0.667184;0.864531;, + 0.667818;0.869181;, + 0.672055;0.874351;, + 0.681144;0.879570;, + 0.683347;0.882783;, + 0.688674;0.886066;, + 0.691271;0.885215;, + 0.690262;0.881969;, + 0.685425;0.879351;, + 0.682419;0.877888;, + 0.696117;0.906264;, + 0.699246;0.901554;, + 0.697324;0.896188;, + 0.693695;0.894958;, + 0.690935;0.896052;, + 0.691436;0.901991;, + 0.709604;0.897148;, + 0.709279;0.891750;, + 0.709690;0.882449;, + 0.708739;0.879243;, + 0.707265;0.884132;, + 0.706068;0.890008;, + 0.707652;0.895403;, + 0.694640;0.838382;, + 0.694722;0.842825;, + 0.695212;0.847373;, + 0.694731;0.848453;, + 0.698001;0.848790;, + 0.698400;0.843269;, + 0.683941;0.825341;, + 0.681690;0.826964;, + 0.684378;0.828104;, + 0.687063;0.830490;, + 0.689393;0.833098;, + 0.688958;0.829089;, + 0.691759;0.852310;, + 0.689343;0.854694;, + 0.688785;0.856515;, + 0.690615;0.856789;, + 0.694539;0.855245;, + 0.695125;0.852587;, + 0.695784;0.859438;, + 0.691934;0.860897;, + 0.692101;0.862333;, + 0.694364;0.862584;, + 0.696067;0.863077;, + 0.697654;0.861366;, + 0.701740;0.863271;, + 0.700061;0.864978;, + 0.700778;0.866784;, + 0.700954;0.870057;, + 0.702837;0.872650;, + 0.704339;0.867671;, + 0.696764;0.887057;, + 0.700150;0.887901;, + 0.701745;0.882398;, + 0.699974;0.879929;, + 0.699090;0.882660;, + 0.697109;0.884063;, + 0.695813;0.883870;, + 0.686434;0.868148;, + 0.686734;0.866131;, + 0.687422;0.865453;, + 0.688128;0.864328;, + 0.687917;0.863596;, + 0.687662;0.862175;, + 0.686164;0.862035;, + 0.682791;0.865085;, + 0.683230;0.868455;, + 0.680190;0.857580;, + 0.676758;0.860502;, + 0.680929;0.862779;, + 0.684571;0.859844;, + 0.685190;0.858012;, + 0.681542;0.834280;, + 0.678899;0.832260;, + 0.674948;0.836003;, + 0.672221;0.839192;, + 0.677631;0.838280;, + 0.664069;0.848025;, + 0.662654;0.854286;, + 0.663889;0.857693;, + 0.666111;0.855920;, + 0.669374;0.852969;, + 0.671369;0.850586;, + 0.669448;0.847198;, + 0.674082;0.868366;, + 0.670016;0.865994;, + 0.668080;0.867719;, + 0.672524;0.872924;, + 0.675476;0.874545;, + 0.675098;0.871712;, + 0.684220;0.876796;, + 0.684693;0.879534;, + 0.689607;0.882089;, + 0.691315;0.882437;, + 0.690589;0.880286;, + 0.689145;0.878057;, + 0.687623;0.876853;, + 0.686810;0.844696;, + 0.688808;0.848147;, + 0.694638;0.847394;, + 0.694180;0.842825;, + 0.692061;0.839733;, + 0.690521;0.840850;, + 0.686594;0.830238;, + 0.683790;0.828069;, + 0.682379;0.829107;, + 0.685183;0.831276;, + 0.688693;0.854737;, + 0.691147;0.852386;, + 0.691829;0.851125;, + 0.685882;0.851965;, + 0.683767;0.854326;, + 0.691446;0.862372;, + 0.690980;0.862835;, + 0.693094;0.863536;, + 0.694711;0.863557;, + 0.693808;0.862659;, + 0.698097;0.864320;, + 0.698620;0.865539;, + 0.699518;0.867847;, + 0.699965;0.868510;, + 0.700238;0.866960;, + 0.699268;0.865078;, + 0.696609;0.884348;, + 0.698608;0.882973;, + 0.697861;0.880863;, + 0.695862;0.882238;, + 0.690624;0.871065;, + 0.689273;0.869881;, + 0.688397;0.868920;, + 0.689170;0.871016;, + 0.690629;0.872304;, + 0.694403;0.875504;, + 0.696159;0.874720;, + 0.695408;0.872942;, + 0.693891;0.872222;, + 0.693085;0.872105;, + 0.692846;0.873609;, + 0.698803;0.876854;, + 0.699830;0.873806;, + 0.700303;0.870748;, + 0.699234;0.872247;, + 0.698025;0.873732;, + 0.698109;0.873383;, + 0.698569;0.874951;, + 0.685787;0.866385;, + 0.685702;0.867312;, + 0.686162;0.868655;, + 0.686247;0.867728;, + 0.691761;0.866467;, + 0.692367;0.864878;, + 0.690211;0.864034;, + 0.688933;0.865106;, + 0.689389;0.866404;, + 0.696397;0.869990;, + 0.697715;0.870637;, + 0.698808;0.869151;, + 0.698091;0.866703;, + 0.696289;0.866667;, + 0.695690;0.868468;, + 0.688500;0.870302;, + 0.688385;0.871268;, + 0.689815;0.872503;, + 0.690675;0.872854;, + 0.691320;0.872191;, + 0.690574;0.870874;, + 0.693553;0.873419;, + 0.692990;0.873850;, + 0.694662;0.874263;, + 0.695274;0.874506;, + 0.695096;0.873894;, + 0.697475;0.875110;, + 0.698611;0.873595;, + 0.698496;0.872792;, + 0.697360;0.874307;, + 0.752419;0.911565;, + 0.744573;0.923751;, + 0.767724;0.929157;, + 0.781542;0.921746;, + 0.768600;0.909906;, + 0.996171;0.820607;, + 0.995169;0.807970;, + 0.799319;0.811168;, + 0.783132;0.826576;, + 0.798927;0.833329;, + 0.770940;0.883665;, + 0.778925;0.873285;, + 0.777948;0.859594;, + 0.767966;0.853234;, + 0.752976;0.864062;, + 0.745404;0.878402;, + 0.754637;0.885236;, + 0.723141;0.869933;, + 0.713583;0.866968;, + 0.708161;0.880536;, + 0.707286;0.889890;, + 0.715669;0.884309;, + 0.963829;0.899163;, + 0.958004;0.889659;, + 0.959349;0.877118;, + 0.966330;0.872050;, + 0.972653;0.872505;, + 0.971496;0.887077;, + 0.919787;0.832548;, + 0.915263;0.828016;, + 0.910781;0.816036;, + 0.912479;0.810723;, + 0.916910;0.813028;, + 0.919784;0.819253;, + 0.919893;0.824610;, + 0.915265;0.799848;, + 0.910885;0.797544;, + 0.908303;0.792424;, + 0.920798;0.794853;, + 0.925977;0.840974;, + 0.932251;0.845675;, + 0.934119;0.850510;, + 0.930114;0.855508;, + 0.926178;0.848880;, + 0.939862;0.853995;, + 0.945035;0.855004;, + 0.940686;0.861579;, + 0.935580;0.864889;, + 0.935748;0.859048;, + 0.965893;0.852847;, + 0.963024;0.860045;, + 0.955294;0.864668;, + 0.950657;0.860753;, + 0.954972;0.854480;, + 0.962479;0.851071;, + 0.976248;0.860464;, + 0.970248;0.860081;, + 0.973061;0.852926;, + 0.979061;0.853309;, + 0.050851;0.311418;, + 0.182352;0.311622;, + 0.552046;0.238197;, + 0.452719;0.187398;, + 0.438080;0.117554;, + 0.452085;0.122919;, + 0.055836;0.106868;, + 0.772088;0.251618;, + 0.356021;0.264969;, + 0.058251;0.140019;, + 0.013018;0.143812;, + 0.008445;0.097857;, + 0.017286;0.142213;, + 0.466090;0.125759;, + 0.032290;0.226805;, + 0.439368;0.396962;, + 0.028011;0.255177;, + 0.015083;0.184547;, + 0.003633;0.442765;, + 0.028225;0.366884;, + 0.008025;0.366913;, + 0.031155;0.442733;, + 0.035522;0.366908;, + 0.043503;0.366901;, + 0.078333;0.442781;, + 0.077972;0.366951;, + 0.063824;0.366910;, + 0.050581;0.366921;, + 0.116059;0.442822;, + 0.095599;0.366990;, + 0.003503;0.366840;, + 0.598234;0.316550;, + 0.550018;0.316218;, + 0.473892;0.274536;, + 0.441097;0.248866;, + 0.464459;0.326135;, + 0.538350;0.016111;, + 0.514084;0.033957;, + 0.489390;0.113365;, + 0.519113;0.138636;, + 0.490572;0.068422;, + 0.356021;0.325248;, + 0.555413;0.007122;, + 0.817949;0.096034;, + 0.787844;0.203452;, + 0.760901;0.200278;, + 0.794989;0.036951;, + 0.779378;0.059111;, + 0.766486;0.099552;, + 0.759845;0.138679;, + 0.814666;0.026300;, + 0.867984;0.019847;, + 0.832914;0.017848;, + 0.809118;0.135273;, + 0.805604;0.154688;, + 0.804978;0.157227;, + 0.758809;0.175095;, + 0.752513;0.157925;, + 0.781961;0.152723;, + 0.858184;0.093448;, + 0.831251;0.093463;, + 0.832409;0.120566;, + 0.848059;0.120499;, + 0.904949;0.121045;, + 0.904197;0.093746;, + 0.888889;0.093489;, + 0.278833;0.117554;, + 0.264828;0.122919;, + 0.181994;0.106868;, + 0.963886;0.251618;, + 0.179579;0.140019;, + 0.224812;0.143812;, + 0.220544;0.142213;, + 0.229385;0.097857;, + 0.272671;0.396962;, + 0.273453;0.408674;, + 0.209561;0.254798;, + 0.222747;0.184547;, + 0.231654;0.442713;, + 0.228618;0.366834;, + 0.207062;0.366884;, + 0.207750;0.442759;, + 0.197052;0.366829;, + 0.186357;0.366849;, + 0.156410;0.366951;, + 0.159214;0.442781;, + 0.168750;0.366884;, + 0.178828;0.366842;, + 0.136070;0.366990;, + 0.233592;0.366893;, + 0.598234;0.316550;, + 0.550018;0.316218;, + 0.238147;0.274536;, + 0.250823;0.125759;, + 0.275815;0.248866;, + 0.247580;0.326135;, + 0.538350;0.016111;, + 0.514084;0.033957;, + 0.489390;0.113365;, + 0.519113;0.138636;, + 0.490572;0.068422;, + 0.555413;0.007122;, + 0.948111;0.206039;, + 0.975073;0.200278;, + 0.940985;0.036951;, + 0.956597;0.059111;, + 0.969488;0.099552;, + 0.976129;0.138679;, + 0.921308;0.026300;, + 0.903060;0.017848;, + 0.926856;0.135273;, + 0.930370;0.157275;, + 0.930970;0.159128;, + 0.977165;0.175095;, + 0.983462;0.157925;, + 0.954013;0.152723;, + 0.858184;0.093448;, + 0.831251;0.093463;, + 0.832568;0.120761;, + 0.848059;0.120499;, + 0.904949;0.121045;, + 0.904197;0.093746;, + 0.888889;0.093489;, + 0.045297;0.477254;, + 0.024699;0.503835;, + 0.472594;0.539949;, + 0.472914;0.716324;, + 0.371776;0.675528;, + 0.373235;0.731889;, + 0.767119;0.421877;, + 0.727042;0.422032;, + 0.723334;0.470792;, + 0.740205;0.473323;, + 0.768616;0.475082;, + 0.820577;0.474485;, + 0.854839;0.474108;, + 0.857896;0.333084;, + 0.840158;0.333502;, + 0.826868;0.333518;, + 0.774925;0.333534;, + 0.746447;0.334508;, + 0.725798;0.335439;, + 0.718712;0.379084;, + 0.718703;0.421715;, + 0.726481;0.378657;, + 0.834362;0.474339;, + 0.100154;0.969885;, + 0.402711;0.957700;, + 0.481941;0.958396;, + 0.471098;0.942456;, + 0.106806;0.943084;, + 0.367369;0.618403;, + 0.362779;0.569244;, + 0.390556;0.922382;, + 0.481380;0.922948;, + 0.108160;0.830961;, + 0.474937;0.574217;, + 0.374591;0.772968;, + 0.770613;0.378738;, + 0.779658;0.375290;, + 0.468376;0.968225;, + 0.781318;0.421781;, + 0.864584;0.336319;, + 0.862721;0.473397;, + 0.861507;0.384730;, + 0.035279;0.972096;, + 0.046114;0.971274;, + 0.056515;0.976507;, + 0.058788;0.985534;, + 0.424365;0.990067;, + 0.424369;0.986643;, + 0.023807;0.986947;, + 0.025789;0.981161;, + 0.430561;0.982980;, + 0.436946;0.984040;, + 0.053072;0.973154;, + 0.026698;0.979844;, + 0.028129;0.977147;, + 0.442206;0.984188;, + 0.449680;0.985484;, + 0.059185;0.989086;, + 0.453487;0.988306;, + 0.456226;0.990546;, + 0.425617;0.991500;, + 0.371983;0.697920;, + 0.020286;0.699408;, + 0.817399;0.610136;, + 0.829895;0.574015;, + 0.829308;0.486167;, + 0.790539;0.483740;, + 0.831696;0.541216;, + 0.782813;0.613566;, + 0.720868;0.507940;, + 0.721642;0.571367;, + 0.755114;0.484599;, + 0.726396;0.484711;, + 0.749582;0.616531;, + 0.722723;0.608105;, + 0.829070;0.386901;, + 0.826063;0.425306;, + 0.002135;0.449795;, + 0.002967;0.471277;, + 0.096325;0.470207;, + 0.388540;0.470853;, + 0.410191;0.471018;, + 0.426962;0.471210;, + 0.028854;0.470922;, + 0.046416;0.470827;, + 0.441986;0.471377;, + 0.008914;0.470973;, + 0.078325;0.470594;, + 0.411197;0.444817;, + 0.359856;0.444726;, + 0.096730;0.448878;, + 0.045771;0.449319;, + 0.440173;0.445252;, + 0.007387;0.449871;, + 0.848952;0.391126;, + 0.835216;0.391122;, + 0.835524;0.392360;, + 0.835512;0.416900;, + 0.848943;0.416867;, + 0.104771;0.476750;, + 0.114079;0.496443;, + 0.114079;0.543468;, + 0.114079;0.543305;, + 0.107353;0.876654;, + 0.008722;0.875832;, + 0.010738;0.826008;, + 0.011091;0.767026;, + 0.109612;0.782815;, + 0.107819;0.799273;, + 0.373464;0.753821;, + 0.475894;0.744141;, + 0.362779;0.477059;, + 0.205339;0.504702;, + 0.184741;0.478121;, + 0.253357;0.539949;, + 0.254211;0.717753;, + 0.356515;0.676004;, + 0.353890;0.730460;, + 0.766924;0.421998;, + 0.726846;0.422153;, + 0.723334;0.470792;, + 0.740205;0.473323;, + 0.768616;0.475082;, + 0.820577;0.474485;, + 0.854839;0.474108;, + 0.857896;0.333084;, + 0.840158;0.333502;, + 0.826868;0.333518;, + 0.774925;0.333534;, + 0.746447;0.334508;, + 0.725798;0.335439;, + 0.718516;0.379205;, + 0.718508;0.421836;, + 0.726286;0.378778;, + 0.834362;0.474339;, + 0.141709;0.974550;, + 0.343835;0.965103;, + 0.248247;0.942456;, + 0.247517;0.958396;, + 0.133854;0.941784;, + 0.359367;0.618403;, + 0.346186;0.924812;, + 0.248079;0.922472;, + 0.129246;0.830609;, + 0.251014;0.574217;, + 0.352797;0.772717;, + 0.770418;0.378859;, + 0.779658;0.375290;, + 0.247079;0.968701;, + 0.864584;0.336319;, + 0.862721;0.473397;, + 0.861507;0.384730;, + 0.200708;0.973327;, + 0.188454;0.972288;, + 0.174861;0.978172;, + 0.170105;0.984594;, + 0.301203;0.990067;, + 0.301200;0.986643;, + 0.210406;0.987744;, + 0.209311;0.981523;, + 0.295008;0.982980;, + 0.288623;0.984040;, + 0.179545;0.975036;, + 0.208402;0.980206;, + 0.206971;0.977509;, + 0.283363;0.984188;, + 0.275889;0.985484;, + 0.169707;0.988147;, + 0.272081;0.988306;, + 0.269343;0.990546;, + 0.299951;0.991500;, + 0.357865;0.698872;, + 0.220267;0.695386;, + 0.817399;0.610136;, + 0.829895;0.574015;, + 0.829308;0.486167;, + 0.790539;0.483740;, + 0.831696;0.541216;, + 0.782813;0.613566;, + 0.720868;0.507940;, + 0.727230;0.571709;, + 0.755114;0.484599;, + 0.726396;0.484711;, + 0.749582;0.616531;, + 0.728311;0.605711;, + 0.829070;0.386901;, + 0.826063;0.425306;, + 0.789675;0.422317;, + 0.231551;0.471277;, + 0.232384;0.449795;, + 0.128399;0.470207;, + 0.333617;0.470853;, + 0.311966;0.471018;, + 0.295195;0.471210;, + 0.200322;0.470922;, + 0.182760;0.470827;, + 0.280654;0.471377;, + 0.225604;0.470973;, + 0.150851;0.470594;, + 0.313395;0.444893;, + 0.127994;0.448878;, + 0.182429;0.449339;, + 0.281452;0.444727;, + 0.227179;0.449362;, + 0.860812;0.392349;, + 0.861813;0.391103;, + 0.860809;0.416900;, + 0.123959;0.476750;, + 0.130619;0.875688;, + 0.223746;0.876529;, + 0.222682;0.831192;, + 0.222175;0.766782;, + 0.126664;0.781896;, + 0.127108;0.799289;, + 0.355244;0.754385;, + 0.253953;0.745093;, + 0.984741;0.646982;, + 0.615535;0.336575;, + 0.617993;0.370708;, + 0.618503;0.412274;, + 0.683406;0.333879;, + 0.617258;0.334147;, + 0.616727;0.478604;, + 0.486881;0.506343;, + 0.486377;0.522763;, + 0.619069;0.508845;, + 0.619014;0.529288;, + 0.613523;0.537819;, + 0.715761;0.536843;, + 0.698826;0.480362;, + 0.715249;0.479745;, + 0.524207;0.480304;, + 0.577151;0.481311;, + 0.614315;0.481181;, + 0.636157;0.481064;, + 0.652311;0.481307;, + 0.679859;0.480379;, + 0.490306;0.480268;, + 0.482948;0.479671;, + 0.482987;0.487223;, + 0.619378;0.479998;, + 0.618557;0.486635;, + 0.485819;0.480718;, + 0.559587;0.542715;, + 0.647989;0.541297;, + 0.637666;0.713938;, + 0.691713;0.542696;, + 0.668214;0.542030;, + 0.701857;0.714699;, + 0.712881;0.541485;, + 0.622792;0.540665;, + 0.526962;0.540637;, + 0.509701;0.540747;, + 0.715962;0.581565;, + 0.613254;0.657234;, + 0.506449;0.658654;, + 0.590872;0.585541;, + 0.576642;0.545365;, + 0.542761;0.538309;, + 0.485178;0.411726;, + 0.565621;0.335995;, + 0.536916;0.335282;, + 0.594197;0.337971;, + 0.879880;0.266471;, + 0.896585;0.266970;, + 0.981714;0.549754;, + 0.959173;0.550152;, + 0.993412;0.532121;, + 0.911361;0.265679;, + 0.944930;0.548958;, + 0.991594;0.515601;, + 0.987964;0.504932;, + 0.874609;0.301468;, + 0.881797;0.290567;, + 0.987964;0.504932;, + 0.923442;0.290776;, + 0.894704;0.289223;, + 0.988993;0.482104;, + 0.941215;0.509530;, + 0.928011;0.304107;, + 0.938862;0.340611;, + 0.928965;0.335341;, + 0.935938;0.471280;, + 0.916356;0.483920;, + 0.953678;0.337149;, + 0.927180;0.460289;, + 0.952654;0.353364;, + 1.000000;1.000000;, + 1.000000;1.000000;, + 0.922355;0.455126;, + 0.921067;0.451440;, + 0.954272;0.363662;, + 0.914584;0.447588;, + 0.872693;0.373015;, + 0.933280;0.438169;, + 0.932123;0.444577;, + 0.945306;0.436670;, + 0.947010;0.442402;, + 0.934191;0.432159;, + 0.943779;0.430962;, + 0.934464;0.427238;, + 0.944140;0.426029;, + 0.933322;0.423342;, + 0.945347;0.421842;, + 0.933852;0.417199;, + 0.944784;0.415835;, + 0.935261;0.412166;, + 0.943440;0.411143;, + 0.934807;0.408303;, + 0.944128;0.407138;, + 0.933499;0.405627;, + 0.945523;0.404125;, + 0.934306;0.399900;, + 0.944760;0.398593;, + 0.936197;0.395479;, + 0.942312;0.394711;, + 0.938126;0.393378;, + 0.940188;0.393119;, + 0.948663;0.433609;, + 0.962449;0.431891;, + 0.963569;0.439852;, + 0.949712;0.425444;, + 0.960702;0.424073;, + 0.950027;0.418771;, + 0.961120;0.417385;, + 0.948720;0.413426;, + 0.962506;0.411706;, + 0.949332;0.405039;, + 0.961865;0.403475;, + 0.950951;0.398224;, + 0.960328;0.397052;, + 0.950433;0.392937;, + 0.961118;0.391601;, + 0.948935;0.389236;, + 0.962720;0.387514;, + 0.949864;0.381423;, + 0.961849;0.379924;, + 0.952035;0.375474;, + 0.959045;0.374594;, + 0.954248;0.372686;, + 0.956611;0.372389;, + 0.964836;0.431793;, + 0.978209;0.430202;, + 0.979243;0.437677;, + 0.965950;0.424289;, + 0.976611;0.423020;, + 0.966334;0.418150;, + 0.977095;0.416868;, + 0.965133;0.413242;, + 0.978506;0.411649;, + 0.965829;0.405541;, + 0.977985;0.404094;, + 0.967479;0.399276;, + 0.976574;0.398191;, + 0.967041;0.394421;, + 0.977406;0.393185;, + 0.965636;0.391026;, + 0.979007;0.389433;, + 0.966632;0.383854;, + 0.978257;0.382466;, + 0.968804;0.378379;, + 0.975604;0.377565;, + 0.970980;0.375810;, + 0.973272;0.375535;, + 0.980527;0.431609;, + 0.991780;0.430872;, + 0.981826;0.426089;, + 0.990797;0.425501;, + 0.982442;0.421548;, + 0.991496;0.420953;, + 0.981680;0.417876;, + 0.992932;0.417138;, + 0.982647;0.412208;, + 0.992876;0.411538;, + 0.984331;0.407622;, + 0.991985;0.407118;, + 0.984207;0.404017;, + 0.992928;0.403443;, + 0.983205;0.401464;, + 0.994456;0.400724;, + 0.873351;0.415244;, + 0.984397;0.396197;, + 0.870746;0.415440;, + 0.986474;0.392206;, + 0.992196;0.391827;, + 0.988412;0.390367;, + 0.990341;0.390239;, + 0.933195;0.460832;, + 0.929516;0.270184;, + 0.960279;0.517513;, + 0.941215;0.509530;, + 0.935596;0.521485;, + 0.873524;0.323161;, + 0.715286;0.395988;, + 0.499149;0.337032;, + 0.484789;0.334008;, + 0.714967;0.334006;, + 0.616154;0.336767;, + 0.618732;0.413149;, + 0.618222;0.371582;, + 0.645009;0.344914;, + 0.684073;0.334711;, + 0.616956;0.479479;, + 0.485239;0.507463;, + 0.485593;0.530220;, + 0.619554;0.528041;, + 0.617878;0.506596;, + 0.614305;0.539126;, + 0.715662;0.536483;, + 0.707911;0.479876;, + 0.715316;0.480342;, + 0.530845;0.480046;, + 0.579638;0.481539;, + 0.611205;0.482665;, + 0.634599;0.480479;, + 0.659608;0.481359;, + 0.682447;0.479741;, + 0.500776;0.479904;, + 0.485365;0.486454;, + 0.485364;0.479957;, + 0.618547;0.487348;, + 0.618035;0.480859;, + 0.485593;0.480884;, + 0.526256;0.539496;, + 0.658985;0.539087;, + 0.642654;0.716241;, + 0.706306;0.540833;, + 0.676209;0.539484;, + 0.570340;0.539574;, + 0.589402;0.577637;, + 0.580114;0.538910;, + 0.630066;0.542891;, + 0.560574;0.538232;, + 0.707645;0.653215;, + 0.698825;0.716851;, + 0.626437;0.657671;, + 0.494342;0.580983;, + 0.509352;0.540802;, + 0.544101;0.536351;, + 0.484496;0.412560;, + 0.564904;0.336726;, + 0.536100;0.335995;, + 0.593407;0.338687;, + 0.880106;0.263780;, + 0.890029;0.264275;, + 0.983849;0.547217;, + 0.959557;0.551183;, + 0.995531;0.534564;, + 0.911710;0.264051;, + 0.946269;0.549368;, + 0.989370;0.511245;, + 0.993351;0.517791;, + 0.893307;0.290193;, + 0.875823;0.291903;, + 0.989370;0.511245;, + 0.919671;0.294804;, + 0.992837;0.480465;, + 0.940909;0.507167;, + 0.925087;0.297402;, + 0.941330;0.343586;, + 0.926942;0.328248;, + 0.934683;0.469925;, + 0.916037;0.478099;, + 0.955318;0.339833;, + 0.926602;0.455368;, + 0.955264;0.354332;, + 0.919668;0.446793;, + 0.957566;0.362848;, + 0.912527;0.443043;, + 0.872782;0.373158;, + 0.948367;0.441273;, + 0.919288;0.373060;, + 0.933018;0.443136;, + 0.934200;0.436900;, + 0.916783;0.371089;, + 0.935125;0.431048;, + 0.944973;0.430058;, + 0.935605;0.426190;, + 0.945547;0.425188;, + 0.934376;0.422378;, + 0.946729;0.421136;, + 0.934637;0.416466;, + 0.945867;0.415337;, + 0.936131;0.411562;, + 0.944536;0.410714;, + 0.935548;0.407812;, + 0.945126;0.406847;, + 0.934036;0.405221;, + 0.946391;0.403976;, + 0.934582;0.399720;, + 0.945327;0.398635;, + 0.936732;0.395377;, + 0.943022;0.394739;, + 0.938903;0.393308;, + 0.941024;0.393092;, + 0.950025;0.432725;, + 0.964184;0.431303;, + 0.965384;0.439088;, + 0.951087;0.424772;, + 0.962376;0.423636;, + 0.951639;0.418194;, + 0.963037;0.417045;, + 0.950231;0.412967;, + 0.964392;0.411542;, + 0.950532;0.404875;, + 0.963406;0.403580;, + 0.952246;0.398233;, + 0.961882;0.397261;, + 0.951580;0.393096;, + 0.962559;0.391989;, + 0.949847;0.389507;, + 0.964010;0.388079;, + 0.950475;0.381982;, + 0.962793;0.380738;, + 0.952940;0.376145;, + 0.960151;0.375413;, + 0.955429;0.373402;, + 0.957861;0.373154;, + 0.966666;0.431243;, + 0.980400;0.429939;, + 0.981495;0.437251;, + 0.967796;0.423937;, + 0.978747;0.422895;, + 0.968413;0.417885;, + 0.979469;0.416831;, + 0.967116;0.413084;, + 0.980852;0.411777;, + 0.967514;0.405663;, + 0.980002;0.404475;, + 0.969258;0.399559;, + 0.978605;0.398667;, + 0.968680;0.394844;, + 0.979330;0.393828;, + 0.967049;0.391554;, + 0.980787;0.390244;, + 0.967756;0.384653;, + 0.979704;0.383511;, + 0.970216;0.379281;, + 0.977211;0.378609;, + 0.972661;0.376752;, + 0.975020;0.376525;, + 0.982811;0.431347;, + 0.994369;0.430837;, + 0.984136;0.425982;, + 0.993352;0.425573;, + 0.984958;0.421504;, + 0.994262;0.421090;, + 0.984124;0.417916;, + 0.995683;0.417404;, + 0.984852;0.412471;, + 0.995361;0.412006;, + 0.986626;0.408010;, + 0.994491;0.407659;, + 0.986391;0.404516;, + 0.995353;0.404116;, + 0.985203;0.402047;, + 0.996764;0.401532;, + 0.986163;0.396997;, + 0.996218;0.396547;, + 0.988492;0.393082;, + 0.994378;0.392816;, + 0.990660;0.391272;, + 0.992645;0.391182;, + 0.932421;0.459512;, + 0.923257;0.263530;, + 0.959778;0.518762;, + 0.936222;0.521783;, + 0.940909;0.507167;, + 0.715515;0.396862;, + 0.499182;0.336927;, + 0.484655;0.334095;, + 0.716951;0.335782;, + 0.564387;0.076817;, + 0.643460;0.343672;, + 0.616978;0.334945;, + 0.564387;0.076817;, + 0.096204;0.018218;, + 0.077882;0.009132;, + 0.140301;0.018636;, + 0.118913;0.022106;, + 0.159948;0.009132;, + 0.733208;0.668843;, + 0.733271;0.671494;, + 0.733061;0.622205;, + 0.734636;0.718815;, + 0.733702;0.623688;, + 0.733817;0.666406;, + 0.734634;0.717573;, + 0.733411;0.719397;, + 0.733436;0.669007;, + 0.731958;0.668479;, + 0.065514;0.263969;, + 0.075463;0.280817;, + 0.088742;0.263945;, + 0.046752;0.280814;, + 0.020600;0.264050;, + 0.118135;0.263808;, + 0.097353;0.346425;, + 0.118135;0.361247;, + 0.098118;0.280881;, + 0.075557;0.346508;, + 0.087647;0.361135;, + 0.060355;0.361119;, + 0.034011;0.346597;, + 0.017495;0.361046;, + 0.017980;0.308672;, + 0.048694;0.343504;, + 0.794423;0.747604;, + 0.841006;0.735950;, + 0.032432;0.280852;, + 0.737977;0.623570;, + 0.742795;0.665101;, + 0.735401;0.718589;, + 0.735464;0.622670;, + 0.806908;0.784277;, + 0.744124;0.623382;, + 0.734055;0.716026;, + 0.735560;0.624194;, + 0.735259;0.624000;, + 0.736255;0.718648;, + 0.734441;0.669812;, + 0.733843;0.625481;, + 0.734435;0.670116;, + 0.735742;0.624306;, + 0.735112;0.623862;, + 0.721657;0.718291;, + 0.733828;0.668886;, + 0.733464;0.621691;, + 0.734023;0.717847;, + 0.733534;0.719777;, + 0.734009;0.671022;, + 0.734158;0.716596;, + 0.731633;0.621868;, + 0.731332;0.631315;, + 0.669043;0.833034;, + 0.660066;0.832672;, + 0.655598;0.849640;, + 0.737725;0.714443;, + 0.741942;0.676619;, + 0.741961;0.715542;, + 0.733665;0.674284;, + 0.734971;0.669387;, + 0.729903;0.675143;, + 0.734761;0.719063;, + 0.735332;0.716619;, + 0.734955;0.668426;, + 0.721716;0.621992;, + 0.490854;0.881098;, + 0.604315;0.879016;, + 0.619397;0.857270;, + 0.550381;0.879254;, + 0.614918;0.901410;, + 0.733632;0.622431;, + 0.733752;0.622431;, + 0.733619;0.621524;, + 0.734255;0.718460;, + 0.733645;0.623168;, + 0.734765;0.668727;, + 0.733004;0.624609;, + 0.732771;0.623537;, + 0.732742;0.623931;, + 0.733127;0.622943;, + 0.738124;0.626577;, + 0.733325;0.623897;, + 0.736550;0.716796;, + 0.733320;0.626103;, + 0.734626;0.670928;, + 0.735641;0.711463;, + 0.734563;0.670905;, + 0.735018;0.673031;, + 0.734433;0.669076;, + 0.734127;0.670046;, + 0.735105;0.667616;, + 0.734543;0.621846;, + 0.734712;0.717490;, + 0.734725;0.623514;, + 0.733232;0.624888;, + 0.736739;0.716543;, + 0.734684;0.670029;, + 0.734888;0.718644;, + 0.732628;0.670896;, + 0.733935;0.669238;, + 0.733037;0.669749;, + 0.170261;0.263941;, + 0.147528;0.263863;, + 0.159819;0.280672;, + 0.202812;0.280741;, + 0.212210;0.264050;, + 0.138917;0.346425;, + 0.137163;0.280736;, + 0.149118;0.361154;, + 0.160713;0.346508;, + 0.175915;0.361213;, + 0.217292;0.361140;, + 0.217795;0.309277;, + 0.203145;0.343675;, + 0.180652;0.278493;, + 0.737977;0.623570;, + 0.742795;0.665101;, + 0.734658;0.673204;, + 0.734427;0.624424;, + 0.741949;0.625748;, + 0.735977;0.717392;, + 0.735384;0.622600;, + 0.735442;0.624471;, + 0.734397;0.718833;, + 0.735195;0.674837;, + 0.731426;0.622834;, + 0.733554;0.671983;, + 0.732964;0.622128;, + 0.735365;0.720658;, + 0.732993;0.622640;, + 0.722763;0.718246;, + 0.734404;0.664391;, + 0.806292;0.771849;, + 0.733568;0.624201;, + 0.735564;0.717674;, + 0.734832;0.718436;, + 0.734634;0.672608;, + 0.733135;0.673954;, + 0.738890;0.713850;, + 0.734689;0.623399;, + 0.732473;0.640685;, + 0.741942;0.676619;, + 0.734732;0.719564;, + 0.736409;0.671560;, + 0.733928;0.669098;, + 0.734488;0.716382;, + 0.735985;0.719547;, + 0.734111;0.670206;, + 0.722716;0.624358;, + 0.490854;0.881098;, + 0.619397;0.857270;, + 0.604316;0.879016;, + 0.550381;0.879254;, + 0.614041;0.900874;, + 0.734698;0.623311;, + 0.733366;0.623859;, + 0.733853;0.622432;, + 0.736423;0.718140;, + 0.733794;0.624449;, + 0.733416;0.668524;, + 0.734057;0.624252;, + 0.733026;0.622840;, + 0.733957;0.622990;, + 0.733958;0.669768;, + 0.573787;0.946976;, + 0.570524;0.952054;, + 0.732989;0.677617;, + 0.733901;0.623536;, + 0.742194;0.624474;, + 0.735057;0.717697;, + 0.733910;0.670742;, + 0.722198;0.625877;, + 0.726309;0.666336;, + 0.732760;0.623866;, + 0.722409;0.718816;, + 0.771240;0.998210;, + 0.768920;0.993101;, + 0.688441;0.780145;, + 0.670920;0.758421;, + 0.716559;0.753271;, + 0.699682;0.779579;, + 0.768920;0.993101;, + 0.771240;0.998210;, + 0.684801;0.799303;, + 0.703203;0.796694;, + 0.578377;0.723871;, + 0.556798;0.737410;, + 0.535220;0.723871;, + 0.494371;0.846123;, + 0.556672;0.847727;, + 0.617913;0.846306;, + 0.883801;0.999405;, + 0.883640;0.999019;, + 0.883640;0.999019;, + 0.883801;0.999405;, + 0.869557;0.983855;, + 0.878434;0.995071;, + 0.843654;0.956371;, + 0.862861;0.974051;, + 0.704350;0.916866;, + 0.711279;0.931275;, + 0.726665;0.956005;, + 0.758250;0.982937;, + 0.718910;0.943490;, + 0.801523;0.828198;, + 0.803097;0.850936;, + 0.804537;0.864603;, + 0.813820;0.899525;, + 0.696062;0.914837;, + 0.809005;0.773290;, + 0.799319;0.811168;, + 0.709933;0.855338;, + 0.699389;0.815607;, + 0.845499;0.203618;, + 0.836934;0.209967;, + 0.834313;0.222928;, + 0.836611;0.235486;, + 0.817344;0.816095;, + 0.818300;0.813808;, + 0.827677;0.929505;, + 0.900992;0.226326;, + 0.889329;0.204667;, + 0.864170;0.826738;, + 0.897258;0.241354;, + 0.905079;0.230177;, + 0.756146;0.776044;, + 0.749218;0.822256;, + 0.665190;0.878729;, + 0.688338;0.907690;, + 0.762590;0.730701;, + 0.602368;0.738846;, + 0.723336;0.628567;, + 0.723137;0.664019;, + 0.864352;0.570403;, + 0.855895;0.608482;, + 0.865600;0.559362;, + 0.862728;0.546228;, + 0.857614;0.550540;, + 0.739543;0.726668;, + 0.631750;0.845695;, + 0.876169;0.248651;, + 0.890294;0.243145;, + 0.872748;0.198756;, + 0.854340;0.200840;, + 0.879155;0.197889;, + 0.847218;0.244311;, + 0.861893;0.250498;, + 0.842524;0.242503;, + 0.871498;0.251096;, + 0.937684;0.974051;, + 0.956890;0.956371;, + 0.930988;0.983855;, + 0.878434;0.995071;, + 0.758250;0.982937;, + 0.726665;0.956005;, + 0.711279;0.931275;, + 0.704350;0.916866;, + 0.718910;0.943490;, + 0.996007;0.864603;, + 0.813820;0.899525;, + 0.997447;0.850936;, + 0.999022;0.828198;, + 0.696062;0.914837;, + 0.998196;0.807248;, + 0.993636;0.784277;, + 0.794423;0.747604;, + 0.811872;0.736951;, + 0.669043;0.833034;, + 0.699389;0.815607;, + 0.709933;0.855338;, + 0.904083;0.234820;, + 0.906567;0.222917;, + 0.903734;0.210631;, + 0.894473;0.204614;, + 0.984046;0.817359;, + 0.982715;0.814038;, + 0.972868;0.929505;, + 0.934802;0.823017;, + 0.847081;0.205608;, + 0.933650;0.826738;, + 0.838508;0.240382;, + 0.756146;0.776044;, + 0.749218;0.822256;, + 0.655598;0.849640;, + 0.660066;0.832672;, + 0.665190;0.878729;, + 0.688338;0.907690;, + 0.625881;0.747856;, + 0.511229;0.738846;, + 0.721795;0.673083;, + 0.656300;0.740491;, + 0.647354;0.737719;, + 0.984113;0.609149;, + 0.981105;0.573070;, + 0.970594;0.556694;, + 0.980214;0.557876;, + 0.489245;0.841771;, + 0.846038;0.242079;, + 0.861311;0.247298;, + 0.884914;0.201981;, + 0.865010;0.200005;, + 0.858082;0.199183;, + 0.876747;0.249049;, + 0.892614;0.243184;, + 0.897689;0.241471;, + 0.866361;0.249615;, + 0.523805;0.842839;, + 0.590386;0.842199;, + 0.184823;0.343667;, + 0.264166;0.187404;, + 0.551922;0.238188;; + } + + VertexDuplicationIndices { + 4432; + 3420; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 258, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 273, + 274, + 275, + 276, + 277, + 278, + 279, + 280, + 281, + 282, + 283, + 284, + 285, + 286, + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 348, + 349, + 350, + 351, + 352, + 353, + 354, + 355, + 356, + 357, + 358, + 359, + 360, + 361, + 362, + 363, + 364, + 365, + 366, + 367, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 378, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 389, + 390, + 391, + 392, + 393, + 394, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 449, + 450, + 451, + 452, + 453, + 454, + 455, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 472, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 481, + 482, + 483, + 484, + 485, + 486, + 487, + 488, + 489, + 490, + 491, + 492, + 493, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 502, + 503, + 504, + 505, + 506, + 507, + 508, + 509, + 510, + 511, + 512, + 513, + 514, + 515, + 516, + 517, + 518, + 519, + 520, + 521, + 522, + 523, + 524, + 525, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 538, + 539, + 540, + 541, + 542, + 543, + 544, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 554, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 563, + 564, + 565, + 566, + 567, + 568, + 569, + 570, + 571, + 572, + 573, + 574, + 575, + 576, + 577, + 578, + 579, + 580, + 581, + 582, + 583, + 584, + 585, + 586, + 587, + 588, + 589, + 590, + 591, + 592, + 593, + 594, + 595, + 596, + 597, + 598, + 599, + 600, + 601, + 602, + 603, + 604, + 605, + 606, + 607, + 608, + 609, + 610, + 611, + 612, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 623, + 624, + 625, + 626, + 627, + 628, + 629, + 630, + 631, + 632, + 633, + 634, + 635, + 636, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 650, + 651, + 652, + 653, + 654, + 655, + 656, + 657, + 658, + 659, + 660, + 661, + 662, + 663, + 664, + 665, + 666, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 675, + 676, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 685, + 686, + 687, + 688, + 689, + 690, + 691, + 692, + 693, + 694, + 695, + 696, + 697, + 698, + 699, + 700, + 701, + 702, + 703, + 704, + 705, + 706, + 707, + 708, + 709, + 710, + 711, + 712, + 713, + 714, + 715, + 716, + 717, + 718, + 719, + 720, + 721, + 722, + 723, + 724, + 725, + 726, + 727, + 728, + 729, + 730, + 731, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 759, + 760, + 761, + 762, + 763, + 764, + 765, + 766, + 767, + 768, + 769, + 770, + 771, + 772, + 773, + 774, + 775, + 776, + 777, + 778, + 779, + 780, + 781, + 782, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 795, + 796, + 797, + 798, + 799, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 816, + 817, + 818, + 819, + 820, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 843, + 844, + 845, + 846, + 847, + 848, + 849, + 850, + 851, + 852, + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + 938, + 939, + 940, + 941, + 942, + 943, + 944, + 945, + 946, + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1026, + 1027, + 1028, + 1029, + 1030, + 1031, + 1032, + 1033, + 1034, + 1035, + 1036, + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074, + 1075, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1082, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + 1104, + 1105, + 1106, + 1107, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1149, + 1150, + 1151, + 1152, + 1153, + 1154, + 1155, + 1156, + 1157, + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1174, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1219, + 1220, + 1221, + 1222, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1233, + 1234, + 1235, + 1236, + 1237, + 1238, + 1239, + 1240, + 1241, + 1242, + 1243, + 1244, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1254, + 1255, + 1256, + 1257, + 1258, + 1259, + 1260, + 1261, + 1262, + 1263, + 1264, + 1265, + 1266, + 1267, + 1268, + 1269, + 1270, + 1271, + 1272, + 1273, + 1274, + 1275, + 1276, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1285, + 1286, + 1287, + 1288, + 1289, + 1290, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1298, + 1299, + 1300, + 1301, + 1302, + 1303, + 1304, + 1305, + 1306, + 1307, + 1308, + 1309, + 1310, + 1311, + 1312, + 1313, + 1314, + 1315, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1331, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1342, + 1343, + 1344, + 1345, + 1346, + 1347, + 1348, + 1349, + 1350, + 1351, + 1352, + 1353, + 1354, + 1355, + 1356, + 1357, + 1358, + 1359, + 1360, + 1361, + 1362, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1371, + 1372, + 1373, + 1374, + 1375, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1386, + 1387, + 1388, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1399, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1413, + 1414, + 1415, + 1416, + 1417, + 1418, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1426, + 1427, + 1428, + 1429, + 1430, + 1431, + 1432, + 1433, + 1434, + 1435, + 1436, + 1437, + 1438, + 1439, + 1440, + 1441, + 1442, + 1443, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1455, + 1456, + 1457, + 1458, + 1459, + 1460, + 1461, + 1462, + 1463, + 1464, + 1465, + 1466, + 1467, + 1468, + 1469, + 1470, + 1471, + 1472, + 1473, + 1474, + 1475, + 1476, + 1477, + 1478, + 1479, + 1480, + 1481, + 1482, + 1483, + 1484, + 1485, + 1486, + 1487, + 1488, + 1489, + 1490, + 1491, + 1492, + 1493, + 1494, + 1495, + 1496, + 1497, + 1498, + 1499, + 1500, + 1501, + 1502, + 1503, + 1504, + 1505, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1516, + 1517, + 1518, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1529, + 1530, + 1531, + 1532, + 1533, + 1534, + 1535, + 1536, + 1537, + 1538, + 1539, + 1540, + 1541, + 1542, + 1543, + 1544, + 1545, + 1546, + 1547, + 1548, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1558, + 1559, + 1560, + 1561, + 1562, + 1563, + 1564, + 1565, + 1566, + 1567, + 1568, + 1569, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1582, + 1583, + 1584, + 1585, + 1586, + 1587, + 1588, + 1589, + 1590, + 1591, + 1592, + 1593, + 1594, + 1595, + 1596, + 1597, + 1598, + 1599, + 1600, + 1601, + 1602, + 1603, + 1604, + 1605, + 1606, + 1607, + 1608, + 1609, + 1610, + 1611, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1627, + 1628, + 1629, + 1630, + 1631, + 1632, + 1633, + 1634, + 1635, + 1636, + 1637, + 1638, + 1639, + 1640, + 1641, + 1642, + 1643, + 1644, + 1645, + 1646, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1654, + 1655, + 1656, + 1657, + 1658, + 1659, + 1660, + 1661, + 1662, + 1663, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1675, + 1676, + 1677, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1689, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1703, + 1704, + 1705, + 1706, + 1707, + 1708, + 1709, + 1710, + 1711, + 1712, + 1713, + 1714, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1724, + 1725, + 1726, + 1727, + 1728, + 1729, + 1730, + 1731, + 1732, + 1733, + 1734, + 1735, + 1736, + 1737, + 1738, + 1739, + 1740, + 1741, + 1742, + 1743, + 1744, + 1745, + 1746, + 1747, + 1748, + 1749, + 1750, + 1751, + 1752, + 1753, + 1754, + 1755, + 1756, + 1757, + 1758, + 1759, + 1760, + 1761, + 1762, + 1763, + 1764, + 1765, + 1766, + 1767, + 1768, + 1769, + 1770, + 1771, + 1772, + 1773, + 1774, + 1775, + 1776, + 1777, + 1778, + 1779, + 1780, + 1781, + 1782, + 1783, + 1784, + 1785, + 1786, + 1787, + 1788, + 1789, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1798, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 1805, + 1806, + 1807, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 1814, + 1815, + 1816, + 1817, + 1818, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1854, + 1855, + 1856, + 1857, + 1858, + 1859, + 1860, + 1861, + 1862, + 1863, + 1864, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1875, + 1876, + 1877, + 1878, + 1879, + 1880, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 1887, + 1888, + 1889, + 1890, + 1891, + 1892, + 1893, + 1894, + 1895, + 1896, + 1897, + 1898, + 1899, + 1900, + 1901, + 1902, + 1903, + 1904, + 1905, + 1906, + 1907, + 1908, + 1909, + 1910, + 1911, + 1912, + 1913, + 1914, + 1915, + 1916, + 1917, + 1918, + 1919, + 1920, + 1921, + 1922, + 1923, + 1924, + 1925, + 1926, + 1927, + 1928, + 1929, + 1930, + 1931, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1945, + 1946, + 1947, + 1948, + 1949, + 1950, + 1951, + 1952, + 1953, + 1954, + 1955, + 1956, + 1957, + 1958, + 1959, + 1960, + 1961, + 1962, + 1963, + 1964, + 1965, + 1966, + 1967, + 1968, + 1969, + 1970, + 1971, + 1972, + 1973, + 1974, + 1975, + 1976, + 1977, + 1978, + 1979, + 1980, + 1981, + 1982, + 1983, + 1984, + 1985, + 1986, + 1987, + 1988, + 1989, + 1990, + 1991, + 1992, + 1993, + 1994, + 1995, + 1996, + 1997, + 1998, + 1999, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2006, + 2007, + 2008, + 2009, + 2010, + 2011, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2045, + 2046, + 2047, + 2048, + 2049, + 2050, + 2051, + 2052, + 2053, + 2054, + 2055, + 2056, + 2057, + 2058, + 2059, + 2060, + 2061, + 2062, + 2063, + 2064, + 2065, + 2066, + 2067, + 2068, + 2069, + 2070, + 2071, + 2072, + 2073, + 2074, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2085, + 2086, + 2087, + 2088, + 2089, + 2090, + 2091, + 2092, + 2093, + 2094, + 2095, + 2096, + 2097, + 2098, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2106, + 2107, + 2108, + 2109, + 2110, + 2111, + 2112, + 2113, + 2114, + 2115, + 2116, + 2117, + 2118, + 2119, + 2120, + 2121, + 2122, + 2123, + 2124, + 2125, + 2126, + 2127, + 2128, + 2129, + 2130, + 2131, + 2132, + 2133, + 2134, + 2135, + 2136, + 2137, + 2138, + 2139, + 2140, + 2141, + 2142, + 2143, + 2144, + 2145, + 2146, + 2147, + 2148, + 2149, + 2150, + 2151, + 2152, + 2153, + 2154, + 2155, + 2156, + 2157, + 2158, + 2159, + 2160, + 2161, + 2162, + 2163, + 2164, + 2165, + 2166, + 2167, + 2168, + 2169, + 2170, + 2171, + 2172, + 2173, + 2174, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2184, + 2185, + 2186, + 2187, + 2188, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2198, + 2199, + 2200, + 2201, + 2202, + 2203, + 2204, + 2205, + 2206, + 2207, + 2208, + 2209, + 2210, + 2211, + 2212, + 2213, + 2214, + 2215, + 2216, + 2217, + 2218, + 2219, + 2220, + 2221, + 2222, + 2223, + 2224, + 2225, + 2226, + 2227, + 2228, + 2229, + 2230, + 2231, + 2232, + 2233, + 2234, + 2235, + 2236, + 2237, + 2238, + 2239, + 2240, + 2241, + 2242, + 2243, + 2244, + 2245, + 2246, + 2247, + 2248, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2285, + 2286, + 2287, + 2288, + 2289, + 2290, + 2291, + 2292, + 2293, + 2294, + 2295, + 2296, + 2297, + 2298, + 2299, + 2300, + 2301, + 2302, + 2303, + 2304, + 2305, + 2306, + 2307, + 2308, + 2309, + 2310, + 2311, + 2312, + 2313, + 2314, + 2315, + 2316, + 2317, + 2318, + 2319, + 2320, + 2321, + 2322, + 2323, + 2324, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2335, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2343, + 2344, + 2345, + 2346, + 2347, + 2348, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2357, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2369, + 2370, + 2371, + 2372, + 2373, + 2374, + 2375, + 2376, + 2377, + 2378, + 2379, + 2380, + 2381, + 2382, + 2383, + 2384, + 2385, + 2386, + 2387, + 2388, + 2389, + 2390, + 2391, + 2392, + 2393, + 2394, + 2395, + 2396, + 2397, + 2398, + 2399, + 2400, + 2401, + 2402, + 2403, + 2404, + 2405, + 2406, + 2407, + 2408, + 2409, + 2410, + 2411, + 2412, + 2413, + 2414, + 2415, + 2416, + 2417, + 2418, + 2419, + 2420, + 2421, + 2422, + 2423, + 2424, + 2425, + 2426, + 2427, + 2428, + 2429, + 2430, + 2431, + 2432, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2444, + 2445, + 2446, + 2447, + 2448, + 2449, + 2450, + 2451, + 2452, + 2453, + 2454, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2483, + 2484, + 2485, + 2486, + 2487, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 2494, + 2495, + 2496, + 2497, + 2498, + 2499, + 2500, + 2501, + 2502, + 2503, + 2504, + 2505, + 2506, + 2507, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2515, + 2516, + 2517, + 2518, + 2519, + 2520, + 2521, + 2522, + 2523, + 2524, + 2525, + 2526, + 2527, + 2528, + 2529, + 2530, + 2531, + 2532, + 2533, + 2534, + 2535, + 2536, + 2537, + 2538, + 2539, + 2540, + 2541, + 2542, + 2543, + 2544, + 2545, + 2546, + 2547, + 2548, + 2549, + 2550, + 2551, + 2552, + 2553, + 2554, + 2555, + 2556, + 2557, + 2558, + 2559, + 2560, + 2561, + 2562, + 2563, + 2564, + 2565, + 2566, + 2567, + 2568, + 2569, + 2570, + 2571, + 2572, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2580, + 2581, + 2582, + 2583, + 2584, + 2585, + 2586, + 2587, + 2588, + 2589, + 2590, + 2591, + 2592, + 2593, + 2594, + 2595, + 2596, + 2597, + 2598, + 2599, + 2600, + 2601, + 2602, + 2603, + 2604, + 2605, + 2606, + 2607, + 2608, + 2609, + 2610, + 2611, + 2612, + 2613, + 2614, + 2615, + 2616, + 2617, + 2618, + 2619, + 2620, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2633, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2643, + 2644, + 2645, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2655, + 2656, + 2657, + 2658, + 2659, + 2660, + 2661, + 2662, + 2663, + 2664, + 2665, + 2666, + 2667, + 2668, + 2669, + 2670, + 2671, + 2672, + 2673, + 2674, + 2675, + 2676, + 2677, + 2678, + 2679, + 2680, + 2681, + 2682, + 2683, + 2684, + 2685, + 2686, + 2687, + 2688, + 2689, + 2690, + 2691, + 2692, + 2693, + 2694, + 2695, + 2696, + 2697, + 2698, + 2699, + 2700, + 2701, + 2702, + 2703, + 2704, + 2705, + 2706, + 2707, + 2708, + 2709, + 2710, + 2711, + 2712, + 2713, + 2714, + 2715, + 2716, + 2717, + 2718, + 2719, + 2720, + 2721, + 2722, + 2723, + 2724, + 2725, + 2726, + 2727, + 2728, + 2729, + 2730, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2737, + 2738, + 2739, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2762, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2769, + 2770, + 2771, + 2772, + 2773, + 2774, + 2775, + 2776, + 2777, + 2778, + 2779, + 2780, + 2781, + 2782, + 2783, + 2784, + 2785, + 2786, + 2787, + 2788, + 2789, + 2790, + 2791, + 2792, + 2793, + 2794, + 2795, + 2796, + 2797, + 2798, + 2799, + 2800, + 2801, + 2802, + 2803, + 2804, + 2805, + 2806, + 2807, + 2808, + 2809, + 2810, + 2811, + 2812, + 2813, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2822, + 2823, + 2824, + 2825, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 2858, + 2859, + 2860, + 2861, + 2862, + 2863, + 2864, + 2865, + 2866, + 2867, + 2868, + 2869, + 2870, + 2871, + 2872, + 2873, + 2874, + 2875, + 2876, + 2877, + 2878, + 2879, + 2880, + 2881, + 2882, + 2883, + 2884, + 2885, + 2886, + 2887, + 2888, + 2889, + 2890, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2907, + 2908, + 2909, + 2910, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2927, + 2928, + 2929, + 2930, + 2931, + 2932, + 2933, + 2934, + 2935, + 2936, + 2937, + 2938, + 2939, + 2940, + 2941, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 2967, + 2968, + 2969, + 2970, + 2971, + 2972, + 2973, + 2974, + 2975, + 2976, + 2977, + 2978, + 2979, + 2980, + 2981, + 2982, + 2983, + 2984, + 2985, + 2986, + 2987, + 2988, + 2989, + 2990, + 2991, + 2992, + 2993, + 2994, + 2995, + 2996, + 2997, + 2998, + 2999, + 3000, + 3001, + 3002, + 3003, + 3004, + 3005, + 3006, + 3007, + 3008, + 3009, + 3010, + 3011, + 3012, + 3013, + 3014, + 3015, + 3016, + 3017, + 3018, + 3019, + 3020, + 3021, + 3022, + 3023, + 3024, + 3025, + 3026, + 3027, + 3028, + 3029, + 3030, + 3031, + 3032, + 3033, + 3034, + 3035, + 3036, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 3045, + 3046, + 3047, + 3048, + 3049, + 3050, + 3051, + 3052, + 3053, + 3054, + 3055, + 3056, + 3057, + 3058, + 3059, + 3060, + 3061, + 3062, + 3063, + 3064, + 3065, + 3066, + 3067, + 3068, + 3069, + 3070, + 3071, + 3072, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3079, + 3080, + 3081, + 3082, + 3083, + 3084, + 3085, + 3086, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3121, + 3122, + 3123, + 3124, + 3125, + 3126, + 3127, + 3128, + 3129, + 3130, + 3131, + 3132, + 3133, + 3134, + 3135, + 3136, + 3137, + 3138, + 3139, + 3140, + 3141, + 3142, + 3143, + 3144, + 3145, + 3146, + 3147, + 3148, + 3149, + 3150, + 3151, + 3152, + 3153, + 3154, + 3155, + 3156, + 3157, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 3164, + 3165, + 3166, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3200, + 3201, + 3202, + 3203, + 3204, + 3205, + 3206, + 3207, + 3208, + 3209, + 3210, + 3211, + 3212, + 3213, + 3214, + 3215, + 3216, + 3217, + 3218, + 3219, + 3220, + 3221, + 3222, + 3223, + 3224, + 3225, + 3226, + 3227, + 3228, + 3229, + 3230, + 3231, + 3232, + 3233, + 3234, + 3235, + 3236, + 3237, + 3238, + 3239, + 3240, + 3241, + 3242, + 3243, + 3244, + 3245, + 3246, + 3247, + 3248, + 3249, + 3250, + 3251, + 3252, + 3253, + 3254, + 3255, + 3256, + 3257, + 3258, + 3259, + 3260, + 3261, + 3262, + 3263, + 3264, + 3265, + 3266, + 3267, + 3268, + 3269, + 3270, + 3271, + 3272, + 3273, + 3274, + 3275, + 3276, + 3277, + 3278, + 3279, + 3280, + 3281, + 3282, + 3283, + 3284, + 3285, + 3286, + 3287, + 3288, + 3289, + 3290, + 3291, + 3292, + 3293, + 3294, + 3295, + 3296, + 3297, + 3298, + 3299, + 3300, + 3301, + 3302, + 3303, + 3304, + 3305, + 3306, + 3307, + 3308, + 3309, + 3310, + 3311, + 3312, + 3313, + 3314, + 3315, + 3316, + 3317, + 3318, + 3319, + 3320, + 3321, + 3322, + 3323, + 3324, + 3325, + 3326, + 3327, + 3328, + 3329, + 3330, + 3331, + 3332, + 3333, + 3334, + 3335, + 3336, + 3337, + 3338, + 3339, + 3340, + 3341, + 3342, + 3343, + 3344, + 3345, + 3346, + 3347, + 3348, + 3349, + 3350, + 3351, + 3352, + 3353, + 3354, + 3355, + 3356, + 3357, + 3358, + 3359, + 3360, + 3361, + 3362, + 3363, + 3364, + 3365, + 3366, + 3367, + 3368, + 3369, + 3370, + 3371, + 3372, + 3373, + 3374, + 3375, + 3376, + 3377, + 3378, + 3379, + 3380, + 3381, + 3382, + 3383, + 3384, + 3385, + 3386, + 3387, + 3388, + 3389, + 3390, + 3391, + 3392, + 3393, + 3394, + 3395, + 3396, + 3397, + 3398, + 3399, + 3400, + 3401, + 3402, + 3403, + 3404, + 3405, + 3406, + 3407, + 3408, + 3409, + 3410, + 3411, + 3412, + 3413, + 3414, + 3415, + 3416, + 3417, + 3418, + 3419, + 1, + 62, + 11, + 11, + 16, + 26, + 27, + 0, + 28, + 0, + 36, + 84, + 45, + 39, + 32, + 51, + 52, + 65, + 53, + 67, + 35, + 44, + 66, + 54, + 34, + 43, + 26, + 33, + 64, + 0, + 64, + 54, + 20, + 4, + 2, + 71, + 68, + 42, + 93, + 88, + 31, + 101, + 92, + 93, + 94, + 104, + 91, + 89, + 90, + 99, + 9, + 1741, + 102, + 103, + 105, + 125, + 128, + 129, + 124, + 25, + 126, + 127, + 138, + 184, + 145, + 145, + 156, + 157, + 158, + 137, + 205, + 165, + 171, + 166, + 162, + 176, + 175, + 187, + 177, + 189, + 170, + 164, + 188, + 178, + 169, + 156, + 163, + 186, + 137, + 137, + 186, + 178, + 150, + 140, + 139, + 193, + 190, + 211, + 161, + 218, + 210, + 211, + 212, + 221, + 209, + 208, + 216, + 144, + 1743, + 219, + 220, + 222, + 240, + 243, + 244, + 239, + 155, + 241, + 242, + 435, + 260, + 254, + 274, + 280, + 269, + 424, + 300, + 290, + 291, + 292, + 293, + 294, + 299, + 310, + 298, + 297, + 296, + 295, + 295, + 290, + 304, + 309, + 303, + 490, + 492, + 318, + 317, + 261, + 257, + 512, + 516, + 530, + 332, + 533, + 423, + 350, + 307, + 357, + 308, + 308, + 365, + 349, + 347, + 358, + 359, + 360, + 364, + 353, + 352, + 361, + 365, + 357, + 351, + 350, + 355, + 356, + 362, + 366, + 354, + 363, + 393, + 394, + 282, + 337, + 281, + 289, + 391, + 334, + 390, + 286, + 332, + 266, + 394, + 395, + 307, + 303, + 440, + 451, + 453, + 427, + 431, + 432, + 434, + 433, + 435, + 435, + 429, + 41, + 47, + 436, + 40, + 45, + 45, + 46, + 436, + 452, + 453, + 446, + 437, + 460, + 461, + 264, + 327, + 329, + 525, + 278, + 268, + 322, + 547, + 546, + 428, + 562, + 733, + 557, + 575, + 581, + 570, + 724, + 601, + 591, + 592, + 593, + 594, + 595, + 600, + 611, + 599, + 598, + 597, + 596, + 596, + 591, + 605, + 610, + 604, + 780, + 619, + 782, + 618, + 563, + 802, + 806, + 820, + 633, + 823, + 723, + 651, + 608, + 609, + 609, + 666, + 650, + 648, + 659, + 660, + 661, + 665, + 654, + 653, + 662, + 666, + 658, + 652, + 651, + 656, + 657, + 663, + 667, + 655, + 664, + 694, + 695, + 583, + 638, + 582, + 590, + 692, + 635, + 691, + 587, + 633, + 567, + 695, + 696, + 608, + 604, + 658, + 745, + 738, + 747, + 727, + 729, + 730, + 732, + 731, + 733, + 733, + 728, + 168, + 734, + 167, + 171, + 171, + 746, + 734, + 747, + 735, + 628, + 630, + 815, + 579, + 569, + 623, + 837, + 836, + 207, + 198, + 856, + 854, + 194, + 198, + 860, + 893, + 862, + 897, + 863, + 883, + 879, + 858, + 857, + 853, + 860, + 861, + 887, + 859, + 888, + 889, + 857, + 870, + 861, + 873, + 888, + 886, + 884, + 910, + 882, + 881, + 915, + 879, + 883, + 880, + 879, + 912, + 924, + 938, + 909, + 883, + 885, + 945, + 200, + 197, + 201, + 910, + 911, + 910, + 914, + 947, + 915, + 915, + 1281, + 951, + 951, + 1282, + 951, + 954, + 952, + 955, + 954, + 965, + 990, + 989, + 988, + 968, + 995, + 993, + 1000, + 993, + 997, + 1002, + 998, + 1005, + 1003, + 962, + 1018, + 985, + 1015, + 970, + 1024, + 1021, + 1030, + 1027, + 1036, + 1033, + 1042, + 1039, + 1048, + 1045, + 1054, + 1051, + 1060, + 1057, + 1066, + 1063, + 1072, + 1069, + 1076, + 1075, + 1080, + 1077, + 969, + 1086, + 1083, + 1092, + 1089, + 1098, + 1095, + 1104, + 1101, + 1110, + 1107, + 1116, + 1113, + 1122, + 1119, + 1128, + 1125, + 1134, + 1131, + 1138, + 1137, + 1142, + 1139, + 972, + 1148, + 1145, + 1154, + 1151, + 1160, + 1157, + 1166, + 1163, + 1172, + 1169, + 1178, + 1175, + 1184, + 1181, + 1190, + 1187, + 1196, + 1193, + 1200, + 1199, + 1204, + 1201, + 1210, + 1207, + 1216, + 1213, + 1222, + 1219, + 1228, + 1225, + 1234, + 1231, + 1240, + 1237, + 1246, + 1243, + 1250, + 1252, + 1249, + 1258, + 1255, + 1262, + 1261, + 1268, + 950, + 953, + 954, + 1280, + 955, + 1288, + 196, + 195, + 195, + 76, + 1299, + 1301, + 77, + 72, + 1305, + 1338, + 1307, + 1308, + 1342, + 1328, + 1324, + 1303, + 1302, + 1298, + 1305, + 1306, + 1332, + 1304, + 1333, + 1334, + 1315, + 1302, + 1318, + 1306, + 1333, + 1331, + 1329, + 1355, + 1327, + 1326, + 1324, + 1363, + 1327, + 1328, + 1325, + 1382, + 1360, + 1369, + 1354, + 1328, + 1330, + 1390, + 78, + 75, + 79, + 1355, + 1356, + 1355, + 1359, + 1392, + 1360, + 1360, + 1396, + 1726, + 1397, + 1396, + 1396, + 1399, + 1400, + 1399, + 1410, + 1435, + 1434, + 1433, + 1413, + 1440, + 1438, + 1445, + 1443, + 1450, + 1448, + 1407, + 1415, + 1461, + 1430, + 1463, + 1460, + 1469, + 1466, + 1475, + 1472, + 1481, + 1478, + 1487, + 1484, + 1493, + 1490, + 1499, + 1496, + 1505, + 1502, + 1511, + 1508, + 1517, + 1514, + 1521, + 1520, + 1525, + 1522, + 1414, + 1531, + 1528, + 1537, + 1534, + 1543, + 1540, + 1549, + 1546, + 1555, + 1552, + 1561, + 1558, + 1567, + 1564, + 1573, + 1570, + 1579, + 1576, + 1583, + 1582, + 1587, + 1584, + 1417, + 1593, + 1590, + 1599, + 1596, + 1605, + 1602, + 1611, + 1608, + 1617, + 1614, + 1623, + 1620, + 1629, + 1626, + 1635, + 1632, + 1641, + 1638, + 1645, + 1644, + 1649, + 1646, + 1655, + 1652, + 1661, + 1658, + 1667, + 1664, + 1673, + 1670, + 1679, + 1676, + 1685, + 1682, + 1691, + 1688, + 1697, + 1694, + 1703, + 1700, + 1707, + 1706, + 1713, + 1395, + 1398, + 1725, + 1399, + 1733, + 74, + 73, + 73, + 1285, + 199, + 76, + 1730, + 1739, + 9, + 1740, + 10, + 144, + 1757, + 1758, + 1757, + 1759, + 1758, + 1757, + 1757, + 1759, + 1759, + 1765, + 1779, + 1769, + 1767, + 1778, + 1756, + 1746, + 1772, + 1752, + 1771, + 1770, + 1763, + 1777, + 1773, + 1766, + 1775, + 1776, + 1766, + 1777, + 1768, + 1767, + 1779, + 1764, + 1758, + 2146, + 1764, + 1784, + 1757, + 1764, + 1785, + 1765, + 1750, + 1759, + 1759, + 1750, + 1782, + 1761, + 1756, + 1748, + 1784, + 1764, + 1761, + 1753, + 1804, + 1784, + 1804, + 1781, + 1751, + 1880, + 1751, + 1784, + 1761, + 1783, + 1788, + 1786, + 1788, + 1789, + 1761, + 1774, + 1756, + 1818, + 1766, + 1751, + 1747, + 1757, + 1753, + 1748, + 1758, + 1758, + 1764, + 1759, + 1756, + 1761, + 1764, + 1751, + 1786, + 1765, + 1785, + 1813, + 1751, + 1888, + 1748, + 1889, + 1888, + 1890, + 1889, + 1888, + 1888, + 1747, + 1890, + 1750, + 1890, + 1896, + 1910, + 1898, + 1900, + 1899, + 1887, + 1903, + 1902, + 1894, + 1901, + 1908, + 1897, + 1906, + 1904, + 1909, + 1898, + 1910, + 1895, + 1889, + 1895, + 1915, + 1888, + 1895, + 1916, + 1896, + 1750, + 1890, + 1890, + 1754, + 1750, + 1913, + 1892, + 2801, + 1887, + 1748, + 1915, + 1753, + 1895, + 1892, + 1753, + 1935, + 2011, + 1915, + 1892, + 1914, + 1919, + 1917, + 1919, + 1920, + 1892, + 1887, + 1905, + 1949, + 1897, + 1751, + 1747, + 1888, + 1753, + 1748, + 1889, + 1889, + 1895, + 1890, + 1887, + 1998, + 1999, + 1892, + 1895, + 1751, + 1917, + 1896, + 1916, + 1944, + 1916, + 1917, + 2094, + 3050, + 2095, + 3069, + 2406, + 2096, + 2394, + 2097, + 2093, + 2098, + 1788, + 1754, + 1919, + 141, + 86, + 5, + 2109, + 2399, + 3056, + 2110, + 2115, + 2398, + 2208, + 2116, + 2140, + 2124, + 2122, + 2395, + 1755, + 2707, + 2132, + 2131, + 2203, + 2386, + 2141, + 2704, + 1780, + 1761, + 2486, + 2151, + 2154, + 2499, + 2153, + 2152, + 2211, + 2309, + 2495, + 2316, + 2483, + 2310, + 1789, + 1782, + 1783, + 1785, + 1785, + 1786, + 2405, + 2426, + 2409, + 2414, + 1787, + 2426, + 2410, + 2426, + 88, + 2502, + 2484, + 2493, + 2487, + 2494, + 2497, + 2504, + 2498, + 2503, + 2772, + 2864, + 2773, + 3057, + 3049, + 2776, + 2780, + 2796, + 1886, + 2781, + 2857, + 2788, + 3366, + 3044, + 3364, + 2802, + 1897, + 1908, + 1915, + 1892, + 1911, + 3155, + 2810, + 2813, + 3147, + 2811, + 2812, + 2861, + 2966, + 3154, + 2967, + 3142, + 1920, + 1913, + 1912, + 1935, + 1914, + 1916, + 1916, + 1917, + 3086, + 3065, + 3086, + 3072, + 3066, + 1918, + 3065, + 207, + 3141, + 3165, + 3146, + 3150, + 3149, + 3163, + 3157, + 3156, + 3164, + 206, + 87, + 1907, + 3418, + 3419; + } + + MeshMaterialList { + 1; + 6841; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 1.000000;1.000000;1.000000;1.000000;; + 0.000000; + 1.000000;1.000000;1.000000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "Tiny_skin.bmp"; + } + } + } + + XSkinMeshHeader { + 2; + 4; + 35; + } + + SkinWeights { + "Bip01_R_UpperArm"; + 156; + 0, + 3449, + 3429, + 3427, + 2, + 3454, + 4, + 3453, + 7, + 15, + 68, + 3456, + 69, + 70, + 71, + 3455, + 72, + 3940, + 73, + 4110, + 4109, + 74, + 4108, + 75, + 3980, + 76, + 4113, + 3936, + 77, + 3939, + 78, + 3979, + 79, + 3981, + 1294, + 1295, + 1296, + 1297, + 1298, + 3950, + 1299, + 3937, + 1300, + 1301, + 3938, + 1302, + 3958, + 3949, + 1303, + 3948, + 1304, + 3954, + 1305, + 3951, + 3941, + 1306, + 3960, + 3952, + 1307, + 3943, + 1308, + 3944, + 1309, + 1310, + 1311, + 1312, + 1313, + 1314, + 1315, + 3957, + 1316, + 1317, + 1318, + 3959, + 1319, + 1320, + 1321, + 1322, + 1323, + 1324, + 3967, + 3947, + 1325, + 3971, + 1326, + 3966, + 1327, + 3969, + 3965, + 1328, + 3976, + 3970, + 3946, + 1329, + 3963, + 1330, + 3977, + 1331, + 3962, + 1332, + 3953, + 1333, + 3961, + 3955, + 1334, + 3956, + 1335, + 1336, + 1337, + 1338, + 3942, + 1339, + 1340, + 1341, + 1342, + 3945, + 1343, + 1344, + 1345, + 1346, + 1347, + 1348, + 1349, + 1350, + 1351, + 1352, + 1353, + 1354, + 3975, + 1357, + 1358, + 1362, + 1364, + 1365, + 1366, + 1367, + 1384, + 1385, + 1386, + 1387, + 1388, + 1389, + 1390, + 3978, + 1391, + 1730, + 4114, + 1731, + 1732, + 1733, + 4107, + 1734, + 1735, + 1736, + 1737, + 1738; + 0.605239, + 0.605239, + 0.605239, + 0.605239, + 0.208568, + 0.208568, + 0.332183, + 0.332183, + 0.490972, + 0.001349, + 0.378335, + 0.378335, + 0.505176, + 0.547675, + 0.378478, + 0.378478, + 0.520681, + 0.520681, + 0.514052, + 0.514052, + 0.514052, + 0.489167, + 0.489167, + 0.500779, + 0.500779, + 0.344750, + 0.344750, + 0.344750, + 0.444251, + 0.444251, + 0.422197, + 0.422197, + 0.459563, + 0.459563, + 1.000000, + 1.000000, + 0.523285, + 0.702523, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.754566, + 0.754566, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999998, + 0.999998, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.937900, + 0.937900, + 0.843455, + 0.843455, + 1.000000, + 1.000000, + 0.692347, + 0.536598, + 0.635737, + 0.793743, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.562271, + 1.000000, + 0.606859, + 0.525610, + 0.525610, + 0.525610, + 0.505657, + 0.505657, + 0.499507, + 0.499507, + 0.502042, + 0.502042, + 0.502042, + 0.512201, + 0.512201, + 0.512201, + 0.512201, + 0.500000, + 0.500000, + 0.564140, + 0.564140, + 0.499982, + 0.499982, + 0.999997, + 0.999997, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.995135, + 0.936519, + 1.000000, + 0.999529, + 0.980016, + 0.999871, + 0.999950, + 1.000000, + 0.951632, + 0.002571, + 0.000138, + 0.003704, + 0.003704, + 0.000096, + 0.000000, + 0.000217, + 0.000002, + 0.000020, + 0.000376, + 0.001713, + 0.017345, + 0.266756, + 0.080934, + 0.226163, + 0.796931, + 1.000000, + 1.000000, + 1.000000, + 0.171247, + 0.501141, + 0.501141, + 0.569803, + 0.914754, + 0.873090, + 0.873090, + 1.000000, + 1.000000, + 0.999889, + 0.999994, + 0.979129; + -0.941743,-0.646748,0.574719,0.000000,-0.283133,-0.461979,-0.983825,0.000000,0.923060,-1.114919,0.257891,0.000000,-65.499557,30.497688,12.852692,1.000000;; + } + + SkinWeights { + "Bip01_Spine3"; + 299; + 0, + 3449, + 3429, + 3427, + 1, + 3420, + 2, + 3454, + 3, + 4, + 3453, + 5, + 4311, + 6, + 7, + 8, + 9, + 4116, + 3470, + 10, + 4118, + 12, + 13, + 15, + 16, + 3424, + 17, + 18, + 19, + 20, + 3452, + 21, + 22, + 30, + 31, + 3460, + 42, + 3457, + 43, + 3445, + 58, + 62, + 3421, + 68, + 3456, + 69, + 70, + 71, + 3455, + 72, + 3940, + 73, + 4110, + 4109, + 74, + 4108, + 75, + 3980, + 76, + 4113, + 3936, + 77, + 3939, + 78, + 3979, + 79, + 3981, + 85, + 86, + 4310, + 87, + 4428, + 88, + 4360, + 3459, + 89, + 3467, + 90, + 3468, + 91, + 3466, + 92, + 3462, + 93, + 3463, + 3458, + 94, + 3464, + 95, + 96, + 97, + 98, + 99, + 3469, + 100, + 101, + 3461, + 102, + 3472, + 103, + 3473, + 104, + 3465, + 105, + 3474, + 107, + 108, + 109, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 137, + 3509, + 3508, + 3489, + 138, + 3482, + 139, + 3514, + 140, + 3513, + 141, + 4309, + 142, + 143, + 144, + 4119, + 3527, + 146, + 147, + 148, + 149, + 150, + 3512, + 151, + 152, + 160, + 161, + 3518, + 169, + 3504, + 184, + 3483, + 190, + 3516, + 191, + 192, + 193, + 3515, + 194, + 3759, + 195, + 3935, + 3934, + 196, + 3933, + 197, + 3800, + 198, + 3760, + 3756, + 199, + 4112, + 200, + 3799, + 201, + 3801, + 206, + 4427, + 207, + 4417, + 3755, + 208, + 3525, + 209, + 3524, + 210, + 3520, + 211, + 3521, + 3517, + 212, + 3522, + 213, + 214, + 215, + 216, + 3526, + 217, + 218, + 3519, + 219, + 3529, + 220, + 3530, + 221, + 3523, + 222, + 3531, + 224, + 225, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 845, + 846, + 851, + 852, + 856, + 3757, + 943, + 946, + 1285, + 4111, + 1286, + 1287, + 1288, + 3932, + 1291, + 1293, + 1296, + 1297, + 1301, + 3938, + 1388, + 1391, + 1730, + 4114, + 1731, + 1732, + 1733, + 4107, + 1736, + 1738, + 1739, + 4115, + 1740, + 4117, + 1741, + 3471, + 1742, + 1743, + 3528, + 1744, + 1745, + 2101, + 2102, + 2103, + 2104, + 2105, + 2108, + 2109, + 4312, + 2110, + 4315, + 2111, + 2112, + 2392, + 2397, + 2398, + 4317, + 2399, + 4313, + 2400, + 2401, + 2416, + 2422, + 2423, + 3052, + 3055, + 3056, + 4314, + 3057, + 4373, + 3058, + 3059, + 3071, + 3076, + 3080, + 3081; + 0.394761, + 0.394761, + 0.394761, + 0.394761, + 1.000000, + 1.000000, + 0.791431, + 0.791431, + 0.934090, + 0.667817, + 0.667817, + 0.407500, + 0.407500, + 1.000000, + 0.509028, + 0.500334, + 0.742859, + 0.742859, + 0.742859, + 0.646150, + 0.646150, + 0.000826, + 1.000000, + 0.998651, + 1.000000, + 1.000000, + 0.002232, + 0.000057, + 0.000008, + 0.694294, + 0.694294, + 0.500000, + 0.500000, + 0.005182, + 1.000000, + 1.000000, + 0.000077, + 0.000077, + 0.000000, + 0.000000, + 0.000000, + 0.999987, + 0.999987, + 0.621665, + 0.621665, + 0.494824, + 0.452325, + 0.621522, + 0.621522, + 0.479319, + 0.479319, + 0.485948, + 0.485948, + 0.485948, + 0.510833, + 0.510833, + 0.499221, + 0.499221, + 0.655250, + 0.655250, + 0.655250, + 0.555749, + 0.555749, + 0.577803, + 0.577803, + 0.540437, + 0.540437, + 0.500000, + 0.518319, + 0.518319, + 0.330664, + 0.330664, + 0.499933, + 0.499933, + 0.499933, + 0.506729, + 0.506729, + 0.491771, + 0.491771, + 0.496988, + 0.496988, + 0.458505, + 0.458505, + 0.478085, + 0.478085, + 0.478085, + 0.509104, + 0.509104, + 0.500228, + 0.500000, + 0.500234, + 0.500000, + 0.500000, + 0.500000, + 0.098269, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.764280, + 1.000000, + 0.273957, + 0.495039, + 0.559469, + 0.432520, + 0.464423, + 0.334571, + 0.396879, + 0.503634, + 0.500003, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.388147, + 0.388147, + 0.388147, + 0.388147, + 1.000000, + 1.000000, + 0.792207, + 0.792207, + 0.667938, + 0.667938, + 0.401391, + 0.401391, + 1.000000, + 0.507531, + 0.789169, + 0.789169, + 0.789169, + 1.000000, + 0.998645, + 0.000055, + 0.000007, + 0.696843, + 0.696843, + 0.500000, + 0.500000, + 0.004977, + 1.000000, + 1.000000, + 0.000000, + 0.000000, + 0.999989, + 0.999989, + 0.622978, + 0.622978, + 0.494410, + 0.451237, + 0.619803, + 0.619803, + 0.471398, + 0.471398, + 0.488642, + 0.488642, + 0.488642, + 0.508940, + 0.508940, + 0.499498, + 0.499498, + 0.650302, + 0.650302, + 0.650302, + 0.577673, + 0.577673, + 0.575168, + 0.575168, + 0.540492, + 0.540492, + 0.329189, + 0.329189, + 0.499882, + 0.499882, + 0.499882, + 0.491653, + 0.491653, + 0.496898, + 0.496898, + 0.457891, + 0.457891, + 0.477594, + 0.477594, + 0.477594, + 0.510518, + 0.510518, + 0.500267, + 0.500000, + 0.500219, + 0.500000, + 0.500000, + 0.097802, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.770983, + 1.000000, + 0.494890, + 0.432088, + 0.463982, + 0.333385, + 0.395719, + 0.504955, + 0.500005, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.500000, + 0.500000, + 0.477163, + 0.297364, + 0.247515, + 0.247515, + 0.204713, + 0.827083, + 0.498934, + 0.498934, + 0.430994, + 0.086300, + 0.128177, + 0.128177, + 0.000124, + 0.021432, + 0.476715, + 0.297477, + 0.245434, + 0.245434, + 0.203069, + 0.828753, + 0.498859, + 0.498859, + 0.430197, + 0.085246, + 0.126910, + 0.126910, + 0.000111, + 0.020871, + 0.652828, + 0.652828, + 0.678677, + 0.678677, + 0.750800, + 0.750800, + 0.670469, + 0.786977, + 0.786977, + 0.692151, + 0.719323, + 0.510218, + 0.490223, + 0.490260, + 0.509821, + 0.001010, + 0.001002, + 0.000093, + 0.000093, + 0.000094, + 0.000094, + 0.000638, + 0.000637, + 0.000001, + 0.000017, + 0.000001, + 0.000001, + 0.000058, + 0.000058, + 0.000607, + 0.000268, + 0.002483, + 0.503803, + 0.525515, + 0.000001, + 0.000612, + 0.000059, + 0.000059, + 0.000001, + 0.000001, + 0.000018, + 0.000271, + 0.420472, + 0.002513, + 0.523967, + 0.503150; + -0.000000,-0.000002,1.278853,0.000000,1.100796,0.223046,0.000001,0.000000,-0.291970,1.440953,0.000002,0.000000,28.876726,-65.051079,-0.142296,1.000000;; + } + + SkinWeights { + "Bip01_Neck"; + 214; + 3, + 5, + 4311, + 8, + 9, + 4116, + 3470, + 10, + 4118, + 21, + 22, + 85, + 86, + 4310, + 87, + 4428, + 88, + 4360, + 3459, + 89, + 3467, + 90, + 3468, + 91, + 3466, + 92, + 3462, + 93, + 3463, + 3458, + 94, + 3464, + 95, + 96, + 97, + 98, + 99, + 3469, + 106, + 107, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 123, + 141, + 4309, + 144, + 4119, + 3527, + 151, + 152, + 206, + 4427, + 207, + 4417, + 3755, + 208, + 3525, + 209, + 3524, + 210, + 3520, + 211, + 3521, + 3517, + 212, + 3522, + 213, + 214, + 215, + 216, + 3526, + 223, + 224, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 238, + 845, + 846, + 1739, + 4115, + 1740, + 4117, + 1741, + 3471, + 1742, + 1743, + 3528, + 1744, + 1745, + 1754, + 4307, + 4249, + 1786, + 4351, + 4204, + 4183, + 1787, + 4356, + 1917, + 4409, + 4295, + 4290, + 4267, + 1918, + 4415, + 2091, + 2092, + 2093, + 4304, + 2094, + 4296, + 2095, + 4298, + 2096, + 4301, + 2097, + 4303, + 2098, + 4305, + 2099, + 2100, + 2101, + 2102, + 2103, + 2104, + 2105, + 2106, + 2107, + 2108, + 2393, + 2394, + 4302, + 2395, + 4323, + 2402, + 2403, + 2404, + 2405, + 4352, + 2406, + 4300, + 2407, + 2408, + 2409, + 4354, + 2410, + 4358, + 2411, + 2412, + 2413, + 2414, + 4355, + 2415, + 2416, + 2417, + 2418, + 2419, + 2420, + 2421, + 2422, + 2423, + 2426, + 4359, + 4357, + 4353, + 3049, + 4374, + 3050, + 4297, + 3051, + 3060, + 3061, + 3062, + 3063, + 3064, + 3065, + 4416, + 4411, + 3066, + 4414, + 3067, + 3068, + 3069, + 4299, + 3070, + 3071, + 3072, + 4413, + 3073, + 3074, + 3075, + 3076, + 3077, + 3078, + 3079, + 3080, + 3081, + 3086, + 4412, + 4410; + 0.065910, + 0.592500, + 0.592500, + 0.499666, + 0.257141, + 0.257141, + 0.257141, + 0.353850, + 0.353850, + 0.500000, + 0.500000, + 0.500000, + 0.481681, + 0.481681, + 0.669336, + 0.669336, + 0.500067, + 0.500067, + 0.500067, + 0.493271, + 0.493271, + 0.508229, + 0.508229, + 0.503012, + 0.503012, + 0.541495, + 0.541495, + 0.521915, + 0.521915, + 0.521915, + 0.490896, + 0.490896, + 0.499772, + 0.500000, + 0.499766, + 0.500000, + 0.500000, + 0.500000, + 1.000000, + 0.235720, + 0.726043, + 1.000000, + 0.504961, + 0.440531, + 0.567480, + 0.535577, + 0.665429, + 0.603121, + 0.496366, + 0.499997, + 0.000000, + 0.598609, + 0.598609, + 0.210831, + 0.210831, + 0.210831, + 0.500000, + 0.500000, + 0.670811, + 0.670811, + 0.500118, + 0.500118, + 0.500118, + 0.508347, + 0.508347, + 0.503102, + 0.503102, + 0.542109, + 0.542109, + 0.522406, + 0.522406, + 0.522406, + 0.489482, + 0.489482, + 0.499733, + 0.500000, + 0.499781, + 0.500000, + 0.500000, + 1.000000, + 0.229017, + 1.000000, + 0.505110, + 0.567912, + 0.536018, + 0.666615, + 0.604281, + 0.495045, + 0.499995, + 0.000000, + 0.500000, + 0.500000, + 0.347172, + 0.347172, + 0.321323, + 0.321323, + 0.249200, + 0.249200, + 0.329531, + 0.213023, + 0.213023, + 0.307849, + 0.280677, + 0.029899, + 0.029899, + 0.029899, + 0.000563, + 0.000563, + 0.000563, + 0.000563, + 0.447159, + 0.447159, + 0.000741, + 0.000741, + 0.000741, + 0.000741, + 0.000741, + 0.452299, + 0.452299, + 0.000256, + 0.000265, + 0.112240, + 0.112240, + 0.502882, + 0.502882, + 0.660151, + 0.660151, + 0.660342, + 0.660342, + 0.501958, + 0.501958, + 0.110146, + 0.110146, + 0.306701, + 0.307363, + 0.489782, + 0.509777, + 0.509740, + 0.490179, + 0.998990, + 0.966439, + 0.966459, + 0.998998, + 0.006305, + 0.286696, + 0.286696, + 0.102187, + 0.102187, + 0.432449, + 0.484491, + 0.144315, + 0.014990, + 0.014990, + 0.501776, + 0.501776, + 0.689126, + 0.616328, + 0.498337, + 0.498337, + 0.292995, + 0.292995, + 0.319511, + 0.489703, + 1.000000, + 0.970473, + 0.970473, + 1.000000, + 0.997517, + 0.986590, + 1.000000, + 0.043051, + 0.348847, + 0.069256, + 0.496197, + 0.474485, + 0.000614, + 0.000614, + 0.000614, + 0.000614, + 0.111179, + 0.111179, + 0.295001, + 0.295001, + 0.007394, + 0.437806, + 0.017223, + 0.151879, + 0.486630, + 0.330150, + 0.303562, + 0.303562, + 0.303562, + 0.498825, + 0.498825, + 0.615047, + 0.687810, + 0.501685, + 0.501685, + 0.491269, + 0.579528, + 0.970098, + 0.970098, + 1.000000, + 1.000000, + 0.986508, + 0.997487, + 0.046055, + 0.071046, + 0.352668, + 0.476033, + 0.496850, + 0.000875, + 0.000875, + 0.000875; + 0.000001,-0.000002,1.278853,0.000000,1.061682,-0.366513,-0.000001,0.000000,0.479769,1.389753,0.000002,0.000000,-44.801331,-49.085537,-0.142252,1.000000;; + } + + SkinWeights { + "Bip01_Spine2"; + 138; + 11, + 3423, + 3422, + 12, + 14, + 17, + 18, + 19, + 23, + 24, + 25, + 3479, + 26, + 3446, + 3425, + 27, + 3426, + 28, + 3428, + 29, + 30, + 38, + 39, + 3433, + 42, + 3457, + 43, + 3445, + 44, + 3441, + 48, + 49, + 51, + 3435, + 52, + 3436, + 53, + 3438, + 54, + 3451, + 3443, + 58, + 59, + 60, + 61, + 62, + 3421, + 63, + 66, + 3442, + 67, + 3439, + 80, + 81, + 82, + 83, + 100, + 125, + 3475, + 126, + 3480, + 127, + 3481, + 128, + 3476, + 130, + 132, + 133, + 134, + 135, + 145, + 3485, + 3484, + 148, + 149, + 153, + 154, + 155, + 3536, + 156, + 3505, + 3486, + 157, + 3487, + 158, + 3488, + 159, + 160, + 166, + 3493, + 169, + 3504, + 170, + 3500, + 172, + 173, + 175, + 3496, + 176, + 3495, + 177, + 3498, + 178, + 3511, + 3503, + 181, + 182, + 183, + 184, + 3483, + 185, + 188, + 3502, + 189, + 3499, + 202, + 203, + 204, + 217, + 240, + 3532, + 241, + 3537, + 242, + 3538, + 243, + 3533, + 245, + 247, + 248, + 249, + 250, + 1292, + 1737, + 3418, + 4430, + 3419, + 4431; + 1.000000, + 1.000000, + 1.000000, + 0.999173, + 0.999963, + 0.997768, + 0.999943, + 0.999992, + 1.000000, + 0.999958, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.994818, + 0.119980, + 0.012547, + 0.012547, + 0.999923, + 0.999923, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.026286, + 0.000075, + 0.992608, + 0.992608, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000013, + 0.000013, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.025573, + 0.009055, + 0.013395, + 0.009298, + 0.901731, + 0.682231, + 0.682231, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.001628, + 0.001628, + 1.000000, + 0.574870, + 1.000000, + 1.000000, + 0.000066, + 1.000000, + 1.000000, + 1.000000, + 0.999945, + 0.999993, + 1.000000, + 0.999959, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.995023, + 0.012193, + 0.012193, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.025939, + 0.000070, + 0.992952, + 0.992952, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000011, + 0.000011, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.009004, + 0.013264, + 0.009112, + 0.902198, + 0.683732, + 0.683732, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.001536, + 0.001536, + 1.000000, + 0.575759, + 1.000000, + 1.000000, + 0.000058, + 0.000008, + 0.000006, + 1.000000, + 1.000000, + 1.000000, + 1.000000; + -0.000000,-0.000002,1.278853,0.000000,1.106257,0.194155,0.000001,0.000000,-0.254150,1.448102,0.000002,0.000000,55.345093,-65.818558,-0.142298,1.000000;; + } + + SkinWeights { + "Bip01_Spine1"; + 135; + 14, + 24, + 32, + 3434, + 33, + 3447, + 34, + 3444, + 35, + 3440, + 36, + 3430, + 37, + 38, + 39, + 3433, + 40, + 3630, + 41, + 3627, + 45, + 3632, + 3631, + 3432, + 46, + 3633, + 47, + 3628, + 48, + 49, + 50, + 51, + 3435, + 55, + 56, + 57, + 64, + 3450, + 3448, + 65, + 3437, + 80, + 81, + 82, + 83, + 84, + 3431, + 124, + 3478, + 125, + 3475, + 128, + 3476, + 129, + 3477, + 131, + 132, + 135, + 136, + 154, + 162, + 3494, + 163, + 3506, + 164, + 3501, + 165, + 3491, + 166, + 3493, + 167, + 3740, + 168, + 3738, + 171, + 3742, + 3741, + 3492, + 172, + 173, + 174, + 175, + 3496, + 179, + 180, + 186, + 3510, + 3507, + 187, + 3497, + 202, + 203, + 204, + 205, + 3490, + 239, + 3535, + 240, + 3532, + 243, + 3533, + 244, + 3534, + 246, + 247, + 250, + 251, + 428, + 3650, + 436, + 3634, + 3629, + 438, + 439, + 440, + 3616, + 441, + 442, + 444, + 452, + 3635, + 454, + 456, + 734, + 3744, + 3739, + 736, + 737, + 738, + 3728, + 746, + 3743, + 748, + 847, + 848; + 0.000037, + 0.000042, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999541, + 0.880020, + 0.987453, + 0.987453, + 0.355829, + 0.355829, + 0.539595, + 0.539595, + 0.478610, + 0.478610, + 0.478610, + 0.478610, + 0.193697, + 0.193697, + 0.504065, + 0.504065, + 0.973714, + 0.999925, + 1.000000, + 0.007392, + 0.007392, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.974427, + 0.990945, + 0.986605, + 0.990703, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.317769, + 0.317769, + 0.998372, + 0.998372, + 1.000000, + 1.000000, + 1.000000, + 0.425130, + 0.999934, + 1.000000, + 0.000041, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.987807, + 0.987807, + 0.355636, + 0.355636, + 0.539137, + 0.539137, + 0.495096, + 0.495096, + 0.495096, + 0.495096, + 0.974061, + 0.999930, + 1.000000, + 0.007048, + 0.007048, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.990996, + 0.986736, + 0.990888, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.316268, + 0.316268, + 0.998464, + 0.998464, + 1.000000, + 1.000000, + 1.000000, + 0.424241, + 0.999942, + 1.000000, + 0.137283, + 0.137283, + 0.274429, + 0.274429, + 0.274429, + 0.292184, + 0.556285, + 0.480198, + 0.480198, + 0.108993, + 0.506586, + 0.129106, + 0.205417, + 0.205417, + 0.087526, + 0.173935, + 0.274599, + 0.274599, + 0.274599, + 0.292740, + 0.555983, + 0.480227, + 0.480227, + 0.205575, + 0.205575, + 0.174090, + 0.999988, + 0.999991; + -0.000000,-0.000002,1.278853,0.000000,1.106257,0.194155,0.000001,0.000000,-0.254150,1.448102,0.000002,0.000000,83.527077,-65.841003,-0.142298,1.000000;; + } + + SkinWeights { + "Bip01_R_Clavicle"; + 2; + 20, + 3452; + 0.305706, + 0.305706; + -1.253361,-0.000002,0.254069,0.000000,-0.218659,-0.223923,-1.078679,0.000000,0.058235,-1.440720,0.287274,0.000000,-7.853105,62.204407,2.554618,1.000000;; + } + + SkinWeights { + "Bip01_Spine"; + 196; + 37, + 40, + 3630, + 41, + 3627, + 45, + 3632, + 3631, + 3432, + 46, + 3633, + 47, + 3628, + 167, + 3740, + 168, + 3738, + 171, + 3742, + 3741, + 3492, + 252, + 253, + 256, + 257, + 3568, + 258, + 259, + 260, + 3540, + 263, + 264, + 3641, + 281, + 3604, + 289, + 3605, + 397, + 400, + 408, + 417, + 421, + 427, + 3619, + 428, + 3650, + 429, + 3626, + 430, + 431, + 3620, + 432, + 3621, + 433, + 3623, + 434, + 3622, + 435, + 3625, + 3624, + 3539, + 436, + 3634, + 3629, + 437, + 3638, + 438, + 439, + 440, + 3616, + 441, + 442, + 443, + 444, + 445, + 446, + 3637, + 447, + 448, + 449, + 450, + 451, + 3617, + 452, + 3635, + 453, + 3636, + 3618, + 454, + 455, + 456, + 457, + 458, + 459, + 460, + 3639, + 461, + 3640, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 473, + 474, + 481, + 482, + 483, + 484, + 548, + 551, + 554, + 555, + 556, + 559, + 560, + 561, + 562, + 3651, + 565, + 582, + 3714, + 590, + 3715, + 698, + 701, + 709, + 718, + 727, + 3730, + 728, + 3737, + 729, + 3731, + 730, + 3732, + 731, + 3734, + 732, + 3733, + 733, + 3736, + 3735, + 3652, + 734, + 3744, + 3739, + 735, + 3746, + 736, + 737, + 738, + 3728, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 3727, + 746, + 3743, + 747, + 3745, + 3729, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 759, + 760, + 761, + 763, + 764, + 771, + 772, + 773, + 774, + 838, + 841, + 844, + 847, + 848; + 0.000459, + 0.644171, + 0.644171, + 0.460405, + 0.460405, + 0.521390, + 0.521390, + 0.521390, + 0.521390, + 0.806303, + 0.806303, + 0.495935, + 0.495935, + 0.644364, + 0.644364, + 0.460863, + 0.460863, + 0.504904, + 0.504904, + 0.504904, + 0.504904, + 0.490317, + 1.000000, + 0.500000, + 1.000000, + 1.000000, + 1.000000, + 0.452523, + 1.000000, + 1.000000, + 1.000000, + 0.500000, + 0.500000, + 0.491192, + 0.491192, + 0.000010, + 0.000010, + 0.480348, + 0.000000, + 0.000731, + 0.000216, + 0.500000, + 1.000000, + 1.000000, + 0.862717, + 0.862717, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.725571, + 0.725571, + 0.725571, + 1.000000, + 1.000000, + 0.707816, + 0.443715, + 0.519802, + 0.519802, + 0.891007, + 0.493414, + 1.000000, + 0.870894, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.794583, + 0.794583, + 1.000000, + 1.000000, + 1.000000, + 0.912474, + 1.000000, + 0.826065, + 1.000000, + 1.000000, + 0.500000, + 1.000000, + 1.000000, + 0.500000, + 0.500000, + 1.000000, + 0.500000, + 1.000000, + 0.714864, + 0.500015, + 0.495456, + 0.537862, + 1.000000, + 0.362112, + 0.003282, + 1.000000, + 0.335473, + 1.000000, + 1.000000, + 0.500000, + 1.000000, + 0.061459, + 0.406936, + 0.725066, + 1.000000, + 1.000000, + 0.500000, + 1.000000, + 0.452941, + 1.000000, + 1.000000, + 1.000000, + 0.491389, + 0.491389, + 0.000010, + 0.000010, + 0.480816, + 0.000000, + 0.000763, + 0.000228, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.725401, + 0.725401, + 0.725401, + 1.000000, + 1.000000, + 0.707260, + 0.444017, + 0.519773, + 0.519773, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.794425, + 0.794425, + 1.000000, + 1.000000, + 1.000000, + 0.825910, + 1.000000, + 1.000000, + 0.500000, + 1.000000, + 0.500000, + 1.000000, + 0.716189, + 0.500014, + 0.495465, + 0.537762, + 1.000000, + 0.370655, + 0.003429, + 1.000000, + 0.336846, + 1.000000, + 1.000000, + 0.500000, + 1.000000, + 0.062153, + 0.407168, + 1.000000, + 0.000012, + 0.000009; + 0.000000,-0.000002,1.278853,0.000000,1.123165,-0.000895,-0.000000,0.000000,0.001171,1.470235,0.000002,0.000000,99.003029,-79.367149,-0.142336,1.000000;; + } + + SkinWeights { + "Bip01_L_UpperArm"; + 157; + 137, + 3509, + 3508, + 3489, + 139, + 3514, + 140, + 3513, + 143, + 147, + 190, + 3516, + 191, + 192, + 193, + 3515, + 194, + 3759, + 195, + 3935, + 3934, + 196, + 3933, + 197, + 3800, + 198, + 3760, + 3756, + 199, + 4112, + 200, + 3799, + 201, + 3801, + 849, + 850, + 851, + 852, + 853, + 3770, + 854, + 3758, + 855, + 856, + 3757, + 857, + 3777, + 3769, + 858, + 3768, + 859, + 3774, + 860, + 3771, + 3761, + 861, + 3779, + 3772, + 862, + 3763, + 863, + 3765, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 3778, + 871, + 872, + 873, + 3780, + 874, + 875, + 876, + 877, + 878, + 879, + 3791, + 3788, + 3767, + 880, + 3790, + 881, + 3786, + 882, + 3785, + 883, + 3796, + 3789, + 3766, + 884, + 3783, + 885, + 3797, + 886, + 3782, + 887, + 3773, + 888, + 3781, + 3775, + 889, + 3776, + 890, + 891, + 892, + 893, + 3762, + 894, + 895, + 896, + 897, + 3764, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 3795, + 912, + 3792, + 913, + 917, + 919, + 920, + 921, + 922, + 939, + 940, + 941, + 942, + 943, + 944, + 945, + 3798, + 946, + 1285, + 4111, + 1286, + 1287, + 1288, + 3932, + 1289, + 1290, + 1291, + 1292, + 1293; + 0.611853, + 0.611853, + 0.611853, + 0.611853, + 0.207793, + 0.207793, + 0.332061, + 0.332061, + 0.492469, + 0.001355, + 0.377022, + 0.377022, + 0.505590, + 0.548763, + 0.380197, + 0.380197, + 0.528602, + 0.528602, + 0.511358, + 0.511358, + 0.511358, + 0.491060, + 0.491060, + 0.500502, + 0.500502, + 0.349698, + 0.349698, + 0.349698, + 0.422326, + 0.422326, + 0.424832, + 0.424832, + 0.459508, + 0.459508, + 1.000000, + 1.000000, + 0.522837, + 0.702636, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.752485, + 0.752485, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999998, + 0.999998, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.940238, + 0.940238, + 0.843017, + 0.843017, + 1.000000, + 1.000000, + 0.692400, + 0.538017, + 0.636978, + 0.792629, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.562516, + 1.000000, + 0.609501, + 0.526981, + 0.526981, + 0.526981, + 0.526981, + 0.506875, + 0.506875, + 0.499506, + 0.499506, + 0.502402, + 0.502402, + 0.512438, + 0.512438, + 0.512438, + 0.512438, + 0.500000, + 0.500000, + 0.564264, + 0.564264, + 0.499990, + 0.499990, + 0.999998, + 0.999998, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.995240, + 0.937903, + 1.000000, + 0.999588, + 0.981116, + 0.999872, + 0.999950, + 1.000000, + 0.953465, + 0.002703, + 0.000144, + 0.003856, + 0.003856, + 0.000096, + 0.000096, + 0.000000, + 0.000218, + 0.000002, + 0.000021, + 0.000402, + 0.001797, + 0.017999, + 0.269651, + 0.082041, + 0.229561, + 0.795287, + 1.000000, + 1.000000, + 1.000000, + 0.172917, + 0.501066, + 0.501066, + 0.569005, + 0.913700, + 0.871823, + 0.871823, + 1.000000, + 1.000000, + 0.999876, + 0.999992, + 0.978568; + 0.941746,0.646745,0.574718,0.000000,-0.283133,-0.461979,0.983825,0.000000,0.923057,-1.114921,-0.257893,0.000000,-65.708862,30.353960,-12.980427,1.000000;; + } + + SkinWeights { + "Bip01_L_Clavicle"; + 2; + 150, + 3512; + 0.303157, + 0.303157; + 1.253361,-0.000002,0.254069,0.000000,-0.218659,-0.223923,1.078679,0.000000,0.058231,-1.440720,-0.287275,0.000000,-8.131670,62.204407,-2.611076,1.000000;; + } + + SkinWeights { + "Bip01_Pelvis"; + 33; + 252, + 254, + 3541, + 256, + 259, + 264, + 3641, + 421, + 459, + 461, + 3640, + 463, + 465, + 466, + 467, + 468, + 474, + 483, + 554, + 557, + 3653, + 559, + 561, + 751, + 753, + 755, + 756, + 757, + 758, + 764, + 773, + 1805, + 1936; + 0.509683, + 0.606020, + 0.606020, + 0.500000, + 0.547477, + 0.500000, + 0.500000, + 0.500000, + 0.500000, + 0.500000, + 0.500000, + 0.500000, + 0.285136, + 0.499985, + 0.504544, + 0.462138, + 0.664527, + 0.500000, + 0.274934, + 0.605750, + 0.605750, + 0.500000, + 0.547059, + 0.500000, + 0.500000, + 0.283811, + 0.499986, + 0.504535, + 0.462238, + 0.663154, + 0.500000, + 1.000000, + 1.000000; + -0.000002,0.000004,1.278853,0.000000,1.123165,-0.000000,0.000002,0.000000,0.000000,1.470235,-0.000004,0.000000,126.489456,-70.579353,-0.141854,1.000000;; + } + + SkinWeights { + "Bip01_R_Thigh"; + 144; + 254, + 3541, + 255, + 261, + 3567, + 262, + 265, + 266, + 3611, + 267, + 268, + 3646, + 269, + 3544, + 270, + 273, + 274, + 3542, + 275, + 278, + 3645, + 279, + 280, + 3543, + 281, + 3604, + 282, + 3602, + 283, + 284, + 285, + 286, + 3609, + 287, + 288, + 289, + 3605, + 311, + 313, + 322, + 3647, + 323, + 324, + 332, + 3610, + 3572, + 333, + 334, + 3607, + 335, + 336, + 337, + 3603, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 386, + 387, + 388, + 389, + 390, + 3608, + 391, + 3606, + 392, + 393, + 3600, + 394, + 3612, + 3601, + 395, + 3613, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 470, + 471, + 472, + 475, + 476, + 477, + 478, + 479, + 480, + 517, + 518, + 524, + 525, + 3644, + 533, + 3573, + 534, + 535, + 536, + 537, + 538, + 539, + 540, + 541, + 542, + 543, + 544, + 546, + 3649, + 547, + 3648, + 548, + 549, + 550, + 551, + 552, + 553, + 563, + 3679, + 581, + 3655, + 839; + 0.393980, + 0.393980, + 1.000000, + 0.796821, + 0.796821, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.973372, + 0.426944, + 0.426944, + 1.000000, + 1.000000, + 0.544990, + 0.984533, + 0.999195, + 0.999195, + 0.743688, + 0.445745, + 0.445745, + 1.000000, + 0.984714, + 0.984714, + 0.508808, + 0.508808, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999990, + 0.999990, + 1.000000, + 1.000000, + 0.000009, + 0.000009, + 0.000489, + 0.002645, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000320, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.908716, + 0.954129, + 0.999907, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.519652, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999269, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999784, + 1.000000, + 1.000000, + 1.000000, + 0.637888, + 0.996718, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000011, + 0.000008, + 0.000000, + 0.000000, + 0.000000, + 0.798798, + 0.798798, + 0.883879, + 0.998063, + 0.778724, + 0.679390, + 0.492835, + 0.737200, + 0.477944, + 0.442104, + 0.471318, + 1.000000, + 0.988985, + 0.691131, + 0.691131, + 0.977434, + 0.977434, + 0.938541, + 0.887283, + 1.000000, + 0.593064, + 1.000000, + 0.999984, + 0.204819, + 0.204819, + 0.015759, + 0.015759, + 0.114201; + -0.122195,-0.009615,-1.272965,0.000000,-1.117778,0.024505,0.107113,0.000000,0.030875,1.469844,-0.014066,0.000000,-130.245026,-68.027489,-17.265657,1.000000;; + } + + SkinWeights { + "Bip01_L_Thigh"; + 144; + 261, + 3567, + 280, + 3543, + 549, + 557, + 3653, + 558, + 563, + 3679, + 564, + 566, + 567, + 3721, + 568, + 569, + 3751, + 570, + 3656, + 571, + 574, + 575, + 3654, + 576, + 579, + 3750, + 580, + 581, + 3655, + 582, + 3714, + 583, + 3712, + 584, + 585, + 586, + 587, + 3719, + 588, + 589, + 590, + 3715, + 612, + 614, + 623, + 3752, + 624, + 625, + 633, + 3720, + 3683, + 634, + 635, + 3717, + 636, + 637, + 638, + 3713, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 687, + 688, + 689, + 690, + 691, + 3718, + 692, + 3716, + 693, + 694, + 3710, + 695, + 3722, + 3711, + 696, + 3723, + 697, + 698, + 699, + 700, + 701, + 702, + 703, + 704, + 705, + 706, + 707, + 708, + 709, + 710, + 711, + 712, + 713, + 714, + 715, + 716, + 717, + 718, + 719, + 720, + 721, + 760, + 761, + 762, + 765, + 766, + 767, + 768, + 769, + 770, + 807, + 808, + 814, + 815, + 3749, + 823, + 3684, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + 833, + 834, + 836, + 3754, + 837, + 3753, + 838, + 839, + 840, + 841, + 842, + 843; + 0.203179, + 0.203179, + 0.015286, + 0.015286, + 0.112717, + 0.394250, + 0.394250, + 1.000000, + 0.795181, + 0.795181, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.973936, + 0.428996, + 0.428996, + 1.000000, + 1.000000, + 0.544972, + 0.984486, + 0.999176, + 0.999176, + 0.742419, + 0.445910, + 0.445910, + 1.000000, + 0.984241, + 0.984241, + 0.508611, + 0.508611, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999990, + 0.999990, + 1.000000, + 1.000000, + 0.000009, + 0.000009, + 0.000473, + 0.002664, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000318, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.908719, + 0.953856, + 0.999909, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.519184, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999237, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999772, + 1.000000, + 1.000000, + 1.000000, + 0.629345, + 0.996571, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000011, + 0.000008, + 0.000000, + 0.000000, + 0.000000, + 0.800783, + 0.800783, + 0.885426, + 0.998182, + 0.778669, + 0.680971, + 0.493117, + 0.738892, + 0.478082, + 0.442423, + 0.471379, + 1.000000, + 0.989147, + 0.690110, + 0.690110, + 0.978029, + 0.978029, + 0.937847, + 0.885799, + 1.000000, + 0.592832, + 1.000000, + 0.999985; + 0.122195,0.009619,-1.272965,0.000000,-1.117778,0.024505,-0.107113,0.000000,0.030875,1.469844,0.014070,0.000000,-130.272186,-68.029633,17.548590,1.000000;; + } + + SkinWeights { + "Bip01_R_Calf"; + 195; + 267, + 268, + 3646, + 270, + 271, + 272, + 273, + 274, + 3542, + 275, + 276, + 277, + 278, + 3645, + 287, + 293, + 3550, + 298, + 3554, + 299, + 3552, + 303, + 3615, + 3562, + 307, + 3614, + 3576, + 309, + 3561, + 310, + 3553, + 312, + 314, + 315, + 316, + 317, + 3566, + 318, + 3565, + 319, + 320, + 321, + 322, + 3647, + 323, + 324, + 325, + 326, + 327, + 3642, + 328, + 329, + 3643, + 330, + 331, + 334, + 3607, + 336, + 343, + 344, + 345, + 346, + 347, + 3582, + 348, + 349, + 3581, + 350, + 3593, + 3575, + 351, + 3592, + 352, + 3588, + 353, + 3587, + 354, + 3598, + 355, + 3594, + 356, + 3595, + 357, + 3591, + 3577, + 358, + 3583, + 359, + 3584, + 360, + 3585, + 361, + 3589, + 362, + 3596, + 363, + 3599, + 364, + 3586, + 365, + 3590, + 3580, + 366, + 3597, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 378, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 425, + 485, + 486, + 487, + 488, + 489, + 490, + 3563, + 491, + 492, + 3564, + 493, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 502, + 503, + 504, + 505, + 506, + 507, + 508, + 509, + 510, + 511, + 512, + 3569, + 513, + 514, + 515, + 516, + 3570, + 517, + 518, + 519, + 520, + 521, + 522, + 523, + 524, + 525, + 3644, + 526, + 527, + 528, + 529, + 530, + 3571, + 531, + 532, + 533, + 3573, + 534, + 535, + 536, + 537, + 538, + 539, + 540, + 541, + 542, + 544, + 545, + 546, + 3649, + 547, + 3648, + 553; + 0.026628, + 0.573056, + 0.573056, + 0.455011, + 0.248355, + 0.607645, + 0.015467, + 0.000805, + 0.000805, + 0.256312, + 0.990209, + 0.999682, + 0.554255, + 0.554255, + 0.000000, + 0.000163, + 0.000163, + 0.006766, + 0.006766, + 0.000001, + 0.000001, + 0.274225, + 0.274225, + 0.274225, + 0.472155, + 0.472155, + 0.472155, + 0.000165, + 0.000165, + 0.003872, + 0.003872, + 1.000000, + 0.358415, + 0.498074, + 0.206102, + 0.997888, + 0.997888, + 0.519331, + 0.519331, + 1.000000, + 0.999600, + 1.000000, + 0.999990, + 0.999990, + 0.999511, + 0.997355, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000000, + 0.000000, + 0.999680, + 0.091284, + 0.045871, + 0.000094, + 0.081106, + 0.000049, + 0.000049, + 0.472477, + 0.002229, + 0.002229, + 0.006004, + 0.006004, + 0.006004, + 0.062354, + 0.062354, + 0.261482, + 0.261482, + 0.447819, + 0.447819, + 0.390951, + 0.390951, + 0.607455, + 0.607455, + 0.319347, + 0.319347, + 0.002868, + 0.002868, + 0.002868, + 0.054570, + 0.054570, + 0.134541, + 0.134541, + 0.093624, + 0.093624, + 0.539311, + 0.539311, + 0.191663, + 0.191663, + 0.179730, + 0.179730, + 0.056340, + 0.056340, + 0.731088, + 0.731088, + 0.731088, + 0.319088, + 0.319088, + 0.000359, + 0.003064, + 0.049797, + 0.236320, + 0.425663, + 0.352796, + 0.823837, + 0.413038, + 0.000386, + 0.030880, + 0.090852, + 0.059474, + 0.715907, + 0.138563, + 0.128868, + 0.029103, + 0.898838, + 0.279490, + 0.056695, + 0.028800, + 0.011590, + 1.000000, + 1.000000, + 0.465069, + 0.852364, + 0.852364, + 0.999499, + 0.505223, + 0.505223, + 0.499388, + 0.444644, + 0.999998, + 0.999999, + 0.999981, + 0.091767, + 0.242068, + 0.959793, + 0.397987, + 0.340201, + 0.504990, + 0.489005, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.998151, + 1.000000, + 1.000000, + 0.539095, + 0.966305, + 1.000000, + 0.999994, + 0.999994, + 0.999989, + 0.999992, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.201202, + 0.201202, + 0.116121, + 0.001937, + 0.221276, + 0.320610, + 0.507165, + 0.262800, + 0.522056, + 0.557896, + 0.528682, + 0.011015, + 1.000000, + 0.308869, + 0.308869, + 0.022566, + 0.022566, + 0.000016; + -0.120906,-0.020142,-1.272965,0.000000,-1.115712,-0.072214,0.107113,0.000000,-0.096302,1.467010,-0.014066,0.000000,-242.661957,-89.338974,-17.265659,1.000000;; + } + + SkinWeights { + "Bip01_R_Foot"; + 153; + 271, + 272, + 276, + 277, + 290, + 3559, + 3547, + 291, + 3548, + 292, + 3549, + 293, + 3550, + 294, + 3551, + 295, + 3558, + 3557, + 296, + 3556, + 297, + 3555, + 298, + 3554, + 299, + 3552, + 300, + 3546, + 301, + 302, + 303, + 3615, + 3562, + 304, + 3560, + 305, + 306, + 307, + 3614, + 3576, + 308, + 3579, + 3578, + 309, + 3561, + 310, + 3553, + 314, + 315, + 316, + 317, + 3566, + 318, + 3565, + 319, + 320, + 321, + 346, + 347, + 3582, + 348, + 349, + 3581, + 350, + 3593, + 3575, + 351, + 3592, + 352, + 3588, + 353, + 3587, + 354, + 3598, + 355, + 3594, + 356, + 3595, + 357, + 3591, + 3577, + 358, + 3583, + 359, + 3584, + 360, + 3585, + 361, + 3589, + 362, + 3596, + 363, + 3599, + 364, + 3586, + 365, + 3590, + 3580, + 366, + 3597, + 367, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 378, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 422, + 423, + 3574, + 424, + 3545, + 425, + 426, + 485, + 486, + 487, + 488, + 489, + 490, + 3563, + 491, + 492, + 3564, + 493, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 502, + 503, + 504, + 511, + 513, + 514, + 516, + 3570; + 0.751645, + 0.392355, + 0.009791, + 0.000318, + 0.000001, + 0.000001, + 0.000001, + 0.057440, + 0.057440, + 1.000000, + 1.000000, + 0.999837, + 0.999837, + 1.000000, + 1.000000, + 0.000037, + 0.000037, + 0.000037, + 0.450821, + 0.450821, + 1.000000, + 1.000000, + 0.993234, + 0.993234, + 0.999999, + 0.999999, + 0.000045, + 0.000045, + 0.480823, + 0.999943, + 0.725775, + 0.725775, + 0.725775, + 0.000432, + 0.000432, + 0.558857, + 1.000000, + 0.527845, + 0.527845, + 0.527845, + 1.000000, + 1.000000, + 1.000000, + 0.999835, + 0.999835, + 0.996128, + 0.996128, + 0.641585, + 0.501926, + 0.793898, + 0.002112, + 0.002112, + 0.480669, + 0.480669, + 0.000000, + 0.000400, + 0.000000, + 0.918894, + 0.999951, + 0.999951, + 0.527523, + 0.997771, + 0.997771, + 0.993996, + 0.993996, + 0.993996, + 0.937646, + 0.937646, + 0.738518, + 0.738518, + 0.552181, + 0.552181, + 0.609049, + 0.609049, + 0.392545, + 0.392545, + 0.680653, + 0.680653, + 0.997131, + 0.997131, + 0.997131, + 0.945430, + 0.945430, + 0.865459, + 0.865459, + 0.906376, + 0.906376, + 0.460689, + 0.460689, + 0.808337, + 0.808337, + 0.820270, + 0.820270, + 0.943660, + 0.943660, + 0.268912, + 0.268912, + 0.268912, + 0.680912, + 0.680912, + 1.000000, + 0.999641, + 0.996936, + 0.950203, + 0.763680, + 0.574337, + 0.647204, + 0.176163, + 0.586962, + 0.999614, + 0.969120, + 0.909148, + 0.940526, + 0.284093, + 0.861437, + 0.871132, + 0.970897, + 0.101162, + 0.720510, + 0.620766, + 1.000000, + 1.000000, + 0.712070, + 0.712070, + 0.943305, + 1.000000, + 0.971200, + 0.988410, + 0.000000, + 0.000000, + 0.534931, + 0.147636, + 0.147636, + 0.000501, + 0.494777, + 0.494777, + 0.500612, + 0.555356, + 0.000002, + 0.000001, + 0.000019, + 0.908233, + 0.757932, + 0.040207, + 0.602013, + 0.659799, + 0.495010, + 0.510995, + 0.001849, + 0.460905, + 0.033695, + 0.000006, + 0.000006; + 0.000000,0.000002,-1.278853,0.000000,-1.123165,-0.000000,-0.000000,0.000000,-0.000000,1.470235,0.000002,0.000000,-363.589264,-65.273499,-52.807724,1.000000;; + } + + SkinWeights { + "Bip01_R_Toe0"; + 20; + 290, + 3559, + 3547, + 291, + 3548, + 295, + 3558, + 3557, + 296, + 3556, + 300, + 3546, + 301, + 302, + 304, + 3560, + 305, + 422, + 424, + 3545; + 0.999999, + 0.999999, + 0.999999, + 0.942560, + 0.942560, + 0.999963, + 0.999963, + 0.999963, + 0.549179, + 0.549179, + 0.999955, + 0.999955, + 0.519177, + 0.000057, + 0.999568, + 0.999568, + 0.441143, + 0.379234, + 0.287930, + 0.287930; + 0.000002,-0.000000,-1.278853,0.000000,-0.000000,1.123166,-0.000000,0.000000,1.470235,0.000000,0.000002,0.000000,-99.850662,391.012543,-52.807743,1.000000;; + } + + SkinWeights { + "Bip01_L_Calf"; + 195; + 568, + 569, + 3751, + 571, + 572, + 573, + 574, + 575, + 3654, + 576, + 577, + 578, + 579, + 3750, + 588, + 594, + 3662, + 599, + 3666, + 600, + 3664, + 604, + 3725, + 3674, + 608, + 3724, + 3687, + 610, + 3673, + 611, + 3665, + 613, + 615, + 616, + 617, + 618, + 3678, + 619, + 3676, + 620, + 621, + 622, + 623, + 3752, + 624, + 625, + 626, + 627, + 628, + 3747, + 629, + 630, + 3748, + 631, + 632, + 635, + 3717, + 637, + 644, + 645, + 646, + 647, + 648, + 3692, + 649, + 650, + 3691, + 651, + 3703, + 3686, + 652, + 3702, + 653, + 3698, + 654, + 3697, + 655, + 3708, + 656, + 3704, + 657, + 3705, + 658, + 3726, + 3701, + 659, + 3693, + 660, + 3694, + 661, + 3695, + 662, + 3699, + 663, + 3706, + 664, + 3709, + 665, + 3696, + 666, + 3700, + 3690, + 667, + 3707, + 669, + 670, + 671, + 672, + 673, + 674, + 675, + 676, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 685, + 686, + 725, + 775, + 776, + 777, + 778, + 779, + 780, + 3675, + 781, + 782, + 3677, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 795, + 796, + 797, + 798, + 799, + 800, + 801, + 802, + 3680, + 803, + 804, + 805, + 806, + 3681, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 3749, + 816, + 817, + 818, + 819, + 820, + 3682, + 821, + 822, + 823, + 3684, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + 834, + 835, + 836, + 3754, + 837, + 3753, + 843; + 0.026064, + 0.571004, + 0.571004, + 0.455028, + 0.248249, + 0.604345, + 0.015514, + 0.000824, + 0.000824, + 0.257581, + 0.990195, + 0.999682, + 0.554089, + 0.554089, + 0.000000, + 0.000158, + 0.000158, + 0.006843, + 0.006843, + 0.000001, + 0.000001, + 0.272648, + 0.272648, + 0.272648, + 0.472624, + 0.472624, + 0.472624, + 0.000161, + 0.000161, + 0.003903, + 0.003903, + 1.000000, + 0.357429, + 0.498086, + 0.204317, + 0.997876, + 0.997876, + 0.519316, + 0.519316, + 1.000000, + 0.999598, + 1.000000, + 0.999991, + 0.999991, + 0.999527, + 0.997336, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000000, + 0.000000, + 0.999682, + 0.091281, + 0.046144, + 0.000091, + 0.080118, + 0.000048, + 0.000048, + 0.472785, + 0.002242, + 0.002242, + 0.006073, + 0.006073, + 0.006073, + 0.062748, + 0.062748, + 0.262268, + 0.262268, + 0.448347, + 0.448347, + 0.391542, + 0.391542, + 0.607159, + 0.607159, + 0.319517, + 0.319517, + 0.002809, + 0.002809, + 0.002809, + 0.054075, + 0.054075, + 0.133582, + 0.133582, + 0.092798, + 0.092798, + 0.537874, + 0.537874, + 0.190501, + 0.190501, + 0.178618, + 0.178618, + 0.055746, + 0.055746, + 0.730401, + 0.730401, + 0.730401, + 0.319495, + 0.319495, + 0.000363, + 0.003114, + 0.050198, + 0.237229, + 0.426363, + 0.353552, + 0.823675, + 0.413357, + 0.000372, + 0.030495, + 0.089985, + 0.058787, + 0.714235, + 0.137448, + 0.127817, + 0.028669, + 0.898433, + 0.280034, + 0.057181, + 0.028794, + 0.011515, + 1.000000, + 1.000000, + 0.464511, + 0.852246, + 0.852246, + 0.999499, + 0.505163, + 0.505163, + 0.499411, + 0.444841, + 0.999999, + 0.999999, + 0.999981, + 0.091013, + 0.240829, + 0.959675, + 0.397767, + 0.339149, + 0.504983, + 0.489019, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.998162, + 1.000000, + 1.000000, + 0.538773, + 0.966243, + 1.000000, + 0.999994, + 0.999994, + 0.999989, + 0.999992, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.199217, + 0.199217, + 0.114574, + 0.001818, + 0.221331, + 0.319029, + 0.506883, + 0.261107, + 0.521918, + 0.557577, + 0.528621, + 0.010854, + 1.000000, + 0.309890, + 0.309890, + 0.021971, + 0.021971, + 0.000015; + 0.120906,0.020146,-1.272965,0.000000,-1.115712,-0.072214,-0.107113,0.000000,-0.096302,1.467010,0.014070,0.000000,-242.688828,-89.343452,17.548592,1.000000;; + } + + SkinWeights { + "Bip01_L_Foot"; + 153; + 572, + 573, + 577, + 578, + 591, + 3671, + 3659, + 592, + 3660, + 593, + 3661, + 594, + 3662, + 595, + 3663, + 596, + 3670, + 3669, + 597, + 3668, + 598, + 3667, + 599, + 3666, + 600, + 3664, + 601, + 3658, + 602, + 603, + 604, + 3725, + 3674, + 605, + 3672, + 606, + 607, + 608, + 3724, + 3687, + 609, + 3689, + 3688, + 610, + 3673, + 611, + 3665, + 615, + 616, + 617, + 618, + 3678, + 619, + 3676, + 620, + 621, + 622, + 647, + 648, + 3692, + 649, + 650, + 3691, + 651, + 3703, + 3686, + 652, + 3702, + 653, + 3698, + 654, + 3697, + 655, + 3708, + 656, + 3704, + 657, + 3705, + 658, + 3726, + 3701, + 659, + 3693, + 660, + 3694, + 661, + 3695, + 662, + 3699, + 663, + 3706, + 664, + 3709, + 665, + 3696, + 666, + 3700, + 3690, + 667, + 3707, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 675, + 676, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 685, + 686, + 722, + 723, + 3685, + 724, + 3657, + 725, + 726, + 775, + 776, + 777, + 778, + 779, + 780, + 3675, + 781, + 782, + 3677, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 801, + 803, + 804, + 806, + 3681; + 0.751751, + 0.395655, + 0.009805, + 0.000317, + 0.000001, + 0.000001, + 0.000001, + 0.057284, + 0.057284, + 1.000000, + 1.000000, + 0.999842, + 0.999842, + 1.000000, + 1.000000, + 0.000037, + 0.000037, + 0.000037, + 0.449247, + 0.449247, + 1.000000, + 1.000000, + 0.993157, + 0.993157, + 0.999999, + 0.999999, + 0.000045, + 0.000045, + 0.480725, + 0.999952, + 0.727352, + 0.727352, + 0.727352, + 0.000434, + 0.000434, + 0.557390, + 1.000000, + 0.527376, + 0.527376, + 0.527376, + 1.000000, + 1.000000, + 1.000000, + 0.999839, + 0.999839, + 0.996097, + 0.996097, + 0.642571, + 0.501914, + 0.795683, + 0.002124, + 0.002124, + 0.480684, + 0.480684, + 0.000000, + 0.000402, + 0.000000, + 0.919882, + 0.999952, + 0.999952, + 0.527215, + 0.997758, + 0.997758, + 0.993927, + 0.993927, + 0.993927, + 0.937252, + 0.937252, + 0.737732, + 0.737732, + 0.551653, + 0.551653, + 0.608458, + 0.608458, + 0.392841, + 0.392841, + 0.680483, + 0.680483, + 0.997191, + 0.997191, + 0.997191, + 0.945925, + 0.945925, + 0.866418, + 0.866418, + 0.907202, + 0.907202, + 0.462126, + 0.462126, + 0.809499, + 0.809499, + 0.821382, + 0.821382, + 0.944254, + 0.944254, + 0.269599, + 0.269599, + 0.269599, + 0.680505, + 0.680505, + 1.000000, + 0.999637, + 0.996886, + 0.949802, + 0.762771, + 0.573637, + 0.646448, + 0.176325, + 0.586643, + 0.999628, + 0.969505, + 0.910015, + 0.941213, + 0.285765, + 0.862552, + 0.872183, + 0.971331, + 0.101567, + 0.719966, + 0.620583, + 1.000000, + 1.000000, + 0.713557, + 0.713557, + 0.942819, + 1.000000, + 0.971206, + 0.988485, + 0.000000, + 0.000000, + 0.535488, + 0.147754, + 0.147754, + 0.000501, + 0.494837, + 0.494837, + 0.500589, + 0.555158, + 0.000002, + 0.000001, + 0.000019, + 0.908987, + 0.759171, + 0.040325, + 0.602233, + 0.660851, + 0.495017, + 0.510981, + 0.001838, + 0.461227, + 0.033757, + 0.000006, + 0.000006; + 0.000000,0.000002,-1.278853,0.000000,-1.123165,-0.000000,-0.000000,0.000000,-0.000000,1.470235,0.000002,0.000000,-363.589264,-65.273499,53.091980,1.000000;; + } + + SkinWeights { + "Bip01_L_Toe0"; + 20; + 591, + 3671, + 3659, + 592, + 3660, + 596, + 3670, + 3669, + 597, + 3668, + 601, + 3658, + 602, + 603, + 605, + 3672, + 606, + 722, + 724, + 3657; + 0.999999, + 0.999999, + 0.999999, + 0.942716, + 0.942716, + 0.999963, + 0.999963, + 0.999963, + 0.550753, + 0.550753, + 0.999955, + 0.999955, + 0.519275, + 0.000048, + 0.999566, + 0.999566, + 0.442610, + 0.379417, + 0.286443, + 0.286443; + 0.000002,0.000000,-1.278853,0.000000,-0.000000,1.123165,0.000000,0.000000,1.470235,0.000000,0.000002,0.000000,-99.850632,391.012512,53.091995,1.000000;; + } + + SkinWeights { + "Bip01_L_Forearm"; + 119; + 859, + 3774, + 862, + 3763, + 863, + 3765, + 866, + 867, + 868, + 869, + 876, + 878, + 879, + 3791, + 3788, + 3767, + 880, + 3790, + 881, + 3786, + 882, + 3785, + 883, + 3796, + 3789, + 3766, + 884, + 3783, + 885, + 3797, + 886, + 3782, + 887, + 3773, + 894, + 898, + 899, + 901, + 902, + 903, + 904, + 906, + 907, + 908, + 909, + 3795, + 910, + 3804, + 3802, + 3784, + 911, + 3803, + 912, + 3792, + 913, + 914, + 3805, + 915, + 3808, + 3807, + 3787, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 3793, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + 938, + 3794, + 939, + 940, + 941, + 942, + 947, + 3806, + 948, + 949, + 950, + 3927, + 951, + 3813, + 3811, + 3810, + 952, + 3815, + 1271, + 1272, + 1273, + 1274, + 1275, + 1276, + 1277, + 1278, + 1279, + 1280, + 3930, + 1281, + 3809, + 1282, + 3812, + 1283, + 1284; + 0.000002, + 0.000002, + 0.059762, + 0.059762, + 0.156983, + 0.156983, + 0.307600, + 0.461983, + 0.363022, + 0.207371, + 0.437484, + 0.390499, + 0.473019, + 0.473019, + 0.473019, + 0.473019, + 0.493125, + 0.493125, + 0.500494, + 0.500494, + 0.497598, + 0.497598, + 0.487562, + 0.487562, + 0.487562, + 0.487562, + 0.500000, + 0.500000, + 0.435736, + 0.435736, + 0.500010, + 0.500010, + 0.000002, + 0.000002, + 0.000000, + 0.004760, + 0.062097, + 0.000412, + 0.018884, + 0.000128, + 0.000050, + 0.046535, + 0.997297, + 0.999856, + 0.996144, + 0.996144, + 0.971005, + 0.971005, + 0.971005, + 0.971005, + 0.998600, + 0.998600, + 0.999904, + 0.999904, + 1.000000, + 0.522519, + 0.522519, + 0.500009, + 0.500009, + 0.500009, + 0.500009, + 1.000000, + 0.999782, + 1.000000, + 0.999998, + 0.999979, + 0.999598, + 0.998203, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.982001, + 0.730349, + 0.917959, + 0.770439, + 1.000000, + 1.000000, + 1.000000, + 0.825192, + 0.479548, + 0.479548, + 0.280624, + 0.280624, + 0.280624, + 0.280624, + 0.454016, + 0.454016, + 1.000000, + 1.000000, + 0.999997, + 0.522228, + 0.479390, + 0.437447, + 0.393686, + 0.431087, + 0.457384, + 0.338176, + 0.338176, + 0.610102, + 0.610102, + 0.527919, + 0.527919, + 0.541473, + 0.495169; + 0.888611,0.718008,0.574718,0.000000,-0.246358,-0.482594,0.983825,0.000000,1.006948,-1.039778,-0.257893,0.000000,-156.802475,18.217770,-12.980429,1.000000;; + } + + SkinWeights { + "Bip01_L_Hand"; + 76; + 910, + 3804, + 3802, + 3784, + 911, + 3803, + 914, + 3805, + 915, + 3808, + 3807, + 3787, + 949, + 950, + 3927, + 951, + 3813, + 3811, + 3810, + 952, + 3815, + 953, + 3928, + 954, + 3929, + 3817, + 3814, + 955, + 3931, + 3816, + 956, + 959, + 961, + 963, + 964, + 965, + 3818, + 973, + 974, + 981, + 982, + 983, + 984, + 986, + 987, + 988, + 3821, + 989, + 3820, + 991, + 1008, + 1263, + 1264, + 1265, + 1266, + 1267, + 1268, + 3926, + 1269, + 1270, + 1272, + 1273, + 1274, + 1275, + 1276, + 1277, + 1278, + 1279, + 1280, + 3930, + 1281, + 3809, + 1282, + 3812, + 1283, + 1284; + 0.028995, + 0.028995, + 0.028995, + 0.028995, + 0.001400, + 0.001400, + 0.477481, + 0.477481, + 0.499991, + 0.499991, + 0.499991, + 0.499991, + 0.174808, + 0.520452, + 0.520452, + 0.719376, + 0.719376, + 0.719376, + 0.719376, + 0.545984, + 0.545984, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000575, + 1.000000, + 1.000000, + 1.000000, + 0.489764, + 1.000000, + 1.000000, + 0.007399, + 0.000084, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.480738, + 0.480738, + 0.485043, + 0.485043, + 0.500000, + 0.008638, + 1.000000, + 0.044182, + 0.012334, + 0.004315, + 0.389840, + 0.201485, + 0.201485, + 1.000000, + 1.000000, + 0.000000, + 0.000002, + 0.477772, + 0.520610, + 0.562553, + 0.606314, + 0.568913, + 0.542616, + 0.661824, + 0.661824, + 0.389898, + 0.389898, + 0.472081, + 0.472081, + 0.458527, + 0.504831; + 0.888611,-0.574146,0.718465,0.000000,-0.246358,-0.984209,-0.481810,0.000000,1.006948,0.257065,-1.039984,0.000000,-218.473953,12.994934,18.207430,1.000000;; + } + + SkinWeights { + "Bip01_L_Finger1"; + 94; + 956, + 957, + 958, + 960, + 962, + 3832, + 969, + 3859, + 970, + 3836, + 971, + 972, + 3882, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 985, + 3834, + 993, + 3826, + 3824, + 998, + 3829, + 1001, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 3835, + 1016, + 1017, + 1018, + 3833, + 1019, + 1020, + 1021, + 3838, + 1022, + 1023, + 1024, + 3837, + 1025, + 1026, + 1077, + 3858, + 1078, + 1079, + 1080, + 3857, + 1081, + 1082, + 1083, + 3861, + 1087, + 1088, + 1139, + 3881, + 1140, + 1141, + 1142, + 3880, + 1143, + 1144, + 1148, + 3883, + 1149, + 1150, + 1201, + 3904, + 1202, + 1203, + 1204, + 3903, + 1205, + 1206, + 1210, + 3905, + 1211, + 1212, + 1264, + 1265, + 1266, + 1267, + 1268, + 3926; + 0.999425, + 0.999999, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.959444, + 0.959444, + 0.998224, + 0.998224, + 0.997435, + 0.994530, + 0.994530, + 0.992601, + 0.999916, + 0.999813, + 0.994714, + 0.988947, + 0.990024, + 0.999781, + 0.999208, + 1.000000, + 1.000000, + 0.056190, + 0.056190, + 0.056190, + 0.000462, + 0.000462, + 0.002074, + 0.991362, + 0.999365, + 0.998360, + 1.000000, + 1.000000, + 0.962750, + 0.958956, + 0.501562, + 0.501562, + 0.544088, + 0.624832, + 0.644254, + 0.644254, + 0.583404, + 0.507984, + 0.001016, + 0.001016, + 0.000028, + 0.000000, + 0.000000, + 0.000000, + 0.000074, + 0.001057, + 0.492123, + 0.492123, + 0.366961, + 0.325544, + 0.443569, + 0.443569, + 0.494251, + 0.499973, + 0.000000, + 0.000000, + 0.000000, + 0.000000, + 0.353513, + 0.353513, + 0.257215, + 0.363813, + 0.495090, + 0.495090, + 0.498815, + 0.462536, + 0.000000, + 0.000000, + 0.000000, + 0.000000, + 0.548101, + 0.548101, + 0.472535, + 0.435641, + 0.482943, + 0.482943, + 0.490011, + 0.524837, + 0.000024, + 0.000024, + 0.000028, + 0.000000, + 0.955818, + 0.987666, + 0.995685, + 0.610160, + 0.798515, + 0.798515; + 0.888611,-0.574718,0.718007,0.000000,-0.246358,-0.983825,-0.482594,0.000000,1.006948,0.257893,-1.039779,0.000000,-242.561966,12.625334,18.722528,1.000000;; + } + + SkinWeights { + "Bip01_L_Finger11"; + 246; + 957, + 958, + 960, + 969, + 3859, + 970, + 3836, + 971, + 972, + 3882, + 975, + 976, + 977, + 978, + 979, + 980, + 1009, + 1010, + 1013, + 1014, + 1015, + 3835, + 1016, + 1017, + 1018, + 3833, + 1019, + 1020, + 1021, + 3838, + 1022, + 1023, + 1024, + 3837, + 1025, + 1026, + 1027, + 3840, + 1028, + 1029, + 1030, + 3839, + 1031, + 1032, + 1033, + 3842, + 1034, + 1035, + 1036, + 3841, + 1037, + 1038, + 1039, + 3844, + 1040, + 1041, + 1042, + 3843, + 1043, + 1044, + 1045, + 3846, + 1046, + 1047, + 1048, + 3845, + 1049, + 1050, + 1051, + 3848, + 1052, + 1053, + 1054, + 3847, + 1055, + 1056, + 1057, + 3850, + 1058, + 1059, + 1060, + 3849, + 1061, + 1062, + 1077, + 3858, + 1078, + 1079, + 1080, + 3857, + 1081, + 1082, + 1083, + 3861, + 1084, + 1085, + 1086, + 3860, + 1087, + 1088, + 1089, + 3863, + 1090, + 1091, + 1092, + 3862, + 1093, + 1094, + 1095, + 3865, + 1096, + 1097, + 1098, + 3864, + 1099, + 1100, + 1101, + 3867, + 1102, + 1103, + 1104, + 3866, + 1105, + 1106, + 1107, + 3869, + 1108, + 1109, + 1110, + 3868, + 1111, + 1112, + 1139, + 3881, + 1140, + 1141, + 1142, + 3880, + 1143, + 1144, + 1145, + 3884, + 1146, + 1147, + 1148, + 3883, + 1149, + 1150, + 1151, + 3886, + 1152, + 1153, + 1154, + 3885, + 1155, + 1156, + 1157, + 3888, + 1158, + 1159, + 1160, + 3887, + 1161, + 1162, + 1163, + 3890, + 1164, + 1165, + 1166, + 3889, + 1167, + 1168, + 1169, + 3892, + 1170, + 1171, + 1172, + 3891, + 1173, + 1174, + 1178, + 3893, + 1201, + 3904, + 1202, + 1203, + 1204, + 3903, + 1205, + 1206, + 1207, + 3906, + 1208, + 1209, + 1210, + 3905, + 1211, + 1212, + 1213, + 3908, + 1214, + 1215, + 1216, + 3907, + 1217, + 1218, + 1219, + 3910, + 1220, + 1221, + 1222, + 3909, + 1223, + 1224, + 1225, + 3912, + 1226, + 1227, + 1228, + 3911, + 1229, + 1230, + 1231, + 3914, + 1232, + 1233, + 1234, + 3913, + 1235, + 1236, + 1237, + 3916, + 1238, + 1239, + 1240, + 3915, + 1241, + 1242, + 1243, + 3918, + 1244, + 1245, + 1246, + 3917, + 1247, + 1248; + 0.000001, + 0.000000, + 0.000000, + 0.040556, + 0.040556, + 0.001776, + 0.001776, + 0.002565, + 0.005470, + 0.005470, + 0.000187, + 0.005286, + 0.011053, + 0.009976, + 0.000219, + 0.000792, + 0.000635, + 0.001640, + 0.037250, + 0.041044, + 0.498439, + 0.498439, + 0.455912, + 0.375168, + 0.355747, + 0.355747, + 0.416596, + 0.492016, + 0.998984, + 0.998984, + 0.999972, + 1.000000, + 1.000000, + 1.000000, + 0.999926, + 0.998943, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999590, + 0.999590, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999972, + 0.687019, + 0.687019, + 0.853539, + 0.975075, + 0.984281, + 0.984281, + 0.931293, + 0.756339, + 0.454794, + 0.454794, + 0.386277, + 0.350143, + 0.375279, + 0.375279, + 0.395390, + 0.437087, + 0.047430, + 0.047430, + 0.013109, + 0.001288, + 0.000577, + 0.000577, + 0.003844, + 0.028016, + 0.507877, + 0.507877, + 0.633039, + 0.674456, + 0.556431, + 0.556431, + 0.505749, + 0.500027, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999996, + 0.999996, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999998, + 0.999965, + 0.763473, + 0.763473, + 0.945556, + 0.978392, + 0.941282, + 0.941282, + 0.833361, + 0.659726, + 0.455132, + 0.455132, + 0.309846, + 0.264637, + 0.353841, + 0.353841, + 0.421831, + 0.468652, + 0.000004, + 0.000004, + 0.000000, + 0.000000, + 0.000000, + 0.000000, + 0.000002, + 0.000008, + 0.646487, + 0.646487, + 0.742785, + 0.636187, + 0.504910, + 0.504910, + 0.501185, + 0.537464, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999946, + 0.999946, + 0.999997, + 0.999305, + 0.978899, + 0.978899, + 0.978208, + 0.997956, + 0.496668, + 0.496668, + 0.492731, + 0.498635, + 0.500000, + 0.500000, + 0.500000, + 0.499604, + 0.000245, + 0.000245, + 0.000164, + 0.000644, + 0.003351, + 0.003351, + 0.003048, + 0.000866, + 0.000000, + 0.000000, + 0.451899, + 0.451899, + 0.527465, + 0.564359, + 0.517057, + 0.517057, + 0.509989, + 0.475163, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999976, + 0.999976, + 0.999972, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999989, + 0.993070, + 0.993070, + 0.998995, + 1.000000, + 0.998765, + 0.998765, + 0.985174, + 0.792985, + 0.640530, + 0.640530, + 0.737351, + 0.957855, + 0.049642, + 0.049642, + 0.038349, + 0.067962, + 0.128283, + 0.128283, + 0.109217, + 0.077048; + 0.888611,-0.574718,0.718007,0.000000,-0.246358,-0.983825,-0.482594,0.000000,1.006948,0.257893,-1.039779,0.000000,-251.862015,12.625334,18.722525,1.000000;; + } + + SkinWeights { + "Bip01_L_Finger0"; + 17; + 964, + 966, + 967, + 968, + 3822, + 988, + 3821, + 989, + 3820, + 990, + 3819, + 991, + 992, + 994, + 995, + 3823, + 996; + 0.510236, + 0.957025, + 0.977791, + 1.000000, + 1.000000, + 0.519262, + 0.519262, + 0.514957, + 0.514957, + 0.500000, + 0.500000, + 0.500000, + 1.000000, + 0.000013, + 0.001700, + 0.001700, + 0.004007; + 0.131869,-1.109649,-0.621896,0.000000,0.164812,0.558010,-0.960710,0.000000,1.446397,0.024762,0.262515,0.000000,-185.006516,140.638351,15.450895,1.000000;; + } + + SkinWeights { + "Bip01_L_Finger01"; + 16; + 966, + 967, + 990, + 3819, + 992, + 993, + 3826, + 3824, + 994, + 995, + 3823, + 996, + 997, + 3827, + 1000, + 3825; + 0.042975, + 0.022209, + 0.500000, + 0.500000, + 0.000000, + 0.943810, + 0.943810, + 0.943810, + 0.999987, + 0.998300, + 0.998300, + 0.995993, + 1.000000, + 1.000000, + 0.019189, + 0.019189; + 0.588472,-0.949953,-0.621896,0.000000,-0.086455,0.575381,-0.960710,0.000000,1.300416,0.633716,0.262515,0.000000,-236.240311,45.016586,15.450904,1.000000;; + } + + SkinWeights { + "Bip01_L_Finger02"; + 15; + 998, + 3829, + 999, + 1000, + 3825, + 1001, + 1002, + 3828, + 1003, + 3831, + 1004, + 1005, + 3830, + 1006, + 1007; + 0.999538, + 0.999538, + 1.000000, + 0.980811, + 0.980811, + 0.997926, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000; + 0.322554,-1.069892,-0.621896,0.000000,0.065410,0.578152,-0.960710,0.000000,1.420123,0.275550,0.262515,0.000000,-222.297882,106.169159,15.450895,1.000000;; + } + + SkinWeights { + "Bip01_L_Finger12"; + 214; + 1039, + 3844, + 1044, + 1045, + 3846, + 1046, + 1047, + 1048, + 3845, + 1049, + 1050, + 1051, + 3848, + 1052, + 1053, + 1054, + 3847, + 1055, + 1056, + 1057, + 3850, + 1058, + 1059, + 1060, + 3849, + 1061, + 1062, + 1063, + 3852, + 1064, + 1065, + 1066, + 3851, + 1067, + 1068, + 1069, + 3854, + 1070, + 1071, + 1072, + 3853, + 1073, + 1074, + 1075, + 3856, + 1076, + 3855, + 1089, + 3863, + 1092, + 3862, + 1093, + 1094, + 1095, + 3865, + 1096, + 1097, + 1098, + 3864, + 1099, + 1100, + 1101, + 3867, + 1102, + 1103, + 1104, + 3866, + 1105, + 1106, + 1107, + 3869, + 1108, + 1109, + 1110, + 3868, + 1111, + 1112, + 1113, + 3871, + 1114, + 1115, + 1116, + 3870, + 1117, + 1118, + 1119, + 3873, + 1120, + 1121, + 1122, + 3872, + 1123, + 1124, + 1125, + 3875, + 1126, + 1127, + 1128, + 3874, + 1129, + 1130, + 1131, + 3877, + 1132, + 1133, + 1134, + 3876, + 1135, + 1136, + 1137, + 3879, + 1138, + 3878, + 1157, + 3888, + 1158, + 1159, + 1160, + 3887, + 1161, + 1162, + 1163, + 3890, + 1164, + 1165, + 1166, + 3889, + 1167, + 1168, + 1169, + 3892, + 1170, + 1171, + 1172, + 3891, + 1173, + 1174, + 1175, + 3894, + 1176, + 1177, + 1178, + 3893, + 1179, + 1180, + 1181, + 3896, + 1182, + 1183, + 1184, + 3895, + 1185, + 1186, + 1187, + 3898, + 1188, + 1189, + 1190, + 3897, + 1191, + 1192, + 1193, + 3900, + 1194, + 1195, + 1196, + 3899, + 1197, + 1198, + 1199, + 3902, + 1200, + 3901, + 1233, + 1234, + 3913, + 1235, + 1237, + 3916, + 1238, + 1239, + 1240, + 3915, + 1241, + 1242, + 1243, + 3918, + 1244, + 1245, + 1246, + 3917, + 1247, + 1248, + 1249, + 3921, + 1250, + 3919, + 1251, + 1252, + 3920, + 1253, + 1254, + 1255, + 3923, + 1256, + 1257, + 1258, + 3922, + 1259, + 1260, + 1261, + 3925, + 1262, + 3924; + 0.000410, + 0.000410, + 0.000028, + 0.312981, + 0.312981, + 0.146461, + 0.024925, + 0.015719, + 0.015719, + 0.068707, + 0.243661, + 0.545206, + 0.545206, + 0.613723, + 0.649857, + 0.624721, + 0.624721, + 0.604610, + 0.562913, + 0.952570, + 0.952570, + 0.986891, + 0.998712, + 0.999423, + 0.999423, + 0.996156, + 0.971984, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000004, + 0.000004, + 0.000000, + 0.000000, + 0.000002, + 0.000035, + 0.236527, + 0.236527, + 0.054444, + 0.021608, + 0.058718, + 0.058718, + 0.166639, + 0.340274, + 0.544868, + 0.544868, + 0.690154, + 0.735363, + 0.646159, + 0.646159, + 0.578169, + 0.531348, + 0.999996, + 0.999996, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999998, + 0.999992, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000054, + 0.000054, + 0.000003, + 0.000695, + 0.021101, + 0.021101, + 0.021792, + 0.002044, + 0.503332, + 0.503332, + 0.507269, + 0.501365, + 0.500000, + 0.500000, + 0.500000, + 0.500396, + 0.999754, + 0.999754, + 0.999836, + 0.999356, + 0.996649, + 0.996649, + 0.996952, + 0.999134, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000011, + 0.006930, + 0.006930, + 0.001005, + 0.001235, + 0.001235, + 0.014826, + 0.207015, + 0.359470, + 0.359470, + 0.262649, + 0.042145, + 0.950358, + 0.950358, + 0.961651, + 0.932038, + 0.871718, + 0.871718, + 0.890783, + 0.922952, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000; + 0.888611,-0.574718,0.718007,0.000000,-0.246358,-0.983825,-0.482594,0.000000,1.006948,0.257893,-1.039779,0.000000,-262.712067,12.625349,18.722527,1.000000;; + } + + SkinWeights { + "Bip01_R_Forearm"; + 118; + 1304, + 3954, + 1307, + 3943, + 1308, + 3944, + 1311, + 1312, + 1313, + 1314, + 1321, + 1323, + 1324, + 3967, + 3947, + 1325, + 3971, + 1326, + 3966, + 1327, + 3969, + 3965, + 1328, + 3976, + 3970, + 3946, + 1329, + 3963, + 1330, + 3977, + 1331, + 3962, + 1332, + 3953, + 1339, + 1343, + 1344, + 1346, + 1347, + 1348, + 1349, + 1351, + 1352, + 1353, + 1354, + 3975, + 1355, + 3984, + 3982, + 3964, + 1356, + 3983, + 1357, + 1358, + 1359, + 3985, + 1360, + 3988, + 3987, + 3973, + 1361, + 1362, + 1363, + 3968, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 3974, + 1370, + 1371, + 1372, + 1373, + 1374, + 1375, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 3972, + 1383, + 1384, + 1385, + 1386, + 1387, + 1392, + 3986, + 1393, + 1394, + 1395, + 4103, + 1396, + 3993, + 3992, + 3989, + 1397, + 3991, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1724, + 1725, + 4105, + 1726, + 3990, + 1727, + 1728, + 1729; + 0.000002, + 0.000002, + 0.062100, + 0.062100, + 0.156545, + 0.156545, + 0.307653, + 0.463402, + 0.364263, + 0.206257, + 0.437729, + 0.393141, + 0.474390, + 0.474390, + 0.474390, + 0.494343, + 0.494343, + 0.500493, + 0.500493, + 0.497958, + 0.497958, + 0.497958, + 0.487799, + 0.487799, + 0.487799, + 0.487799, + 0.500000, + 0.500000, + 0.435860, + 0.435860, + 0.500018, + 0.500018, + 0.000003, + 0.000003, + 0.000000, + 0.004865, + 0.063481, + 0.000471, + 0.019984, + 0.000129, + 0.000050, + 0.048368, + 0.997429, + 0.999862, + 0.996296, + 0.996296, + 0.969578, + 0.969578, + 0.969578, + 0.969578, + 0.998534, + 0.998534, + 0.999904, + 1.000000, + 0.521478, + 0.521478, + 0.500006, + 0.500006, + 0.500006, + 0.500006, + 1.000000, + 0.999783, + 1.000000, + 1.000000, + 0.999998, + 0.999980, + 0.999624, + 0.998287, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.982655, + 0.733244, + 0.919066, + 0.773837, + 1.000000, + 1.000000, + 1.000000, + 0.821199, + 0.479127, + 0.479127, + 0.373080, + 0.373080, + 0.373080, + 0.373080, + 0.494538, + 0.494538, + 1.000000, + 1.000000, + 0.999997, + 0.521167, + 0.479837, + 0.438248, + 0.533577, + 0.511417, + 0.457177, + 0.338835, + 0.338835, + 0.606293, + 0.606293, + 0.526599, + 0.539169, + 0.495281; + -0.888608,-0.718010,0.574719,0.000000,-0.246358,-0.482594,-0.983825,0.000000,1.006950,-1.039776,0.257891,0.000000,-156.604965,18.377340,12.852691,1.000000;; + } + + SkinWeights { + "Bip01_R_Hand"; + 74; + 1355, + 3984, + 3982, + 3964, + 1356, + 3983, + 1359, + 3985, + 1360, + 3988, + 3987, + 3973, + 1394, + 1395, + 4103, + 1396, + 3993, + 3992, + 3989, + 1397, + 3991, + 1398, + 4104, + 1399, + 4106, + 3996, + 3994, + 1400, + 3995, + 1401, + 1404, + 1406, + 1408, + 1409, + 1410, + 3997, + 1418, + 1419, + 1426, + 1427, + 1428, + 1429, + 1431, + 1432, + 1433, + 4000, + 1434, + 3999, + 1436, + 1453, + 1708, + 1709, + 1710, + 1711, + 1712, + 1713, + 4102, + 1714, + 1715, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1724, + 1725, + 4105, + 1726, + 3990, + 1727, + 1728, + 1729; + 0.030422, + 0.030422, + 0.030422, + 0.030422, + 0.001466, + 0.001466, + 0.478522, + 0.478522, + 0.499994, + 0.499994, + 0.499994, + 0.499994, + 0.178801, + 0.520873, + 0.520873, + 0.626920, + 0.626920, + 0.626920, + 0.626920, + 0.505462, + 0.505462, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000096, + 1.000000, + 1.000000, + 0.500000, + 0.470417, + 1.000000, + 1.000000, + 0.002561, + 0.000004, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.460453, + 0.460453, + 0.466427, + 0.466427, + 0.496454, + 0.002208, + 1.000000, + 0.022241, + 0.006276, + 0.001324, + 0.337075, + 0.124395, + 0.124395, + 1.000000, + 1.000000, + 0.000000, + 0.000003, + 0.478833, + 0.520163, + 0.561752, + 0.466423, + 0.488583, + 0.542824, + 0.661165, + 0.661165, + 0.393707, + 0.393707, + 0.473401, + 0.460831, + 0.504719; + -0.888608,0.574147,0.718468,0.000000,-0.246358,-0.984209,0.481810,0.000000,1.006950,0.257063,1.039981,0.000000,-218.276459,12.867327,-18.367111,1.000000;; + } + + SkinWeights { + "Bip01_R_Finger1"; + 88; + 1401, + 1402, + 1403, + 1405, + 1407, + 4008, + 1414, + 4036, + 1415, + 4009, + 1416, + 1417, + 4059, + 1418, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1430, + 4011, + 1438, + 4003, + 1443, + 4005, + 1446, + 1453, + 1454, + 1455, + 1456, + 1457, + 1458, + 1459, + 1460, + 4013, + 1461, + 4010, + 1462, + 1463, + 4012, + 1464, + 1465, + 1466, + 4015, + 1467, + 1469, + 4014, + 1470, + 1471, + 1522, + 4035, + 1523, + 1524, + 1525, + 4034, + 1526, + 1527, + 1533, + 1584, + 4058, + 1585, + 1586, + 1587, + 4057, + 1588, + 1589, + 1593, + 4060, + 1594, + 1646, + 4081, + 1647, + 1648, + 1649, + 4080, + 1650, + 1651, + 1655, + 4082, + 1656, + 1709, + 1710, + 1711, + 1712, + 1713, + 4102; + 0.999904, + 0.999575, + 0.999896, + 0.999998, + 0.999965, + 0.999965, + 0.826216, + 0.826216, + 0.988180, + 0.988180, + 0.963893, + 0.941790, + 0.941790, + 0.997439, + 0.999996, + 0.984101, + 0.927449, + 0.946660, + 0.969436, + 0.999024, + 0.990114, + 1.000000, + 1.000000, + 0.051519, + 0.051519, + 0.000312, + 0.000312, + 0.001440, + 0.997792, + 0.988519, + 0.958418, + 0.999946, + 1.000000, + 0.898404, + 0.871105, + 0.499901, + 0.499901, + 0.475211, + 0.475211, + 0.475116, + 0.551148, + 0.551148, + 0.553986, + 0.503293, + 0.000385, + 0.000385, + 0.000002, + 0.000000, + 0.000000, + 0.000073, + 0.000839, + 0.424792, + 0.424792, + 0.175096, + 0.154834, + 0.359990, + 0.359990, + 0.479599, + 0.496175, + 0.000000, + 0.162945, + 0.162945, + 0.064365, + 0.151668, + 0.434586, + 0.434586, + 0.478500, + 0.374775, + 0.000000, + 0.000000, + 0.000000, + 0.193238, + 0.193238, + 0.106886, + 0.203754, + 0.409137, + 0.409137, + 0.427054, + 0.345515, + 0.000000, + 0.000000, + 0.000001, + 0.977759, + 0.993724, + 0.998676, + 0.662925, + 0.875605, + 0.875605; + -0.888608,0.574719,0.718010,0.000000,-0.246358,-0.983825,0.482594,0.000000,1.006950,0.257891,1.039776,0.000000,-242.364456,12.497601,-18.882097,1.000000;; + } + + SkinWeights { + "Bip01_R_Finger11"; + 254; + 1402, + 1403, + 1405, + 1407, + 4008, + 1414, + 4036, + 1415, + 4009, + 1416, + 1417, + 4059, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1454, + 1455, + 1456, + 1458, + 1459, + 1460, + 4013, + 1461, + 4010, + 1462, + 1463, + 4012, + 1464, + 1465, + 1466, + 4015, + 1467, + 1468, + 1469, + 4014, + 1470, + 1471, + 1472, + 4017, + 1473, + 1474, + 1475, + 4016, + 1476, + 1477, + 1478, + 4019, + 1479, + 1480, + 1481, + 4018, + 1482, + 1483, + 1484, + 4021, + 1485, + 1486, + 1487, + 4020, + 1488, + 1489, + 1490, + 4023, + 1491, + 1492, + 1493, + 4022, + 1494, + 1495, + 1496, + 4025, + 1497, + 1498, + 1499, + 4024, + 1500, + 1501, + 1502, + 4027, + 1503, + 1504, + 1505, + 4026, + 1506, + 1507, + 1508, + 4029, + 1513, + 1522, + 4035, + 1523, + 1524, + 1525, + 4034, + 1526, + 1527, + 1528, + 4038, + 1529, + 1530, + 1531, + 4037, + 1532, + 1533, + 1534, + 4040, + 1535, + 1536, + 1537, + 4039, + 1538, + 1539, + 1540, + 4042, + 1541, + 1542, + 1543, + 4041, + 1544, + 1545, + 1546, + 4044, + 1547, + 1548, + 1549, + 4043, + 1550, + 1551, + 1552, + 4046, + 1553, + 1554, + 1555, + 4045, + 1556, + 1557, + 1584, + 4058, + 1585, + 1586, + 1587, + 4057, + 1588, + 1589, + 1590, + 4061, + 1591, + 1592, + 1593, + 4060, + 1594, + 1595, + 1596, + 4063, + 1597, + 1598, + 1599, + 4062, + 1600, + 1601, + 1602, + 4065, + 1603, + 1604, + 1605, + 4064, + 1606, + 1607, + 1608, + 4067, + 1609, + 1610, + 1611, + 4066, + 1612, + 1613, + 1614, + 4069, + 1615, + 1616, + 1617, + 4068, + 1618, + 1619, + 1623, + 4070, + 1624, + 1646, + 4081, + 1647, + 1648, + 1649, + 4080, + 1650, + 1651, + 1652, + 4083, + 1653, + 1654, + 1655, + 4082, + 1656, + 1657, + 1658, + 4085, + 1659, + 1660, + 1661, + 4084, + 1662, + 1663, + 1664, + 4087, + 1665, + 1666, + 1667, + 4086, + 1668, + 1669, + 1670, + 4089, + 1671, + 1672, + 1673, + 4088, + 1674, + 1675, + 1676, + 4091, + 1677, + 1678, + 1679, + 4090, + 1680, + 1681, + 1682, + 4093, + 1683, + 1684, + 1685, + 4092, + 1686, + 1687, + 1688, + 4095, + 1689, + 1690, + 1691, + 4094, + 1692, + 1693; + 0.000425, + 0.000104, + 0.000002, + 0.000035, + 0.000035, + 0.173784, + 0.173784, + 0.011820, + 0.011820, + 0.036107, + 0.058210, + 0.058210, + 0.015899, + 0.072551, + 0.053340, + 0.030564, + 0.000976, + 0.009886, + 0.011481, + 0.041582, + 0.000054, + 0.101596, + 0.128895, + 0.500099, + 0.500099, + 0.524789, + 0.524789, + 0.524884, + 0.448852, + 0.448852, + 0.446014, + 0.496707, + 0.999615, + 0.999615, + 0.999998, + 1.000000, + 1.000000, + 1.000000, + 0.999927, + 0.999161, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999738, + 0.999738, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999990, + 0.732293, + 0.732293, + 0.886205, + 0.985333, + 0.992404, + 0.992404, + 0.959854, + 0.812284, + 0.489268, + 0.489268, + 0.456724, + 0.487872, + 0.558722, + 0.558722, + 0.534944, + 0.495299, + 0.141677, + 0.141677, + 0.042808, + 0.009349, + 0.010870, + 0.010870, + 0.042129, + 0.130213, + 0.000000, + 0.000000, + 0.000000, + 0.575208, + 0.575208, + 0.824904, + 0.845166, + 0.640010, + 0.640010, + 0.520401, + 0.503825, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999994, + 0.999994, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999999, + 0.999967, + 0.788284, + 0.788284, + 0.947229, + 0.980557, + 0.954581, + 0.954581, + 0.872298, + 0.693192, + 0.483189, + 0.483189, + 0.343736, + 0.320172, + 0.442659, + 0.442659, + 0.491581, + 0.499255, + 0.000025, + 0.000025, + 0.000001, + 0.000001, + 0.000008, + 0.000008, + 0.000046, + 0.000109, + 0.837055, + 0.837055, + 0.935635, + 0.848332, + 0.565414, + 0.565414, + 0.521500, + 0.625225, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999937, + 0.999937, + 0.999993, + 0.999085, + 0.980304, + 0.980304, + 0.982841, + 0.998364, + 0.503262, + 0.503262, + 0.492041, + 0.498016, + 0.500000, + 0.500000, + 0.500000, + 0.500995, + 0.000473, + 0.000473, + 0.000211, + 0.000957, + 0.007196, + 0.007196, + 0.009105, + 0.002560, + 0.000000, + 0.000000, + 0.000000, + 0.806762, + 0.806762, + 0.893114, + 0.796246, + 0.590863, + 0.590863, + 0.572946, + 0.654485, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999999, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999991, + 0.994261, + 0.994261, + 0.999425, + 1.000000, + 0.999589, + 0.999589, + 0.987588, + 0.800337, + 0.665842, + 0.665842, + 0.779593, + 0.974322, + 0.046310, + 0.046310, + 0.022865, + 0.060048, + 0.146116, + 0.146116, + 0.153619, + 0.123733; + -0.888608,0.574719,0.718010,0.000000,-0.246358,-0.983825,0.482594,0.000000,1.006950,0.257891,1.039776,0.000000,-251.664520,12.497601,-18.882095,1.000000;; + } + + SkinWeights { + "Bip01_R_Finger0"; + 17; + 1408, + 1409, + 1411, + 1412, + 1413, + 4001, + 1433, + 4000, + 1434, + 3999, + 1435, + 3998, + 1436, + 1437, + 1440, + 4002, + 1441; + 0.500000, + 0.529583, + 0.538317, + 0.843910, + 0.999997, + 0.999997, + 0.539547, + 0.539547, + 0.533573, + 0.533573, + 0.500000, + 0.500000, + 0.503546, + 0.999995, + 0.000235, + 0.000235, + 0.000825; + -0.131865,1.109649,-0.621897,0.000000,0.164812,0.558010,0.960710,0.000000,1.446398,0.024759,-0.262513,0.000000,-184.977188,140.391739,-15.312693,1.000000;; + } + + SkinWeights { + "Bip01_R_Finger01"; + 16; + 1411, + 1412, + 1413, + 4001, + 1435, + 3998, + 1437, + 1438, + 4003, + 1439, + 1440, + 4002, + 1441, + 1442, + 1445, + 4004; + 0.461683, + 0.156090, + 0.000003, + 0.000003, + 0.500000, + 0.500000, + 0.000006, + 0.948481, + 0.948481, + 1.000000, + 0.999765, + 0.999765, + 0.999175, + 1.000000, + 0.012123, + 0.012123; + -0.588468,0.949955,-0.621897,0.000000,-0.086455,0.575381,0.960710,0.000000,1.300418,0.633713,-0.262513,0.000000,-236.109512,44.805492,-15.312693,1.000000;; + } + + SkinWeights { + "Bip01_R_Finger02"; + 14; + 1443, + 4005, + 1444, + 1445, + 4004, + 1446, + 1447, + 1448, + 4007, + 1449, + 1450, + 4006, + 1451, + 1452; + 0.999688, + 0.999688, + 1.000000, + 0.987877, + 0.987877, + 0.998560, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000; + -0.322550,1.069893,-0.621897,0.000000,0.065410,0.578152,0.960710,0.000000,1.420124,0.275547,-0.262513,0.000000,-222.226196,105.931374,-15.312693,1.000000;; + } + + SkinWeights { + "Bip01_R_Finger12"; + 214; + 1484, + 4021, + 1489, + 1490, + 4023, + 1491, + 1492, + 1493, + 4022, + 1494, + 1495, + 1496, + 4025, + 1497, + 1498, + 1499, + 4024, + 1500, + 1501, + 1502, + 4027, + 1503, + 1504, + 1505, + 4026, + 1506, + 1507, + 1508, + 4029, + 1509, + 1510, + 1511, + 4028, + 1512, + 1513, + 1514, + 4031, + 1515, + 1516, + 1517, + 4030, + 1518, + 1519, + 1520, + 4033, + 1521, + 4032, + 1534, + 4040, + 1537, + 4039, + 1538, + 1539, + 1540, + 4042, + 1541, + 1542, + 1543, + 4041, + 1544, + 1545, + 1546, + 4044, + 1547, + 1548, + 1549, + 4043, + 1550, + 1551, + 1552, + 4046, + 1553, + 1554, + 1555, + 4045, + 1556, + 1557, + 1558, + 4048, + 1559, + 1560, + 1561, + 4047, + 1562, + 1563, + 1564, + 4050, + 1565, + 1566, + 1567, + 4049, + 1568, + 1569, + 1570, + 4052, + 1571, + 1572, + 1573, + 4051, + 1574, + 1575, + 1576, + 4054, + 1577, + 1578, + 1579, + 4053, + 1580, + 1581, + 1582, + 4056, + 1583, + 4055, + 1600, + 1602, + 4065, + 1603, + 1604, + 1605, + 4064, + 1606, + 1607, + 1608, + 4067, + 1609, + 1610, + 1611, + 4066, + 1612, + 1613, + 1614, + 4069, + 1615, + 1616, + 1617, + 4068, + 1618, + 1619, + 1620, + 4071, + 1621, + 1622, + 1623, + 4070, + 1624, + 1625, + 1626, + 4073, + 1627, + 1628, + 1629, + 4072, + 1630, + 1631, + 1632, + 4075, + 1633, + 1634, + 1635, + 4074, + 1636, + 1637, + 1638, + 4077, + 1639, + 1640, + 1641, + 4076, + 1642, + 1643, + 1644, + 4079, + 1645, + 4078, + 1678, + 1679, + 4090, + 1680, + 1682, + 4093, + 1683, + 1684, + 1685, + 4092, + 1686, + 1687, + 1688, + 4095, + 1689, + 1690, + 1691, + 4094, + 1692, + 1693, + 1694, + 4097, + 1695, + 1696, + 1697, + 4096, + 1698, + 1699, + 1700, + 4099, + 1701, + 1702, + 1703, + 4098, + 1704, + 1705, + 1706, + 4101, + 1707, + 4100; + 0.000262, + 0.000262, + 0.000010, + 0.267707, + 0.267707, + 0.113795, + 0.014667, + 0.007596, + 0.007596, + 0.040146, + 0.187716, + 0.510732, + 0.510732, + 0.543276, + 0.512128, + 0.441278, + 0.441278, + 0.465056, + 0.504701, + 0.858323, + 0.858323, + 0.957192, + 0.990651, + 0.989130, + 0.989130, + 0.957871, + 0.869787, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000006, + 0.000006, + 0.000000, + 0.000000, + 0.000001, + 0.000033, + 0.211716, + 0.211716, + 0.052771, + 0.019443, + 0.045419, + 0.045419, + 0.127702, + 0.306808, + 0.516811, + 0.516811, + 0.656264, + 0.679828, + 0.557341, + 0.557341, + 0.508419, + 0.500745, + 0.999975, + 0.999975, + 0.999999, + 0.999999, + 0.999992, + 0.999992, + 0.999954, + 0.999891, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000000, + 0.000063, + 0.000063, + 0.000007, + 0.000915, + 0.019696, + 0.019696, + 0.017159, + 0.001636, + 0.496738, + 0.496738, + 0.507959, + 0.501984, + 0.500000, + 0.500000, + 0.500000, + 0.499005, + 0.999527, + 0.999527, + 0.999789, + 0.999043, + 0.992804, + 0.992804, + 0.990895, + 0.997440, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.000009, + 0.005739, + 0.005739, + 0.000575, + 0.000411, + 0.000411, + 0.012412, + 0.199663, + 0.334158, + 0.334158, + 0.220407, + 0.025678, + 0.953690, + 0.953690, + 0.977135, + 0.939952, + 0.853884, + 0.853884, + 0.846381, + 0.876267, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000; + -0.888608,0.574719,0.718010,0.000000,-0.246358,-0.983825,0.482594,0.000000,1.006950,0.257891,1.039776,0.000000,-262.514587,12.497601,-18.882095,1.000000;; + } + + SkinWeights { + "Bip01_Head"; + 1955; + 1746, + 4135, + 1747, + 4276, + 4217, + 4192, + 1748, + 4279, + 4255, + 4210, + 4195, + 4167, + 1749, + 1750, + 4250, + 4246, + 4219, + 4163, + 4160, + 1751, + 4289, + 4275, + 4208, + 4203, + 4191, + 4178, + 4176, + 1752, + 4137, + 1753, + 4278, + 4260, + 4257, + 4194, + 4171, + 1754, + 4307, + 4249, + 1755, + 4324, + 1756, + 4200, + 4188, + 4166, + 4134, + 1757, + 4193, + 4156, + 4126, + 4125, + 4122, + 4120, + 1758, + 4197, + 4196, + 4152, + 4124, + 4121, + 1759, + 4199, + 4162, + 4161, + 4128, + 4127, + 4123, + 1760, + 1761, + 4333, + 4201, + 4186, + 4180, + 4170, + 4165, + 1762, + 1763, + 4140, + 1764, + 4202, + 4198, + 4169, + 4157, + 4154, + 4151, + 1765, + 4205, + 4159, + 4129, + 1766, + 4190, + 4146, + 4143, + 1767, + 4149, + 4132, + 1768, + 4148, + 1769, + 4131, + 1770, + 4139, + 1771, + 4138, + 1772, + 4136, + 1773, + 4142, + 1774, + 4187, + 1775, + 4144, + 1776, + 4145, + 1777, + 4147, + 4141, + 1778, + 4133, + 1779, + 4150, + 4130, + 1780, + 4332, + 1781, + 4175, + 1782, + 4347, + 4164, + 1783, + 4348, + 4181, + 1784, + 4179, + 4173, + 4168, + 4155, + 1785, + 4350, + 4349, + 4206, + 4158, + 1786, + 4351, + 4204, + 4183, + 1787, + 4356, + 1788, + 4306, + 4184, + 4182, + 1789, + 4346, + 4185, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1798, + 1799, + 1800, + 1801, + 1802, + 1803, + 1804, + 4174, + 4172, + 1806, + 1807, + 1808, + 1809, + 1810, + 1811, + 1812, + 1813, + 4207, + 1814, + 1815, + 1816, + 1817, + 1818, + 4189, + 1819, + 1820, + 1821, + 1822, + 1823, + 1824, + 1825, + 1826, + 1827, + 1828, + 1829, + 1830, + 1831, + 1832, + 1833, + 1834, + 1835, + 1836, + 1837, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 1845, + 1846, + 1847, + 1848, + 1849, + 1850, + 1851, + 1852, + 1853, + 1854, + 1855, + 1856, + 1857, + 1858, + 1859, + 1860, + 1861, + 1862, + 1863, + 1864, + 1865, + 1866, + 1867, + 1868, + 1869, + 1870, + 1871, + 1872, + 1873, + 1874, + 1875, + 1876, + 1877, + 1878, + 1879, + 1880, + 4177, + 1881, + 1882, + 1883, + 1884, + 1885, + 1886, + 4378, + 1887, + 4284, + 4271, + 4254, + 4226, + 1888, + 4277, + 4242, + 4216, + 4215, + 4212, + 4209, + 1889, + 4281, + 4280, + 4239, + 4214, + 4211, + 1890, + 4283, + 4248, + 4247, + 4220, + 4218, + 4213, + 1891, + 1892, + 4389, + 4287, + 4270, + 4264, + 4259, + 4252, + 1893, + 1894, + 4229, + 1895, + 4288, + 4282, + 4258, + 4243, + 4240, + 4238, + 1896, + 4291, + 4245, + 4221, + 1897, + 4386, + 4274, + 4232, + 1898, + 4236, + 4223, + 1899, + 4225, + 1900, + 4224, + 1901, + 4230, + 1902, + 4228, + 1903, + 4227, + 1904, + 4234, + 1905, + 4272, + 1906, + 4233, + 1907, + 4429, + 1908, + 4387, + 4231, + 1909, + 4235, + 1910, + 4237, + 4222, + 1911, + 4390, + 1912, + 4404, + 1913, + 4403, + 4251, + 1914, + 4406, + 4265, + 1915, + 4388, + 4263, + 4256, + 4241, + 1916, + 4408, + 4407, + 4294, + 4292, + 4244, + 1917, + 4409, + 4295, + 4290, + 4267, + 1918, + 4415, + 1919, + 4308, + 4268, + 4266, + 1920, + 4402, + 4269, + 1921, + 1922, + 1923, + 1924, + 1925, + 1926, + 1927, + 1928, + 1929, + 1930, + 1931, + 1932, + 1933, + 1934, + 1935, + 4405, + 4261, + 1937, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 4293, + 1945, + 1946, + 1947, + 1948, + 1949, + 4273, + 1950, + 1951, + 1952, + 1953, + 1954, + 1955, + 1956, + 1957, + 1958, + 1959, + 1960, + 1961, + 1962, + 1963, + 1964, + 1965, + 1966, + 1967, + 1968, + 1969, + 1970, + 1971, + 1972, + 1973, + 1974, + 1975, + 1976, + 1977, + 1978, + 1979, + 1980, + 1981, + 1982, + 1983, + 1984, + 1985, + 1986, + 1987, + 1988, + 1989, + 1990, + 1991, + 1992, + 1993, + 1994, + 1995, + 1996, + 1997, + 1998, + 4285, + 1999, + 4286, + 2000, + 2001, + 2002, + 2003, + 2004, + 2005, + 2006, + 2007, + 2008, + 2009, + 2010, + 2011, + 4262, + 2012, + 2013, + 2014, + 2015, + 2016, + 2017, + 2018, + 2019, + 2020, + 2021, + 2022, + 2023, + 2024, + 2025, + 2026, + 2027, + 2028, + 2029, + 2030, + 2031, + 2032, + 2033, + 2034, + 2035, + 2036, + 2037, + 2038, + 2039, + 2040, + 2041, + 2042, + 2043, + 2044, + 2045, + 2046, + 2047, + 2048, + 2049, + 2050, + 2051, + 2052, + 2053, + 2054, + 2055, + 2056, + 2057, + 2058, + 2059, + 2060, + 2061, + 2062, + 2063, + 2064, + 2065, + 2066, + 2067, + 2068, + 2069, + 2070, + 2071, + 2072, + 2073, + 2074, + 2075, + 2076, + 2077, + 2078, + 2079, + 2080, + 2081, + 2082, + 2083, + 2084, + 2085, + 2086, + 2087, + 2088, + 2089, + 2090, + 2091, + 2092, + 2093, + 4304, + 2094, + 4296, + 2095, + 4298, + 2096, + 4301, + 2097, + 4303, + 2098, + 4305, + 2099, + 2100, + 2106, + 2107, + 2109, + 4312, + 2110, + 4315, + 2111, + 2112, + 2113, + 2114, + 2115, + 4316, + 2116, + 4319, + 2117, + 2118, + 2119, + 2120, + 2121, + 2122, + 4322, + 2123, + 2124, + 4321, + 2125, + 2126, + 2127, + 2128, + 2129, + 2130, + 2131, + 4327, + 2132, + 4326, + 2133, + 2134, + 2135, + 2136, + 2137, + 2138, + 2139, + 2140, + 4320, + 2141, + 4330, + 2142, + 2143, + 2144, + 2145, + 2146, + 4153, + 2147, + 2148, + 2149, + 2150, + 2151, + 4335, + 2152, + 4339, + 2153, + 4338, + 2154, + 4336, + 2155, + 2156, + 2157, + 2158, + 2159, + 2160, + 2161, + 2162, + 2163, + 2164, + 2165, + 2166, + 2167, + 2168, + 2169, + 2170, + 2171, + 2172, + 2173, + 2174, + 2175, + 2176, + 2177, + 2178, + 2179, + 2180, + 2181, + 2182, + 2183, + 2184, + 2185, + 2186, + 2187, + 2188, + 2189, + 2190, + 2191, + 2192, + 2193, + 2194, + 2195, + 2196, + 2197, + 2198, + 2199, + 2200, + 2201, + 2202, + 2203, + 4328, + 2204, + 2205, + 2206, + 2207, + 2208, + 4318, + 2209, + 2210, + 2211, + 4340, + 2212, + 2213, + 2214, + 2215, + 2216, + 2217, + 2218, + 2219, + 2220, + 2221, + 2222, + 2223, + 2224, + 2225, + 2226, + 2227, + 2228, + 2229, + 2230, + 2231, + 2232, + 2233, + 2234, + 2235, + 2236, + 2237, + 2238, + 2239, + 2240, + 2241, + 2242, + 2243, + 2244, + 2245, + 2246, + 2247, + 2248, + 2249, + 2250, + 2251, + 2252, + 2253, + 2254, + 2255, + 2256, + 2257, + 2258, + 2259, + 2260, + 2261, + 2262, + 2263, + 2264, + 2265, + 2266, + 2267, + 2268, + 2269, + 2270, + 2271, + 2272, + 2273, + 2274, + 2275, + 2276, + 2277, + 2278, + 2279, + 2280, + 2281, + 2282, + 2283, + 2284, + 2285, + 2286, + 2287, + 2288, + 2289, + 2290, + 2291, + 2292, + 2293, + 2294, + 2295, + 2296, + 2297, + 2298, + 2299, + 2300, + 2301, + 2302, + 2303, + 2304, + 2305, + 2306, + 2307, + 2308, + 2309, + 4341, + 2310, + 4345, + 2311, + 2312, + 2313, + 2314, + 2315, + 2316, + 4343, + 2317, + 2318, + 2319, + 2320, + 2321, + 2322, + 2323, + 2324, + 2325, + 2326, + 2327, + 2328, + 2329, + 2330, + 2331, + 2332, + 2333, + 2334, + 2335, + 2336, + 2337, + 2338, + 2339, + 2340, + 2341, + 2342, + 2343, + 2344, + 2345, + 2346, + 2347, + 2348, + 2349, + 2350, + 2351, + 2352, + 2353, + 2354, + 2355, + 2356, + 2357, + 2358, + 2359, + 2360, + 2361, + 2362, + 2363, + 2364, + 2365, + 2366, + 2367, + 2368, + 2369, + 2370, + 2371, + 2372, + 2373, + 2374, + 2375, + 2376, + 2377, + 2378, + 2379, + 2380, + 2381, + 2382, + 2383, + 2384, + 2385, + 2386, + 4329, + 2387, + 2388, + 2389, + 2390, + 2391, + 2392, + 2393, + 2394, + 4302, + 2395, + 4323, + 2396, + 2397, + 2398, + 4317, + 2399, + 4313, + 2400, + 2401, + 2402, + 2403, + 2404, + 2405, + 4352, + 2406, + 4300, + 2407, + 2408, + 2409, + 4354, + 2410, + 4358, + 2411, + 2412, + 2414, + 4355, + 2417, + 2419, + 2420, + 2421, + 2424, + 2425, + 2426, + 4359, + 4357, + 4353, + 2427, + 2428, + 2429, + 2430, + 2431, + 2432, + 2433, + 2434, + 2435, + 2436, + 2437, + 2438, + 2439, + 2440, + 2441, + 2442, + 2443, + 2444, + 2445, + 2446, + 2447, + 2448, + 2449, + 2450, + 2451, + 2452, + 2453, + 2454, + 2455, + 2456, + 2457, + 2458, + 2459, + 2460, + 2461, + 2462, + 2463, + 2464, + 2465, + 2466, + 2467, + 2468, + 2469, + 2470, + 2471, + 2472, + 2473, + 2474, + 2475, + 2476, + 2477, + 2478, + 2479, + 2480, + 2481, + 2482, + 2483, + 4344, + 2484, + 4362, + 2485, + 2486, + 4334, + 2487, + 4364, + 2488, + 2489, + 2490, + 2491, + 2492, + 2493, + 4363, + 2494, + 4365, + 2495, + 4342, + 2496, + 2497, + 4366, + 2498, + 4368, + 2499, + 4337, + 2500, + 2501, + 2502, + 4361, + 2503, + 4369, + 2504, + 4367, + 2505, + 2506, + 2507, + 2508, + 2509, + 2510, + 2511, + 2512, + 2513, + 2514, + 2515, + 2516, + 2517, + 2518, + 2519, + 2520, + 2521, + 2522, + 2523, + 2524, + 2525, + 2526, + 2527, + 2528, + 2529, + 2530, + 2531, + 2532, + 2533, + 2534, + 2535, + 2536, + 2537, + 2538, + 2539, + 2540, + 2541, + 2542, + 2543, + 2544, + 2545, + 2546, + 2547, + 2548, + 2549, + 2550, + 2551, + 2552, + 2553, + 2554, + 2555, + 2556, + 2557, + 2558, + 2559, + 2560, + 2561, + 2562, + 2563, + 2564, + 2565, + 2566, + 2567, + 2568, + 2569, + 2570, + 2571, + 2572, + 2573, + 2574, + 2575, + 2576, + 2577, + 2578, + 2579, + 2580, + 2581, + 2582, + 2583, + 2584, + 2585, + 2586, + 2587, + 2588, + 2589, + 2590, + 2591, + 2592, + 2593, + 2594, + 2595, + 2596, + 2597, + 2598, + 2599, + 2600, + 2601, + 2602, + 2603, + 2604, + 2605, + 2606, + 2607, + 2608, + 2609, + 2610, + 2611, + 2612, + 2613, + 2614, + 2615, + 2616, + 2617, + 2618, + 2619, + 2620, + 2621, + 2622, + 2623, + 2624, + 2625, + 2626, + 2627, + 2628, + 2629, + 2630, + 2631, + 2632, + 2633, + 2634, + 2635, + 2636, + 2637, + 2638, + 2639, + 2640, + 2641, + 2642, + 2643, + 2644, + 2645, + 2646, + 2647, + 2648, + 2649, + 2650, + 2651, + 2652, + 2653, + 2654, + 2655, + 2656, + 2657, + 2658, + 2659, + 2660, + 2661, + 2662, + 2663, + 2664, + 2665, + 2666, + 2667, + 2668, + 2669, + 2670, + 2671, + 2672, + 2673, + 2674, + 2675, + 2676, + 2677, + 2678, + 2679, + 2680, + 2681, + 2682, + 2683, + 2684, + 2685, + 2686, + 2687, + 2688, + 2689, + 2690, + 2691, + 2692, + 2693, + 2694, + 2695, + 2696, + 2697, + 2698, + 2699, + 2700, + 2701, + 2702, + 2703, + 2704, + 4331, + 2705, + 2706, + 2707, + 4325, + 2708, + 2709, + 2710, + 2711, + 2712, + 2713, + 2714, + 2715, + 2716, + 2717, + 2718, + 2719, + 2720, + 2721, + 2722, + 2723, + 2724, + 2725, + 2726, + 2727, + 2728, + 2729, + 2730, + 2731, + 2732, + 2733, + 2734, + 2735, + 2736, + 2737, + 2738, + 2739, + 2740, + 2741, + 2742, + 2743, + 2744, + 2745, + 2746, + 2747, + 2748, + 2749, + 2750, + 2751, + 2752, + 2753, + 2754, + 2755, + 2756, + 2757, + 2758, + 2759, + 2760, + 2761, + 2762, + 2763, + 2764, + 2765, + 2766, + 2767, + 2768, + 2769, + 2770, + 2771, + 2772, + 4370, + 2773, + 4372, + 2774, + 2775, + 2776, + 4375, + 2777, + 2778, + 2779, + 2780, + 4376, + 2781, + 4379, + 2782, + 2783, + 2784, + 2785, + 2786, + 2787, + 2788, + 4381, + 2789, + 2790, + 2791, + 2792, + 2793, + 2794, + 2795, + 2796, + 4377, + 2797, + 2798, + 2799, + 2800, + 2801, + 4253, + 2802, + 4385, + 2803, + 2804, + 2805, + 2806, + 2807, + 2808, + 2809, + 2810, + 4392, + 2811, + 4395, + 2812, + 4396, + 2813, + 4393, + 2814, + 2815, + 2816, + 2817, + 2818, + 2819, + 2820, + 2821, + 2822, + 2823, + 2824, + 2825, + 2826, + 2827, + 2828, + 2829, + 2830, + 2831, + 2832, + 2833, + 2834, + 2835, + 2836, + 2837, + 2838, + 2839, + 2840, + 2841, + 2842, + 2843, + 2844, + 2845, + 2846, + 2847, + 2848, + 2849, + 2850, + 2851, + 2852, + 2853, + 2854, + 2855, + 2856, + 2857, + 4380, + 2858, + 2859, + 2860, + 2861, + 4397, + 2862, + 2863, + 2864, + 4371, + 2865, + 2866, + 2867, + 2868, + 2869, + 2870, + 2871, + 2872, + 2873, + 2874, + 2875, + 2876, + 2877, + 2878, + 2879, + 2880, + 2881, + 2882, + 2883, + 2884, + 2885, + 2886, + 2887, + 2888, + 2889, + 2890, + 2891, + 2892, + 2893, + 2894, + 2895, + 2896, + 2897, + 2898, + 2899, + 2900, + 2901, + 2902, + 2903, + 2904, + 2905, + 2906, + 2907, + 2908, + 2909, + 2910, + 2911, + 2912, + 2913, + 2914, + 2915, + 2916, + 2917, + 2918, + 2919, + 2920, + 2921, + 2922, + 2923, + 2924, + 2925, + 2926, + 2927, + 2928, + 2929, + 2930, + 2931, + 2932, + 2933, + 2934, + 2935, + 2936, + 2937, + 2938, + 2939, + 2940, + 2941, + 2942, + 2943, + 2944, + 2945, + 2946, + 2947, + 2948, + 2949, + 2950, + 2951, + 2952, + 2953, + 2954, + 2955, + 2956, + 2957, + 2958, + 2959, + 2960, + 2961, + 2962, + 2963, + 2964, + 2965, + 2966, + 4398, + 2967, + 4400, + 2968, + 2969, + 2970, + 2971, + 2972, + 2973, + 2974, + 2975, + 2976, + 2977, + 2978, + 2979, + 2980, + 2981, + 2982, + 2983, + 2984, + 2985, + 2986, + 2987, + 2988, + 2989, + 2990, + 2991, + 2992, + 2993, + 2994, + 2995, + 2996, + 2997, + 2998, + 2999, + 3000, + 3001, + 3002, + 3003, + 3004, + 3005, + 3006, + 3007, + 3008, + 3009, + 3010, + 3011, + 3012, + 3013, + 3014, + 3015, + 3016, + 3017, + 3018, + 3019, + 3020, + 3021, + 3022, + 3023, + 3024, + 3025, + 3026, + 3027, + 3028, + 3029, + 3030, + 3031, + 3032, + 3033, + 3034, + 3035, + 3036, + 3037, + 3038, + 3039, + 3040, + 3041, + 3042, + 3043, + 3044, + 4383, + 3045, + 3046, + 3047, + 3048, + 3049, + 4374, + 3050, + 4297, + 3051, + 3052, + 3053, + 3054, + 3055, + 3056, + 4314, + 3057, + 4373, + 3058, + 3059, + 3060, + 3061, + 3062, + 3063, + 3064, + 3065, + 4416, + 4411, + 3066, + 4414, + 3067, + 3068, + 3069, + 4299, + 3070, + 3072, + 4413, + 3075, + 3077, + 3078, + 3079, + 3082, + 3083, + 3084, + 3085, + 3086, + 4412, + 4410, + 3087, + 3088, + 3089, + 3090, + 3091, + 3092, + 3093, + 3094, + 3095, + 3096, + 3097, + 3098, + 3099, + 3100, + 3101, + 3102, + 3103, + 3104, + 3105, + 3106, + 3107, + 3108, + 3109, + 3110, + 3111, + 3112, + 3113, + 3114, + 3115, + 3116, + 3117, + 3118, + 3119, + 3120, + 3121, + 3122, + 3123, + 3124, + 3125, + 3126, + 3127, + 3128, + 3129, + 3130, + 3131, + 3132, + 3133, + 3134, + 3135, + 3136, + 3137, + 3138, + 3139, + 3140, + 3141, + 4418, + 3142, + 4401, + 3143, + 3144, + 3145, + 3146, + 4420, + 3147, + 4394, + 3148, + 3149, + 4422, + 3150, + 4421, + 3151, + 3152, + 3153, + 3154, + 4399, + 3155, + 4391, + 3156, + 4425, + 3157, + 4424, + 3158, + 3159, + 3160, + 3161, + 3162, + 3163, + 4423, + 3164, + 4426, + 3165, + 4419, + 3166, + 3167, + 3168, + 3169, + 3170, + 3171, + 3172, + 3173, + 3174, + 3175, + 3176, + 3177, + 3178, + 3179, + 3180, + 3181, + 3182, + 3183, + 3184, + 3185, + 3186, + 3187, + 3188, + 3189, + 3190, + 3191, + 3192, + 3193, + 3194, + 3195, + 3196, + 3197, + 3198, + 3199, + 3200, + 3201, + 3202, + 3203, + 3204, + 3205, + 3206, + 3207, + 3208, + 3209, + 3210, + 3211, + 3212, + 3213, + 3214, + 3215, + 3216, + 3217, + 3218, + 3219, + 3220, + 3221, + 3222, + 3223, + 3224, + 3225, + 3226, + 3227, + 3228, + 3229, + 3230, + 3231, + 3232, + 3233, + 3234, + 3235, + 3236, + 3237, + 3238, + 3239, + 3240, + 3241, + 3242, + 3243, + 3244, + 3245, + 3246, + 3247, + 3248, + 3249, + 3250, + 3251, + 3252, + 3253, + 3254, + 3255, + 3256, + 3257, + 3258, + 3259, + 3260, + 3261, + 3262, + 3263, + 3264, + 3265, + 3266, + 3267, + 3268, + 3269, + 3270, + 3271, + 3272, + 3273, + 3274, + 3275, + 3276, + 3277, + 3278, + 3279, + 3280, + 3281, + 3282, + 3283, + 3284, + 3285, + 3286, + 3287, + 3288, + 3289, + 3290, + 3291, + 3292, + 3293, + 3294, + 3295, + 3296, + 3297, + 3298, + 3299, + 3300, + 3301, + 3302, + 3303, + 3304, + 3305, + 3306, + 3307, + 3308, + 3309, + 3310, + 3311, + 3312, + 3313, + 3314, + 3315, + 3316, + 3317, + 3318, + 3319, + 3320, + 3321, + 3322, + 3323, + 3324, + 3325, + 3326, + 3327, + 3328, + 3329, + 3330, + 3331, + 3332, + 3333, + 3334, + 3335, + 3336, + 3337, + 3338, + 3339, + 3340, + 3341, + 3342, + 3343, + 3344, + 3345, + 3346, + 3347, + 3348, + 3349, + 3350, + 3351, + 3352, + 3353, + 3354, + 3355, + 3356, + 3357, + 3358, + 3359, + 3360, + 3361, + 3362, + 3363, + 3364, + 4384, + 3365, + 3366, + 4382, + 3367, + 3368, + 3369, + 3370, + 3371, + 3372, + 3373, + 3374, + 3375, + 3376, + 3377, + 3378, + 3379, + 3380, + 3381, + 3382, + 3383, + 3384, + 3385, + 3386, + 3387, + 3388, + 3389, + 3390, + 3391, + 3392, + 3393, + 3394, + 3395, + 3396, + 3397, + 3398, + 3399, + 3400, + 3401, + 3402, + 3403, + 3404, + 3405, + 3406, + 3407, + 3408, + 3409, + 3410, + 3411, + 3412, + 3413, + 3414, + 3415, + 3416, + 3417; + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.970101, + 0.970101, + 0.970101, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999437, + 0.999437, + 0.999437, + 0.999437, + 0.552841, + 0.552841, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999259, + 0.999259, + 0.999259, + 0.999259, + 0.999259, + 0.547701, + 0.547701, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999744, + 0.999735, + 0.887760, + 0.887760, + 0.497118, + 0.497118, + 0.339849, + 0.339849, + 0.339658, + 0.339658, + 0.498042, + 0.498042, + 0.889854, + 0.889854, + 0.693299, + 0.692637, + 0.033561, + 0.033541, + 0.999907, + 0.999907, + 0.999906, + 0.999906, + 0.999362, + 0.999363, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999999, + 0.993695, + 0.713304, + 0.713304, + 0.897813, + 0.897813, + 1.000000, + 0.999983, + 0.999999, + 0.999999, + 0.999942, + 0.999942, + 0.999393, + 0.999732, + 0.567551, + 0.515509, + 0.855685, + 0.985010, + 0.985010, + 0.498224, + 0.498224, + 0.310874, + 0.383672, + 0.501663, + 0.501663, + 0.707005, + 0.707005, + 0.680489, + 0.510297, + 0.029527, + 0.029527, + 0.013410, + 0.956949, + 0.651153, + 0.930744, + 1.000000, + 1.000000, + 0.999386, + 0.999386, + 0.999386, + 0.999386, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.888821, + 0.888821, + 0.704999, + 0.704999, + 0.992606, + 0.999999, + 1.000000, + 1.000000, + 0.999388, + 0.999941, + 0.999941, + 0.999999, + 0.999999, + 0.999982, + 0.999729, + 0.562194, + 0.982777, + 0.848121, + 0.513370, + 0.669851, + 0.696438, + 0.696438, + 0.696438, + 0.501175, + 0.501175, + 0.384953, + 0.312190, + 0.498315, + 0.498315, + 0.508731, + 0.029902, + 0.029902, + 0.013492, + 0.953945, + 0.928954, + 0.647332, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 0.999125, + 0.999125, + 0.999125, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000; + 0.000000,-0.000002,1.278853,0.000000,1.112235,-0.156313,-0.000000,0.000000,0.204616,1.455927,0.000002,0.000000,-61.950306,-62.105236,-0.142288,1.000000;; + } + } + } + } + + Frame Box01 { + + + FrameTransformMatrix { + -1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.341751,858.815247,1.000000;; + } + + Frame Bip01 { + + + FrameTransformMatrix { + 0.186552,-0.974653,0.123489,0.000000,0.982171,0.187991,0.000000,0.000000,-0.023215,0.121288,0.992346,0.000000,-88.977890,-857.346008,247.541595,1.000000;; + } + + Frame Bip01_Footsteps { + + + FrameTransformMatrix { + 0.186552,0.982171,-0.023215,0.000000,-0.974653,0.187991,0.121288,0.000000,0.123489,-0.000000,0.992346,0.000000,-31.624149,0.000000,-254.128143,1.000000;; + } + } + + Frame Bip01_Pelvis { + + + FrameTransformMatrix { + -0.000000,0.011807,0.999930,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999930,-0.011807,0.000000,-2.454305,-1.950977,-0.000005,1.000000;; + } + + Frame Bip01_Spine { + + + FrameTransformMatrix { + 0.999137,0.041531,0.000982,0.000000,-0.040353,0.975880,-0.214545,0.000000,-0.009868,0.214320,0.976714,0.000000,27.422213,8.709480,-0.319006,1.000000;; + } + + Frame Bip01_Spine1 { + + + FrameTransformMatrix { + 0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178080,-0.022084,0.000000,1.000000;; + } + + Frame Bip01_Spine2 { + + + FrameTransformMatrix { + 0.999958,0.008483,0.003477,0.000000,-0.008313,0.998890,-0.046374,0.000000,-0.003867,0.046343,0.998918,0.000000,28.182159,-0.022430,0.001040,1.000000;; + } + + Frame Bip01_Spine3 { + + + FrameTransformMatrix { + 0.999837,-0.017696,0.003477,0.000000,0.017838,0.998765,-0.046374,0.000000,-0.002652,0.046428,0.998918,0.000000,28.181417,-0.033880,0.001568,1.000000;; + } + + Frame Bip01_Neck { + + + FrameTransformMatrix { + 0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566055,-0.019138,0.000001,1.000000;; + } + + Frame Bip01_Head { + + + FrameTransformMatrix { + 0.979775,-0.188667,-0.066683,0.000000,0.195389,0.973921,0.115333,0.000000,0.043184,-0.126029,0.991086,0.000000,27.900173,0.000003,0.000000,1.000000;; + } + + Frame Dummy21 { + + + FrameTransformMatrix { + 1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,0.000027,0.000002,1.000000;; + } + } + } + + Frame Bip01_L_Clavicle { + + + FrameTransformMatrix { + -0.185356,0.308957,0.932839,0.000000,-0.499811,-0.846968,0.181203,0.000000,0.846069,-0.432656,0.311411,0.000000,-12.374969,4.006883,8.346215,1.000000;; + } + + Frame Bip01_L_UpperArm { + + + FrameTransformMatrix { + 0.640423,0.117307,-0.759011,0.000000,0.064965,0.976451,0.205728,0.000000,0.765270,-0.181062,0.617720,0.000000,31.000208,-0.000032,-0.000004,1.000000;; + } + + Frame Bip01_L_Forearm { + + + FrameTransformMatrix { + 0.485335,-0.874328,-0.000000,0.000000,0.874328,0.485335,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202522,-0.000023,0.000014,1.000000;; + } + + Frame Bip01_L_Hand { + + + FrameTransformMatrix { + 0.999511,-0.027531,-0.014824,0.000000,-0.015327,-0.018154,-0.999718,0.000000,0.027254,0.999456,-0.018567,0.000000,61.671467,0.000001,-0.000001,1.000000;; + } + + Frame Bip01_L_Finger0 { + + + FrameTransformMatrix { + 0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410522,3.054963,-10.755418,1.000000;; + } + + Frame Bip01_L_Finger01 { + + + FrameTransformMatrix { + 1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075084,0.000006,-0.000007,1.000000;; + } + + Frame Bip01_L_Finger02 { + + + FrameTransformMatrix { + 1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961566,-0.000008,0.000006,1.000000;; + } + + Frame Dummy06 { + + + FrameTransformMatrix { + 1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961566,-0.000008,0.000003,1.000000;; + } + } + } + } + } + + Frame Bip01_L_Finger1 { + + + FrameTransformMatrix { + 1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087988,0.354694,-0.505022,1.000000;; + } + + Frame Bip01_L_Finger11 { + + + FrameTransformMatrix { + 1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300090,-0.000022,-0.000024,1.000000;; + } + + Frame Bip01_L_Finger12 { + + + FrameTransformMatrix { + 1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850065,0.000028,0.000040,1.000000;; + } + + Frame Dummy03 { + + + FrameTransformMatrix { + 1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207734,-0.000002,-0.000004,1.000000;; + } + } + } + } + } + } + } + } + } + + Frame Bip01_R_Clavicle { + + + FrameTransformMatrix { + -0.397155,0.379708,-0.835518,0.000000,-0.502616,-0.851720,-0.148157,0.000000,-0.767883,0.361103,0.529112,0.000000,-12.374941,4.006959,-8.346190,1.000000;; + } + + Frame Bip01_R_UpperArm { + + + FrameTransformMatrix { + 0.532891,0.645602,0.547015,0.000000,-0.380503,0.760229,-0.526564,0.000000,-0.755807,0.072461,0.650772,0.000000,31.000195,-0.000004,0.000004,1.000000;; + } + + Frame Bip01_R_Forearm { + + + FrameTransformMatrix { + 0.881719,-0.471776,0.000000,0.000000,0.471776,0.881718,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202530,-0.000026,0.000000,1.000000;; + } + + Frame Bip01_R_Hand { + + + FrameTransformMatrix { + 0.999848,-0.010016,0.014267,0.000000,-0.014446,-0.018025,0.999733,0.000000,-0.009756,-0.999787,-0.018167,0.000000,61.671482,0.000009,-0.000000,1.000000;; + } + + Frame Bip01_R_Finger0 { + + + FrameTransformMatrix { + 0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410507,3.054970,10.755430,1.000000;; + } + + Frame Bip01_R_Finger01 { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075073,0.000020,-0.000001,1.000000;; + } + + Frame Bip01_R_Finger02 { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961570,-0.000010,-0.000003,1.000000;; + } + + Frame Dummy01 { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,5.961568,-0.000011,0.000000,1.000000;; + } + } + } + } + } + + Frame Bip01_R_Finger1 { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087997,0.354687,0.504994,1.000000;; + } + + Frame Bip01_R_Finger11 { + + + FrameTransformMatrix { + 1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300055,-0.000003,-0.000036,1.000000;; + } + + Frame Bip01_R_Finger12 { + + + FrameTransformMatrix { + 1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850063,0.000009,0.000012,1.000000;; + } + + Frame Dummy02 { + + + FrameTransformMatrix { + 1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207763,0.000001,-0.000002,1.000000;; + } + } + } + } + } + } + } + } + } + } + } + } + } + + Frame Bip01_L_Thigh { + + + FrameTransformMatrix { + -0.959397,-0.281208,0.021883,0.000000,-0.279994,0.958874,0.046525,0.000000,-0.034066,0.038509,-0.998677,0.000000,-27.730272,-13.958670,28.295168,1.000000;; + } + + Frame Bip01_L_Calf { + + + FrameTransformMatrix { + 0.912034,-0.410114,-0.000000,0.000000,0.410114,0.912034,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231491,-0.000008,-0.000001,1.000000;; + } + + Frame Bip01_L_Foot { + + + FrameTransformMatrix { + 0.832169,0.546757,0.092472,0.000000,-0.549113,0.835748,0.000044,0.000000,-0.077259,-0.050814,0.995715,0.000000,119.231468,-0.000006,0.000000,1.000000;; + } + + Frame Bip01_L_Toe0 { + + + FrameTransformMatrix { + 0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423262,34.577110,0.000002,1.000000;; + } + + Frame Dummy16 { + + + FrameTransformMatrix { + 1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738586,0.000005,-0.000001,1.000000;; + } + } + } + } + } + } + + Frame Bip01_R_Thigh { + + + FrameTransformMatrix { + -0.965965,0.253205,-0.052900,0.000000,0.253587,0.886612,-0.386799,0.000000,-0.051038,-0.387049,-0.920645,0.000000,-27.789658,-0.963900,-30.864017,1.000000;; + } + + Frame Bip01_R_Calf { + + + FrameTransformMatrix { + 1.000000,-0.000691,-0.000000,0.000000,0.000691,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231522,0.000021,-0.000011,1.000000;; + } + + Frame Bip01_R_Foot { + + + FrameTransformMatrix { + 0.988831,0.124156,0.082452,0.000000,-0.122246,0.992109,-0.027835,0.000000,-0.085257,0.017445,0.996206,0.000000,119.231476,-0.000039,0.000023,1.000000;; + } + + Frame Bip01_R_Toe0 { + + + FrameTransformMatrix { + 0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423260,34.577152,-0.000010,1.000000;; + } + + Frame Dummy11 { + + + FrameTransformMatrix { + 1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738579,0.000004,-0.000012,1.000000;; + } + } + } + } + } + } + } + } + } + } +} + +AnimationSet { + + + Animation { + + + AnimationKey { + 4; + 2; + 0;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;;, + 4960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;;; + } + { Scene_Root } + } + + Animation { + + + AnimationKey { + 4; + 2; + 0;16;1.278853,0.000000,-0.000000,0.000000,0.000000,0.000000,1.123165,0.000000,0.000000,-1.470235,0.000000,0.000000,0.135977,2.027985,133.967667,1.000000;;, + 4960;16;1.278853,0.000000,-0.000000,0.000000,0.000000,0.000000,1.123165,0.000000,0.000000,-1.470235,0.000000,0.000000,0.135977,2.027985,133.967667,1.000000;;; + } + { body } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.951797,351.625824,1.000000;;, + 80;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.958298,360.078979,1.000000;;, + 160;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.964798,368.532135,1.000000;;, + 240;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.971298,376.985291,1.000000;;, + 320;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.977798,385.438446,1.000000;;, + 400;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.984299,393.891602,1.000000;;, + 480;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.990799,402.344757,1.000000;;, + 560;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.997299,410.797913,1.000000;;, + 640;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.003784,419.251099,1.000000;;, + 720;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.010284,427.704254,1.000000;;, + 800;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.016785,436.157410,1.000000;;, + 880;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.023285,444.610565,1.000000;;, + 960;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.029785,453.063721,1.000000;;, + 1040;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.036285,461.516876,1.000000;;, + 1120;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.042786,469.970032,1.000000;;, + 1200;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.049286,478.423187,1.000000;;, + 1280;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.055786,486.876343,1.000000;;, + 1360;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.062286,495.329498,1.000000;;, + 1440;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.068787,503.782654,1.000000;;, + 1520;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.075287,512.235779,1.000000;;, + 1600;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.081787,520.688965,1.000000;;, + 1680;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.088287,529.142090,1.000000;;, + 1760;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.094788,537.595276,1.000000;;, + 1840;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.101273,546.048462,1.000000;;, + 1920;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.107773,554.501587,1.000000;;, + 2000;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.114273,562.954773,1.000000;;, + 2080;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.120773,571.407898,1.000000;;, + 2160;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.127274,579.861084,1.000000;;, + 2240;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.133774,588.314209,1.000000;;, + 2320;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.140274,596.767395,1.000000;;, + 2400;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.146774,605.220520,1.000000;;, + 2480;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.153275,613.673706,1.000000;;, + 2560;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.159775,622.126892,1.000000;;, + 2640;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.166275,630.580017,1.000000;;, + 2720;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.172775,639.033142,1.000000;;, + 2800;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.179276,647.486328,1.000000;;, + 2880;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.185776,655.939514,1.000000;;, + 2960;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.192276,664.392639,1.000000;;, + 3040;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.198761,672.845764,1.000000;;, + 3120;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.205261,681.298950,1.000000;;, + 3200;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.211761,689.752136,1.000000;;, + 3280;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.218262,698.205261,1.000000;;, + 3360;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.224762,706.658386,1.000000;;, + 3440;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.231262,715.111572,1.000000;;, + 3520;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.237762,723.564758,1.000000;;, + 3600;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.244263,732.017883,1.000000;;, + 3680;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.250763,740.471069,1.000000;;, + 3760;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.257263,748.924194,1.000000;;, + 3840;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.263763,757.377380,1.000000;;, + 3920;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.270264,765.830505,1.000000;;, + 4000;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.276764,774.283691,1.000000;;, + 4080;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.283264,782.736816,1.000000;;, + 4160;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.289764,791.190002,1.000000;;, + 4240;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.296249,799.643127,1.000000;;, + 4320;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.302750,808.096313,1.000000;;, + 4400;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.309250,816.549500,1.000000;;, + 4480;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.315750,825.002625,1.000000;;, + 4560;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.322250,833.455750,1.000000;;, + 4640;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.328751,841.908936,1.000000;;, + 4720;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.335251,850.362122,1.000000;;, + 4800;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-246.341751,858.815247,1.000000;;, + 4960;16;-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-88.696747,-245.951797,351.625824,1.000000;;; + } + { Box01 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.215193,-0.969920,0.113783,0.000000,0.976260,0.216600,-0.000000,0.000000,-0.024646,0.111082,0.993506,0.000000,-88.995270,-350.280182,247.734116,1.000000;;, + 80;16;0.230210,-0.966046,0.117296,0.000000,0.972762,0.231808,-0.000015,0.000000,-0.027176,0.114104,0.993097,0.000000,-89.026062,-358.696838,245.527908,1.000000;;, + 160;16;0.245161,-0.961926,0.120806,0.000000,0.969026,0.246960,-0.000085,0.000000,-0.029752,0.117085,0.992676,0.000000,-89.057129,-367.113770,243.259003,1.000000;;, + 240;16;0.260919,-0.957329,0.124270,0.000000,0.964815,0.262931,-0.000218,0.000000,-0.032466,0.119955,0.992248,0.000000,-89.090034,-375.532227,240.737289,1.000000;;, + 320;16;0.274853,-0.952953,0.127816,0.000000,0.960847,0.277077,-0.000391,0.000000,-0.035042,0.122919,0.991798,0.000000,-89.121216,-383.949402,238.279861,1.000000;;, + 400;16;0.284678,-0.949573,0.131414,0.000000,0.957902,0.287096,-0.000570,0.000000,-0.037187,0.126044,0.991327,0.000000,-89.147224,-392.364716,236.076599,1.000000;;, + 480;16;0.290388,-0.947267,0.135499,0.000000,0.956114,0.292995,-0.000732,0.000000,-0.039008,0.129765,0.990777,0.000000,-89.169243,-400.772797,234.318848,1.000000;;, + 560;16;0.290787,-0.946384,0.140711,0.000000,0.955929,0.293596,-0.000834,0.000000,-0.040523,0.134752,0.990050,0.000000,-89.187599,-409.165558,233.295410,1.000000;;, + 640;16;0.287101,-0.946645,0.146409,0.000000,0.956994,0.290106,-0.000860,0.000000,-0.041660,0.140360,0.989224,0.000000,-89.201378,-417.550812,232.904465,1.000000;;, + 720;16;0.280185,-0.947747,0.152550,0.000000,0.959005,0.283386,-0.000790,0.000000,-0.042482,0.146518,0.988295,0.000000,-89.211227,-425.929321,233.223892,1.000000;;, + 800;16;0.269861,-0.949850,0.157988,0.000000,0.961957,0.273201,-0.000596,0.000000,-0.042596,0.152138,0.987441,0.000000,-89.212715,-434.314423,234.003555,1.000000;;, + 880;16;0.255996,-0.953099,0.161456,0.000000,0.965782,0.259355,-0.000282,0.000000,-0.041606,0.156003,0.986880,0.000000,-89.200623,-442.720734,235.017471,1.000000;;, + 960;16;0.239263,-0.957127,0.163283,0.000000,0.970142,0.242538,0.000126,0.000000,-0.039723,0.158377,0.986579,0.000000,-89.177910,-451.145142,236.268890,1.000000;;, + 1040;16;0.220092,-0.961751,0.163077,0.000000,0.974779,0.223171,0.000573,0.000000,-0.036945,0.158838,0.986613,0.000000,-89.144325,-459.592773,237.701111,1.000000;;, + 1120;16;0.199072,-0.966547,0.161733,0.000000,0.979407,0.201892,0.001023,0.000000,-0.033641,0.158199,0.986834,0.000000,-89.104233,-468.053619,239.267197,1.000000;;, + 1200;16;0.176961,-0.971115,0.160062,0.000000,0.983756,0.179506,0.001467,0.000000,-0.030157,0.157202,0.987106,0.000000,-89.062035,-476.518890,240.917862,1.000000;;, + 1280;16;0.153774,-0.975404,0.157925,0.000000,0.987752,0.156024,0.001873,0.000000,-0.026467,0.155703,0.987449,0.000000,-89.017326,-484.990173,242.604843,1.000000;;, + 1360;16;0.129723,-0.979294,0.155422,0.000000,0.991292,0.131664,0.002220,0.000000,-0.022637,0.153781,0.987846,0.000000,-88.970947,-493.466614,244.280289,1.000000;;, + 1440;16;0.105024,-0.982683,0.152656,0.000000,0.994293,0.106652,0.002489,0.000000,-0.018727,0.151523,0.988276,0.000000,-88.923561,-501.947113,245.893738,1.000000;;, + 1520;16;0.079902,-0.985493,0.149728,0.000000,0.996693,0.081216,0.002672,0.000000,-0.014793,0.149019,0.988724,0.000000,-88.875931,-510.430634,247.395233,1.000000;;, + 1600;16;0.054583,-0.987668,0.146741,0.000000,0.998450,0.055589,0.002762,0.000000,-0.010885,0.146363,0.989171,0.000000,-88.828560,-518.915955,248.734818,1.000000;;, + 1680;16;0.029299,-0.989173,0.143799,0.000000,0.999546,0.030007,0.002762,0.000000,-0.007047,0.143652,0.989603,0.000000,-88.782097,-527.401978,249.862305,1.000000;;, + 1760;16;0.004282,-0.990000,0.141004,0.000000,0.999985,0.004707,0.002680,0.000000,-0.003317,0.140991,0.990005,0.000000,-88.736885,-535.887329,250.727417,1.000000;;, + 1840;16;-0.020233,-0.990161,0.138461,0.000000,0.999795,-0.020076,0.002532,0.000000,0.000273,0.138484,0.990365,0.000000,-88.693428,-544.370850,251.288864,1.000000;;, + 1920;16;-0.044014,-0.989693,0.136270,0.000000,0.999024,-0.044107,0.002338,0.000000,0.003697,0.136240,0.990669,0.000000,-88.651924,-552.851196,251.468933,1.000000;;, + 2000;16;-0.066451,-0.988672,0.134580,0.000000,0.997766,-0.066772,0.002131,0.000000,0.006879,0.134421,0.990900,0.000000,-88.613358,-561.326355,251.154114,1.000000;;, + 2080;16;-0.088458,-0.987113,0.133352,0.000000,0.996030,-0.088998,0.001921,0.000000,0.009972,0.132992,0.991067,0.000000,-88.575897,-569.796814,250.409897,1.000000;;, + 2160;16;-0.110697,-0.984964,0.132636,0.000000,0.993768,-0.111454,0.001725,0.000000,0.013084,0.132000,0.991163,0.000000,-88.538185,-578.261963,249.224899,1.000000;;, + 2240;16;-0.133303,-0.982204,0.132311,0.000000,0.990942,-0.134282,0.001543,0.000000,0.016252,0.131318,0.991207,0.000000,-88.499825,-586.723389,247.716156,1.000000;;, + 2320;16;-0.156984,-0.978703,0.132274,0.000000,0.987407,-0.158195,0.001366,0.000000,0.019588,0.130823,0.991212,0.000000,-88.459404,-595.182617,245.969635,1.000000;;, + 2400;16;-0.180673,-0.974575,0.132518,0.000000,0.983275,-0.182121,0.001212,0.000000,0.022953,0.130521,0.991180,0.000000,-88.418640,-603.639404,244.067245,1.000000;;, + 2480;16;-0.203757,-0.969944,0.133012,0.000000,0.978669,-0.205441,0.001087,0.000000,0.026272,0.130397,0.991114,0.000000,-88.378433,-612.094116,242.093201,1.000000;;, + 2560;16;-0.225637,-0.964990,0.133725,0.000000,0.973766,-0.227551,0.000998,0.000000,0.029466,0.130442,0.991018,0.000000,-88.339745,-620.546692,240.126892,1.000000;;, + 2640;16;-0.245728,-0.959945,0.134624,0.000000,0.968795,-0.247860,0.000949,0.000000,0.032457,0.130656,0.990896,0.000000,-88.303505,-628.997253,238.248978,1.000000;;, + 2720;16;-0.263458,-0.955082,0.135677,0.000000,0.964030,-0.265793,0.000938,0.000000,0.035166,0.131044,0.990753,0.000000,-88.270691,-637.445679,236.540161,1.000000;;, + 2800;16;-0.278272,-0.950703,0.136852,0.000000,0.959769,-0.280788,0.000962,0.000000,0.037512,0.131614,0.990591,0.000000,-88.242264,-645.891968,235.080368,1.000000;;, + 2880;16;-0.289622,-0.947123,0.138118,0.000000,0.956329,-0.292289,0.001013,0.000000,0.039411,0.132380,0.990415,0.000000,-88.219269,-654.335876,233.952332,1.000000;;, + 2960;16;-0.296833,-0.944706,0.139362,0.000000,0.954060,-0.299614,0.001070,0.000000,0.040744,0.133278,0.990241,0.000000,-88.203102,-662.778076,233.258194,1.000000;;, + 3040;16;-0.299743,-0.943574,0.140795,0.000000,0.953116,-0.302602,0.001152,0.000000,0.041518,0.134539,0.990038,0.000000,-88.193741,-671.216003,233.019211,1.000000;;, + 3120;16;-0.297684,-0.943957,0.142584,0.000000,0.953755,-0.300582,0.001269,0.000000,0.041660,0.136368,0.989782,0.000000,-88.191994,-679.646973,233.327316,1.000000;;, + 3200;16;-0.291409,-0.945585,0.144741,0.000000,0.955708,-0.294313,0.001411,0.000000,0.041265,0.138741,0.989469,0.000000,-88.196808,-688.071472,234.072937,1.000000;;, + 3280;16;-0.281246,-0.948245,0.147418,0.000000,0.958786,-0.284126,0.001582,0.000000,0.040385,0.141787,0.989073,0.000000,-88.207474,-696.487671,235.200226,1.000000;;, + 3360;16;-0.267718,-0.951692,0.150366,0.000000,0.962706,-0.270543,0.001731,0.000000,0.039033,0.145222,0.988629,0.000000,-88.223839,-704.899170,236.639908,1.000000;;, + 3440;16;-0.251299,-0.955670,0.153436,0.000000,0.967193,-0.254036,0.001827,0.000000,0.037233,0.148862,0.988157,0.000000,-88.245697,-713.308228,238.327179,1.000000;;, + 3520;16;-0.232467,-0.959934,0.156480,0.000000,0.971974,-0.235082,0.001843,0.000000,0.035017,0.152523,0.987679,0.000000,-88.272491,-721.717102,240.193939,1.000000;;, + 3600;16;-0.211709,-0.964255,0.159346,0.000000,0.976795,-0.214171,0.001762,0.000000,0.032428,0.156021,0.987221,0.000000,-88.303909,-730.127869,242.173676,1.000000;;, + 3680;16;-0.189524,-0.968439,0.161884,0.000000,0.981432,-0.191803,0.001579,0.000000,0.029521,0.159178,0.986808,0.000000,-88.339073,-738.542786,244.197083,1.000000;;, + 3760;16;-0.166420,-0.972331,0.163945,0.000000,0.985703,-0.168490,0.001297,0.000000,0.026362,0.161817,0.986469,0.000000,-88.377380,-746.964050,246.194870,1.000000;;, + 3840;16;-0.142916,-0.975820,0.165378,0.000000,0.989467,-0.144756,0.000932,0.000000,0.023030,0.163769,0.986230,0.000000,-88.417694,-755.393494,248.100037,1.000000;;, + 3920;16;-0.120009,-0.978789,0.166042,0.000000,0.992578,-0.121612,0.000515,0.000000,0.019688,0.164871,0.986119,0.000000,-88.458206,-763.833313,249.845062,1.000000;;, + 4000;16;-0.096823,-0.981400,0.165766,0.000000,0.995170,-0.098171,0.000058,0.000000,0.016217,0.164971,0.986165,0.000000,-88.500229,-772.285217,251.362381,1.000000;;, + 4080;16;-0.072995,-0.983711,0.164270,0.000000,0.997253,-0.074069,-0.000416,0.000000,0.012576,0.163788,0.986415,0.000000,-88.544342,-780.752625,252.601303,1.000000;;, + 4160;16;-0.047948,-0.985668,0.161738,0.000000,0.998812,-0.048729,-0.000865,0.000000,0.008734,0.161504,0.986833,0.000000,-88.590874,-789.233582,253.443695,1.000000;;, + 4240;16;-0.020710,-0.987195,0.158170,0.000000,0.999775,-0.021175,-0.001258,0.000000,0.004591,0.158109,0.987411,0.000000,-88.641014,-797.727844,253.722046,1.000000;;, + 4320;16;0.007899,-0.988064,0.153839,0.000000,0.999969,0.007754,-0.001540,0.000000,0.000329,0.153846,0.988095,0.000000,-88.692696,-806.232605,253.533524,1.000000;;, + 4400;16;0.037495,-0.988134,0.148950,0.000000,0.999289,0.037666,-0.001676,0.000000,-0.003954,0.148907,0.988843,0.000000,-88.744514,-814.745667,252.858902,1.000000;;, + 4480;16;0.067688,-0.987302,0.143713,0.000000,0.997673,0.068160,-0.001645,0.000000,-0.008171,0.143490,0.989618,0.000000,-88.795670,-823.264404,251.879715,1.000000;;, + 4560;16;0.098083,-0.985516,0.138337,0.000000,0.995103,0.098835,-0.001442,0.000000,-0.012252,0.137801,0.990384,0.000000,-88.845009,-831.786499,250.727203,1.000000;;, + 4640;16;0.128286,-0.982774,0.133035,0.000000,0.991606,0.129293,-0.001079,0.000000,-0.016140,0.132057,0.991111,0.000000,-88.892197,-840.309204,249.532562,1.000000;;, + 4720;16;0.157601,-0.979148,0.128187,0.000000,0.987305,0.158835,-0.000603,0.000000,-0.019770,0.126655,0.991750,0.000000,-88.935722,-848.828125,248.514465,1.000000;;, + 4800;16;0.186552,-0.974653,0.123489,0.000000,0.982171,0.187991,0.000000,0.000000,-0.023215,0.121288,0.992346,0.000000,-88.977890,-857.346008,247.541595,1.000000;;, + 4960;16;0.215193,-0.969920,0.113783,0.000000,0.976260,0.216600,-0.000000,0.000000,-0.024646,0.111082,0.993506,0.000000,-88.995270,-350.280182,247.734116,1.000000;;; + } + { Bip01 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.215193,0.976260,-0.024646,0.000000,-0.969920,0.216600,0.111082,0.000000,0.113783,-0.000000,0.993506,0.000000,-28.695675,0.000000,-250.557556,1.000000;;, + 80;16;0.230210,0.972762,-0.027176,0.000000,-0.966046,0.231808,0.114104,0.000000,0.117296,-0.000015,0.993097,0.000000,-28.930368,0.003710,-244.942093,1.000000;;, + 160;16;0.245161,0.969026,-0.029752,0.000000,-0.961926,0.246960,0.117085,0.000000,0.120806,-0.000085,0.992676,0.000000,-29.871046,0.021084,-245.453903,1.000000;;, + 240;16;0.260919,0.964815,-0.032466,0.000000,-0.957329,0.262931,0.119955,0.000000,0.124270,-0.000218,0.992248,0.000000,-30.679300,0.053845,-244.962097,1.000000;;, + 320;16;0.274853,0.960848,-0.035042,0.000000,-0.952953,0.277077,0.122919,0.000000,0.127816,-0.000391,0.991798,0.000000,-31.485676,0.096353,-244.314850,1.000000;;, + 400;16;0.284678,0.957902,-0.037187,0.000000,-0.949573,0.287096,0.126044,0.000000,0.131414,-0.000570,0.991327,0.000000,-32.236568,0.139836,-243.178284,1.000000;;, + 480;16;0.290388,0.956114,-0.039008,0.000000,-0.947267,0.292995,0.129765,0.000000,0.135499,-0.000732,0.990777,0.000000,-33.082916,0.178625,-241.903809,1.000000;;, + 560;16;0.290787,0.955929,-0.040523,0.000000,-0.946384,0.293596,0.134752,0.000000,0.140711,-0.000834,0.990050,0.000000,-34.169113,0.202512,-240.416290,1.000000;;, + 640;16;0.287101,0.956994,-0.041660,0.000000,-0.946645,0.290106,0.140360,0.000000,0.146409,-0.000860,0.989224,0.000000,-35.483067,0.208447,-239.743652,1.000000;;, + 720;16;0.280185,0.959006,-0.042482,0.000000,-0.947747,0.283386,0.146518,0.000000,0.152550,-0.000790,0.988295,0.000000,-36.856628,0.190942,-238.775558,1.000000;;, + 800;16;0.269861,0.961957,-0.042596,0.000000,-0.949850,0.273201,0.152138,0.000000,0.157988,-0.000596,0.987441,0.000000,-38.280083,0.144505,-239.254517,1.000000;;, + 880;16;0.255996,0.965782,-0.041605,0.000000,-0.953099,0.259355,0.156003,0.000000,0.161456,-0.000282,0.986880,0.000000,-39.272747,0.068616,-240.050232,1.000000;;, + 960;16;0.239263,0.970142,-0.039723,0.000000,-0.957127,0.242538,0.158377,0.000000,0.163283,0.000126,0.986579,0.000000,-39.905502,-0.030840,-241.114822,1.000000;;, + 1040;16;0.220092,0.974779,-0.036945,0.000000,-0.961751,0.223171,0.158838,0.000000,0.163077,0.000573,0.986613,0.000000,-40.085278,-0.140866,-242.514786,1.000000;;, + 1120;16;0.199072,0.979407,-0.033641,0.000000,-0.966547,0.201892,0.158199,0.000000,0.161733,0.001023,0.986834,0.000000,-40.017071,-0.253015,-244.168747,1.000000;;, + 1200;16;0.176961,0.983756,-0.030157,0.000000,-0.971115,0.179506,0.157202,0.000000,0.160062,0.001467,0.987106,0.000000,-39.888794,-0.365580,-245.995041,1.000000;;, + 1280;16;0.153774,0.987751,-0.026467,0.000000,-0.975404,0.156024,0.155703,0.000000,0.157925,0.001873,0.987449,0.000000,-39.636044,-0.470161,-247.830200,1.000000;;, + 1360;16;0.129723,0.991292,-0.022637,0.000000,-0.979294,0.131664,0.153781,0.000000,0.155422,0.002220,0.987846,0.000000,-39.283993,-0.561041,-249.684158,1.000000;;, + 1440;16;0.105024,0.994293,-0.018727,0.000000,-0.982683,0.106652,0.151523,0.000000,0.152656,0.002489,0.988276,0.000000,-38.839005,-0.633379,-251.439117,1.000000;;, + 1520;16;0.079902,0.996693,-0.014793,0.000000,-0.985493,0.081216,0.149019,0.000000,0.149728,0.002672,0.988724,0.000000,-38.326859,-0.683906,-253.090744,1.000000;;, + 1600;16;0.054583,0.998450,-0.010885,0.000000,-0.987668,0.055589,0.146363,0.000000,0.146741,0.002762,0.989171,0.000000,-37.777111,-0.711023,-254.653427,1.000000;;, + 1680;16;0.029299,0.999546,-0.007047,0.000000,-0.989173,0.030007,0.143652,0.000000,0.143798,0.002762,0.989603,0.000000,-37.200829,-0.714508,-256.011414,1.000000;;, + 1760;16;0.004282,0.999985,-0.003317,0.000000,-0.990000,0.004707,0.140991,0.000000,0.141004,0.002680,0.990005,0.000000,-36.619717,-0.696093,-257.110870,1.000000;;, + 1840;16;-0.020233,0.999795,0.000273,0.000000,-0.990161,-0.020076,0.138484,0.000000,0.138461,0.002532,0.990365,0.000000,-36.057411,-0.659389,-257.906921,1.000000;;, + 1920;16;-0.044014,0.999024,0.003697,0.000000,-0.989694,-0.044107,0.136240,0.000000,0.136270,0.002338,0.990669,0.000000,-35.521038,-0.609429,-258.233765,1.000000;;, + 2000;16;-0.066451,0.997766,0.006879,0.000000,-0.988672,-0.066772,0.134421,0.000000,0.134580,0.002131,0.990900,0.000000,-35.047722,-0.554941,-258.053131,1.000000;;, + 2080;16;-0.088458,0.996030,0.009972,0.000000,-0.987113,-0.088998,0.132992,0.000000,0.133352,0.001921,0.991067,0.000000,-34.556820,-0.497754,-256.825684,1.000000;;, + 2160;16;-0.110697,0.993768,0.013084,0.000000,-0.984964,-0.111454,0.132000,0.000000,0.132636,0.001725,0.991163,0.000000,-34.142933,-0.444083,-255.143707,1.000000;;, + 2240;16;-0.133303,0.990942,0.016252,0.000000,-0.982204,-0.134282,0.131318,0.000000,0.132311,0.001543,0.991207,0.000000,-33.727978,-0.393298,-252.673233,1.000000;;, + 2320;16;-0.156984,0.987407,0.019588,0.000000,-0.978703,-0.158195,0.130822,0.000000,0.132274,0.001366,0.991212,0.000000,-33.356308,-0.344591,-249.960281,1.000000;;, + 2400;16;-0.180673,0.983275,0.022953,0.000000,-0.974575,-0.182121,0.130521,0.000000,0.132518,0.001212,0.991180,0.000000,-33.095207,-0.302633,-247.538528,1.000000;;, + 2480;16;-0.203757,0.978669,0.026272,0.000000,-0.969944,-0.205441,0.130397,0.000000,0.133012,0.001087,0.991114,0.000000,-32.885395,-0.268781,-245.038528,1.000000;;, + 2560;16;-0.225637,0.973766,0.029466,0.000000,-0.964990,-0.227551,0.130442,0.000000,0.133725,0.000998,0.991018,0.000000,-32.691967,-0.244099,-242.275589,1.000000;;, + 2640;16;-0.245728,0.968795,0.032457,0.000000,-0.959945,-0.247860,0.130656,0.000000,0.134624,0.000949,0.990896,0.000000,-32.764847,-0.230935,-241.164581,1.000000;;, + 2720;16;-0.263458,0.964030,0.035166,0.000000,-0.955082,-0.265793,0.131044,0.000000,0.135677,0.000938,0.990753,0.000000,-32.898090,-0.227433,-240.231201,1.000000;;, + 2800;16;-0.278272,0.959769,0.037512,0.000000,-0.950703,-0.280788,0.131614,0.000000,0.136852,0.000962,0.990591,0.000000,-33.050110,-0.232307,-239.229568,1.000000;;, + 2880;16;-0.289622,0.956329,0.039411,0.000000,-0.947123,-0.292289,0.132380,0.000000,0.138118,0.001013,0.990415,0.000000,-33.276829,-0.244129,-238.621353,1.000000;;, + 2960;16;-0.296833,0.954060,0.040744,0.000000,-0.944705,-0.299614,0.133278,0.000000,0.139362,0.001070,0.990241,0.000000,-33.489239,-0.257202,-237.958450,1.000000;;, + 3040;16;-0.299743,0.953116,0.041518,0.000000,-0.943574,-0.302602,0.134539,0.000000,0.140795,0.001152,0.990038,0.000000,-33.823746,-0.276747,-237.841446,1.000000;;, + 3120;16;-0.297684,0.953755,0.041660,0.000000,-0.943957,-0.300582,0.136368,0.000000,0.142584,0.001269,0.989782,0.000000,-34.225349,-0.304588,-237.584305,1.000000;;, + 3200;16;-0.291409,0.955708,0.041265,0.000000,-0.945585,-0.294313,0.138741,0.000000,0.144741,0.001411,0.989469,0.000000,-34.849762,-0.339790,-238.237503,1.000000;;, + 3280;16;-0.281246,0.958786,0.040385,0.000000,-0.948245,-0.284126,0.141787,0.000000,0.147418,0.001582,0.989073,0.000000,-35.660633,-0.382615,-239.258606,1.000000;;, + 3360;16;-0.267718,0.962706,0.039033,0.000000,-0.951692,-0.270543,0.145222,0.000000,0.150366,0.001731,0.988629,0.000000,-36.596420,-0.421292,-240.614899,1.000000;;, + 3440;16;-0.251299,0.967193,0.037233,0.000000,-0.955671,-0.254036,0.148862,0.000000,0.153436,0.001827,0.988157,0.000000,-37.616859,-0.447802,-242.259262,1.000000;;, + 3520;16;-0.232467,0.971974,0.035017,0.000000,-0.959934,-0.235082,0.152522,0.000000,0.156480,0.001843,0.987679,0.000000,-38.677807,-0.455441,-244.129257,1.000000;;, + 3600;16;-0.211709,0.976794,0.032428,0.000000,-0.964255,-0.214171,0.156021,0.000000,0.159346,0.001762,0.987221,0.000000,-39.733059,-0.439425,-246.164780,1.000000;;, + 3680;16;-0.189524,0.981432,0.029521,0.000000,-0.968439,-0.191803,0.159178,0.000000,0.161884,0.001579,0.986808,0.000000,-40.710854,-0.397097,-248.163681,1.000000;;, + 3760;16;-0.166420,0.985703,0.026362,0.000000,-0.972330,-0.168490,0.161817,0.000000,0.163945,0.001297,0.986469,0.000000,-41.575722,-0.328980,-250.164444,1.000000;;, + 3840;16;-0.142916,0.989467,0.023030,0.000000,-0.975820,-0.144756,0.163769,0.000000,0.165378,0.000932,0.986230,0.000000,-42.260056,-0.238165,-252.018021,1.000000;;, + 3920;16;-0.120009,0.992578,0.019688,0.000000,-0.978789,-0.121612,0.164871,0.000000,0.166042,0.000515,0.986119,0.000000,-42.725815,-0.132566,-253.747559,1.000000;;, + 4000;16;-0.096823,0.995170,0.016217,0.000000,-0.981401,-0.098171,0.164971,0.000000,0.165766,0.000058,0.986165,0.000000,-42.921295,-0.014893,-255.344513,1.000000;;, + 4080;16;-0.072995,0.997253,0.012576,0.000000,-0.983711,-0.074069,0.163788,0.000000,0.164270,-0.000416,0.986415,0.000000,-42.753769,0.108166,-256.729523,1.000000;;, + 4160;16;-0.047948,0.998812,0.008734,0.000000,-0.985668,-0.048729,0.161504,0.000000,0.161738,-0.000865,0.986833,0.000000,-42.248627,0.226077,-257.777344,1.000000;;, + 4240;16;-0.020710,0.999775,0.004591,0.000000,-0.987195,-0.021175,0.158109,0.000000,0.158170,-0.001258,0.987411,0.000000,-41.379543,0.329120,-258.320129,1.000000;;, + 4320;16;0.007899,0.999969,0.000329,0.000000,-0.988064,0.007754,0.153846,0.000000,0.153839,-0.001540,0.988095,0.000000,-40.226177,0.402630,-258.369110,1.000000;;, + 4400;16;0.037495,0.999289,-0.003954,0.000000,-0.988134,0.037666,0.148907,0.000000,0.148950,-0.001676,0.988843,0.000000,-38.856068,0.437144,-257.956085,1.000000;;, + 4480;16;0.067688,0.997673,-0.008171,0.000000,-0.987302,0.068160,0.143490,0.000000,0.143713,-0.001645,0.989618,0.000000,-37.303371,0.426951,-256.874268,1.000000;;, + 4560;16;0.098083,0.995103,-0.012252,0.000000,-0.985516,0.098835,0.137801,0.000000,0.138337,-0.001442,0.990384,0.000000,-35.704922,0.372164,-255.618713,1.000000;;, + 4640;16;0.128286,0.991606,-0.016140,0.000000,-0.982774,0.129293,0.132057,0.000000,0.133035,-0.001079,0.991111,0.000000,-34.232403,0.277539,-255.031479,1.000000;;, + 4720;16;0.157601,0.987305,-0.019770,0.000000,-0.979148,0.158835,0.126655,0.000000,0.128187,-0.000603,0.991750,0.000000,-32.951950,0.154989,-254.940338,1.000000;;, + 4800;16;0.186552,0.982171,-0.023215,0.000000,-0.974653,0.187991,0.121288,0.000000,0.123489,-0.000000,0.992346,0.000000,-31.477245,0.000000,-252.947632,1.000000;;, + 4960;16;0.215193,0.976260,-0.024646,0.000000,-0.969920,0.216600,0.111082,0.000000,0.113783,-0.000000,0.993506,0.000000,-28.695675,0.000000,-250.557556,1.000000;;; + } + { Bip01_Footsteps } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;-0.000000,0.003123,0.999995,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999995,-0.003123,0.000000,-2.498093,-1.716894,0.000001,1.000000;;, + 80;16;-0.000000,0.005798,0.999983,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999983,-0.005798,0.000000,-2.606007,-1.708811,-0.000001,1.000000;;, + 160;16;-0.000000,0.008569,0.999963,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999963,-0.008569,0.000000,-2.714359,-1.701997,0.000007,1.000000;;, + 240;16;-0.000000,0.011630,0.999932,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999932,-0.011630,0.000000,-2.825058,-1.704134,0.000006,1.000000;;, + 320;16;-0.000000,0.014786,0.999891,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999891,-0.014786,0.000000,-2.935028,-1.702141,-0.000002,1.000000;;, + 400;16;-0.000000,0.017942,0.999839,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999839,-0.017942,0.000000,-3.042238,-1.688488,-0.000005,1.000000;;, + 480;16;-0.000000,0.021002,0.999779,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999779,-0.021002,0.000000,-3.144488,-1.655950,-0.000001,1.000000;;, + 560;16;-0.000000,0.023869,0.999715,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999715,-0.023869,0.000000,-3.236930,-1.599010,0.000005,1.000000;;, + 640;16;-0.000000,0.026447,0.999650,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999650,-0.026447,0.000000,-3.326138,-1.506355,-0.000006,1.000000;;, + 720;16;-0.000000,0.028638,0.999590,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999590,-0.028638,0.000000,-3.421040,-1.360553,0.000007,1.000000;;, + 800;16;-0.000000,0.030348,0.999539,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999539,-0.030348,0.000000,-3.513980,-1.175462,0.000007,1.000000;;, + 880;16;-0.000000,0.031444,0.999506,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999506,-0.031444,0.000000,-3.607227,-0.951677,0.000001,1.000000;;, + 960;16;-0.000000,0.031938,0.999490,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999490,-0.031938,0.000000,-3.682334,-0.710419,0.000003,1.000000;;, + 1040;16;-0.000000,0.031748,0.999496,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999496,-0.031748,0.000000,-3.717381,-0.472458,0.000000,1.000000;;, + 1120;16;-0.000000,0.031018,0.999519,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999519,-0.031018,0.000000,-3.718616,-0.233649,-0.000006,1.000000;;, + 1200;16;-0.000000,0.029844,0.999555,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999555,-0.029844,0.000000,-3.677681,0.000361,0.000003,1.000000;;, + 1280;16;-0.000000,0.028287,0.999600,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999600,-0.028287,0.000000,-3.613708,0.239710,-0.000006,1.000000;;, + 1360;16;-0.000000,0.026418,0.999651,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999651,-0.026418,0.000000,-3.543681,0.493597,0.000005,1.000000;;, + 1440;16;-0.000000,0.024309,0.999704,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999705,-0.024309,0.000000,-3.467867,0.755770,-0.000003,1.000000;;, + 1520;16;-0.000000,0.022030,0.999757,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999757,-0.022030,0.000000,-3.390432,1.023540,0.000009,1.000000;;, + 1600;16;-0.000000,0.019653,0.999807,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999807,-0.019653,0.000000,-3.315237,1.293970,-0.000004,1.000000;;, + 1680;16;-0.000000,0.017248,0.999851,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999851,-0.017248,0.000000,-3.245844,1.563869,-0.000005,1.000000;;, + 1760;16;-0.000000,0.014885,0.999889,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999889,-0.014885,0.000000,-3.185597,1.829824,0.000003,1.000000;;, + 1840;16;-0.000000,0.012637,0.999920,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999920,-0.012637,0.000000,-3.137427,2.088194,-0.000000,1.000000;;, + 1920;16;-0.000000,0.010574,0.999944,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999944,-0.010574,0.000000,-3.103951,2.335164,0.000006,1.000000;;, + 2000;16;0.000000,0.008766,0.999961,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999962,-0.008766,0.000000,-3.087498,2.566761,-0.000003,1.000000;;, + 2080;16;0.000000,0.007285,0.999973,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999973,-0.007285,0.000000,-3.090148,2.778913,0.000000,1.000000;;, + 2160;16;0.000000,0.005903,0.999983,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999983,-0.005903,0.000000,-3.108274,2.971279,-0.000007,1.000000;;, + 2240;16;-0.000000,0.005588,0.999984,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999984,-0.005588,0.000000,-3.159645,3.128248,0.000006,1.000000;;, + 2320;16;-0.000000,0.007494,0.999972,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999972,-0.007494,0.000000,-3.264085,3.232729,-0.000002,1.000000;;, + 2400;16;-0.000000,0.010843,0.999941,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999941,-0.010843,0.000000,-3.409011,3.285896,0.000004,1.000000;;, + 2480;16;-0.000000,0.015881,0.999874,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999874,-0.015881,0.000000,-3.599284,3.278342,-0.000004,1.000000;;, + 2560;16;-0.000000,0.020687,0.999786,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999786,-0.020687,0.000000,-3.803129,3.227022,-0.000004,1.000000;;, + 2640;16;-0.000000,0.023550,0.999723,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999723,-0.023550,0.000000,-3.998868,3.143643,0.000006,1.000000;;, + 2720;16;-0.000000,0.024101,0.999710,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999710,-0.024101,0.000000,-4.165480,3.040740,0.000006,1.000000;;, + 2800;16;-0.000000,0.020898,0.999782,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999782,-0.020898,0.000000,-4.277241,2.936613,0.000006,1.000000;;, + 2880;16;-0.000000,0.015453,0.999881,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999881,-0.015453,0.000000,-4.329769,2.828214,-0.000001,1.000000;;, + 2960;16;-0.000000,0.008510,0.999964,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999964,-0.008510,0.000000,-4.302057,2.720577,-0.000001,1.000000;;, + 3040;16;-0.000000,0.000942,1.000000,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,1.000000,-0.000942,0.000000,-4.218734,2.604678,0.000002,1.000000;;, + 3120;16;0.000000,-0.006408,0.999979,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999979,0.006408,0.000000,-4.092600,2.470545,0.000005,1.000000;;, + 3200;16;0.000000,-0.012697,0.999919,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999919,0.012697,0.000000,-3.938424,2.322757,0.000001,1.000000;;, + 3280;16;0.000000,-0.016811,0.999859,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999859,0.016811,0.000000,-3.770470,2.162284,0.000001,1.000000;;, + 3360;16;0.000000,-0.018729,0.999825,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999825,0.018729,0.000000,-3.603011,1.990379,-0.000005,1.000000;;, + 3440;16;0.000000,-0.017737,0.999843,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999843,0.017737,0.000000,-3.456044,1.809228,0.000000,1.000000;;, + 3520;16;0.000000,-0.014794,0.999891,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999891,0.014794,0.000000,-3.326296,1.619980,-0.000004,1.000000;;, + 3600;16;0.000000,-0.010505,0.999945,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999945,0.010505,0.000000,-3.220668,1.425136,0.000007,1.000000;;, + 3680;16;0.000000,-0.005221,0.999986,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999986,0.005221,0.000000,-3.127975,1.224429,-0.000004,1.000000;;, + 3760;16;-0.000000,0.000645,1.000000,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,1.000000,-0.000645,0.000000,-3.037925,1.017790,-0.000003,1.000000;;, + 3840;16;0.000000,0.006680,0.999978,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999978,-0.006680,0.000000,-2.954320,0.805845,0.000004,1.000000;;, + 3920;16;-0.000000,0.012471,0.999922,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999922,-0.012471,0.000000,-2.877302,0.589109,0.000001,1.000000;;, + 4000;16;-0.000000,0.017603,0.999845,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999845,-0.017603,0.000000,-2.807037,0.368100,-0.000011,1.000000;;, + 4080;16;-0.000000,0.021570,0.999767,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999767,-0.021570,0.000000,-2.743605,0.143374,-0.000008,1.000000;;, + 4160;16;-0.000000,0.024240,0.999706,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999706,-0.024240,0.000000,-2.686979,-0.084498,0.000004,1.000000;;, + 4240;16;-0.000000,0.025148,0.999684,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999684,-0.025148,0.000000,-2.637086,-0.314932,-0.000005,1.000000;;, + 4320;16;-0.000000,0.024788,0.999693,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999693,-0.024788,0.000000,-2.593796,-0.547340,0.000006,1.000000;;, + 4400;16;-0.000000,0.023387,0.999727,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999727,-0.023387,0.000000,-2.556833,-0.781132,-0.000001,1.000000;;, + 4480;16;-0.000000,0.021274,0.999774,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999774,-0.021274,0.000000,-2.525928,-1.015728,-0.000006,1.000000;;, + 4560;16;-0.000000,0.018755,0.999824,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999824,-0.018755,0.000000,-2.500761,-1.250548,-0.000001,1.000000;;, + 4640;16;-0.000000,0.016135,0.999870,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999870,-0.016135,0.000000,-2.480774,-1.485050,-0.000002,1.000000;;, + 4720;16;-0.000000,0.013920,0.999903,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999903,-0.013920,0.000000,-2.464930,-1.718164,-0.000005,1.000000;;, + 4800;16;-0.000000,0.011807,0.999930,0.000000,1.000000,0.000001,-0.000000,0.000000,-0.000001,0.999930,-0.011807,0.000000,-2.454305,-1.950977,-0.000005,1.000000;;, + 4960;16;-0.000000,0.003123,0.999995,0.000000,1.000000,0.000001,0.000000,0.000000,-0.000001,0.999995,-0.003123,0.000000,-2.498093,-1.716894,0.000001,1.000000;;; + } + { Bip01_Pelvis } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.999123,0.041767,0.002963,0.000000,-0.039832,0.969877,-0.240317,0.000000,-0.012911,0.239988,0.970690,0.000000,27.423990,8.709621,-0.080291,1.000000;;, + 80;16;0.999057,0.043399,-0.000923,0.000000,-0.042240,0.967043,-0.251084,0.000000,-0.010004,0.250886,0.967965,0.000000,27.423712,8.709688,-0.153400,1.000000;;, + 160;16;0.998974,0.045019,-0.004910,0.000000,-0.044731,0.963995,-0.262132,0.000000,-0.007067,0.262083,0.965020,0.000000,27.423220,8.709748,-0.229143,1.000000;;, + 240;16;0.998870,0.046629,-0.009154,0.000000,-0.047350,0.960438,-0.274438,0.000000,-0.004004,0.274561,0.961561,0.000000,27.422466,8.709834,-0.312789,1.000000;;, + 320;16;0.998745,0.048222,-0.013527,0.000000,-0.050076,0.956816,-0.286348,0.000000,-0.000865,0.286666,0.958030,0.000000,27.421347,8.709902,-0.399080,1.000000;;, + 400;16;0.998598,0.049795,-0.017967,0.000000,-0.052886,0.953448,-0.296885,0.000000,0.002347,0.297419,0.954744,0.000000,27.420021,8.709992,-0.485405,1.000000;;, + 480;16;0.998429,0.051349,-0.022410,0.000000,-0.055741,0.950693,-0.305085,0.000000,0.005639,0.305855,0.952062,0.000000,27.418449,8.710045,-0.569127,1.000000;;, + 560;16;0.998245,0.052832,-0.026768,0.000000,-0.058535,0.948912,-0.310064,0.000000,0.009019,0.311086,0.950339,0.000000,27.416719,8.710094,-0.647637,1.000000;;, + 640;16;0.998037,0.054406,-0.031026,0.000000,-0.061365,0.948540,-0.310654,0.000000,0.012528,0.311948,0.950017,0.000000,27.415018,8.710110,-0.718311,1.000000;;, + 720;16;0.997794,0.056292,-0.035203,0.000000,-0.064365,0.950186,-0.304965,0.000000,0.016283,0.306558,0.951713,0.000000,27.413412,8.710062,-0.778545,1.000000;;, + 800;16;0.997534,0.058300,-0.039081,0.000000,-0.067245,0.953380,-0.294185,0.000000,0.020108,0.296087,0.954949,0.000000,27.412104,8.709989,-0.825681,1.000000;;, + 880;16;0.997266,0.060451,-0.042510,0.000000,-0.069929,0.957960,-0.278248,0.000000,0.023903,0.280460,0.959568,0.000000,27.411259,8.709897,-0.856093,1.000000;;, + 960;16;0.997026,0.062340,-0.045313,0.000000,-0.071994,0.963208,-0.258933,0.000000,0.027504,0.261425,0.964832,0.000000,27.410852,8.709781,-0.870053,1.000000;;, + 1040;16;0.996863,0.063519,-0.047220,0.000000,-0.072985,0.968531,-0.237953,0.000000,0.030619,0.240653,0.970128,0.000000,27.411047,8.709651,-0.865323,1.000000;;, + 1120;16;0.996767,0.064080,-0.048470,0.000000,-0.073083,0.973748,-0.215580,0.000000,0.033383,0.218425,0.975282,0.000000,27.411665,8.709511,-0.845809,1.000000;;, + 1200;16;0.996748,0.063848,-0.049164,0.000000,-0.072196,0.978567,-0.192861,0.000000,0.035796,0.195783,0.979994,0.000000,27.412643,8.709426,-0.814108,1.000000;;, + 1280;16;0.996775,0.063168,-0.049484,0.000000,-0.070700,0.983031,-0.169270,0.000000,0.037952,0.172223,0.984327,0.000000,27.413853,8.709321,-0.771938,1.000000;;, + 1360;16;0.996821,0.062333,-0.049630,0.000000,-0.068920,0.987101,-0.144503,0.000000,0.039982,0.147464,0.988259,0.000000,27.415201,8.709247,-0.721257,1.000000;;, + 1440;16;0.996884,0.061336,-0.049598,0.000000,-0.066870,0.990648,-0.118935,0.000000,0.041840,0.121881,0.991662,0.000000,27.416634,8.709151,-0.663992,1.000000;;, + 1520;16;0.996959,0.060241,-0.049434,0.000000,-0.064637,0.993586,-0.092783,0.000000,0.043528,0.095696,0.994458,0.000000,27.418028,8.709090,-0.602090,1.000000;;, + 1600;16;0.997039,0.059108,-0.049178,0.000000,-0.062306,0.995855,-0.066263,0.000000,0.045058,0.069131,0.996590,0.000000,27.419365,8.709007,-0.537485,1.000000;;, + 1680;16;0.997120,0.057998,-0.048867,0.000000,-0.059956,0.997415,-0.039601,0.000000,0.046444,0.042417,0.998020,0.000000,27.420511,8.708969,-0.472121,1.000000;;, + 1760;16;0.997196,0.056968,-0.048536,0.000000,-0.057662,0.998251,-0.013023,0.000000,0.047709,0.015785,0.998737,0.000000,27.421484,8.708943,-0.407935,1.000000;;, + 1840;16;0.997262,0.056071,-0.048214,0.000000,-0.055493,0.998371,0.013244,0.000000,0.048878,-0.010532,0.998749,0.000000,27.422323,8.708948,-0.346869,1.000000;;, + 1920;16;0.997316,0.055359,-0.047930,0.000000,-0.053513,0.997806,0.038972,0.000000,0.049982,-0.036302,0.998090,0.000000,27.422901,8.708982,-0.290859,1.000000;;, + 2000;16;0.997353,0.054879,-0.047708,0.000000,-0.051780,0.996610,0.063936,0.000000,0.051055,-0.061296,0.996813,0.000000,27.423340,8.708994,-0.241852,1.000000;;, + 2080;16;0.997370,0.054677,-0.047570,0.000000,-0.050346,0.994855,0.087914,0.000000,0.052132,-0.085287,0.994992,0.000000,27.423624,8.709033,-0.201784,1.000000;;, + 2160;16;0.997381,0.054703,-0.047314,0.000000,-0.049197,0.992647,0.110592,0.000000,0.053016,-0.107975,0.992739,0.000000,27.423874,8.709077,-0.164378,1.000000;;, + 2240;16;0.997334,0.055280,-0.047632,0.000000,-0.048570,0.990053,0.132043,0.000000,0.054458,-0.129378,0.990099,0.000000,27.423906,8.709186,-0.156224,1.000000;;, + 2320;16;0.997165,0.056772,-0.049377,0.000000,-0.048657,0.987131,0.152331,0.000000,0.057390,-0.149496,0.987095,0.000000,27.423563,8.709200,-0.208964,1.000000;;, + 2400;16;0.996914,0.058971,-0.051814,0.000000,-0.049309,0.984002,0.171196,0.000000,0.061081,-0.168113,0.983874,0.000000,27.422709,8.709292,-0.301226,1.000000;;, + 2480;16;0.996559,0.061976,-0.055031,0.000000,-0.050578,0.980749,0.188608,0.000000,0.065661,-0.185176,0.980509,0.000000,27.420868,8.709354,-0.439755,1.000000;;, + 2560;16;0.996214,0.065247,-0.057455,0.000000,-0.052261,0.977576,0.203994,0.000000,0.069476,-0.200219,0.977285,0.000000,27.418518,8.709438,-0.571916,1.000000;;, + 2640;16;0.995992,0.068417,-0.057617,0.000000,-0.054407,0.974679,0.216890,0.000000,0.070997,-0.212886,0.974494,0.000000,27.416853,8.709501,-0.650709,1.000000;;, + 2720;16;0.995927,0.071133,-0.055404,0.000000,-0.056821,0.972261,0.226894,0.000000,0.070007,-0.222822,0.972342,0.000000,27.416513,8.709535,-0.666055,1.000000;;, + 2800;16;0.996094,0.072957,-0.049737,0.000000,-0.059430,0.970551,0.233449,0.000000,0.065304,-0.229581,0.971096,0.000000,27.418550,8.709614,-0.578335,1.000000;;, + 2880;16;0.996384,0.073821,-0.042075,0.000000,-0.061852,0.969652,0.236534,0.000000,0.058259,-0.233076,0.970712,0.000000,27.421329,8.709619,-0.429106,1.000000;;, + 2960;16;0.996750,0.073367,-0.033278,0.000000,-0.063506,0.969726,0.235792,0.000000,0.049569,-0.232913,0.971234,0.000000,27.423607,8.709618,-0.238672,1.000000;;, + 3040;16;0.997114,0.072017,-0.024018,0.000000,-0.064522,0.970635,0.231744,0.000000,0.040002,-0.229526,0.972480,0.000000,27.424623,8.709596,-0.031054,1.000000;;, + 3120;16;0.997436,0.069989,-0.014943,0.000000,-0.064858,0.972275,0.224666,0.000000,0.030253,-0.223120,0.974321,0.000000,27.424124,8.709539,0.170648,1.000000;;, + 3200;16;0.997693,0.067528,-0.006951,0.000000,-0.064461,0.974507,0.214897,0.000000,0.021285,-0.213953,0.976612,0.000000,27.422415,8.709509,0.343353,1.000000;;, + 3280;16;0.997893,0.064869,-0.001153,0.000000,-0.063289,0.977180,0.202767,0.000000,0.014280,-0.202267,0.979226,0.000000,27.420753,8.709398,0.456439,1.000000;;, + 3360;16;0.998058,0.062249,0.002426,0.000000,-0.061590,0.980136,0.188522,0.000000,0.009357,-0.188306,0.982066,0.000000,27.419783,8.709392,0.509363,1.000000;;, + 3440;16;0.998194,0.060003,0.003050,0.000000,-0.059630,0.983218,0.172412,0.000000,0.007346,-0.172283,0.985020,0.000000,27.420202,8.709322,0.482506,1.000000;;, + 3520;16;0.998312,0.058058,0.001693,0.000000,-0.057620,0.986277,0.154716,0.000000,0.007313,-0.154552,0.987958,0.000000,27.421497,8.709218,0.402188,1.000000;;, + 3600;16;0.998401,0.056518,-0.001049,0.000000,-0.055853,0.989165,0.135769,0.000000,0.008711,-0.135493,0.990740,0.000000,27.422939,8.709164,0.285022,1.000000;;, + 3680;16;0.998465,0.055179,-0.004804,0.000000,-0.054254,0.991800,0.115711,0.000000,0.011149,-0.115272,0.993271,0.000000,27.424032,8.709114,0.140571,1.000000;;, + 3760;16;0.998507,0.053849,-0.009127,0.000000,-0.052744,0.994098,0.094798,0.000000,0.014178,-0.094175,0.995455,0.000000,27.424370,8.709086,-0.019833,1.000000;;, + 3840;16;0.998524,0.052587,-0.013613,0.000000,-0.051458,0.996000,0.073054,0.000000,0.017400,-0.072246,0.997235,0.000000,27.423771,8.709007,-0.184858,1.000000;;, + 3920;16;0.998519,0.051392,-0.017847,0.000000,-0.050433,0.997446,0.050570,0.000000,0.020400,-0.049595,0.998561,0.000000,27.422205,8.708976,-0.343148,1.000000;;, + 4000;16;0.998507,0.050259,-0.021413,0.000000,-0.049665,0.998389,0.027438,0.000000,0.022758,-0.026334,0.999394,0.000000,27.420103,8.708972,-0.483372,1.000000;;, + 4080;16;0.998506,0.049186,-0.023804,0.000000,-0.049111,0.998786,0.003750,0.000000,0.023959,-0.002576,0.999710,0.000000,27.417946,8.708911,-0.591626,1.000000;;, + 4160;16;0.998529,0.048169,-0.024885,0.000000,-0.048681,0.998606,-0.020381,0.000000,0.023868,0.021563,0.999483,0.000000,27.416210,8.708953,-0.664299,1.000000;;, + 4240;16;0.998592,0.047204,-0.024190,0.000000,-0.048254,0.997827,-0.044860,0.000000,0.022020,0.045964,0.998700,0.000000,27.415644,8.708937,-0.688669,1.000000;;, + 4320;16;0.998681,0.046287,-0.022210,0.000000,-0.047729,0.996437,-0.069543,0.000000,0.018912,0.070512,0.997332,0.000000,27.415854,8.709007,-0.678236,1.000000;;, + 4400;16;0.998784,0.045413,-0.019169,0.000000,-0.047025,0.994433,-0.094300,0.000000,0.014780,0.095087,0.995359,0.000000,27.416765,8.709054,-0.639246,1.000000;;, + 4480;16;0.998887,0.044578,-0.015395,0.000000,-0.046097,0.991824,-0.118995,0.000000,0.009964,0.119572,0.992776,0.000000,27.418045,8.709128,-0.580761,1.000000;;, + 4560;16;0.998979,0.043778,-0.011190,0.000000,-0.044932,0.988630,-0.143495,0.000000,0.004781,0.143852,0.989588,0.000000,27.419416,8.709133,-0.511128,1.000000;;, + 4640;16;0.999051,0.043007,-0.006858,0.000000,-0.043547,0.984881,-0.167671,0.000000,-0.000457,0.167810,0.985819,0.000000,27.420631,8.709249,-0.438722,1.000000;;, + 4720;16;0.999103,0.042252,-0.002899,0.000000,-0.042026,0.980641,-0.191252,0.000000,-0.005238,0.191202,0.981537,0.000000,27.421503,8.709340,-0.377466,1.000000;;, + 4800;16;0.999137,0.041531,0.000982,0.000000,-0.040353,0.975880,-0.214545,0.000000,-0.009868,0.214320,0.976714,0.000000,27.422213,8.709480,-0.319006,1.000000;;, + 4960;16;0.999123,0.041767,0.002963,0.000000,-0.039832,0.969877,-0.240317,0.000000,-0.012911,0.239988,0.970690,0.000000,27.423990,8.709621,-0.080291,1.000000;;; + } + { Bip01_Spine } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178093,-0.022107,-0.000000,1.000000;;, + 80;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178076,-0.022107,-0.000001,1.000000;;, + 160;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178078,-0.022100,-0.000000,1.000000;;, + 240;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178055,-0.022113,-0.000001,1.000000;;, + 320;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178087,-0.022091,-0.000000,1.000000;;, + 400;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178095,-0.022106,-0.000000,1.000000;;, + 480;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178078,-0.022101,-0.000000,1.000000;;, + 560;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178080,-0.022108,-0.000001,1.000000;;, + 640;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178099,-0.022104,0.000000,1.000000;;, + 720;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178123,-0.022100,0.000001,1.000000;;, + 800;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178085,-0.022088,-0.000000,1.000000;;, + 880;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178066,-0.022108,-0.000001,1.000000;;, + 960;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178112,-0.022100,0.000001,1.000000;;, + 1040;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178099,-0.022101,0.000000,1.000000;;, + 1120;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178110,-0.022086,0.000001,1.000000;;, + 1200;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178099,-0.022109,0.000000,1.000000;;, + 1280;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178066,-0.022097,-0.000001,1.000000;;, + 1360;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178122,-0.022110,0.000001,1.000000;;, + 1440;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178076,-0.022091,-0.000000,1.000000;;, + 1520;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178099,-0.022102,0.000000,1.000000;;, + 1600;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178057,-0.022091,-0.000001,1.000000;;, + 1680;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178072,-0.022111,-0.000001,1.000000;;, + 1760;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178089,-0.022071,0.000000,1.000000;;, + 1840;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178070,-0.022096,-0.000001,1.000000;;, + 1920;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178097,-0.022103,-0.000000,1.000000;;, + 2000;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178118,-0.022102,0.000001,1.000000;;, + 2080;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178083,-0.022100,0.000000,1.000000;;, + 2160;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178091,-0.022098,0.000000,1.000000;;, + 2240;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178087,-0.022139,0.000000,1.000000;;, + 2320;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178082,-0.022113,-0.000001,1.000000;;, + 2400;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178089,-0.022089,0.000000,1.000000;;, + 2480;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178091,-0.022090,0.000000,1.000000;;, + 2560;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178083,-0.022078,0.000000,1.000000;;, + 2640;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178047,-0.022098,-0.000001,1.000000;;, + 2720;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178083,-0.022071,0.000001,1.000000;;, + 2800;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178085,-0.022123,-0.000001,1.000000;;, + 2880;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178074,-0.022096,-0.000000,1.000000;;, + 2960;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178123,-0.022122,-0.000002,1.000000;;, + 3040;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178099,-0.022103,-0.000000,1.000000;;, + 3120;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178076,-0.022107,-0.000001,1.000000;;, + 3200;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178122,-0.022106,-0.000001,1.000000;;, + 3280;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178097,-0.022081,0.000001,1.000000;;, + 3360;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178120,-0.022132,-0.000003,1.000000;;, + 3440;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178110,-0.022128,-0.000002,1.000000;;, + 3520;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178085,-0.022074,0.000002,1.000000;;, + 3600;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178089,-0.022098,0.000000,1.000000;;, + 3680;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178097,-0.022077,0.000001,1.000000;;, + 3760;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178085,-0.022123,-0.000002,1.000000;;, + 3840;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178057,-0.022095,0.000000,1.000000;;, + 3920;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178091,-0.022088,0.000001,1.000000;;, + 4000;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178080,-0.022091,0.000001,1.000000;;, + 4080;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178082,-0.022065,0.000002,1.000000;;, + 4160;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178125,-0.022127,-0.000002,1.000000;;, + 4240;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178078,-0.022039,0.000004,1.000000;;, + 4320;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178112,-0.022084,0.000001,1.000000;;, + 4400;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178114,-0.022109,-0.000001,1.000000;;, + 4480;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178070,-0.022167,-0.000004,1.000000;;, + 4560;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178085,-0.022028,0.000003,1.000000;;, + 4640;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178066,-0.022106,-0.000000,1.000000;;, + 4720;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178074,-0.022161,-0.000002,1.000000;;, + 4800;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178080,-0.022084,0.000000,1.000000;;, + 4960;16;0.984808,-0.173648,-0.000000,0.000000,0.173648,0.984808,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,28.178093,-0.022107,-0.000000,1.000000;;; + } + { Bip01_Spine1 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.999960,0.008638,0.002139,0.000000,-0.008515,0.998612,-0.051985,0.000000,-0.002585,0.051964,0.998646,0.000000,28.182180,-0.022404,0.001167,1.000000;;, + 80;16;0.999958,0.009006,0.001953,0.000000,-0.008886,0.998480,-0.054390,0.000000,-0.002440,0.054371,0.998518,0.000000,28.182199,-0.022407,0.001221,1.000000;;, + 160;16;0.999954,0.009373,0.001769,0.000000,-0.009257,0.998339,-0.056869,0.000000,-0.002300,0.056850,0.998380,0.000000,28.182215,-0.022390,0.001277,1.000000;;, + 240;16;0.999951,0.009739,0.001601,0.000000,-0.009626,0.998174,-0.059641,0.000000,-0.002179,0.059622,0.998219,0.000000,28.182205,-0.022391,0.001339,1.000000;;, + 320;16;0.999948,0.010105,0.001428,0.000000,-0.009996,0.998005,-0.062338,0.000000,-0.002055,0.062321,0.998054,0.000000,28.182203,-0.022400,0.001399,1.000000;;, + 400;16;0.999944,0.010470,0.001238,0.000000,-0.010368,0.997848,-0.064742,0.000000,-0.001913,0.064726,0.997901,0.000000,28.182194,-0.022392,0.001452,1.000000;;, + 480;16;0.999941,0.010837,0.001019,0.000000,-0.010745,0.997720,-0.066632,0.000000,-0.001739,0.066617,0.997777,0.000000,28.182243,-0.022383,0.001496,1.000000;;, + 560;16;0.999937,0.011193,0.000763,0.000000,-0.011115,0.997637,-0.067804,0.000000,-0.001520,0.067791,0.997698,0.000000,28.182243,-0.022378,0.001522,1.000000;;, + 640;16;0.999933,0.011574,0.000449,0.000000,-0.011516,0.997620,-0.067991,0.000000,-0.001235,0.067981,0.997686,0.000000,28.182236,-0.022407,0.001525,1.000000;;, + 720;16;0.999928,0.012029,0.000047,0.000000,-0.011999,0.997696,-0.066768,0.000000,-0.000850,0.066762,0.997769,0.000000,28.182245,-0.022386,0.001498,1.000000;;, + 800;16;0.999922,0.012511,-0.000419,0.000000,-0.012512,0.997845,-0.064404,0.000000,-0.000387,0.064404,0.997924,0.000000,28.182276,-0.022409,0.001445,1.000000;;, + 880;16;0.999915,0.013021,-0.000950,0.000000,-0.013055,0.998059,-0.060894,0.000000,0.000155,0.060901,0.998144,0.000000,28.182274,-0.022404,0.001366,1.000000;;, + 960;16;0.999908,0.013465,-0.001505,0.000000,-0.013529,0.998303,-0.056640,0.000000,0.000740,0.056656,0.998393,0.000000,28.182281,-0.022418,0.001271,1.000000;;, + 1040;16;0.999904,0.013741,-0.002043,0.000000,-0.013829,0.998550,-0.052024,0.000000,0.001325,0.052047,0.998644,0.000000,28.182289,-0.022406,0.001167,1.000000;;, + 1120;16;0.999900,0.013871,-0.002578,0.000000,-0.013977,0.998792,-0.047110,0.000000,0.001921,0.047141,0.998886,0.000000,28.182270,-0.022416,0.001056,1.000000;;, + 1200;16;0.999900,0.013819,-0.003104,0.000000,-0.013937,0.999015,-0.042130,0.000000,0.002518,0.042169,0.999107,0.000000,28.182281,-0.022428,0.000945,1.000000;;, + 1280;16;0.999900,0.013660,-0.003641,0.000000,-0.013785,0.999221,-0.036971,0.000000,0.003133,0.037018,0.999310,0.000000,28.182306,-0.022411,0.000830,1.000000;;, + 1360;16;0.999900,0.013461,-0.004213,0.000000,-0.013587,0.999409,-0.031574,0.000000,0.003786,0.031628,0.999492,0.000000,28.182280,-0.022422,0.000708,1.000000;;, + 1440;16;0.999901,0.013217,-0.004801,0.000000,-0.013338,0.999573,-0.026018,0.000000,0.004455,0.026080,0.999650,0.000000,28.182310,-0.022427,0.000585,1.000000;;, + 1520;16;0.999902,0.012943,-0.005396,0.000000,-0.013050,0.999708,-0.020351,0.000000,0.005131,0.020419,0.999778,0.000000,28.182245,-0.022437,0.000456,1.000000;;, + 1600;16;0.999902,0.012651,-0.005990,0.000000,-0.012738,0.999812,-0.014617,0.000000,0.005804,0.014692,0.999875,0.000000,28.182310,-0.022420,0.000330,1.000000;;, + 1680;16;0.999902,0.012355,-0.006574,0.000000,-0.012413,0.999884,-0.008863,0.000000,0.006464,0.008943,0.999939,0.000000,28.182240,-0.022410,0.000199,1.000000;;, + 1760;16;0.999902,0.012066,-0.007140,0.000000,-0.012089,0.999922,-0.003134,0.000000,0.007101,0.003220,0.999970,0.000000,28.182266,-0.022477,0.000070,1.000000;;, + 1840;16;0.999901,0.011799,-0.007677,0.000000,-0.011780,0.999927,0.002523,0.000000,0.007706,-0.002433,0.999967,0.000000,28.182272,-0.022432,-0.000056,1.000000;;, + 1920;16;0.999900,0.011565,-0.008177,0.000000,-0.011499,0.999901,0.008063,0.000000,0.008269,-0.007969,0.999934,0.000000,28.182232,-0.022423,-0.000181,1.000000;;, + 2000;16;0.999898,0.011377,-0.008631,0.000000,-0.011260,0.999846,0.013441,0.000000,0.008782,-0.013342,0.999872,0.000000,28.182209,-0.022437,-0.000302,1.000000;;, + 2080;16;0.999896,0.011247,-0.009028,0.000000,-0.011078,0.999765,0.018609,0.000000,0.009235,-0.018507,0.999786,0.000000,28.182236,-0.022451,-0.000417,1.000000;;, + 2160;16;0.999894,0.011168,-0.009374,0.000000,-0.010945,0.999664,0.023506,0.000000,0.009634,-0.023401,0.999680,0.000000,28.182228,-0.022439,-0.000527,1.000000;;, + 2240;16;0.999891,0.011212,-0.009616,0.000000,-0.010938,0.999544,0.028137,0.000000,0.009927,-0.028029,0.999558,0.000000,28.182234,-0.022405,-0.000631,1.000000;;, + 2320;16;0.999887,0.011463,-0.009695,0.000000,-0.011142,0.999410,0.032503,0.000000,0.010061,-0.032392,0.999425,0.000000,28.182226,-0.022421,-0.000730,1.000000;;, + 2400;16;0.999883,0.011880,-0.009621,0.000000,-0.011521,0.999265,0.036556,0.000000,0.010048,-0.036441,0.999285,0.000000,28.182283,-0.022441,-0.000819,1.000000;;, + 2480;16;0.999878,0.012490,-0.009366,0.000000,-0.012103,0.999115,0.040282,0.000000,0.009861,-0.040164,0.999144,0.000000,28.182253,-0.022421,-0.000904,1.000000;;, + 2560;16;0.999873,0.013177,-0.008993,0.000000,-0.012773,0.998968,0.043576,0.000000,0.009557,-0.043456,0.999010,0.000000,28.182255,-0.022452,-0.000979,1.000000;;, + 2640;16;0.999867,0.013860,-0.008544,0.000000,-0.013450,0.998835,0.046354,0.000000,0.009176,-0.046233,0.998889,0.000000,28.182299,-0.022407,-0.001040,1.000000;;, + 2720;16;0.999863,0.014461,-0.008061,0.000000,-0.014053,0.998723,0.048534,0.000000,0.008753,-0.048414,0.998789,0.000000,28.182329,-0.022429,-0.001090,1.000000;;, + 2800;16;0.999860,0.014879,-0.007608,0.000000,-0.014480,0.998643,0.050014,0.000000,0.008342,-0.049897,0.998720,0.000000,28.182306,-0.022414,-0.001123,1.000000;;, + 2880;16;0.999860,0.015098,-0.007168,0.000000,-0.014715,0.998602,0.050771,0.000000,0.007925,-0.050658,0.998685,0.000000,28.182318,-0.022442,-0.001141,1.000000;;, + 2960;16;0.999864,0.015039,-0.006756,0.000000,-0.014678,0.998605,0.050714,0.000000,0.007509,-0.050608,0.998690,0.000000,28.182287,-0.022416,-0.001138,1.000000;;, + 3040;16;0.999870,0.014793,-0.006341,0.000000,-0.014459,0.998647,0.049943,0.000000,0.007071,-0.049844,0.998732,0.000000,28.182310,-0.022401,-0.001120,1.000000;;, + 3120;16;0.999879,0.014408,-0.005889,0.000000,-0.014106,0.998723,0.048503,0.000000,0.006580,-0.048414,0.998806,0.000000,28.182297,-0.022400,-0.001087,1.000000;;, + 3200;16;0.999888,0.013933,-0.005421,0.000000,-0.013666,0.998827,0.046459,0.000000,0.006062,-0.046380,0.998905,0.000000,28.182285,-0.022428,-0.001043,1.000000;;, + 3280;16;0.999898,0.013415,-0.004945,0.000000,-0.013186,0.998950,0.043868,0.000000,0.005529,-0.043798,0.999025,0.000000,28.182266,-0.022429,-0.000985,1.000000;;, + 3360;16;0.999907,0.012904,-0.004470,0.000000,-0.012711,0.999087,0.040788,0.000000,0.004992,-0.040728,0.999158,0.000000,28.182243,-0.022399,-0.000913,1.000000;;, + 3440;16;0.999914,0.012469,-0.004007,0.000000,-0.012311,0.999229,0.037272,0.000000,0.004468,-0.037219,0.999297,0.000000,28.182274,-0.022430,-0.000837,1.000000;;, + 3520;16;0.999920,0.012094,-0.003553,0.000000,-0.011969,0.999371,0.033398,0.000000,0.003955,-0.033353,0.999436,0.000000,28.182243,-0.022438,-0.000751,1.000000;;, + 3600;16;0.999925,0.011801,-0.003112,0.000000,-0.011705,0.999504,0.029249,0.000000,0.003456,-0.029211,0.999567,0.000000,28.182255,-0.022432,-0.000657,1.000000;;, + 3680;16;0.999930,0.011546,-0.002677,0.000000,-0.011476,0.999625,0.024863,0.000000,0.002964,-0.024830,0.999687,0.000000,28.182261,-0.022451,-0.000560,1.000000;;, + 3760;16;0.999934,0.011289,-0.002241,0.000000,-0.011241,0.999731,0.020298,0.000000,0.002469,-0.020271,0.999791,0.000000,28.182238,-0.022433,-0.000455,1.000000;;, + 3840;16;0.999937,0.011041,-0.001804,0.000000,-0.011012,0.999818,0.015564,0.000000,0.001976,-0.015543,0.999877,0.000000,28.182243,-0.022441,-0.000350,1.000000;;, + 3920;16;0.999941,0.010802,-0.001368,0.000000,-0.010787,0.999885,0.010683,0.000000,0.001483,-0.010668,0.999942,0.000000,28.182222,-0.022450,-0.000240,1.000000;;, + 4000;16;0.999944,0.010572,-0.000931,0.000000,-0.010566,0.999928,0.005677,0.000000,0.000991,-0.005667,0.999984,0.000000,28.182243,-0.022468,-0.000130,1.000000;;, + 4080;16;0.999946,0.010348,-0.000494,0.000000,-0.010348,0.999946,0.000569,0.000000,0.000500,-0.000564,1.000000,0.000000,28.182241,-0.022454,-0.000014,1.000000;;, + 4160;16;0.999949,0.010130,-0.000057,0.000000,-0.010130,0.999938,-0.004620,0.000000,0.000010,0.004620,0.999989,0.000000,28.182201,-0.022432,0.000104,1.000000;;, + 4240;16;0.999951,0.009917,0.000381,0.000000,-0.009913,0.999902,-0.009867,0.000000,-0.000478,0.009863,0.999951,0.000000,28.182232,-0.022464,0.000219,1.000000;;, + 4320;16;0.999952,0.009709,0.000819,0.000000,-0.009695,0.999838,-0.015150,0.000000,-0.000966,0.015142,0.999885,0.000000,28.182169,-0.022407,0.000342,1.000000;;, + 4400;16;0.999954,0.009503,0.001259,0.000000,-0.009475,0.999746,-0.020448,0.000000,-0.001453,0.020435,0.999790,0.000000,28.182182,-0.022431,0.000459,1.000000;;, + 4480;16;0.999955,0.009299,0.001699,0.000000,-0.009253,0.999626,-0.025737,0.000000,-0.001938,0.025721,0.999667,0.000000,28.182177,-0.022365,0.000581,1.000000;;, + 4560;16;0.999956,0.009097,0.002141,0.000000,-0.009026,0.999479,-0.030997,0.000000,-0.002422,0.030976,0.999517,0.000000,28.182198,-0.022499,0.000692,1.000000;;, + 4640;16;0.999957,0.008894,0.002585,0.000000,-0.008794,0.999306,-0.036204,0.000000,-0.002905,0.036180,0.999341,0.000000,28.182184,-0.022429,0.000812,1.000000;;, + 4720;16;0.999958,0.008688,0.003030,0.000000,-0.008556,0.999110,-0.041308,0.000000,-0.003387,0.041280,0.999142,0.000000,28.182182,-0.022396,0.000928,1.000000;;, + 4800;16;0.999958,0.008483,0.003477,0.000000,-0.008313,0.998890,-0.046374,0.000000,-0.003867,0.046343,0.998918,0.000000,28.182159,-0.022430,0.001040,1.000000;;, + 4960;16;0.999960,0.008638,0.002139,0.000000,-0.008515,0.998612,-0.051985,0.000000,-0.002585,0.051964,0.998646,0.000000,28.182180,-0.022404,0.001167,1.000000;;; + } + { Bip01_Spine2 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.999844,-0.017541,0.002139,0.000000,0.017628,0.998492,-0.051985,0.000000,-0.001224,0.052014,0.998646,0.000000,28.181387,-0.033838,0.001761,1.000000;;, + 80;16;0.999851,-0.017173,0.001953,0.000000,0.017254,0.998371,-0.054390,0.000000,-0.001015,0.054416,0.998518,0.000000,28.181393,-0.033823,0.001844,1.000000;;, + 160;16;0.999857,-0.016806,0.001769,0.000000,0.016880,0.998239,-0.056869,0.000000,-0.000811,0.056891,0.998380,0.000000,28.181393,-0.033834,0.001926,1.000000;;, + 240;16;0.999864,-0.016440,0.001601,0.000000,0.016506,0.998083,-0.059641,0.000000,-0.000618,0.059659,0.998219,0.000000,28.181406,-0.033831,0.002020,1.000000;;, + 320;16;0.999870,-0.016074,0.001428,0.000000,0.016132,0.997925,-0.062339,0.000000,-0.000423,0.062353,0.998054,0.000000,28.181440,-0.033803,0.002113,1.000000;;, + 400;16;0.999876,-0.015709,0.001238,0.000000,0.015756,0.997778,-0.064742,0.000000,-0.000218,0.064754,0.997901,0.000000,28.181459,-0.033810,0.002194,1.000000;;, + 480;16;0.999882,-0.015342,0.001019,0.000000,0.015376,0.997659,-0.066632,0.000000,0.000006,0.066640,0.997777,0.000000,28.181421,-0.033817,0.002256,1.000000;;, + 560;16;0.999887,-0.014987,0.000763,0.000000,0.015004,0.997586,-0.067804,0.000000,0.000255,0.067808,0.997698,0.000000,28.181471,-0.033799,0.002297,1.000000;;, + 640;16;0.999893,-0.014606,0.000449,0.000000,0.014602,0.997579,-0.067991,0.000000,0.000545,0.067990,0.997686,0.000000,28.181479,-0.033799,0.002304,1.000000;;, + 720;16;0.999900,-0.014151,0.000047,0.000000,0.014122,0.997669,-0.066768,0.000000,0.000898,0.066762,0.997769,0.000000,28.181480,-0.033816,0.002261,1.000000;;, + 800;16;0.999906,-0.013669,-0.000419,0.000000,0.013613,0.997831,-0.064404,0.000000,0.001299,0.064393,0.997924,0.000000,28.181528,-0.033810,0.002183,1.000000;;, + 880;16;0.999913,-0.013158,-0.000950,0.000000,0.013076,0.998059,-0.060894,0.000000,0.001749,0.060876,0.998144,0.000000,28.181520,-0.033831,0.002062,1.000000;;, + 960;16;0.999918,-0.012714,-0.001505,0.000000,0.012608,0.998315,-0.056640,0.000000,0.002222,0.056617,0.998394,0.000000,28.181570,-0.033827,0.001920,1.000000;;, + 1040;16;0.999921,-0.012438,-0.002043,0.000000,0.012315,0.998570,-0.052024,0.000000,0.002687,0.051994,0.998644,0.000000,28.181555,-0.033841,0.001762,1.000000;;, + 1120;16;0.999921,-0.012308,-0.002578,0.000000,0.012173,0.998815,-0.047110,0.000000,0.003154,0.047075,0.998886,0.000000,28.181576,-0.033837,0.001598,1.000000;;, + 1200;16;0.999919,-0.012361,-0.003104,0.000000,0.012219,0.999037,-0.042129,0.000000,0.003622,0.042088,0.999107,0.000000,28.181570,-0.033847,0.001428,1.000000;;, + 1280;16;0.999915,-0.012519,-0.003641,0.000000,0.012376,0.999240,-0.036971,0.000000,0.004101,0.036923,0.999310,0.000000,28.181587,-0.033863,0.001253,1.000000;;, + 1360;16;0.999910,-0.012718,-0.004213,0.000000,0.012579,0.999422,-0.031574,0.000000,0.004612,0.031518,0.999493,0.000000,28.181551,-0.033881,0.001069,1.000000;;, + 1440;16;0.999904,-0.012962,-0.004801,0.000000,0.012832,0.999579,-0.026018,0.000000,0.005136,0.025954,0.999650,0.000000,28.181551,-0.033876,0.000882,1.000000;;, + 1520;16;0.999898,-0.013236,-0.005396,0.000000,0.013123,0.999707,-0.020351,0.000000,0.005664,0.020278,0.999778,0.000000,28.181580,-0.033861,0.000692,1.000000;;, + 1600;16;0.999891,-0.013528,-0.005990,0.000000,0.013439,0.999803,-0.014617,0.000000,0.006187,0.014535,0.999875,0.000000,28.181488,-0.033870,0.000494,1.000000;;, + 1680;16;0.999883,-0.013824,-0.006574,0.000000,0.013766,0.999866,-0.008863,0.000000,0.006696,0.008771,0.999939,0.000000,28.181526,-0.033868,0.000301,1.000000;;, + 1760;16;0.999875,-0.014112,-0.007140,0.000000,0.014090,0.999896,-0.003134,0.000000,0.007183,0.003033,0.999970,0.000000,28.181465,-0.033827,0.000105,1.000000;;, + 1840;16;0.999867,-0.014380,-0.007677,0.000000,0.014399,0.999893,0.002523,0.000000,0.007640,-0.002634,0.999968,0.000000,28.181459,-0.033858,-0.000087,1.000000;;, + 1920;16;0.999860,-0.014614,-0.008177,0.000000,0.014679,0.999860,0.008063,0.000000,0.008058,-0.008182,0.999934,0.000000,28.181480,-0.033867,-0.000273,1.000000;;, + 2000;16;0.999853,-0.014801,-0.008631,0.000000,0.014917,0.999798,0.013441,0.000000,0.008430,-0.013567,0.999872,0.000000,28.181446,-0.033858,-0.000457,1.000000;;, + 2080;16;0.999848,-0.014931,-0.009028,0.000000,0.015097,0.999713,0.018609,0.000000,0.008748,-0.018743,0.999786,0.000000,28.181459,-0.033842,-0.000631,1.000000;;, + 2160;16;0.999843,-0.015010,-0.009375,0.000000,0.015227,0.999608,0.023506,0.000000,0.009018,-0.023645,0.999680,0.000000,28.181465,-0.033830,-0.000798,1.000000;;, + 2240;16;0.999842,-0.014966,-0.009616,0.000000,0.015231,0.999488,0.028137,0.000000,0.009190,-0.028279,0.999558,0.000000,28.181452,-0.033852,-0.000955,1.000000;;, + 2320;16;0.999845,-0.014715,-0.009695,0.000000,0.015023,0.999359,0.032503,0.000000,0.009210,-0.032644,0.999425,0.000000,28.181450,-0.033814,-0.001103,1.000000;;, + 2400;16;0.999851,-0.014298,-0.009621,0.000000,0.014641,0.999224,0.036556,0.000000,0.009091,-0.036692,0.999285,0.000000,28.181465,-0.033791,-0.001241,1.000000;;, + 2480;16;0.999862,-0.013688,-0.009366,0.000000,0.014055,0.999090,0.040282,0.000000,0.008806,-0.040409,0.999144,0.000000,28.181517,-0.033817,-0.001366,1.000000;;, + 2560;16;0.999875,-0.013001,-0.008993,0.000000,0.013381,0.998960,0.043576,0.000000,0.008417,-0.043691,0.999010,0.000000,28.181549,-0.033836,-0.001476,1.000000;;, + 2640;16;0.999888,-0.012318,-0.008544,0.000000,0.012701,0.998844,0.046354,0.000000,0.007963,-0.046458,0.998889,0.000000,28.181564,-0.033836,-0.001570,1.000000;;, + 2720;16;0.999899,-0.011717,-0.008061,0.000000,0.012095,0.998748,0.048534,0.000000,0.007483,-0.048627,0.998789,0.000000,28.181547,-0.033857,-0.001645,1.000000;;, + 2800;16;0.999907,-0.011300,-0.007608,0.000000,0.011666,0.998680,0.050014,0.000000,0.007033,-0.050098,0.998720,0.000000,28.181583,-0.033833,-0.001695,1.000000;;, + 2880;16;0.999913,-0.011081,-0.007168,0.000000,0.011430,0.998645,0.050771,0.000000,0.006596,-0.050848,0.998685,0.000000,28.181591,-0.033802,-0.001721,1.000000;;, + 2960;16;0.999915,-0.011139,-0.006756,0.000000,0.011468,0.998647,0.050714,0.000000,0.006182,-0.050787,0.998690,0.000000,28.181618,-0.033829,-0.001718,1.000000;;, + 3040;16;0.999915,-0.011385,-0.006341,0.000000,0.011688,0.998684,0.049943,0.000000,0.005764,-0.050012,0.998732,0.000000,28.181599,-0.033857,-0.001693,1.000000;;, + 3120;16;0.999913,-0.011770,-0.005889,0.000000,0.012042,0.998750,0.048503,0.000000,0.005310,-0.048570,0.998806,0.000000,28.181557,-0.033831,-0.001643,1.000000;;, + 3200;16;0.999910,-0.012246,-0.005421,0.000000,0.012485,0.998842,0.046459,0.000000,0.004846,-0.046522,0.998905,0.000000,28.181559,-0.033862,-0.001575,1.000000;;, + 3280;16;0.999906,-0.012764,-0.004945,0.000000,0.012968,0.998953,0.043868,0.000000,0.004380,-0.043928,0.999025,0.000000,28.181566,-0.033826,-0.001487,1.000000;;, + 3360;16;0.999902,-0.013275,-0.004470,0.000000,0.013446,0.999077,0.040788,0.000000,0.003924,-0.040844,0.999158,0.000000,28.181530,-0.033886,-0.001383,1.000000;;, + 3440;16;0.999898,-0.013710,-0.004007,0.000000,0.013850,0.999209,0.037272,0.000000,0.003493,-0.037324,0.999297,0.000000,28.181486,-0.033862,-0.001263,1.000000;;, + 3520;16;0.999895,-0.014085,-0.003553,0.000000,0.014195,0.999341,0.033398,0.000000,0.003080,-0.033445,0.999436,0.000000,28.181517,-0.033820,-0.001130,1.000000;;, + 3600;16;0.999892,-0.014378,-0.003112,0.000000,0.014463,0.999467,0.029249,0.000000,0.002690,-0.029291,0.999567,0.000000,28.181490,-0.033846,-0.000991,1.000000;;, + 3680;16;0.999889,-0.014633,-0.002678,0.000000,0.014695,0.999583,0.024863,0.000000,0.002313,-0.024899,0.999687,0.000000,28.181467,-0.033848,-0.000841,1.000000;;, + 3760;16;0.999887,-0.014890,-0.002241,0.000000,0.014933,0.999682,0.020298,0.000000,0.001938,-0.020329,0.999792,0.000000,28.181490,-0.033844,-0.000687,1.000000;;, + 3840;16;0.999884,-0.015138,-0.001804,0.000000,0.015164,0.999764,0.015564,0.000000,0.001568,-0.015589,0.999877,0.000000,28.181444,-0.033860,-0.000526,1.000000;;, + 3920;16;0.999881,-0.015377,-0.001368,0.000000,0.015390,0.999825,0.010683,0.000000,0.001203,-0.010703,0.999942,0.000000,28.181479,-0.033850,-0.000361,1.000000;;, + 4000;16;0.999878,-0.015607,-0.000931,0.000000,0.015612,0.999862,0.005677,0.000000,0.000842,-0.005691,0.999983,0.000000,28.181408,-0.033862,-0.000190,1.000000;;, + 4080;16;0.999875,-0.015831,-0.000494,0.000000,0.015832,0.999874,0.000569,0.000000,0.000485,-0.000577,1.000000,0.000000,28.181391,-0.033842,-0.000016,1.000000;;, + 4160;16;0.999871,-0.016049,-0.000057,0.000000,0.016049,0.999861,-0.004620,0.000000,0.000131,0.004618,0.999989,0.000000,28.181423,-0.033896,0.000155,1.000000;;, + 4240;16;0.999868,-0.016262,0.000381,0.000000,0.016265,0.999819,-0.009867,0.000000,-0.000220,0.009872,0.999951,0.000000,28.181391,-0.033872,0.000335,1.000000;;, + 4320;16;0.999864,-0.016470,0.000819,0.000000,0.016481,0.999749,-0.015150,0.000000,-0.000569,0.015162,0.999885,0.000000,28.181414,-0.033918,0.000510,1.000000;;, + 4400;16;0.999860,-0.016676,0.001259,0.000000,0.016698,0.999652,-0.020448,0.000000,-0.000917,0.020466,0.999790,0.000000,28.181410,-0.033869,0.000693,1.000000;;, + 4480;16;0.999856,-0.016880,0.001699,0.000000,0.016918,0.999526,-0.025737,0.000000,-0.001264,0.025763,0.999667,0.000000,28.181383,-0.033883,0.000871,1.000000;;, + 4560;16;0.999852,-0.017082,0.002141,0.000000,0.017141,0.999372,-0.030997,0.000000,-0.001611,0.031029,0.999517,0.000000,28.181395,-0.033810,0.001054,1.000000;;, + 4640;16;0.999847,-0.017285,0.002585,0.000000,0.017367,0.999193,-0.036204,0.000000,-0.001957,0.036244,0.999341,0.000000,28.181389,-0.033833,0.001229,1.000000;;, + 4720;16;0.999842,-0.017491,0.003030,0.000000,0.017601,0.998991,-0.041308,0.000000,-0.002305,0.041355,0.999142,0.000000,28.181398,-0.033816,0.001402,1.000000;;, + 4800;16;0.999837,-0.017696,0.003477,0.000000,0.017838,0.998765,-0.046374,0.000000,-0.002652,0.046428,0.998918,0.000000,28.181417,-0.033880,0.001568,1.000000;;, + 4960;16;0.999844,-0.017541,0.002139,0.000000,0.017628,0.998492,-0.051985,0.000000,-0.001224,0.052014,0.998646,0.000000,28.181387,-0.033838,0.001761,1.000000;;; + } + { Bip01_Spine3 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566051,-0.019152,-0.000001,1.000000;;, + 80;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566063,-0.019157,-0.000001,1.000000;;, + 160;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566074,-0.019146,-0.000000,1.000000;;, + 240;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566082,-0.019151,-0.000001,1.000000;;, + 320;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566093,-0.019149,-0.000000,1.000000;;, + 400;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566093,-0.019138,0.000001,1.000000;;, + 480;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566078,-0.019146,-0.000000,1.000000;;, + 560;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566078,-0.019152,-0.000001,1.000000;;, + 640;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566071,-0.019145,0.000000,1.000000;;, + 720;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566078,-0.019133,0.000002,1.000000;;, + 800;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566055,-0.019141,0.000000,1.000000;;, + 880;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566093,-0.019140,0.000001,1.000000;;, + 960;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566048,-0.019155,-0.000003,1.000000;;, + 1040;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566097,-0.019147,0.000001,1.000000;;, + 1120;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566082,-0.019140,0.000001,1.000000;;, + 1200;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566078,-0.019156,-0.000001,1.000000;;, + 1280;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566055,-0.019162,-0.000003,1.000000;;, + 1360;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566086,-0.019146,0.000000,1.000000;;, + 1440;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566071,-0.019169,-0.000002,1.000000;;, + 1520;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566051,-0.019159,-0.000002,1.000000;;, + 1600;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566067,-0.019163,-0.000001,1.000000;;, + 1680;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566071,-0.019174,-0.000001,1.000000;;, + 1760;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566082,-0.019169,-0.000000,1.000000;;, + 1840;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566093,-0.019141,0.000001,1.000000;;, + 1920;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566051,-0.019146,-0.000001,1.000000;;, + 2000;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566090,-0.019145,0.000001,1.000000;;, + 2080;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566048,-0.019155,-0.000001,1.000000;;, + 2160;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566059,-0.019159,-0.000001,1.000000;;, + 2240;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566086,-0.019147,0.000001,1.000000;;, + 2320;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566067,-0.019134,-0.000002,1.000000;;, + 2400;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566071,-0.019154,0.000000,1.000000;;, + 2480;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566097,-0.019141,0.000000,1.000000;;, + 2560;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566093,-0.019137,-0.000000,1.000000;;, + 2640;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566067,-0.019130,-0.000002,1.000000;;, + 2720;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566063,-0.019083,-0.000004,1.000000;;, + 2800;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566048,-0.019105,-0.000003,1.000000;;, + 2880;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566074,-0.019139,-0.000000,1.000000;;, + 2960;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566059,-0.019120,-0.000001,1.000000;;, + 3040;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566078,-0.019110,-0.000001,1.000000;;, + 3120;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566090,-0.019134,-0.000000,1.000000;;, + 3200;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566090,-0.019111,-0.000001,1.000000;;, + 3280;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566059,-0.019137,0.000000,1.000000;;, + 3360;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566067,-0.019102,-0.000000,1.000000;;, + 3440;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566082,-0.019094,0.000001,1.000000;;, + 3520;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566071,-0.019155,-0.000000,1.000000;;, + 3600;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566086,-0.019138,-0.000000,1.000000;;, + 3680;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566086,-0.019154,-0.000000,1.000000;;, + 3760;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566071,-0.019144,0.000000,1.000000;;, + 3840;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566093,-0.019120,0.000000,1.000000;;, + 3920;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566059,-0.019139,0.000001,1.000000;;, + 4000;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566074,-0.019157,-0.000001,1.000000;;, + 4080;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566097,-0.019134,0.000000,1.000000;;, + 4160;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566059,-0.019083,0.000005,1.000000;;, + 4240;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566097,-0.019126,0.000001,1.000000;;, + 4320;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566090,-0.019128,0.000001,1.000000;;, + 4400;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566086,-0.019094,0.000005,1.000000;;, + 4480;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566086,-0.019163,-0.000002,1.000000;;, + 4560;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566044,-0.019131,0.000002,1.000000;;, + 4640;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566113,-0.019136,0.000001,1.000000;;, + 4720;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566063,-0.019118,0.000004,1.000000;;, + 4800;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566055,-0.019138,0.000001,1.000000;;, + 4960;16;0.861629,0.507538,0.000001,0.000000,-0.507538,0.861629,-0.000000,0.000000,-0.000001,-0.000000,1.000000,0.000000,42.566051,-0.019152,-0.000001,1.000000;;; + } + { Bip01_Neck } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.975145,-0.214584,-0.055187,0.000000,0.220005,0.967277,0.126384,0.000000,0.026261,-0.135385,0.990445,0.000000,27.900181,-0.000002,0.000000,1.000000;;, + 80;16;0.975197,-0.214991,-0.052635,0.000000,0.220268,0.966011,0.135298,0.000000,0.021758,-0.143536,0.989406,0.000000,27.900167,-0.000002,-0.000001,1.000000;;, + 160;16;0.975267,-0.215301,-0.049997,0.000000,0.220365,0.964664,0.144437,0.000000,0.017133,-0.151882,0.988250,0.000000,27.900175,0.000002,0.000000,1.000000;;, + 240;16;0.975441,-0.215181,-0.047029,0.000000,0.219930,0.963202,0.154506,0.000000,0.012052,-0.161054,0.986872,0.000000,27.900183,-0.000004,0.000001,1.000000;;, + 320;16;0.975573,-0.215199,-0.044121,0.000000,0.219562,0.961661,0.164319,0.000000,0.007068,-0.169992,0.985420,0.000000,27.900177,0.000001,0.000001,1.000000;;, + 400;16;0.975580,-0.215682,-0.041530,0.000000,0.219629,0.960090,0.173176,0.000000,0.002521,-0.178068,0.984015,0.000000,27.900154,-0.000002,-0.000002,1.000000;;, + 480;16;0.975383,-0.216948,-0.039524,0.000000,0.220516,0.958559,0.180383,0.000000,-0.001248,-0.184658,0.982802,0.000000,27.900179,-0.000001,0.000000,1.000000;;, + 560;16;0.975012,-0.218842,-0.038201,0.000000,0.222115,0.957236,0.185378,0.000000,-0.004001,-0.189231,0.981925,0.000000,27.900166,0.000005,-0.000000,1.000000;;, + 640;16;0.974044,-0.223089,-0.038331,0.000000,0.226300,0.955921,0.187092,0.000000,-0.005097,-0.190910,0.981594,0.000000,27.900171,-0.000009,-0.000000,1.000000;;, + 720;16;0.971828,-0.232107,-0.040951,0.000000,0.235664,0.954284,0.183861,0.000000,-0.003596,-0.188332,0.982099,0.000000,27.900181,-0.000010,-0.000001,1.000000;;, + 800;16;0.968795,-0.243752,-0.044946,0.000000,0.247861,0.952526,0.176804,0.000000,-0.000284,-0.182427,0.983219,0.000000,27.900183,-0.000007,0.000000,1.000000;;, + 880;16;0.964823,-0.258093,-0.050051,0.000000,0.262858,0.950475,0.165841,0.000000,0.004770,-0.173163,0.984882,0.000000,27.900158,-0.000001,-0.000002,1.000000;;, + 960;16;0.961036,-0.270992,-0.054531,0.000000,0.276231,0.948855,0.152875,0.000000,0.010314,-0.161981,0.986740,0.000000,27.900185,-0.000003,0.000001,1.000000;;, + 1040;16;0.958751,-0.278453,-0.057093,0.000000,0.283838,0.948626,0.139806,0.000000,0.015230,-0.150244,0.988532,0.000000,27.900154,0.000002,-0.000001,1.000000;;, + 1120;16;0.958315,-0.279751,-0.058075,0.000000,0.285039,0.950072,0.126952,0.000000,0.019660,-0.138214,0.990207,0.000000,27.900169,-0.000004,-0.000001,1.000000;;, + 1200;16;0.960714,-0.271553,-0.057341,0.000000,0.276558,0.954028,0.115524,0.000000,0.023334,-0.126844,0.991648,0.000000,27.900175,0.000008,0.000000,1.000000;;, + 1280;16;0.964677,-0.257395,-0.056096,0.000000,0.262063,0.959356,0.104684,0.000000,0.026871,-0.115686,0.992922,0.000000,27.900183,0.000001,0.000001,1.000000;;, + 1360;16;0.969418,-0.239136,-0.055161,0.000000,0.243477,0.965345,0.093953,0.000000,0.030781,-0.104510,0.994047,0.000000,27.900160,0.000011,-0.000000,1.000000;;, + 1440;16;0.974249,-0.218751,-0.054649,0.000000,0.222769,0.971291,0.083475,0.000000,0.034820,-0.093500,0.995010,0.000000,27.900187,0.000001,0.000001,1.000000;;, + 1520;16;0.978630,-0.198249,-0.054603,0.000000,0.201936,0.976656,0.073246,0.000000,0.038807,-0.082707,0.995818,0.000000,27.900177,0.000001,0.000000,1.000000;;, + 1600;16;0.982195,-0.179675,-0.054862,0.000000,0.183003,0.981076,0.063241,0.000000,0.042461,-0.072155,0.996489,0.000000,27.900177,-0.000000,0.000001,1.000000;;, + 1680;16;0.984643,-0.165625,-0.055193,0.000000,0.168535,0.984267,0.053052,0.000000,0.045538,-0.061539,0.997065,0.000000,27.900185,0.000018,0.000000,1.000000;;, + 1760;16;0.986165,-0.156511,-0.054617,0.000000,0.158953,0.986321,0.043648,0.000000,0.047039,-0.051725,0.997553,0.000000,27.900152,0.000007,-0.000001,1.000000;;, + 1840;16;0.986674,-0.154239,-0.051811,0.000000,0.156181,0.987081,0.035767,0.000000,0.045625,-0.043382,0.998016,0.000000,27.900175,-0.000011,0.000000,1.000000;;, + 1920;16;0.986546,-0.156575,-0.047031,0.000000,0.158056,0.986987,0.029593,0.000000,0.041786,-0.036628,0.998455,0.000000,27.900173,-0.000017,0.000000,1.000000;;, + 2000;16;0.985931,-0.162299,-0.039997,0.000000,0.163398,0.986220,0.025917,0.000000,0.035239,-0.032088,0.998864,0.000000,27.900160,0.000003,-0.000001,1.000000;;, + 2080;16;0.984863,-0.170390,-0.031822,0.000000,0.171175,0.984952,0.023833,0.000000,0.027282,-0.028919,0.999209,0.000000,27.900188,0.000003,0.000000,1.000000;;, + 2160;16;0.983443,-0.179718,-0.023291,0.000000,0.180245,0.983354,0.022937,0.000000,0.018781,-0.026756,0.999466,0.000000,27.900175,0.000010,-0.000000,1.000000;;, + 2240;16;0.981698,-0.189796,-0.015703,0.000000,0.190118,0.981504,0.022470,0.000000,0.011148,-0.025044,0.999624,0.000000,27.900187,0.000002,-0.000001,1.000000;;, + 2320;16;0.979787,-0.199760,-0.010657,0.000000,0.199947,0.979580,0.021069,0.000000,0.006231,-0.022774,0.999721,0.000000,27.900188,-0.000012,0.000001,1.000000;;, + 2400;16;0.977670,-0.209981,-0.008269,0.000000,0.210108,0.977475,0.019939,0.000000,0.003896,-0.021231,0.999767,0.000000,27.900152,0.000001,-0.000000,1.000000;;, + 2480;16;0.975316,-0.220598,-0.009744,0.000000,0.220752,0.975133,0.019579,0.000000,0.005183,-0.021247,0.999761,0.000000,27.900166,-0.000005,0.000000,1.000000;;, + 2560;16;0.972729,-0.231551,-0.013496,0.000000,0.231795,0.972544,0.020746,0.000000,0.008321,-0.023308,0.999694,0.000000,27.900156,0.000010,-0.000000,1.000000;;, + 2640;16;0.969809,-0.243150,-0.018652,0.000000,0.243566,0.969568,0.024771,0.000000,0.012061,-0.028566,0.999519,0.000000,27.900169,-0.000002,0.000000,1.000000;;, + 2720;16;0.966884,-0.254043,-0.024428,0.000000,0.254722,0.966532,0.030538,0.000000,0.015852,-0.035749,0.999235,0.000000,27.900152,-0.000005,0.000001,1.000000;;, + 2800;16;0.964304,-0.263100,-0.029933,0.000000,0.264120,0.963753,0.037692,0.000000,0.018932,-0.044252,0.998841,0.000000,27.900171,-0.000013,0.000001,1.000000;;, + 2880;16;0.962281,-0.269829,-0.034751,0.000000,0.271235,0.961439,0.045462,0.000000,0.021144,-0.053173,0.998361,0.000000,27.900160,0.000003,0.000000,1.000000;;, + 2960;16;0.961211,-0.273166,-0.038119,0.000000,0.274934,0.959976,0.053444,0.000000,0.021994,-0.061851,0.997843,0.000000,27.900177,0.000008,-0.000000,1.000000;;, + 3040;16;0.960963,-0.273772,-0.039975,0.000000,0.275810,0.959323,0.060235,0.000000,0.021858,-0.068909,0.997383,0.000000,27.900162,-0.000004,0.000000,1.000000;;, + 3120;16;0.961544,-0.271764,-0.039720,0.000000,0.273867,0.959642,0.063915,0.000000,0.020747,-0.072335,0.997165,0.000000,27.900173,-0.000012,0.000000,1.000000;;, + 3200;16;0.962726,-0.267803,-0.037950,0.000000,0.269818,0.960676,0.065568,0.000000,0.018898,-0.073363,0.997126,0.000000,27.900158,-0.000005,0.000000,1.000000;;, + 3280;16;0.964310,-0.262468,-0.034891,0.000000,0.264264,0.962246,0.065163,0.000000,0.016470,-0.072058,0.997264,0.000000,27.900173,-0.000016,-0.000000,1.000000;;, + 3360;16;0.966149,-0.256110,-0.031048,0.000000,0.257631,0.964118,0.064053,0.000000,0.013529,-0.069883,0.997463,0.000000,27.900162,-0.000006,0.000000,1.000000;;, + 3440;16;0.968062,-0.249274,-0.026813,0.000000,0.250507,0.966045,0.063278,0.000000,0.010129,-0.067974,0.997636,0.000000,27.900162,-0.000003,-0.000000,1.000000;;, + 3520;16;0.970018,-0.241960,-0.022798,0.000000,0.242941,0.967945,0.063730,0.000000,0.006647,-0.067358,0.997707,0.000000,27.900169,-0.000007,0.000000,1.000000;;, + 3600;16;0.971815,-0.234939,-0.019495,0.000000,0.235725,0.969518,0.066851,0.000000,0.003195,-0.069562,0.997573,0.000000,27.900171,0.000011,0.000000,1.000000;;, + 3680;16;0.973899,-0.226296,-0.017646,0.000000,0.226981,0.971228,0.072079,0.000000,0.000827,-0.074203,0.997243,0.000000,27.900162,-0.000001,-0.000000,1.000000;;, + 3760;16;0.976723,-0.213722,-0.018324,0.000000,0.214504,0.973451,0.079882,0.000000,0.000765,-0.081953,0.996636,0.000000,27.900162,-0.000009,0.000000,1.000000;;, + 3840;16;0.979840,-0.198735,-0.020458,0.000000,0.199771,0.975824,0.088652,0.000000,0.002345,-0.090952,0.995853,0.000000,27.900175,-0.000003,-0.000000,1.000000;;, + 3920;16;0.983210,-0.180917,-0.023818,0.000000,0.182388,0.978428,0.097019,0.000000,0.005752,-0.099734,0.994998,0.000000,27.900173,-0.000014,-0.000000,1.000000;;, + 4000;16;0.986085,-0.163976,-0.027349,0.000000,0.165961,0.980553,0.104746,0.000000,0.009641,-0.107828,0.994123,0.000000,27.900162,0.000001,0.000000,1.000000;;, + 4080;16;0.987968,-0.151660,-0.030298,0.000000,0.154119,0.981778,0.111169,0.000000,0.012886,-0.114501,0.993340,0.000000,27.900160,0.000008,0.000000,1.000000;;, + 4160;16;0.989028,-0.143993,-0.032998,0.000000,0.146890,0.982308,0.116169,0.000000,0.015686,-0.119741,0.992681,0.000000,27.900154,-0.000039,-0.000003,1.000000;;, + 4240;16;0.989065,-0.143150,-0.035464,0.000000,0.146405,0.982010,0.119259,0.000000,0.017754,-0.123147,0.992230,0.000000,27.900167,-0.000010,-0.000001,1.000000;;, + 4320;16;0.988482,-0.146415,-0.038289,0.000000,0.150030,0.981253,0.120965,0.000000,0.019860,-0.125316,0.991918,0.000000,27.900164,0.000004,0.000000,1.000000;;, + 4400;16;0.987508,-0.151910,-0.041857,0.000000,0.155947,0.980259,0.121543,0.000000,0.022567,-0.126552,0.991703,0.000000,27.900160,-0.000023,-0.000002,1.000000;;, + 4480;16;0.986183,-0.159134,-0.046045,0.000000,0.163642,0.979044,0.121219,0.000000,0.025790,-0.127079,0.991557,0.000000,27.900187,-0.000000,0.000001,1.000000;;, + 4560;16;0.984606,-0.167248,-0.050779,0.000000,0.172273,0.977686,0.120217,0.000000,0.029539,-0.127114,0.991448,0.000000,27.900185,-0.000018,-0.000002,1.000000;;, + 4640;16;0.982904,-0.175418,-0.055927,0.000000,0.180995,0.976288,0.118754,0.000000,0.033769,-0.126846,0.991347,0.000000,27.900181,0.000027,0.000003,1.000000;;, + 4720;16;0.981339,-0.182286,-0.061210,0.000000,0.188427,0.975080,0.117110,0.000000,0.038337,-0.126458,0.991231,0.000000,27.900169,-0.000003,-0.000001,1.000000;;, + 4800;16;0.979775,-0.188667,-0.066683,0.000000,0.195389,0.973921,0.115333,0.000000,0.043184,-0.126029,0.991086,0.000000,27.900173,0.000003,0.000000,1.000000;;, + 4960;16;0.975145,-0.214584,-0.055187,0.000000,0.220005,0.967277,0.126384,0.000000,0.026261,-0.135385,0.990445,0.000000,27.900181,-0.000002,0.000000,1.000000;;; + } + { Bip01_Head } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615768,-0.000004,0.000001,1.000000;;, + 80;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615772,0.000003,0.000001,1.000000;;, + 160;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615749,-0.000000,0.000001,1.000000;;, + 240;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615746,-0.000004,0.000000,1.000000;;, + 320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615734,-0.000004,-0.000001,1.000000;;, + 400;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,0.000001,0.000001,1.000000;;, + 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615765,0.000003,0.000002,1.000000;;, + 560;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615765,-0.000004,0.000002,1.000000;;, + 640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615761,-0.000003,0.000001,1.000000;;, + 720;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615761,-0.000005,0.000000,1.000000;;, + 800;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615761,-0.000002,-0.000000,1.000000;;, + 880;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615749,0.000004,-0.000002,1.000000;;, + 960;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615753,0.000005,-0.000000,1.000000;;, + 1040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615768,-0.000001,0.000003,1.000000;;, + 1120;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615734,0.000003,-0.000002,1.000000;;, + 1200;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,-0.000001,0.000001,1.000000;;, + 1280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615742,-0.000006,-0.000001,1.000000;;, + 1360;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615749,0.000003,-0.000001,1.000000;;, + 1440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615768,0.000004,0.000002,1.000000;;, + 1520;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615742,0.000006,-0.000000,1.000000;;, + 1600;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615749,-0.000011,0.000001,1.000000;;, + 1680;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615746,0.000012,-0.000002,1.000000;;, + 1760;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615753,0.000001,-0.000001,1.000000;;, + 1840;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615742,0.000017,-0.000003,1.000000;;, + 1920;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615761,-0.000011,0.000001,1.000000;;, + 2000;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615753,0.000013,-0.000002,1.000000;;, + 2080;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615734,-0.000007,-0.000001,1.000000;;, + 2160;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,0.000002,-0.000001,1.000000;;, + 2240;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615746,0.000013,-0.000001,1.000000;;, + 2320;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615746,-0.000003,-0.000000,1.000000;;, + 2400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615738,0.000004,-0.000001,1.000000;;, + 2480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615746,0.000004,-0.000000,1.000000;;, + 2560;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615757,-0.000004,0.000000,1.000000;;, + 2640;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615742,-0.000011,0.000001,1.000000;;, + 2720;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615753,-0.000009,0.000001,1.000000;;, + 2800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615761,0.000006,-0.000000,1.000000;;, + 2880;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615753,-0.000010,0.000001,1.000000;;, + 2960;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615761,0.000013,-0.000000,1.000000;;, + 3040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615746,-0.000012,0.000001,1.000000;;, + 3120;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615757,-0.000015,0.000001,1.000000;;, + 3200;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,-0.000011,0.000002,1.000000;;, + 3280;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615738,-0.000002,-0.000000,1.000000;;, + 3360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615738,-0.000005,0.000001,1.000000;;, + 3440;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615761,-0.000002,0.000000,1.000000;;, + 3520;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615772,0.000001,0.000000,1.000000;;, + 3600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615757,-0.000005,0.000000,1.000000;;, + 3680;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615753,-0.000011,0.000001,1.000000;;, + 3760;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615768,-0.000011,0.000001,1.000000;;, + 3840;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615757,0.000005,-0.000000,1.000000;;, + 3920;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,-0.000009,0.000001,1.000000;;, + 4000;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615765,0.000010,-0.000000,1.000000;;, + 4080;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,59.615749,0.000009,0.000000,1.000000;;, + 4160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615776,0.000010,0.000000,1.000000;;, + 4240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,-0.000026,0.000001,1.000000;;, + 4320;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615742,-0.000026,0.000000,1.000000;;, + 4400;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615765,0.000016,0.000000,1.000000;;, + 4480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,59.615753,0.000004,0.000001,1.000000;;, + 4560;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615746,0.000007,-0.000002,1.000000;;, + 4640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615757,-0.000022,0.000001,1.000000;;, + 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615765,0.000010,0.000000,1.000000;;, + 4800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,59.615768,0.000027,0.000002,1.000000;;, + 4960;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,59.615768,-0.000004,0.000001,1.000000;;; + } + { Dummy21 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;-0.167240,0.313773,0.934654,0.000000,-0.498528,-0.844794,0.194403,0.000000,0.850588,-0.433439,0.297708,0.000000,-12.374964,4.006889,8.346216,1.000000;;, + 80;16;-0.169076,0.312790,0.934653,0.000000,-0.498708,-0.845100,0.192605,0.000000,0.850120,-0.433554,0.298877,0.000000,-12.374962,4.006893,8.346217,1.000000;;, + 160;16;-0.170912,0.311807,0.934647,0.000000,-0.498887,-0.845402,0.190807,0.000000,0.849648,-0.433672,0.300046,0.000000,-12.374972,4.006898,8.346217,1.000000;;, + 240;16;-0.172799,0.310943,0.934588,0.000000,-0.499055,-0.845688,0.189093,0.000000,0.849167,-0.433736,0.301312,0.000000,-12.374967,4.006896,8.346217,1.000000;;, + 320;16;-0.174582,0.309843,0.934622,0.000000,-0.499239,-0.845999,0.187208,0.000000,0.848694,-0.433917,0.302382,0.000000,-12.374953,4.006895,8.346217,1.000000;;, + 400;16;-0.176219,0.308312,0.934821,0.000000,-0.499453,-0.846361,0.184988,0.000000,0.848230,-0.434300,0.303132,0.000000,-12.374983,4.006896,8.346216,1.000000;;, + 480;16;-0.177428,0.305993,0.935354,0.000000,-0.499714,-0.846804,0.182233,0.000000,0.847824,-0.435076,0.303156,0.000000,-12.374947,4.006888,8.346217,1.000000;;, + 560;16;-0.177768,0.302247,0.936507,0.000000,-0.500056,-0.847384,0.178562,0.000000,0.847551,-0.436563,0.301778,0.000000,-12.374949,4.006895,8.346218,1.000000;;, + 640;16;-0.177685,0.297702,0.937977,0.000000,-0.500440,-0.848033,0.174354,0.000000,0.847342,-0.438421,0.299665,0.000000,-12.374961,4.006884,8.346216,1.000000;;, + 720;16;-0.177231,0.292471,0.939707,0.000000,-0.500853,-0.848734,0.169695,0.000000,0.847193,-0.440580,0.296907,0.000000,-12.374961,4.006879,8.346214,1.000000;;, + 800;16;-0.177138,0.287473,0.941266,0.000000,-0.501251,-0.849408,0.165087,0.000000,0.846977,-0.442567,0.294558,0.000000,-12.374962,4.006883,8.346215,1.000000;;, + 880;16;-0.178220,0.283768,0.942186,0.000000,-0.501584,-0.849973,0.161118,0.000000,0.846552,-0.443871,0.293815,0.000000,-12.374976,4.006899,8.346215,1.000000;;, + 960;16;-0.180269,0.281098,0.942596,0.000000,-0.501870,-0.850457,0.157639,0.000000,0.845949,-0.444643,0.294385,0.000000,-12.374944,4.006894,8.346219,1.000000;;, + 1040;16;-0.183495,0.279724,0.942382,0.000000,-0.502099,-0.850845,0.154788,0.000000,0.845119,-0.444766,0.296575,0.000000,-12.374985,4.006907,8.346216,1.000000;;, + 1120;16;-0.187458,0.279129,0.941779,0.000000,-0.502296,-0.851179,0.152296,0.000000,0.844132,-0.444502,0.299765,0.000000,-12.374974,4.006891,8.346215,1.000000;;, + 1200;16;-0.191709,0.278753,0.941034,0.000000,-0.502485,-0.851499,0.149864,0.000000,0.843064,-0.444125,0.303308,0.000000,-12.374945,4.006901,8.346218,1.000000;;, + 1280;16;-0.196491,0.278971,0.939982,0.000000,-0.502648,-0.851776,0.147721,0.000000,0.841865,-0.443455,0.307590,0.000000,-12.374948,4.006887,8.346218,1.000000;;, + 1360;16;-0.201873,0.279924,0.938557,0.000000,-0.502781,-0.852001,0.145966,0.000000,0.840511,-0.442422,0.312736,0.000000,-12.374995,4.006908,8.346215,1.000000;;, + 1440;16;-0.207923,0.281749,0.936689,0.000000,-0.502876,-0.852161,0.144697,0.000000,0.838978,-0.440952,0.318869,0.000000,-12.374962,4.006903,8.346218,1.000000;;, + 1520;16;-0.214508,0.284228,0.934452,0.000000,-0.502944,-0.852276,0.143780,0.000000,0.837278,-0.439135,0.325771,0.000000,-12.374935,4.006886,8.346218,1.000000;;, + 1600;16;-0.222300,0.288549,0.931301,0.000000,-0.502927,-0.852248,0.144009,0.000000,0.835253,-0.436363,0.334574,0.000000,-12.374966,4.006901,8.346218,1.000000;;, + 1680;16;-0.232111,0.296207,0.926491,0.000000,-0.502747,-0.851943,0.146421,0.000000,0.832689,-0.431804,0.346662,0.000000,-12.374960,4.006915,8.346217,1.000000;;, + 1760;16;-0.243355,0.305918,0.920431,0.000000,-0.502463,-0.851462,0.150147,0.000000,0.829644,-0.425943,0.360920,0.000000,-12.374978,4.006920,8.346216,1.000000;;, + 1840;16;-0.256168,0.317769,0.912908,0.000000,-0.502061,-0.850781,0.155262,0.000000,0.826022,-0.418562,0.377483,0.000000,-12.374993,4.006886,8.346215,1.000000;;, + 1920;16;-0.269189,0.329157,0.905093,0.000000,-0.501680,-0.850135,0.159963,0.000000,0.822104,-0.411007,0.393978,0.000000,-12.374964,4.006881,8.346217,1.000000;;, + 2000;16;-0.281039,0.337658,0.898334,0.000000,-0.501467,-0.849774,0.162525,0.000000,0.818259,-0.404809,0.408144,0.000000,-12.374958,4.006900,8.346216,1.000000;;, + 2080;16;-0.291958,0.343326,0.892686,0.000000,-0.501443,-0.849734,0.162807,0.000000,0.814442,-0.400099,0.420245,0.000000,-12.374943,4.006909,8.346217,1.000000;;, + 2160;16;-0.301518,0.344840,0.888916,0.000000,-0.501707,-0.850181,0.159636,0.000000,0.810788,-0.397842,0.429353,0.000000,-12.374960,4.006894,8.346217,1.000000;;, + 2240;16;-0.310373,0.343935,0.886215,0.000000,-0.502132,-0.850901,0.154371,0.000000,0.807175,-0.397084,0.436797,0.000000,-12.374965,4.006871,8.346217,1.000000;;, + 2320;16;-0.319163,0.341745,0.883937,0.000000,-0.502641,-0.851764,0.147817,0.000000,0.803422,-0.397125,0.443627,0.000000,-12.374967,4.006865,8.346219,1.000000;;, + 2400;16;-0.327476,0.338564,0.882119,0.000000,-0.503185,-0.852686,0.140466,0.000000,0.799727,-0.397870,0.449595,0.000000,-12.374972,4.006896,8.346217,1.000000;;, + 2480;16;-0.335163,0.334888,0.880634,0.000000,-0.503717,-0.853586,0.132891,0.000000,0.796201,-0.399050,0.454779,0.000000,-12.374965,4.006886,8.346217,1.000000;;, + 2560;16;-0.342076,0.331206,0.879367,0.000000,-0.504195,-0.854397,0.125668,0.000000,0.792951,-0.400385,0.459261,0.000000,-12.374938,4.006904,8.346217,1.000000;;, + 2640;16;-0.348158,0.328208,0.878103,0.000000,-0.504580,-0.855050,0.119531,0.000000,0.790054,-0.401458,0.463300,0.000000,-12.374950,4.006896,8.346217,1.000000;;, + 2720;16;-0.352986,0.325774,0.877082,0.000000,-0.504877,-0.855552,0.114587,0.000000,0.787719,-0.402370,0.466474,0.000000,-12.374984,4.006876,8.346219,1.000000;;, + 2800;16;-0.356024,0.324125,0.876464,0.000000,-0.505064,-0.855869,0.111349,0.000000,0.786230,-0.403027,0.468414,0.000000,-12.374964,4.006858,8.346218,1.000000;;, + 2880;16;-0.357567,0.322919,0.876281,0.000000,-0.505178,-0.856062,0.109330,0.000000,0.785456,-0.403585,0.469232,0.000000,-12.374959,4.006901,8.346216,1.000000;;, + 2960;16;-0.357503,0.321827,0.876709,0.000000,-0.505237,-0.856163,0.108260,0.000000,0.785447,-0.404243,0.468680,0.000000,-12.374958,4.006893,8.346217,1.000000;;, + 3040;16;-0.356492,0.321048,0.877406,0.000000,-0.505252,-0.856187,0.107999,0.000000,0.785897,-0.404810,0.467434,0.000000,-12.374981,4.006920,8.346217,1.000000;;, + 3120;16;-0.355094,0.320544,0.878157,0.000000,-0.505240,-0.856167,0.108218,0.000000,0.786538,-0.405252,0.465971,0.000000,-12.374980,4.006894,8.346217,1.000000;;, + 3200;16;-0.353494,0.320707,0.878743,0.000000,-0.505184,-0.856073,0.109212,0.000000,0.787293,-0.405321,0.464633,0.000000,-12.374977,4.006891,8.346217,1.000000;;, + 3280;16;-0.352255,0.322102,0.878730,0.000000,-0.505069,-0.855878,0.111259,0.000000,0.787922,-0.404628,0.464171,0.000000,-12.374953,4.006900,8.346217,1.000000;;, + 3360;16;-0.350816,0.324162,0.878548,0.000000,-0.504906,-0.855602,0.114080,0.000000,0.788668,-0.403563,0.463831,0.000000,-12.374961,4.006896,8.346217,1.000000;;, + 3440;16;-0.348943,0.326855,0.878296,0.000000,-0.504688,-0.855232,0.117761,0.000000,0.789638,-0.402174,0.463387,0.000000,-12.374968,4.006890,8.346216,1.000000;;, + 3520;16;-0.346211,0.329156,0.878518,0.000000,-0.504460,-0.854846,0.121487,0.000000,0.790985,-0.401117,0.462004,0.000000,-12.374979,4.006877,8.346216,1.000000;;, + 3600;16;-0.342083,0.330111,0.879776,0.000000,-0.504266,-0.854518,0.124560,0.000000,0.792903,-0.401031,0.458780,0.000000,-12.374969,4.006895,8.346217,1.000000;;, + 3680;16;-0.336630,0.329495,0.882107,0.000000,-0.504127,-0.854282,0.126716,0.000000,0.795321,-0.402038,0.453685,0.000000,-12.374988,4.006921,8.346217,1.000000;;, + 3760;16;-0.329591,0.326439,0.885894,0.000000,-0.504094,-0.854226,0.127225,0.000000,0.798285,-0.404641,0.446101,0.000000,-12.374954,4.006886,8.346217,1.000000;;, + 3840;16;-0.321421,0.321840,0.890566,0.000000,-0.504123,-0.854276,0.126779,0.000000,0.801591,-0.408206,0.436829,0.000000,-12.374970,4.006894,8.346216,1.000000;;, + 3920;16;-0.312468,0.316118,0.895786,0.000000,-0.504197,-0.854400,0.125640,0.000000,0.805077,-0.412394,0.426359,0.000000,-12.374981,4.006866,8.346216,1.000000;;, + 4000;16;-0.302820,0.309854,0.901272,0.000000,-0.504279,-0.854540,0.124354,0.000000,0.808704,-0.416836,0.415025,0.000000,-12.374947,4.006918,8.346219,1.000000;;, + 4080;16;-0.292633,0.303606,0.906747,0.000000,-0.504340,-0.854643,0.123395,0.000000,0.812408,-0.421199,0.403217,0.000000,-12.374985,4.006909,8.346217,1.000000;;, + 4160;16;-0.282062,0.297951,0.911957,0.000000,-0.504350,-0.854660,0.123239,0.000000,0.816132,-0.425185,0.391339,0.000000,-12.374960,4.006845,8.346213,1.000000;;, + 4240;16;-0.271405,0.293515,0.916618,0.000000,-0.504281,-0.854543,0.124323,0.000000,0.819780,-0.428491,0.379941,0.000000,-12.374996,4.006858,8.346213,1.000000;;, + 4320;16;-0.260410,0.290803,0.920663,0.000000,-0.504094,-0.854225,0.127235,0.000000,0.823454,-0.430967,0.369041,0.000000,-12.374979,4.006874,8.346215,1.000000;;, + 4400;16;-0.248931,0.290808,0.923831,0.000000,-0.503712,-0.853578,0.132965,0.000000,0.827229,-0.432245,0.358965,0.000000,-12.374986,4.006876,8.346214,1.000000;;, + 4480;16;-0.236945,0.292723,0.926375,0.000000,-0.503166,-0.852654,0.140730,0.000000,0.831072,-0.432775,0.349321,0.000000,-12.374962,4.006917,8.346219,1.000000;;, + 4560;16;-0.224244,0.296375,0.928373,0.000000,-0.502439,-0.851422,0.150448,0.000000,0.835027,-0.432714,0.339837,0.000000,-12.374972,4.006852,8.346212,1.000000;;, + 4640;16;-0.211239,0.300811,0.929995,0.000000,-0.501594,-0.849990,0.161001,0.000000,0.838917,-0.432470,0.330436,0.000000,-12.374963,4.006896,8.346216,1.000000;;, + 4720;16;-0.198319,0.304878,0.931514,0.000000,-0.500729,-0.848523,0.171111,0.000000,0.842580,-0.432502,0.320939,0.000000,-12.374978,4.006879,8.346214,1.000000;;, + 4800;16;-0.185356,0.308957,0.932839,0.000000,-0.499811,-0.846968,0.181203,0.000000,0.846069,-0.432656,0.311411,0.000000,-12.374969,4.006883,8.346215,1.000000;;, + 4960;16;-0.167240,0.313773,0.934654,0.000000,-0.498528,-0.844794,0.194403,0.000000,0.850588,-0.433439,0.297708,0.000000,-12.374964,4.006889,8.346216,1.000000;;; + } + { Bip01_L_Clavicle } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.664909,0.057512,-0.744707,0.000000,0.080413,0.985725,0.147922,0.000000,0.742583,-0.158239,0.650792,0.000000,31.000193,-0.000001,0.000006,1.000000;;, + 80;16;0.677111,0.041649,-0.734701,0.000000,0.081682,0.987974,0.131286,0.000000,0.731333,-0.148907,0.665566,0.000000,31.000191,0.000002,0.000005,1.000000;;, + 160;16;0.689314,0.026352,-0.723983,0.000000,0.082675,0.989948,0.114749,0.000000,0.719730,-0.138954,0.680207,0.000000,31.000195,0.000001,0.000001,1.000000;;, + 240;16;0.702174,0.010462,-0.711928,0.000000,0.083083,0.991857,0.096521,0.000000,0.707141,-0.126924,0.695587,0.000000,31.000191,-0.000000,0.000016,1.000000;;, + 320;16;0.713950,-0.001421,-0.700196,0.000000,0.081960,0.993293,0.081554,0.000000,0.695384,-0.115614,0.709278,0.000000,31.000196,0.000010,-0.000026,1.000000;;, + 400;16;0.723141,-0.005627,-0.690678,0.000000,0.077624,0.994294,0.073172,0.000000,0.686325,-0.106527,0.719451,0.000000,31.000187,0.000001,0.000011,1.000000;;, + 480;16;0.729524,-0.001482,-0.683953,0.000000,0.071224,0.994725,0.073815,0.000000,0.680236,-0.102564,0.725782,0.000000,31.000193,-0.000003,0.000008,1.000000;;, + 560;16;0.732128,0.014851,-0.681005,0.000000,0.062323,0.994108,0.088680,0.000000,0.678310,-0.107367,0.726889,0.000000,31.000196,0.000011,-0.000018,1.000000;;, + 640;16;0.731502,0.037430,-0.680811,0.000000,0.054480,0.992091,0.113081,0.000000,0.679660,-0.119809,0.723677,0.000000,31.000193,-0.000002,0.000005,1.000000;;, + 720;16;0.728315,0.062572,-0.682379,0.000000,0.051888,0.987927,0.145971,0.000000,0.683275,-0.141720,0.716276,0.000000,31.000193,0.000001,0.000005,1.000000;;, + 800;16;0.722962,0.087923,-0.685270,0.000000,0.052813,0.981934,0.181705,0.000000,0.688866,-0.167557,0.705258,0.000000,31.000189,-0.000001,0.000021,1.000000;;, + 880;16;0.715919,0.109442,-0.689552,0.000000,0.057335,0.975086,0.214288,0.000000,0.695825,-0.192948,0.691808,0.000000,31.000189,0.000005,0.000020,1.000000;;, + 960;16;0.706804,0.129493,-0.695457,0.000000,0.063230,0.967604,0.244428,0.000000,0.704578,-0.216736,0.675718,0.000000,31.000193,0.000002,0.000012,1.000000;;, + 1040;16;0.694685,0.148445,-0.703830,0.000000,0.068273,0.960450,0.269954,0.000000,0.716067,-0.235586,0.657075,0.000000,31.000195,0.000005,-0.000002,1.000000;;, + 1120;16;0.680198,0.168418,-0.713419,0.000000,0.072459,0.953034,0.294070,0.000000,0.729439,-0.251719,0.636048,0.000000,31.000187,-0.000002,0.000021,1.000000;;, + 1200;16;0.663318,0.191979,-0.723293,0.000000,0.074914,0.944643,0.319432,0.000000,0.744578,-0.266070,0.612217,0.000000,31.000187,-0.000003,0.000004,1.000000;;, + 1280;16;0.645464,0.217336,-0.732217,0.000000,0.076240,0.935541,0.344893,0.000000,0.759976,-0.278440,0.587288,0.000000,31.000193,0.000000,-0.000009,1.000000;;, + 1360;16;0.627810,0.243434,-0.739320,0.000000,0.076846,0.925810,0.370095,0.000000,0.774564,-0.289163,0.562526,0.000000,31.000193,0.000000,0.000008,1.000000;;, + 1440;16;0.611526,0.269949,-0.743749,0.000000,0.076045,0.915594,0.394848,0.000000,0.787561,-0.298018,0.539382,0.000000,31.000185,-0.000008,0.000026,1.000000;;, + 1520;16;0.597625,0.296327,-0.745007,0.000000,0.074495,0.904654,0.419585,0.000000,0.798308,-0.306254,0.518569,0.000000,31.000196,0.000006,-0.000025,1.000000;;, + 1600;16;0.587804,0.321452,-0.742398,0.000000,0.068325,0.894666,0.441480,0.000000,0.806113,-0.310228,0.503925,0.000000,31.000189,-0.000004,0.000016,1.000000;;, + 1680;16;0.584715,0.343311,-0.735014,0.000000,0.052924,0.887966,0.456854,0.000000,0.809510,-0.306029,0.501038,0.000000,31.000196,-0.000028,-0.000003,1.000000;;, + 1760;16;0.585148,0.363285,-0.725001,0.000000,0.031238,0.883279,0.467807,0.000000,0.810325,-0.296384,0.505500,0.000000,31.000181,0.000007,0.000018,1.000000;;, + 1840;16;0.588209,0.381503,-0.713067,0.000000,0.002441,0.880894,0.473307,0.000000,0.808705,-0.280144,0.517219,0.000000,31.000193,-0.000018,-0.000001,1.000000;;, + 1920;16;0.590003,0.400505,-0.701065,0.000000,-0.026187,0.877334,0.479165,0.000000,0.806976,-0.264350,0.528118,0.000000,31.000183,-0.000005,0.000027,1.000000;;, + 2000;16;0.587083,0.422733,-0.690384,0.000000,-0.047649,0.869391,0.491823,0.000000,0.808123,-0.255845,0.530547,0.000000,31.000193,-0.000008,-0.000004,1.000000;;, + 2080;16;0.579066,0.449439,-0.680211,0.000000,-0.063170,0.856553,0.512178,0.000000,0.812830,-0.253616,0.524392,0.000000,31.000183,0.000023,-0.000003,1.000000;;, + 2160;16;0.563376,0.483771,-0.669756,0.000000,-0.069973,0.835672,0.544754,0.000000,0.823232,-0.260037,0.504648,0.000000,31.000200,-0.000022,-0.000008,1.000000;;, + 2240;16;0.543670,0.522500,-0.656823,0.000000,-0.072204,0.808801,0.583633,0.000000,0.836188,-0.269879,0.477447,0.000000,31.000198,-0.000025,0.000000,1.000000;;, + 2320;16;0.521856,0.563842,-0.640116,0.000000,-0.073318,0.777270,0.624881,0.000000,0.849877,-0.279166,0.446963,0.000000,31.000193,-0.000015,0.000014,1.000000;;, + 2400;16;0.499484,0.605335,-0.619746,0.000000,-0.072819,0.742180,0.666233,0.000000,0.863257,-0.287644,0.414787,0.000000,31.000189,0.000003,0.000012,1.000000;;, + 2480;16;0.478320,0.644525,-0.596487,0.000000,-0.071235,0.705465,0.705156,0.000000,0.875291,-0.294800,0.383350,0.000000,31.000181,0.000003,0.000021,1.000000;;, + 2560;16;0.459026,0.679997,-0.571751,0.000000,-0.069582,0.669098,0.739910,0.000000,0.885694,-0.299854,0.354448,0.000000,31.000212,0.000034,-0.000040,1.000000;;, + 2640;16;0.442866,0.709881,-0.547666,0.000000,-0.069152,0.636059,0.768536,0.000000,0.893917,-0.302486,0.330778,0.000000,31.000189,-0.000007,0.000017,1.000000;;, + 2720;16;0.428936,0.734383,-0.526020,0.000000,-0.069562,0.607432,0.791320,0.000000,0.900653,-0.302835,0.311634,0.000000,31.000189,0.000005,0.000005,1.000000;;, + 2800;16;0.416887,0.752856,-0.509327,0.000000,-0.071094,0.585631,0.807454,0.000000,0.906174,-0.300407,0.297666,0.000000,31.000204,-0.000028,-0.000015,1.000000;;, + 2880;16;0.406468,0.766636,-0.497045,0.000000,-0.072570,0.569383,0.818863,0.000000,0.910778,-0.296771,0.287071,0.000000,31.000191,-0.000002,-0.000002,1.000000;;, + 2960;16;0.396778,0.776797,-0.489034,0.000000,-0.073182,0.557841,0.826715,0.000000,0.914993,-0.292234,0.278186,0.000000,31.000198,-0.000004,-0.000009,1.000000;;, + 3040;16;0.389879,0.782941,-0.484766,0.000000,-0.072425,0.550864,0.831447,0.000000,0.918013,-0.289055,0.271475,0.000000,31.000196,0.000005,-0.000003,1.000000;;, + 3120;16;0.386919,0.785140,-0.483579,0.000000,-0.070232,0.547994,0.833529,0.000000,0.919435,-0.288546,0.267171,0.000000,31.000185,-0.000009,0.000011,1.000000;;, + 3200;16;0.389946,0.782789,-0.484958,0.000000,-0.064925,0.548710,0.833488,0.000000,0.918546,-0.293529,0.264790,0.000000,31.000206,-0.000013,-0.000020,1.000000;;, + 3280;16;0.402191,0.774994,-0.487470,0.000000,-0.054233,0.551662,0.832302,0.000000,0.913948,-0.308307,0.263904,0.000000,31.000189,0.000005,0.000007,1.000000;;, + 3360;16;0.420928,0.761746,-0.492507,0.000000,-0.039832,0.557948,0.828919,0.000000,0.906219,-0.329298,0.265198,0.000000,31.000189,0.000015,-0.000002,1.000000;;, + 3440;16;0.445819,0.742217,-0.500359,0.000000,-0.021552,0.567721,0.822939,0.000000,0.894864,-0.356098,0.269097,0.000000,31.000196,0.000023,-0.000005,1.000000;;, + 3520;16;0.472632,0.717311,-0.511941,0.000000,-0.002587,0.582046,0.813152,0.000000,0.881256,-0.382997,0.276949,0.000000,31.000185,-0.000018,0.000017,1.000000;;, + 3600;16;0.496984,0.688296,-0.528447,0.000000,0.014031,0.602525,0.797977,0.000000,0.867647,-0.403996,0.289788,0.000000,31.000195,-0.000006,-0.000004,1.000000;;, + 3680;16;0.520074,0.654703,-0.548532,0.000000,0.028011,0.628799,0.777063,0.000000,0.853662,-0.419495,0.308683,0.000000,31.000191,-0.000003,0.000003,1.000000;;, + 3760;16;0.541262,0.616501,-0.571806,0.000000,0.037364,0.661724,0.748816,0.000000,0.840023,-0.426671,0.335131,0.000000,31.000200,0.000007,-0.000021,1.000000;;, + 3840;16;0.562143,0.573838,-0.595571,0.000000,0.044106,0.698299,0.714447,0.000000,0.825863,-0.427889,0.367234,0.000000,31.000187,0.000019,-0.000002,1.000000;;, + 3920;16;0.584661,0.526231,-0.617456,0.000000,0.049698,0.736430,0.674686,0.000000,0.809754,-0.425150,0.404409,0.000000,31.000195,-0.000013,-0.000008,1.000000;;, + 4000;16;0.606639,0.476141,-0.636615,0.000000,0.054257,0.774131,0.630696,0.000000,0.793123,-0.417146,0.443784,0.000000,31.000189,0.000008,0.000006,1.000000;;, + 4080;16;0.627035,0.425517,-0.652505,0.000000,0.058091,0.809754,0.583887,0.000000,0.776822,-0.404022,0.483025,0.000000,31.000181,0.000033,0.000008,1.000000;;, + 4160;16;0.644915,0.376375,-0.665152,0.000000,0.061391,0.842003,0.535968,0.000000,0.761785,-0.386488,0.519914,0.000000,31.000193,-0.000002,-0.000007,1.000000;;, + 4240;16;0.659629,0.330881,-0.674838,0.000000,0.064313,0.869738,0.489306,0.000000,0.748834,-0.366161,0.552425,0.000000,31.000200,-0.000042,0.000002,1.000000;;, + 4320;16;0.669552,0.290112,-0.683765,0.000000,0.066772,0.893331,0.444411,0.000000,0.739758,-0.343213,0.578760,0.000000,31.000198,-0.000003,-0.000010,1.000000;;, + 4400;16;0.672038,0.256090,-0.694826,0.000000,0.068657,0.912709,0.402799,0.000000,0.737327,-0.318401,0.595793,0.000000,31.000187,0.000020,-0.000002,1.000000;;, + 4480;16;0.669411,0.226177,-0.707625,0.000000,0.069649,0.929224,0.362894,0.000000,0.739620,-0.292210,0.606279,0.000000,31.000185,0.000020,0.000001,1.000000;;, + 4560;16;0.661728,0.199092,-0.722826,0.000000,0.069524,0.943650,0.323562,0.000000,0.746513,-0.264363,0.610598,0.000000,31.000185,-0.000004,0.000019,1.000000;;, + 4640;16;0.652519,0.172744,-0.737820,0.000000,0.068460,0.956250,0.284429,0.000000,0.754673,-0.236107,0.612145,0.000000,31.000183,0.000022,0.000005,1.000000;;, + 4720;16;0.645864,0.145154,-0.749526,0.000000,0.067051,0.967181,0.245083,0.000000,0.760502,-0.208547,0.614935,0.000000,31.000189,0.000000,0.000008,1.000000;;, + 4800;16;0.640423,0.117307,-0.759011,0.000000,0.064965,0.976451,0.205728,0.000000,0.765270,-0.181062,0.617720,0.000000,31.000208,-0.000032,-0.000004,1.000000;;, + 4960;16;0.664909,0.057512,-0.744707,0.000000,0.080413,0.985725,0.147922,0.000000,0.742583,-0.158239,0.650792,0.000000,31.000193,-0.000001,0.000006,1.000000;;; + } + { Bip01_L_UpperArm } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.427260,-0.904129,0.000000,0.000000,0.904129,0.427260,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,-0.000002,0.000005,1.000000;;, + 80;16;0.388523,-0.921439,0.000000,0.000000,0.921439,0.388523,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202538,0.000007,-0.000007,1.000000;;, + 160;16;0.349087,-0.937091,0.000000,0.000000,0.937091,0.349087,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202530,0.000009,-0.000001,1.000000;;, + 240;16;0.307986,-0.951391,0.000000,0.000000,0.951391,0.307986,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202522,-0.000001,-0.000005,1.000000;;, + 320;16;0.268401,-0.963307,-0.000000,0.000000,0.963307,0.268401,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202538,0.000000,-0.000014,1.000000;;, + 400;16;0.234165,-0.972197,0.000000,0.000000,0.972197,0.234165,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202530,-0.000005,-0.000011,1.000000;;, + 480;16;0.202875,-0.979205,0.000000,0.000000,0.979205,0.202875,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202507,-0.000004,0.000001,1.000000;;, + 560;16;0.172560,-0.984999,0.000000,0.000000,0.984999,0.172560,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,-0.000012,-0.000000,1.000000;;, + 640;16;0.145352,-0.989380,0.000000,0.000000,0.989380,0.145352,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202522,-0.000008,-0.000007,1.000000;;, + 720;16;0.120234,-0.992746,0.000000,0.000000,0.992746,0.120234,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,-0.000005,-0.000001,1.000000;;, + 800;16;0.104677,-0.994506,0.000000,0.000000,0.994506,0.104677,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,-0.000008,0.000005,1.000000;;, + 880;16;0.106122,-0.994353,-0.000000,0.000000,0.994353,0.106122,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202522,0.000001,-0.000005,1.000000;;, + 960;16;0.123628,-0.992329,-0.000000,0.000000,0.992329,0.123628,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202530,-0.000003,0.000001,1.000000;;, + 1040;16;0.160645,-0.987012,-0.000000,0.000000,0.987012,0.160645,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202522,-0.000006,0.000009,1.000000;;, + 1120;16;0.210713,-0.977548,0.000000,0.000000,0.977548,0.210713,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202530,-0.000003,0.000005,1.000000;;, + 1200;16;0.268857,-0.963180,0.000000,0.000000,0.963180,0.268857,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202545,0.000005,0.000001,1.000000;;, + 1280;16;0.333371,-0.942796,0.000000,0.000000,0.942796,0.333371,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202522,0.000000,0.000003,1.000000;;, + 1360;16;0.401621,-0.915806,0.000000,0.000000,0.915806,0.401621,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202507,0.000003,-0.000005,1.000000;;, + 1440;16;0.470980,-0.882144,0.000000,0.000000,0.882144,0.470980,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202522,-0.000001,-0.000012,1.000000;;, + 1520;16;0.536024,-0.844203,0.000000,0.000000,0.844203,0.536024,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202515,-0.000002,-0.000000,1.000000;;, + 1600;16;0.603285,-0.797526,-0.000000,0.000000,0.797526,0.603285,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202530,-0.000008,-0.000010,1.000000;;, + 1680;16;0.677938,-0.735119,0.000000,0.000000,0.735119,0.677938,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202507,0.000019,-0.000015,1.000000;;, + 1760;16;0.751756,-0.659441,-0.000000,0.000000,0.659441,0.751756,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202530,0.000016,-0.000010,1.000000;;, + 1840;16;0.823370,-0.567505,-0.000000,0.000000,0.567505,0.823370,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,0.000029,-0.000014,1.000000;;, + 1920;16;0.879760,-0.475418,-0.000000,0.000000,0.475418,0.879760,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202530,0.000017,-0.000011,1.000000;;, + 2000;16;0.915394,-0.402559,0.000000,0.000000,0.402559,0.915394,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202507,0.000007,-0.000005,1.000000;;, + 2080;16;0.935580,-0.353115,0.000000,0.000000,0.353115,0.935580,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202530,0.000026,-0.000015,1.000000;;, + 2160;16;0.940380,-0.340125,-0.000000,0.000000,0.340125,0.940380,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202553,0.000032,-0.000015,1.000000;;, + 2240;16;0.936602,-0.350395,0.000000,0.000000,0.350395,0.936602,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202538,0.000019,-0.000012,1.000000;;, + 2320;16;0.926964,-0.375151,0.000000,0.000000,0.375151,0.926964,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202522,0.000033,-0.000012,1.000000;;, + 2400;16;0.912356,-0.409397,0.000000,0.000000,0.409397,0.912356,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202545,0.000023,-0.000015,1.000000;;, + 2480;16;0.894412,-0.447245,-0.000000,0.000000,0.447245,0.894412,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202538,0.000017,-0.000011,1.000000;;, + 2560;16;0.875553,-0.483123,-0.000000,0.000000,0.483123,0.875553,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202499,0.000028,-0.000006,1.000000;;, + 2640;16;0.859841,-0.510562,0.000000,0.000000,0.510562,0.859841,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,0.000021,-0.000002,1.000000;;, + 2720;16;0.848746,-0.528800,0.000000,0.000000,0.528800,0.848746,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202507,0.000019,-0.000005,1.000000;;, + 2800;16;0.846138,-0.532964,-0.000000,0.000000,0.532964,0.846138,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202538,0.000033,-0.000008,1.000000;;, + 2880;16;0.848612,-0.529015,-0.000000,0.000000,0.529015,0.848612,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202515,0.000039,-0.000009,1.000000;;, + 2960;16;0.854227,-0.519900,0.000000,0.000000,0.519900,0.854227,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202507,0.000020,-0.000006,1.000000;;, + 3040;16;0.860870,-0.508824,0.000000,0.000000,0.508824,0.860870,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202530,0.000027,-0.000011,1.000000;;, + 3120;16;0.866011,-0.500024,0.000000,0.000000,0.500024,0.866011,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202538,0.000019,-0.000009,1.000000;;, + 3200;16;0.869604,-0.493750,0.000000,0.000000,0.493751,0.869603,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202522,0.000016,-0.000008,1.000000;;, + 3280;16;0.870315,-0.492495,0.000000,0.000000,0.492495,0.870315,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202553,0.000015,-0.000006,1.000000;;, + 3360;16;0.869566,-0.493816,0.000000,0.000000,0.493816,0.869566,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202538,-0.000001,-0.000005,1.000000;;, + 3440;16;0.868279,-0.496077,0.000000,0.000000,0.496076,0.868279,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202530,0.000022,-0.000017,1.000000;;, + 3520;16;0.866450,-0.499264,0.000000,0.000000,0.499264,0.866450,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202545,0.000032,-0.000020,1.000000;;, + 3600;16;0.864007,-0.503480,0.000000,0.000000,0.503480,0.864007,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202522,0.000022,-0.000017,1.000000;;, + 3680;16;0.862093,-0.506750,-0.000000,0.000000,0.506750,0.862093,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202545,0.000024,-0.000015,1.000000;;, + 3760;16;0.862146,-0.506659,-0.000000,0.000000,0.506659,0.862146,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202538,0.000027,-0.000014,1.000000;;, + 3840;16;0.863305,-0.504683,0.000000,0.000000,0.504683,0.863304,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202530,0.000016,-0.000012,1.000000;;, + 3920;16;0.865849,-0.500306,0.000000,0.000000,0.500306,0.865849,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,0.000034,-0.000013,1.000000;;, + 4000;16;0.867722,-0.497049,-0.000000,0.000000,0.497049,0.867722,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202538,0.000038,-0.000021,1.000000;;, + 4080;16;0.867493,-0.497450,-0.000000,0.000000,0.497450,0.867493,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202522,-0.000010,0.000002,1.000000;;, + 4160;16;0.863690,-0.504024,0.000000,0.000000,0.504024,0.863690,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202538,0.000012,-0.000008,1.000000;;, + 4240;16;0.855068,-0.518517,-0.000000,0.000000,0.518517,0.855067,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,0.000002,0.000004,1.000000;;, + 4320;16;0.838383,-0.545081,-0.000000,0.000000,0.545081,0.838383,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202515,0.000005,0.000005,1.000000;;, + 4400;16;0.807911,-0.589304,-0.000000,0.000000,0.589304,0.807911,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202545,-0.000025,0.000009,1.000000;;, + 4480;16;0.764459,-0.644672,-0.000000,0.000000,0.644672,0.764459,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202545,0.000013,-0.000012,1.000000;;, + 4560;16;0.705366,-0.708843,0.000000,0.000000,0.708843,0.705366,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,-0.000013,0.000003,1.000000;;, + 4640;16;0.635360,-0.772216,0.000000,0.000000,0.772216,0.635360,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202515,0.000007,0.000003,1.000000;;, + 4720;16;0.562668,-0.826683,0.000000,0.000000,0.826683,0.562668,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,-0.000007,0.000003,1.000000;;, + 4800;16;0.485335,-0.874328,-0.000000,0.000000,0.874328,0.485335,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202522,-0.000023,0.000014,1.000000;;, + 4960;16;0.427260,-0.904129,0.000000,0.000000,0.904129,0.427260,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,-0.000002,0.000005,1.000000;;; + } + { Bip01_L_Forearm } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.999573,-0.023764,-0.016974,0.000000,-0.017488,-0.021598,-0.999614,0.000000,0.023388,0.999484,-0.022005,0.000000,61.671474,0.000008,-0.000005,1.000000;;, + 80;16;0.999618,-0.021237,-0.017707,0.000000,-0.018209,-0.023697,-0.999553,0.000000,0.020808,0.999494,-0.024075,0.000000,61.671478,-0.000011,0.000011,1.000000;;, + 160;16;0.999655,-0.018710,-0.018445,0.000000,-0.018925,-0.025798,-0.999488,0.000000,0.018225,0.999492,-0.026143,0.000000,61.671490,-0.000017,0.000006,1.000000;;, + 240;16;0.999685,-0.016109,-0.019257,0.000000,-0.019703,-0.028003,-0.999414,0.000000,0.015560,0.999478,-0.028312,0.000000,61.671482,0.000006,-0.000002,1.000000;;, + 320;16;0.999708,-0.013662,-0.019937,0.000000,-0.020340,-0.030005,-0.999343,0.000000,0.013055,0.999456,-0.030274,0.000000,61.671474,0.000001,0.000008,1.000000;;, + 400;16;0.999726,-0.011611,-0.020306,0.000000,-0.020664,-0.031527,-0.999289,0.000000,0.010963,0.999435,-0.031758,0.000000,61.671471,-0.000014,0.000015,1.000000;;, + 480;16;0.999745,-0.009844,-0.020335,0.000000,-0.020646,-0.032575,-0.999256,0.000000,0.009175,0.999421,-0.032770,0.000000,61.671478,0.000013,-0.000008,1.000000;;, + 560;16;0.999767,-0.008317,-0.019892,0.000000,-0.020157,-0.033022,-0.999251,0.000000,0.007654,0.999420,-0.033182,0.000000,61.671467,-0.000009,0.000005,1.000000;;, + 640;16;0.999792,-0.007073,-0.019106,0.000000,-0.019329,-0.032993,-0.999269,0.000000,0.006438,0.999431,-0.033122,0.000000,61.671474,0.000008,-0.000005,1.000000;;, + 720;16;0.999819,-0.006037,-0.018044,0.000000,-0.018232,-0.032591,-0.999303,0.000000,0.005445,0.999451,-0.032695,0.000000,61.671482,0.000002,0.000002,1.000000;;, + 800;16;0.999844,-0.005529,-0.016759,0.000000,-0.016927,-0.031764,-0.999352,0.000000,0.004993,0.999480,-0.031852,0.000000,61.671478,0.000022,-0.000012,1.000000;;, + 880;16;0.999865,-0.005827,-0.015342,0.000000,-0.015513,-0.030516,-0.999414,0.000000,0.005356,0.999517,-0.030602,0.000000,61.671474,-0.000009,0.000006,1.000000;;, + 960;16;0.999881,-0.006978,-0.013745,0.000000,-0.013940,-0.028786,-0.999488,0.000000,0.006579,0.999561,-0.028880,0.000000,61.671440,0.000002,-0.000012,1.000000;;, + 1040;16;0.999886,-0.009231,-0.011941,0.000000,-0.012182,-0.026468,-0.999575,0.000000,0.008911,0.999607,-0.026578,0.000000,61.671455,0.000011,-0.000019,1.000000;;, + 1120;16;0.999875,-0.012249,-0.009967,0.000000,-0.010255,-0.023710,-0.999666,0.000000,0.012009,0.999644,-0.023833,0.000000,61.671463,0.000013,-0.000017,1.000000;;, + 1200;16;0.999844,-0.015858,-0.007800,0.000000,-0.008125,-0.020548,-0.999756,0.000000,0.015694,0.999663,-0.020674,0.000000,61.671467,-0.000010,-0.000003,1.000000;;, + 1280;16;0.999788,-0.019821,-0.005588,0.000000,-0.005930,-0.017209,-0.999834,0.000000,0.019722,0.999655,-0.017323,0.000000,61.671455,-0.000011,0.000003,1.000000;;, + 1360;16;0.999708,-0.023916,-0.003435,0.000000,-0.003768,-0.013871,-0.999897,0.000000,0.023866,0.999618,-0.013957,0.000000,61.671463,-0.000001,0.000006,1.000000;;, + 1440;16;0.999609,-0.027921,-0.001439,0.000000,-0.001739,-0.010711,-0.999941,0.000000,0.027904,0.999553,-0.010756,0.000000,61.671452,0.000016,-0.000007,1.000000;;, + 1520;16;0.999503,-0.031527,0.000322,0.000000,0.000073,-0.007923,-0.999969,0.000000,0.031529,0.999471,-0.007917,0.000000,61.671452,0.000007,-0.000004,1.000000;;, + 1600;16;0.999395,-0.034756,0.001694,0.000000,0.001499,-0.005621,-0.999983,0.000000,0.034765,0.999380,-0.005565,0.000000,61.671459,0.000020,-0.000004,1.000000;;, + 1680;16;0.999294,-0.037481,0.002418,0.000000,0.002268,-0.004058,-0.999989,0.000000,0.037491,0.999289,-0.003970,0.000000,61.671463,0.000009,0.000003,1.000000;;, + 1760;16;0.999203,-0.039831,0.002724,0.000000,0.002606,-0.003006,-0.999992,0.000000,0.039839,0.999202,-0.002899,0.000000,61.671497,0.000015,-0.000007,1.000000;;, + 1840;16;0.999117,-0.041923,0.002635,0.000000,0.002537,-0.002396,-0.999994,0.000000,0.041929,0.999118,-0.002288,0.000000,61.671513,0.000010,0.000000,1.000000;;, + 1920;16;0.999043,-0.043674,0.002502,0.000000,0.002417,-0.002001,-0.999995,0.000000,0.043679,0.999044,-0.001893,0.000000,61.671482,0.000012,0.000002,1.000000;;, + 2000;16;0.998982,-0.045038,0.002676,0.000000,0.002608,-0.001574,-0.999995,0.000000,0.045042,0.998984,-0.001455,0.000000,61.671486,0.000014,-0.000004,1.000000;;, + 2080;16;0.998935,-0.046025,0.003169,0.000000,0.003122,-0.001107,-0.999995,0.000000,0.046028,0.998940,-0.000962,0.000000,61.671474,-0.000015,0.000004,1.000000;;, + 2160;16;0.998905,-0.046596,0.004187,0.000000,0.004170,-0.000469,-0.999991,0.000000,0.046597,0.998914,-0.000274,0.000000,61.671474,-0.000006,0.000004,1.000000;;, + 2240;16;0.998887,-0.046849,0.005496,0.000000,0.005513,0.000217,-0.999985,0.000000,0.046847,0.998902,0.000476,0.000000,61.671474,0.000005,-0.000002,1.000000;;, + 2320;16;0.998878,-0.046845,0.006944,0.000000,0.006992,0.000864,-0.999975,0.000000,0.046838,0.998902,0.001191,0.000000,61.671505,-0.000005,0.000003,1.000000;;, + 2400;16;0.998875,-0.046655,0.008496,0.000000,0.008575,0.001494,-0.999962,0.000000,0.046640,0.998910,0.001893,0.000000,61.671490,-0.000015,0.000006,1.000000;;, + 2480;16;0.998874,-0.046347,0.010088,0.000000,0.010197,0.002102,-0.999946,0.000000,0.046324,0.998923,0.002572,0.000000,61.671482,0.000009,-0.000002,1.000000;;, + 2560;16;0.998874,-0.045992,0.011658,0.000000,0.011794,0.002682,-0.999927,0.000000,0.045958,0.998938,0.003221,0.000000,61.671490,0.000016,-0.000006,1.000000;;, + 2640;16;0.998869,-0.045702,0.013111,0.000000,0.013273,0.003228,-0.999907,0.000000,0.045656,0.998950,0.003831,0.000000,61.671482,-0.000001,-0.000003,1.000000;;, + 2720;16;0.998863,-0.045412,0.014473,0.000000,0.014658,0.003735,-0.999886,0.000000,0.045353,0.998961,0.004396,0.000000,61.671482,0.000007,-0.000003,1.000000;;, + 2800;16;0.998859,-0.045096,0.015734,0.000000,0.015939,0.004194,-0.999864,0.000000,0.045024,0.998974,0.004908,0.000000,61.671486,-0.000004,-0.000001,1.000000;;, + 2880;16;0.998855,-0.044747,0.016908,0.000000,0.017131,0.004603,-0.999843,0.000000,0.044662,0.998988,0.005364,0.000000,61.671505,-0.000025,0.000007,1.000000;;, + 2960;16;0.998855,-0.044304,0.018029,0.000000,0.018266,0.004958,-0.999821,0.000000,0.044207,0.999006,0.005761,0.000000,61.671490,0.000004,0.000001,1.000000;;, + 3040;16;0.998855,-0.043896,0.019027,0.000000,0.019276,0.005258,-0.999800,0.000000,0.043788,0.999022,0.006098,0.000000,61.671463,-0.000010,0.000007,1.000000;;, + 3120;16;0.998852,-0.043610,0.019806,0.000000,0.020064,0.005482,-0.999784,0.000000,0.043492,0.999034,0.006350,0.000000,61.671452,-0.000006,-0.000001,1.000000;;, + 3200;16;0.998843,-0.043512,0.020470,0.000000,0.020737,0.005683,-0.999769,0.000000,0.043386,0.999037,0.006579,0.000000,61.671486,0.000021,-0.000006,1.000000;;, + 3280;16;0.998819,-0.043751,0.021126,0.000000,0.021406,0.005931,-0.999753,0.000000,0.043615,0.999025,0.006861,0.000000,61.671448,-0.000005,0.000003,1.000000;;, + 3360;16;0.998789,-0.044179,0.021667,0.000000,0.021960,0.006157,-0.999740,0.000000,0.044034,0.999005,0.007119,0.000000,61.671432,0.000015,-0.000005,1.000000;;, + 3440;16;0.998753,-0.044756,0.022114,0.000000,0.022421,0.006360,-0.999728,0.000000,0.044603,0.998978,0.007355,0.000000,61.671459,-0.000006,0.000007,1.000000;;, + 3520;16;0.998727,-0.045310,0.022186,0.000000,0.022499,0.006399,-0.999726,0.000000,0.045156,0.998952,0.007410,0.000000,61.671459,-0.000027,0.000011,1.000000;;, + 3600;16;0.998724,-0.045639,0.021621,0.000000,0.021923,0.006126,-0.999741,0.000000,0.045494,0.998939,0.007118,0.000000,61.671440,-0.000006,0.000003,1.000000;;, + 3680;16;0.998743,-0.045803,0.020381,0.000000,0.020657,0.005559,-0.999771,0.000000,0.045680,0.998935,0.006498,0.000000,61.671474,-0.000009,0.000002,1.000000;;, + 3760;16;0.998785,-0.045772,0.018247,0.000000,0.018478,0.004627,-0.999819,0.000000,0.045679,0.998941,0.005467,0.000000,61.671463,-0.000003,-0.000004,1.000000;;, + 3840;16;0.998838,-0.045632,0.015506,0.000000,0.015680,0.003447,-0.999871,0.000000,0.045572,0.998952,0.004158,0.000000,61.671455,0.000009,-0.000002,1.000000;;, + 3920;16;0.998889,-0.045491,0.012314,0.000000,0.012423,0.002109,-0.999921,0.000000,0.045461,0.998963,0.002671,0.000000,61.671463,-0.000002,0.000000,1.000000;;, + 4000;16;0.998936,-0.045249,0.008852,0.000000,0.008890,0.000629,-0.999960,0.000000,0.045242,0.998976,0.001031,0.000000,61.671463,-0.000013,0.000009,1.000000;;, + 4080;16;0.998979,-0.044860,0.005298,0.000000,0.005260,-0.000958,-0.999986,0.000000,0.044864,0.998993,-0.000721,0.000000,61.671482,0.000021,-0.000016,1.000000;;, + 4160;16;0.999018,-0.044272,0.001824,0.000000,0.001710,-0.002616,-0.999995,0.000000,0.044277,0.999016,-0.002538,0.000000,61.671467,-0.000028,0.000018,1.000000;;, + 4240;16;0.999054,-0.043471,-0.001353,0.000000,-0.001541,-0.004284,-0.999990,0.000000,0.043465,0.999046,-0.004347,0.000000,61.671459,0.000024,-0.000003,1.000000;;, + 4320;16;0.999096,-0.042305,-0.004176,0.000000,-0.004434,-0.006014,-0.999972,0.000000,0.042278,0.999087,-0.006196,0.000000,61.671509,-0.000014,0.000009,1.000000;;, + 4400;16;0.999156,-0.040575,-0.006446,0.000000,-0.006770,-0.007837,-0.999946,0.000000,0.040522,0.999146,-0.008105,0.000000,61.671440,0.000019,-0.000019,1.000000;;, + 4480;16;0.999227,-0.038410,-0.008369,0.000000,-0.008750,-0.009759,-0.999914,0.000000,0.038325,0.999214,-0.010087,0.000000,61.671467,-0.000005,0.000003,1.000000;;, + 4560;16;0.999309,-0.035783,-0.010036,0.000000,-0.010465,-0.011824,-0.999875,0.000000,0.035660,0.999290,-0.012191,0.000000,61.671474,0.000002,-0.000002,1.000000;;, + 4640;16;0.999389,-0.032964,-0.011585,0.000000,-0.012050,-0.013947,-0.999830,0.000000,0.032797,0.999359,-0.014336,0.000000,61.671474,-0.000013,0.000012,1.000000;;, + 4720;16;0.999455,-0.030246,-0.013202,0.000000,-0.013692,-0.016048,-0.999777,0.000000,0.030027,0.999414,-0.016454,0.000000,61.671448,0.000005,-0.000013,1.000000;;, + 4800;16;0.999511,-0.027531,-0.014824,0.000000,-0.015327,-0.018154,-0.999718,0.000000,0.027254,0.999456,-0.018567,0.000000,61.671467,0.000001,-0.000001,1.000000;;, + 4960;16;0.999573,-0.023764,-0.016974,0.000000,-0.017488,-0.021598,-0.999614,0.000000,0.023388,0.999484,-0.022005,0.000000,61.671474,0.000008,-0.000005,1.000000;;; + } + { Bip01_L_Hand } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410508,3.054968,-10.755419,1.000000;;, + 80;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410498,3.054974,-10.755421,1.000000;;, + 160;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410497,3.054968,-10.755431,1.000000;;, + 240;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410508,3.054964,-10.755431,1.000000;;, + 320;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410500,3.054960,-10.755434,1.000000;;, + 400;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410508,3.054971,-10.755414,1.000000;;, + 480;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410508,3.054960,-10.755432,1.000000;;, + 560;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410506,3.054965,-10.755426,1.000000;;, + 640;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410497,3.054977,-10.755417,1.000000;;, + 720;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410471,3.054978,-10.755437,1.000000;;, + 800;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410487,3.054967,-10.755437,1.000000;;, + 880;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410501,3.054976,-10.755417,1.000000;;, + 960;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410521,3.054957,-10.755430,1.000000;;, + 1040;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410499,3.054966,-10.755423,1.000000;;, + 1120;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410509,3.054960,-10.755429,1.000000;;, + 1200;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410503,3.054964,-10.755425,1.000000;;, + 1280;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410506,3.054965,-10.755434,1.000000;;, + 1360;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410516,3.054975,-10.755422,1.000000;;, + 1440;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410494,3.054971,-10.755426,1.000000;;, + 1520;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410505,3.054976,-10.755416,1.000000;;, + 1600;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410496,3.054975,-10.755421,1.000000;;, + 1680;16;0.713248,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410503,3.054969,-10.755434,1.000000;;, + 1760;16;0.713248,-0.002867,-0.700907,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410509,3.054973,-10.755425,1.000000;;, + 1840;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410497,3.054973,-10.755424,1.000000;;, + 1920;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410506,3.054967,-10.755421,1.000000;;, + 2000;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410499,3.054975,-10.755417,1.000000;;, + 2080;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410491,3.054975,-10.755412,1.000000;;, + 2160;16;0.713247,-0.002867,-0.700907,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410501,3.054973,-10.755416,1.000000;;, + 2240;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410501,3.054976,-10.755409,1.000000;;, + 2320;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410510,3.054970,-10.755433,1.000000;;, + 2400;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410506,3.054970,-10.755426,1.000000;;, + 2480;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410507,3.054971,-10.755430,1.000000;;, + 2560;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410508,3.054976,-10.755413,1.000000;;, + 2640;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410507,3.054967,-10.755429,1.000000;;, + 2720;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410498,3.054969,-10.755423,1.000000;;, + 2800;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410500,3.054970,-10.755417,1.000000;;, + 2880;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410507,3.054965,-10.755431,1.000000;;, + 2960;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410504,3.054980,-10.755417,1.000000;;, + 3040;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410500,3.054974,-10.755425,1.000000;;, + 3120;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410500,3.054966,-10.755434,1.000000;;, + 3200;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410495,3.054964,-10.755433,1.000000;;, + 3280;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410502,3.054964,-10.755434,1.000000;;, + 3360;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410505,3.054978,-10.755419,1.000000;;, + 3440;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410506,3.054974,-10.755412,1.000000;;, + 3520;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410496,3.054967,-10.755432,1.000000;;, + 3600;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410502,3.054972,-10.755426,1.000000;;, + 3680;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410500,3.054976,-10.755416,1.000000;;, + 3760;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410504,3.054980,-10.755415,1.000000;;, + 3840;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410511,3.054967,-10.755432,1.000000;;, + 3920;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410498,3.054977,-10.755418,1.000000;;, + 4000;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410497,3.054971,-10.755430,1.000000;;, + 4080;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410501,3.054986,-10.755408,1.000000;;, + 4160;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410512,3.054956,-10.755445,1.000000;;, + 4240;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410506,3.054977,-10.755414,1.000000;;, + 4320;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410501,3.054983,-10.755426,1.000000;;, + 4400;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410499,3.054965,-10.755426,1.000000;;, + 4480;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410507,3.054966,-10.755425,1.000000;;, + 4560;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410522,3.054971,-10.755424,1.000000;;, + 4640;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410505,3.054967,-10.755433,1.000000;;, + 4720;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410533,3.054963,-10.755422,1.000000;;, + 4800;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410522,3.054963,-10.755418,1.000000;;, + 4960;16;0.713247,-0.002867,-0.700906,0.000000,-0.700353,-0.042855,-0.712509,0.000000,-0.027995,0.999077,-0.032574,0.000000,12.410508,3.054968,-10.755419,1.000000;;; + } + { Bip01_L_Finger0 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075042,-0.000009,0.000013,1.000000;;, + 80;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075057,0.000004,0.000005,1.000000;;, + 160;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075050,-0.000016,0.000012,1.000000;;, + 240;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075056,-0.000019,0.000006,1.000000;;, + 320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075058,-0.000006,0.000002,1.000000;;, + 400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075063,-0.000001,-0.000003,1.000000;;, + 480;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075071,0.000015,-0.000016,1.000000;;, + 560;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075075,0.000002,-0.000006,1.000000;;, + 640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075053,0.000015,0.000006,1.000000;;, + 720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075067,-0.000004,-0.000010,1.000000;;, + 800;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075047,0.000006,0.000007,1.000000;;, + 880;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075071,0.000010,-0.000015,1.000000;;, + 960;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075048,0.000030,0.000001,1.000000;;, + 1040;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075065,0.000007,-0.000005,1.000000;;, + 1120;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075040,-0.000001,0.000021,1.000000;;, + 1200;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075075,0.000018,-0.000009,1.000000;;, + 1280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075082,0.000004,-0.000016,1.000000;;, + 1360;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075045,0.000004,0.000013,1.000000;;, + 1440;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075075,-0.000006,-0.000005,1.000000;;, + 1520;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075055,-0.000013,0.000004,1.000000;;, + 1600;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075053,-0.000007,0.000004,1.000000;;, + 1680;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075068,-0.000000,-0.000004,1.000000;;, + 1760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075050,0.000011,-0.000002,1.000000;;, + 1840;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075065,-0.000005,0.000013,1.000000;;, + 1920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075034,-0.000003,-0.000003,1.000000;;, + 2000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075072,0.000011,-0.000006,1.000000;;, + 2080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075059,0.000003,0.000002,1.000000;;, + 2160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075062,-0.000007,0.000004,1.000000;;, + 2240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075060,-0.000000,-0.000001,1.000000;;, + 2320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075060,0.000011,-0.000003,1.000000;;, + 2400;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075072,0.000001,0.000001,1.000000;;, + 2480;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075070,-0.000006,-0.000003,1.000000;;, + 2560;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075075,0.000011,-0.000008,1.000000;;, + 2640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075055,-0.000009,0.000005,1.000000;;, + 2720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075059,0.000000,-0.000001,1.000000;;, + 2800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075051,-0.000017,0.000008,1.000000;;, + 2880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075068,0.000004,0.000001,1.000000;;, + 2960;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075055,0.000011,-0.000002,1.000000;;, + 3040;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075054,-0.000001,-0.000001,1.000000;;, + 3120;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075063,0.000012,-0.000007,1.000000;;, + 3200;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075068,0.000006,-0.000006,1.000000;;, + 3280;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075062,-0.000019,0.000008,1.000000;;, + 3360;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075058,-0.000014,0.000005,1.000000;;, + 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075047,-0.000004,0.000006,1.000000;;, + 3520;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075062,0.000001,-0.000004,1.000000;;, + 3600;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075053,0.000004,0.000005,1.000000;;, + 3680;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075042,-0.000006,0.000009,1.000000;;, + 3760;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075075,0.000004,-0.000009,1.000000;;, + 3840;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075061,-0.000009,0.000004,1.000000;;, + 3920;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075051,-0.000001,0.000008,1.000000;;, + 4000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075066,-0.000004,-0.000001,1.000000;;, + 4080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075035,-0.000012,0.000010,1.000000;;, + 4160;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075076,0.000012,-0.000010,1.000000;;, + 4240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075080,-0.000000,-0.000001,1.000000;;, + 4320;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075083,-0.000006,-0.000003,1.000000;;, + 4400;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075057,-0.000004,-0.000002,1.000000;;, + 4480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075103,-0.000009,-0.000019,1.000000;;, + 4560;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075098,-0.000006,-0.000016,1.000000;;, + 4640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075061,-0.000013,0.000003,1.000000;;, + 4720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075089,-0.000012,-0.000014,1.000000;;, + 4800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075084,0.000006,-0.000007,1.000000;;, + 4960;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075042,-0.000009,0.000013,1.000000;;; + } + { Bip01_L_Finger01 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961583,0.000010,-0.000006,1.000000;;, + 80;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961592,0.000005,-0.000016,1.000000;;, + 160;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961579,0.000013,-0.000008,1.000000;;, + 240;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961580,0.000013,-0.000006,1.000000;;, + 320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961563,-0.000004,0.000012,1.000000;;, + 400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961575,0.000008,-0.000006,1.000000;;, + 480;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961571,-0.000003,0.000006,1.000000;;, + 560;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961547,0.000037,0.000017,1.000000;;, + 640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961574,0.000004,-0.000008,1.000000;;, + 720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961565,0.000021,0.000006,1.000000;;, + 800;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961578,-0.000000,-0.000003,1.000000;;, + 880;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961573,-0.000007,0.000007,1.000000;;, + 960;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961574,-0.000013,-0.000001,1.000000;;, + 1040;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961557,-0.000014,0.000018,1.000000;;, + 1120;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961590,-0.000004,-0.000009,1.000000;;, + 1200;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961573,-0.000009,0.000002,1.000000;;, + 1280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961561,0.000001,0.000004,1.000000;;, + 1360;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961581,-0.000005,-0.000008,1.000000;;, + 1440;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961569,0.000008,0.000004,1.000000;;, + 1520;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961579,0.000011,-0.000010,1.000000;;, + 1600;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961600,-0.000001,-0.000014,1.000000;;, + 1680;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961573,-0.000002,0.000006,1.000000;;, + 1760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961561,-0.000008,0.000007,1.000000;;, + 1840;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961572,0.000001,-0.000005,1.000000;;, + 1920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961586,0.000006,0.000004,1.000000;;, + 2000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961570,-0.000011,0.000019,1.000000;;, + 2080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961590,0.000008,0.000001,1.000000;;, + 2160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961572,0.000008,0.000004,1.000000;;, + 2240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961582,0.000020,-0.000002,1.000000;;, + 2320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961582,-0.000001,0.000001,1.000000;;, + 2400;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961583,0.000017,-0.000006,1.000000;;, + 2480;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961566,0.000003,0.000003,1.000000;;, + 2560;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961568,-0.000006,-0.000001,1.000000;;, + 2640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961571,0.000001,-0.000004,1.000000;;, + 2720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961561,-0.000014,0.000009,1.000000;;, + 2800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961579,0.000009,-0.000003,1.000000;;, + 2880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961574,-0.000007,0.000002,1.000000;;, + 2960;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961576,-0.000004,0.000002,1.000000;;, + 3040;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961565,-0.000002,0.000004,1.000000;;, + 3120;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961581,-0.000019,0.000004,1.000000;;, + 3200;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961570,-0.000012,0.000005,1.000000;;, + 3280;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961571,0.000010,-0.000000,1.000000;;, + 3360;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961576,0.000006,-0.000005,1.000000;;, + 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961583,-0.000005,-0.000003,1.000000;;, + 3520;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961581,0.000019,-0.000012,1.000000;;, + 3600;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961582,-0.000001,-0.000007,1.000000;;, + 3680;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961586,0.000006,-0.000009,1.000000;;, + 3760;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961561,0.000005,0.000009,1.000000;;, + 3840;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961577,0.000002,-0.000007,1.000000;;, + 3920;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961557,-0.000012,0.000012,1.000000;;, + 4000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961568,-0.000011,0.000004,1.000000;;, + 4080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961595,0.000018,-0.000016,1.000000;;, + 4160;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961530,-0.000013,0.000027,1.000000;;, + 4240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961580,0.000006,-0.000002,1.000000;;, + 4320;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961552,0.000002,0.000005,1.000000;;, + 4400;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961567,0.000004,0.000002,1.000000;;, + 4480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961559,-0.000005,0.000011,1.000000;;, + 4560;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961559,-0.000019,0.000015,1.000000;;, + 4640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961563,0.000016,0.000006,1.000000;;, + 4720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961565,0.000025,0.000000,1.000000;;, + 4800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961566,-0.000008,0.000006,1.000000;;, + 4960;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961583,0.000010,-0.000006,1.000000;;; + } + { Bip01_L_Finger02 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961576,0.000009,-0.000003,1.000000;;, + 80;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961568,-0.000009,0.000011,1.000000;;, + 160;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961581,0.000011,-0.000008,1.000000;;, + 240;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961579,0.000013,-0.000003,1.000000;;, + 320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961580,0.000014,-0.000009,1.000000;;, + 400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961574,0.000009,-0.000001,1.000000;;, + 480;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961569,-0.000002,0.000006,1.000000;;, + 560;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961576,-0.000011,-0.000001,1.000000;;, + 640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961578,0.000005,-0.000002,1.000000;;, + 720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961578,-0.000002,-0.000003,1.000000;;, + 800;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961576,-0.000000,-0.000005,1.000000;;, + 880;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961572,-0.000007,0.000004,1.000000;;, + 960;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961579,-0.000012,0.000002,1.000000;;, + 1040;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961574,0.000008,0.000002,1.000000;;, + 1120;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961586,-0.000004,-0.000012,1.000000;;, + 1200;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961573,-0.000009,0.000007,1.000000;;, + 1280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961569,-0.000003,0.000001,1.000000;;, + 1360;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961571,0.000000,0.000001,1.000000;;, + 1440;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961565,0.000009,-0.000000,1.000000;;, + 1520;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961580,0.000012,-0.000009,1.000000;;, + 1600;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961571,0.000002,0.000002,1.000000;;, + 1680;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961573,-0.000002,0.000001,1.000000;;, + 1760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961590,-0.000005,-0.000004,1.000000;;, + 1840;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961571,-0.000000,0.000000,1.000000;;, + 1920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961586,0.000002,0.000003,1.000000;;, + 2000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961561,-0.000004,-0.000000,1.000000;;, + 2080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961565,-0.000010,0.000003,1.000000;;, + 2160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961571,0.000005,-0.000002,1.000000;;, + 2240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961568,-0.000010,0.000002,1.000000;;, + 2320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961582,-0.000001,0.000000,1.000000;;, + 2400;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961562,-0.000001,0.000003,1.000000;;, + 2480;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961565,0.000005,0.000001,1.000000;;, + 2560;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961569,0.000001,0.000004,1.000000;;, + 2640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961572,0.000005,-0.000000,1.000000;;, + 2720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961578,0.000008,-0.000005,1.000000;;, + 2800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961580,0.000013,-0.000000,1.000000;;, + 2880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961571,-0.000005,0.000003,1.000000;;, + 2960;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961578,-0.000008,0.000000,1.000000;;, + 3040;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961578,-0.000012,0.000004,1.000000;;, + 3120;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961567,-0.000010,0.000005,1.000000;;, + 3200;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961571,-0.000007,0.000005,1.000000;;, + 3280;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961579,0.000017,-0.000002,1.000000;;, + 3360;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961581,0.000006,-0.000003,1.000000;;, + 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961584,0.000001,-0.000004,1.000000;;, + 3520;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961576,-0.000014,0.000005,1.000000;;, + 3600;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961581,0.000002,-0.000007,1.000000;;, + 3680;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961588,0.000002,-0.000007,1.000000;;, + 3760;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961570,-0.000007,0.000005,1.000000;;, + 3840;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961579,0.000004,-0.000002,1.000000;;, + 3920;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961581,0.000002,-0.000001,1.000000;;, + 4000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961569,-0.000010,0.000008,1.000000;;, + 4080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961600,0.000003,-0.000014,1.000000;;, + 4160;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961583,0.000002,-0.000000,1.000000;;, + 4240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961576,0.000004,-0.000008,1.000000;;, + 4320;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961551,0.000002,0.000005,1.000000;;, + 4400;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961569,0.000004,0.000001,1.000000;;, + 4480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961553,0.000008,0.000013,1.000000;;, + 4560;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961561,0.000010,0.000003,1.000000;;, + 4640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961563,0.000016,0.000001,1.000000;;, + 4720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961555,0.000000,0.000016,1.000000;;, + 4800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961566,-0.000008,0.000003,1.000000;;, + 4960;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961576,0.000009,-0.000003,1.000000;;; + } + { Dummy06 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088003,0.354686,-0.505020,1.000000;;, + 80;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088007,0.354687,-0.505029,1.000000;;, + 160;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088003,0.354683,-0.505037,1.000000;;, + 240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087999,0.354689,-0.505027,1.000000;;, + 320;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087999,0.354678,-0.505037,1.000000;;, + 400;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088018,0.354682,-0.505016,1.000000;;, + 480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087997,0.354684,-0.505036,1.000000;;, + 560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087997,0.354680,-0.505038,1.000000;;, + 640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087982,0.354697,-0.505025,1.000000;;, + 720;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087984,0.354686,-0.505039,1.000000;;, + 800;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087999,0.354695,-0.505016,1.000000;;, + 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087994,0.354693,-0.505023,1.000000;;, + 960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088020,0.354688,-0.505014,1.000000;;, + 1040;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088017,0.354669,-0.505036,1.000000;;, + 1120;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087996,0.354682,-0.505036,1.000000;;, + 1200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087994,0.354682,-0.505039,1.000000;;, + 1280;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087999,0.354684,-0.505032,1.000000;;, + 1360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087997,0.354686,-0.505034,1.000000;;, + 1440;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088001,0.354692,-0.505020,1.000000;;, + 1520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088009,0.354688,-0.505025,1.000000;;, + 1600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088003,0.354678,-0.505034,1.000000;;, + 1680;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087992,0.354686,-0.505022,1.000000;;, + 1760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087994,0.354689,-0.505026,1.000000;;, + 1840;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088005,0.354687,-0.505022,1.000000;;, + 1920;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087996,0.354682,-0.505020,1.000000;;, + 2000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087999,0.354694,-0.505015,1.000000;;, + 2080;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088005,0.354690,-0.505026,1.000000;;, + 2160;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088007,0.354689,-0.505020,1.000000;;, + 2240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088007,0.354691,-0.505020,1.000000;;, + 2320;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088007,0.354685,-0.505026,1.000000;;, + 2400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088003,0.354688,-0.505016,1.000000;;, + 2480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088007,0.354692,-0.505024,1.000000;;, + 2560;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088001,0.354689,-0.505018,1.000000;;, + 2640;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088001,0.354689,-0.505016,1.000000;;, + 2720;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087994,0.354685,-0.505033,1.000000;;, + 2800;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088005,0.354682,-0.505036,1.000000;;, + 2880;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087996,0.354688,-0.505025,1.000000;;, + 2960;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087997,0.354684,-0.505037,1.000000;;, + 3040;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088001,0.354691,-0.505015,1.000000;;, + 3120;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087999,0.354692,-0.505020,1.000000;;, + 3200;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088005,0.354682,-0.505040,1.000000;;, + 3280;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088001,0.354681,-0.505039,1.000000;;, + 3360;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088001,0.354691,-0.505018,1.000000;;, + 3440;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088003,0.354685,-0.505025,1.000000;;, + 3520;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088007,0.354681,-0.505039,1.000000;;, + 3600;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087997,0.354683,-0.505033,1.000000;;, + 3680;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088005,0.354683,-0.505036,1.000000;;, + 3760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087997,0.354693,-0.505018,1.000000;;, + 3840;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088005,0.354691,-0.505020,1.000000;;, + 3920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088005,0.354683,-0.505038,1.000000;;, + 4000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087996,0.354698,-0.505015,1.000000;;, + 4080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087996,0.354699,-0.505005,1.000000;;, + 4160;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088001,0.354686,-0.505031,1.000000;;, + 4240;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088005,0.354692,-0.505021,1.000000;;, + 4320;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087988,0.354712,-0.505011,1.000000;;, + 4400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087994,0.354686,-0.505024,1.000000;;, + 4480;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088018,0.354674,-0.505038,1.000000;;, + 4560;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.088011,0.354684,-0.505024,1.000000;;, + 4640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.087997,0.354688,-0.505028,1.000000;;, + 4720;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088015,0.354667,-0.505041,1.000000;;, + 4800;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,0.000000,0.000796,1.000000,0.000000,24.087988,0.354694,-0.505022,1.000000;;, + 4960;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000796,0.000000,-0.000000,0.000796,1.000000,0.000000,24.088003,0.354686,-0.505020,1.000000;;; + } + { Bip01_L_Finger1 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300064,0.000003,0.000006,1.000000;;, + 80;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300063,0.000007,0.000011,1.000000;;, + 160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300055,0.000007,0.000007,1.000000;;, + 240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300056,-0.000004,-0.000002,1.000000;;, + 320;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300056,0.000004,0.000004,1.000000;;, + 400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300014,0.000025,0.000014,1.000000;;, + 480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300039,-0.000004,-0.000015,1.000000;;, + 560;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300041,0.000005,0.000004,1.000000;;, + 640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300058,-0.000005,-0.000002,1.000000;;, + 720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300057,0.000007,0.000014,1.000000;;, + 800;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300075,0.000004,0.000018,1.000000;;, + 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300048,-0.000009,-0.000014,1.000000;;, + 960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300048,-0.000006,-0.000015,1.000000;;, + 1040;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300055,-0.000009,-0.000013,1.000000;;, + 1120;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300047,-0.000007,-0.000015,1.000000;;, + 1200;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300065,-0.000006,0.000000,1.000000;;, + 1280;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300060,0.000002,0.000007,1.000000;;, + 1360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300070,0.000006,0.000019,1.000000;;, + 1440;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300065,-0.000004,-0.000004,1.000000;;, + 1520;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300047,0.000002,0.000002,1.000000;;, + 1600;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300076,0.000005,-0.000013,1.000000;;, + 1680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300056,0.000000,-0.000000,1.000000;;, + 1760;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300069,0.000001,0.000005,1.000000;;, + 1840;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300046,-0.000004,0.000008,1.000000;;, + 1920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300068,-0.000004,0.000000,1.000000;;, + 2000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300057,0.000006,0.000016,1.000000;;, + 2080;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300053,0.000001,0.000011,1.000000;;, + 2160;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300057,-0.000007,0.000001,1.000000;;, + 2240;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300064,-0.000003,-0.000011,1.000000;;, + 2320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300056,-0.000001,-0.000002,1.000000;;, + 2400;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300053,-0.000002,-0.000014,1.000000;;, + 2480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300054,0.000002,0.000003,1.000000;;, + 2560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300058,-0.000009,-0.000011,1.000000;;, + 2640;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300057,-0.000009,-0.000017,1.000000;;, + 2720;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300058,-0.000002,-0.000006,1.000000;;, + 2800;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300055,-0.000003,-0.000003,1.000000;;, + 2880;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300047,0.000005,0.000011,1.000000;;, + 2960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300066,-0.000004,-0.000015,1.000000;;, + 3040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300047,-0.000005,-0.000022,1.000000;;, + 3120;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300045,-0.000003,-0.000006,1.000000;;, + 3200;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300055,-0.000001,0.000005,1.000000;;, + 3280;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300045,-0.000015,-0.000028,1.000000;;, + 3360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300060,0.000003,0.000007,1.000000;;, + 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300044,-0.000006,-0.000009,1.000000;;, + 3520;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300054,0.000006,0.000008,1.000000;;, + 3600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300052,-0.000004,-0.000001,1.000000;;, + 3680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300062,-0.000000,0.000005,1.000000;;, + 3760;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300060,0.000009,0.000010,1.000000;;, + 3840;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300045,0.000013,0.000027,1.000000;;, + 3920;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300067,-0.000013,-0.000011,1.000000;;, + 4000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300056,-0.000005,0.000000,1.000000;;, + 4080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300039,0.000021,0.000035,1.000000;;, + 4160;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300084,-0.000016,-0.000027,1.000000;;, + 4240;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300084,-0.000017,-0.000021,1.000000;;, + 4320;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300045,0.000006,0.000015,1.000000;;, + 4400;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300069,-0.000006,-0.000006,1.000000;;, + 4480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300056,0.000011,0.000010,1.000000;;, + 4560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300076,-0.000007,-0.000010,1.000000;;, + 4640;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300057,-0.000006,-0.000009,1.000000;;, + 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300072,-0.000010,-0.000010,1.000000;;, + 4800;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300090,-0.000022,-0.000024,1.000000;;, + 4960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300064,0.000003,0.000006,1.000000;;; + } + { Bip01_L_Finger11 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850065,0.000001,-0.000008,1.000000;;, + 80;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850067,-0.000012,-0.000005,1.000000;;, + 160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850059,-0.000008,-0.000011,1.000000;;, + 240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850067,0.000001,0.000003,1.000000;;, + 320;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850051,0.000009,0.000004,1.000000;;, + 400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850072,-0.000023,-0.000038,1.000000;;, + 480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850061,0.000006,0.000004,1.000000;;, + 560;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850071,-0.000013,-0.000012,1.000000;;, + 640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850073,-0.000001,-0.000002,1.000000;;, + 720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850061,-0.000004,-0.000007,1.000000;;, + 800;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850033,-0.000012,-0.000037,1.000000;;, + 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850089,-0.000003,0.000006,1.000000;;, + 960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850071,0.000006,0.000006,1.000000;;, + 1040;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850063,0.000002,0.000003,1.000000;;, + 1120;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850079,-0.000002,0.000002,1.000000;;, + 1200;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850054,0.000004,-0.000002,1.000000;;, + 1280;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850033,0.000003,-0.000019,1.000000;;, + 1360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850060,-0.000001,0.000000,1.000000;;, + 1440;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850060,-0.000002,0.000002,1.000000;;, + 1520;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850078,-0.000007,-0.000004,1.000000;;, + 1600;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850050,-0.000006,0.000007,1.000000;;, + 1680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850048,0.000007,0.000000,1.000000;;, + 1760;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850069,0.000001,-0.000017,1.000000;;, + 1840;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850089,0.000007,-0.000004,1.000000;;, + 1920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850056,0.000012,0.000020,1.000000;;, + 2000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850053,-0.000007,-0.000005,1.000000;;, + 2080;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850065,-0.000002,-0.000010,1.000000;;, + 2160;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850060,0.000009,-0.000003,1.000000;;, + 2240;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850053,0.000000,-0.000000,1.000000;;, + 2320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850065,0.000006,0.000002,1.000000;;, + 2400;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850070,0.000000,0.000011,1.000000;;, + 2480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850060,-0.000006,-0.000010,1.000000;;, + 2560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850062,0.000004,0.000002,1.000000;;, + 2640;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850082,0.000004,0.000002,1.000000;;, + 2720;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850064,0.000001,-0.000002,1.000000;;, + 2800;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850072,0.000007,0.000007,1.000000;;, + 2880;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850075,-0.000000,-0.000010,1.000000;;, + 2960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850063,0.000002,0.000011,1.000000;;, + 3040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850078,0.000013,0.000042,1.000000;;, + 3120;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850089,-0.000001,-0.000006,1.000000;;, + 3200;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850073,0.000010,0.000013,1.000000;;, + 3280;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850079,0.000021,0.000042,1.000000;;, + 3360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850069,-0.000005,-0.000008,1.000000;;, + 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850072,0.000013,0.000025,1.000000;;, + 3520;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850064,-0.000001,0.000000,1.000000;;, + 3600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850068,-0.000004,-0.000008,1.000000;;, + 3680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850067,-0.000010,-0.000026,1.000000;;, + 3760;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850063,-0.000014,-0.000005,1.000000;;, + 3840;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850078,-0.000021,-0.000040,1.000000;;, + 3920;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850061,0.000001,-0.000003,1.000000;;, + 4000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850081,-0.000003,-0.000007,1.000000;;, + 4080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850072,-0.000017,-0.000023,1.000000;;, + 4160;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850025,0.000036,0.000062,1.000000;;, + 4240;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850046,0.000018,0.000011,1.000000;;, + 4320;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850097,-0.000030,-0.000042,1.000000;;, + 4400;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850051,0.000014,0.000013,1.000000;;, + 4480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850077,-0.000010,-0.000012,1.000000;;, + 4560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850067,-0.000007,-0.000006,1.000000;;, + 4640;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850060,0.000006,0.000009,1.000000;;, + 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850066,0.000001,-0.000007,1.000000;;, + 4800;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850065,0.000028,0.000040,1.000000;;, + 4960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850065,0.000001,-0.000008,1.000000;;; + } + { Bip01_L_Finger12 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207764,0.000008,0.000012,1.000000;;, + 80;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207752,0.000001,-0.000009,1.000000;;, + 160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207758,-0.000006,-0.000005,1.000000;;, + 240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207754,0.000013,0.000008,1.000000;;, + 320;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207761,-0.000003,-0.000001,1.000000;;, + 400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207761,0.000004,0.000010,1.000000;;, + 480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207757,-0.000003,0.000000,1.000000;;, + 560;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207770,-0.000005,-0.000006,1.000000;;, + 640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207747,0.000006,-0.000002,1.000000;;, + 720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207773,0.000003,-0.000002,1.000000;;, + 800;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207769,0.000006,0.000008,1.000000;;, + 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207754,0.000004,0.000008,1.000000;;, + 960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207753,0.000009,0.000010,1.000000;;, + 1040;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207757,0.000009,0.000006,1.000000;;, + 1120;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207743,0.000002,-0.000000,1.000000;;, + 1200;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207767,-0.000013,-0.000008,1.000000;;, + 1280;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207783,0.000011,0.000022,1.000000;;, + 1360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207764,-0.000002,0.000000,1.000000;;, + 1440;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207756,-0.000002,-0.000000,1.000000;;, + 1520;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207762,0.000002,0.000001,1.000000;;, + 1600;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207761,0.000001,-0.000005,1.000000;;, + 1680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207769,-0.000003,0.000000,1.000000;;, + 1760;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207753,0.000002,0.000003,1.000000;;, + 1840;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207752,0.000005,-0.000002,1.000000;;, + 1920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207760,-0.000011,-0.000011,1.000000;;, + 2000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207770,-0.000000,-0.000003,1.000000;;, + 2080;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207766,0.000006,0.000004,1.000000;;, + 2160;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207768,-0.000001,-0.000000,1.000000;;, + 2240;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207764,-0.000002,0.000002,1.000000;;, + 2320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207757,-0.000010,-0.000012,1.000000;;, + 2400;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207762,0.000002,0.000014,1.000000;;, + 2480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207767,-0.000003,0.000003,1.000000;;, + 2560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207757,0.000005,0.000015,1.000000;;, + 2640;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207755,0.000002,0.000006,1.000000;;, + 2720;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,11.207770,-0.000002,-0.000001,1.000000;;, + 2800;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207756,-0.000006,-0.000010,1.000000;;, + 2880;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207760,-0.000000,0.000002,1.000000;;, + 2960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207756,0.000005,0.000012,1.000000;;, + 3040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207765,-0.000007,-0.000011,1.000000;;, + 3120;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207755,0.000004,0.000013,1.000000;;, + 3200;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207761,-0.000004,-0.000010,1.000000;;, + 3280;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207756,-0.000007,-0.000016,1.000000;;, + 3360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207761,-0.000004,-0.000012,1.000000;;, + 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207767,-0.000005,-0.000007,1.000000;;, + 3520;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207764,-0.000003,-0.000005,1.000000;;, + 3600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207770,0.000003,0.000006,1.000000;;, + 3680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207760,0.000007,0.000009,1.000000;;, + 3760;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207760,0.000005,0.000003,1.000000;;, + 3840;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207765,0.000008,0.000006,1.000000;;, + 3920;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207769,0.000001,-0.000002,1.000000;;, + 4000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207773,0.000001,-0.000000,1.000000;;, + 4080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207779,-0.000013,-0.000017,1.000000;;, + 4160;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,11.207768,-0.000015,-0.000020,1.000000;;, + 4240;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207767,-0.000003,-0.000003,1.000000;;, + 4320;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207754,0.000010,0.000015,1.000000;;, + 4400;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207767,-0.000011,-0.000015,1.000000;;, + 4480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207764,-0.000007,-0.000010,1.000000;;, + 4560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207754,0.000014,0.000006,1.000000;;, + 4640;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207787,-0.000006,-0.000010,1.000000;;, + 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,11.207737,0.000012,0.000015,1.000000;;, + 4800;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207734,-0.000002,-0.000004,1.000000;;, + 4960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,11.207764,0.000008,0.000012,1.000000;;; + } + { Dummy03 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;-0.407607,0.378871,-0.830851,0.000000,-0.503079,-0.852505,-0.141940,0.000000,-0.762081,0.360128,0.538089,0.000000,-12.374953,4.006935,-8.346194,1.000000;;, + 80;16;-0.416514,0.377872,-0.826879,0.000000,-0.503483,-0.853189,-0.136282,0.000000,-0.756981,0.359556,0.545618,0.000000,-12.374949,4.006937,-8.346193,1.000000;;, + 160;16;-0.425366,0.376888,-0.822812,0.000000,-0.503870,-0.853846,-0.130619,0.000000,-0.751784,0.359030,0.553099,0.000000,-12.374967,4.006944,-8.346194,1.000000;;, + 240;16;-0.434586,0.375814,-0.818474,0.000000,-0.504263,-0.854512,-0.124612,0.000000,-0.746227,0.358572,0.560867,0.000000,-12.374971,4.006948,-8.346193,1.000000;;, + 320;16;-0.442896,0.374968,-0.814397,0.000000,-0.504596,-0.855076,-0.119281,0.000000,-0.741098,0.358112,0.567917,0.000000,-12.374956,4.006941,-8.346194,1.000000;;, + 400;16;-0.449149,0.374601,-0.811134,0.000000,-0.504821,-0.855457,-0.115536,0.000000,-0.737171,0.357585,0.573335,0.000000,-12.374967,4.006938,-8.346195,1.000000;;, + 480;16;-0.453500,0.374765,-0.808634,0.000000,-0.504947,-0.855671,-0.113379,0.000000,-0.734415,0.356900,0.577284,0.000000,-12.374941,4.006937,-8.346192,1.000000;;, + 560;16;-0.455431,0.375689,-0.807118,0.000000,-0.504948,-0.855673,-0.113364,0.000000,-0.733219,0.355924,0.579404,0.000000,-12.374949,4.006939,-8.346192,1.000000;;, + 640;16;-0.455793,0.377101,-0.806255,0.000000,-0.504868,-0.855537,-0.114738,0.000000,-0.733049,0.354756,0.580334,0.000000,-12.374961,4.006935,-8.346194,1.000000;;, + 720;16;-0.455233,0.378873,-0.805741,0.000000,-0.504733,-0.855308,-0.117013,0.000000,-0.733490,0.353416,0.580594,0.000000,-12.374965,4.006937,-8.346196,1.000000;;, + 800;16;-0.453797,0.380821,-0.805633,0.000000,-0.504555,-0.855006,-0.119953,0.000000,-0.734501,0.352051,0.580144,0.000000,-12.374959,4.006924,-8.346196,1.000000;;, + 880;16;-0.451680,0.382774,-0.805897,0.000000,-0.504349,-0.854657,-0.123262,0.000000,-0.735947,0.350778,0.579083,0.000000,-12.374973,4.006937,-8.346195,1.000000;;, + 960;16;-0.449073,0.384565,-0.806500,0.000000,-0.504132,-0.854290,-0.126643,0.000000,-0.737688,0.349711,0.577511,0.000000,-12.374933,4.006945,-8.346191,1.000000;;, + 1040;16;-0.446313,0.385962,-0.807365,0.000000,-0.503934,-0.853955,-0.129659,0.000000,-0.739496,0.348991,0.575631,0.000000,-12.374995,4.006943,-8.346198,1.000000;;, + 1120;16;-0.443171,0.386969,-0.808612,0.000000,-0.503748,-0.853639,-0.132431,0.000000,-0.741510,0.348647,0.573244,0.000000,-12.374972,4.006928,-8.346197,1.000000;;, + 1200;16;-0.439593,0.387489,-0.810315,0.000000,-0.503580,-0.853355,-0.134880,0.000000,-0.743751,0.348767,0.570260,0.000000,-12.374940,4.006937,-8.346193,1.000000;;, + 1280;16;-0.435395,0.387588,-0.812532,0.000000,-0.503420,-0.853083,-0.137174,0.000000,-0.746324,0.349320,0.566547,0.000000,-12.374939,4.006934,-8.346193,1.000000;;, + 1360;16;-0.430296,0.387329,-0.815366,0.000000,-0.503253,-0.852800,-0.139529,0.000000,-0.749388,0.350297,0.561881,0.000000,-12.374988,4.006957,-8.346195,1.000000;;, + 1440;16;-0.424518,0.386623,-0.818723,0.000000,-0.503094,-0.852531,-0.141727,0.000000,-0.752782,0.351729,0.556423,0.000000,-12.374943,4.006949,-8.346193,1.000000;;, + 1520;16;-0.418227,0.385487,-0.822488,0.000000,-0.502949,-0.852285,-0.143708,0.000000,-0.756392,0.353567,0.550329,0.000000,-12.374943,4.006932,-8.346193,1.000000;;, + 1600;16;-0.411315,0.383640,-0.826825,0.000000,-0.502837,-0.852095,-0.145222,0.000000,-0.760247,0.356026,0.543388,0.000000,-12.374963,4.006937,-8.346194,1.000000;;, + 1680;16;-0.403712,0.380662,-0.831933,0.000000,-0.502789,-0.852014,-0.145862,0.000000,-0.764343,0.359401,0.535361,0.000000,-12.374950,4.006958,-8.346194,1.000000;;, + 1760;16;-0.395471,0.376937,-0.837569,0.000000,-0.502776,-0.851992,-0.146034,0.000000,-0.768647,0.363357,0.526453,0.000000,-12.374956,4.006951,-8.346193,1.000000;;, + 1840;16;-0.386531,0.372472,-0.843717,0.000000,-0.502794,-0.852022,-0.145794,0.000000,-0.773170,0.367862,0.516610,0.000000,-12.374984,4.006931,-8.346196,1.000000;;, + 1920;16;-0.377170,0.368002,-0.849892,0.000000,-0.502794,-0.852023,-0.145791,0.000000,-0.777779,0.372333,0.506387,0.000000,-12.374930,4.006939,-8.346193,1.000000;;, + 2000;16;-0.367752,0.364251,-0.855616,0.000000,-0.502734,-0.851920,-0.146598,0.000000,-0.782315,0.376236,0.496417,0.000000,-12.374946,4.006942,-8.346193,1.000000;;, + 2080;16;-0.357990,0.361378,-0.860958,0.000000,-0.502589,-0.851675,-0.148502,0.000000,-0.786922,0.379546,0.486516,0.000000,-12.374934,4.006934,-8.346194,1.000000;;, + 2160;16;-0.347639,0.359976,-0.865774,0.000000,-0.502302,-0.851189,-0.152220,0.000000,-0.791732,0.381963,0.476723,0.000000,-12.374949,4.006957,-8.346195,1.000000;;, + 2240;16;-0.336935,0.359491,-0.870196,0.000000,-0.501919,-0.850540,-0.157031,0.000000,-0.796588,0.383859,0.467012,0.000000,-12.374945,4.006944,-8.346195,1.000000;;, + 2320;16;-0.325771,0.359640,-0.874375,0.000000,-0.501454,-0.849752,-0.162683,0.000000,-0.801509,0.385462,0.457168,0.000000,-12.374968,4.006936,-8.346194,1.000000;;, + 2400;16;-0.314956,0.360150,-0.878120,0.000000,-0.500958,-0.848912,-0.168492,0.000000,-0.806129,0.386834,0.447790,0.000000,-12.374965,4.006927,-8.346193,1.000000;;, + 2480;16;-0.305369,0.360675,-0.881285,0.000000,-0.500500,-0.848135,-0.173683,0.000000,-0.810092,0.388046,0.439513,0.000000,-12.374954,4.006912,-8.346193,1.000000;;, + 2560;16;-0.296753,0.361113,-0.884045,0.000000,-0.500082,-0.847426,-0.178289,0.000000,-0.813545,0.389187,0.432063,0.000000,-12.374963,4.006956,-8.346196,1.000000;;, + 2640;16;-0.289142,0.361135,-0.886554,0.000000,-0.499739,-0.846845,-0.181974,0.000000,-0.816491,0.390429,0.425332,0.000000,-12.374942,4.006930,-8.346194,1.000000;;, + 2720;16;-0.282525,0.361066,-0.888713,0.000000,-0.499444,-0.846346,-0.185078,0.000000,-0.818984,0.391574,0.419446,0.000000,-12.374970,4.006927,-8.346194,1.000000;;, + 2800;16;-0.276615,0.361050,-0.890577,0.000000,-0.499173,-0.845887,-0.187887,0.000000,-0.821164,0.392580,0.414212,0.000000,-12.374959,4.006913,-8.346193,1.000000;;, + 2880;16;-0.272267,0.361310,-0.891810,0.000000,-0.498945,-0.845500,-0.190221,0.000000,-0.822754,0.393174,0.410475,0.000000,-12.374945,4.006962,-8.346195,1.000000;;, + 2960;16;-0.269968,0.362030,-0.892217,0.000000,-0.498766,-0.845196,-0.192033,0.000000,-0.823620,0.393164,0.408744,0.000000,-12.374956,4.006938,-8.346194,1.000000;;, + 3040;16;-0.270530,0.363477,-0.891458,0.000000,-0.498648,-0.844997,-0.193209,0.000000,-0.823507,0.392256,0.409844,0.000000,-12.374985,4.006958,-8.346195,1.000000;;, + 3120;16;-0.275395,0.366133,-0.888878,0.000000,-0.498614,-0.844939,-0.193552,0.000000,-0.821913,0.389904,0.415251,0.000000,-12.374957,4.006952,-8.346194,1.000000;;, + 3200;16;-0.283099,0.369485,-0.885062,0.000000,-0.498643,-0.844989,-0.193258,0.000000,-0.819274,0.386619,0.423457,0.000000,-12.374984,4.006936,-8.346194,1.000000;;, + 3280;16;-0.293334,0.373412,-0.880067,0.000000,-0.498733,-0.845141,-0.192360,0.000000,-0.815610,0.382493,0.434142,0.000000,-12.374942,4.006941,-8.346195,1.000000;;, + 3360;16;-0.304042,0.377235,-0.874787,0.000000,-0.498853,-0.845343,-0.191156,0.000000,-0.811606,0.378270,0.445204,0.000000,-12.374965,4.006917,-8.346193,1.000000;;, + 3440;16;-0.313157,0.380268,-0.870246,0.000000,-0.498974,-0.845550,-0.189922,0.000000,-0.808058,0.374755,0.454534,0.000000,-12.374965,4.006925,-8.346195,1.000000;;, + 3520;16;-0.320549,0.382559,-0.866543,0.000000,-0.499089,-0.845743,-0.188755,0.000000,-0.805083,0.371977,0.462034,0.000000,-12.374962,4.006930,-8.346194,1.000000;;, + 3600;16;-0.324950,0.383778,-0.864362,0.000000,-0.499171,-0.845882,-0.187914,0.000000,-0.803266,0.370402,0.466440,0.000000,-12.374987,4.006938,-8.346194,1.000000;;, + 3680;16;-0.327753,0.384378,-0.863036,0.000000,-0.499241,-0.846000,-0.187195,0.000000,-0.802083,0.369509,0.469176,0.000000,-12.374971,4.006967,-8.346194,1.000000;;, + 3760;16;-0.329814,0.384682,-0.862115,0.000000,-0.499305,-0.846110,-0.186524,0.000000,-0.801197,0.368940,0.471133,0.000000,-12.374954,4.006938,-8.346195,1.000000;;, + 3840;16;-0.331424,0.384701,-0.861489,0.000000,-0.499378,-0.846233,-0.185773,0.000000,-0.800488,0.368639,0.472573,0.000000,-12.374972,4.006914,-8.346196,1.000000;;, + 3920;16;-0.333010,0.384524,-0.860956,0.000000,-0.499468,-0.846387,-0.184826,0.000000,-0.799772,0.368471,0.473913,0.000000,-12.374987,4.006909,-8.346196,1.000000;;, + 4000;16;-0.335002,0.384236,-0.860312,0.000000,-0.499588,-0.846590,-0.183569,0.000000,-0.798865,0.368306,0.475568,0.000000,-12.374951,4.006948,-8.346193,1.000000;;, + 4080;16;-0.337949,0.383968,-0.859279,0.000000,-0.499749,-0.846861,-0.181872,0.000000,-0.797522,0.367960,0.478083,0.000000,-12.374978,4.006943,-8.346195,1.000000;;, + 4160;16;-0.341894,0.383677,-0.857847,0.000000,-0.499955,-0.847211,-0.179663,0.000000,-0.795709,0.367459,0.481477,0.000000,-12.374969,4.006939,-8.346195,1.000000;;, + 4240;16;-0.347213,0.383380,-0.855840,0.000000,-0.500220,-0.847661,-0.176777,0.000000,-0.793235,0.366729,0.486094,0.000000,-12.374987,4.006929,-8.346196,1.000000;;, + 4320;16;-0.353440,0.383022,-0.853448,0.000000,-0.500528,-0.848182,-0.173374,0.000000,-0.790286,0.365897,0.491495,0.000000,-12.374973,4.006942,-8.346195,1.000000;;, + 4400;16;-0.360300,0.382532,-0.850795,0.000000,-0.500870,-0.848762,-0.169506,0.000000,-0.786964,0.365065,0.497408,0.000000,-12.374979,4.006924,-8.346196,1.000000;;, + 4480;16;-0.367604,0.381976,-0.847916,0.000000,-0.501231,-0.849373,-0.165330,0.000000,-0.783349,0.364226,0.503691,0.000000,-12.374952,4.006930,-8.346195,1.000000;;, + 4560;16;-0.375143,0.381385,-0.844874,0.000000,-0.501596,-0.849993,-0.160976,0.000000,-0.779531,0.363397,0.510171,0.000000,-12.374953,4.006931,-8.346195,1.000000;;, + 4640;16;-0.382715,0.380790,-0.841741,0.000000,-0.501956,-0.850602,-0.156574,0.000000,-0.775609,0.362594,0.516678,0.000000,-12.374963,4.006971,-8.346191,1.000000;;, + 4720;16;-0.389985,0.380241,-0.838647,0.000000,-0.502292,-0.851172,-0.152345,0.000000,-0.771760,0.361833,0.522937,0.000000,-12.374979,4.006922,-8.346197,1.000000;;, + 4800;16;-0.397155,0.379708,-0.835518,0.000000,-0.502616,-0.851720,-0.148157,0.000000,-0.767883,0.361103,0.529112,0.000000,-12.374941,4.006959,-8.346190,1.000000;;, + 4960;16;-0.407607,0.378871,-0.830851,0.000000,-0.503079,-0.852505,-0.141940,0.000000,-0.762081,0.360128,0.538089,0.000000,-12.374953,4.006935,-8.346194,1.000000;;; + } + { Bip01_R_Clavicle } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.452612,0.717604,0.529327,0.000000,-0.426220,0.695510,-0.578448,0.000000,-0.783248,0.036203,0.620654,0.000000,31.000202,0.000005,0.000011,1.000000;;, + 80;16;0.440682,0.740856,0.506885,0.000000,-0.451457,0.670977,-0.588197,0.000000,-0.775877,0.030371,0.630152,0.000000,31.000204,0.000006,0.000021,1.000000;;, + 160;16;0.428367,0.763154,0.483836,0.000000,-0.476352,0.645727,-0.596763,0.000000,-0.767848,0.025157,0.640138,0.000000,31.000195,0.000000,0.000005,1.000000;;, + 240;16;0.415061,0.785612,0.458845,0.000000,-0.502242,0.618382,-0.604447,0.000000,-0.758602,0.020432,0.651234,0.000000,31.000191,0.000002,-0.000009,1.000000;;, + 320;16;0.403766,0.804658,0.435315,0.000000,-0.523951,0.593447,-0.610980,0.000000,-0.749966,0.018609,0.661214,0.000000,31.000191,-0.000002,-0.000000,1.000000;;, + 400;16;0.398536,0.817319,0.416123,0.000000,-0.536147,0.575729,-0.617319,0.000000,-0.744121,0.022920,0.667651,0.000000,31.000198,0.000007,0.000008,1.000000;;, + 480;16;0.397056,0.825128,0.401882,0.000000,-0.541189,0.564142,-0.623584,0.000000,-0.741256,0.030103,0.670547,0.000000,31.000196,0.000003,-0.000004,1.000000;;, + 560;16;0.399127,0.827686,0.394503,0.000000,-0.537802,0.559803,-0.630388,0.000000,-0.742608,0.039440,0.668564,0.000000,31.000212,0.000006,0.000019,1.000000;;, + 640;16;0.401665,0.827066,0.393225,0.000000,-0.530635,0.560148,-0.636129,0.000000,-0.746385,0.046852,0.663863,0.000000,31.000185,-0.000010,-0.000016,1.000000;;, + 720;16;0.400325,0.825301,0.398269,0.000000,-0.524681,0.562755,-0.638762,0.000000,-0.751298,0.046748,0.658305,0.000000,31.000183,-0.000005,-0.000014,1.000000;;, + 800;16;0.398441,0.821326,0.408251,0.000000,-0.517931,0.568828,-0.638891,0.000000,-0.756962,0.043114,0.652034,0.000000,31.000177,-0.000015,-0.000009,1.000000;;, + 880;16;0.397144,0.814737,0.422469,0.000000,-0.510570,0.578657,-0.635983,0.000000,-0.762623,0.036877,0.645791,0.000000,31.000189,-0.000002,-0.000010,1.000000;;, + 960;16;0.398858,0.805317,0.438607,0.000000,-0.501479,0.591997,-0.630920,0.000000,-0.767744,0.031695,0.639972,0.000000,31.000191,0.000008,-0.000007,1.000000;;, + 1040;16;0.404275,0.793806,0.454349,0.000000,-0.490979,0.607461,-0.624444,0.000000,-0.771687,0.029371,0.635324,0.000000,31.000198,-0.000008,0.000000,1.000000;;, + 1120;16;0.419312,0.777423,0.468819,0.000000,-0.474527,0.627936,-0.616863,0.000000,-0.773952,0.036190,0.632209,0.000000,31.000189,-0.000005,-0.000004,1.000000;;, + 1200;16;0.451385,0.752533,0.479527,0.000000,-0.446152,0.655725,-0.609076,0.000000,-0.772787,0.060986,0.631728,0.000000,31.000206,0.000001,0.000017,1.000000;;, + 1280;16;0.494407,0.719313,0.488007,0.000000,-0.408289,0.687812,-0.600179,0.000000,-0.767373,0.097484,0.633746,0.000000,31.000200,-0.000005,0.000008,1.000000;;, + 1360;16;0.547995,0.674778,0.494344,0.000000,-0.358778,0.723465,-0.589811,0.000000,-0.755632,0.145854,0.638550,0.000000,31.000196,0.000009,0.000008,1.000000;;, + 1440;16;0.600843,0.623908,0.499727,0.000000,-0.305625,0.756956,-0.577591,0.000000,-0.738634,0.194312,0.645493,0.000000,31.000193,0.000008,-0.000003,1.000000;;, + 1520;16;0.644029,0.573665,0.506098,0.000000,-0.257437,0.785502,-0.562773,0.000000,-0.720384,0.232153,0.653569,0.000000,31.000195,0.000002,0.000005,1.000000;;, + 1600;16;0.677819,0.525861,0.513841,0.000000,-0.215097,0.810139,-0.545351,0.000000,-0.703061,0.259123,0.662239,0.000000,31.000196,-0.000014,0.000000,1.000000;;, + 1680;16;0.698452,0.486218,0.525127,0.000000,-0.184156,0.831166,-0.524642,0.000000,-0.691557,0.269732,0.670069,0.000000,31.000195,-0.000029,-0.000009,1.000000;;, + 1760;16;0.712112,0.450626,0.538362,0.000000,-0.159496,0.850613,-0.501018,0.000000,-0.683709,0.270914,0.677605,0.000000,31.000202,-0.000005,0.000012,1.000000;;, + 1840;16;0.722193,0.416114,0.552528,0.000000,-0.137589,0.869265,-0.474813,0.000000,-0.677869,0.266885,0.685029,0.000000,31.000195,-0.000011,-0.000001,1.000000;;, + 1920;16;0.729968,0.381999,0.566766,0.000000,-0.117977,0.887209,-0.446028,0.000000,-0.673222,0.258721,0.692701,0.000000,31.000196,0.000019,0.000001,1.000000;;, + 2000;16;0.737439,0.347148,0.579373,0.000000,-0.099271,0.904197,-0.415420,0.000000,-0.668079,0.248832,0.701251,0.000000,31.000193,0.000022,0.000011,1.000000;;, + 2080;16;0.744879,0.309606,0.591015,0.000000,-0.080023,0.920878,-0.381550,0.000000,-0.662383,0.236914,0.710718,0.000000,31.000204,0.000002,0.000018,1.000000;;, + 2160;16;0.753388,0.266011,0.601369,0.000000,-0.057593,0.937702,-0.342634,0.000000,-0.655049,0.223501,0.721774,0.000000,31.000202,0.000016,0.000013,1.000000;;, + 2240;16;0.761671,0.219100,0.609798,0.000000,-0.033967,0.953304,-0.300095,0.000000,-0.647073,0.207861,0.733546,0.000000,31.000189,0.000026,0.000009,1.000000;;, + 2320;16;0.768939,0.168925,0.616601,0.000000,-0.009481,0.967368,-0.253198,0.000000,-0.639252,0.188848,0.745449,0.000000,31.000189,0.000003,-0.000001,1.000000;;, + 2400;16;0.775192,0.120581,0.620112,0.000000,0.013302,0.978281,-0.206857,0.000000,-0.631586,0.168603,0.756751,0.000000,31.000202,-0.000012,0.000010,1.000000;;, + 2480;16;0.780357,0.079030,0.620320,0.000000,0.031675,0.985713,-0.165428,0.000000,-0.624531,0.148741,0.766705,0.000000,31.000210,0.000004,0.000042,1.000000;;, + 2560;16;0.784730,0.044929,0.618207,0.000000,0.046236,0.990348,-0.130665,0.000000,-0.618110,0.131121,0.775079,0.000000,31.000202,0.000013,0.000026,1.000000;;, + 2640;16;0.788437,0.021205,0.614750,0.000000,0.056258,0.992731,-0.106395,0.000000,-0.612538,0.118470,0.781513,0.000000,31.000198,0.000002,0.000004,1.000000;;, + 2720;16;0.791435,0.005262,0.611231,0.000000,0.063142,0.993910,-0.090314,0.000000,-0.607984,0.110072,0.786282,0.000000,31.000195,0.000010,0.000002,1.000000;;, + 2800;16;0.793721,-0.004627,0.608264,0.000000,0.068325,0.994321,-0.081594,0.000000,-0.604432,0.106323,0.789530,0.000000,31.000202,-0.000019,0.000014,1.000000;;, + 2880;16;0.795044,-0.008385,0.606494,0.000000,0.071013,0.994315,-0.079343,0.000000,-0.602381,0.106150,0.791119,0.000000,31.000189,0.000019,0.000005,1.000000;;, + 2960;16;0.795173,-0.006850,0.606343,0.000000,0.071316,0.994053,-0.082297,0.000000,-0.602174,0.108682,0.790933,0.000000,31.000193,0.000009,0.000000,1.000000;;, + 3040;16;0.794147,0.001327,0.607724,0.000000,0.067899,0.993543,-0.090897,0.000000,-0.603920,0.113449,0.788929,0.000000,31.000198,-0.000002,0.000006,1.000000;;, + 3120;16;0.791804,0.018068,0.610508,0.000000,0.058857,0.992653,-0.105712,0.000000,-0.607933,0.119636,0.784924,0.000000,31.000198,-0.000002,0.000010,1.000000;;, + 3200;16;0.788313,0.041502,0.613873,0.000000,0.045577,0.991043,-0.125530,0.000000,-0.613584,0.126935,0.779360,0.000000,31.000193,-0.000014,-0.000006,1.000000;;, + 3280;16;0.783706,0.071876,0.616960,0.000000,0.027939,0.988198,-0.150616,0.000000,-0.620504,0.135275,0.772448,0.000000,31.000196,0.000021,0.000017,1.000000;;, + 3360;16;0.778145,0.104767,0.619285,0.000000,0.008416,0.984162,-0.177070,0.000000,-0.628028,0.142999,0.764939,0.000000,31.000200,-0.000020,0.000008,1.000000;;, + 3440;16;0.771949,0.135668,0.621038,0.000000,-0.010331,0.979509,-0.201136,0.000000,-0.635600,0.148851,0.757533,0.000000,31.000202,-0.000004,0.000017,1.000000;;, + 3520;16;0.765550,0.164315,0.622040,0.000000,-0.028308,0.974503,-0.222581,0.000000,-0.642753,0.152789,0.750682,0.000000,31.000198,0.000012,0.000010,1.000000;;, + 3600;16;0.759653,0.187891,0.622595,0.000000,-0.044033,0.970018,-0.239012,0.000000,-0.648836,0.154151,0.745150,0.000000,31.000191,-0.000024,-0.000017,1.000000;;, + 3680;16;0.753917,0.209216,0.622767,0.000000,-0.059075,0.965687,-0.252902,0.000000,-0.654308,0.153877,0.740407,0.000000,31.000185,0.000021,-0.000005,1.000000;;, + 3760;16;0.748277,0.230114,0.622197,0.000000,-0.074616,0.961153,-0.265739,0.000000,-0.659177,0.152421,0.736379,0.000000,31.000195,0.000003,-0.000001,1.000000;;, + 3840;16;0.742244,0.250932,0.621375,0.000000,-0.090540,0.956296,-0.278031,0.000000,-0.663985,0.150108,0.732524,0.000000,31.000195,-0.000019,-0.000002,1.000000;;, + 3920;16;0.735410,0.272427,0.620448,0.000000,-0.107080,0.950841,-0.290576,0.000000,-0.669109,0.147255,0.728430,0.000000,31.000191,-0.000032,-0.000008,1.000000;;, + 4000;16;0.727352,0.295395,0.619436,0.000000,-0.124487,0.944437,-0.304206,0.000000,-0.674879,0.144153,0.723711,0.000000,31.000198,-0.000002,0.000011,1.000000;;, + 4080;16;0.717608,0.320769,0.618180,0.000000,-0.142928,0.936556,-0.320054,0.000000,-0.681623,0.141318,0.717927,0.000000,31.000189,-0.000014,0.000006,1.000000;;, + 4160;16;0.705739,0.349021,0.616537,0.000000,-0.162977,0.926874,-0.338146,0.000000,-0.689472,0.138162,0.711013,0.000000,31.000168,0.000051,-0.000034,1.000000;;, + 4240;16;0.690887,0.381217,0.614287,0.000000,-0.185335,0.914677,-0.359188,0.000000,-0.698803,0.134310,0.702591,0.000000,31.000187,0.000017,-0.000017,1.000000;;, + 4320;16;0.673460,0.416351,0.610823,0.000000,-0.209720,0.899963,-0.382210,0.000000,-0.708851,0.129301,0.693406,0.000000,31.000189,-0.000003,-0.000010,1.000000;;, + 4400;16;0.653362,0.453959,0.605837,0.000000,-0.236263,0.882566,-0.406518,0.000000,-0.719234,0.122466,0.683889,0.000000,31.000198,-0.000005,-0.000002,1.000000;;, + 4480;16;0.631189,0.493016,0.598779,0.000000,-0.264244,0.862493,-0.431603,0.000000,-0.729230,0.114199,0.674672,0.000000,31.000196,-0.000002,0.000017,1.000000;;, + 4560;16;0.607438,0.532598,0.589371,0.000000,-0.293147,0.839865,-0.456828,0.000000,-0.738298,0.104722,0.666296,0.000000,31.000189,0.000009,-0.000021,1.000000;;, + 4640;16;0.582691,0.571791,0.577517,0.000000,-0.322475,0.814958,-0.481513,0.000000,-0.745976,0.094339,0.659257,0.000000,31.000195,0.000002,0.000001,1.000000;;, + 4720;16;0.558018,0.609306,0.563349,0.000000,-0.351534,0.788520,-0.504639,0.000000,-0.751692,0.083562,0.654199,0.000000,31.000191,-0.000009,-0.000010,1.000000;;, + 4800;16;0.532891,0.645602,0.547015,0.000000,-0.380503,0.760229,-0.526564,0.000000,-0.755807,0.072461,0.650772,0.000000,31.000195,-0.000004,0.000004,1.000000;;, + 4960;16;0.452612,0.717604,0.529327,0.000000,-0.426220,0.695510,-0.578448,0.000000,-0.783248,0.036203,0.620654,0.000000,31.000202,0.000005,0.000011,1.000000;;; + } + { Bip01_R_UpperArm } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.839302,-0.543666,-0.000000,0.000000,0.543666,0.839302,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202522,0.000004,-0.000000,1.000000;;, + 80;16;0.845569,-0.533866,0.000000,0.000000,0.533866,0.845569,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202530,-0.000005,-0.000000,1.000000;;, + 160;16;0.851723,-0.523993,0.000000,0.000000,0.523993,0.851723,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202515,-0.000010,0.000002,1.000000;;, + 240;16;0.858073,-0.513528,-0.000000,0.000000,0.513528,0.858073,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202507,0.000006,-0.000001,1.000000;;, + 320;16;0.863682,-0.504036,0.000000,0.000000,0.504036,0.863682,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202522,0.000010,-0.000001,1.000000;;, + 400;16;0.867822,-0.496876,-0.000000,0.000000,0.496876,0.867822,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202507,0.000001,0.000001,1.000000;;, + 480;16;0.870432,-0.492288,0.000000,0.000000,0.492288,0.870432,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,-0.000002,0.000001,1.000000;;, + 560;16;0.870943,-0.491383,-0.000000,0.000000,0.491383,0.870943,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202522,-0.000003,-0.000000,1.000000;;, + 640;16;0.870105,-0.492867,0.000000,0.000000,0.492866,0.870105,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202499,-0.000002,-0.000003,1.000000;;, + 720;16;0.868300,-0.496040,-0.000000,0.000000,0.496040,0.868300,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202530,-0.000012,-0.000001,1.000000;;, + 800;16;0.865941,-0.500146,0.000000,0.000000,0.500146,0.865941,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202515,-0.000000,0.000000,1.000000;;, + 880;16;0.863442,-0.504447,-0.000000,0.000000,0.504447,0.863442,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202507,-0.000005,0.000001,1.000000;;, + 960;16;0.861232,-0.508212,0.000000,0.000000,0.508212,0.861232,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202499,-0.000008,-0.000000,1.000000;;, + 1040;16;0.859419,-0.511272,0.000000,0.000000,0.511272,0.859419,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202507,-0.000001,-0.000001,1.000000;;, + 1120;16;0.859435,-0.511245,-0.000000,0.000000,0.511245,0.859435,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202507,-0.000007,-0.000002,1.000000;;, + 1200;16;0.863427,-0.504474,-0.000000,0.000000,0.504474,0.863427,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202522,0.000007,-0.000000,1.000000;;, + 1280;16;0.869177,-0.494501,-0.000000,0.000000,0.494501,0.869177,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202530,0.000000,-0.000002,1.000000;;, + 1360;16;0.876396,-0.481592,0.000000,0.000000,0.481592,0.876396,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,0.000005,-0.000003,1.000000;;, + 1440;16;0.881597,-0.472003,0.000000,0.000000,0.472003,0.881597,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202507,0.000001,-0.000001,1.000000;;, + 1520;16;0.881905,-0.471427,0.000000,0.000000,0.471427,0.881905,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202522,-0.000016,-0.000005,1.000000;;, + 1600;16;0.876021,-0.482273,-0.000000,0.000000,0.482273,0.876021,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,-0.000007,-0.000007,1.000000;;, + 1680;16;0.859824,-0.510590,0.000000,0.000000,0.510590,0.859824,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202507,0.000013,-0.000002,1.000000;;, + 1760;16;0.835646,-0.549268,-0.000000,0.000000,0.549268,0.835646,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202515,0.000009,-0.000001,1.000000;;, + 1840;16;0.803666,-0.595080,0.000000,0.000000,0.595080,0.803666,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202530,0.000029,0.000012,1.000000;;, + 1920;16;0.766699,-0.642007,-0.000000,0.000000,0.642007,0.766699,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202515,0.000022,0.000007,1.000000;;, + 2000;16;0.729471,-0.684011,-0.000000,0.000000,0.684011,0.729471,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202530,0.000014,0.000011,1.000000;;, + 2080;16;0.692161,-0.721744,-0.000000,0.000000,0.721744,0.692161,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202538,0.000032,0.000015,1.000000;;, + 2160;16;0.657421,-0.753524,0.000000,0.000000,0.753524,0.657421,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202530,0.000011,0.000011,1.000000;;, + 2240;16;0.623622,-0.781726,-0.000000,0.000000,0.781726,0.623622,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202530,0.000032,0.000010,1.000000;;, + 2320;16;0.588879,-0.808221,-0.000000,0.000000,0.808221,0.588879,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202530,0.000034,0.000008,1.000000;;, + 2400;16;0.555261,-0.831676,0.000000,0.000000,0.831676,0.555261,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202560,0.000015,0.000014,1.000000;;, + 2480;16;0.524198,-0.851596,-0.000000,0.000000,0.851596,0.524198,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202538,0.000019,0.000010,1.000000;;, + 2560;16;0.496174,-0.868223,-0.000000,0.000000,0.868223,0.496174,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202507,0.000032,0.000006,1.000000;;, + 2640;16;0.472349,-0.881412,-0.000000,0.000000,0.881412,0.472349,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202507,0.000040,0.000004,1.000000;;, + 2720;16;0.452028,-0.892004,-0.000000,0.000000,0.892004,0.452028,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202507,0.000024,0.000005,1.000000;;, + 2800;16;0.434868,-0.900494,0.000000,0.000000,0.900494,0.434868,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202492,0.000019,-0.000003,1.000000;;, + 2880;16;0.420585,-0.907253,0.000000,0.000000,0.907253,0.420585,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202515,0.000016,-0.000004,1.000000;;, + 2960;16;0.409422,-0.912345,-0.000000,0.000000,0.912345,0.409422,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202499,0.000036,-0.000002,1.000000;;, + 3040;16;0.399246,-0.916844,-0.000000,0.000000,0.916844,0.399247,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,0.000042,0.000018,1.000000;;, + 3120;16;0.386862,-0.922137,-0.000000,0.000000,0.922137,0.386862,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202522,0.000018,0.000006,1.000000;;, + 3200;16;0.375469,-0.926835,0.000000,0.000000,0.926835,0.375469,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,0.000028,0.000002,1.000000;;, + 3280;16;0.365296,-0.930891,0.000000,0.000000,0.930891,0.365296,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202515,0.000032,0.000009,1.000000;;, + 3360;16;0.362235,-0.932087,0.000000,0.000000,0.932087,0.362235,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,89.202507,0.000022,0.000010,1.000000;;, + 3440;16;0.371763,-0.928328,0.000000,0.000000,0.928328,0.371763,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,0.000029,0.000013,1.000000;;, + 3520;16;0.395109,-0.918634,0.000000,0.000000,0.918634,0.395109,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202530,0.000035,0.000017,1.000000;;, + 3600;16;0.437008,-0.899457,-0.000000,0.000000,0.899458,0.437008,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202507,0.000014,0.000007,1.000000;;, + 3680;16;0.490136,-0.871646,0.000000,0.000000,0.871646,0.490136,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202515,0.000030,0.000005,1.000000;;, + 3760;16;0.550422,-0.834887,0.000000,0.000000,0.834887,0.550422,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202538,0.000013,0.000007,1.000000;;, + 3840;16;0.612258,-0.790658,-0.000000,0.000000,0.790658,0.612258,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202507,0.000040,0.000007,1.000000;;, + 3920;16;0.671066,-0.741397,0.000000,0.000000,0.741397,0.671066,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202515,0.000025,-0.000001,1.000000;;, + 4000;16;0.723139,-0.690702,-0.000000,0.000000,0.690702,0.723139,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202507,0.000035,0.000003,1.000000;;, + 4080;16;0.764850,-0.644208,0.000000,0.000000,0.644208,0.764850,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202545,0.000027,0.000003,1.000000;;, + 4160;16;0.797213,-0.603698,-0.000000,0.000000,0.603698,0.797213,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202530,0.000025,0.000005,1.000000;;, + 4240;16;0.819067,-0.573698,-0.000000,0.000000,0.573698,0.819067,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202522,-0.000017,0.000003,1.000000;;, + 4320;16;0.834464,-0.551062,0.000000,0.000000,0.551062,0.834464,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202499,-0.000014,-0.000004,1.000000;;, + 4400;16;0.845668,-0.533709,-0.000000,0.000000,0.533709,0.845668,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202515,-0.000017,-0.000003,1.000000;;, + 4480;16;0.853964,-0.520332,-0.000000,0.000000,0.520332,0.853964,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202515,0.000008,0.000000,1.000000;;, + 4560;16;0.860620,-0.509247,-0.000000,0.000000,0.509247,0.860620,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,89.202522,-0.000018,0.000003,1.000000;;, + 4640;16;0.866783,-0.498686,0.000000,0.000000,0.498686,0.866783,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202522,-0.000006,0.000003,1.000000;;, + 4720;16;0.874184,-0.485595,0.000000,0.000000,0.485595,0.874184,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202507,-0.000021,-0.000002,1.000000;;, + 4800;16;0.881719,-0.471776,0.000000,0.000000,0.471776,0.881718,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,89.202530,-0.000026,0.000000,1.000000;;, + 4960;16;0.839302,-0.543666,-0.000000,0.000000,0.543666,0.839302,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,89.202522,0.000004,-0.000000,1.000000;;; + } + { Bip01_R_Forearm } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.999842,-0.009430,0.015054,0.000000,-0.015226,-0.018419,0.999714,0.000000,-0.009150,-0.999786,-0.018560,0.000000,61.671482,-0.000006,0.000000,1.000000;;, + 80;16;0.999827,-0.009472,0.015985,0.000000,-0.016159,-0.018507,0.999698,0.000000,-0.009174,-0.999784,-0.018657,0.000000,61.671463,-0.000007,-0.000003,1.000000;;, + 160;16;0.999812,-0.009515,0.016916,0.000000,-0.017091,-0.018595,0.999681,0.000000,-0.009198,-0.999782,-0.018754,0.000000,61.671459,0.000001,-0.000001,1.000000;;, + 240;16;0.999794,-0.009563,0.017906,0.000000,-0.018082,-0.018690,0.999662,0.000000,-0.009225,-0.999780,-0.018859,0.000000,61.671490,-0.000008,-0.000001,1.000000;;, + 320;16;0.999778,-0.009601,0.018778,0.000000,-0.018955,-0.018770,0.999644,0.000000,-0.009246,-0.999778,-0.018948,0.000000,61.671490,-0.000002,-0.000000,1.000000;;, + 400;16;0.999766,-0.009616,0.019365,0.000000,-0.019544,-0.018816,0.999632,0.000000,-0.009248,-0.999777,-0.019000,0.000000,61.671474,0.000002,0.000001,1.000000;;, + 480;16;0.999760,-0.009618,0.019699,0.000000,-0.019878,-0.018829,0.999625,0.000000,-0.009243,-0.999776,-0.019015,0.000000,61.671467,0.000002,0.000003,1.000000;;, + 560;16;0.999759,-0.009612,0.019718,0.000000,-0.019896,-0.018796,0.999625,0.000000,-0.009238,-0.999777,-0.018982,0.000000,61.671505,0.000017,0.000003,1.000000;;, + 640;16;0.999763,-0.009602,0.019530,0.000000,-0.019707,-0.018733,0.999630,0.000000,-0.009233,-0.999778,-0.018918,0.000000,61.671486,0.000014,0.000004,1.000000;;, + 720;16;0.999769,-0.009597,0.019230,0.000000,-0.019407,-0.018651,0.999638,0.000000,-0.009235,-0.999780,-0.018833,0.000000,61.671482,0.000011,0.000002,1.000000;;, + 800;16;0.999777,-0.009578,0.018802,0.000000,-0.018978,-0.018555,0.999648,0.000000,-0.009226,-0.999782,-0.018732,0.000000,61.671482,0.000007,-0.000003,1.000000;;, + 880;16;0.999788,-0.009534,0.018257,0.000000,-0.018430,-0.018450,0.999660,0.000000,-0.009194,-0.999784,-0.018622,0.000000,61.671471,0.000007,-0.000002,1.000000;;, + 960;16;0.999800,-0.009453,0.017605,0.000000,-0.017776,-0.018343,0.999674,0.000000,-0.009127,-0.999787,-0.018508,0.000000,61.671471,0.000002,-0.000001,1.000000;;, + 1040;16;0.999813,-0.009346,0.016926,0.000000,-0.017095,-0.018262,0.999687,0.000000,-0.009034,-0.999790,-0.018418,0.000000,61.671482,0.000002,0.000003,1.000000;;, + 1120;16;0.999830,-0.009133,0.016027,0.000000,-0.016191,-0.018147,0.999704,0.000000,-0.008839,-0.999794,-0.018292,0.000000,61.671497,-0.000000,0.000002,1.000000;;, + 1200;16;0.999854,-0.008707,0.014680,0.000000,-0.014835,-0.017926,0.999729,0.000000,-0.008441,-0.999801,-0.018053,0.000000,61.671471,-0.000005,-0.000001,1.000000;;, + 1280;16;0.999881,-0.008164,0.013070,0.000000,-0.013213,-0.017669,0.999757,0.000000,-0.007931,-0.999811,-0.017775,0.000000,61.671494,-0.000007,0.000003,1.000000;;, + 1360;16;0.999910,-0.007500,0.011158,0.000000,-0.011287,-0.017372,0.999785,0.000000,-0.007305,-0.999821,-0.017455,0.000000,61.671497,-0.000011,-0.000001,1.000000;;, + 1440;16;0.999932,-0.006905,0.009383,0.000000,-0.009501,-0.017186,0.999807,0.000000,-0.006743,-0.999828,-0.017250,0.000000,61.671490,-0.000003,0.000006,1.000000;;, + 1520;16;0.999945,-0.006558,0.008132,0.000000,-0.008244,-0.017252,0.999817,0.000000,-0.006417,-0.999830,-0.017305,0.000000,61.671482,0.000011,0.000003,1.000000;;, + 1600;16;0.999951,-0.006482,0.007524,0.000000,-0.007637,-0.017610,0.999816,0.000000,-0.006349,-0.999824,-0.017658,0.000000,61.671501,-0.000002,-0.000003,1.000000;;, + 1680;16;0.999945,-0.006802,0.007930,0.000000,-0.008054,-0.018389,0.999799,0.000000,-0.006654,-0.999808,-0.018443,0.000000,61.671494,0.000021,0.000014,1.000000;;, + 1760;16;0.999932,-0.007393,0.008977,0.000000,-0.009119,-0.019460,0.999769,0.000000,-0.007217,-0.999783,-0.019526,0.000000,61.671486,0.000015,0.000004,1.000000;;, + 1840;16;0.999911,-0.008187,0.010506,0.000000,-0.010674,-0.020765,0.999727,0.000000,-0.007967,-0.999751,-0.020850,0.000000,61.671494,-0.000007,0.000002,1.000000;;, + 1920;16;0.999883,-0.009146,0.012254,0.000000,-0.012455,-0.022217,0.999676,0.000000,-0.008871,-0.999711,-0.022328,0.000000,61.671494,0.000001,0.000009,1.000000;;, + 2000;16;0.999852,-0.010190,0.013890,0.000000,-0.014128,-0.023693,0.999619,0.000000,-0.009857,-0.999667,-0.023834,0.000000,61.671455,0.000022,0.000007,1.000000;;, + 2080;16;0.999816,-0.011372,0.015462,0.000000,-0.015745,-0.025248,0.999557,0.000000,-0.010977,-0.999617,-0.025422,0.000000,61.671490,-0.000011,-0.000000,1.000000;;, + 2160;16;0.999777,-0.012730,0.016875,0.000000,-0.017213,-0.026899,0.999490,0.000000,-0.012269,-0.999557,-0.027112,0.000000,61.671467,0.000003,-0.000003,1.000000;;, + 2240;16;0.999733,-0.014224,0.018223,0.000000,-0.018625,-0.028628,0.999417,0.000000,-0.013694,-0.999489,-0.028886,0.000000,61.671478,-0.000009,-0.000003,1.000000;;, + 2320;16;0.999681,-0.015881,0.019623,0.000000,-0.020101,-0.030473,0.999334,0.000000,-0.015272,-0.999409,-0.030783,0.000000,61.671467,0.000001,0.000011,1.000000;;, + 2400;16;0.999627,-0.017550,0.020908,0.000000,-0.021467,-0.032279,0.999248,0.000000,-0.016862,-0.999325,-0.032644,0.000000,61.671471,0.000003,0.000004,1.000000;;, + 2480;16;0.999577,-0.019084,0.021961,0.000000,-0.022599,-0.033901,0.999170,0.000000,-0.018323,-0.999243,-0.034318,0.000000,61.671463,-0.000016,-0.000008,1.000000;;, + 2560;16;0.999531,-0.020501,0.022751,0.000000,-0.023466,-0.035354,0.999099,0.000000,-0.019679,-0.999165,-0.035819,0.000000,61.671486,0.000012,0.000005,1.000000;;, + 2640;16;0.999495,-0.021759,0.023170,0.000000,-0.023956,-0.036589,0.999043,0.000000,-0.020891,-0.999094,-0.037092,0.000000,61.671482,-0.000005,-0.000001,1.000000;;, + 2720;16;0.999466,-0.022900,0.023327,0.000000,-0.024179,-0.037656,0.998998,0.000000,-0.021999,-0.999028,-0.038190,0.000000,61.671471,0.000016,0.000004,1.000000;;, + 2800;16;0.999442,-0.023976,0.023270,0.000000,-0.024185,-0.038610,0.998962,0.000000,-0.023053,-0.998967,-0.039168,0.000000,61.671474,0.000007,-0.000001,1.000000;;, + 2880;16;0.999423,-0.024915,0.023070,0.000000,-0.024041,-0.039392,0.998935,0.000000,-0.023979,-0.998913,-0.039969,0.000000,61.671463,0.000002,-0.000002,1.000000;;, + 2960;16;0.999411,-0.025649,0.022815,0.000000,-0.023829,-0.039954,0.998917,0.000000,-0.024709,-0.998872,-0.040542,0.000000,61.671497,0.000005,0.000003,1.000000;;, + 3040;16;0.999403,-0.026214,0.022511,0.000000,-0.023557,-0.040321,0.998909,0.000000,-0.025277,-0.998843,-0.040915,0.000000,61.671467,-0.000020,-0.000016,1.000000;;, + 3120;16;0.999399,-0.026629,0.022214,0.000000,-0.023283,-0.040508,0.998908,0.000000,-0.025700,-0.998824,-0.041104,0.000000,61.671455,-0.000006,0.000003,1.000000;;, + 3200;16;0.999399,-0.026876,0.021870,0.000000,-0.022949,-0.040500,0.998916,0.000000,-0.025961,-0.998818,-0.041092,0.000000,61.671474,-0.000005,-0.000005,1.000000;;, + 3280;16;0.999406,-0.026975,0.021446,0.000000,-0.022524,-0.040312,0.998933,0.000000,-0.026081,-0.998823,-0.040896,0.000000,61.671497,-0.000002,-0.000003,1.000000;;, + 3360;16;0.999421,-0.026824,0.020931,0.000000,-0.021991,-0.039871,0.998963,0.000000,-0.025962,-0.998845,-0.040438,0.000000,61.671486,-0.000007,-0.000006,1.000000;;, + 3440;16;0.999446,-0.026350,0.020320,0.000000,-0.021343,-0.039125,0.999006,0.000000,-0.025529,-0.998887,-0.039666,0.000000,61.671463,-0.000008,-0.000006,1.000000;;, + 3520;16;0.999483,-0.025496,0.019563,0.000000,-0.020524,-0.038022,0.999066,0.000000,-0.024729,-0.998952,-0.038526,0.000000,61.671463,-0.000012,-0.000017,1.000000;;, + 3600;16;0.999536,-0.024132,0.018581,0.000000,-0.019454,-0.036450,0.999146,0.000000,-0.023434,-0.999044,-0.036903,0.000000,61.671471,-0.000009,-0.000004,1.000000;;, + 3680;16;0.999597,-0.022410,0.017443,0.000000,-0.018211,-0.034542,0.999237,0.000000,-0.021791,-0.999152,-0.034936,0.000000,61.671455,0.000011,-0.000003,1.000000;;, + 3760;16;0.999662,-0.020385,0.016149,0.000000,-0.016803,-0.032340,0.999336,0.000000,-0.019849,-0.999269,-0.032671,0.000000,61.671494,0.000001,-0.000004,1.000000;;, + 3840;16;0.999724,-0.018232,0.014819,0.000000,-0.015362,-0.030006,0.999432,0.000000,-0.017777,-0.999383,-0.030278,0.000000,61.671478,0.000009,-0.000003,1.000000;;, + 3920;16;0.999779,-0.016095,0.013546,0.000000,-0.013988,-0.027677,0.999519,0.000000,-0.015712,-0.999487,-0.027896,0.000000,61.671463,0.000024,0.000011,1.000000;;, + 4000;16;0.999823,-0.014117,0.012423,0.000000,-0.012780,-0.025486,0.999593,0.000000,-0.013794,-0.999575,-0.025662,0.000000,61.671501,-0.000024,0.000006,1.000000;;, + 4080;16;0.999855,-0.012481,0.011565,0.000000,-0.011857,-0.023609,0.999651,0.000000,-0.012204,-0.999643,-0.023753,0.000000,61.671471,-0.000031,-0.000007,1.000000;;, + 4160;16;0.999877,-0.011208,0.011004,0.000000,-0.011249,-0.022065,0.999693,0.000000,-0.010962,-0.999694,-0.022188,0.000000,61.671509,-0.000053,-0.000012,1.000000;;, + 4240;16;0.999887,-0.010432,0.010846,0.000000,-0.011063,-0.020981,0.999719,0.000000,-0.010202,-0.999725,-0.021094,0.000000,61.671482,0.000002,-0.000003,1.000000;;, + 4320;16;0.999890,-0.009995,0.010980,0.000000,-0.011180,-0.020212,0.999733,0.000000,-0.009771,-0.999746,-0.020321,0.000000,61.671471,0.000013,0.000006,1.000000;;, + 4400;16;0.999887,-0.009808,0.011352,0.000000,-0.011543,-0.019672,0.999740,0.000000,-0.009583,-0.999758,-0.019783,0.000000,61.671455,0.000016,0.000008,1.000000;;, + 4480;16;0.999881,-0.009799,0.011888,0.000000,-0.012076,-0.019296,0.999741,0.000000,-0.009568,-0.999766,-0.019412,0.000000,61.671490,-0.000029,-0.000001,1.000000;;, + 4560;16;0.999873,-0.009892,0.012518,0.000000,-0.012704,-0.019013,0.999739,0.000000,-0.009651,-0.999770,-0.019136,0.000000,61.671459,0.000019,0.000000,1.000000;;, + 4640;16;0.999863,-0.010010,0.013171,0.000000,-0.013357,-0.018754,0.999735,0.000000,-0.009760,-0.999774,-0.018885,0.000000,61.671463,-0.000028,-0.000006,1.000000;;, + 4720;16;0.999855,-0.010026,0.013731,0.000000,-0.013913,-0.018401,0.999734,0.000000,-0.009770,-0.999780,-0.018538,0.000000,61.671471,0.000000,0.000002,1.000000;;, + 4800;16;0.999848,-0.010016,0.014267,0.000000,-0.014446,-0.018025,0.999733,0.000000,-0.009756,-0.999787,-0.018167,0.000000,61.671482,0.000009,-0.000000,1.000000;;, + 4960;16;0.999842,-0.009430,0.015054,0.000000,-0.015226,-0.018419,0.999714,0.000000,-0.009150,-0.999786,-0.018560,0.000000,61.671482,-0.000006,0.000000,1.000000;;; + } + { Bip01_R_Hand } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410504,3.054970,10.755419,1.000000;;, + 80;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410502,3.054969,10.755422,1.000000;;, + 160;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410496,3.054973,10.755424,1.000000;;, + 240;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410510,3.054973,10.755419,1.000000;;, + 320;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410503,3.054971,10.755418,1.000000;;, + 400;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410501,3.054970,10.755423,1.000000;;, + 480;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410504,3.054974,10.755414,1.000000;;, + 560;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410506,3.054973,10.755427,1.000000;;, + 640;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410496,3.054969,10.755433,1.000000;;, + 720;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410497,3.054971,10.755427,1.000000;;, + 800;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410497,3.054971,10.755422,1.000000;;, + 880;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410493,3.054971,10.755424,1.000000;;, + 960;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410510,3.054967,10.755420,1.000000;;, + 1040;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410503,3.054971,10.755429,1.000000;;, + 1120;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410495,3.054971,10.755433,1.000000;;, + 1200;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410502,3.054972,10.755430,1.000000;;, + 1280;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410520,3.054972,10.755430,1.000000;;, + 1360;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410509,3.054971,10.755430,1.000000;;, + 1440;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410509,3.054970,10.755424,1.000000;;, + 1520;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410499,3.054962,10.755417,1.000000;;, + 1600;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410498,3.054971,10.755423,1.000000;;, + 1680;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410508,3.054972,10.755428,1.000000;;, + 1760;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410496,3.054977,10.755415,1.000000;;, + 1840;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410498,3.054973,10.755422,1.000000;;, + 1920;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410505,3.054962,10.755414,1.000000;;, + 2000;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410492,3.054979,10.755416,1.000000;;, + 2080;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410499,3.054971,10.755430,1.000000;;, + 2160;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410506,3.054967,10.755430,1.000000;;, + 2240;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410517,3.054963,10.755426,1.000000;;, + 2320;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410503,3.054976,10.755416,1.000000;;, + 2400;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410486,3.054972,10.755421,1.000000;;, + 2480;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410499,3.054968,10.755430,1.000000;;, + 2560;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410509,3.054973,10.755420,1.000000;;, + 2640;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410502,3.054973,10.755420,1.000000;;, + 2720;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410489,3.054962,10.755431,1.000000;;, + 2800;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410504,3.054969,10.755413,1.000000;;, + 2880;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410510,3.054960,10.755435,1.000000;;, + 2960;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410513,3.054971,10.755418,1.000000;;, + 3040;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410494,3.054973,10.755432,1.000000;;, + 3120;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410505,3.054975,10.755428,1.000000;;, + 3200;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410489,3.054979,10.755415,1.000000;;, + 3280;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410505,3.054979,10.755413,1.000000;;, + 3360;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410506,3.054971,10.755419,1.000000;;, + 3440;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410515,3.054965,10.755436,1.000000;;, + 3520;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410480,3.054987,10.755407,1.000000;;, + 3600;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410487,3.054979,10.755419,1.000000;;, + 3680;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410525,3.054966,10.755445,1.000000;;, + 3760;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410490,3.054978,10.755404,1.000000;;, + 3840;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410493,3.054979,10.755408,1.000000;;, + 3920;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410492,3.054971,10.755415,1.000000;;, + 4000;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410519,3.054965,10.755444,1.000000;;, + 4080;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410522,3.054968,10.755445,1.000000;;, + 4160;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410519,3.054975,10.755439,1.000000;;, + 4240;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410499,3.054971,10.755405,1.000000;;, + 4320;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410506,3.054970,10.755424,1.000000;;, + 4400;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410498,3.054973,10.755425,1.000000;;, + 4480;16;0.713247,-0.002867,0.700907,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410496,3.054969,10.755423,1.000000;;, + 4560;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410496,3.054974,10.755420,1.000000;;, + 4640;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410505,3.054972,10.755441,1.000000;;, + 4720;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410500,3.054973,10.755397,1.000000;;, + 4800;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410507,3.054970,10.755430,1.000000;;, + 4960;16;0.713247,-0.002867,0.700906,0.000000,-0.700353,-0.042855,0.712509,0.000000,0.027995,-0.999077,-0.032574,0.000000,12.410504,3.054970,10.755419,1.000000;;; + } + { Bip01_R_Finger0 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075052,0.000002,0.000001,1.000000;;, + 80;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075058,-0.000000,0.000002,1.000000;;, + 160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075060,0.000007,-0.000002,1.000000;;, + 240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075061,0.000001,0.000002,1.000000;;, + 320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075058,-0.000003,0.000001,1.000000;;, + 400;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075050,0.000010,0.000004,1.000000;;, + 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075057,-0.000000,0.000002,1.000000;;, + 560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075052,-0.000008,0.000006,1.000000;;, + 640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075049,-0.000002,-0.000000,1.000000;;, + 720;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075055,-0.000000,0.000001,1.000000;;, + 800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075058,0.000006,-0.000003,1.000000;;, + 880;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075056,0.000002,0.000001,1.000000;;, + 960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075064,0.000012,-0.000004,1.000000;;, + 1040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075058,0.000012,-0.000001,1.000000;;, + 1120;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075068,-0.000011,-0.000001,1.000000;;, + 1200;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075061,0.000005,0.000002,1.000000;;, + 1280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075065,0.000005,0.000002,1.000000;;, + 1360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075057,-0.000009,-0.000001,1.000000;;, + 1440;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075051,0.000008,0.000002,1.000000;;, + 1520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075061,-0.000001,-0.000004,1.000000;;, + 1600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075050,-0.000008,-0.000012,1.000000;;, + 1680;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075062,-0.000003,0.000002,1.000000;;, + 1760;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075061,0.000004,0.000001,1.000000;;, + 1840;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075066,-0.000003,0.000002,1.000000;;, + 1920;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075069,0.000007,-0.000002,1.000000;;, + 2000;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075076,0.000014,0.000012,1.000000;;, + 2080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075056,0.000002,-0.000004,1.000000;;, + 2160;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075055,-0.000008,-0.000001,1.000000;;, + 2240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075054,-0.000003,-0.000007,1.000000;;, + 2320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075050,0.000007,-0.000004,1.000000;;, + 2400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075045,-0.000015,-0.000011,1.000000;;, + 2480;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075078,0.000018,0.000016,1.000000;;, + 2560;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075087,0.000001,0.000011,1.000000;;, + 2640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075067,0.000012,0.000005,1.000000;;, + 2720;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075042,0.000007,-0.000007,1.000000;;, + 2800;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075064,0.000019,0.000008,1.000000;;, + 2880;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075041,0.000003,-0.000016,1.000000;;, + 2960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075039,0.000007,-0.000012,1.000000;;, + 3040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075060,0.000024,0.000005,1.000000;;, + 3120;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075059,-0.000010,-0.000001,1.000000;;, + 3200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075027,0.000053,-0.000005,1.000000;;, + 3280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075060,-0.000006,-0.000005,1.000000;;, + 3360;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075058,0.000014,0.000003,1.000000;;, + 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075065,-0.000020,-0.000003,1.000000;;, + 3520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075032,0.000007,-0.000006,1.000000;;, + 3600;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075042,0.000017,0.000001,1.000000;;, + 3680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075056,-0.000013,-0.000005,1.000000;;, + 3760;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075061,0.000009,0.000004,1.000000;;, + 3840;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075056,-0.000006,-0.000002,1.000000;;, + 3920;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075090,0.000000,0.000008,1.000000;;, + 4000;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075047,0.000004,0.000001,1.000000;;, + 4080;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075047,-0.000000,-0.000001,1.000000;;, + 4160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075092,0.000014,0.000012,1.000000;;, + 4240;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075029,-0.000006,-0.000009,1.000000;;, + 4320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075057,-0.000005,-0.000004,1.000000;;, + 4400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075061,-0.000004,-0.000000,1.000000;;, + 4480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.075070,0.000014,0.000009,1.000000;;, + 4560;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075041,-0.000008,-0.000004,1.000000;;, + 4640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075053,0.000000,-0.000002,1.000000;;, + 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.075084,0.000022,-0.000000,1.000000;;, + 4800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.075073,0.000020,-0.000001,1.000000;;, + 4960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.075052,0.000002,0.000001,1.000000;;; + } + { Bip01_R_Finger01 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961570,0.000006,0.000001,1.000000;;, + 80;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961572,-0.000003,0.000001,1.000000;;, + 160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961579,-0.000014,-0.000005,1.000000;;, + 240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961579,0.000003,-0.000004,1.000000;;, + 320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961572,-0.000001,-0.000001,1.000000;;, + 400;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961577,-0.000006,-0.000002,1.000000;;, + 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961569,0.000007,-0.000003,1.000000;;, + 560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961569,0.000006,-0.000003,1.000000;;, + 640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961580,-0.000004,0.000001,1.000000;;, + 720;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961580,0.000001,0.000001,1.000000;;, + 800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961578,-0.000004,0.000001,1.000000;;, + 880;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961586,-0.000004,0.000002,1.000000;;, + 960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961578,0.000002,0.000001,1.000000;;, + 1040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961571,-0.000016,-0.000002,1.000000;;, + 1120;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961569,-0.000003,-0.000004,1.000000;;, + 1200;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961572,-0.000011,0.000003,1.000000;;, + 1280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961568,0.000003,-0.000002,1.000000;;, + 1360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961584,-0.000004,-0.000001,1.000000;;, + 1440;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961586,0.000001,0.000002,1.000000;;, + 1520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961574,-0.000001,-0.000001,1.000000;;, + 1600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961571,-0.000003,0.000000,1.000000;;, + 1680;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961561,-0.000015,-0.000013,1.000000;;, + 1760;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961587,0.000014,0.000007,1.000000;;, + 1840;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961578,0.000000,0.000005,1.000000;;, + 1920;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961569,-0.000001,-0.000000,1.000000;;, + 2000;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961568,-0.000005,-0.000007,1.000000;;, + 2080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961582,-0.000002,0.000007,1.000000;;, + 2160;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961592,0.000002,0.000007,1.000000;;, + 2240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961571,0.000001,0.000002,1.000000;;, + 2320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961581,-0.000002,0.000007,1.000000;;, + 2400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961587,0.000007,0.000005,1.000000;;, + 2480;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961561,-0.000005,-0.000009,1.000000;;, + 2560;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961563,-0.000000,-0.000002,1.000000;;, + 2640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961570,0.000003,-0.000004,1.000000;;, + 2720;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961582,-0.000004,0.000006,1.000000;;, + 2800;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961578,-0.000005,-0.000001,1.000000;;, + 2880;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961594,0.000013,0.000015,1.000000;;, + 2960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961571,-0.000003,0.000001,1.000000;;, + 3040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961572,-0.000013,-0.000007,1.000000;;, + 3120;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961565,-0.000008,-0.000008,1.000000;;, + 3200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961592,-0.000029,0.000004,1.000000;;, + 3280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961550,0.000049,0.000002,1.000000;;, + 3360;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961544,0.000018,-0.000008,1.000000;;, + 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961576,0.000012,0.000001,1.000000;;, + 3520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961610,0.000008,0.000017,1.000000;;, + 3600;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961546,0.000012,-0.000004,1.000000;;, + 3680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961613,-0.000003,0.000015,1.000000;;, + 3760;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961617,0.000004,0.000010,1.000000;;, + 3840;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961557,-0.000016,-0.000011,1.000000;;, + 3920;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961516,-0.000004,-0.000013,1.000000;;, + 4000;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961571,-0.000010,-0.000010,1.000000;;, + 4080;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961620,0.000005,0.000005,1.000000;;, + 4160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961563,-0.000004,-0.000014,1.000000;;, + 4240;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961597,0.000014,0.000007,1.000000;;, + 4320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961577,0.000003,0.000003,1.000000;;, + 4400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961582,0.000008,-0.000003,1.000000;;, + 4480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,5.961578,0.000009,0.000002,1.000000;;, + 4560;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961586,0.000002,-0.000004,1.000000;;, + 4640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961611,0.000023,0.000002,1.000000;;, + 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,5.961559,-0.000019,-0.000006,1.000000;;, + 4800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,5.961570,-0.000010,-0.000003,1.000000;;, + 4960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,5.961570,0.000006,0.000001,1.000000;;; + } + { Bip01_R_Finger02 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961581,-0.000005,-0.000000,1.000000;;, + 80;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961575,0.000001,0.000000,1.000000;;, + 160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961576,0.000007,-0.000000,1.000000;;, + 240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961576,0.000002,-0.000002,1.000000;;, + 320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961573,-0.000000,-0.000002,1.000000;;, + 400;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961582,-0.000001,-0.000004,1.000000;;, + 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961582,-0.000001,0.000002,1.000000;;, + 560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,5.961582,-0.000003,-0.000002,1.000000;;, + 640;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,5.961580,-0.000005,0.000002,1.000000;;, + 720;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961580,0.000001,0.000001,1.000000;;, + 800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961578,0.000001,0.000002,1.000000;;, + 880;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961575,0.000007,0.000002,1.000000;;, + 960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961577,0.000006,0.000002,1.000000;;, + 1040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961578,-0.000004,0.000001,1.000000;;, + 1120;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961572,0.000001,-0.000000,1.000000;;, + 1200;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961593,-0.000010,0.000001,1.000000;;, + 1280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961579,-0.000002,0.000000,1.000000;;, + 1360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961573,0.000011,0.000003,1.000000;;, + 1440;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,5.961576,-0.000006,-0.000001,1.000000;;, + 1520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961574,-0.000000,-0.000001,1.000000;;, + 1600;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961571,-0.000001,0.000001,1.000000;;, + 1680;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961578,0.000010,0.000006,1.000000;;, + 1760;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961567,-0.000012,-0.000007,1.000000;;, + 1840;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961578,0.000001,0.000001,1.000000;;, + 1920;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961568,-0.000001,-0.000003,1.000000;;, + 2000;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961567,-0.000005,-0.000003,1.000000;;, + 2080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961581,-0.000001,-0.000001,1.000000;;, + 2160;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961565,0.000005,-0.000004,1.000000;;, + 2240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961573,0.000003,-0.000001,1.000000;;, + 2320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961581,-0.000002,0.000000,1.000000;;, + 2400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961590,0.000008,0.000005,1.000000;;, + 2480;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961561,-0.000005,-0.000011,1.000000;;, + 2560;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961563,-0.000000,-0.000004,1.000000;;, + 2640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961572,0.000001,0.000002,1.000000;;, + 2720;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961587,-0.000002,0.000000,1.000000;;, + 2800;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961576,-0.000006,-0.000003,1.000000;;, + 2880;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961582,-0.000011,0.000001,1.000000;;, + 2960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961596,-0.000020,0.000010,1.000000;;, + 3040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961575,-0.000013,-0.000003,1.000000;;, + 3120;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961577,0.000014,0.000005,1.000000;;, + 3200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961589,-0.000028,-0.000002,1.000000;;, + 3280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961583,-0.000012,0.000003,1.000000;;, + 3360;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961590,-0.000017,0.000003,1.000000;;, + 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961579,0.000012,0.000004,1.000000;;, + 3520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961597,-0.000018,0.000009,1.000000;;, + 3600;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961603,-0.000013,0.000008,1.000000;;, + 3680;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961560,0.000020,0.000000,1.000000;;, + 3760;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961558,-0.000007,-0.000006,1.000000;;, + 3840;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961568,0.000012,-0.000001,1.000000;;, + 3920;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961574,0.000002,0.000012,1.000000;;, + 4000;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,5.961567,-0.000001,0.000005,1.000000;;, + 4080;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961557,-0.000003,0.000003,1.000000;;, + 4160;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961563,-0.000009,0.000006,1.000000;;, + 4240;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961600,-0.000002,0.000010,1.000000;;, + 4320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961576,0.000003,0.000009,1.000000;;, + 4400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961584,0.000005,0.000009,1.000000;;, + 4480;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,5.961586,-0.000003,0.000008,1.000000;;, + 4560;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,5.961587,0.000002,0.000010,1.000000;;, + 4640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961561,-0.000013,0.000004,1.000000;;, + 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,5.961559,-0.000019,0.000011,1.000000;;, + 4800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,5.961568,-0.000011,0.000000,1.000000;;, + 4960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,5.961581,-0.000005,-0.000000,1.000000;;; + } + { Dummy01 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087999,0.354686,0.505020,1.000000;;, + 80;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088005,0.354684,0.505019,1.000000;;, + 160;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087999,0.354688,0.505024,1.000000;;, + 240;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088009,0.354687,0.505020,1.000000;;, + 320;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088003,0.354686,0.505027,1.000000;;, + 400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087999,0.354684,0.505021,1.000000;;, + 480;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088009,0.354687,0.505025,1.000000;;, + 560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088003,0.354688,0.505028,1.000000;;, + 640;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087997,0.354688,0.505030,1.000000;;, + 720;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087994,0.354686,0.505022,1.000000;;, + 800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087999,0.354685,0.505018,1.000000;;, + 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087994,0.354686,0.505031,1.000000;;, + 960;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088005,0.354684,0.505028,1.000000;;, + 1040;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088007,0.354689,0.505018,1.000000;;, + 1120;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088001,0.354687,0.505025,1.000000;;, + 1200;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087996,0.354690,0.505031,1.000000;;, + 1280;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087994,0.354685,0.505033,1.000000;;, + 1360;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088009,0.354686,0.505025,1.000000;;, + 1440;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088003,0.354692,0.505019,1.000000;;, + 1520;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087997,0.354684,0.505028,1.000000;;, + 1600;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088011,0.354688,0.505035,1.000000;;, + 1680;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088003,0.354685,0.505040,1.000000;;, + 1760;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088001,0.354688,0.505032,1.000000;;, + 1840;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088013,0.354688,0.505036,1.000000;;, + 1920;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087994,0.354683,0.505022,1.000000;;, + 2000;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088003,0.354689,0.505030,1.000000;;, + 2080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087988,0.354692,0.505028,1.000000;;, + 2160;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087992,0.354689,0.505020,1.000000;;, + 2240;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088015,0.354682,0.505032,1.000000;;, + 2320;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087988,0.354681,0.505026,1.000000;;, + 2400;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087994,0.354679,0.505042,1.000000;;, + 2480;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087996,0.354681,0.505034,1.000000;;, + 2560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088009,0.354687,0.505028,1.000000;;, + 2640;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088013,0.354678,0.505034,1.000000;;, + 2720;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088007,0.354680,0.505031,1.000000;;, + 2800;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087994,0.354681,0.505026,1.000000;;, + 2880;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087967,0.354697,0.505018,1.000000;;, + 2960;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088001,0.354682,0.505031,1.000000;;, + 3040;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087996,0.354690,0.505022,1.000000;;, + 3120;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088024,0.354678,0.505043,1.000000;;, + 3200;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087999,0.354694,0.505016,1.000000;;, + 3280;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088015,0.354683,0.505044,1.000000;;, + 3360;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088017,0.354681,0.505035,1.000000;;, + 3440;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088024,0.354685,0.505028,1.000000;;, + 3520;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088020,0.354692,0.505020,1.000000;;, + 3600;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087996,0.354696,0.505013,1.000000;;, + 3680;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087994,0.354693,0.505020,1.000000;;, + 3760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087996,0.354686,0.505022,1.000000;;, + 3840;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088005,0.354690,0.505030,1.000000;;, + 3920;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088001,0.354686,0.505025,1.000000;;, + 4000;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087980,0.354687,0.505010,1.000000;;, + 4080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088009,0.354684,0.505041,1.000000;;, + 4160;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087996,0.354690,0.505006,1.000000;;, + 4240;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087988,0.354687,0.505018,1.000000;;, + 4320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087992,0.354683,0.505023,1.000000;;, + 4400;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.087997,0.354690,0.505014,1.000000;;, + 4480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.088001,0.354687,0.505015,1.000000;;, + 4560;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088013,0.354685,0.505053,1.000000;;, + 4640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,-0.000000,-0.000796,1.000000,0.000000,24.088007,0.354691,0.505029,1.000000;;, + 4720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087994,0.354688,0.505030,1.000000;;, + 4800;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087997,0.354687,0.504994,1.000000;;, + 4960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000796,0.000000,0.000000,-0.000796,1.000000,0.000000,24.087999,0.354686,0.505020,1.000000;;; + } + { Bip01_R_Finger1 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300053,-0.000001,-0.000002,1.000000;;, + 80;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300060,0.000002,-0.000000,1.000000;;, + 160;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300057,-0.000002,-0.000002,1.000000;;, + 240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300056,0.000004,0.000001,1.000000;;, + 320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300049,0.000001,-0.000006,1.000000;;, + 400;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300044,0.000001,-0.000001,1.000000;;, + 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300066,0.000002,0.000005,1.000000;;, + 560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300056,0.000002,0.000000,1.000000;;, + 640;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300058,0.000001,0.000002,1.000000;;, + 720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300049,0.000002,-0.000004,1.000000;;, + 800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300060,-0.000003,-0.000002,1.000000;;, + 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300063,0.000001,-0.000012,1.000000;;, + 960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300061,-0.000000,-0.000003,1.000000;;, + 1040;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300055,-0.000001,0.000002,1.000000;;, + 1120;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300057,0.000000,0.000003,1.000000;;, + 1200;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300050,0.000003,0.000002,1.000000;;, + 1280;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300063,0.000001,0.000010,1.000000;;, + 1360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300057,0.000005,-0.000010,1.000000;;, + 1440;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300047,-0.000002,0.000016,1.000000;;, + 1520;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300065,-0.000002,-0.000005,1.000000;;, + 1600;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300051,0.000005,0.000003,1.000000;;, + 1680;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300046,0.000004,-0.000021,1.000000;;, + 1760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300056,-0.000003,0.000006,1.000000;;, + 1840;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300049,-0.000001,0.000003,1.000000;;, + 1920;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300052,0.000002,-0.000008,1.000000;;, + 2000;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300055,-0.000001,0.000007,1.000000;;, + 2080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300063,0.000004,0.000005,1.000000;;, + 2160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300055,-0.000006,0.000004,1.000000;;, + 2240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300035,-0.000005,-0.000005,1.000000;;, + 2320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300053,-0.000001,0.000010,1.000000;;, + 2400;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300064,0.000002,0.000004,1.000000;;, + 2480;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300051,-0.000006,0.000011,1.000000;;, + 2560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300082,-0.000002,-0.000012,1.000000;;, + 2640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300029,-0.000001,0.000011,1.000000;;, + 2720;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300046,-0.000002,0.000013,1.000000;;, + 2800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300031,-0.000002,0.000014,1.000000;;, + 2880;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300129,-0.000010,-0.000001,1.000000;;, + 2960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300054,0.000002,-0.000004,1.000000;;, + 3040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300058,0.000006,-0.000007,1.000000;;, + 3120;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300048,-0.000009,0.000023,1.000000;;, + 3200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300021,0.000013,-0.000009,1.000000;;, + 3280;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300056,-0.000000,-0.000001,1.000000;;, + 3360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300068,0.000002,0.000001,1.000000;;, + 3440;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300078,-0.000014,0.000021,1.000000;;, + 3520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300060,-0.000001,-0.000000,1.000000;;, + 3600;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300076,-0.000000,0.000011,1.000000;;, + 3680;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300021,0.000012,-0.000014,1.000000;;, + 3760;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300063,0.000003,-0.000001,1.000000;;, + 3840;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300073,-0.000002,0.000013,1.000000;;, + 3920;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300053,0.000004,-0.000008,1.000000;;, + 4000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300080,-0.000001,0.000014,1.000000;;, + 4080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300086,-0.000009,0.000042,1.000000;;, + 4160;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300044,0.000002,-0.000028,1.000000;;, + 4240;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300059,-0.000001,-0.000010,1.000000;;, + 4320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300069,-0.000008,0.000042,1.000000;;, + 4400;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300056,-0.000006,0.000022,1.000000;;, + 4480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,9.300056,0.000002,-0.000013,1.000000;;, + 4560;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300052,-0.000000,-0.000015,1.000000;;, + 4640;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,9.300047,-0.000003,-0.000012,1.000000;;, + 4720;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300055,-0.000005,0.000008,1.000000;;, + 4800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,9.300055,-0.000003,-0.000036,1.000000;;, + 4960;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,9.300053,-0.000001,-0.000002,1.000000;;; + } + { Bip01_R_Finger11 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850059,0.000001,-0.000003,1.000000;;, + 80;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850061,-0.000004,0.000004,1.000000;;, + 160;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850073,0.000004,0.000004,1.000000;;, + 240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850068,-0.000001,0.000002,1.000000;;, + 320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850068,0.000000,0.000004,1.000000;;, + 400;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850073,0.000004,0.000001,1.000000;;, + 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850047,-0.000004,-0.000011,1.000000;;, + 560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850059,-0.000003,0.000004,1.000000;;, + 640;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850069,0.000001,0.000000,1.000000;;, + 720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850069,-0.000003,-0.000000,1.000000;;, + 800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850062,0.000003,-0.000000,1.000000;;, + 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850066,-0.000001,0.000004,1.000000;;, + 960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850061,-0.000002,-0.000004,1.000000;;, + 1040;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850067,0.000000,0.000001,1.000000;;, + 1120;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850071,0.000001,0.000002,1.000000;;, + 1200;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850074,-0.000001,0.000011,1.000000;;, + 1280;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850064,0.000000,-0.000003,1.000000;;, + 1360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850067,-0.000003,0.000001,1.000000;;, + 1440;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850084,0.000001,-0.000006,1.000000;;, + 1520;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850065,0.000003,0.000004,1.000000;;, + 1600;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850064,-0.000001,-0.000003,1.000000;;, + 1680;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850087,-0.000010,0.000038,1.000000;;, + 1760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850060,-0.000001,0.000010,1.000000;;, + 1840;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850059,0.000010,-0.000017,1.000000;;, + 1920;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850066,0.000002,0.000002,1.000000;;, + 2000;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850079,-0.000004,0.000000,1.000000;;, + 2080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850064,-0.000008,0.000001,1.000000;;, + 2160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850057,0.000004,-0.000001,1.000000;;, + 2240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850079,0.000004,0.000005,1.000000;;, + 2320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850055,0.000003,-0.000010,1.000000;;, + 2400;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850050,0.000010,-0.000009,1.000000;;, + 2480;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850052,0.000010,-0.000012,1.000000;;, + 2560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850057,-0.000001,0.000003,1.000000;;, + 2640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850087,0.000005,-0.000009,1.000000;;, + 2720;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850062,0.000001,-0.000002,1.000000;;, + 2800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850121,-0.000019,-0.000002,1.000000;;, + 2880;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.849994,0.000003,0.000005,1.000000;;, + 2960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850060,0.000000,0.000005,1.000000;;, + 3040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850060,-0.000005,0.000007,1.000000;;, + 3120;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850054,0.000008,-0.000009,1.000000;;, + 3200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850092,-0.000008,0.000003,1.000000;;, + 3280;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850080,-0.000001,0.000001,1.000000;;, + 3360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850073,0.000003,-0.000010,1.000000;;, + 3440;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850039,0.000007,-0.000015,1.000000;;, + 3520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850013,0.000004,-0.000013,1.000000;;, + 3600;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850048,-0.000008,0.000004,1.000000;;, + 3680;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850091,-0.000011,0.000002,1.000000;;, + 3760;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850017,0.000005,-0.000012,1.000000;;, + 3840;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850051,-0.000000,-0.000004,1.000000;;, + 3920;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850064,-0.000007,-0.000001,1.000000;;, + 4000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850058,-0.000002,-0.000005,1.000000;;, + 4080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850063,0.000002,-0.000028,1.000000;;, + 4160;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850079,0.000001,0.000024,1.000000;;, + 4240;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850040,0.000002,-0.000030,1.000000;;, + 4320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850048,0.000017,-0.000079,1.000000;;, + 4400;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850065,0.000008,-0.000017,1.000000;;, + 4480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,10.850068,0.000002,0.000024,1.000000;;, + 4560;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850074,-0.000003,0.000020,1.000000;;, + 4640;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,10.850078,-0.000001,0.000023,1.000000;;, + 4720;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850074,-0.000001,0.000017,1.000000;;, + 4800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,10.850063,0.000009,0.000012,1.000000;;, + 4960;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,10.850059,0.000001,-0.000003,1.000000;;; + } + { Bip01_R_Finger12 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207767,0.000001,-0.000003,1.000000;;, + 80;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207771,0.000001,-0.000006,1.000000;;, + 160;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207757,-0.000001,-0.000003,1.000000;;, + 240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207756,-0.000003,-0.000002,1.000000;;, + 320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207762,0.000000,-0.000007,1.000000;;, + 400;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207765,-0.000001,0.000005,1.000000;;, + 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207770,0.000001,0.000002,1.000000;;, + 560;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207768,0.000000,-0.000007,1.000000;;, + 640;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207765,0.000001,0.000000,1.000000;;, + 720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207763,0.000001,0.000001,1.000000;;, + 800;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207768,-0.000003,0.000004,1.000000;;, + 880;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207760,-0.000002,-0.000001,1.000000;;, + 960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207767,0.000003,0.000003,1.000000;;, + 1040;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207764,0.000003,0.000001,1.000000;;, + 1120;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207767,0.000001,-0.000007,1.000000;;, + 1200;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207765,-0.000001,-0.000018,1.000000;;, + 1280;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207752,0.000002,-0.000019,1.000000;;, + 1360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207767,0.000003,-0.000009,1.000000;;, + 1440;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207752,0.000006,-0.000018,1.000000;;, + 1520;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207759,0.000003,-0.000014,1.000000;;, + 1600;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207762,0.000001,-0.000006,1.000000;;, + 1680;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207762,0.000009,-0.000012,1.000000;;, + 1760;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207764,0.000005,-0.000008,1.000000;;, + 1840;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207767,-0.000012,0.000006,1.000000;;, + 1920;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207767,-0.000005,0.000009,1.000000;;, + 2000;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207761,0.000007,-0.000007,1.000000;;, + 2080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207759,0.000001,0.000001,1.000000;;, + 2160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207764,-0.000011,-0.000003,1.000000;;, + 2240;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207760,-0.000006,0.000002,1.000000;;, + 2320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207768,0.000004,-0.000001,1.000000;;, + 2400;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207767,-0.000001,0.000005,1.000000;;, + 2480;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207771,-0.000007,0.000007,1.000000;;, + 2560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207754,-0.000008,0.000019,1.000000;;, + 2640;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207768,-0.000000,-0.000003,1.000000;;, + 2720;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207767,0.000001,-0.000006,1.000000;;, + 2800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207760,0.000006,-0.000012,1.000000;;, + 2880;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207788,-0.000004,0.000004,1.000000;;, + 2960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207781,-0.000001,-0.000003,1.000000;;, + 3040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207762,0.000004,0.000001,1.000000;;, + 3120;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207790,0.000001,-0.000008,1.000000;;, + 3200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207770,-0.000011,0.000011,1.000000;;, + 3280;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207776,-0.000010,0.000005,1.000000;;, + 3360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207766,-0.000003,0.000010,1.000000;;, + 3440;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207795,-0.000000,-0.000005,1.000000;;, + 3520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207788,-0.000011,0.000012,1.000000;;, + 3600;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207775,0.000002,-0.000003,1.000000;;, + 3680;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207780,-0.000013,0.000009,1.000000;;, + 3760;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207794,-0.000012,0.000004,1.000000;;, + 3840;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207778,-0.000008,-0.000001,1.000000;;, + 3920;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207764,-0.000002,0.000000,1.000000;;, + 4000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207761,-0.000006,0.000001,1.000000;;, + 4080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207756,-0.000004,0.000003,1.000000;;, + 4160;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207771,0.000003,0.000013,1.000000;;, + 4240;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207773,0.000003,0.000022,1.000000;;, + 4320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207767,-0.000001,0.000026,1.000000;;, + 4400;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207769,-0.000001,0.000002,1.000000;;, + 4480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,11.207768,-0.000001,0.000013,1.000000;;, + 4560;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207754,-0.000001,-0.000008,1.000000;;, + 4640;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,11.207759,-0.000003,0.000012,1.000000;;, + 4720;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207764,0.000004,-0.000020,1.000000;;, + 4800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,11.207763,0.000001,-0.000002,1.000000;;, + 4960;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,11.207767,0.000001,-0.000003,1.000000;;; + } + { Dummy02 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;-0.928221,-0.372022,0.002089,0.000000,-0.371612,0.927434,0.042085,0.000000,-0.017595,0.038288,-0.999112,0.000000,-27.673786,-14.652106,27.738972,1.000000;;, + 80;16;-0.911893,-0.410423,0.001942,0.000000,-0.410014,0.911176,0.040585,0.000000,-0.018426,0.036213,-0.999174,0.000000,-27.803984,-14.906741,27.552347,1.000000;;, + 160;16;-0.894068,-0.447927,0.002030,0.000000,-0.447515,0.893423,0.039060,0.000000,-0.019310,0.034014,-0.999235,0.000000,-27.937048,-15.168123,27.357708,1.000000;;, + 240;16;-0.876729,-0.480982,0.001449,0.000000,-0.480732,0.876364,0.029699,0.000000,-0.015554,0.025342,-0.999558,0.000000,-28.077749,-15.463904,27.139896,1.000000;;, + 320;16;-0.858316,-0.513121,0.000186,0.000000,-0.513017,0.858149,0.019868,0.000000,-0.010355,0.016958,-0.999803,0.000000,-28.222052,-15.746859,26.922985,1.000000;;, + 400;16;-0.844044,-0.536271,-0.001682,0.000000,-0.536212,0.843896,0.017797,0.000000,-0.008125,0.015924,-0.999840,0.000000,-28.368185,-15.989561,26.722809,1.000000;;, + 480;16;-0.829903,-0.557881,-0.005424,0.000000,-0.557898,0.829793,0.013899,0.000000,-0.003253,0.014560,-0.999889,0.000000,-28.514095,-16.165241,26.556234,1.000000;;, + 560;16;-0.824385,-0.566006,-0.005093,0.000000,-0.565667,0.823504,0.043151,0.000000,-0.020230,0.038454,-0.999056,0.000000,-28.656796,-16.251249,26.439451,1.000000;;, + 640;16;-0.821005,-0.570894,-0.005540,0.000000,-0.569853,0.818838,0.069083,0.000000,-0.034903,0.059874,-0.997595,0.000000,-28.797022,-16.210737,26.392929,1.000000;;, + 720;16;-0.823503,-0.567299,-0.003918,0.000000,-0.564112,0.818106,0.111716,0.000000,-0.060171,0.094209,-0.993732,0.000000,-28.936790,-15.984868,26.446907,1.000000;;, + 800;16;-0.830397,-0.557166,-0.002518,0.000000,-0.551123,0.820709,0.150666,0.000000,-0.081880,0.126500,-0.988582,0.000000,-29.068157,-15.612783,26.578825,1.000000;;, + 880;16;-0.837220,-0.546855,-0.003339,0.000000,-0.539885,0.825545,0.164316,0.000000,-0.087101,0.139372,-0.986402,0.000000,-29.186691,-15.091745,26.783831,1.000000;;, + 960;16;-0.851299,-0.524663,-0.004269,0.000000,-0.517113,0.837616,0.176049,0.000000,-0.088790,0.152078,-0.984372,0.000000,-29.284082,-14.482901,27.028332,1.000000;;, + 1040;16;-0.881730,-0.471150,0.023876,0.000000,-0.460801,0.870997,0.170374,0.000000,-0.101067,0.139222,-0.985090,0.000000,-29.349228,-13.847182,27.284319,1.000000;;, + 1120;16;-0.924826,-0.375312,0.061950,0.000000,-0.359915,0.916074,0.176831,0.000000,-0.123117,0.141241,-0.982290,0.000000,-29.390091,-13.188616,27.543690,1.000000;;, + 1200;16;-0.953882,-0.285967,0.091281,0.000000,-0.264746,0.944765,0.193205,0.000000,-0.141489,0.160129,-0.976903,0.000000,-29.408573,-12.541369,27.790316,1.000000;;, + 1280;16;-0.973788,-0.194748,0.117513,0.000000,-0.166942,0.962843,0.212280,0.000000,-0.154488,0.187098,-0.970117,0.000000,-29.412472,-11.880296,28.029623,1.000000;;, + 1360;16;-0.984386,-0.107567,0.139334,0.000000,-0.074127,0.971274,0.226124,0.000000,-0.159654,0.212265,-0.964082,0.000000,-29.409801,-11.187845,28.261599,1.000000;;, + 1440;16;-0.987640,-0.032138,0.153410,0.000000,0.005524,0.971008,0.238984,0.000000,-0.156642,0.236878,-0.958828,0.000000,-29.400465,-10.475192,28.482176,1.000000;;, + 1520;16;-0.987774,0.018235,0.154822,0.000000,0.057435,0.965843,0.252683,0.000000,-0.144926,0.258485,-0.955082,0.000000,-29.386217,-9.746704,28.688866,1.000000;;, + 1600;16;-0.987223,0.055913,0.149211,0.000000,0.094826,0.958698,0.268152,0.000000,-0.128055,0.278875,-0.951751,0.000000,-29.368801,-9.006860,28.879656,1.000000;;, + 1680;16;-0.986282,0.088304,0.139466,0.000000,0.125685,0.949444,0.287680,0.000000,-0.107012,0.301263,-0.947517,0.000000,-29.349707,-8.260389,29.053083,1.000000;;, + 1760;16;-0.984677,0.118243,0.128176,0.000000,0.152614,0.939945,0.305308,0.000000,-0.084378,0.320191,-0.943588,0.000000,-29.330469,-7.512198,29.208227,1.000000;;, + 1840;16;-0.981517,0.150351,0.118402,0.000000,0.180808,0.931279,0.316272,0.000000,-0.062714,0.331834,-0.941251,0.000000,-29.312498,-6.767277,29.344717,1.000000;;, + 1920;16;-0.976290,0.186521,0.109854,0.000000,0.212371,0.923573,0.319234,0.000000,-0.041914,0.334995,-0.941287,0.000000,-29.296946,-6.030762,29.462757,1.000000;;, + 2000;16;-0.967245,0.231887,0.103275,0.000000,0.252812,0.916654,0.309568,0.000000,-0.022883,0.325537,-0.945252,0.000000,-29.285093,-5.307709,29.563105,1.000000;;, + 2080;16;-0.954827,0.281060,0.096486,0.000000,0.297109,0.908985,0.292358,0.000000,-0.005534,0.307818,-0.951429,0.000000,-29.278000,-4.603338,29.647009,1.000000;;, + 2160;16;-0.939254,0.331755,0.087974,0.000000,0.343063,0.899678,0.269978,0.000000,0.010418,0.283758,-0.958839,0.000000,-29.269199,-3.928405,29.714540,1.000000;;, + 2240;16;-0.921715,0.379808,0.078662,0.000000,0.387158,0.888636,0.245836,0.000000,0.023468,0.257045,-0.966114,0.000000,-29.282276,-3.270983,29.772947,1.000000;;, + 2320;16;-0.904576,0.420547,0.069868,0.000000,0.425042,0.877045,0.223901,0.000000,0.032884,0.232233,-0.972104,0.000000,-29.346003,-2.617593,29.828417,1.000000;;, + 2400;16;-0.888278,0.455005,0.062707,0.000000,0.457681,0.865378,0.204078,0.000000,0.038591,0.209978,-0.976944,0.000000,-29.436523,-1.981518,29.881910,1.000000;;, + 2480;16;-0.871675,0.486327,0.060564,0.000000,0.488470,0.852122,0.187846,0.000000,0.039746,0.193324,-0.980329,0.000000,-29.557138,-1.359871,29.937998,1.000000;;, + 2560;16;-0.861675,0.504099,0.058305,0.000000,0.505993,0.844767,0.174182,0.000000,0.038550,0.179590,-0.982986,0.000000,-29.655882,-0.786586,29.994652,1.000000;;, + 2640;16;-0.850559,0.522404,0.060360,0.000000,0.524798,0.835842,0.161105,0.000000,0.033710,0.168706,-0.985090,0.000000,-29.685301,-0.287678,30.054073,1.000000;;, + 2720;16;-0.839227,0.540056,0.063543,0.000000,0.543025,0.826154,0.150310,0.000000,0.028680,0.160649,-0.986595,0.000000,-29.639238,0.112493,30.116144,1.000000;;, + 2800;16;-0.831739,0.550993,0.067944,0.000000,0.554706,0.819822,0.142099,0.000000,0.022593,0.155878,-0.987518,0.000000,-29.481970,0.381362,30.180090,1.000000;;, + 2880;16;-0.824607,0.560841,0.074037,0.000000,0.565469,0.813379,0.136600,0.000000,0.016391,0.154507,-0.987856,0.000000,-29.257454,0.515694,30.246803,1.000000;;, + 2960;16;-0.823079,0.564125,0.065599,0.000000,0.567362,0.811610,0.139247,0.000000,0.025312,0.151829,-0.988082,0.000000,-28.989264,0.492861,30.314617,1.000000;;, + 3040;16;-0.821983,0.566438,0.059090,0.000000,0.568494,0.809885,0.144570,0.000000,0.034034,0.152426,-0.987728,0.000000,-28.700897,0.341238,30.383587,1.000000;;, + 3120;16;-0.826104,0.559909,0.063667,0.000000,0.562920,0.814747,0.138952,0.000000,0.025928,0.150629,-0.988250,0.000000,-28.413420,0.076273,30.454477,1.000000;;, + 3200;16;-0.836777,0.543459,0.066758,0.000000,0.547203,0.825715,0.136979,0.000000,0.019320,0.151151,-0.988322,0.000000,-28.155458,-0.285411,30.520918,1.000000;;, + 3280;16;-0.851590,0.520256,0.064253,0.000000,0.524081,0.842254,0.126286,0.000000,0.011583,0.141218,-0.989911,0.000000,-27.962389,-0.726958,30.578775,1.000000;;, + 3360;16;-0.869128,0.490799,0.061101,0.000000,0.494557,0.861031,0.118490,0.000000,0.005545,0.133201,-0.991073,0.000000,-27.836496,-1.234247,30.624882,1.000000;;, + 3440;16;-0.887892,0.456440,0.057541,0.000000,0.460052,0.880657,0.113116,0.000000,0.000957,0.126907,-0.991914,0.000000,-27.802397,-1.789792,30.654890,1.000000;;, + 3520;16;-0.907077,0.417519,0.053751,0.000000,0.420957,0.900416,0.109757,0.000000,-0.002573,0.122185,-0.992504,0.000000,-27.830305,-2.386317,30.668243,1.000000;;, + 3600;16;-0.925802,0.374125,0.054043,0.000000,0.377976,0.918066,0.119538,0.000000,-0.004893,0.131095,-0.991358,0.000000,-27.902847,-3.010064,30.663122,1.000000;;, + 3680;16;-0.943410,0.327208,0.053964,0.000000,0.331539,0.934358,0.130601,0.000000,-0.007688,0.141101,-0.989965,0.000000,-28.007349,-3.661772,30.639570,1.000000;;, + 3760;16;-0.959327,0.277680,0.050859,0.000000,0.282077,0.950027,0.133722,0.000000,-0.011186,0.142630,-0.989713,0.000000,-28.129053,-4.338365,30.598248,1.000000;;, + 3840;16;-0.973079,0.225510,0.047554,0.000000,0.229995,0.963420,0.137565,0.000000,-0.014792,0.144799,-0.989350,0.000000,-28.256105,-5.037010,30.537418,1.000000;;, + 3920;16;-0.984303,0.172439,0.037585,0.000000,0.175741,0.977218,0.118996,0.000000,-0.016209,0.123734,-0.992183,0.000000,-28.375837,-5.754852,30.456379,1.000000;;, + 4000;16;-0.992648,0.117681,0.028285,0.000000,0.119956,0.987680,0.100497,0.000000,-0.016110,0.103151,-0.994535,0.000000,-28.475786,-6.488847,30.354843,1.000000;;, + 4080;16;-0.997899,0.061722,0.019677,0.000000,0.063128,0.994679,0.081416,0.000000,-0.014548,0.082487,-0.996486,0.000000,-28.540384,-7.235955,30.232977,1.000000;;, + 4160;16;-0.999906,0.006143,0.012246,0.000000,0.006892,0.998048,0.062063,0.000000,-0.011841,0.062142,-0.997997,0.000000,-28.565617,-7.992917,30.090918,1.000000;;, + 4240;16;-0.998890,-0.045932,0.010470,0.000000,-0.045145,0.996802,0.065936,0.000000,-0.013465,0.065390,-0.997769,0.000000,-28.537481,-8.756502,29.929228,1.000000;;, + 4320;16;-0.995413,-0.095229,0.009188,0.000000,-0.094366,0.993104,0.069573,0.000000,-0.015750,0.068387,-0.997534,0.000000,-28.470556,-9.522673,29.747852,1.000000;;, + 4400;16;-0.991651,-0.128660,0.008704,0.000000,-0.127798,0.989535,0.066988,0.000000,-0.017232,0.065316,-0.997716,0.000000,-28.371780,-10.287396,29.547218,1.000000;;, + 4480;16;-0.986949,-0.160784,0.008958,0.000000,-0.159894,0.985052,0.064088,0.000000,-0.019128,0.061819,-0.997904,0.000000,-28.251011,-11.046824,29.328005,1.000000;;, + 4560;16;-0.980691,-0.195325,0.009659,0.000000,-0.194402,0.979051,0.060564,0.000000,-0.021286,0.057517,-0.998118,0.000000,-28.117359,-11.797178,29.091358,1.000000;;, + 4640;16;-0.971493,-0.236834,0.010537,0.000000,-0.235888,0.970131,0.056592,0.000000,-0.023625,0.052493,-0.998342,0.000000,-27.979946,-12.534884,28.838869,1.000000;;, + 4720;16;-0.965536,-0.259803,0.015587,0.000000,-0.258707,0.964567,0.051776,0.000000,-0.028486,0.045959,-0.998537,0.000000,-27.853834,-13.252464,28.574549,1.000000;;, + 4800;16;-0.959397,-0.281208,0.021883,0.000000,-0.279994,0.958874,0.046525,0.000000,-0.034066,0.038509,-0.998677,0.000000,-27.730272,-13.958670,28.295168,1.000000;;, + 4960;16;-0.928221,-0.372022,0.002089,0.000000,-0.371612,0.927434,0.042085,0.000000,-0.017595,0.038288,-0.999112,0.000000,-27.673786,-14.652106,27.738972,1.000000;;; + } + { Bip01_L_Thigh } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.942163,-0.335154,0.000000,0.000000,0.335154,0.942163,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231491,0.000003,-0.000001,1.000000;;, + 80;16;0.946470,-0.322791,0.000000,0.000000,0.322791,0.946470,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231499,0.000009,-0.000001,1.000000;;, + 160;16;0.950613,-0.310379,0.000000,0.000000,0.310379,0.950613,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231491,0.000003,-0.000001,1.000000;;, + 240;16;0.952025,-0.306021,-0.000000,0.000000,0.306021,0.952025,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,0.000002,-0.000002,1.000000;;, + 320;16;0.953424,-0.301634,-0.000000,0.000000,0.301634,0.953424,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231491,-0.000004,0.000001,1.000000;;, + 400;16;0.949301,-0.314369,0.000000,0.000000,0.314369,0.949301,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000008,-0.000000,1.000000;;, + 480;16;0.944996,-0.327081,0.000000,0.000000,0.327081,0.944996,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000004,-0.000001,1.000000;;, + 560;16;0.930883,-0.365318,-0.000000,0.000000,0.365318,0.930883,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000003,0.000003,1.000000;;, + 640;16;0.915212,-0.402971,0.000000,0.000000,0.402971,0.915212,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000010,-0.000001,1.000000;;, + 720;16;0.894055,-0.447956,0.000000,0.000000,0.447956,0.894055,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231522,0.000003,-0.000001,1.000000;;, + 800;16;0.870688,-0.491835,-0.000000,0.000000,0.491835,0.870688,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231522,-0.000005,0.000002,1.000000;;, + 880;16;0.855169,-0.518349,-0.000000,0.000000,0.518349,0.855169,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,-0.000015,-0.000003,1.000000;;, + 960;16;0.838845,-0.544371,-0.000000,0.000000,0.544371,0.838845,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,-0.000029,-0.000002,1.000000;;, + 1040;16;0.805776,-0.592221,-0.000000,0.000000,0.592221,0.805776,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231499,-0.000011,-0.000003,1.000000;;, + 1120;16;0.739182,-0.673506,0.000000,0.000000,0.673506,0.739182,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,-0.000016,-0.000002,1.000000;;, + 1200;16;0.662180,-0.749345,-0.000000,0.000000,0.749345,0.662180,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000011,-0.000002,1.000000;;, + 1280;16;0.580639,-0.814161,0.000000,0.000000,0.814161,0.580639,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,-0.000018,-0.000005,1.000000;;, + 1360;16;0.512479,-0.858699,0.000000,0.000000,0.858699,0.512479,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231483,-0.000010,-0.000001,1.000000;;, + 1440;16;0.468474,-0.883477,0.000000,0.000000,0.883477,0.468474,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231483,-0.000011,-0.000002,1.000000;;, + 1520;16;0.470332,-0.882490,-0.000000,0.000000,0.882490,0.470332,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000007,-0.000001,1.000000;;, + 1600;16;0.499227,-0.866471,0.000000,0.000000,0.866471,0.499227,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,0.000019,0.000001,1.000000;;, + 1680;16;0.544114,-0.839011,0.000000,0.000000,0.839011,0.544114,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231483,-0.000001,-0.000007,1.000000;;, + 1760;16;0.595785,-0.803144,0.000000,0.000000,0.803144,0.595785,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000007,0.000001,1.000000;;, + 1840;16;0.642066,-0.766650,0.000000,0.000000,0.766650,0.642066,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231491,0.000007,0.000005,1.000000;;, + 1920;16;0.685771,-0.727817,0.000000,0.000000,0.727817,0.685771,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,0.000002,-0.000004,1.000000;;, + 2000;16;0.725507,-0.688215,-0.000000,0.000000,0.688215,0.725507,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231514,0.000007,0.000003,1.000000;;, + 2080;16;0.762653,-0.646808,-0.000000,0.000000,0.646808,0.762653,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231522,0.000012,0.000005,1.000000;;, + 2160;16;0.800105,-0.599860,0.000000,0.000000,0.599860,0.800105,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231491,-0.000002,-0.000001,1.000000;;, + 2240;16;0.831071,-0.556167,-0.000000,0.000000,0.556167,0.831071,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231506,-0.000007,0.000002,1.000000;;, + 2320;16;0.851740,-0.523965,-0.000000,0.000000,0.523965,0.851740,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,0.000009,0.000002,1.000000;;, + 2400;16;0.862764,-0.505606,0.000000,0.000000,0.505606,0.862764,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231514,0.000021,0.000003,1.000000;;, + 2480;16;0.858597,-0.512651,0.000000,0.000000,0.512651,0.858597,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,-0.000001,0.000002,1.000000;;, + 2560;16;0.851861,-0.523767,-0.000000,0.000000,0.523767,0.851861,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000004,0.000000,1.000000;;, + 2640;16;0.834410,-0.551144,0.000000,0.000000,0.551144,0.834410,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231491,0.000018,0.000002,1.000000;;, + 2720;16;0.816079,-0.577940,-0.000000,0.000000,0.577940,0.816079,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231506,0.000016,-0.000001,1.000000;;, + 2800;16;0.795822,-0.605531,0.000000,0.000000,0.605531,0.795822,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,0.000002,0.000004,1.000000;;, + 2880;16;0.774632,-0.632412,-0.000000,0.000000,0.632413,0.774632,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,-0.000004,-0.000000,1.000000;;, + 2960;16;0.794443,-0.607340,-0.000000,0.000000,0.607339,0.794442,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,-0.000008,0.000003,1.000000;;, + 3040;16;0.813442,-0.581647,-0.000000,0.000000,0.581647,0.813442,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231529,0.000008,-0.000002,1.000000;;, + 3120;16;0.778247,-0.627958,0.000000,0.000000,0.627958,0.778247,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,0.000010,-0.000002,1.000000;;, + 3200;16;0.754281,-0.656552,-0.000000,0.000000,0.656552,0.754281,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231537,0.000012,0.000006,1.000000;;, + 3280;16;0.743273,-0.668988,-0.000000,0.000000,0.668988,0.743273,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231522,0.000008,0.000001,1.000000;;, + 3360;16;0.740677,-0.671861,0.000000,0.000000,0.671862,0.740677,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,0.000010,0.000003,1.000000;;, + 3440;16;0.745040,-0.667020,0.000000,0.000000,0.667020,0.745040,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231514,-0.000006,-0.000000,1.000000;;, + 3520;16;0.755634,-0.654994,0.000000,0.000000,0.654994,0.755634,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231529,0.000022,0.000002,1.000000;;, + 3600;16;0.767893,-0.640578,-0.000000,0.000000,0.640578,0.767893,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231529,-0.000014,-0.000002,1.000000;;, + 3680;16;0.784524,-0.620099,-0.000000,0.000000,0.620099,0.784524,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231529,0.000019,0.000003,1.000000;;, + 3760;16;0.802723,-0.596352,0.000000,0.000000,0.596352,0.802724,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231522,0.000000,-0.000002,1.000000;;, + 3840;16;0.823599,-0.567172,0.000000,0.000000,0.567172,0.823599,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231514,-0.000001,0.000000,1.000000;;, + 3920;16;0.847102,-0.531430,-0.000000,0.000000,0.531430,0.847102,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231529,0.000020,-0.000001,1.000000;;, + 4000;16;0.871324,-0.490708,0.000000,0.000000,0.490708,0.871324,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,-0.000010,-0.000002,1.000000;;, + 4080;16;0.895648,-0.444764,-0.000000,0.000000,0.444764,0.895648,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231522,0.000034,-0.000001,1.000000;;, + 4160;16;0.918115,-0.396313,-0.000000,0.000000,0.396313,0.918115,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000014,0.000001,1.000000;;, + 4240;16;0.935408,-0.353571,0.000000,0.000000,0.353571,0.935408,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000005,0.000003,1.000000;;, + 4320;16;0.949647,-0.313321,0.000000,0.000000,0.313321,0.949647,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,-0.000011,-0.000001,1.000000;;, + 4400;16;0.953711,-0.300723,0.000000,0.000000,0.300723,0.953711,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231483,-0.000000,0.000001,1.000000;;, + 4480;16;0.957058,-0.289897,0.000000,0.000000,0.289897,0.957058,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000009,-0.000003,1.000000;;, + 4560;16;0.961769,-0.273862,0.000000,0.000000,0.273862,0.961769,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231483,-0.000011,-0.000001,1.000000;;, + 4640;16;0.969896,-0.243518,0.000000,0.000000,0.243518,0.969896,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231491,0.000011,-0.000001,1.000000;;, + 4720;16;0.944640,-0.328109,0.000000,0.000000,0.328109,0.944640,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,0.000017,0.000000,1.000000;;, + 4800;16;0.912034,-0.410114,-0.000000,0.000000,0.410114,0.912034,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231491,-0.000008,-0.000001,1.000000;;, + 4960;16;0.942163,-0.335154,0.000000,0.000000,0.335154,0.942163,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231491,0.000003,-0.000001,1.000000;;; + } + { Bip01_L_Calf } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.819935,0.566355,0.083354,0.000000,-0.566770,0.823611,-0.020897,0.000000,-0.080486,-0.030108,0.996301,0.000000,119.231514,0.000010,0.000002,1.000000;;, + 80;16;0.819133,0.567125,0.085960,0.000000,-0.567930,0.822898,-0.017163,0.000000,-0.080470,-0.034761,0.996151,0.000000,119.231506,-0.000013,-0.000002,1.000000;;, + 160;16;0.820633,0.564575,0.088416,0.000000,-0.565741,0.824469,-0.013669,0.000000,-0.080614,-0.038804,0.995990,0.000000,119.231506,0.000009,-0.000000,1.000000;;, + 240;16;0.821535,0.563385,0.087619,0.000000,-0.564252,0.825429,-0.016908,0.000000,-0.081849,-0.035548,0.996011,0.000000,119.231499,-0.000001,-0.000001,1.000000;;, + 320;16;0.826038,0.557042,0.085821,0.000000,-0.557428,0.829943,-0.021626,0.000000,-0.083273,-0.029975,0.996076,0.000000,119.231529,0.000014,-0.000001,1.000000;;, + 400;16;0.834533,0.544288,0.085466,0.000000,-0.544571,0.838426,-0.022024,0.000000,-0.083644,-0.028163,0.996098,0.000000,119.231514,0.000008,0.000000,1.000000;;, + 480;16;0.850094,0.520000,0.083306,0.000000,-0.519840,0.853889,-0.025319,0.000000,-0.084300,-0.021782,0.996202,0.000000,119.231506,0.000009,0.000001,1.000000;;, + 560;16;0.875466,0.479959,0.056556,0.000000,-0.481614,0.876161,0.019734,0.000000,-0.040081,-0.044515,0.998204,0.000000,119.231499,0.000006,-0.000002,1.000000;;, + 640;16;0.906159,0.422411,0.021083,0.000000,-0.422892,0.904206,0.059780,0.000000,0.006188,-0.063086,0.997989,0.000000,119.231506,0.000006,0.000002,1.000000;;, + 720;16;0.936240,0.345371,-0.064606,0.000000,-0.336500,0.934263,0.117986,0.000000,0.101108,-0.088723,0.990911,0.000000,119.231529,-0.000006,-0.000001,1.000000;;, + 800;16;0.955721,0.242467,-0.166756,0.000000,-0.216573,0.963188,0.159265,0.000000,0.199234,-0.116098,0.973050,0.000000,119.231514,-0.000003,-0.000002,1.000000;;, + 880;16;0.966320,0.105838,-0.234571,0.000000,-0.068425,0.984372,0.162267,0.000000,0.248079,-0.140751,0.958460,0.000000,119.231522,0.000002,-0.000000,1.000000;;, + 960;16;0.948597,-0.080312,-0.306127,0.000000,0.130235,0.980631,0.146295,0.000000,0.288448,-0.178643,0.940683,0.000000,119.231499,0.000012,0.000000,1.000000;;, + 1040;16;0.955816,-0.074898,-0.284263,0.000000,0.118281,0.983254,0.138643,0.000000,0.269118,-0.166140,0.948669,0.000000,119.231499,0.000002,0.000001,1.000000;;, + 1120;16;0.969026,-0.051502,-0.241531,0.000000,0.081517,0.989903,0.115966,0.000000,0.233120,-0.132063,0.963439,0.000000,119.231522,0.000004,-0.000005,1.000000;;, + 1200;16;0.981818,0.002370,-0.189811,0.000000,0.011582,0.997311,0.072359,0.000000,0.189472,-0.073242,0.979151,0.000000,119.231506,0.000005,0.000003,1.000000;;, + 1280;16;0.987825,0.070976,-0.138435,0.000000,-0.068788,0.997420,0.020535,0.000000,0.139535,-0.010763,0.990159,0.000000,119.231514,0.000006,-0.000002,1.000000;;, + 1360;16;0.985606,0.137460,-0.098419,0.000000,-0.140534,0.989760,-0.024988,0.000000,0.093977,0.038460,0.994831,0.000000,119.231499,0.000006,0.000002,1.000000;;, + 1440;16;0.976475,0.203883,-0.070209,0.000000,-0.208187,0.976208,-0.060640,0.000000,0.056176,0.073830,0.995687,0.000000,119.231514,0.000014,-0.000001,1.000000;;, + 1520;16;0.962520,0.265033,-0.057563,0.000000,-0.268819,0.960425,-0.072939,0.000000,0.035953,0.085679,0.995674,0.000000,119.231514,0.000005,0.000001,1.000000;;, + 1600;16;0.944932,0.323352,-0.050465,0.000000,-0.326285,0.942765,-0.068793,0.000000,0.025332,0.081471,0.996354,0.000000,119.231529,-0.000013,-0.000005,1.000000;;, + 1680;16;0.922942,0.382664,-0.041779,0.000000,-0.384487,0.921669,-0.051931,0.000000,0.018635,0.063993,0.997776,0.000000,119.231483,0.000003,0.000014,1.000000;;, + 1760;16;0.899830,0.435313,-0.028432,0.000000,-0.436035,0.899495,-0.027961,0.000000,0.013403,0.037557,0.999205,0.000000,119.231468,0.000009,0.000009,1.000000;;, + 1840;16;0.878910,0.476864,-0.010806,0.000000,-0.476944,0.878910,-0.006518,0.000000,0.006389,0.010883,0.999920,0.000000,119.231483,-0.000007,-0.000001,1.000000;;, + 1920;16;0.861739,0.507287,0.008100,0.000000,-0.507347,0.861688,0.009672,0.000000,-0.002073,-0.012445,0.999920,0.000000,119.231506,0.000019,0.000005,1.000000;;, + 2000;16;0.850935,0.524778,0.022754,0.000000,-0.525134,0.850905,0.013979,0.000000,-0.012025,-0.023844,0.999643,0.000000,119.231506,-0.000006,-0.000003,1.000000;;, + 2080;16;0.845055,0.533679,0.032674,0.000000,-0.534274,0.845214,0.012795,0.000000,-0.020789,-0.028269,0.999384,0.000000,119.231529,-0.000003,-0.000003,1.000000;;, + 2160;16;0.843436,0.535881,0.038038,0.000000,-0.536569,0.843795,0.010216,0.000000,-0.026622,-0.029027,0.999224,0.000000,119.231483,0.000012,0.000003,1.000000;;, + 2240;16;0.845095,0.533109,0.040127,0.000000,-0.533791,0.845579,0.007924,0.000000,-0.029706,-0.028116,0.999163,0.000000,119.231514,0.000031,0.000008,1.000000;;, + 2320;16;0.848386,0.527731,0.041726,0.000000,-0.528451,0.848928,0.007796,0.000000,-0.031308,-0.028665,0.999099,0.000000,119.231499,-0.000006,0.000001,1.000000;;, + 2400;16;0.853963,0.518533,0.043240,0.000000,-0.519361,0.854496,0.009968,0.000000,-0.031780,-0.030969,0.999015,0.000000,119.231499,0.000006,-0.000000,1.000000;;, + 2480;16;0.864707,0.500080,0.046927,0.000000,-0.501277,0.865103,0.017833,0.000000,-0.031679,-0.038943,0.998739,0.000000,119.231514,0.000021,0.000004,1.000000;;, + 2560;16;0.871883,0.487224,0.049326,0.000000,-0.488704,0.872126,0.023758,0.000000,-0.031443,-0.044820,0.998500,0.000000,119.231491,0.000017,0.000005,1.000000;;, + 2640;16;0.884353,0.464053,0.050747,0.000000,-0.465906,0.884188,0.033806,0.000000,-0.029182,-0.053540,0.998139,0.000000,119.231514,0.000005,0.000001,1.000000;;, + 2720;16;0.896219,0.440584,0.051742,0.000000,-0.442796,0.895536,0.044134,0.000000,-0.026892,-0.062465,0.997685,0.000000,119.231506,0.000008,0.000002,1.000000;;, + 2800;16;0.906430,0.419224,0.051341,0.000000,-0.421676,0.905154,0.053716,0.000000,-0.023953,-0.070339,0.997236,0.000000,119.231491,-0.000000,0.000001,1.000000;;, + 2880;16;0.916137,0.397674,0.050472,0.000000,-0.400321,0.914169,0.063547,0.000000,-0.020869,-0.078422,0.996702,0.000000,119.231491,0.000012,0.000003,1.000000;;, + 2960;16;0.937630,0.345753,0.036129,0.000000,-0.347484,0.935211,0.068081,0.000000,-0.010249,-0.076389,0.997025,0.000000,119.231522,0.000028,-0.000003,1.000000;;, + 3040;16;0.955974,0.292651,0.021675,0.000000,-0.293452,0.953258,0.072014,0.000000,0.000413,-0.075204,0.997168,0.000000,119.231514,-0.000004,0.000002,1.000000;;, + 3120;16;0.942333,0.333838,0.023695,0.000000,-0.334677,0.940153,0.064063,0.000000,-0.000890,-0.068299,0.997665,0.000000,119.231514,-0.000003,0.000001,1.000000;;, + 3200;16;0.930563,0.365233,0.025652,0.000000,-0.366128,0.928602,0.060407,0.000000,-0.001758,-0.065605,0.997844,0.000000,119.231499,-0.000005,-0.000004,1.000000;;, + 3280;16;0.931320,0.363275,0.025978,0.000000,-0.364137,0.930129,0.047574,0.000000,-0.006880,-0.053766,0.998530,0.000000,119.231514,-0.000016,-0.000003,1.000000;;, + 3360;16;0.934368,0.355316,0.026583,0.000000,-0.356132,0.933653,0.038251,0.000000,-0.011228,-0.045208,0.998915,0.000000,119.231506,0.000000,-0.000001,1.000000;;, + 3440;16;0.939233,0.342190,0.027342,0.000000,-0.342963,0.938808,0.031861,0.000000,-0.014766,-0.039302,0.999118,0.000000,119.231491,0.000022,0.000001,1.000000;;, + 3520;16;0.945582,0.324161,0.028189,0.000000,-0.324910,0.945330,0.028018,0.000000,-0.017565,-0.035652,0.999210,0.000000,119.231483,-0.000023,-0.000004,1.000000;;, + 3600;16;0.944105,0.328308,0.029650,0.000000,-0.329292,0.943430,0.038819,0.000000,-0.015227,-0.046413,0.998806,0.000000,119.231491,0.000031,0.000003,1.000000;;, + 3680;16;0.944000,0.328443,0.031452,0.000000,-0.329694,0.942706,0.051065,0.000000,-0.012878,-0.058575,0.998200,0.000000,119.231499,-0.000021,-0.000000,1.000000;;, + 3760;16;0.940374,0.338217,0.036142,0.000000,-0.339794,0.938901,0.054819,0.000000,-0.015393,-0.063831,0.997842,0.000000,119.231499,-0.000012,0.000000,1.000000;;, + 3840;16;0.937802,0.344730,0.041095,0.000000,-0.346695,0.936131,0.058841,0.000000,-0.018186,-0.069429,0.997421,0.000000,119.231499,0.000010,-0.000001,1.000000;;, + 3920;16;0.939902,0.338297,0.046256,0.000000,-0.340073,0.939626,0.038111,0.000000,-0.030570,-0.051551,0.998203,0.000000,119.231522,-0.000021,0.000001,1.000000;;, + 4000;16;0.942779,0.329510,0.050891,0.000000,-0.330734,0.943560,0.017611,0.000000,-0.042216,-0.033434,0.998549,0.000000,119.231476,0.000003,0.000002,1.000000;;, + 4080;16;0.946381,0.318334,0.055010,0.000000,-0.318669,0.947862,-0.002804,0.000000,-0.053034,-0.014877,0.998482,0.000000,119.231506,-0.000026,0.000003,1.000000;;, + 4160;16;0.950159,0.306179,0.058753,0.000000,-0.305398,0.951969,-0.022063,0.000000,-0.062687,0.003020,0.998029,0.000000,119.231491,0.000031,0.000001,1.000000;;, + 4240;16;0.949908,0.306152,0.062812,0.000000,-0.305789,0.951972,-0.015556,0.000000,-0.064557,-0.004431,0.997904,0.000000,119.231514,0.000023,0.000002,1.000000;;, + 4320;16;0.949171,0.307449,0.067452,0.000000,-0.307626,0.951474,-0.008013,0.000000,-0.066642,-0.013145,0.997690,0.000000,119.231491,0.000027,0.000001,1.000000;;, + 4400;16;0.943648,0.323457,0.070034,0.000000,-0.323349,0.946188,-0.013198,0.000000,-0.070534,-0.010191,0.997457,0.000000,119.231491,0.000006,-0.000000,1.000000;;, + 4480;16;0.937464,0.340343,0.072989,0.000000,-0.339952,0.940268,-0.018100,0.000000,-0.074789,-0.007844,0.997169,0.000000,119.231483,0.000030,0.000001,1.000000;;, + 4560;16;0.931869,0.354706,0.076179,0.000000,-0.353973,0.934963,-0.023376,0.000000,-0.079516,-0.005182,0.996820,0.000000,119.231483,-0.000005,0.000001,1.000000;;, + 4640;16;0.928705,0.362194,0.079510,0.000000,-0.361018,0.932101,-0.029214,0.000000,-0.084692,-0.001573,0.996406,0.000000,119.231506,-0.000001,0.000004,1.000000;;, + 4720;16;0.876284,0.474843,0.081553,0.000000,-0.475470,0.879639,-0.012791,0.000000,-0.077811,-0.027567,0.996587,0.000000,119.231522,-0.000039,-0.000003,1.000000;;, + 4800;16;0.832169,0.546757,0.092472,0.000000,-0.549113,0.835748,0.000044,0.000000,-0.077259,-0.050814,0.995715,0.000000,119.231468,-0.000006,0.000000,1.000000;;, + 4960;16;0.819935,0.566355,0.083354,0.000000,-0.566770,0.823611,-0.020897,0.000000,-0.080486,-0.030108,0.996301,0.000000,119.231514,0.000010,0.000002,1.000000;;; + } + { Bip01_L_Foot } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423233,34.577133,0.000000,1.000000;;, + 80;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423252,34.577145,-0.000001,1.000000;;, + 160;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423252,34.577126,0.000001,1.000000;;, + 240;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423248,34.577133,0.000002,1.000000;;, + 320;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423239,34.577137,-0.000002,1.000000;;, + 400;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423252,34.577129,-0.000002,1.000000;;, + 480;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423250,34.577129,-0.000000,1.000000;;, + 560;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423246,34.577141,-0.000001,1.000000;;, + 640;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423258,34.577145,-0.000001,1.000000;;, + 720;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423256,34.577141,-0.000000,1.000000;;, + 800;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423233,34.577141,-0.000003,1.000000;;, + 880;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423244,34.577141,0.000001,1.000000;;, + 960;16;0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423248,34.577122,0.000002,1.000000;;, + 1040;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423252,34.577137,0.000001,1.000000;;, + 1120;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423254,34.577129,0.000004,1.000000;;, + 1200;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423241,34.577129,0.000001,1.000000;;, + 1280;16;0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423254,34.577145,0.000002,1.000000;;, + 1360;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423235,34.577141,-0.000001,1.000000;;, + 1440;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423248,34.577137,-0.000001,1.000000;;, + 1520;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423246,34.577137,-0.000001,1.000000;;, + 1600;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423252,34.577145,0.000002,1.000000;;, + 1680;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423256,34.577141,-0.000003,1.000000;;, + 1760;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423248,34.577129,-0.000001,1.000000;;, + 1840;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423246,34.577129,-0.000005,1.000000;;, + 1920;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423241,34.577141,0.000002,1.000000;;, + 2000;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423250,34.577148,-0.000004,1.000000;;, + 2080;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423260,34.577133,-0.000002,1.000000;;, + 2160;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423248,34.577152,0.000005,1.000000;;, + 2240;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423265,34.577129,-0.000001,1.000000;;, + 2320;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423248,34.577137,0.000001,1.000000;;, + 2400;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423250,34.577148,0.000004,1.000000;;, + 2480;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423260,34.577156,0.000003,1.000000;;, + 2560;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423262,34.577137,-0.000002,1.000000;;, + 2640;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423246,34.577126,0.000000,1.000000;;, + 2720;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423256,34.577145,0.000001,1.000000;;, + 2800;16;0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423262,34.577152,-0.000001,1.000000;;, + 2880;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423254,34.577122,0.000002,1.000000;;, + 2960;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423243,34.577114,-0.000001,1.000000;;, + 3040;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423254,34.577148,0.000003,1.000000;;, + 3120;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423237,34.577110,-0.000001,1.000000;;, + 3200;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423252,34.577164,-0.000002,1.000000;;, + 3280;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423246,34.577133,0.000000,1.000000;;, + 3360;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423244,34.577129,0.000000,1.000000;;, + 3440;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423239,34.577133,0.000002,1.000000;;, + 3520;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423237,34.577118,0.000001,1.000000;;, + 3600;16;0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423250,34.577106,0.000001,1.000000;;, + 3680;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423250,34.577160,0.000002,1.000000;;, + 3760;16;-0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423243,34.577160,-0.000000,1.000000;;, + 3840;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423256,34.577129,-0.000001,1.000000;;, + 3920;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423256,34.577160,-0.000001,1.000000;;, + 4000;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423258,34.577137,-0.000001,1.000000;;, + 4080;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423260,34.577156,-0.000002,1.000000;;, + 4160;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423262,34.577137,-0.000001,1.000000;;, + 4240;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423237,34.577126,-0.000003,1.000000;;, + 4320;16;-0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423239,34.577114,-0.000001,1.000000;;, + 4400;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423233,34.577114,0.000001,1.000000;;, + 4480;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423250,34.577129,-0.000000,1.000000;;, + 4560;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423254,34.577110,-0.000006,1.000000;;, + 4640;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423250,34.577141,-0.000003,1.000000;;, + 4720;16;0.019225,0.999811,-0.002960,0.000000,-0.999808,0.019213,-0.003948,0.000000,-0.003890,0.003035,0.999988,0.000000,27.423246,34.577110,-0.000000,1.000000;;, + 4800;16;0.000000,1.000000,0.000000,0.000000,-1.000000,-0.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,27.423262,34.577110,0.000002,1.000000;;, + 4960;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,27.423233,34.577133,0.000000,1.000000;;; + } + { Bip01_L_Toe0 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738561,-0.000003,0.000000,1.000000;;, + 80;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738552,-0.000004,0.000001,1.000000;;, + 160;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738560,-0.000006,0.000001,1.000000;;, + 240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738562,-0.000002,-0.000000,1.000000;;, + 320;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738562,-0.000007,-0.000000,1.000000;;, + 400;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738553,0.000008,0.000002,1.000000;;, + 480;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738570,-0.000012,0.000002,1.000000;;, + 560;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738561,-0.000000,0.000001,1.000000;;, + 640;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738554,0.000003,0.000001,1.000000;;, + 720;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738559,0.000018,-0.000001,1.000000;;, + 800;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738567,-0.000023,0.000003,1.000000;;, + 880;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738561,0.000015,-0.000001,1.000000;;, + 960;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738577,0.000009,0.000000,1.000000;;, + 1040;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738572,0.000005,-0.000002,1.000000;;, + 1120;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738572,0.000003,-0.000002,1.000000;;, + 1200;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738558,0.000002,0.000000,1.000000;;, + 1280;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738563,0.000006,-0.000003,1.000000;;, + 1360;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738564,-0.000010,0.000000,1.000000;;, + 1440;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738564,-0.000011,0.000004,1.000000;;, + 1520;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738545,-0.000000,-0.000006,1.000000;;, + 1600;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738548,-0.000011,-0.000001,1.000000;;, + 1680;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738566,-0.000008,0.000001,1.000000;;, + 1760;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738560,0.000012,-0.000003,1.000000;;, + 1840;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738552,-0.000004,-0.000001,1.000000;;, + 1920;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738549,-0.000001,-0.000006,1.000000;;, + 2000;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738556,-0.000001,0.000003,1.000000;;, + 2080;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738564,0.000012,-0.000001,1.000000;;, + 2160;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738553,-0.000004,-0.000002,1.000000;;, + 2240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738557,0.000012,-0.000001,1.000000;;, + 2320;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738566,-0.000005,-0.000001,1.000000;;, + 2400;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738562,0.000005,0.000004,1.000000;;, + 2480;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738552,0.000007,-0.000000,1.000000;;, + 2560;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738543,0.000018,-0.000003,1.000000;;, + 2640;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738567,-0.000004,0.000004,1.000000;;, + 2720;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738589,-0.000015,0.000006,1.000000;;, + 2800;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738543,0.000010,-0.000005,1.000000;;, + 2880;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738537,0.000003,-0.000002,1.000000;;, + 2960;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738583,0.000002,-0.000001,1.000000;;, + 3040;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738555,0.000015,-0.000003,1.000000;;, + 3120;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738544,0.000016,-0.000002,1.000000;;, + 3200;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738552,0.000001,-0.000004,1.000000;;, + 3280;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738568,0.000010,-0.000000,1.000000;;, + 3360;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738545,0.000010,-0.000002,1.000000;;, + 3440;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738567,-0.000012,0.000003,1.000000;;, + 3520;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738564,-0.000007,0.000000,1.000000;;, + 3600;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738573,-0.000008,0.000002,1.000000;;, + 3680;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738562,-0.000005,0.000002,1.000000;;, + 3760;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738544,-0.000008,-0.000000,1.000000;;, + 3840;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738535,0.000001,0.000001,1.000000;;, + 3920;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738588,-0.000004,0.000001,1.000000;;, + 4000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738590,0.000003,0.000001,1.000000;;, + 4080;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738544,0.000012,-0.000002,1.000000;;, + 4160;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738582,-0.000001,-0.000001,1.000000;;, + 4240;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738545,-0.000004,-0.000001,1.000000;;, + 4320;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738585,-0.000005,0.000001,1.000000;;, + 4400;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738574,-0.000012,0.000001,1.000000;;, + 4480;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738592,-0.000014,0.000002,1.000000;;, + 4560;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,-1.000000,0.000000,15.738579,-0.000008,0.000006,1.000000;;, + 4640;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,-1.000000,0.000000,15.738531,-0.000003,0.000001,1.000000;;, + 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738544,-0.000011,0.000005,1.000000;;, + 4800;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,-1.000000,0.000000,15.738586,0.000005,-0.000001,1.000000;;, + 4960;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,-1.000000,0.000000,15.738561,-0.000003,0.000000,1.000000;;; + } + { Dummy16 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;-0.950769,0.300574,-0.075459,0.000000,0.309313,0.905410,-0.290788,0.000000,-0.019082,-0.299812,-0.953807,0.000000,-27.853168,-0.096285,-31.055355,1.000000;;, + 80;16;-0.935626,0.342228,-0.086515,0.000000,0.352570,0.894002,-0.276506,0.000000,-0.017284,-0.289208,-0.957110,0.000000,-27.748009,0.301211,-31.076935,1.000000;;, + 160;16;-0.925290,0.368153,-0.091117,0.000000,0.378918,0.887164,-0.263366,0.000000,-0.016123,-0.278216,-0.960383,0.000000,-27.639570,0.709021,-31.093178,1.000000;;, + 240;16;-0.909113,0.404857,-0.098005,0.000000,0.416296,0.874843,-0.247683,0.000000,-0.014536,-0.265971,-0.963872,0.000000,-27.523199,1.158613,-31.101513,1.000000;;, + 320;16;-0.891424,0.441083,-0.103967,0.000000,0.452986,0.860751,-0.232186,0.000000,-0.012924,-0.254072,-0.967099,0.000000,-27.402622,1.597056,-31.104548,1.000000;;, + 400;16;-0.875825,0.470459,-0.107694,0.000000,0.482491,0.848173,-0.218644,0.000000,-0.011520,-0.243455,-0.969844,0.000000,-27.279839,1.992580,-31.105698,1.000000;;, + 480;16;-0.859232,0.499192,-0.111928,0.000000,0.511488,0.833964,-0.207084,0.000000,-0.010031,-0.235183,-0.971899,0.000000,-27.156675,2.313535,-31.109781,1.000000;;, + 560;16;-0.855702,0.505905,-0.108783,0.000000,0.517335,0.831586,-0.202064,0.000000,-0.011763,-0.229184,-0.973312,0.000000,-27.035406,2.529122,-31.122227,1.000000;;, + 640;16;-0.852038,0.512206,-0.108054,0.000000,0.523309,0.828144,-0.200814,0.000000,-0.013374,-0.227647,-0.973652,0.000000,-26.917717,2.605358,-31.149225,1.000000;;, + 720;16;-0.848776,0.515387,-0.118137,0.000000,0.528752,0.826851,-0.191672,0.000000,-0.001103,-0.225152,-0.974323,0.000000,-26.804501,2.486619,-31.197994,1.000000;;, + 800;16;-0.852712,0.506694,-0.127061,0.000000,0.522288,0.831574,-0.188944,0.000000,0.009923,-0.227477,-0.973733,0.000000,-26.700985,2.205780,-31.262104,1.000000;;, + 880;16;-0.859492,0.494064,-0.131048,0.000000,0.510717,0.840591,-0.180485,0.000000,0.020987,-0.222054,-0.974809,0.000000,-26.611767,1.761564,-31.336849,1.000000;;, + 960;16;-0.869096,0.476071,-0.134272,0.000000,0.493710,0.851557,-0.176354,0.000000,0.030383,-0.219560,-0.975126,0.000000,-26.539392,1.200514,-31.411163,1.000000;;, + 1040;16;-0.880700,0.453676,-0.136183,0.000000,0.472124,0.863998,-0.174947,0.000000,0.038293,-0.218371,-0.975114,0.000000,-26.489084,0.565444,-31.475983,1.000000;;, + 1120;16;-0.893894,0.426739,-0.137284,0.000000,0.445963,0.877632,-0.175723,0.000000,0.045497,-0.218302,-0.974820,0.000000,-26.454227,-0.131122,-31.528803,1.000000;;, + 1200;16;-0.908056,0.393894,-0.142415,0.000000,0.415567,0.889745,-0.188830,0.000000,0.052334,-0.230652,-0.971628,0.000000,-26.430658,-0.859936,-31.567528,1.000000;;, + 1280;16;-0.922470,0.357039,-0.146872,0.000000,0.381403,0.901761,-0.203369,0.000000,0.059832,-0.243619,-0.968024,0.000000,-26.415157,-1.627756,-31.590664,1.000000;;, + 1360;16;-0.936632,0.316821,-0.149480,0.000000,0.343409,0.914687,-0.213116,0.000000,0.069207,-0.250944,-0.965524,0.000000,-26.403652,-2.435472,-31.596870,1.000000;;, + 1440;16;-0.949930,0.273334,-0.151398,0.000000,0.302307,0.926494,-0.224097,0.000000,0.079016,-0.258645,-0.962735,0.000000,-26.396225,-3.271423,-31.582434,1.000000;;, + 1520;16;-0.962460,0.228345,-0.146729,0.000000,0.256494,0.941984,-0.216509,0.000000,0.088778,-0.246016,-0.965191,0.000000,-26.391926,-4.126998,-31.545103,1.000000;;, + 1600;16;-0.973279,0.180599,-0.141817,0.000000,0.207809,0.955496,-0.209388,0.000000,0.097690,-0.233264,-0.967494,0.000000,-26.390018,-4.993391,-31.483387,1.000000;;, + 1680;16;-0.982018,0.130495,-0.136426,0.000000,0.156468,0.966935,-0.201384,0.000000,0.105636,-0.219109,-0.969965,0.000000,-26.389751,-5.861845,-31.396585,1.000000;;, + 1760;16;-0.988295,0.078361,-0.130889,0.000000,0.102952,0.975744,-0.193194,0.000000,0.112575,-0.204408,-0.972391,0.000000,-26.390581,-6.723475,-31.284851,1.000000;;, + 1840;16;-0.991307,0.024053,-0.129348,0.000000,0.050465,0.977461,-0.204997,0.000000,0.121502,-0.209743,-0.970178,0.000000,-26.392103,-7.569542,-31.149120,1.000000;;, + 1920;16;-0.991445,-0.030234,-0.126977,0.000000,-0.002105,0.976380,-0.216048,0.000000,0.130510,-0.213933,-0.968091,0.000000,-26.393761,-8.391356,-30.991154,1.000000;;, + 2000;16;-0.989601,-0.065657,-0.127977,0.000000,-0.035271,0.973343,-0.226624,0.000000,0.139445,-0.219754,-0.965538,0.000000,-26.395369,-9.180367,-30.813459,1.000000;;, + 2080;16;-0.986798,-0.097252,-0.129503,0.000000,-0.064643,0.969690,-0.235632,0.000000,0.148494,-0.224150,-0.963175,0.000000,-26.396614,-9.928298,-30.619232,1.000000;;, + 2160;16;-0.984868,-0.112194,-0.132090,0.000000,-0.079888,0.970267,-0.228473,0.000000,0.153796,-0.214463,-0.964548,0.000000,-26.403309,-10.627003,-30.415258,1.000000;;, + 2240;16;-0.982743,-0.127398,-0.134113,0.000000,-0.095799,0.970749,-0.220155,0.000000,0.158237,-0.203508,-0.966201,0.000000,-26.397121,-11.268909,-30.196938,1.000000;;, + 2320;16;-0.978546,-0.154778,-0.135980,0.000000,-0.121814,0.966943,-0.224014,0.000000,0.166158,-0.202644,-0.965053,0.000000,-26.355202,-11.844269,-29.959543,1.000000;;, + 2400;16;-0.973358,-0.183789,-0.137096,0.000000,-0.149820,0.962418,-0.226507,0.000000,0.173573,-0.199933,-0.964313,0.000000,-26.298077,-12.350889,-29.710909,1.000000;;, + 2480;16;-0.967874,-0.207464,-0.142053,0.000000,-0.169510,0.955665,-0.240771,0.000000,0.185706,-0.208956,-0.960130,0.000000,-26.223885,-12.783846,-29.451048,1.000000;;, + 2560;16;-0.961966,-0.230255,-0.146982,0.000000,-0.188517,0.948972,-0.252811,0.000000,0.197693,-0.215486,-0.956286,0.000000,-26.175800,-13.142502,-29.199085,1.000000;;, + 2640;16;-0.958528,-0.239279,-0.154823,0.000000,-0.193917,0.945671,-0.260966,0.000000,0.208855,-0.220120,-0.952852,0.000000,-26.195387,-13.424680,-28.970636,1.000000;;, + 2720;16;-0.954978,-0.248082,-0.162707,0.000000,-0.199542,0.942941,-0.266544,0.000000,0.219548,-0.222077,-0.949990,0.000000,-26.283360,-13.630479,-28.778227,1.000000;;, + 2800;16;-0.953561,-0.246858,-0.172576,0.000000,-0.195597,0.943225,-0.268456,0.000000,0.229048,-0.222234,-0.947707,0.000000,-26.469358,-13.758628,-28.638807,1.000000;;, + 2880;16;-0.952465,-0.244663,-0.181521,0.000000,-0.191561,0.944292,-0.267614,0.000000,0.236884,-0.220121,-0.946273,0.000000,-26.708914,-13.811164,-28.548800,1.000000;;, + 2960;16;-0.951625,-0.242593,-0.188569,0.000000,-0.188648,0.945716,-0.264638,0.000000,0.242532,-0.216263,-0.945732,0.000000,-26.973581,-13.789098,-28.512592,1.000000;;, + 3040;16;-0.952264,-0.236555,-0.192962,0.000000,-0.183013,0.948285,-0.259349,0.000000,0.244333,-0.211654,-0.946311,0.000000,-27.246073,-13.695509,-28.519129,1.000000;;, + 3120;16;-0.951630,-0.238703,-0.193446,0.000000,-0.186562,0.949180,-0.253479,0.000000,0.244121,-0.205129,-0.947801,0.000000,-27.508265,-13.531747,-28.559759,1.000000;;, + 3200;16;-0.954384,-0.230068,-0.190314,0.000000,-0.180596,0.952381,-0.245673,0.000000,0.237773,-0.200096,-0.950487,0.000000,-27.734383,-13.301747,-28.632072,1.000000;;, + 3280;16;-0.945656,-0.267764,-0.184489,0.000000,-0.218163,0.943176,-0.250646,0.000000,0.241120,-0.196776,-0.950337,0.000000,-27.892500,-13.008595,-28.732557,1.000000;;, + 3360;16;-0.935553,-0.302299,-0.182634,0.000000,-0.248927,0.931215,-0.266222,0.000000,0.250550,-0.203603,-0.946452,0.000000,-27.983364,-12.653031,-28.858446,1.000000;;, + 3440;16;-0.942919,-0.265237,-0.201378,0.000000,-0.204891,0.938750,-0.277069,0.000000,0.262533,-0.219993,-0.939510,0.000000,-27.987085,-12.232808,-29.007380,1.000000;;, + 3520;16;-0.952445,-0.206811,-0.223779,0.000000,-0.138372,0.947867,-0.287057,0.000000,0.271480,-0.242442,-0.931408,0.000000,-27.932764,-11.757487,-29.171944,1.000000;;, + 3600;16;-0.958256,-0.157993,-0.238293,0.000000,-0.082825,0.951111,-0.297537,0.000000,0.273652,-0.265380,-0.924493,0.000000,-27.839216,-11.233636,-29.345602,1.000000;;, + 3680;16;-0.962652,-0.111330,-0.246793,0.000000,-0.030878,0.950742,-0.308443,0.000000,0.268975,-0.289303,-0.918671,0.000000,-27.716318,-10.670435,-29.522480,1.000000;;, + 3760;16;-0.966618,-0.071139,-0.246146,0.000000,0.011804,0.947299,-0.320135,0.000000,0.255948,-0.312354,-0.914836,0.000000,-27.576151,-10.080297,-29.696045,1.000000;;, + 3840;16;-0.970162,-0.033133,-0.240184,0.000000,0.050431,0.941378,-0.333563,0.000000,0.237155,-0.335723,-0.911618,0.000000,-27.431482,-9.461965,-29.864712,1.000000;;, + 3920;16;-0.972774,0.006360,-0.231670,0.000000,0.089438,0.932489,-0.349949,0.000000,0.213804,-0.361141,-0.907670,0.000000,-27.294771,-8.817940,-30.026068,1.000000;;, + 4000;16;-0.974295,0.045173,-0.220698,0.000000,0.125929,0.921535,-0.367307,0.000000,0.186789,-0.385658,-0.903536,0.000000,-27.178677,-8.150883,-30.178059,1.000000;;, + 4080;16;-0.974651,0.082562,-0.207939,0.000000,0.159039,0.909370,-0.384385,0.000000,0.157358,-0.407712,-0.899449,0.000000,-27.098522,-7.463268,-30.319038,1.000000;;, + 4160;16;-0.973899,0.117778,-0.194033,0.000000,0.188152,0.897050,-0.399875,0.000000,0.126961,-0.425945,-0.895797,0.000000,-27.058285,-6.758516,-30.447344,1.000000;;, + 4240;16;-0.972112,0.150360,-0.179973,0.000000,0.213336,0.885692,-0.412356,0.000000,0.097399,-0.439251,-0.893069,0.000000,-27.072193,-6.039464,-30.561668,1.000000;;, + 4320;16;-0.969962,0.178673,-0.165076,0.000000,0.233094,0.876778,-0.420627,0.000000,0.069581,-0.446471,-0.892089,0.000000,-27.125252,-5.310541,-30.660139,1.000000;;, + 4400;16;-0.968280,0.200485,-0.149129,0.000000,0.245693,0.872583,-0.422178,0.000000,0.045487,-0.445426,-0.894162,0.000000,-27.210672,-4.575768,-30.741310,1.000000;;, + 4480;16;-0.967196,0.217127,-0.131860,0.000000,0.252894,0.872030,-0.419057,0.000000,0.023998,-0.438658,-0.898334,0.000000,-27.318468,-3.839471,-30.804024,1.000000;;, + 4560;16;-0.967051,0.228251,-0.112754,0.000000,0.254538,0.875105,-0.411585,0.000000,0.004727,-0.426724,-0.904370,0.000000,-27.439497,-3.105746,-30.847593,1.000000;;, + 4640;16;-0.967164,0.236582,-0.092861,0.000000,0.253796,0.879644,-0.402262,0.000000,-0.013484,-0.412621,-0.910803,0.000000,-27.564468,-2.379188,-30.871828,1.000000;;, + 4720;16;-0.966712,0.245232,-0.073003,0.000000,0.253826,0.883169,-0.394442,0.000000,-0.032256,-0.399841,-0.916017,0.000000,-27.678188,-1.668544,-30.876764,1.000000;;, + 4800;16;-0.965965,0.253205,-0.052900,0.000000,0.253587,0.886612,-0.386799,0.000000,-0.051038,-0.387049,-0.920645,0.000000,-27.789658,-0.963900,-30.864017,1.000000;;, + 4960;16;-0.950769,0.300574,-0.075459,0.000000,0.309313,0.905410,-0.290788,0.000000,-0.019082,-0.299812,-0.953807,0.000000,-27.853168,-0.096285,-31.055355,1.000000;;; + } + { Bip01_R_Thigh } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,-0.000691,-0.000000,0.000000,0.000691,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000005,0.000001,1.000000;;, + 80;16;0.992696,-0.120646,-0.000000,0.000000,0.120646,0.992696,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231514,0.000002,-0.000002,1.000000;;, + 160;16;0.981416,-0.191892,-0.000000,0.000000,0.191892,0.981416,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231522,-0.000015,0.000003,1.000000;;, + 240;16;0.955509,-0.294962,-0.000000,0.000000,0.294962,0.955509,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000021,0.000008,1.000000;;, + 320;16;0.918810,-0.394701,-0.000000,0.000000,0.394701,0.918810,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231514,-0.000011,-0.000001,1.000000;;, + 400;16;0.881477,-0.472227,0.000000,0.000000,0.472227,0.881477,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231529,-0.000002,0.000000,1.000000;;, + 480;16;0.837618,-0.546256,-0.000000,0.000000,0.546256,0.837618,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000013,-0.000001,1.000000;;, + 560;16;0.859904,-0.510455,-0.000000,0.000000,0.510456,0.859904,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,-0.000008,0.000003,1.000000;;, + 640;16;0.880661,-0.473747,0.000000,0.000000,0.473747,0.880661,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231522,-0.000020,0.000005,1.000000;;, + 720;16;0.841689,-0.539962,0.000000,0.000000,0.539962,0.841689,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231514,-0.000014,0.000004,1.000000;;, + 800;16;0.814050,-0.580795,0.000000,0.000000,0.580795,0.814050,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000020,0.000008,1.000000;;, + 880;16;0.797222,-0.603687,-0.000000,0.000000,0.603687,0.797222,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231483,-0.000022,0.000007,1.000000;;, + 960;16;0.788129,-0.615510,-0.000000,0.000000,0.615510,0.788129,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000014,0.000006,1.000000;;, + 1040;16;0.785779,-0.618507,-0.000000,0.000000,0.618507,0.785779,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231499,-0.000006,0.000003,1.000000;;, + 1120;16;0.789502,-0.613748,-0.000000,0.000000,0.613748,0.789502,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231499,-0.000023,0.000006,1.000000;;, + 1200;16;0.794340,-0.607473,-0.000000,0.000000,0.607473,0.794340,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231499,-0.000002,-0.000001,1.000000;;, + 1280;16;0.803662,-0.595085,0.000000,0.000000,0.595085,0.803663,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,-0.000020,0.000005,1.000000;;, + 1360;16;0.814971,-0.579501,0.000000,0.000000,0.579501,0.814971,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,-0.000012,0.000003,1.000000;;, + 1440;16;0.829500,-0.558507,0.000000,0.000000,0.558507,0.829500,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000009,0.000001,1.000000;;, + 1520;16;0.847784,-0.530342,-0.000000,0.000000,0.530342,0.847784,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,0.000008,-0.000001,1.000000;;, + 1600;16;0.867527,-0.497391,-0.000000,0.000000,0.497391,0.867527,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231514,-0.000005,0.000004,1.000000;;, + 1680;16;0.887900,-0.460037,0.000000,0.000000,0.460037,0.887900,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231522,0.000010,-0.000002,1.000000;;, + 1760;16;0.908067,-0.418825,-0.000000,0.000000,0.418825,0.908067,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231506,-0.000008,0.000003,1.000000;;, + 1840;16;0.926226,-0.376969,0.000000,0.000000,0.376968,0.926226,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231491,0.000014,0.000001,1.000000;;, + 1920;16;0.942370,-0.334573,0.000000,0.000000,0.334573,0.942370,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,0.000007,0.000003,1.000000;;, + 2000;16;0.944301,-0.329084,0.000000,0.000000,0.329084,0.944301,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000000,0.000002,1.000000;;, + 2080;16;0.943450,-0.331516,-0.000000,0.000000,0.331516,0.943450,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,0.000019,-0.000003,1.000000;;, + 2160;16;0.931197,-0.364515,-0.000000,0.000000,0.364515,0.931197,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,-0.000000,0.000000,1.000000;;, + 2240;16;0.918168,-0.396191,-0.000000,0.000000,0.396191,0.918168,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231499,0.000011,-0.000004,1.000000;;, + 2320;16;0.914538,-0.404499,0.000000,0.000000,0.404499,0.914538,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000010,-0.000001,1.000000;;, + 2400;16;0.913027,-0.407898,-0.000000,0.000000,0.407898,0.913028,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231506,0.000013,-0.000001,1.000000;;, + 2480;16;0.908578,-0.417715,-0.000000,0.000000,0.417715,0.908578,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231491,0.000001,-0.000001,1.000000;;, + 2560;16;0.904021,-0.427488,0.000000,0.000000,0.427488,0.904021,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231491,-0.000007,0.000003,1.000000;;, + 2640;16;0.887853,-0.460127,0.000000,0.000000,0.460127,0.887853,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231522,0.000017,-0.000005,1.000000;;, + 2720;16;0.870501,-0.492167,0.000000,0.000000,0.492167,0.870501,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000000,0.000000,1.000000;;, + 2800;16;0.841677,-0.539981,-0.000000,0.000000,0.539981,0.841677,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,-0.000001,0.000001,1.000000;;, + 2880;16;0.810227,-0.586117,0.000000,0.000000,0.586117,0.810227,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231499,0.000018,-0.000004,1.000000;;, + 2960;16;0.778798,-0.627275,0.000000,0.000000,0.627275,0.778798,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,0.000008,-0.000006,1.000000;;, + 3040;16;0.745275,-0.666757,-0.000000,0.000000,0.666757,0.745275,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000001,0.000000,1.000000;;, + 3120;16;0.728440,-0.685110,0.000000,0.000000,0.685110,0.728439,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231499,-0.000004,0.000003,1.000000;;, + 3200;16;0.711169,-0.703021,0.000000,0.000000,0.703021,0.711169,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231506,-0.000007,0.000002,1.000000;;, + 3280;16;0.735082,-0.677978,-0.000000,0.000000,0.677978,0.735082,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000010,0.000000,1.000000;;, + 3360;16;0.747912,-0.663797,-0.000000,0.000000,0.663798,0.747912,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,0.000017,-0.000007,1.000000;;, + 3440;16;0.692942,-0.720993,-0.000000,0.000000,0.720993,0.692942,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,0.000020,-0.000003,1.000000;;, + 3520;16;0.618723,-0.785609,0.000000,0.000000,0.785609,0.618723,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231514,0.000003,-0.000002,1.000000;;, + 3600;16;0.568878,-0.822422,0.000000,0.000000,0.822422,0.568878,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,0.000002,-0.000004,1.000000;;, + 3680;16;0.538025,-0.842929,0.000000,0.000000,0.842929,0.538025,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,-0.000004,0.000002,1.000000;;, + 3760;16;0.538263,-0.842777,0.000000,0.000000,0.842777,0.538264,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231491,0.000011,-0.000005,1.000000;;, + 3840;16;0.556128,-0.831097,0.000000,0.000000,0.831097,0.556128,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,0.000010,-0.000007,1.000000;;, + 3920;16;0.580332,-0.814380,0.000000,0.000000,0.814380,0.580332,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000009,0.000003,1.000000;;, + 4000;16;0.612475,-0.790490,0.000000,0.000000,0.790490,0.612475,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000020,0.000009,1.000000;;, + 4080;16;0.650734,-0.759306,0.000000,0.000000,0.759306,0.650734,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231506,-0.000007,0.000001,1.000000;;, + 4160;16;0.693185,-0.720759,-0.000000,0.000000,0.720760,0.693185,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231506,0.000024,-0.000009,1.000000;;, + 4240;16;0.736246,-0.676714,0.000000,0.000000,0.676714,0.736246,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231514,0.000018,-0.000011,1.000000;;, + 4320;16;0.782863,-0.622194,-0.000000,0.000000,0.622194,0.782863,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231514,0.000011,-0.000009,1.000000;;, + 4400;16;0.834057,-0.551678,-0.000000,0.000000,0.551678,0.834057,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231499,0.000028,-0.000016,1.000000;;, + 4480;16;0.885285,-0.465049,0.000000,0.000000,0.465049,0.885285,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,119.231522,0.000006,-0.000006,1.000000;;, + 4560;16;0.933661,-0.358157,-0.000000,0.000000,0.358157,0.933661,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231491,0.000025,-0.000013,1.000000;;, + 4640;16;0.970815,-0.239830,-0.000000,0.000000,0.239830,0.970815,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231476,-0.000004,0.000002,1.000000;;, + 4720;16;0.992635,-0.121142,0.000000,0.000000,0.121142,0.992635,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231483,0.000008,-0.000000,1.000000;;, + 4800;16;1.000000,-0.000691,-0.000000,0.000000,0.000691,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231522,0.000021,-0.000011,1.000000;;, + 4960;16;1.000000,-0.000691,-0.000000,0.000000,0.000691,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000005,0.000001,1.000000;;; + } + { Bip01_R_Calf } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.968778,0.242973,0.049336,0.000000,-0.242361,0.970017,-0.018119,0.000000,-0.052260,0.005597,0.998618,0.000000,119.231522,-0.000002,0.000002,1.000000;;, + 80;16;0.961616,0.269772,0.050179,0.000000,-0.268547,0.962804,-0.029856,0.000000,-0.056367,0.015235,0.998294,0.000000,119.231529,-0.000013,0.000004,1.000000;;, + 160;16;0.956946,0.285763,0.050931,0.000000,-0.284133,0.958073,-0.036938,0.000000,-0.059351,0.020876,0.998019,0.000000,119.231491,0.000001,-0.000003,1.000000;;, + 240;16;0.949554,0.309198,0.052383,0.000000,-0.306909,0.950557,-0.047416,0.000000,-0.064454,0.028947,0.997501,0.000000,119.231491,0.000013,-0.000003,1.000000;;, + 320;16;0.941553,0.332466,0.054256,0.000000,-0.329428,0.942402,-0.057929,0.000000,-0.070390,0.036669,0.996845,0.000000,119.231491,0.000004,0.000001,1.000000;;, + 400;16;0.934630,0.351170,0.056087,0.000000,-0.347449,0.935341,-0.066452,0.000000,-0.075797,0.042621,0.996212,0.000000,119.231522,-0.000004,-0.000001,1.000000;;, + 480;16;0.927307,0.369747,0.058206,0.000000,-0.365269,0.927878,-0.074976,0.000000,-0.081730,0.048265,0.995485,0.000000,119.231514,0.000006,0.000000,1.000000;;, + 560;16;0.947979,0.312243,0.061972,0.000000,-0.307242,0.948384,-0.078548,0.000000,-0.083299,0.055421,0.994982,0.000000,119.231483,0.000002,0.000000,1.000000;;, + 640;16;0.965072,0.253591,0.065789,0.000000,-0.248051,0.965269,-0.082018,0.000000,-0.084303,0.062834,0.994457,0.000000,119.231514,0.000025,-0.000004,1.000000;;, + 720;16;0.952754,0.296732,0.064877,0.000000,-0.291600,0.953349,-0.078073,0.000000,-0.085017,0.055466,0.994834,0.000000,119.231506,0.000021,-0.000005,1.000000;;, + 800;16;0.942792,0.327248,0.063655,0.000000,-0.322237,0.943467,-0.077679,0.000000,-0.085477,0.052723,0.994944,0.000000,119.231491,0.000017,-0.000006,1.000000;;, + 880;16;0.945118,0.318768,0.071687,0.000000,-0.314227,0.946918,-0.067881,0.000000,-0.089520,0.041629,0.995115,0.000000,119.231499,0.000032,-0.000006,1.000000;;, + 960;16;0.949310,0.304217,0.079135,0.000000,-0.300018,0.952000,-0.060710,0.000000,-0.093805,0.033891,0.995014,0.000000,119.231506,0.000007,-0.000003,1.000000;;, + 1040;16;0.954730,0.284711,0.086197,0.000000,-0.280703,0.958173,-0.055767,0.000000,-0.098469,0.029047,0.994716,0.000000,119.231529,0.000002,0.000001,1.000000;;, + 1120;16;0.960945,0.260642,0.093010,0.000000,-0.256682,0.965070,-0.052479,0.000000,-0.103440,0.026555,0.994281,0.000000,119.231514,0.000020,-0.000003,1.000000;;, + 1200;16;0.959528,0.266249,0.091746,0.000000,-0.261187,0.963192,-0.063574,0.000000,-0.105295,0.037039,0.993751,0.000000,119.231499,0.000007,-0.000002,1.000000;;, + 1280;16;0.959127,0.268209,0.090224,0.000000,-0.261922,0.962114,-0.075715,0.000000,-0.107113,0.048988,0.993039,0.000000,119.231506,0.000018,-0.000007,1.000000;;, + 1360;16;0.955512,0.283673,0.080786,0.000000,-0.277209,0.957255,-0.082575,0.000000,-0.100757,0.056507,0.993305,0.000000,119.231506,-0.000005,0.000000,1.000000;;, + 1440;16;0.952631,0.295732,0.070969,0.000000,-0.289172,0.953054,-0.089822,0.000000,-0.094201,0.065045,0.993426,0.000000,119.231499,-0.000014,0.000009,1.000000;;, + 1520;16;0.954221,0.292597,0.062040,0.000000,-0.287759,0.954648,-0.076430,0.000000,-0.081589,0.055078,0.995143,0.000000,119.231499,0.000002,-0.000004,1.000000;;, + 1600;16;0.956422,0.287048,0.053486,0.000000,-0.283651,0.956852,-0.063058,0.000000,-0.069279,0.045138,0.996576,0.000000,119.231491,0.000001,-0.000005,1.000000;;, + 1680;16;0.959114,0.279358,0.045371,0.000000,-0.277210,0.959592,-0.048358,0.000000,-0.057047,0.033803,0.997799,0.000000,119.231499,-0.000008,-0.000001,1.000000;;, + 1760;16;0.962123,0.269997,0.037695,0.000000,-0.268835,0.962615,-0.033178,0.000000,-0.045244,0.021788,0.998738,0.000000,119.231499,0.000015,-0.000006,1.000000;;, + 1840;16;0.962117,0.271123,0.028679,0.000000,-0.269985,0.962110,-0.038108,0.000000,-0.037925,0.028921,0.998862,0.000000,119.231491,-0.000004,-0.000002,1.000000;;, + 1920;16;0.962055,0.272157,0.019505,0.000000,-0.271184,0.961617,-0.041862,0.000000,-0.030149,0.034984,0.998933,0.000000,119.231499,-0.000008,-0.000001,1.000000;;, + 2000;16;0.954595,0.297496,0.015627,0.000000,-0.296517,0.953896,-0.046475,0.000000,-0.028733,0.039731,0.998797,0.000000,119.231491,0.000012,-0.000003,1.000000;;, + 2080;16;0.945039,0.326757,0.011431,0.000000,-0.325822,0.944092,-0.050296,0.000000,-0.027226,0.043807,0.998669,0.000000,119.231476,-0.000017,0.000006,1.000000;;, + 2160;16;0.929391,0.368812,0.014497,0.000000,-0.367984,0.928921,-0.041145,0.000000,-0.028641,0.032905,0.999048,0.000000,119.231499,-0.000003,0.000002,1.000000;;, + 2240;16;0.911959,0.409892,0.017853,0.000000,-0.409216,0.911864,-0.032326,0.000000,-0.029530,0.022175,0.999318,0.000000,119.231506,-0.000002,0.000003,1.000000;;, + 2320;16;0.897343,0.441136,0.013243,0.000000,-0.440449,0.897039,-0.036404,0.000000,-0.027938,0.026834,0.999249,0.000000,119.231506,0.000025,-0.000004,1.000000;;, + 2400;16;0.882926,0.469438,0.008413,0.000000,-0.468778,0.882405,-0.040114,0.000000,-0.026255,0.031473,0.999160,0.000000,119.231514,0.000007,-0.000002,1.000000;;, + 2480;16;0.871719,0.490003,0.001830,0.000000,-0.488862,0.869932,-0.065059,0.000000,-0.033471,0.055819,0.997880,0.000000,119.231491,0.000006,0.000001,1.000000;;, + 2560;16;0.862916,0.505338,-0.002894,0.000000,-0.503552,0.859356,-0.089117,0.000000,-0.042548,0.078358,0.996017,0.000000,119.231476,0.000015,-0.000005,1.000000;;, + 2640;16;0.851604,0.524175,0.003224,0.000000,-0.520013,0.845585,-0.120719,0.000000,-0.066004,0.101128,0.992682,0.000000,119.231514,-0.000008,-0.000003,1.000000;;, + 2720;16;0.844668,0.535099,0.014346,0.000000,-0.527177,0.836215,-0.151094,0.000000,-0.092846,0.120062,0.988415,0.000000,119.231491,0.000021,-0.000007,1.000000;;, + 2800;16;0.842347,0.537394,0.040743,0.000000,-0.522436,0.832783,-0.183122,0.000000,-0.132338,0.132967,0.982246,0.000000,119.231491,0.000019,-0.000007,1.000000;;, + 2880;16;0.847564,0.524947,0.077888,0.000000,-0.500331,0.839350,-0.212510,0.000000,-0.176932,0.141146,0.974050,0.000000,119.231491,0.000008,-0.000007,1.000000;;, + 2960;16;0.862664,0.489335,0.127914,0.000000,-0.452684,0.859806,-0.236242,0.000000,-0.225583,0.145893,0.963238,0.000000,119.231506,0.000004,0.000001,1.000000;;, + 3040;16;0.883839,0.425545,0.194266,0.000000,-0.374392,0.892473,-0.251640,0.000000,-0.280461,0.149678,0.948124,0.000000,119.231506,-0.000006,-0.000000,1.000000;;, + 3120;16;0.912598,0.319880,0.254641,0.000000,-0.255694,0.932509,-0.255046,0.000000,-0.319039,0.167644,0.932797,0.000000,119.231506,0.000024,-0.000009,1.000000;;, + 3200;16;0.928966,0.153149,0.336999,0.000000,-0.073022,0.968328,-0.238766,0.000000,-0.362892,0.197198,0.910726,0.000000,119.231483,0.000025,-0.000008,1.000000;;, + 3280;16;0.937054,0.115470,0.329539,0.000000,-0.042454,0.974414,-0.220714,0.000000,-0.346593,0.192831,0.917981,0.000000,119.231491,0.000020,-0.000004,1.000000;;, + 3360;16;0.949507,0.045192,0.310475,0.000000,0.012573,0.983296,-0.181577,0.000000,-0.313494,0.176312,0.933079,0.000000,119.231514,0.000004,-0.000000,1.000000;;, + 3440;16;0.959181,-0.032297,0.280942,0.000000,0.070203,0.989553,-0.125924,0.000000,-0.273940,0.140507,0.951428,0.000000,119.231506,-0.000007,-0.000002,1.000000;;, + 3520;16;0.963427,-0.104243,0.246864,0.000000,0.123716,0.990207,-0.064688,0.000000,-0.237704,0.092863,0.966889,0.000000,119.231506,-0.000002,-0.000002,1.000000;;, + 3600;16;0.964323,-0.151520,0.217080,0.000000,0.157682,0.987426,-0.011249,0.000000,-0.212646,0.045077,0.976089,0.000000,119.231499,0.000002,0.000002,1.000000;;, + 3680;16;0.965890,-0.170849,0.194596,0.000000,0.167334,0.985297,0.034484,0.000000,-0.197626,-0.000745,0.980277,0.000000,119.231468,0.000007,-0.000011,1.000000;;, + 3760;16;0.970914,-0.148335,0.187941,0.000000,0.138962,0.988344,0.062179,0.000000,-0.194974,-0.034254,0.980210,0.000000,119.231522,0.000009,0.000002,1.000000;;, + 3840;16;0.976399,-0.100533,0.191150,0.000000,0.087220,0.993221,0.076851,0.000000,-0.197580,-0.058365,0.978548,0.000000,119.231514,0.000010,0.000001,1.000000;;, + 3920;16;0.979355,-0.036699,0.198787,0.000000,0.020678,0.996411,0.082076,0.000000,-0.201086,-0.076271,0.976600,0.000000,119.231483,0.000022,-0.000013,1.000000;;, + 4000;16;0.977445,0.036592,0.207995,0.000000,-0.053320,0.995727,0.075395,0.000000,-0.204348,-0.084785,0.975220,0.000000,119.231491,0.000020,-0.000018,1.000000;;, + 4080;16;0.970276,0.111665,0.214698,0.000000,-0.126820,0.990222,0.058118,0.000000,-0.206109,-0.083619,0.974950,0.000000,119.231483,0.000014,-0.000012,1.000000;;, + 4160;16;0.959692,0.180561,0.215382,0.000000,-0.192249,0.980742,0.034431,0.000000,-0.205018,-0.074450,0.975923,0.000000,119.231522,-0.000024,0.000010,1.000000;;, + 4240;16;0.949330,0.234824,0.208878,0.000000,-0.242488,0.970086,0.011497,0.000000,-0.199930,-0.061565,0.977874,0.000000,119.231514,-0.000033,0.000018,1.000000;;, + 4320;16;0.942611,0.270034,0.196382,0.000000,-0.273834,0.961743,-0.008064,0.000000,-0.191047,-0.046175,0.980494,0.000000,119.231483,-0.000004,-0.000003,1.000000;;, + 4400;16;0.943918,0.276524,0.180428,0.000000,-0.277778,0.960461,-0.018793,0.000000,-0.178491,-0.032379,0.983409,0.000000,119.231506,-0.000021,0.000012,1.000000;;, + 4480;16;0.950802,0.263535,0.162863,0.000000,-0.263183,0.964444,-0.024133,0.000000,-0.163432,-0.019916,0.986354,0.000000,119.231476,-0.000019,0.000005,1.000000;;, + 4560;16;0.961555,0.233630,0.144324,0.000000,-0.232262,0.972292,-0.026493,0.000000,-0.146514,-0.008047,0.989176,0.000000,119.231476,-0.000045,0.000023,1.000000;;, + 4640;16;0.972677,0.195524,0.125179,0.000000,-0.193671,0.980697,-0.026926,0.000000,-0.128027,0.001947,0.991769,0.000000,119.231506,0.000011,-0.000006,1.000000;;, + 4720;16;0.981532,0.160253,0.104474,0.000000,-0.158198,0.987018,-0.027719,0.000000,-0.107560,0.010679,0.994141,0.000000,119.231483,0.000002,-0.000002,1.000000;;, + 4800;16;0.988831,0.124156,0.082452,0.000000,-0.122246,0.992109,-0.027835,0.000000,-0.085257,0.017445,0.996206,0.000000,119.231476,-0.000039,0.000023,1.000000;;, + 4960;16;0.968778,0.242973,0.049336,0.000000,-0.242361,0.970017,-0.018119,0.000000,-0.052260,0.005597,0.998618,0.000000,119.231522,-0.000002,0.000002,1.000000;;; + } + { Bip01_R_Foot } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423256,34.577141,-0.000001,1.000000;;, + 80;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423260,34.577141,-0.000001,1.000000;;, + 160;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423243,34.577141,-0.000002,1.000000;;, + 240;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423237,34.577122,0.000005,1.000000;;, + 320;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423248,34.577145,-0.000002,1.000000;;, + 400;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423233,34.577118,0.000006,1.000000;;, + 480;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423246,34.577118,0.000003,1.000000;;, + 560;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423237,34.577145,0.000000,1.000000;;, + 640;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423241,34.577129,0.000002,1.000000;;, + 720;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423254,34.577126,-0.000001,1.000000;;, + 800;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423248,34.577126,0.000004,1.000000;;, + 880;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423239,34.577137,-0.000002,1.000000;;, + 960;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423252,34.577133,-0.000001,1.000000;;, + 1040;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423252,34.577129,0.000002,1.000000;;, + 1120;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423243,34.577133,0.000004,1.000000;;, + 1200;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423243,34.577137,0.000003,1.000000;;, + 1280;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423254,34.577126,0.000000,1.000000;;, + 1360;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423246,34.577145,0.000000,1.000000;;, + 1440;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423246,34.577141,-0.000001,1.000000;;, + 1520;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423250,34.577145,0.000000,1.000000;;, + 1600;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423252,34.577126,0.000005,1.000000;;, + 1680;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423244,34.577145,-0.000002,1.000000;;, + 1760;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423264,34.577141,-0.000001,1.000000;;, + 1840;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423239,34.577133,0.000002,1.000000;;, + 1920;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423254,34.577148,0.000000,1.000000;;, + 2000;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423231,34.577152,-0.000002,1.000000;;, + 2080;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423248,34.577145,-0.000002,1.000000;;, + 2160;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423264,34.577126,0.000001,1.000000;;, + 2240;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423244,34.577145,0.000000,1.000000;;, + 2320;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423246,34.577126,0.000003,1.000000;;, + 2400;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423254,34.577122,0.000004,1.000000;;, + 2480;16;0.024776,0.999689,-0.002694,0.000000,-0.999680,0.024761,-0.005212,0.000000,-0.005144,0.002822,0.999983,0.000000,27.423239,34.577126,0.000006,1.000000;;, + 2560;16;0.044065,0.999017,-0.004895,0.000000,-0.998990,0.044020,-0.008951,0.000000,-0.008727,0.005284,0.999948,0.000000,27.423248,34.577118,0.000004,1.000000;;, + 2640;16;0.115791,0.993154,-0.015418,0.000000,-0.993024,0.115400,-0.024201,0.000000,-0.022256,0.018112,0.999588,0.000000,27.423241,34.577133,-0.000000,1.000000;;, + 2720;16;0.177487,0.983804,-0.025052,0.000000,-0.983603,0.176508,-0.037004,0.000000,-0.031983,0.031208,0.999001,0.000000,27.423243,34.577141,0.000001,1.000000;;, + 2800;16;0.240793,0.969825,-0.038193,0.000000,-0.969821,0.238867,-0.048881,0.000000,-0.038283,0.048810,0.998074,0.000000,27.423264,34.577126,0.000001,1.000000;;, + 2880;16;0.286167,0.956856,-0.050355,0.000000,-0.957322,0.283293,-0.057265,0.000000,-0.040530,0.064593,0.997088,0.000000,27.423264,34.577122,0.000002,1.000000;;, + 2960;16;0.286216,0.956506,-0.056368,0.000000,-0.957519,0.283368,-0.053482,0.000000,-0.035183,0.069281,0.996977,0.000000,27.423243,34.577133,0.000004,1.000000;;, + 3040;16;0.260367,0.963717,-0.058811,0.000000,-0.965111,0.258026,-0.044523,0.000000,-0.027733,0.068352,0.997276,0.000000,27.423264,34.577133,-0.000003,1.000000;;, + 3120;16;0.155009,0.987246,-0.036283,0.000000,-0.987737,0.154184,-0.024549,0.000000,-0.018642,0.039643,0.999040,0.000000,27.423260,34.577133,-0.000001,1.000000;;, + 3200;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423254,34.577126,-0.000004,1.000000;;, + 3280;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423252,34.577156,0.000000,1.000000;;, + 3360;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423235,34.577148,0.000001,1.000000;;, + 3440;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423250,34.577133,-0.000003,1.000000;;, + 3520;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423254,34.577137,-0.000004,1.000000;;, + 3600;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423254,34.577141,0.000003,1.000000;;, + 3680;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423246,34.577141,0.000001,1.000000;;, + 3760;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423243,34.577137,0.000006,1.000000;;, + 3840;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423250,34.577126,0.000009,1.000000;;, + 3920;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423264,34.577133,0.000002,1.000000;;, + 4000;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423225,34.577141,-0.000002,1.000000;;, + 4080;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423256,34.577133,-0.000001,1.000000;;, + 4160;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423248,34.577114,0.000016,1.000000;;, + 4240;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423229,34.577160,-0.000016,1.000000;;, + 4320;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423254,34.577152,-0.000008,1.000000;;, + 4400;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423243,34.577137,0.000001,1.000000;;, + 4480;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423248,34.577156,-0.000007,1.000000;;, + 4560;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423246,34.577122,0.000004,1.000000;;, + 4640;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423243,34.577122,0.000004,1.000000;;, + 4720;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423264,34.577164,-0.000009,1.000000;;, + 4800;16;0.000000,1.000000,0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,27.423260,34.577152,-0.000010,1.000000;;, + 4960;16;0.000000,1.000000,-0.000000,0.000000,-1.000000,0.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,27.423256,34.577141,-0.000001,1.000000;;; + } + { Bip01_R_Toe0 } + } + + Animation { + + + AnimationKey { + 4; + 62; + 0;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738550,-0.000017,-0.000003,1.000000;;, + 80;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738570,0.000009,0.000001,1.000000;;, + 160;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738559,-0.000016,0.000003,1.000000;;, + 240;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738566,-0.000021,-0.000003,1.000000;;, + 320;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738569,-0.000017,-0.000004,1.000000;;, + 400;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738562,0.000016,-0.000001,1.000000;;, + 480;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738554,-0.000006,0.000001,1.000000;;, + 560;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738573,-0.000013,-0.000002,1.000000;;, + 640;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738546,0.000014,0.000001,1.000000;;, + 720;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738572,-0.000015,-0.000003,1.000000;;, + 800;16;1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738565,-0.000003,-0.000002,1.000000;;, + 880;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738555,-0.000002,-0.000002,1.000000;;, + 960;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738550,0.000001,0.000002,1.000000;;, + 1040;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738564,-0.000014,-0.000003,1.000000;;, + 1120;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738560,-0.000017,-0.000002,1.000000;;, + 1200;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738569,0.000010,-0.000004,1.000000;;, + 1280;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738572,0.000021,-0.000003,1.000000;;, + 1360;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738555,0.000018,0.000000,1.000000;;, + 1440;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738553,0.000010,-0.000001,1.000000;;, + 1520;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738554,-0.000013,-0.000002,1.000000;;, + 1600;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738569,0.000017,-0.000002,1.000000;;, + 1680;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738546,0.000001,0.000001,1.000000;;, + 1760;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738545,-0.000005,0.000004,1.000000;;, + 1840;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738573,0.000006,-0.000004,1.000000;;, + 1920;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738564,0.000001,0.000000,1.000000;;, + 2000;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738553,-0.000003,-0.000000,1.000000;;, + 2080;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738568,-0.000013,-0.000007,1.000000;;, + 2160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738563,0.000001,-0.000003,1.000000;;, + 2240;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738546,-0.000010,0.000004,1.000000;;, + 2320;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738555,0.000009,0.000001,1.000000;;, + 2400;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738561,-0.000011,-0.000002,1.000000;;, + 2480;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738555,0.000004,-0.000001,1.000000;;, + 2560;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738554,-0.000003,-0.000003,1.000000;;, + 2640;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738580,-0.000005,-0.000007,1.000000;;, + 2720;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738547,0.000002,-0.000000,1.000000;;, + 2800;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738557,0.000008,-0.000001,1.000000;;, + 2880;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738566,-0.000006,-0.000001,1.000000;;, + 2960;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738572,0.000009,-0.000003,1.000000;;, + 3040;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738565,-0.000010,-0.000004,1.000000;;, + 3120;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738559,0.000005,-0.000002,1.000000;;, + 3200;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738583,0.000002,-0.000004,1.000000;;, + 3280;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738565,0.000011,-0.000003,1.000000;;, + 3360;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738559,-0.000004,-0.000001,1.000000;;, + 3440;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738562,0.000010,-0.000000,1.000000;;, + 3520;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738569,0.000010,0.000005,1.000000;;, + 3600;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738554,0.000004,-0.000001,1.000000;;, + 3680;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738561,-0.000015,-0.000001,1.000000;;, + 3760;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738567,-0.000010,-0.000000,1.000000;;, + 3840;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738560,-0.000001,-0.000002,1.000000;;, + 3920;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738556,0.000008,-0.000003,1.000000;;, + 4000;16;1.000000,-0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738570,0.000005,-0.000004,1.000000;;, + 4080;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738561,-0.000005,-0.000003,1.000000;;, + 4160;16;1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738545,-0.000018,0.000004,1.000000;;, + 4240;16;1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738561,0.000007,0.000004,1.000000;;, + 4320;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,15.738585,0.000006,-0.000014,1.000000;;, + 4400;16;1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,-0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738553,-0.000006,0.000002,1.000000;;, + 4480;16;1.000000,0.000000,-0.000000,0.000000,-0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738564,0.000006,-0.000004,1.000000;;, + 4560;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738543,0.000010,0.000013,1.000000;;, + 4640;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738590,-0.000006,-0.000010,1.000000;;, + 4720;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,15.738582,-0.000003,-0.000011,1.000000;;, + 4800;16;1.000000,0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,15.738579,0.000004,-0.000012,1.000000;;, + 4960;16;1.000000,-0.000000,-0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,-0.000000,0.000000,1.000000,0.000000,15.738550,-0.000017,-0.000003,1.000000;;; + } + { Dummy11 } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step01/D3DBlank.cs b/Source Code updated 08-12-05/Spacewar3D/Step01/D3DBlank.cs new file mode 100644 index 0000000..165bbb0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step01/D3DBlank.cs @@ -0,0 +1,111 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + +public delegate void AudioDelegate(); // Delegate to handle audio playback. + +public class GraphicsClass : GraphicsSample { + private GraphicsFont drawingFont = null; + private Point destination = new Point(0, 0); + private InputClass input = null; + + private const byte msgUp = 0; + private const byte msgDown = 1; + private const byte msgLeft = 2; + private const byte msgRight = 3; + private const byte msgCancelUp = 4; + private const byte msgCancelDown = 5; + private const byte msgCancelLeft = 6; + private const byte msgCancelRight = 7; + + public GraphicsClass() { + this.Text = "Step01"; + input = new InputClass(this); + drawingFont = new GraphicsFont( "Arial", System.Drawing.FontStyle.Bold ); + } + + + /// + /// Called once per frame, the call is the entry point for 3d rendering. This + /// function sets up render states, clears the viewport, and renders the scene. + /// + protected override void Render() { + + input.GetInputState(); + + //Clear the backbuffer to a Blue color + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + //Begin the scene + device.BeginScene(); + drawingFont.DrawText(5, 5, Color.White, "X: " + destination.X + " Y: " + destination.Y); + + // + // TODO: Insert application rendering code here. + // + device.EndScene(); + } + + /// + /// Initialize scene objects. + /// + protected override void InitializeDeviceObjects() { + drawingFont.InitializeDeviceObjects(device); + + // + // TODO: Insert application device initialization code here. + // + } + + /// + /// Called when a device needs to be restored. + /// + protected override void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { + // + // TODO: Insert application device restoration code here. + // + } + protected override void Dispose(bool disposing) { + base.Dispose(disposing); + } + public void MessageArrived(byte message) { + switch (message) { + case msgUp: { + destination.X = 1; + break; + } + case msgDown: { + destination.X = -1; + break; + } + case msgLeft: { + destination.Y = 1; + break; + } + case msgRight: { + destination.Y = -1; + break; + } + case msgCancelUp: + case msgCancelDown: { + destination.X = 0; + break; + } + case msgCancelLeft: + case msgCancelRight: { + destination.Y = 0; + break; + } + } + } + + /// + // When the peer closes, the code here is executed. + /// + public void PeerClose() { + // The session was terminated, go ahead and shut down + this.Dispose(); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step01/D3DBlank.resx b/Source Code updated 08-12-05/Spacewar3D/Step01/D3DBlank.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step01/D3DBlank.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step01/D3DSettingsForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step01/D3DSettingsForm.cs new file mode 100644 index 0000000..889162a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step01/D3DSettingsForm.cs @@ -0,0 +1,1037 @@ +//----------------------------------------------------------------------------- +// File: D3DSettingsForm.cs +// +// Desc: Application form for setting up user defined display settings +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + + + + + +/// +/// A form to allow the user to change the current D3D settings. +/// +public class D3DSettingsForm : System.Windows.Forms.Form { + private D3DEnumeration enumeration; + public D3DSettings settings; // Potential new D3D settings + + private System.Windows.Forms.GroupBox adapterDeviceGroupBox; + private System.Windows.Forms.Label displayAdapterLabel; + private System.Windows.Forms.ComboBox adapterComboBox; + private System.Windows.Forms.Label deviceLabel; + private System.Windows.Forms.ComboBox deviceComboBox; + private System.Windows.Forms.GroupBox modeSettingsGroupBox; + private System.Windows.Forms.RadioButton windowedRadioButton; + private System.Windows.Forms.RadioButton fullscreenRadioButton; + private System.Windows.Forms.Label adapterFormatLabel; + private System.Windows.Forms.ComboBox adapterFormatComboBox; + private System.Windows.Forms.Label resolutionLabel; + private System.Windows.Forms.ComboBox resolutionComboBox; + private System.Windows.Forms.Label refreshRateLabel; + private System.Windows.Forms.ComboBox refreshRateComboBox; + private System.Windows.Forms.GroupBox otherSettingsGroupBox; + private System.Windows.Forms.Label backBufferFormatLabel; + private System.Windows.Forms.ComboBox backBufferFormatComboBox; + private System.Windows.Forms.Label depthStencilBufferLabel; + private System.Windows.Forms.ComboBox depthStencilBufferComboBox; + private System.Windows.Forms.Label multisampleLabel; + private System.Windows.Forms.ComboBox multisampleComboBox; + private System.Windows.Forms.Label vertexProcLabel; + private System.Windows.Forms.ComboBox vertexProcComboBox; + private System.Windows.Forms.Label presentIntervalLabel; + private System.Windows.Forms.ComboBox presentIntervalComboBox; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.ComboBox multisampleQualityComboBox; + private System.Windows.Forms.Label multisampleQualityLabel; + + + + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + + /// + /// Constructor. Pass in an enumeration and the current D3D settings. + /// + public D3DSettingsForm(D3DEnumeration enumerationParam, D3DSettings settingsParam) { + enumeration = enumerationParam; + settings = settingsParam.Clone(); + + // Required for Windows Form Designer support + InitializeComponent(); + + // Fill adapter combo box. Updating the selected adapter will trigger + // updates of the rest of the dialog. + foreach (GraphicsAdapterInfo adapterInfo in enumeration.AdapterInfoList) { + adapterComboBox.Items.Add(adapterInfo); + if (adapterInfo.AdapterOrdinal == settings.AdapterOrdinal) + adapterComboBox.SelectedItem = adapterInfo; + } + if (adapterComboBox.SelectedItem == null && adapterComboBox.Items.Count > 0) + adapterComboBox.SelectedIndex = 0; + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + if (components != null) + components.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.adapterDeviceGroupBox = new System.Windows.Forms.GroupBox(); + this.deviceComboBox = new System.Windows.Forms.ComboBox(); + this.deviceLabel = new System.Windows.Forms.Label(); + this.adapterComboBox = new System.Windows.Forms.ComboBox(); + this.displayAdapterLabel = new System.Windows.Forms.Label(); + this.fullscreenRadioButton = new System.Windows.Forms.RadioButton(); + this.cancelButton = new System.Windows.Forms.Button(); + this.otherSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.multisampleQualityComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleQualityLabel = new System.Windows.Forms.Label(); + this.multisampleComboBox = new System.Windows.Forms.ComboBox(); + this.backBufferFormatComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferLabel = new System.Windows.Forms.Label(); + this.backBufferFormatLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcLabel = new System.Windows.Forms.Label(); + this.presentIntervalComboBox = new System.Windows.Forms.ComboBox(); + this.presentIntervalLabel = new System.Windows.Forms.Label(); + this.resolutionComboBox = new System.Windows.Forms.ComboBox(); + this.windowedRadioButton = new System.Windows.Forms.RadioButton(); + this.resolutionLabel = new System.Windows.Forms.Label(); + this.refreshRateComboBox = new System.Windows.Forms.ComboBox(); + this.adapterFormatLabel = new System.Windows.Forms.Label(); + this.refreshRateLabel = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.modeSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.adapterFormatComboBox = new System.Windows.Forms.ComboBox(); + this.adapterDeviceGroupBox.SuspendLayout(); + this.otherSettingsGroupBox.SuspendLayout(); + this.modeSettingsGroupBox.SuspendLayout(); + this.SuspendLayout(); + // + // adapterDeviceGroupBox + // + this.adapterDeviceGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.deviceComboBox, + this.deviceLabel, + this.adapterComboBox, + this.displayAdapterLabel}); + this.adapterDeviceGroupBox.Location = new System.Drawing.Point(16, 8); + this.adapterDeviceGroupBox.Name = "adapterDeviceGroupBox"; + this.adapterDeviceGroupBox.Size = new System.Drawing.Size(400, 80); + this.adapterDeviceGroupBox.TabIndex = 0; + this.adapterDeviceGroupBox.TabStop = false; + this.adapterDeviceGroupBox.Text = "Adapter and device"; + // + // deviceComboBox + // + this.deviceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.deviceComboBox.DropDownWidth = 121; + this.deviceComboBox.Location = new System.Drawing.Point(160, 48); + this.deviceComboBox.Name = "deviceComboBox"; + this.deviceComboBox.Size = new System.Drawing.Size(232, 21); + this.deviceComboBox.TabIndex = 3; + this.deviceComboBox.SelectedIndexChanged += new System.EventHandler(this.DeviceChanged); + // + // deviceLabel + // + this.deviceLabel.Location = new System.Drawing.Point(8, 48); + this.deviceLabel.Name = "deviceLabel"; + this.deviceLabel.Size = new System.Drawing.Size(152, 23); + this.deviceLabel.TabIndex = 2; + this.deviceLabel.Text = "Render &Device:"; + // + // adapterComboBox + // + this.adapterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterComboBox.DropDownWidth = 121; + this.adapterComboBox.Location = new System.Drawing.Point(160, 24); + this.adapterComboBox.Name = "adapterComboBox"; + this.adapterComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterComboBox.TabIndex = 1; + this.adapterComboBox.SelectedIndexChanged += new System.EventHandler(this.AdapterChanged); + // + // displayAdapterLabel + // + this.displayAdapterLabel.Location = new System.Drawing.Point(8, 24); + this.displayAdapterLabel.Name = "displayAdapterLabel"; + this.displayAdapterLabel.Size = new System.Drawing.Size(152, 23); + this.displayAdapterLabel.TabIndex = 0; + this.displayAdapterLabel.Text = "Display &Adapter:"; + // + // fullscreenRadioButton + // + this.fullscreenRadioButton.Location = new System.Drawing.Point(9, 38); + this.fullscreenRadioButton.Name = "fullscreenRadioButton"; + this.fullscreenRadioButton.Size = new System.Drawing.Size(152, 24); + this.fullscreenRadioButton.TabIndex = 1; + this.fullscreenRadioButton.Text = "&Fullscreen"; + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(248, 464); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.TabIndex = 4; + this.cancelButton.Text = "Cancel"; + // + // otherSettingsGroupBox + // + this.otherSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.multisampleQualityComboBox, + this.multisampleQualityLabel, + this.multisampleComboBox, + this.backBufferFormatComboBox, + this.multisampleLabel, + this.depthStencilBufferLabel, + this.backBufferFormatLabel, + this.depthStencilBufferComboBox, + this.vertexProcComboBox, + this.vertexProcLabel, + this.presentIntervalComboBox, + this.presentIntervalLabel}); + this.otherSettingsGroupBox.Location = new System.Drawing.Point(16, 264); + this.otherSettingsGroupBox.Name = "otherSettingsGroupBox"; + this.otherSettingsGroupBox.Size = new System.Drawing.Size(400, 176); + this.otherSettingsGroupBox.TabIndex = 2; + this.otherSettingsGroupBox.TabStop = false; + this.otherSettingsGroupBox.Text = "Device settings"; + // + // multisampleQualityComboBox + // + this.multisampleQualityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleQualityComboBox.DropDownWidth = 144; + this.multisampleQualityComboBox.Location = new System.Drawing.Point(160, 96); + this.multisampleQualityComboBox.Name = "multisampleQualityComboBox"; + this.multisampleQualityComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleQualityComboBox.TabIndex = 7; + this.multisampleQualityComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleQualityChanged); + // + // multisampleQualityLabel + // + this.multisampleQualityLabel.Location = new System.Drawing.Point(8, 96); + this.multisampleQualityLabel.Name = "multisampleQualityLabel"; + this.multisampleQualityLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleQualityLabel.TabIndex = 6; + this.multisampleQualityLabel.Text = "Multisample &Quality:"; + // + // multisampleComboBox + // + this.multisampleComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleComboBox.DropDownWidth = 144; + this.multisampleComboBox.Location = new System.Drawing.Point(160, 72); + this.multisampleComboBox.Name = "multisampleComboBox"; + this.multisampleComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleComboBox.TabIndex = 5; + this.multisampleComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleTypeChanged); + // + // backBufferFormatComboBox + // + this.backBufferFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.backBufferFormatComboBox.DropDownWidth = 144; + this.backBufferFormatComboBox.Location = new System.Drawing.Point(160, 24); + this.backBufferFormatComboBox.Name = "backBufferFormatComboBox"; + this.backBufferFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.backBufferFormatComboBox.TabIndex = 1; + this.backBufferFormatComboBox.SelectedIndexChanged += new System.EventHandler(this.BackBufferFormatChanged); + // + // multisampleLabel + // + this.multisampleLabel.Location = new System.Drawing.Point(8, 72); + this.multisampleLabel.Name = "multisampleLabel"; + this.multisampleLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleLabel.TabIndex = 4; + this.multisampleLabel.Text = "&Multisample Type:"; + // + // depthStencilBufferLabel + // + this.depthStencilBufferLabel.Location = new System.Drawing.Point(8, 48); + this.depthStencilBufferLabel.Name = "depthStencilBufferLabel"; + this.depthStencilBufferLabel.Size = new System.Drawing.Size(152, 23); + this.depthStencilBufferLabel.TabIndex = 2; + this.depthStencilBufferLabel.Text = "De&pth/Stencil Buffer Format:"; + // + // backBufferFormatLabel + // + this.backBufferFormatLabel.Location = new System.Drawing.Point(8, 24); + this.backBufferFormatLabel.Name = "backBufferFormatLabel"; + this.backBufferFormatLabel.Size = new System.Drawing.Size(152, 23); + this.backBufferFormatLabel.TabIndex = 0; + this.backBufferFormatLabel.Text = "&Back Buffer Format:"; + // + // depthStencilBufferComboBox + // + this.depthStencilBufferComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.depthStencilBufferComboBox.DropDownWidth = 144; + this.depthStencilBufferComboBox.Location = new System.Drawing.Point(160, 48); + this.depthStencilBufferComboBox.Name = "depthStencilBufferComboBox"; + this.depthStencilBufferComboBox.Size = new System.Drawing.Size(232, 21); + this.depthStencilBufferComboBox.TabIndex = 3; + this.depthStencilBufferComboBox.SelectedIndexChanged += new System.EventHandler(this.DepthStencilBufferFormatChanged); + // + // vertexProcComboBox + // + this.vertexProcComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.vertexProcComboBox.DropDownWidth = 121; + this.vertexProcComboBox.Location = new System.Drawing.Point(160, 120); + this.vertexProcComboBox.Name = "vertexProcComboBox"; + this.vertexProcComboBox.Size = new System.Drawing.Size(232, 21); + this.vertexProcComboBox.TabIndex = 9; + this.vertexProcComboBox.SelectedIndexChanged += new System.EventHandler(this.VertexProcessingChanged); + // + // vertexProcLabel + // + this.vertexProcLabel.Location = new System.Drawing.Point(8, 120); + this.vertexProcLabel.Name = "vertexProcLabel"; + this.vertexProcLabel.Size = new System.Drawing.Size(152, 23); + this.vertexProcLabel.TabIndex = 8; + this.vertexProcLabel.Text = "&Vertex Processing:"; + // + // presentIntervalComboBox + // + this.presentIntervalComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.presentIntervalComboBox.DropDownWidth = 121; + this.presentIntervalComboBox.Location = new System.Drawing.Point(160, 144); + this.presentIntervalComboBox.Name = "presentIntervalComboBox"; + this.presentIntervalComboBox.Size = new System.Drawing.Size(232, 21); + this.presentIntervalComboBox.TabIndex = 11; + this.presentIntervalComboBox.SelectedValueChanged += new System.EventHandler(this.PresentIntervalChanged); + // + // presentIntervalLabel + // + this.presentIntervalLabel.Location = new System.Drawing.Point(8, 144); + this.presentIntervalLabel.Name = "presentIntervalLabel"; + this.presentIntervalLabel.Size = new System.Drawing.Size(152, 23); + this.presentIntervalLabel.TabIndex = 10; + this.presentIntervalLabel.Text = "Present &Interval:"; + // + // resolutionComboBox + // + this.resolutionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.resolutionComboBox.DropDownWidth = 144; + this.resolutionComboBox.Location = new System.Drawing.Point(161, 94); + this.resolutionComboBox.MaxDropDownItems = 14; + this.resolutionComboBox.Name = "resolutionComboBox"; + this.resolutionComboBox.Size = new System.Drawing.Size(232, 21); + this.resolutionComboBox.TabIndex = 5; + this.resolutionComboBox.SelectedIndexChanged += new System.EventHandler(this.ResolutionChanged); + // + // windowedRadioButton + // + this.windowedRadioButton.Location = new System.Drawing.Point(9, 14); + this.windowedRadioButton.Name = "windowedRadioButton"; + this.windowedRadioButton.Size = new System.Drawing.Size(152, 24); + this.windowedRadioButton.TabIndex = 0; + this.windowedRadioButton.Text = "&Windowed"; + this.windowedRadioButton.CheckedChanged += new System.EventHandler(this.WindowedFullscreenChanged); + // + // resolutionLabel + // + this.resolutionLabel.Location = new System.Drawing.Point(8, 94); + this.resolutionLabel.Name = "resolutionLabel"; + this.resolutionLabel.Size = new System.Drawing.Size(152, 23); + this.resolutionLabel.TabIndex = 4; + this.resolutionLabel.Text = "&Resolution:"; + // + // refreshRateComboBox + // + this.refreshRateComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.refreshRateComboBox.DropDownWidth = 144; + this.refreshRateComboBox.Location = new System.Drawing.Point(161, 118); + this.refreshRateComboBox.MaxDropDownItems = 14; + this.refreshRateComboBox.Name = "refreshRateComboBox"; + this.refreshRateComboBox.Size = new System.Drawing.Size(232, 21); + this.refreshRateComboBox.TabIndex = 7; + this.refreshRateComboBox.SelectedIndexChanged += new System.EventHandler(this.RefreshRateChanged); + // + // adapterFormatLabel + // + this.adapterFormatLabel.Location = new System.Drawing.Point(8, 72); + this.adapterFormatLabel.Name = "adapterFormatLabel"; + this.adapterFormatLabel.Size = new System.Drawing.Size(152, 23); + this.adapterFormatLabel.TabIndex = 2; + this.adapterFormatLabel.Text = "Adapter F&ormat:"; + // + // refreshRateLabel + // + this.refreshRateLabel.Location = new System.Drawing.Point(8, 118); + this.refreshRateLabel.Name = "refreshRateLabel"; + this.refreshRateLabel.Size = new System.Drawing.Size(152, 23); + this.refreshRateLabel.TabIndex = 6; + this.refreshRateLabel.Text = "R&efresh Rate:"; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(112, 464); + this.okButton.Name = "okButton"; + this.okButton.TabIndex = 3; + this.okButton.Text = "OK"; + // + // modeSettingsGroupBox + // + this.modeSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.adapterFormatLabel, + this.refreshRateLabel, + this.resolutionComboBox, + this.adapterFormatComboBox, + this.resolutionLabel, + this.refreshRateComboBox, + this.windowedRadioButton, + this.fullscreenRadioButton}); + this.modeSettingsGroupBox.Location = new System.Drawing.Point(16, 96); + this.modeSettingsGroupBox.Name = "modeSettingsGroupBox"; + this.modeSettingsGroupBox.Size = new System.Drawing.Size(400, 160); + this.modeSettingsGroupBox.TabIndex = 1; + this.modeSettingsGroupBox.TabStop = false; + this.modeSettingsGroupBox.Text = "Display mode settings"; + // + // adapterFormatComboBox + // + this.adapterFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterFormatComboBox.DropDownWidth = 121; + this.adapterFormatComboBox.Location = new System.Drawing.Point(161, 70); + this.adapterFormatComboBox.MaxDropDownItems = 14; + this.adapterFormatComboBox.Name = "adapterFormatComboBox"; + this.adapterFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterFormatComboBox.TabIndex = 3; + this.adapterFormatComboBox.SelectedValueChanged += new System.EventHandler(this.AdapterFormatChanged); + // + // D3DSettingsForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(438, 512); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.cancelButton, + this.okButton, + this.adapterDeviceGroupBox, + this.modeSettingsGroupBox, + this.otherSettingsGroupBox}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.Name = "D3DSettingsForm"; + this.Text = "Direct3D Settings"; + this.adapterDeviceGroupBox.ResumeLayout(false); + this.otherSettingsGroupBox.ResumeLayout(false); + this.modeSettingsGroupBox.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// Respond to a change of selected adapter by rebuilding the device + /// list. Updating the selected device will trigger updates of the + /// rest of the dialog. + /// + private void AdapterChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + settings.AdapterInfo = adapterInfo; + + // Update device combo box + deviceComboBox.Items.Clear(); + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + deviceComboBox.Items.Add(deviceInfo); + if (deviceInfo.DevType == settings.DevType) + deviceComboBox.SelectedItem = deviceInfo; + } + if (deviceComboBox.SelectedItem == null && deviceComboBox.Items.Count > 0) + deviceComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected device by resetting the + /// fullscreen/windowed radio buttons. Updating these buttons + /// will trigger updates of the rest of the dialog. + /// + private void DeviceChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + settings.DeviceInfo = deviceInfo; + + // Update fullscreen/windowed radio buttons + bool HasWindowedDeviceCombo = false; + bool HasFullscreenDeviceCombo = false; + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + HasWindowedDeviceCombo = true; + else + HasFullscreenDeviceCombo = true; + } + windowedRadioButton.Enabled = HasWindowedDeviceCombo; + fullscreenRadioButton.Enabled = HasFullscreenDeviceCombo; + if (settings.IsWindowed && HasWindowedDeviceCombo) { + windowedRadioButton.Checked = true; + } + else { + fullscreenRadioButton.Checked = true; + } + WindowedFullscreenChanged(null, null); + } + + + + + /// + /// Respond to a change of windowed/fullscreen state by rebuilding the + /// adapter format list, resolution list, and refresh rate list. + /// Updating the selected adapter format will trigger updates of the + /// rest of the dialog. + /// + private void WindowedFullscreenChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + if (windowedRadioButton.Checked) { + settings.IsWindowed = true; + settings.WindowedAdapterInfo = adapterInfo; + settings.WindowedDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + adapterFormatComboBox.Items.Add(settings.WindowedDisplayMode.Format); + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = false; + + // Update resolution combo box + resolutionComboBox.Items.Clear(); + resolutionComboBox.Items.Add(FormatResolution(settings.WindowedDisplayMode.Width, + settings.WindowedDisplayMode.Height)); + resolutionComboBox.SelectedIndex = 0; + resolutionComboBox.Enabled = false; + + // Update refresh rate combo box + refreshRateComboBox.Items.Clear(); + refreshRateComboBox.Items.Add(FormatRefreshRate(settings.WindowedDisplayMode.RefreshRate)); + refreshRateComboBox.SelectedIndex = 0; + refreshRateComboBox.Enabled = false; + } + else { + settings.IsWindowed = false; + settings.FullscreenAdapterInfo = adapterInfo; + settings.FullscreenDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + continue; + if (!adapterFormatComboBox.Items.Contains(deviceCombo.AdapterFormat)) { + adapterFormatComboBox.Items.Add(deviceCombo.AdapterFormat); + if (deviceCombo.AdapterFormat == (settings.IsWindowed ? + settings.WindowedDisplayMode.Format : settings.FullscreenDisplayMode.Format)) { + adapterFormatComboBox.SelectedItem = deviceCombo.AdapterFormat; + } + } + } + if (adapterFormatComboBox.SelectedItem == null && adapterFormatComboBox.Items.Count > 0) + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = true; + + // Update resolution combo box + resolutionComboBox.Enabled = true; + + // Update refresh rate combo box + refreshRateComboBox.Enabled = true; + } + } + + + + + /// + /// Converts the given width and height into a formatted string + /// + private string FormatResolution(int width, int height) { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} by {1}", width, height); + return sb.ToString(); + } + + + + + /// + /// Converts the given refresh rate into a formatted string + /// + private string FormatRefreshRate(int refreshRate) { + if (refreshRate == 0) { + return "Default Rate"; + } + else { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} Hz", refreshRate); + return sb.ToString(); + } + } + + + + + /// + /// Respond to a change of selected adapter format by rebuilding the + /// resolution list and back buffer format list. Updating the selected + /// resolution and back buffer format will trigger updates of the rest + /// of the dialog. + /// + private void AdapterFormatChanged(object sender, System.EventArgs e) { + if (!windowedRadioButton.Checked) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + settings.FullscreenDisplayMode.Format = adapterFormat; + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + + resolutionComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat) { + string resolutionString = FormatResolution(displayMode.Width, displayMode.Height); + if (!resolutionComboBox.Items.Contains(resolutionString)) { + resolutionComboBox.Items.Add(resolutionString); + if (settings.FullscreenDisplayMode.Width == displayMode.Width && + settings.FullscreenDisplayMode.Height == displayMode.Height) { + resolutionComboBox.SelectedItem = resolutionString; + } + } + } + } + if (resolutionComboBox.SelectedItem == null && resolutionComboBox.Items.Count > 0) + resolutionComboBox.SelectedIndex = 0; + } + + // Update backbuffer format combo box + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + backBufferFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == settings.DisplayMode.Format) { + if (!backBufferFormatComboBox.Items.Contains(deviceCombo.BackBufferFormat)) { + backBufferFormatComboBox.Items.Add(deviceCombo.BackBufferFormat); + if (deviceCombo.BackBufferFormat == settings.BackBufferFormat) + backBufferFormatComboBox.SelectedItem = deviceCombo.BackBufferFormat; + } + } + } + if (backBufferFormatComboBox.SelectedItem == null && backBufferFormatComboBox.Items.Count > 0) + backBufferFormatComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected resolution by rebuilding the + /// refresh rate list. + /// + private void ResolutionChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + + // Update settings with new resolution + string resolution = (string)resolutionComboBox.SelectedItem; + string[] resolutionSplitStringArray = resolution.Split(); + int width = int.Parse(resolutionSplitStringArray[0]); + int height = int.Parse(resolutionSplitStringArray[2]); + settings.FullscreenDisplayMode.Width = width; + settings.FullscreenDisplayMode.Height = height; + + // Update refresh rate list based on new resolution + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + refreshRateComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat && + displayMode.Width == width && + displayMode.Height == height) { + string refreshRateString = FormatRefreshRate(displayMode.RefreshRate); + if (!refreshRateComboBox.Items.Contains(refreshRateString)) { + refreshRateComboBox.Items.Add(refreshRateString); + if (settings.FullscreenDisplayMode.RefreshRate == displayMode.RefreshRate) + refreshRateComboBox.SelectedItem = refreshRateString; + } + } + } + if (refreshRateComboBox.SelectedItem == null && refreshRateComboBox.Items.Count > 0) + refreshRateComboBox.SelectedIndex = refreshRateComboBox.Items.Count - 1; + } + + + + + /// + /// Respond to a change of selected refresh rate. + /// + private void RefreshRateChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + // Update settings with new refresh rate + string refreshRateString = (string)refreshRateComboBox.SelectedItem; + int refreshRate = 0; + if (refreshRateString != "Default Rate") { + string[] refreshRateSplitStringArray = refreshRateString.Split(); + refreshRate = int.Parse(refreshRateSplitStringArray[0]); + } + settings.FullscreenDisplayMode.RefreshRate = refreshRate; + } + + + + + /// + /// Respond to a change of selected back buffer format by rebuilding + /// the depth/stencil format list, multisample type list, and vertex + /// processing type list. + /// + private void BackBufferFormatChanged(object sender, System.EventArgs e) { + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + Format backBufferFormat = (Format)backBufferFormatComboBox.SelectedItem; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == adapterFormat && + deviceCombo.BackBufferFormat == backBufferFormat) { + deviceCombo.BackBufferFormat = backBufferFormat; + settings.DeviceCombo = deviceCombo; + + depthStencilBufferComboBox.Items.Clear(); + if (enumeration.AppUsesDepthBuffer) { + foreach (DepthFormat format in deviceCombo.DepthStencilFormatList) { + depthStencilBufferComboBox.Items.Add(format); + if (format == settings.DepthStencilBufferFormat) + depthStencilBufferComboBox.SelectedItem = format; + } + if (depthStencilBufferComboBox.SelectedItem == null && depthStencilBufferComboBox.Items.Count > 0) + depthStencilBufferComboBox.SelectedIndex = 0; + } + else { + depthStencilBufferComboBox.Enabled = false; + depthStencilBufferComboBox.Items.Add("(not used)"); + depthStencilBufferComboBox.SelectedIndex = 0; + } + + vertexProcComboBox.Items.Clear(); + foreach (VertexProcessingType vpt in deviceCombo.VertexProcessingTypeList) { + vertexProcComboBox.Items.Add(vpt); + if (vpt == settings.VertexProcessingType) + vertexProcComboBox.SelectedItem = vpt; + } + if (vertexProcComboBox.SelectedItem == null && vertexProcComboBox.Items.Count > 0) + vertexProcComboBox.SelectedIndex = 0; + + presentIntervalComboBox.Items.Clear(); + foreach (PresentInterval pi in deviceCombo.PresentIntervalList) { + presentIntervalComboBox.Items.Add(pi); + if (pi == settings.PresentInterval) + presentIntervalComboBox.SelectedItem = pi; + } + if (presentIntervalComboBox.SelectedItem == null && presentIntervalComboBox.Items.Count > 0) + presentIntervalComboBox.SelectedIndex = 0; + + break; + } + } + } + + + + + /// + /// Respond to a change of selected depth/stencil buffer format. + /// + private void DepthStencilBufferFormatChanged(object sender, System.EventArgs e) { + if (enumeration.AppUsesDepthBuffer) + settings.DepthStencilBufferFormat = (DepthFormat)depthStencilBufferComboBox.SelectedItem; + + multisampleComboBox.Items.Clear(); + foreach (MultiSampleType msType in settings.DeviceCombo.MultiSampleTypeList) { + // Check for DS/MS conflict + bool conflictFound = false; + foreach (DepthStencilMultiSampleConflict DSMSConflict in settings.DeviceCombo.DepthStencilMultiSampleConflictList) { + if (DSMSConflict.DepthStencilFormat == settings.DepthStencilBufferFormat && + DSMSConflict.MultiSampleType == msType) { + conflictFound = true; + break; + } + } + if (!conflictFound) { + multisampleComboBox.Items.Add(msType); + if (msType == settings.MultisampleType) + multisampleComboBox.SelectedItem = msType; + } + } + if (multisampleComboBox.SelectedItem == null && multisampleComboBox.Items.Count > 0) + multisampleComboBox.SelectedIndex = 0; + + } + + + + + /// + /// Respond to a change of selected multisample type. + /// + private void MultisampleTypeChanged(object sender, System.EventArgs e) { + settings.MultisampleType = (MultiSampleType)multisampleComboBox.SelectedItem; + + // Find current max multisample quality + int maxQuality = 0; + DeviceCombo deviceCombo = settings.DeviceCombo; + for (int i = 0; i < deviceCombo.MultiSampleQualityList.Count; i++) { + if ((MultiSampleType)deviceCombo.MultiSampleTypeList[i] == settings.MultisampleType) { + maxQuality = (int)deviceCombo.MultiSampleQualityList[i]; + break; + } + } + + // Update multisample quality list based on new type + multisampleQualityComboBox.Items.Clear(); + for (int iLevel = 0; iLevel < maxQuality; iLevel++) { + multisampleQualityComboBox.Items.Add(iLevel); + if (settings.MultisampleQuality == iLevel) + multisampleQualityComboBox.SelectedItem = iLevel; + } + if (multisampleQualityComboBox.SelectedItem == null && multisampleQualityComboBox.Items.Count > 0) + multisampleQualityComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected multisample quality. + /// + private void MultisampleQualityChanged(object sender, System.EventArgs e) { + settings.MultisampleQuality = (int)multisampleQualityComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void VertexProcessingChanged(object sender, System.EventArgs e) { + settings.VertexProcessingType = (VertexProcessingType)vertexProcComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void PresentIntervalChanged(object sender, System.EventArgs e) { + settings.PresentInterval = (PresentInterval)presentIntervalComboBox.SelectedItem; + } +} + + +/// +/// Current D3D settings: adapter, device, mode, formats, etc. +/// +public class D3DSettings { + public bool IsWindowed; + + public GraphicsAdapterInfo WindowedAdapterInfo; + public GraphicsDeviceInfo WindowedDeviceInfo; + public DeviceCombo WindowedDeviceCombo; + public DisplayMode WindowedDisplayMode; // not changable by the user + public DepthFormat WindowedDepthStencilBufferFormat; + public MultiSampleType WindowedMultisampleType; + public int WindowedMultisampleQuality; + public VertexProcessingType WindowedVertexProcessingType; + public PresentInterval WindowedPresentInterval; + public int WindowedWidth; + public int WindowedHeight; + + public GraphicsAdapterInfo FullscreenAdapterInfo; + public GraphicsDeviceInfo FullscreenDeviceInfo; + public DeviceCombo FullscreenDeviceCombo; + public DisplayMode FullscreenDisplayMode; // changable by the user + public DepthFormat FullscreenDepthStencilBufferFormat; + public MultiSampleType FullscreenMultisampleType; + public int FullscreenMultisampleQuality; + public VertexProcessingType FullscreenVertexProcessingType; + public PresentInterval FullscreenPresentInterval; + + + + + /// + /// The adapter information + /// + public GraphicsAdapterInfo AdapterInfo { + get { return IsWindowed ? WindowedAdapterInfo : FullscreenAdapterInfo; } + set { if (IsWindowed) WindowedAdapterInfo = value; else FullscreenAdapterInfo = value; } + } + + + + + /// + /// The device information + /// + public GraphicsDeviceInfo DeviceInfo { + get { return IsWindowed ? WindowedDeviceInfo : FullscreenDeviceInfo; } + set { if (IsWindowed) WindowedDeviceInfo = value; else FullscreenDeviceInfo = value; } + } + + + + + /// + /// The device combo + /// + public DeviceCombo DeviceCombo { + get { return IsWindowed ? WindowedDeviceCombo : FullscreenDeviceCombo; } + set { if (IsWindowed) WindowedDeviceCombo = value; else FullscreenDeviceCombo = value; } + } + + + + + /// + /// The adapters ordinal + /// + public int AdapterOrdinal { + get { return DeviceCombo.AdapterOrdinal; } + } + + + + + /// + /// The type of device this is + /// + public DeviceType DevType { + get { return DeviceCombo.DevType; } + } + + + + + /// + /// The back buffers format + /// + public Format BackBufferFormat { + get { return DeviceCombo.BackBufferFormat; } + } + + + + + /// + /// The display mode + /// + public DisplayMode DisplayMode { + get { return IsWindowed ? WindowedDisplayMode : FullscreenDisplayMode; } + set { if (IsWindowed) WindowedDisplayMode = value; else FullscreenDisplayMode = value; } + } + + + + + /// + /// The Depth stencils format + /// + public DepthFormat DepthStencilBufferFormat { + get { return IsWindowed ? WindowedDepthStencilBufferFormat : FullscreenDepthStencilBufferFormat; } + set { if (IsWindowed) WindowedDepthStencilBufferFormat = value; else FullscreenDepthStencilBufferFormat = value; } + } + + + + + /// + /// The multisample type + /// + public MultiSampleType MultisampleType { + get { return IsWindowed ? WindowedMultisampleType : FullscreenMultisampleType; } + set { if (IsWindowed) WindowedMultisampleType = value; else FullscreenMultisampleType = value; } + } + + + + + /// + /// The multisample quality + /// + public int MultisampleQuality { + get { return IsWindowed ? WindowedMultisampleQuality : FullscreenMultisampleQuality; } + set { if (IsWindowed) WindowedMultisampleQuality = value; else FullscreenMultisampleQuality = value; } + } + + + + + /// + /// The vertex processing type + /// + public VertexProcessingType VertexProcessingType { + get { return IsWindowed ? WindowedVertexProcessingType : FullscreenVertexProcessingType; } + set { if (IsWindowed) WindowedVertexProcessingType = value; else FullscreenVertexProcessingType = value; } + } + + + + + /// + /// The presentation interval + /// + public PresentInterval PresentInterval { + get { return IsWindowed ? WindowedPresentInterval : FullscreenPresentInterval; } + set { if (IsWindowed) WindowedPresentInterval = value; else FullscreenPresentInterval = value; } + } + + + + + /// + /// Clone the d3d settings class + /// + public D3DSettings Clone() { + return (D3DSettings)MemberwiseClone(); + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step01/D3DSettingsForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step01/D3DSettingsForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step01/D3DSettingsForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step01/DXUtil.cs b/Source Code updated 08-12-05/Spacewar3D/Step01/DXUtil.cs new file mode 100644 index 0000000..5d0f0e5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step01/DXUtil.cs @@ -0,0 +1,285 @@ +//----------------------------------------------------------------------------- +// File: DXUtil.cs +// +// Desc: Shortcut macros and functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.IO; +using System.Runtime.InteropServices; + + + + +/// +/// Enumeration for various actions our timer can perform +/// +public enum DirectXTimer { + Reset, + Start, + Stop, + Advance, + GetAbsoluteTime, + GetApplicationTime, + GetElapsedTime +}; + + + + +/// +/// Generic utility functions for our samples +/// +public class DXUtil { + #region Timer Internal Stuff + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceCounter(ref long PerformanceCount); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("winmm.dll")] + public static extern int timeGetTime(); + private static bool isTimerInitialized = false; + private static bool m_bUsingQPF = false; + private static bool m_bTimerStopped = true; + private static long m_llQPFTicksPerSec = 0; + private static long m_llStopTime = 0; + private static long m_llLastElapsedTime = 0; + private static long m_llBaseTime = 0; + private static double m_fLastElapsedTime = 0.0; + private static double m_fBaseTime = 0.0; + private static double m_fStopTime = 0.0; + #endregion + + // Constants for SDK Path registry keys + private const string sdkPath = "Software\\Microsoft\\DirectX SDK"; + private const string sdkKey = "DX9J3SDK Samples Path"; + + private DXUtil() { /* Private Constructor */ } + + + + + /// + /// Returns the DirectX SDK media path + /// + public static string SdkMediaPath { + get { + Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sdkPath); + string sReg = string.Empty; + if (rKey != null) { + sReg = (string)rKey.GetValue(sdkKey); + rKey.Close(); + } + if (sReg != null) + sReg += @"\Media\"; + else + return string.Empty; + + return sReg; + } + } + + + + + /// + /// Performs timer opertations. Use the following commands: + /// + /// DirectXTimer.Reset - to reset the timer + /// DirectXTimer.Start - to start the timer + /// DirectXTimer.Stop - to stop (or pause) the timer + /// DirectXTimer.Advance - to advance the timer by 0.1 seconds + /// DirectXTimer.GetAbsoluteTime - to get the absolute system time + /// DirectXTimer.GetApplicationTime - to get the current time + /// DirectXTimer.GetElapsedTime - to get the time that elapsed between TIMER_GETELAPSEDTIME calls + /// + /// + public static float Timer(DirectXTimer command) { + if (!isTimerInitialized) { + isTimerInitialized = true; + + // Use QueryPerformanceFrequency() to get frequency of timer. If QPF is + // not supported, we will timeGetTime() which returns milliseconds. + long qwTicksPerSec = 0; + m_bUsingQPF = QueryPerformanceFrequency(ref qwTicksPerSec); + if (m_bUsingQPF) + m_llQPFTicksPerSec = qwTicksPerSec; + } + if (m_bUsingQPF) { + double time; + double fElapsedTime; + long qwTime = 0; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_llStopTime != 0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + qwTime = m_llStopTime; + else + QueryPerformanceCounter(ref qwTime); + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (qwTime - m_llLastElapsedTime) / (double) m_llQPFTicksPerSec; + m_llLastElapsedTime = qwTime; + return (float)fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + double fAppTime = (double) (qwTime - m_llBaseTime) / (double) m_llQPFTicksPerSec; + return (float)fAppTime; + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_llBaseTime = qwTime; + m_llLastElapsedTime = qwTime; + m_llStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_llBaseTime += qwTime - m_llStopTime; + m_llStopTime = 0; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_llStopTime = qwTime; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_llStopTime += m_llQPFTicksPerSec/10; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + time = qwTime / (double) m_llQPFTicksPerSec; + return (float)time; + } + + return -1.0f; // Invalid command specified + } + else { + // Get the time using timeGetTime() + double time; + double fElapsedTime; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_fStopTime != 0.0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + time = m_fStopTime; + else + time = timeGetTime() * 0.001; + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (time - m_fLastElapsedTime); + m_fLastElapsedTime = time; + return (float) fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + return (float) (time - m_fBaseTime); + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_fBaseTime = time; + m_fLastElapsedTime = time; + m_fStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_fBaseTime += time - m_fStopTime; + m_fStopTime = 0.0f; + m_fLastElapsedTime = time; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_fStopTime = time; + m_fLastElapsedTime = time; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_fStopTime += 0.1f; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + return (float) time; + } + + return -1.0f; // Invalid command specified + } + } + + + + + /// + /// Returns a valid path to a DXSDK media file + /// + /// Initial path to search + /// Filename we're searching for + /// Full path to the file + public static string FindMediaFile(string path, string filename) { + // First try to load the file in the full path + if (path != null) { + if (File.Exists(AppendDirectorySeparator(path) + filename)) + return AppendDirectorySeparator(path) + filename; + } + + // if not try to find the filename in the current folder. + if (File.Exists(filename)) + return AppendDirectorySeparator(Directory.GetCurrentDirectory()) + filename; + + // last, check if the file exists in the media directory + if (File.Exists(AppendDirectorySeparator(SdkMediaPath) + filename)) + return AppendDirectorySeparator(SdkMediaPath) + filename; + + throw new FileNotFoundException("Could not find this file.", filename); + } + + + + + /// + /// Returns a valid string with a directory separator at the end. + /// + private static string AppendDirectorySeparator(string filename) { + if (!filename.EndsWith(@"\")) + return filename + @"\"; + + return filename; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step01/Step01.csproj b/Source Code updated 08-12-05/Spacewar3D/Step01/Step01.csproj new file mode 100644 index 0000000..a04fb84 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step01/Step01.csproj @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step01/Step01.sln b/Source Code updated 08-12-05/Spacewar3D/Step01/Step01.sln new file mode 100644 index 0000000..0f4d67e --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step01/Step01.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Step01", "Step01.csproj", "{75AFC2A6-DDA3-4B1F-8577-27791CA470D9}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {75AFC2A6-DDA3-4B1F-8577-27791CA470D9}.Debug.ActiveCfg = Debug|.NET + {75AFC2A6-DDA3-4B1F-8577-27791CA470D9}.Debug.Build.0 = Debug|.NET + {75AFC2A6-DDA3-4B1F-8577-27791CA470D9}.Release.ActiveCfg = Release|.NET + {75AFC2A6-DDA3-4B1F-8577-27791CA470D9}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/Spacewar3D/Step01/d3dapp.cs b/Source Code updated 08-12-05/Spacewar3D/Step01/d3dapp.cs new file mode 100644 index 0000000..9384434 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step01/d3dapp.cs @@ -0,0 +1,1517 @@ +//----------------------------------------------------------------------------- +// File: D3DApp.cs +// +// Desc: Application class for the Direct3D samples framework library. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + +/// +/// The base class for all the graphics (D3D) samples, it derives from windows forms +/// +public class GraphicsSample : System.Windows.Forms.Form { + #region Menu Information + // The menu items that *all* samples will need + protected System.Windows.Forms.MainMenu mnuMain; + protected System.Windows.Forms.MenuItem mnuFile; + private System.Windows.Forms.MenuItem mnuGo; + private System.Windows.Forms.MenuItem mnuSingle; + private System.Windows.Forms.MenuItem mnuBreak1; + private System.Windows.Forms.MenuItem mnuChange; + private System.Windows.Forms.MenuItem mnuBreak2; + protected System.Windows.Forms.MenuItem mnuExit; + #endregion + + // The window we will render too + private System.Windows.Forms.Control ourRenderTarget; + // Should we use the default windows + protected bool isUsingMenus = true; + + // We need to keep track of our enumeration settings + protected D3DEnumeration enumerationSettings = new D3DEnumeration(); + protected D3DSettings graphicsSettings = new D3DSettings(); + private bool isMaximized = false; // Are we maximized? + private bool isHandlingSizeChanges = true; // Are we handling size changes? + private bool isClosing = false; // Are we closing? + private bool isChangingFormStyle = false; // Are we changing the forms style? + private bool isWindowActive = true; // Are we waiting for got focus? + + private float lastTime = 0.0f; // The last time + private int frames = 0; // Number of frames since our last update + private int appPausedCount = 0; // How many times has the app been paused (and when can it resume)? + + // Internal variables for the state of the app + protected bool windowed; + protected bool active; + protected bool ready; + protected bool hasFocus; + protected bool isMultiThreaded = false; + + // Internal variables used for timing + protected bool frameMoving; + protected bool singleStep; + // Main objects used for creating and rendering the 3D scene + protected PresentParameters presentParams = new PresentParameters(); // Parameters for CreateDevice/Reset + protected Device device; // The rendering device + protected RenderStateManager renderState; + protected SamplerStateManagerCollection sampleState; + protected TextureStateManagerCollection textureStates; + private Caps graphicsCaps; // Caps for the device + protected Caps Caps { get { return graphicsCaps; } } + private CreateFlags behavior; // Indicate sw or hw vertex processing + protected BehaviorFlags BehaviorFlags { get { return new BehaviorFlags(behavior); } } + protected System.Windows.Forms.Control RenderTarget { get { return ourRenderTarget; } set { ourRenderTarget = value; } } + + // Variables for timing + protected float appTime; // Current time in seconds + protected float elapsedTime; // Time elapsed since last frame + protected float framePerSecond; // Instanteous frame rate + protected string deviceStats;// String to hold D3D device stats + protected string frameStats; // String to hold frame stats + + private bool deviceLost = false; + + // Overridable variables for the app + private int minDepthBits; // Minimum number of bits needed in depth buffer + protected int MinDepthBits { get { return minDepthBits; } set { minDepthBits = value; enumerationSettings.AppMinDepthBits = value;} } + private int minStencilBits; // Minimum number of bits needed in stencil buffer + protected int MinStencilBits { get { return minStencilBits; } set { minStencilBits = value; enumerationSettings.AppMinStencilBits = value;} } + protected bool showCursorWhenFullscreen; // Whether to show cursor when fullscreen + protected bool clipCursorWhenFullscreen; // Whether to limit cursor pos when fullscreen + protected bool startFullscreen; // Whether to start up the app in fullscreen mode + + private System.Drawing.Size storedSize; + private System.Drawing.Point storedLocation; + + // Overridable functions for the 3D scene created by the app + protected virtual bool ConfirmDevice(Caps caps, VertexProcessingType vertexProcessingType, + Format adapterFormat, Format backBufferFormat) { return true; } + protected virtual void OneTimeSceneInitialization() { /* Do Nothing */ } + protected virtual void InitializeDeviceObjects() { /* Do Nothing */ } + protected virtual void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void FrameMove() { /* Do Nothing */ } + protected virtual void Render() { /* Do Nothing */ } + protected virtual void InvalidateDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void DeleteDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + + + + + /// + /// Constructor + /// + public GraphicsSample() { + device = null; + active = false; + ready = false; + hasFocus = false; + behavior = 0; + + ourRenderTarget = this; + frameMoving = true; + singleStep = false; + framePerSecond = 0.0f; + deviceStats = null; + frameStats = null; + + this.Text = "D3D9 Sample"; + this.ClientSize = new System.Drawing.Size(400,300); + this.KeyPreview = true; + + minDepthBits = 16; + minStencilBits = 0; + showCursorWhenFullscreen = false; + startFullscreen = false; + + // When clipCursorWhenFullscreen is TRUE, the cursor is limited to + // the device window when the app goes fullscreen. This prevents users + // from accidentally clicking outside the app window on a multimon system. + // This flag is turned off by default for debug builds, since it makes + // multimon debugging difficult. +#if (DEBUG) + clipCursorWhenFullscreen = false; +#else + clipCursorWhenFullscreen = true; +#endif + InitializeComponent(); + } + + + + + /// + /// Picks the best graphics device, and initializes it + /// + /// true if a good device was found, false otherwise + public bool CreateGraphicsSample() { + enumerationSettings.ConfirmDeviceCallback = new D3DEnumeration.ConfirmDeviceCallbackType(this.ConfirmDevice); + enumerationSettings.Enumerate(); + + if (ourRenderTarget.Cursor == null) { + // Set up a default cursor + ourRenderTarget.Cursor = System.Windows.Forms.Cursors.Default; + } + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + + try { + ChooseInitialSettings(); + + // Initialize the application timer + DXUtil.Timer(DirectXTimer.Start); + // Initialize the app's custom scene stuff + OneTimeSceneInitialization(); + // Initialize the 3D environment for the app + InitializeEnvironment(); + } + catch (SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + return false; + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + return false; + } + + // The app is ready to go + ready = true; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available windowed mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestWindowedMode(bool doesRequireHardware, bool doesRequireReference) { + // Get display mode of primary adapter (which is assumed to be where the window + // will appear) + DisplayMode primaryDesktopDisplayMode = Manager.Adapters[0].CurrentDisplayMode; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + if (!deviceCombo.IsWindowed) + continue; + if (deviceCombo.AdapterFormat != primaryDesktopDisplayMode.Format) + continue; + + // If we haven't found a compatible DeviceCombo yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + deviceCombo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + // This windowed device combo looks great -- take it + goto EndWindowedDeviceComboSearch; + } + // Otherwise keep looking for a better windowed device combo + } + } + } + } + + EndWindowedDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + graphicsSettings.WindowedAdapterInfo = bestAdapterInfo; + graphicsSettings.WindowedDeviceInfo = bestDeviceInfo; + graphicsSettings.WindowedDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = true; + graphicsSettings.WindowedDisplayMode = primaryDesktopDisplayMode; + graphicsSettings.WindowedWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + graphicsSettings.WindowedHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.WindowedDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.WindowedMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.WindowedMultisampleQuality = 0; + graphicsSettings.WindowedVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.WindowedPresentInterval = (PresentInterval)bestDeviceCombo.PresentIntervalList[0]; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available fullscreen mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestFullscreenMode(bool doesRequireHardware, bool doesRequireReference) { + // For fullscreen, default to first HAL DeviceCombo that supports the current desktop + // display mode, or any display mode if HAL is not compatible with the desktop mode, or + // non-HAL if no HAL is available + DisplayMode adapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestAdapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestDisplayMode = new DisplayMode(); + bestAdapterDesktopDisplayMode.Width = 0; + bestAdapterDesktopDisplayMode.Height = 0; + bestAdapterDesktopDisplayMode.Format = 0; + bestAdapterDesktopDisplayMode.RefreshRate = 0; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + adapterDesktopDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + bool adapterMatchesDesktop = (deviceCombo.AdapterFormat == adapterDesktopDisplayMode.Format); + if (deviceCombo.IsWindowed) + continue; + + // If we haven't found a compatible set yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + bestDeviceCombo.DevType == DeviceType.Hardware && bestDeviceCombo.AdapterFormat != adapterDesktopDisplayMode.Format && adapterMatchesDesktop || + bestDeviceCombo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + bestAdapterDesktopDisplayMode = adapterDesktopDisplayMode; + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + // This fullscreen device combo looks great -- take it + goto EndFullscreenDeviceComboSearch; + } + // Otherwise keep looking for a better fullscreen device combo + } + } + } + } + + EndFullscreenDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + // Need to find a display mode on the best adapter that uses pBestDeviceCombo->AdapterFormat + // and is as close to bestAdapterDesktopDisplayMode's res as possible + bestDisplayMode.Width = 0; + bestDisplayMode.Height = 0; + bestDisplayMode.Format = 0; + bestDisplayMode.RefreshRate = 0; + foreach (DisplayMode displayMode in bestAdapterInfo.DisplayModeList) { + if (displayMode.Format != bestDeviceCombo.AdapterFormat) + continue; + if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate == bestAdapterDesktopDisplayMode.RefreshRate) { + // found a perfect match, so stop + bestDisplayMode = displayMode; + break; + } + else if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate > bestDisplayMode.RefreshRate) { + // refresh rate doesn't match, but width/height match, so keep this + // and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == bestAdapterDesktopDisplayMode.Width) { + // width matches, so keep this and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == 0) { + // we don't have anything better yet, so keep this and keep looking + bestDisplayMode = displayMode; + } + } + + graphicsSettings.FullscreenAdapterInfo = bestAdapterInfo; + graphicsSettings.FullscreenDeviceInfo = bestDeviceInfo; + graphicsSettings.FullscreenDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = false; + graphicsSettings.FullscreenDisplayMode = bestDisplayMode; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.FullscreenDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.FullscreenMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.FullscreenMultisampleQuality = 0; + graphicsSettings.FullscreenVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.FullscreenPresentInterval = PresentInterval.Default; + + return true; + } + + + + + /// + /// Choose the initial settings for the application + /// + /// true if the settings were initialized + public bool ChooseInitialSettings() { + bool foundFullscreenMode = FindBestFullscreenMode(false, false); + bool foundWindowedMode = FindBestWindowedMode(false, false); + if (startFullscreen && foundFullscreenMode) + graphicsSettings.IsWindowed = false; + + if (!foundFullscreenMode && !foundWindowedMode) + throw new NoCompatibleDevicesException(); + + return (foundFullscreenMode || foundWindowedMode); + } + + + + + /// + /// Build presentation parameters from the current settings + /// + public void BuildPresentParamsFromSettings() { + presentParams.Windowed = graphicsSettings.IsWindowed; + presentParams.BackBufferCount = 1; + presentParams.MultiSample = graphicsSettings.MultisampleType; + presentParams.MultiSampleQuality = graphicsSettings.MultisampleQuality; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.EnableAutoDepthStencil = enumerationSettings.AppUsesDepthBuffer; + presentParams.AutoDepthStencilFormat = graphicsSettings.DepthStencilBufferFormat; + presentParams.PresentFlag = PresentFlag.None; + + if (windowed) { + presentParams.BackBufferWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + presentParams.BackBufferHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = 0; + presentParams.PresentationInterval = PresentInterval.Immediate; + presentParams.DeviceWindow = ourRenderTarget; + } + else { + presentParams.BackBufferWidth = graphicsSettings.DisplayMode.Width; + presentParams.BackBufferHeight = graphicsSettings.DisplayMode.Height; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = graphicsSettings.DisplayMode.RefreshRate; + presentParams.PresentationInterval = graphicsSettings.PresentInterval; + presentParams.DeviceWindow = this; + } + } + + + + + /// + /// Initialize the graphics environment + /// + public void InitializeEnvironment() { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + GraphicsDeviceInfo deviceInfo = graphicsSettings.DeviceInfo; + + windowed = graphicsSettings.IsWindowed; + + // Set up the presentation parameters + BuildPresentParamsFromSettings(); + + if (deviceInfo.Caps.PrimitiveMiscCaps.IsNullReference) { + // Warn user about null ref device that can't render anything + HandleSampleException(new NullReferenceDeviceException(), ApplicationMessage.None); + } + + CreateFlags createFlags = new CreateFlags(); + if (graphicsSettings.VertexProcessingType == VertexProcessingType.Software) + createFlags = CreateFlags.SoftwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Mixed) + createFlags = CreateFlags.MixedVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Hardware) + createFlags = CreateFlags.HardwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.PureHardware) { + createFlags = CreateFlags.HardwareVertexProcessing; + } + else + throw new ApplicationException(); +#if (DX9) +#else + // Make sure to allow multithreaded apps if we need them + presentParams.ForceNoMultiThreadedFlag = !isMultiThreaded; +#endif + try { + // Create the device + device = new Device(graphicsSettings.AdapterOrdinal, graphicsSettings.DevType, + windowed ? ourRenderTarget : this , createFlags, presentParams); + + // Cache our local objects + renderState = device.RenderState; + sampleState = device.SamplerState; + textureStates = device.TextureState; + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after recreating the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + if (windowed) { + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + } + + // Store device Caps + graphicsCaps = device.DeviceCaps; + behavior = createFlags; + + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + // Store device description + if (deviceInfo.DevType == DeviceType.Reference) + sb.Append("REF"); + else if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append("HAL"); + else if (deviceInfo.DevType == DeviceType.Software) + sb.Append("SW"); + + BehaviorFlags behaviorFlags = new BehaviorFlags(createFlags); + if ((behaviorFlags.HardwareVertexProcessing) && + (behaviorFlags.PureDevice)) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (pure hw vp)"); + else + sb.Append(" (simulated pure hw vp)"); + } + else if (behaviorFlags.HardwareVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (hw vp)"); + else + sb.Append(" (simulated hw vp)"); + } + else if (behaviorFlags.MixedVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (mixed vp)"); + else + sb.Append(" (simulated mixed vp)"); + } + else if (behaviorFlags.SoftwareVertexProcessing) { + sb.Append(" (sw vp)"); + } + + if (deviceInfo.DevType == DeviceType.Hardware) { + sb.Append(": "); + sb.Append(adapterInfo.AdapterDetails.Description); + } + + // Set device stats string + deviceStats = sb.ToString(); + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // Confine cursor to fullscreen window + if (clipCursorWhenFullscreen) { + if (!windowed) { + System.Drawing.Rectangle rcWindow = this.ClientRectangle; + } + } + + // Setup the event handlers for our device + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + device.Disposing += new System.EventHandler(this.DeleteDeviceObjects); + device.DeviceResizing += new System.ComponentModel.CancelEventHandler(this.EnvironmentResized); + + // Initialize the app's device-dependent objects + try { + InitializeDeviceObjects(); + RestoreDeviceObjects(null, null); + active = true; + return; + } + catch { + // Cleanup before we try again + InvalidateDeviceObjects(null, null); + DeleteDeviceObjects(null, null); + device.Dispose(); + device = null; + if (this.Disposing) + return; + } + } + catch { + // If that failed, fall back to the reference rasterizer + if (deviceInfo.DevType == DeviceType.Hardware) { + if (FindBestWindowedMode(false, true)) { + windowed = true; + + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + + // Let the user know we are switching from HAL to the reference rasterizer + HandleSampleException(null, ApplicationMessage.WarnSwitchToRef); + + InitializeEnvironment(); + } + } + } + } + + + + + /// + /// Displays sample exceptions to the user + /// + /// The exception that was thrown + /// Extra information on how to handle the exception + public void HandleSampleException(SampleException e, ApplicationMessage Type) { + // Build a message to display to the user + string strMsg = string.Empty; + if (e != null) + strMsg = e.Message; + + if (ApplicationMessage.ApplicationMustExit == Type) { + strMsg += "\n\nThis sample will now exit."; + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + + // Close the window, which shuts down the app + if (this.IsHandleCreated) + this.Close(); + } + else { + if (ApplicationMessage.WarnSwitchToRef == Type) + strMsg = "\n\nSwitching to the reference rasterizer,\n"; + strMsg += "a software device that implements the entire\n"; + strMsg += "Direct3D feature set, but runs very slowly."; + + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + } + } + + + + + /// + /// Fired when our environment was resized + /// + /// the device that's resizing our environment + /// Set the cancel member to true to turn off automatic device reset + public void EnvironmentResized(object sender, System.ComponentModel.CancelEventArgs e) { + // Check to see if we're closing or changing the form style + if ((isClosing) || (isChangingFormStyle)) { + // We are, cancel our reset, and exit + e.Cancel = true; + return; + } + + // Check to see if we're minimizing and our rendering object + // is not the form, if so, cancel the resize + if ((ourRenderTarget != this) && (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)) + e.Cancel = true; + + if (!isWindowActive) + e.Cancel = true; + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + } + + + + + /// + /// Called when user toggles between fullscreen mode and windowed mode + /// + public void ToggleFullscreen() { + int AdapterOrdinalOld = graphicsSettings.AdapterOrdinal; + DeviceType DevTypeOld = graphicsSettings.DevType; + + isHandlingSizeChanges = false; + isChangingFormStyle = true; + ready = false; + + // Toggle the windowed state + windowed = !windowed; + + // Save our maximized settings.. + if (!windowed && isMaximized) + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + + graphicsSettings.IsWindowed = windowed; + + // If AdapterOrdinal and DevType are the same, we can just do a Reset(). + // If they've changed, we need to do a complete device teardown/rebuild. + if (graphicsSettings.AdapterOrdinal == AdapterOrdinalOld && + graphicsSettings.DevType == DevTypeOld) { + BuildPresentParamsFromSettings(); + // Resize the 3D device + RETRY: + try { + device.Reset(presentParams); + } + catch { + if (windowed) + ForceWindowed(); + else { + // Sit in a loop until the device passes Reset() + try { + device.TestCooperativeLevel(); + } + catch(DeviceNotResetException) { + // Device still needs to be Reset. Try again. + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + goto RETRY; + } + } + } + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + else { + device.Dispose(); + device = null; + InitializeEnvironment(); + } + + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after resetting the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + + if (windowed) { + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; + isChangingFormStyle = false; + + // We were maximized, restore that state + if (isMaximized) { + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + } + this.SendToBack(); + this.BringToFront(); + this.ClientSize = storedSize; + this.Location = storedLocation; + } + else { + if (this.Menu != null) + this.Menu = null; + + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + isChangingFormStyle = false; + } + isHandlingSizeChanges = true; + ready = true; + } + + + + + /// + /// Switch to a windowed mode, even if that means picking a new device and/or adapter + /// + public void ForceWindowed() { + if (windowed) + return; + + if (!FindBestWindowedMode(false, false)) { + return; + } + windowed = true; + + // Now destroy the current 3D device objects, then reinitialize + + ready = false; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Create the new device + try { + InitializeEnvironment(); + } + catch (SampleException e) { + HandleSampleException(e,ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(),ApplicationMessage.ApplicationMustExit); + } + ready = true; + } + + + + + /// + /// Called when our sample has nothing else to do, and it's time to render + /// + private void FullRender() { + // Render a frame during idle time (no messages are waiting) + if (active && ready) { + try { + if ((deviceLost) || (System.Windows.Forms.Form.ActiveForm != this)) { + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + } + // Render a frame during idle time + if (active) { + Render3DEnvironment(); + } + } + catch (Exception ee) { + System.Windows.Forms.MessageBox.Show("An exception has occurred. This sample must exit.\r\n\r\n" + ee.ToString(), "Exception", + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + this.Close(); + } + } + } + + + + + /// + /// Run the simulation + /// + public void Run() { + // Now we're ready to recieve and process Windows messages. + System.Windows.Forms.Control mainWindow = this; + + // If the render target is a form and *not* this form, use that form instead, + // otherwise, use the main form. + if ((ourRenderTarget is System.Windows.Forms.Form) && (ourRenderTarget != this)) + mainWindow = ourRenderTarget; + + mainWindow.Show(); + while (mainWindow.Created) { + FullRender(); + System.Windows.Forms.Application.DoEvents(); + } + } + + + + + /// + /// Draws the scene + /// + public void Render3DEnvironment() { + if (deviceLost) { + try { + // Test the cooperative level to see if it's okay to render + device.TestCooperativeLevel(); + } + catch (DeviceLostException) { + // If the device was lost, do not render until we get it back + isHandlingSizeChanges = false; + isWindowActive = false; + return; + } + catch (DeviceNotResetException) { + // Check if the device needs to be resized. + + // If we are windowed, read the desktop mode and use the same format for + // the back buffer + if (windowed) { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + graphicsSettings.WindowedDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + presentParams.BackBufferFormat = graphicsSettings.WindowedDisplayMode.Format; + } + + // Reset the device and resize it + device.Reset(device.PresentationParameters); + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + deviceLost = false; + } + + // Get the app's time, in seconds. Skip rendering if no time elapsed + float fAppTime = DXUtil.Timer(DirectXTimer.GetApplicationTime); + float fElapsedAppTime = DXUtil.Timer(DirectXTimer.GetElapsedTime); + if ((0.0f == fElapsedAppTime) && frameMoving) + return; + + // FrameMove (animate) the scene + if (frameMoving || singleStep) { + // Store the time for the app + appTime = fAppTime; + elapsedTime = fElapsedAppTime; + + // Frame move the scene + FrameMove(); + + singleStep = false; + } + + // Render the scene as normal + Render(); + + UpdateStats(); + + try { + // Show the frame on the primary surface. + device.Present(); + } + catch(DeviceLostException) { + deviceLost = true; + } + } + + + + + /// + /// Update the various statistics the simulation keeps track of + /// + public void UpdateStats() { + // Keep track of the frame count + float time = DXUtil.Timer(DirectXTimer.GetAbsoluteTime); + ++frames; + + // Update the scene stats once per second + if (time - lastTime > 1.0f) { + framePerSecond = frames / (time - lastTime); + lastTime = time; + frames = 0; + + string strFmt; + Format fmtAdapter = graphicsSettings.DisplayMode.Format; + if (fmtAdapter == device.PresentationParameters.BackBufferFormat) { + strFmt = fmtAdapter.ToString(); + } + else { + strFmt = String.Format("backbuf {0}, adapter {1}", + device.PresentationParameters.BackBufferFormat.ToString(), fmtAdapter.ToString()); + } + + string strDepthFmt; + if (enumerationSettings.AppUsesDepthBuffer) { + strDepthFmt = String.Format(" ({0})", + graphicsSettings.DepthStencilBufferFormat.ToString()); + } + else { + // No depth buffer + strDepthFmt = ""; + } + + string strMultiSample; + switch (graphicsSettings.MultisampleType) { + case Direct3D.MultiSampleType.NonMaskable: strMultiSample = " (NonMaskable Multisample)"; break; + case Direct3D.MultiSampleType.TwoSamples: strMultiSample = " (2x Multisample)"; break; + case Direct3D.MultiSampleType.ThreeSamples: strMultiSample = " (3x Multisample)"; break; + case Direct3D.MultiSampleType.FourSamples: strMultiSample = " (4x Multisample)"; break; + case Direct3D.MultiSampleType.FiveSamples: strMultiSample = " (5x Multisample)"; break; + case Direct3D.MultiSampleType.SixSamples: strMultiSample = " (6x Multisample)"; break; + case Direct3D.MultiSampleType.SevenSamples: strMultiSample = " (7x Multisample)"; break; + case Direct3D.MultiSampleType.EightSamples: strMultiSample = " (8x Multisample)"; break; + case Direct3D.MultiSampleType.NineSamples: strMultiSample = " (9x Multisample)"; break; + case Direct3D.MultiSampleType.TenSamples: strMultiSample = " (10x Multisample)"; break; + case Direct3D.MultiSampleType.ElevenSamples: strMultiSample = " (11x Multisample)"; break; + case Direct3D.MultiSampleType.TwelveSamples: strMultiSample = " (12x Multisample)"; break; + case Direct3D.MultiSampleType.ThirteenSamples: strMultiSample = " (13x Multisample)"; break; + case Direct3D.MultiSampleType.FourteenSamples: strMultiSample = " (14x Multisample)"; break; + case Direct3D.MultiSampleType.FifteenSamples: strMultiSample = " (15x Multisample)"; break; + case Direct3D.MultiSampleType.SixteenSamples: strMultiSample = " (16x Multisample)"; break; + default: strMultiSample = string.Empty; break; + } + frameStats = String.Format("{0} fps ({1}x{2}), {3}{4}{5}", framePerSecond.ToString("f2"), + device.PresentationParameters.BackBufferWidth, device.PresentationParameters.BackBufferHeight, + strFmt, strDepthFmt, strMultiSample); + } + } + + + + + /// + /// Called in to toggle the pause state of the app. + /// + /// true if the simulation should pause + public void Pause(bool pause) { + appPausedCount += (int)(pause ? +1 : -1); + ready = ((appPausedCount > 0) ? false : true); + + // Handle the first pause request (of many, nestable pause requests) + if (pause && (1 == appPausedCount)) { + // Stop the scene from animating + if (frameMoving) + DXUtil.Timer(DirectXTimer.Stop); + } + + if (0 == appPausedCount) { + // Restart the timers + if (frameMoving) + DXUtil.Timer(DirectXTimer.Start); + } + } + + + + + /// + /// Set our variables to not active and not ready + /// + public void CleanupEnvironment() { + active = false; + ready = false; + if (device != null) + device.Dispose(); + + device = null; + } + #region Menu EventHandlers + + + + + /// + /// Prepares the simulation for a new device being selected + /// + public void UserSelectNewDevice(object sender, EventArgs e) { + // Prompt the user to select a new device or mode + if (active && ready) { + Pause(true); + DoSelectNewDevice(); + Pause(false); + } + } + + + + + /// + /// Displays a dialog so the user can select a new adapter, device, or + /// display mode, and then recreates the 3D environment if needed + /// + private void DoSelectNewDevice() { + isHandlingSizeChanges = false; + // Can't display dialogs in fullscreen mode + if (windowed == false) { + try { + ToggleFullscreen(); + isHandlingSizeChanges = false; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + return; + } + } + + // Make sure the main form is in the background + this.SendToBack(); + D3DSettingsForm settingsForm = new D3DSettingsForm(enumerationSettings, graphicsSettings); + System.Windows.Forms.DialogResult result = settingsForm.ShowDialog(null); + if (result != System.Windows.Forms.DialogResult.OK) { + isHandlingSizeChanges = true; + return; + } + graphicsSettings = settingsForm.settings; + + windowed = graphicsSettings.IsWindowed; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Inform the display class of the change. It will internally + // re-create valid surfaces, a d3ddevice, etc. + try { + InitializeEnvironment(); + } + catch(SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + isHandlingSizeChanges = true; + } + + + + + /// + /// Will start (or stop) simulation + /// + private void ToggleStart(object sender, EventArgs e) { + //Toggle frame movement + frameMoving = !frameMoving; + DXUtil.Timer(frameMoving ? DirectXTimer.Start : DirectXTimer.Stop); + } + + + + + /// + /// Will single step the simulation + /// + private void SingleStep(object sender, EventArgs e) { + // Single-step frame movement + if (false == frameMoving) + DXUtil.Timer(DirectXTimer.Advance); + else + DXUtil.Timer(DirectXTimer.Stop); + frameMoving = false; + singleStep = true; + } + + + + + /// + /// Will end the simulation + /// + private void ExitSample(object sender, EventArgs e) { + this.Close(); + } + #endregion + + + + + #region WinForms Overrides + /// + /// Clean up any resources + /// + protected override void Dispose(bool disposing) { + CleanupEnvironment(); + mnuMain.Dispose(); + base.Dispose(disposing); + } + + + + + /// + /// Handle any key presses + /// + protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) { + // Check for our shortcut keys (Return to start or stop) + if (e.KeyChar == '\r') { + mnuGo.PerformClick(); + e.Handled = true; + } + + // Check for our shortcut keys (Escape to quit) + if ((byte)e.KeyChar == (byte)(int)System.Windows.Forms.Keys.Escape) { + mnuExit.PerformClick(); + e.Handled = true; + } + + // Allow the control to handle the keystroke now + base.OnKeyPress(e); + } + + + + + /// + /// Handle system keystrokes (ie, alt-enter) + /// + protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e) { + if ((e.Alt) && (e.KeyCode == System.Windows.Forms.Keys.Return)) { + // Toggle the fullscreen/window mode + if (active && ready) { + Pause(true); + + try { + ToggleFullscreen(); + Pause(false); + return; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + } + finally { + e.Handled = true; + } + } + } + // Allow the control to handle the keystroke now + base.OnKeyDown(e); + } + + + + + /// + /// Winforms generated code for initializing the form + /// + private void InitializeComponent() { + // + // GraphicsSample + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.MinimumSize = new System.Drawing.Size(100, 100); + #region MenuCreation/etc + this.mnuMain = new System.Windows.Forms.MainMenu(); + this.mnuFile = new System.Windows.Forms.MenuItem(); + this.mnuGo = new System.Windows.Forms.MenuItem(); + this.mnuSingle = new System.Windows.Forms.MenuItem(); + this.mnuBreak1 = new System.Windows.Forms.MenuItem(); + this.mnuChange = new System.Windows.Forms.MenuItem(); + this.mnuBreak2 = new System.Windows.Forms.MenuItem(); + this.mnuExit = new System.Windows.Forms.MenuItem(); + // + // mainMenu1 + // + this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuFile}); + // + // mnuFile + // + this.mnuFile.Index = 0; + this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuGo, + this.mnuSingle, + this.mnuBreak1, + this.mnuChange, + this.mnuBreak2, + this.mnuExit}); + this.mnuFile.Text = "&File"; + // + // mnuGo + // + this.mnuGo.Index = 0; + this.mnuGo.Text = "&Go/stop\tEnter"; + this.mnuGo.Click += new System.EventHandler(this.ToggleStart); + // + // mnuSingle + // + this.mnuSingle.Index = 1; + this.mnuSingle.Text = "&Single step\tSpace"; + this.mnuSingle.Click += new System.EventHandler(this.SingleStep); + // + // mnuBreak1 + // + this.mnuBreak1.Index = 2; + this.mnuBreak1.Text = "-"; + // + // mnuChange + // + this.mnuChange.Index = 3; + this.mnuChange.Shortcut = System.Windows.Forms.Shortcut.F2; + this.mnuChange.ShowShortcut = true; + this.mnuChange.Text = "&Change Device..."; + this.mnuChange.Click += new System.EventHandler(this.UserSelectNewDevice); + // + // mnuBreak2 + // + this.mnuBreak2.Index = 4; + this.mnuBreak2.Text = "-"; + // + // mnuExit + // + this.mnuExit.Index = 5; + this.mnuExit.Text = "E&xit\tESC"; + this.mnuExit.Click += new System.EventHandler(this.ExitSample); + #endregion + } + + + + + /// + /// When the menu is starting pause our simulation + /// + protected override void OnMenuStart(System.EventArgs e) { + Pause(true); // Pause the simulation while the menu starts + } + + + + + /// + /// When the menu is complete our simulation can continue + /// + protected override void OnMenuComplete(System.EventArgs e) { + Pause(false); // Unpause the simulation + } + + + + + /// + /// Make sure our graphics cursor (if available) moves with the cursor + /// + protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e) { + if ((device != null) && (!device.Disposed)) { + // Move the D3D cursor + device.SetCursorPosition(e.X, e.Y, false); + } + // Let the control handle the mouse now + base.OnMouseMove(e); + } + + + + + /// + /// Handle size changed events + /// + protected override void OnSizeChanged(System.EventArgs e) { + this.OnResize(e); + base.OnSizeChanged(e); + } + + + + + /// + /// Handle resize events + /// + protected override void OnResize(System.EventArgs e) { + if (isHandlingSizeChanges) { + // Are we maximized? + isMaximized = (this.WindowState == System.Windows.Forms.FormWindowState.Maximized); + if (!isMaximized) { + storedSize = this.ClientSize; + storedLocation = this.Location; + } + } + active = !(this.WindowState == System.Windows.Forms.FormWindowState.Minimized || this.Visible == false); + base.OnResize(e); + } + + + + + /// + /// Once the form has focus again, we can continue to handle our resize + /// and resets.. + /// + protected override void OnGotFocus(System.EventArgs e) { + isHandlingSizeChanges = true; + isWindowActive = true; + base.OnGotFocus (e); + } + + + + + /// + /// Handle move events + /// + protected override void OnMove(System.EventArgs e) { + if (isHandlingSizeChanges) { + storedLocation = this.Location; + } + base.OnMove(e); + } + + + + + /// + /// Handle closing event + /// + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { + isClosing = true; + base.OnClosing(e); + } + #endregion + + +} + +#region Enums for D3D Applications +/// +/// Messages that can be used when displaying an error +/// +public enum ApplicationMessage { + None, + ApplicationMustExit, + WarnSwitchToRef +}; +#endregion + + + + +#region Various SampleExceptions +/// +/// The default sample exception type +/// +public class SampleException : System.ApplicationException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + + strMsg = "Generic application error. Enable\n"; + strMsg += "debug output for detailed information."; + + return strMsg; + } + } +} + + + + +/// +/// Exception informing user no compatible devices were found +/// +public class NoCompatibleDevicesException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "This sample cannot run in a desktop\n"; + strMsg += "window with the current display settings.\n"; + strMsg += "Please change your desktop settings to a\n"; + strMsg += "16- or 32-bit display mode and re-run this\n"; + strMsg += "sample."; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when the ReferenceDevice is null +/// +public class NullReferenceDeviceException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Warning: Nothing will be rendered.\n"; + strMsg += "The reference rendering device was selected, but your\n"; + strMsg += "computer only has a reduced-functionality reference device\n"; + strMsg += "installed. Install the DirectX SDK to get the full\n"; + strMsg += "reference device.\n"; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when reset fails +/// +public class ResetFailedException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not reset the Direct3D device."; + + return strMsg; + } + } +} + + + + +/// +/// The exception thrown when media couldn't be found +/// +public class MediaNotFoundException : SampleException { + private string mediaFile; + public MediaNotFoundException(string filename) : base() { + mediaFile = filename; + } + public MediaNotFoundException() : base() { + mediaFile = string.Empty; + } + + + + + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not load required media."; + if (mediaFile.Length > 0) + strMsg += string.Format("\r\nFile: {0}", mediaFile); + + return strMsg; + } + } +} +#endregion + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step01/d3dapp.resx b/Source Code updated 08-12-05/Spacewar3D/Step01/d3dapp.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step01/d3dapp.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step01/d3denumeration.cs b/Source Code updated 08-12-05/Spacewar3D/Step01/d3denumeration.cs new file mode 100644 index 0000000..37fef25 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step01/d3denumeration.cs @@ -0,0 +1,440 @@ +//----------------------------------------------------------------------------- +// File: D3DEnumeration.cs +// +// Desc: Enumerates D3D adapters, devices, modes, etc. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + + + +/// +/// Enumeration of all possible D3D vertex processing types +/// +public enum VertexProcessingType { + Software, + Mixed, + Hardware, + PureHardware +} + + + + +/// +/// Info about a display adapter +/// +public class GraphicsAdapterInfo { + public int AdapterOrdinal; + public AdapterDetails AdapterDetails; + public ArrayList DisplayModeList = new ArrayList(); // List of D3DDISPLAYMODEs + public ArrayList DeviceInfoList = new ArrayList(); // List of D3DDeviceInfos + public override string ToString() { return AdapterDetails.Description; } +} + + + + +/// +/// Info about a D3D device, including a list of DeviceCombos (see below) +/// that work with the device +/// +public class GraphicsDeviceInfo { + public int AdapterOrdinal; + public DeviceType DevType; + public Caps Caps; + public ArrayList DeviceComboList = new ArrayList(); // List of D3DDeviceCombos + public override string ToString() { return DevType.ToString(); } +} + + + + +/// +/// Info about a depth/stencil buffer format that is incompatible with a +/// multisample type +/// +public class DepthStencilMultiSampleConflict { + public DepthFormat DepthStencilFormat; + public MultiSampleType MultiSampleType; +} + + + + +/// +/// A combination of adapter format, back buffer format, and windowed/fullscreen +/// that is compatible with a particular D3D device (and the app) +/// +public class DeviceCombo { + public int AdapterOrdinal; + public DeviceType DevType; + public Format AdapterFormat; + public Format BackBufferFormat; + public bool IsWindowed; + public ArrayList DepthStencilFormatList = new ArrayList(); // List of D3DFORMATs + public ArrayList MultiSampleTypeList = new ArrayList(); // List of D3DMULTISAMPLE_TYPEs + public ArrayList MultiSampleQualityList = new ArrayList(); // List of ints (maxQuality per multisample type) + public ArrayList DepthStencilMultiSampleConflictList = new ArrayList(); // List of DepthStencilMultiSampleConflicts + public ArrayList VertexProcessingTypeList = new ArrayList(); // List of VertexProcessingTypes + public ArrayList PresentIntervalList = new ArrayList(); // List of D3DPRESENT_INTERVALs +} + + + + +/// +/// Used to sort Displaymodes +/// +class DisplayModeComparer : System.Collections.IComparer { + /// + /// Compare two display modes + /// + public int Compare(object x, object y) { + DisplayMode dx = (DisplayMode)x; + DisplayMode dy = (DisplayMode)y; + + if (dx.Width > dy.Width) + return 1; + if (dx.Width < dy.Width) + return -1; + if (dx.Height > dy.Height) + return 1; + if (dx.Height < dy.Height) + return -1; + if (dx.Format > dy.Format) + return 1; + if (dx.Format < dy.Format) + return -1; + if (dx.RefreshRate > dy.RefreshRate) + return 1; + if (dx.RefreshRate < dy.RefreshRate) + return -1; + return 0; + } +} + + + + +/// +/// Enumerates available adapters, devices, modes, etc. +/// +public class D3DEnumeration { + /// + /// The confirm device delegate which is used to determine if a device + /// meets the needs of the simulation + /// + public delegate bool ConfirmDeviceCallbackType(Caps caps, + VertexProcessingType vertexProcessingType, Format adapterFormat, + Format backBufferFormat); + + public ConfirmDeviceCallbackType ConfirmDeviceCallback; + public ArrayList AdapterInfoList = new ArrayList(); // List of D3DAdapterInfos + + // The following variables can be used to limit what modes, formats, + // etc. are enumerated. Set them to the values you want before calling + // Enumerate(). + public int AppMinFullscreenWidth = 640; + public int AppMinFullscreenHeight = 480; + public int AppMinColorChannelBits = 5; // min color bits per channel in adapter format + public int AppMinAlphaChannelBits = 0; // min alpha bits per pixel in back buffer format + public int AppMinDepthBits = 15; + public int AppMinStencilBits = 0; + public bool AppUsesDepthBuffer = true; + public bool AppUsesMixedVP = false; // whether app can take advantage of mixed vp mode + public bool AppRequiresWindowed = false; + public bool AppRequiresFullscreen = false; + + + + + /// + /// Enumerates available D3D adapters, devices, modes, etc. + /// + public void Enumerate() { + foreach (AdapterInformation ai in Manager.Adapters) { + ArrayList adapterFormatList = new ArrayList(); + GraphicsAdapterInfo adapterInfo = new GraphicsAdapterInfo(); + adapterInfo.AdapterOrdinal = ai.Adapter; + adapterInfo.AdapterDetails = ai.Information; + + // Get list of all display modes on this adapter. + // Also build a temporary list of all display adapter formats. + foreach (DisplayMode displayMode in ai.SupportedDisplayModes) { + if (displayMode.Width < AppMinFullscreenWidth) + continue; + if (displayMode.Height < AppMinFullscreenHeight) + continue; + if (GraphicsUtility.GetColorChannelBits(displayMode.Format) < AppMinColorChannelBits) + continue; + adapterInfo.DisplayModeList.Add(displayMode); + if (!adapterFormatList.Contains(displayMode.Format)) + adapterFormatList.Add(displayMode.Format); + } + + // Sort displaymode list + DisplayModeComparer dmc = new DisplayModeComparer(); + adapterInfo.DisplayModeList.Sort(dmc); + + // Get info for each device on this adapter + EnumerateDevices(adapterInfo, adapterFormatList); + + // If at least one device on this adapter is available and compatible + // with the app, add the adapterInfo to the list + if (adapterInfo.DeviceInfoList.Count == 0) + continue; + AdapterInfoList.Add(adapterInfo); + } + } + + + + + /// + /// Enumerates D3D devices for a particular adapter + /// + protected void EnumerateDevices(GraphicsAdapterInfo adapterInfo, ArrayList adapterFormatList) { + DeviceType[] devTypeArray = new DeviceType[] { + DeviceType.Hardware, DeviceType.Software, DeviceType.Reference }; + + foreach (DeviceType devType in devTypeArray) { + GraphicsDeviceInfo deviceInfo = new GraphicsDeviceInfo(); + deviceInfo.AdapterOrdinal = adapterInfo.AdapterOrdinal; + deviceInfo.DevType = devType; + try { + deviceInfo.Caps = Manager.GetDeviceCaps(adapterInfo.AdapterOrdinal, devType); + } + catch (DirectXException) { + continue; + } + + // Get info for each devicecombo on this device + EnumerateDeviceCombos(deviceInfo, adapterFormatList); + + // If at least one devicecombo for this device is found, + // add the deviceInfo to the list + if (deviceInfo.DeviceComboList.Count == 0) + continue; + adapterInfo.DeviceInfoList.Add(deviceInfo); + } + } + + + + + /// + /// Enumerates DeviceCombos for a particular device + /// + protected void EnumerateDeviceCombos(GraphicsDeviceInfo deviceInfo, ArrayList adapterFormatList) { + Format[] backBufferFormatArray = new Format[] { + Format.A8R8G8B8, Format.X8R8G8B8, Format.A2R10G10B10, + Format.R5G6B5, Format.A1R5G5B5, Format.X1R5G5B5, + }; + bool[] isWindowedArray = new bool[] { false, true }; + + // See which adapter formats are supported by this device + foreach (Format adapterFormat in adapterFormatList) { + foreach (Format backBufferFormat in backBufferFormatArray) { + if (GraphicsUtility.GetAlphaChannelBits(backBufferFormat) < AppMinAlphaChannelBits) + continue; + foreach (bool isWindowed in isWindowedArray) { + if (!isWindowed && AppRequiresWindowed) + continue; + if (isWindowed && AppRequiresFullscreen) + continue; + if (!Manager.CheckDeviceType(deviceInfo.AdapterOrdinal, deviceInfo.DevType, adapterFormat, backBufferFormat, isWindowed)) { + continue; + } + + // At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed + // DeviceCombo that is supported by the system. We still need to confirm that it's + // compatible with the app, and find one or more suitable depth/stencil buffer format, + // multisample type, vertex processing type, and present interval. + DeviceCombo deviceCombo = new DeviceCombo(); + deviceCombo.AdapterOrdinal = deviceInfo.AdapterOrdinal; + deviceCombo.DevType = deviceInfo.DevType; + deviceCombo.AdapterFormat = adapterFormat; + deviceCombo.BackBufferFormat = backBufferFormat; + deviceCombo.IsWindowed = isWindowed; + if (AppUsesDepthBuffer) { + BuildDepthStencilFormatList(deviceCombo); + if (deviceCombo.DepthStencilFormatList.Count == 0) + continue; + } + BuildMultiSampleTypeList(deviceCombo); + if (deviceCombo.MultiSampleTypeList.Count == 0) + continue; + BuildDepthStencilMultiSampleConflictList(deviceCombo); + BuildVertexProcessingTypeList(deviceInfo, deviceCombo); + if (deviceCombo.VertexProcessingTypeList.Count == 0) + continue; + BuildPresentIntervalList(deviceInfo, deviceCombo); + if (deviceCombo.PresentIntervalList.Count == 0) + continue; + + deviceInfo.DeviceComboList.Add(deviceCombo); + } + } + } + } + + + + + /// + /// Adds all depth/stencil formats that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildDepthStencilFormatList(DeviceCombo deviceCombo) { + DepthFormat[] depthStencilFormatArray = { + DepthFormat.D16, + DepthFormat.D15S1, + DepthFormat.D24X8, + DepthFormat.D24S8, + DepthFormat.D24X4S4, + DepthFormat.D32, + }; + + foreach (DepthFormat depthStencilFmt in depthStencilFormatArray) { + if (GraphicsUtility.GetDepthBits(depthStencilFmt) < AppMinDepthBits) + continue; + if (GraphicsUtility.GetStencilBits(depthStencilFmt) < AppMinStencilBits) + continue; + if (Manager.CheckDeviceFormat(deviceCombo.AdapterOrdinal, deviceCombo.DevType, deviceCombo.AdapterFormat, + Usage.DepthStencil, ResourceType.Surface, depthStencilFmt)) { + if (Manager.CheckDepthStencilMatch(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat, depthStencilFmt)) { + deviceCombo.DepthStencilFormatList.Add(depthStencilFmt); + } + } + } + } + + + + + /// + /// Adds all multisample types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildMultiSampleTypeList(DeviceCombo deviceCombo) { + MultiSampleType[] msTypeArray = { + MultiSampleType.None, + MultiSampleType.NonMaskable, + MultiSampleType.TwoSamples, + MultiSampleType.ThreeSamples, + MultiSampleType.FourSamples, + MultiSampleType.FiveSamples, + MultiSampleType.SixSamples, + MultiSampleType.SevenSamples, + MultiSampleType.EightSamples, + MultiSampleType.NineSamples, + MultiSampleType.TenSamples, + MultiSampleType.ElevenSamples, + MultiSampleType.TwelveSamples, + MultiSampleType.ThirteenSamples, + MultiSampleType.FourteenSamples, + MultiSampleType.FifteenSamples, + MultiSampleType.SixteenSamples, + }; + + foreach (MultiSampleType msType in msTypeArray) { + int result; + int qualityLevels = 0; + if (Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.BackBufferFormat, deviceCombo.IsWindowed, msType, out result, out qualityLevels)) { + deviceCombo.MultiSampleTypeList.Add(msType); + deviceCombo.MultiSampleQualityList.Add(qualityLevels); + } + } + } + + /// + /// Finds any depthstencil formats that are incompatible with multisample types and + /// builds a list of them. + /// + public void BuildDepthStencilMultiSampleConflictList(DeviceCombo deviceCombo) { + DepthStencilMultiSampleConflict DSMSConflict; + + foreach (DepthFormat dsFmt in deviceCombo.DepthStencilFormatList) { + foreach (MultiSampleType msType in deviceCombo.MultiSampleTypeList) { + if (!Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, + deviceCombo.DevType, (Format)dsFmt, deviceCombo.IsWindowed, msType)) { + DSMSConflict = new DepthStencilMultiSampleConflict(); + DSMSConflict.DepthStencilFormat = dsFmt; + DSMSConflict.MultiSampleType = msType; + deviceCombo.DepthStencilMultiSampleConflictList.Add(DSMSConflict); + } + } + } + } + + /// + /// Adds all vertex processing types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildVertexProcessingTypeList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + if (deviceInfo.Caps.DeviceCaps.SupportsHardwareTransformAndLight) { + if (deviceInfo.Caps.DeviceCaps.SupportsPureDevice) { + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.PureHardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.PureHardware); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Hardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Hardware); + } + if (AppUsesMixedVP && (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Mixed, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat))) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Mixed); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Software, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Software); + } + } + + /// + /// Adds all present intervals that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildPresentIntervalList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + PresentInterval[] piArray = { + PresentInterval.Immediate, + PresentInterval.Default, + PresentInterval.One, + PresentInterval.Two, + PresentInterval.Three, + PresentInterval.Four, + }; + + foreach (PresentInterval pi in piArray) { + if (deviceCombo.IsWindowed) { + if (pi == PresentInterval.Two || + pi == PresentInterval.Three || + pi == PresentInterval.Four) { + // These intervals are not supported in windowed mode. + continue; + } + } + // Note that PresentInterval.Default is zero, so you + // can't do a caps check for it -- it is always available. + if (pi == PresentInterval.Default || + (deviceInfo.Caps.PresentationIntervals & pi) != (PresentInterval)0) { + deviceCombo.PresentIntervalList.Add(pi); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step01/d3dfont.cs b/Source Code updated 08-12-05/Spacewar3D/Step01/d3dfont.cs new file mode 100644 index 0000000..2b374eb --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step01/d3dfont.cs @@ -0,0 +1,666 @@ +//----------------------------------------------------------------------------- +// File: D3DFont.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// A generic font class +/// +public class GraphicsFont { + public const int MaxNumfontVertices = 50*6; + + // Font rendering flags + [System.Flags] + public enum RenderFlags { + Centered = 0x0001, + TwoSided = 0x0002, + Filtered = 0x0004, + } + private System.Drawing.Font systemFont; + + private bool isZEnable = false; + public bool ZBufferEnable { get { return isZEnable; } set { isZEnable = value; } } + string ourFontName; // Font properties + int ourFontHeight; + + private Direct3D.Device device; + private TextureStateManager textureState0; + private TextureStateManager textureState1; + private SamplerStateManager samplerState0; + private RenderStateManager renderState; + private Direct3D.Texture fontTexture; + private Direct3D.VertexBuffer vertexBuffer; + private CustomVertex.TransformedColoredTextured[] fontVertices = new CustomVertex.TransformedColoredTextured[MaxNumfontVertices]; + + private int textureWidth; // Texture dimensions + private int textureHeight; + private float textureScale; + private int spacingPerChar; + private float[,] textureCoords = new float[128-32,4]; + + // Stateblocks for setting and restoring render states + private StateBlock savedStateBlock; + private StateBlock drawTextStateBlock; + + + + + /// + /// Create a new font object + /// + /// The font to use + public GraphicsFont(System.Drawing.Font f) { + ourFontName = f.Name; + ourFontHeight = (int)f.Size; + systemFont = f; + } + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName) : this(fontName, FontStyle.Regular, 12) { + } + + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName, FontStyle style) : this(fontName, style, 12) { + } + + + + + /// + /// Create a new font object + /// + /// The name of the font + /// The style + /// Size of the font + public GraphicsFont(string fontName, FontStyle style, int size) { + ourFontName = fontName; + ourFontHeight = size; + systemFont = new System.Drawing.Font(fontName, ourFontHeight, style); + } + + + + + /// + /// Attempt to draw the systemFont alphabet onto the provided texture + /// graphics. + /// + /// Graphics object on which to draw and measure the letters + /// If set, the method will test to see if the alphabet will fit without actually drawing + public void PaintAlphabet(Graphics g, bool measureOnly) { + string str; + float x = 0; + float y = 0; + Point p = new Point(0, 0); + Size size = new Size(0,0); + + // Calculate the spacing between characters based on line height + size = g.MeasureString(" ", systemFont).ToSize(); + x = spacingPerChar = (int) Math.Ceiling(size.Height * 0.3); + + for (char c = (char)32; c < (char)127; c++) { + str = c.ToString(); + // We need to do some things here to get the right sizes. The default implemententation of MeasureString + // will return a resolution independant size. For our height, this is what we want. However, for our width, we + // want a resolution dependant size. + Size resSize = g.MeasureString(str, systemFont).ToSize(); + size.Height = resSize.Height + 1; + + // Now the Resolution independent width + if (c != ' ') { // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + resSize = g.MeasureString(str, systemFont, p, StringFormat.GenericTypographic).ToSize(); + size.Width = resSize.Width; + } + else + size.Width = resSize.Width; + + if ((x + size.Width + spacingPerChar) > textureWidth) { + x = spacingPerChar; + y += size.Height; + } + + // Make sure we have room for the current character + if ((y + size.Height) > textureHeight) + throw new System.InvalidOperationException("Texture too small for alphabet"); + + if (!measureOnly) { + if (c != ' ') // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y), StringFormat.GenericTypographic); + else + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y)); + textureCoords[c-32,0] = ((float) (x + 0 - spacingPerChar)) / textureWidth; + textureCoords[c-32,1] = ((float) (y + 0 + 0)) / textureHeight; + textureCoords[c-32,2] = ((float) (x + size.Width + spacingPerChar)) / textureWidth; + textureCoords[c-32,3] = ((float) (y + size.Height + 0)) / textureHeight; + } + + x += size.Width + (2 * spacingPerChar); + } + + } + + + + + /// + /// Initialize the device objects + /// + /// The grpahics device used to initialize + public void InitializeDeviceObjects(Device dev) { + if (dev != null) { + // Set up our events + dev.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Keep a local copy of the device + device = dev; + textureState0 = device.TextureState[0]; + textureState1 = device.TextureState[1]; + samplerState0 = device.SamplerState[0]; + renderState = device.RenderState; + + // Create a bitmap on which to measure the alphabet + Bitmap bmp = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Graphics g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Establish the font and texture size + textureScale = 1.0f; // Draw fonts into texture without scaling + + // Calculate the dimensions for the smallest power-of-two texture which + // can hold all the printable characters + textureWidth = textureHeight = 128; + for (;;) { + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // Scale up the texture size and try again + textureWidth *= 2; + textureHeight *= 2; + continue; + } + + break; + } + + // If requested texture is too big, use a smaller texture and smaller font, + // and scale up when rendering. + Direct3D.Caps d3dCaps = device.DeviceCaps; + + // If the needed texture is too large for the video card... + if (textureWidth > d3dCaps.MaxTextureWidth) { + // Scale the font size down to fit on the largest possible texture + textureScale = (float)d3dCaps.MaxTextureWidth / (float)textureWidth; + textureWidth = textureHeight = d3dCaps.MaxTextureWidth; + + for(;;) { + // Create a new, smaller font + ourFontHeight = (int) Math.Floor(ourFontHeight * textureScale); + systemFont = new System.Drawing.Font(systemFont.Name, ourFontHeight, systemFont.Style); + + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // If that still doesn't fit, scale down again and continue + textureScale *= 0.9F; + continue; + } + + break; + } + } + + // Release the bitmap used for measuring and create one for drawing + bmp.Dispose(); + bmp = new Bitmap(textureWidth, textureHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Draw the alphabet + PaintAlphabet(g, false); + + // Create a new texture for the font from the bitmap we just created + fontTexture = Texture.FromBitmap(device, bmp, 0, Pool.Managed); + RestoreDeviceObjects(null, null); + } + + + + + /// + /// Restore the font after a device has been reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColoredTextured), MaxNumfontVertices, + device, Usage.WriteOnly | Usage.Dynamic, 0, Pool.Default); + + Surface surf = device.GetRenderTarget( 0 ); + bool bSupportsAlphaBlend = Manager.CheckDeviceFormat(device.DeviceCaps.AdapterOrdinal, + device.DeviceCaps.DeviceType, device.DisplayMode.Format, + Usage.RenderTarget | Usage.QueryPostPixelShaderBlending, ResourceType.Surface, + surf.Description.Format ); + + // Create the state blocks for rendering text + for (int which=0; which < 2; which++) { + device.BeginStateBlock(); + device.SetTexture(0, fontTexture); + + if (isZEnable) + renderState.ZBufferEnable = true; + else + renderState.ZBufferEnable = false; + + if( bSupportsAlphaBlend ) { + renderState.AlphaBlendEnable = true; + renderState.SourceBlend = Blend.SourceAlpha; + renderState.DestinationBlend = Blend.InvSourceAlpha; + } + else { + renderState.AlphaBlendEnable = false; + } + renderState.AlphaTestEnable = true; + renderState.ReferenceAlpha = 0x08; + renderState.AlphaFunction = Compare.GreaterEqual; + renderState.FillMode = FillMode.Solid; + renderState.CullMode = Cull.CounterClockwise; + renderState.StencilEnable = false; + renderState.Clipping = true; + device.ClipPlanes.DisableAll(); + renderState.VertexBlend = VertexBlend.Disable; + renderState.IndexedVertexBlendEnable = false; + renderState.FogEnable = false; + renderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; + textureState0.ColorOperation = TextureOperation.Modulate; + textureState0.ColorArgument1 = TextureArgument.TextureColor; + textureState0.ColorArgument2 = TextureArgument.Diffuse; + textureState0.AlphaOperation = TextureOperation.Modulate; + textureState0.AlphaArgument1 = TextureArgument.TextureColor; + textureState0.AlphaArgument2 = TextureArgument.Diffuse; + textureState0.TextureCoordinateIndex = 0; + textureState0.TextureTransform = TextureTransform.Disable; // REVIEW + textureState1.ColorOperation = TextureOperation.Disable; + textureState1.AlphaOperation = TextureOperation.Disable; + samplerState0.MinFilter = TextureFilter.Point; + samplerState0.MagFilter = TextureFilter.Point; + samplerState0.MipFilter = TextureFilter.None; + + if (which==0) + savedStateBlock = device.EndStateBlock(); + else + drawTextStateBlock = device.EndStateBlock(); + } + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text) { + DrawText(xpos, ypos, color, text, RenderFlags.Filtered); + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text, RenderFlags flags) { + if (text == null) + return; + + // Setup renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.SetTexture(0, fontTexture); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Adjust for character spacing + xpos -= spacingPerChar; + float fStartX = xpos; + + // Fill vertex buffer + int iv = 0; + int dwNumTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / textureScale; + float h = (ty2-ty1) * textureHeight / textureScale; + + int intColor = color.ToArgb(); + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + dwNumTriangles += 2; + + if (dwNumTriangles*3 > (MaxNumfontVertices-6)) { + // Set the data for the vertexbuffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + dwNumTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar); + } + + // Set the data for the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (dwNumTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + Viewport vp = device.Viewport; + float xpos = (x+1.0f)*vp.Width/2; + float ypos = (y+1.0f)*vp.Height/2; + float sz = z; + float rhw = 1.0f; + float fLineHeight = (textureCoords[0,3] - textureCoords[0,1]) * textureHeight; + + // Adjust for character spacing + xpos -= spacingPerChar * (fXScale*vp.Height)/fLineHeight; + float fStartX = xpos; + + // Fill vertex buffer + int numTriangles = 0; + int realColor = color.ToArgb(); + int iv = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += fYScale*vp.Height; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1)*textureWidth; + float h = (ty2-ty1)*textureHeight; + + w *= (fXScale*vp.Height)/fLineHeight; + h *= (fYScale*vp.Height)/fLineHeight; + + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + numTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar) * (fXScale*vp.Height)/fLineHeight; + } + + // Unlock and render the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text) { + this.DrawTextScaled(x,y,z,fXScale, fYScale, color, text, 0); + } + + + + + /// + /// Renders 3D text + /// + public void Render3DText(string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.PositionNormalTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0, VertexInformation.GetFormatSize(CustomVertex.PositionNormalTextured.Format)); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Position for each text element + float x = 0.0f; + float y = 0.0f; + + // Center the text block at the origin + if ((flags & RenderFlags.Centered) != 0) { + System.Drawing.SizeF sz = GetTextExtent(text); + x = -(((float)sz.Width)/10.0f)/2.0f; + y = -(((float)sz.Height)/10.0f)/2.0f; + } + + // Turn off culling for two-sided text + if ((flags & RenderFlags.TwoSided) != 0) + renderState.CullMode = Cull.None; + + // Adjust for character spacing + x -= spacingPerChar / 10.0f; + float fStartX = x; + + // Fill vertex buffer + GraphicsStream strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + int numTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + x = fStartX; + y -= (textureCoords[0,3]-textureCoords[0,1])*textureHeight/10.0f; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / (10.0f * textureScale); + float h = (ty2-ty1) * textureHeight / (10.0f * textureScale); + + if (c != ' ') { + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+0,0), new Vector3(0,0,-1), tx1, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+h,0), new Vector3(0,0,-1), tx2, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.Unlock(); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + numTriangles = 0; + } + } + + x += w - (2 * spacingPerChar) / 10.0f; + } + + // Unlock and render the vertex buffer + vertexBuffer.Unlock(); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Get the dimensions of a text string + /// + private System.Drawing.SizeF GetTextExtent(string text) { + if (null == text || text == string.Empty) + throw new System.ArgumentNullException(); + + float fRowWidth = 0.0f; + float fRowHeight = (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + float fWidth = 0.0f; + float fHeight = fRowHeight; + + foreach (char c in text) { + if (c == '\n') { + fRowWidth = 0.0f; + fHeight += fRowHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float tx2 = textureCoords[c-32,2]; + + fRowWidth += (tx2-tx1)*textureWidth - 2*spacingPerChar; + + if (fRowWidth > fWidth) + fWidth = fRowWidth; + } + + return new System.Drawing.SizeF(fWidth, fHeight); + } + + + + + /// + /// Cleanup any resources being used + /// + public void Dispose(object sender, EventArgs e) { + if (systemFont != null) + systemFont.Dispose(); + + systemFont = null; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step01/d3dutil.cs b/Source Code updated 08-12-05/Spacewar3D/Step01/d3dutil.cs new file mode 100644 index 0000000..ea2d5a3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step01/d3dutil.cs @@ -0,0 +1,928 @@ +//----------------------------------------------------------------------------- +// File: D3DUtil.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Windows.Forms; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// Various helper functions for graphics samples +/// +public class GraphicsUtility { + /// + /// Private Constructor + /// + private GraphicsUtility() { + } + + + + /// + /// Initializes a Material structure, setting the diffuse and ambient + /// colors. It does not set emissive or specular colors. + /// + /// The ambient and diffuse color + /// A defined material + public static Direct3D.Material InitMaterial(System.Drawing.Color c) { + Material mtrl = new Material(); + mtrl.Ambient = mtrl.Diffuse = c; + return mtrl; + } + + + + + /// + /// Initializes a light, setting the light position. The + /// diffuse color is set to white; specular and ambient are left as black. + /// + /// Which light to initialize + /// The type + public static void InitLight(Light light, LightType ltType, float x, float y, float z) { + light.Type = ltType; + light.Diffuse = System.Drawing.Color.White; + light.Position = new Vector3(x,y,z); + light.Direction = Vector3.Normalize(light.Position); + light.Range = 1000.0f; + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename, Format format) { + // Get the path to the texture + string path = DXUtil.FindMediaFile(null, textureFilename); + + // Create the texture using D3DX + return TextureLoader.FromFile(device, path, D3DX.Default, D3DX.Default, D3DX.Default, 0, format, + Pool.Managed, Filter.Triangle|Filter.Mirror, + Filter.Triangle|Filter.Mirror, 0); + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename) { + return GraphicsUtility.CreateTexture(device, textureFilename, Format.Unknown); + } + + + + + + /// + /// Returns a view matrix for rendering to a face of a cubemap. + /// + public static Matrix GetCubeMapViewMatrix(CubeMapFace face) { + Vector3 vEyePt = new Vector3(0.0f, 0.0f, 0.0f); + Vector3 vLookDir = new Vector3(); + Vector3 vUpDir = new Vector3(); + + switch (face) { + case CubeMapFace.PositiveX: + vLookDir = new Vector3(1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeX: + vLookDir = new Vector3(-1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.PositiveY: + vLookDir = new Vector3(0.0f, 1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f,-1.0f); + break; + case CubeMapFace.NegativeY: + vLookDir = new Vector3(0.0f,-1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f, 1.0f); + break; + case CubeMapFace.PositiveZ: + vLookDir = new Vector3(0.0f, 0.0f, 1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeZ: + vLookDir = new Vector3(0.0f, 0.0f,-1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + } + + // Set the view transform for this cubemap surface + Matrix matView = Matrix.LookAtLH(vEyePt, vLookDir, vUpDir); + return matView; + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control, float fTrackBallRadius) { + System.Drawing.Point pt = System.Windows.Forms.Cursor.Position; + System.Drawing.Rectangle rc = control.ClientRectangle; + pt = control.PointToClient(pt); + float xpos = (((2.0f * pt.X) / (rc.Right-rc.Left)) - 1); + float ypos = (((2.0f * pt.Y) / (rc.Bottom-rc.Top)) - 1); + float sz; + + if (xpos == 0.0f && ypos == 0.0f) + return new Quaternion(0.0f, 0.0f, 0.0f, 1.0f); + + float d2 = (float)Math.Sqrt(xpos*xpos + ypos*ypos); + + if (d2 < fTrackBallRadius * 0.70710678118654752440) // Inside sphere + sz = (float)Math.Sqrt(fTrackBallRadius*fTrackBallRadius - d2*d2); + else // On hyperbola + sz = (fTrackBallRadius*fTrackBallRadius) / (2.0f*d2); + + // Get two points on trackball's sphere + Vector3 p1 = new Vector3(xpos, ypos, sz); + Vector3 p2 = new Vector3(0.0f, 0.0f, fTrackBallRadius); + + // Get axis of rotation, which is cross product of p1 and p2 + Vector3 axis = Vector3.Cross(p1,p2); + + // Calculate angle for the rotation about that axis + float t = Vector3.Length(Vector3.Subtract(p2,p1)) / (2.0f*fTrackBallRadius); + if (t > +1.0f) t = +1.0f; + if (t < -1.0f) t = -1.0f; + float fAngle = (float)(2.0f * Math.Asin(t)); + + // Convert axis to quaternion + return Quaternion.RotationAxis(axis, fAngle); + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control) { + return GetRotationFromCursor(control, 1.0f); + } + + + + + /// + /// Axis to axis quaternion double angle (no normalization) + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by 2*THETA. + /// + public static Quaternion D3DXQuaternionUnitAxisToUnitAxis2(Vector3 fromVector, Vector3 toVector) { + Vector3 axis = Vector3.Cross(fromVector, toVector); // proportional to sin(theta) + return new Quaternion(axis.X, axis.Y, axis.Z, Vector3.Dot(fromVector, toVector)); + } + + + + + /// + /// Axis to axis quaternion + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by theta. + /// + public static Quaternion D3DXQuaternionAxisToAxis(Vector3 fromVector, Vector3 toVector) { + Vector3 vA = Vector3.Normalize(fromVector), vB = Vector3.Normalize(toVector); + Vector3 vHalf = Vector3.Add(vA,vB); + vHalf = Vector3.Normalize(vHalf); + return GraphicsUtility.D3DXQuaternionUnitAxisToUnitAxis2(vA, vHalf); + } + + + + + /// + /// Gets the number of ColorChanelBits from a format + /// + static public int GetColorChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 8; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 8; + case Format.R5G6B5: + return 5; + case Format.X1R5G5B5: + return 5; + case Format.A1R5G5B5: + return 5; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 2; + case Format.A8R3G3B2: + return 2; + case Format.X4R4G4B4: + return 4; + case Format.A2B10G10R10: + return 10; + case Format.A2R10G10B10: + return 10; + default: + return 0; + } + } + + + + + /// + /// Gets the number of alpha channel bits + /// + static public int GetAlphaChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 0; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 0; + case Format.R5G6B5: + return 0; + case Format.X1R5G5B5: + return 0; + case Format.A1R5G5B5: + return 1; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 0; + case Format.A8R3G3B2: + return 8; + case Format.X4R4G4B4: + return 0; + case Format.A2B10G10R10: + return 2; + case Format.A2R10G10B10: + return 2; + default: + return 0; + } + } + + + + + /// + /// Gets the number of depth bits + /// + static public int GetDepthBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 16; + case DepthFormat.D15S1: + return 15; + case DepthFormat.D24X8: + return 24; + case DepthFormat.D24S8: + return 24; + case DepthFormat.D24X4S4: + return 24; + case DepthFormat.D32: + return 32; + default: + return 0; + } + } + + + + + /// + /// Gets the number of stencil bits + /// + static public int GetStencilBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 0; + case DepthFormat.D15S1: + return 1; + case DepthFormat.D24X8: + return 0; + case DepthFormat.D24S8: + return 8; + case DepthFormat.D24X4S4: + return 4; + case DepthFormat.D32: + return 0; + default: + return 0; + } + } + + + + + /// + /// Assembles and creates a file-based vertex shader + /// + public static VertexShader CreateVertexShader(Device device, string filename) { + GraphicsStream code = null; + string path = null; + + // Get the path to the vertex shader file + path = DXUtil.FindMediaFile(null, filename); + + // Assemble the vertex shader file + code = ShaderLoader.FromFile(path, null, 0); + + // Create the vertex shader + return new VertexShader(device, code); + } + +} + + + + +/// +/// An arc ball class +/// +public class GraphicsArcBall { + private int internalWidth; // ArcBall's window width + private int internalHeight; // ArcBall's window height + private float internalradius; // ArcBall's radius in screen coords + private float internalradiusTranslation; // ArcBall's radius for translating the target + + private Quaternion internaldownQuat; // Quaternion before button down + private Quaternion internalnowQuat; // Composite quaternion for current drag + private Matrix internalrotationMatrix; // Matrix for arcball's orientation + private Matrix internalrotationDelta; // Matrix for arcball's orientation + private Matrix internaltranslationMatrix; // Matrix for arcball's position + private Matrix internaltranslationDelta; // Matrix for arcball's position + private bool internaldragging; // Whether user is dragging arcball + private bool internaluseRightHanded; // Whether to use RH coordinate system + private int saveMouseX = 0; // Saved mouse position + private int saveMouseY = 0; + private Vector3 internalvectorDown; // Button down vector + System.Windows.Forms.Control parent; // parent + + + + + /// + /// Constructor + /// + public GraphicsArcBall(System.Windows.Forms.Control p) { + internaldownQuat = Quaternion.Identity; + internalnowQuat = Quaternion.Identity; + internalrotationMatrix = Matrix.Identity; + internalrotationDelta = Matrix.Identity; + internaltranslationMatrix = Matrix.Identity; + internaltranslationDelta = Matrix.Identity; + internaldragging = false; + internalradiusTranslation = 1.0f; + internaluseRightHanded = false; + + parent = p; + // Hook the events + p.MouseDown += new MouseEventHandler(this.OnContainerMouseDown); + p.MouseUp += new MouseEventHandler(this.OnContainerMouseUp); + p.MouseMove += new MouseEventHandler(this.OnContainerMouseMove); + } + + + + + /// + /// Set the window dimensions + /// + public void SetWindow(int width, int height, float radius) { + // Set ArcBall info + internalWidth = width; + internalHeight = height; + internalradius = radius; + } + + + + + /// + /// Screen coords to a vector + /// + private Vector3 ScreenToVector(int xpos, int ypos) { + // Scale to screen + float x = -(xpos - internalWidth/2) / (internalradius*internalWidth/2); + float y = (ypos - internalHeight/2) / (internalradius*internalHeight/2); + + if (internaluseRightHanded) { + x = -x; + y = -y; + } + + float z = 0.0f; + float mag = x*x + y*y; + + if (mag > 1.0f) { + float scale = 1.0f/(float)Math.Sqrt(mag); + x *= scale; + y *= scale; + } + else + z = (float)Math.Sqrt(1.0f - mag); + + // Return vector + return new Vector3(x, y, z); + } + + + + + /// + /// Fired when the containers mouse button is down + /// + private void OnContainerMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { + // Store off the position of the cursor when the button is pressed + saveMouseX = e.X; + saveMouseY = e.Y; + + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // Start drag mode + internaldragging = true; + internalvectorDown = ScreenToVector(e.X, e.Y); + internaldownQuat = internalnowQuat; + } + } + + + + + /// + /// Fired when the containers mouse button has been released + /// + private void OnContainerMouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // End drag mode + internaldragging = false; + } + } + + + + + /// + /// Fired when the containers mouse is moving + /// + private void OnContainerMouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + if (internaldragging) { + // recompute nowQuat + Vector3 vCur = ScreenToVector(e.X, e.Y); + Quaternion qAxisToAxis = GraphicsUtility.D3DXQuaternionAxisToAxis(internalvectorDown, vCur); + internalnowQuat = internaldownQuat; + internalnowQuat = Quaternion.Multiply(internalnowQuat,qAxisToAxis); + internalrotationDelta = Matrix.RotationQuaternion(qAxisToAxis); + } + else + internalrotationDelta = Matrix.Identity; + + internalrotationMatrix = Matrix.RotationQuaternion(internalnowQuat); + internaldragging = true; + } + + if ((e.Button == System.Windows.Forms.MouseButtons.Right) || (e.Button == System.Windows.Forms.MouseButtons.Middle)) { + // Normalize based on size of window and bounding sphere radius + float fDeltaX = (saveMouseX-e.X) * internalradiusTranslation / internalWidth; + float fDeltaY = (saveMouseY-e.Y) * internalradiusTranslation / internalHeight; + + if (e.Button == System.Windows.Forms.MouseButtons.Right) { + internaltranslationDelta = Matrix.Translation(-2 * fDeltaX, 2 * fDeltaY, 0.0f); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + if (e.Button == System.Windows.Forms.MouseButtons.Middle) { + internaltranslationDelta = Matrix.Translation(0.0f, 0.0f, 5 * fDeltaY); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + + // Store mouse coordinate + saveMouseX = e.X; + saveMouseY = e.Y; + } + } + + #region Various properties of the class + public float Radius { + set { + internalradiusTranslation = value; } + } + public bool RightHanded { + get { return internaluseRightHanded; } + set { internaluseRightHanded = value; } + } + public Matrix RotationMatrix { + get { return internalrotationMatrix; } + } + public Matrix RotationDeltaMatrix { + get { return internalrotationDelta; } + } + public Matrix TranslationMatrix { + get { return internaltranslationMatrix; } + } + public Matrix TranslationDeltaMatrix { + get { return internaltranslationDelta; } + } + public bool IsBeingDragged { + get { return internaldragging; } + } + #endregion +} + + + + +/// +/// Handles our meshes +/// +public class GraphicsMesh : IDisposable { + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + + + + + /// + /// Constructor + /// + /// The initial filename + public GraphicsMesh(string filename) { + fileName = filename; + } + public GraphicsMesh() : this ("CD3DFile_Mesh") {} + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + string strPath = null; + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Find the path for the file, and convert it to ANSI (for the D3DX API) + strPath = DXUtil.FindMediaFile(null, filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(strPath, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + } + + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. Note: because we are passing in + // no flags, the default behavior is to clone into local memory. + localMemoryMesh = systemMemoryMesh.Clone(0, systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(Device device, bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render(Device device) { + Render(device, true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step01/dinput.cs b/Source Code updated 08-12-05/Spacewar3D/Step01/dinput.cs new file mode 100644 index 0000000..d2d2b5b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step01/dinput.cs @@ -0,0 +1,88 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + +/// +/// This class is where the DirectInput routines +/// for the application resides. +/// +public class InputClass { + + private const byte msgUp = 0; + private const byte msgDown = 1; + private const byte msgLeft = 2; + private const byte msgRight = 3; + private const byte msgCancelUp = 4; + private const byte msgCancelDown = 5; + private const byte msgCancelLeft = 6; + private const byte msgCancelRight = 7; + private bool pressedUp = false; + private bool pressedDown = false; + private bool pressedLeft = false; + private bool pressedRight = false; + + private Control owner = null; + private Device localDevice = null; + + public InputClass(Control owner) { + this.owner = owner; + + localDevice = new Device(SystemGuid.Keyboard); + localDevice.SetDataFormat(DeviceDataFormat.Keyboard); + localDevice.SetCooperativeLevel(owner, CooperativeLevelFlags.Foreground | CooperativeLevelFlags.NonExclusive); + } + + public Point GetInputState() { + KeyboardState state = null; + Point p = new Point(0); + + try { + state = localDevice.GetCurrentKeyboardState(); + } + catch(InputException) { + do { + Application.DoEvents(); + try{ localDevice.Acquire(); } + catch (InputLostException) { + continue; } + catch(OtherApplicationHasPriorityException) { + continue; } + + break; + + }while( true ); + } + + if(null == state) + return p; + + if(state[Key.Down]) { + pressedDown = true; + } + else if (pressedDown == true) { + pressedDown = false; + } + if(state[Key.Up]) { + pressedUp = true; + } + else if (pressedUp == true) { + pressedUp = false; + } + if(state[Key.Left]) { + pressedLeft = true; + } + else if (pressedLeft == true) { + pressedLeft = false; + } + if(state[Key.Right]) { + pressedRight = true; + } + else if (pressedRight == true) { + pressedRight = false; + } + + return p; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step01/main.cs b/Source Code updated 08-12-05/Spacewar3D/Step01/main.cs new file mode 100644 index 0000000..29258e9 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step01/main.cs @@ -0,0 +1,29 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Container = System.ComponentModel.Container; +/// +/// The main windows form for the application. +/// +public class MainClass{ + + private GraphicsClass graphics = null; + + /// + // Main entry point of the application. + /// + public static void Main() { + MainClass m = new MainClass(); + } + + public MainClass() { + try { + graphics = new GraphicsClass(); + } + catch(DirectXException) { + return; + } + if( graphics.CreateGraphicsSample() ) + graphics.Run(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/App.config b/Source Code updated 08-12-05/Spacewar3D/Step02/App.config new file mode 100644 index 0000000..5bbb96b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/D3DSettingsForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/D3DSettingsForm.cs new file mode 100644 index 0000000..889162a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/D3DSettingsForm.cs @@ -0,0 +1,1037 @@ +//----------------------------------------------------------------------------- +// File: D3DSettingsForm.cs +// +// Desc: Application form for setting up user defined display settings +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + + + + + +/// +/// A form to allow the user to change the current D3D settings. +/// +public class D3DSettingsForm : System.Windows.Forms.Form { + private D3DEnumeration enumeration; + public D3DSettings settings; // Potential new D3D settings + + private System.Windows.Forms.GroupBox adapterDeviceGroupBox; + private System.Windows.Forms.Label displayAdapterLabel; + private System.Windows.Forms.ComboBox adapterComboBox; + private System.Windows.Forms.Label deviceLabel; + private System.Windows.Forms.ComboBox deviceComboBox; + private System.Windows.Forms.GroupBox modeSettingsGroupBox; + private System.Windows.Forms.RadioButton windowedRadioButton; + private System.Windows.Forms.RadioButton fullscreenRadioButton; + private System.Windows.Forms.Label adapterFormatLabel; + private System.Windows.Forms.ComboBox adapterFormatComboBox; + private System.Windows.Forms.Label resolutionLabel; + private System.Windows.Forms.ComboBox resolutionComboBox; + private System.Windows.Forms.Label refreshRateLabel; + private System.Windows.Forms.ComboBox refreshRateComboBox; + private System.Windows.Forms.GroupBox otherSettingsGroupBox; + private System.Windows.Forms.Label backBufferFormatLabel; + private System.Windows.Forms.ComboBox backBufferFormatComboBox; + private System.Windows.Forms.Label depthStencilBufferLabel; + private System.Windows.Forms.ComboBox depthStencilBufferComboBox; + private System.Windows.Forms.Label multisampleLabel; + private System.Windows.Forms.ComboBox multisampleComboBox; + private System.Windows.Forms.Label vertexProcLabel; + private System.Windows.Forms.ComboBox vertexProcComboBox; + private System.Windows.Forms.Label presentIntervalLabel; + private System.Windows.Forms.ComboBox presentIntervalComboBox; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.ComboBox multisampleQualityComboBox; + private System.Windows.Forms.Label multisampleQualityLabel; + + + + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + + /// + /// Constructor. Pass in an enumeration and the current D3D settings. + /// + public D3DSettingsForm(D3DEnumeration enumerationParam, D3DSettings settingsParam) { + enumeration = enumerationParam; + settings = settingsParam.Clone(); + + // Required for Windows Form Designer support + InitializeComponent(); + + // Fill adapter combo box. Updating the selected adapter will trigger + // updates of the rest of the dialog. + foreach (GraphicsAdapterInfo adapterInfo in enumeration.AdapterInfoList) { + adapterComboBox.Items.Add(adapterInfo); + if (adapterInfo.AdapterOrdinal == settings.AdapterOrdinal) + adapterComboBox.SelectedItem = adapterInfo; + } + if (adapterComboBox.SelectedItem == null && adapterComboBox.Items.Count > 0) + adapterComboBox.SelectedIndex = 0; + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + if (components != null) + components.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.adapterDeviceGroupBox = new System.Windows.Forms.GroupBox(); + this.deviceComboBox = new System.Windows.Forms.ComboBox(); + this.deviceLabel = new System.Windows.Forms.Label(); + this.adapterComboBox = new System.Windows.Forms.ComboBox(); + this.displayAdapterLabel = new System.Windows.Forms.Label(); + this.fullscreenRadioButton = new System.Windows.Forms.RadioButton(); + this.cancelButton = new System.Windows.Forms.Button(); + this.otherSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.multisampleQualityComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleQualityLabel = new System.Windows.Forms.Label(); + this.multisampleComboBox = new System.Windows.Forms.ComboBox(); + this.backBufferFormatComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferLabel = new System.Windows.Forms.Label(); + this.backBufferFormatLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcLabel = new System.Windows.Forms.Label(); + this.presentIntervalComboBox = new System.Windows.Forms.ComboBox(); + this.presentIntervalLabel = new System.Windows.Forms.Label(); + this.resolutionComboBox = new System.Windows.Forms.ComboBox(); + this.windowedRadioButton = new System.Windows.Forms.RadioButton(); + this.resolutionLabel = new System.Windows.Forms.Label(); + this.refreshRateComboBox = new System.Windows.Forms.ComboBox(); + this.adapterFormatLabel = new System.Windows.Forms.Label(); + this.refreshRateLabel = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.modeSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.adapterFormatComboBox = new System.Windows.Forms.ComboBox(); + this.adapterDeviceGroupBox.SuspendLayout(); + this.otherSettingsGroupBox.SuspendLayout(); + this.modeSettingsGroupBox.SuspendLayout(); + this.SuspendLayout(); + // + // adapterDeviceGroupBox + // + this.adapterDeviceGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.deviceComboBox, + this.deviceLabel, + this.adapterComboBox, + this.displayAdapterLabel}); + this.adapterDeviceGroupBox.Location = new System.Drawing.Point(16, 8); + this.adapterDeviceGroupBox.Name = "adapterDeviceGroupBox"; + this.adapterDeviceGroupBox.Size = new System.Drawing.Size(400, 80); + this.adapterDeviceGroupBox.TabIndex = 0; + this.adapterDeviceGroupBox.TabStop = false; + this.adapterDeviceGroupBox.Text = "Adapter and device"; + // + // deviceComboBox + // + this.deviceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.deviceComboBox.DropDownWidth = 121; + this.deviceComboBox.Location = new System.Drawing.Point(160, 48); + this.deviceComboBox.Name = "deviceComboBox"; + this.deviceComboBox.Size = new System.Drawing.Size(232, 21); + this.deviceComboBox.TabIndex = 3; + this.deviceComboBox.SelectedIndexChanged += new System.EventHandler(this.DeviceChanged); + // + // deviceLabel + // + this.deviceLabel.Location = new System.Drawing.Point(8, 48); + this.deviceLabel.Name = "deviceLabel"; + this.deviceLabel.Size = new System.Drawing.Size(152, 23); + this.deviceLabel.TabIndex = 2; + this.deviceLabel.Text = "Render &Device:"; + // + // adapterComboBox + // + this.adapterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterComboBox.DropDownWidth = 121; + this.adapterComboBox.Location = new System.Drawing.Point(160, 24); + this.adapterComboBox.Name = "adapterComboBox"; + this.adapterComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterComboBox.TabIndex = 1; + this.adapterComboBox.SelectedIndexChanged += new System.EventHandler(this.AdapterChanged); + // + // displayAdapterLabel + // + this.displayAdapterLabel.Location = new System.Drawing.Point(8, 24); + this.displayAdapterLabel.Name = "displayAdapterLabel"; + this.displayAdapterLabel.Size = new System.Drawing.Size(152, 23); + this.displayAdapterLabel.TabIndex = 0; + this.displayAdapterLabel.Text = "Display &Adapter:"; + // + // fullscreenRadioButton + // + this.fullscreenRadioButton.Location = new System.Drawing.Point(9, 38); + this.fullscreenRadioButton.Name = "fullscreenRadioButton"; + this.fullscreenRadioButton.Size = new System.Drawing.Size(152, 24); + this.fullscreenRadioButton.TabIndex = 1; + this.fullscreenRadioButton.Text = "&Fullscreen"; + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(248, 464); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.TabIndex = 4; + this.cancelButton.Text = "Cancel"; + // + // otherSettingsGroupBox + // + this.otherSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.multisampleQualityComboBox, + this.multisampleQualityLabel, + this.multisampleComboBox, + this.backBufferFormatComboBox, + this.multisampleLabel, + this.depthStencilBufferLabel, + this.backBufferFormatLabel, + this.depthStencilBufferComboBox, + this.vertexProcComboBox, + this.vertexProcLabel, + this.presentIntervalComboBox, + this.presentIntervalLabel}); + this.otherSettingsGroupBox.Location = new System.Drawing.Point(16, 264); + this.otherSettingsGroupBox.Name = "otherSettingsGroupBox"; + this.otherSettingsGroupBox.Size = new System.Drawing.Size(400, 176); + this.otherSettingsGroupBox.TabIndex = 2; + this.otherSettingsGroupBox.TabStop = false; + this.otherSettingsGroupBox.Text = "Device settings"; + // + // multisampleQualityComboBox + // + this.multisampleQualityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleQualityComboBox.DropDownWidth = 144; + this.multisampleQualityComboBox.Location = new System.Drawing.Point(160, 96); + this.multisampleQualityComboBox.Name = "multisampleQualityComboBox"; + this.multisampleQualityComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleQualityComboBox.TabIndex = 7; + this.multisampleQualityComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleQualityChanged); + // + // multisampleQualityLabel + // + this.multisampleQualityLabel.Location = new System.Drawing.Point(8, 96); + this.multisampleQualityLabel.Name = "multisampleQualityLabel"; + this.multisampleQualityLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleQualityLabel.TabIndex = 6; + this.multisampleQualityLabel.Text = "Multisample &Quality:"; + // + // multisampleComboBox + // + this.multisampleComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleComboBox.DropDownWidth = 144; + this.multisampleComboBox.Location = new System.Drawing.Point(160, 72); + this.multisampleComboBox.Name = "multisampleComboBox"; + this.multisampleComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleComboBox.TabIndex = 5; + this.multisampleComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleTypeChanged); + // + // backBufferFormatComboBox + // + this.backBufferFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.backBufferFormatComboBox.DropDownWidth = 144; + this.backBufferFormatComboBox.Location = new System.Drawing.Point(160, 24); + this.backBufferFormatComboBox.Name = "backBufferFormatComboBox"; + this.backBufferFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.backBufferFormatComboBox.TabIndex = 1; + this.backBufferFormatComboBox.SelectedIndexChanged += new System.EventHandler(this.BackBufferFormatChanged); + // + // multisampleLabel + // + this.multisampleLabel.Location = new System.Drawing.Point(8, 72); + this.multisampleLabel.Name = "multisampleLabel"; + this.multisampleLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleLabel.TabIndex = 4; + this.multisampleLabel.Text = "&Multisample Type:"; + // + // depthStencilBufferLabel + // + this.depthStencilBufferLabel.Location = new System.Drawing.Point(8, 48); + this.depthStencilBufferLabel.Name = "depthStencilBufferLabel"; + this.depthStencilBufferLabel.Size = new System.Drawing.Size(152, 23); + this.depthStencilBufferLabel.TabIndex = 2; + this.depthStencilBufferLabel.Text = "De&pth/Stencil Buffer Format:"; + // + // backBufferFormatLabel + // + this.backBufferFormatLabel.Location = new System.Drawing.Point(8, 24); + this.backBufferFormatLabel.Name = "backBufferFormatLabel"; + this.backBufferFormatLabel.Size = new System.Drawing.Size(152, 23); + this.backBufferFormatLabel.TabIndex = 0; + this.backBufferFormatLabel.Text = "&Back Buffer Format:"; + // + // depthStencilBufferComboBox + // + this.depthStencilBufferComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.depthStencilBufferComboBox.DropDownWidth = 144; + this.depthStencilBufferComboBox.Location = new System.Drawing.Point(160, 48); + this.depthStencilBufferComboBox.Name = "depthStencilBufferComboBox"; + this.depthStencilBufferComboBox.Size = new System.Drawing.Size(232, 21); + this.depthStencilBufferComboBox.TabIndex = 3; + this.depthStencilBufferComboBox.SelectedIndexChanged += new System.EventHandler(this.DepthStencilBufferFormatChanged); + // + // vertexProcComboBox + // + this.vertexProcComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.vertexProcComboBox.DropDownWidth = 121; + this.vertexProcComboBox.Location = new System.Drawing.Point(160, 120); + this.vertexProcComboBox.Name = "vertexProcComboBox"; + this.vertexProcComboBox.Size = new System.Drawing.Size(232, 21); + this.vertexProcComboBox.TabIndex = 9; + this.vertexProcComboBox.SelectedIndexChanged += new System.EventHandler(this.VertexProcessingChanged); + // + // vertexProcLabel + // + this.vertexProcLabel.Location = new System.Drawing.Point(8, 120); + this.vertexProcLabel.Name = "vertexProcLabel"; + this.vertexProcLabel.Size = new System.Drawing.Size(152, 23); + this.vertexProcLabel.TabIndex = 8; + this.vertexProcLabel.Text = "&Vertex Processing:"; + // + // presentIntervalComboBox + // + this.presentIntervalComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.presentIntervalComboBox.DropDownWidth = 121; + this.presentIntervalComboBox.Location = new System.Drawing.Point(160, 144); + this.presentIntervalComboBox.Name = "presentIntervalComboBox"; + this.presentIntervalComboBox.Size = new System.Drawing.Size(232, 21); + this.presentIntervalComboBox.TabIndex = 11; + this.presentIntervalComboBox.SelectedValueChanged += new System.EventHandler(this.PresentIntervalChanged); + // + // presentIntervalLabel + // + this.presentIntervalLabel.Location = new System.Drawing.Point(8, 144); + this.presentIntervalLabel.Name = "presentIntervalLabel"; + this.presentIntervalLabel.Size = new System.Drawing.Size(152, 23); + this.presentIntervalLabel.TabIndex = 10; + this.presentIntervalLabel.Text = "Present &Interval:"; + // + // resolutionComboBox + // + this.resolutionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.resolutionComboBox.DropDownWidth = 144; + this.resolutionComboBox.Location = new System.Drawing.Point(161, 94); + this.resolutionComboBox.MaxDropDownItems = 14; + this.resolutionComboBox.Name = "resolutionComboBox"; + this.resolutionComboBox.Size = new System.Drawing.Size(232, 21); + this.resolutionComboBox.TabIndex = 5; + this.resolutionComboBox.SelectedIndexChanged += new System.EventHandler(this.ResolutionChanged); + // + // windowedRadioButton + // + this.windowedRadioButton.Location = new System.Drawing.Point(9, 14); + this.windowedRadioButton.Name = "windowedRadioButton"; + this.windowedRadioButton.Size = new System.Drawing.Size(152, 24); + this.windowedRadioButton.TabIndex = 0; + this.windowedRadioButton.Text = "&Windowed"; + this.windowedRadioButton.CheckedChanged += new System.EventHandler(this.WindowedFullscreenChanged); + // + // resolutionLabel + // + this.resolutionLabel.Location = new System.Drawing.Point(8, 94); + this.resolutionLabel.Name = "resolutionLabel"; + this.resolutionLabel.Size = new System.Drawing.Size(152, 23); + this.resolutionLabel.TabIndex = 4; + this.resolutionLabel.Text = "&Resolution:"; + // + // refreshRateComboBox + // + this.refreshRateComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.refreshRateComboBox.DropDownWidth = 144; + this.refreshRateComboBox.Location = new System.Drawing.Point(161, 118); + this.refreshRateComboBox.MaxDropDownItems = 14; + this.refreshRateComboBox.Name = "refreshRateComboBox"; + this.refreshRateComboBox.Size = new System.Drawing.Size(232, 21); + this.refreshRateComboBox.TabIndex = 7; + this.refreshRateComboBox.SelectedIndexChanged += new System.EventHandler(this.RefreshRateChanged); + // + // adapterFormatLabel + // + this.adapterFormatLabel.Location = new System.Drawing.Point(8, 72); + this.adapterFormatLabel.Name = "adapterFormatLabel"; + this.adapterFormatLabel.Size = new System.Drawing.Size(152, 23); + this.adapterFormatLabel.TabIndex = 2; + this.adapterFormatLabel.Text = "Adapter F&ormat:"; + // + // refreshRateLabel + // + this.refreshRateLabel.Location = new System.Drawing.Point(8, 118); + this.refreshRateLabel.Name = "refreshRateLabel"; + this.refreshRateLabel.Size = new System.Drawing.Size(152, 23); + this.refreshRateLabel.TabIndex = 6; + this.refreshRateLabel.Text = "R&efresh Rate:"; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(112, 464); + this.okButton.Name = "okButton"; + this.okButton.TabIndex = 3; + this.okButton.Text = "OK"; + // + // modeSettingsGroupBox + // + this.modeSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.adapterFormatLabel, + this.refreshRateLabel, + this.resolutionComboBox, + this.adapterFormatComboBox, + this.resolutionLabel, + this.refreshRateComboBox, + this.windowedRadioButton, + this.fullscreenRadioButton}); + this.modeSettingsGroupBox.Location = new System.Drawing.Point(16, 96); + this.modeSettingsGroupBox.Name = "modeSettingsGroupBox"; + this.modeSettingsGroupBox.Size = new System.Drawing.Size(400, 160); + this.modeSettingsGroupBox.TabIndex = 1; + this.modeSettingsGroupBox.TabStop = false; + this.modeSettingsGroupBox.Text = "Display mode settings"; + // + // adapterFormatComboBox + // + this.adapterFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterFormatComboBox.DropDownWidth = 121; + this.adapterFormatComboBox.Location = new System.Drawing.Point(161, 70); + this.adapterFormatComboBox.MaxDropDownItems = 14; + this.adapterFormatComboBox.Name = "adapterFormatComboBox"; + this.adapterFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterFormatComboBox.TabIndex = 3; + this.adapterFormatComboBox.SelectedValueChanged += new System.EventHandler(this.AdapterFormatChanged); + // + // D3DSettingsForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(438, 512); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.cancelButton, + this.okButton, + this.adapterDeviceGroupBox, + this.modeSettingsGroupBox, + this.otherSettingsGroupBox}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.Name = "D3DSettingsForm"; + this.Text = "Direct3D Settings"; + this.adapterDeviceGroupBox.ResumeLayout(false); + this.otherSettingsGroupBox.ResumeLayout(false); + this.modeSettingsGroupBox.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// Respond to a change of selected adapter by rebuilding the device + /// list. Updating the selected device will trigger updates of the + /// rest of the dialog. + /// + private void AdapterChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + settings.AdapterInfo = adapterInfo; + + // Update device combo box + deviceComboBox.Items.Clear(); + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + deviceComboBox.Items.Add(deviceInfo); + if (deviceInfo.DevType == settings.DevType) + deviceComboBox.SelectedItem = deviceInfo; + } + if (deviceComboBox.SelectedItem == null && deviceComboBox.Items.Count > 0) + deviceComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected device by resetting the + /// fullscreen/windowed radio buttons. Updating these buttons + /// will trigger updates of the rest of the dialog. + /// + private void DeviceChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + settings.DeviceInfo = deviceInfo; + + // Update fullscreen/windowed radio buttons + bool HasWindowedDeviceCombo = false; + bool HasFullscreenDeviceCombo = false; + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + HasWindowedDeviceCombo = true; + else + HasFullscreenDeviceCombo = true; + } + windowedRadioButton.Enabled = HasWindowedDeviceCombo; + fullscreenRadioButton.Enabled = HasFullscreenDeviceCombo; + if (settings.IsWindowed && HasWindowedDeviceCombo) { + windowedRadioButton.Checked = true; + } + else { + fullscreenRadioButton.Checked = true; + } + WindowedFullscreenChanged(null, null); + } + + + + + /// + /// Respond to a change of windowed/fullscreen state by rebuilding the + /// adapter format list, resolution list, and refresh rate list. + /// Updating the selected adapter format will trigger updates of the + /// rest of the dialog. + /// + private void WindowedFullscreenChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + if (windowedRadioButton.Checked) { + settings.IsWindowed = true; + settings.WindowedAdapterInfo = adapterInfo; + settings.WindowedDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + adapterFormatComboBox.Items.Add(settings.WindowedDisplayMode.Format); + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = false; + + // Update resolution combo box + resolutionComboBox.Items.Clear(); + resolutionComboBox.Items.Add(FormatResolution(settings.WindowedDisplayMode.Width, + settings.WindowedDisplayMode.Height)); + resolutionComboBox.SelectedIndex = 0; + resolutionComboBox.Enabled = false; + + // Update refresh rate combo box + refreshRateComboBox.Items.Clear(); + refreshRateComboBox.Items.Add(FormatRefreshRate(settings.WindowedDisplayMode.RefreshRate)); + refreshRateComboBox.SelectedIndex = 0; + refreshRateComboBox.Enabled = false; + } + else { + settings.IsWindowed = false; + settings.FullscreenAdapterInfo = adapterInfo; + settings.FullscreenDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + continue; + if (!adapterFormatComboBox.Items.Contains(deviceCombo.AdapterFormat)) { + adapterFormatComboBox.Items.Add(deviceCombo.AdapterFormat); + if (deviceCombo.AdapterFormat == (settings.IsWindowed ? + settings.WindowedDisplayMode.Format : settings.FullscreenDisplayMode.Format)) { + adapterFormatComboBox.SelectedItem = deviceCombo.AdapterFormat; + } + } + } + if (adapterFormatComboBox.SelectedItem == null && adapterFormatComboBox.Items.Count > 0) + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = true; + + // Update resolution combo box + resolutionComboBox.Enabled = true; + + // Update refresh rate combo box + refreshRateComboBox.Enabled = true; + } + } + + + + + /// + /// Converts the given width and height into a formatted string + /// + private string FormatResolution(int width, int height) { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} by {1}", width, height); + return sb.ToString(); + } + + + + + /// + /// Converts the given refresh rate into a formatted string + /// + private string FormatRefreshRate(int refreshRate) { + if (refreshRate == 0) { + return "Default Rate"; + } + else { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} Hz", refreshRate); + return sb.ToString(); + } + } + + + + + /// + /// Respond to a change of selected adapter format by rebuilding the + /// resolution list and back buffer format list. Updating the selected + /// resolution and back buffer format will trigger updates of the rest + /// of the dialog. + /// + private void AdapterFormatChanged(object sender, System.EventArgs e) { + if (!windowedRadioButton.Checked) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + settings.FullscreenDisplayMode.Format = adapterFormat; + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + + resolutionComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat) { + string resolutionString = FormatResolution(displayMode.Width, displayMode.Height); + if (!resolutionComboBox.Items.Contains(resolutionString)) { + resolutionComboBox.Items.Add(resolutionString); + if (settings.FullscreenDisplayMode.Width == displayMode.Width && + settings.FullscreenDisplayMode.Height == displayMode.Height) { + resolutionComboBox.SelectedItem = resolutionString; + } + } + } + } + if (resolutionComboBox.SelectedItem == null && resolutionComboBox.Items.Count > 0) + resolutionComboBox.SelectedIndex = 0; + } + + // Update backbuffer format combo box + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + backBufferFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == settings.DisplayMode.Format) { + if (!backBufferFormatComboBox.Items.Contains(deviceCombo.BackBufferFormat)) { + backBufferFormatComboBox.Items.Add(deviceCombo.BackBufferFormat); + if (deviceCombo.BackBufferFormat == settings.BackBufferFormat) + backBufferFormatComboBox.SelectedItem = deviceCombo.BackBufferFormat; + } + } + } + if (backBufferFormatComboBox.SelectedItem == null && backBufferFormatComboBox.Items.Count > 0) + backBufferFormatComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected resolution by rebuilding the + /// refresh rate list. + /// + private void ResolutionChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + + // Update settings with new resolution + string resolution = (string)resolutionComboBox.SelectedItem; + string[] resolutionSplitStringArray = resolution.Split(); + int width = int.Parse(resolutionSplitStringArray[0]); + int height = int.Parse(resolutionSplitStringArray[2]); + settings.FullscreenDisplayMode.Width = width; + settings.FullscreenDisplayMode.Height = height; + + // Update refresh rate list based on new resolution + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + refreshRateComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat && + displayMode.Width == width && + displayMode.Height == height) { + string refreshRateString = FormatRefreshRate(displayMode.RefreshRate); + if (!refreshRateComboBox.Items.Contains(refreshRateString)) { + refreshRateComboBox.Items.Add(refreshRateString); + if (settings.FullscreenDisplayMode.RefreshRate == displayMode.RefreshRate) + refreshRateComboBox.SelectedItem = refreshRateString; + } + } + } + if (refreshRateComboBox.SelectedItem == null && refreshRateComboBox.Items.Count > 0) + refreshRateComboBox.SelectedIndex = refreshRateComboBox.Items.Count - 1; + } + + + + + /// + /// Respond to a change of selected refresh rate. + /// + private void RefreshRateChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + // Update settings with new refresh rate + string refreshRateString = (string)refreshRateComboBox.SelectedItem; + int refreshRate = 0; + if (refreshRateString != "Default Rate") { + string[] refreshRateSplitStringArray = refreshRateString.Split(); + refreshRate = int.Parse(refreshRateSplitStringArray[0]); + } + settings.FullscreenDisplayMode.RefreshRate = refreshRate; + } + + + + + /// + /// Respond to a change of selected back buffer format by rebuilding + /// the depth/stencil format list, multisample type list, and vertex + /// processing type list. + /// + private void BackBufferFormatChanged(object sender, System.EventArgs e) { + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + Format backBufferFormat = (Format)backBufferFormatComboBox.SelectedItem; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == adapterFormat && + deviceCombo.BackBufferFormat == backBufferFormat) { + deviceCombo.BackBufferFormat = backBufferFormat; + settings.DeviceCombo = deviceCombo; + + depthStencilBufferComboBox.Items.Clear(); + if (enumeration.AppUsesDepthBuffer) { + foreach (DepthFormat format in deviceCombo.DepthStencilFormatList) { + depthStencilBufferComboBox.Items.Add(format); + if (format == settings.DepthStencilBufferFormat) + depthStencilBufferComboBox.SelectedItem = format; + } + if (depthStencilBufferComboBox.SelectedItem == null && depthStencilBufferComboBox.Items.Count > 0) + depthStencilBufferComboBox.SelectedIndex = 0; + } + else { + depthStencilBufferComboBox.Enabled = false; + depthStencilBufferComboBox.Items.Add("(not used)"); + depthStencilBufferComboBox.SelectedIndex = 0; + } + + vertexProcComboBox.Items.Clear(); + foreach (VertexProcessingType vpt in deviceCombo.VertexProcessingTypeList) { + vertexProcComboBox.Items.Add(vpt); + if (vpt == settings.VertexProcessingType) + vertexProcComboBox.SelectedItem = vpt; + } + if (vertexProcComboBox.SelectedItem == null && vertexProcComboBox.Items.Count > 0) + vertexProcComboBox.SelectedIndex = 0; + + presentIntervalComboBox.Items.Clear(); + foreach (PresentInterval pi in deviceCombo.PresentIntervalList) { + presentIntervalComboBox.Items.Add(pi); + if (pi == settings.PresentInterval) + presentIntervalComboBox.SelectedItem = pi; + } + if (presentIntervalComboBox.SelectedItem == null && presentIntervalComboBox.Items.Count > 0) + presentIntervalComboBox.SelectedIndex = 0; + + break; + } + } + } + + + + + /// + /// Respond to a change of selected depth/stencil buffer format. + /// + private void DepthStencilBufferFormatChanged(object sender, System.EventArgs e) { + if (enumeration.AppUsesDepthBuffer) + settings.DepthStencilBufferFormat = (DepthFormat)depthStencilBufferComboBox.SelectedItem; + + multisampleComboBox.Items.Clear(); + foreach (MultiSampleType msType in settings.DeviceCombo.MultiSampleTypeList) { + // Check for DS/MS conflict + bool conflictFound = false; + foreach (DepthStencilMultiSampleConflict DSMSConflict in settings.DeviceCombo.DepthStencilMultiSampleConflictList) { + if (DSMSConflict.DepthStencilFormat == settings.DepthStencilBufferFormat && + DSMSConflict.MultiSampleType == msType) { + conflictFound = true; + break; + } + } + if (!conflictFound) { + multisampleComboBox.Items.Add(msType); + if (msType == settings.MultisampleType) + multisampleComboBox.SelectedItem = msType; + } + } + if (multisampleComboBox.SelectedItem == null && multisampleComboBox.Items.Count > 0) + multisampleComboBox.SelectedIndex = 0; + + } + + + + + /// + /// Respond to a change of selected multisample type. + /// + private void MultisampleTypeChanged(object sender, System.EventArgs e) { + settings.MultisampleType = (MultiSampleType)multisampleComboBox.SelectedItem; + + // Find current max multisample quality + int maxQuality = 0; + DeviceCombo deviceCombo = settings.DeviceCombo; + for (int i = 0; i < deviceCombo.MultiSampleQualityList.Count; i++) { + if ((MultiSampleType)deviceCombo.MultiSampleTypeList[i] == settings.MultisampleType) { + maxQuality = (int)deviceCombo.MultiSampleQualityList[i]; + break; + } + } + + // Update multisample quality list based on new type + multisampleQualityComboBox.Items.Clear(); + for (int iLevel = 0; iLevel < maxQuality; iLevel++) { + multisampleQualityComboBox.Items.Add(iLevel); + if (settings.MultisampleQuality == iLevel) + multisampleQualityComboBox.SelectedItem = iLevel; + } + if (multisampleQualityComboBox.SelectedItem == null && multisampleQualityComboBox.Items.Count > 0) + multisampleQualityComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected multisample quality. + /// + private void MultisampleQualityChanged(object sender, System.EventArgs e) { + settings.MultisampleQuality = (int)multisampleQualityComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void VertexProcessingChanged(object sender, System.EventArgs e) { + settings.VertexProcessingType = (VertexProcessingType)vertexProcComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void PresentIntervalChanged(object sender, System.EventArgs e) { + settings.PresentInterval = (PresentInterval)presentIntervalComboBox.SelectedItem; + } +} + + +/// +/// Current D3D settings: adapter, device, mode, formats, etc. +/// +public class D3DSettings { + public bool IsWindowed; + + public GraphicsAdapterInfo WindowedAdapterInfo; + public GraphicsDeviceInfo WindowedDeviceInfo; + public DeviceCombo WindowedDeviceCombo; + public DisplayMode WindowedDisplayMode; // not changable by the user + public DepthFormat WindowedDepthStencilBufferFormat; + public MultiSampleType WindowedMultisampleType; + public int WindowedMultisampleQuality; + public VertexProcessingType WindowedVertexProcessingType; + public PresentInterval WindowedPresentInterval; + public int WindowedWidth; + public int WindowedHeight; + + public GraphicsAdapterInfo FullscreenAdapterInfo; + public GraphicsDeviceInfo FullscreenDeviceInfo; + public DeviceCombo FullscreenDeviceCombo; + public DisplayMode FullscreenDisplayMode; // changable by the user + public DepthFormat FullscreenDepthStencilBufferFormat; + public MultiSampleType FullscreenMultisampleType; + public int FullscreenMultisampleQuality; + public VertexProcessingType FullscreenVertexProcessingType; + public PresentInterval FullscreenPresentInterval; + + + + + /// + /// The adapter information + /// + public GraphicsAdapterInfo AdapterInfo { + get { return IsWindowed ? WindowedAdapterInfo : FullscreenAdapterInfo; } + set { if (IsWindowed) WindowedAdapterInfo = value; else FullscreenAdapterInfo = value; } + } + + + + + /// + /// The device information + /// + public GraphicsDeviceInfo DeviceInfo { + get { return IsWindowed ? WindowedDeviceInfo : FullscreenDeviceInfo; } + set { if (IsWindowed) WindowedDeviceInfo = value; else FullscreenDeviceInfo = value; } + } + + + + + /// + /// The device combo + /// + public DeviceCombo DeviceCombo { + get { return IsWindowed ? WindowedDeviceCombo : FullscreenDeviceCombo; } + set { if (IsWindowed) WindowedDeviceCombo = value; else FullscreenDeviceCombo = value; } + } + + + + + /// + /// The adapters ordinal + /// + public int AdapterOrdinal { + get { return DeviceCombo.AdapterOrdinal; } + } + + + + + /// + /// The type of device this is + /// + public DeviceType DevType { + get { return DeviceCombo.DevType; } + } + + + + + /// + /// The back buffers format + /// + public Format BackBufferFormat { + get { return DeviceCombo.BackBufferFormat; } + } + + + + + /// + /// The display mode + /// + public DisplayMode DisplayMode { + get { return IsWindowed ? WindowedDisplayMode : FullscreenDisplayMode; } + set { if (IsWindowed) WindowedDisplayMode = value; else FullscreenDisplayMode = value; } + } + + + + + /// + /// The Depth stencils format + /// + public DepthFormat DepthStencilBufferFormat { + get { return IsWindowed ? WindowedDepthStencilBufferFormat : FullscreenDepthStencilBufferFormat; } + set { if (IsWindowed) WindowedDepthStencilBufferFormat = value; else FullscreenDepthStencilBufferFormat = value; } + } + + + + + /// + /// The multisample type + /// + public MultiSampleType MultisampleType { + get { return IsWindowed ? WindowedMultisampleType : FullscreenMultisampleType; } + set { if (IsWindowed) WindowedMultisampleType = value; else FullscreenMultisampleType = value; } + } + + + + + /// + /// The multisample quality + /// + public int MultisampleQuality { + get { return IsWindowed ? WindowedMultisampleQuality : FullscreenMultisampleQuality; } + set { if (IsWindowed) WindowedMultisampleQuality = value; else FullscreenMultisampleQuality = value; } + } + + + + + /// + /// The vertex processing type + /// + public VertexProcessingType VertexProcessingType { + get { return IsWindowed ? WindowedVertexProcessingType : FullscreenVertexProcessingType; } + set { if (IsWindowed) WindowedVertexProcessingType = value; else FullscreenVertexProcessingType = value; } + } + + + + + /// + /// The presentation interval + /// + public PresentInterval PresentInterval { + get { return IsWindowed ? WindowedPresentInterval : FullscreenPresentInterval; } + set { if (IsWindowed) WindowedPresentInterval = value; else FullscreenPresentInterval = value; } + } + + + + + /// + /// Clone the d3d settings class + /// + public D3DSettings Clone() { + return (D3DSettings)MemberwiseClone(); + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/D3DSettingsForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step02/D3DSettingsForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/D3DSettingsForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect.cs new file mode 100644 index 0000000..e0e11ae --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect.cs @@ -0,0 +1,254 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; +using System.Runtime.InteropServices; + + + + +/// +/// The connection wizard will allow our users to pick a service provider, +/// and then connect to an existing application, or create a new one as the host. +/// +public class ConnectWizard { + private Peer peerObject; + private Address deviceAddress; + + private ChooseServiceProviderForm serviceProviderForm; + private CreateJoinForm createJoinForm; + + private Guid serviceProviderGuid; + private string username; + private string samplename; + private bool isInSession = false; + private bool isHost = false; + private int port = 0; + + private Guid applicationGuid; + + + + + /// + /// Constructor + /// + /// + /// + /// + public ConnectWizard(Peer peer, Guid application, string sampleName) { + peerObject = peer; + applicationGuid = application; + samplename = sampleName; + } + + + + + /// + /// The guid for the current service provider + /// + public Guid ServiceProvider { + get { + return serviceProviderGuid; } + set { + serviceProviderGuid = value; } + } + + + + + /// + /// The game's default port number + /// + public int DefaultPort { + get { + return port; } + set { + port = value; } + } + + + + + /// + /// Am I the host + /// + public bool IsHost { + get { + return isHost; } + set { + isHost = value; } + } + + + + + /// + /// The username + /// + public string Username { + get { + return username; } + set { + username = value; } + } + + + + + /// + /// The sample name + /// + public string SampleName { + get { + return samplename; } + } + + + + + /// + /// The applications guid + /// + public Guid ApplicationGuid { + get { + return applicationGuid; } + } + + + + + /// + /// Are we in a session + /// + public bool InSession { + get { return isInSession; } + set { isInSession = value; } + } + + + + + /// + /// Returns true if the given provider requires a port component + /// + /// ServiceProvider Guid + /// + static public bool ProviderRequiresPort(Guid provider) { + return (provider != Address.ServiceProviderSerial && + provider != Address.ServiceProviderModem && + provider != Address.ServiceProviderBlueTooth); + } + + + + + /// + /// Handler for when our form is disposed + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createJoinForm) + createJoinForm = null; + + if (sender == serviceProviderForm) + serviceProviderForm = null; + } + + + + + /// + /// Set the user information + /// + public void SetUserInfo() { + //Before we call host, let's actually call SetPeerInformation + PlayerInformation myinformation = new PlayerInformation(); + myinformation.Name = username; + + peerObject.SetPeerInformation(myinformation, SyncFlags.PeerInformation); + } + + + + + /// + /// Show the service providers form + /// + /// True if a service provider was picked, false otherwise + public bool DoShowServiceProviders() { + if (serviceProviderForm == null) { + username = null; + serviceProviderForm = new ChooseServiceProviderForm(peerObject,this); + serviceProviderForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (serviceProviderForm.ShowDialog() == DialogResult.OK) + return true; + + // The didn't hit ok + return false; + } + + + + + /// + /// Show the create or join screen + /// + /// True if we will be in a session, false otherwise + public bool DoCreateJoinGame() { + if (deviceAddress != null) + deviceAddress.Dispose(); + + deviceAddress = new Address(); + + if (createJoinForm != null) + createJoinForm.Dispose(); + + createJoinForm = new CreateJoinForm(peerObject, deviceAddress, this); + createJoinForm.Disposed += new System.EventHandler(this.FormDisposed); + + //Set the address's service provider (this will be the device address) + deviceAddress.ServiceProvider = serviceProviderGuid; + DialogResult drCreateJoin = createJoinForm.ShowDialog(); + if (drCreateJoin == DialogResult.Cancel) + return false; + + this.isHost = (drCreateJoin == DialogResult.Yes); + return true; + + } + + + + + /// + /// Start the wizard + /// + /// True if we are in a session, false otherwise + public bool StartWizard() { + isInSession = false; + + while (this.DoShowServiceProviders()) { + //Now let's create a game or join a session + if (this.DoCreateJoinGame()) { + // A game has been created or joined now, set our flag + isInSession = true; + break; + } + } + return isInSession; + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_AddressForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_AddressForm.cs new file mode 100644 index 0000000..181fc48 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_AddressForm.cs @@ -0,0 +1,207 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_AddressForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// Summary description for AddressForm. +/// +public class AddressForm : System.Windows.Forms.Form { + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox hostnameTextBox; + private System.Windows.Forms.TextBox portTextBox; + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + /// + /// Constructor + /// + public AddressForm( int defaultPort ) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // Set default port value + Port = defaultPort; + } + + + + + /// + /// The remote port on which to connect + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(portTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + portTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Remote hostname + /// + public string Hostname { + get { + return hostnameTextBox.Text; } + set { + hostnameTextBox.Text = value; } + } + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.label1 = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.hostnameTextBox = new System.Windows.Forms.TextBox(); + this.portTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(248, 48); + this.label1.TabIndex = 0; + this.label1.Text = "Please enter the optional components of the remote session address. If set blank," + + " DirectPlay will attempt to search the local network."; + // + // okButton + // + this.okButton.Location = new System.Drawing.Point(104, 144); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(72, 24); + this.okButton.TabIndex = 1; + this.okButton.Text = "&OK"; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(184, 144); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(72, 24); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "&Cancel"; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(32, 80); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(100, 16); + this.label2.TabIndex = 3; + this.label2.Text = "Hostname"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(160, 80); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 16); + this.label3.TabIndex = 4; + this.label3.Text = "Port"; + // + // hostnameTextBox + // + this.hostnameTextBox.Location = new System.Drawing.Point(32, 96); + this.hostnameTextBox.Name = "hostnameTextBox"; + this.hostnameTextBox.Size = new System.Drawing.Size(120, 20); + this.hostnameTextBox.TabIndex = 5; + this.hostnameTextBox.Text = ""; + // + // portTextBox + // + this.portTextBox.Location = new System.Drawing.Point(160, 96); + this.portTextBox.Name = "portTextBox"; + this.portTextBox.Size = new System.Drawing.Size(56, 20); + this.portTextBox.TabIndex = 6; + this.portTextBox.Text = ""; + // + // AddressForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(264, 176); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.portTextBox, + this.hostnameTextBox, + this.label3, + this.label2, + this.cancelButton, + this.okButton, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AddressForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Remote Address"; + this.ResumeLayout(false); + + } + #endregion + + private void okButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.OK; + } + + private void cancelButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.Cancel; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_AddressForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_AddressForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_AddressForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_CreateForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_CreateForm.cs new file mode 100644 index 0000000..c321e80 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_CreateForm.cs @@ -0,0 +1,346 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_CreateForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will allow you to create a new session, and set certain properties +/// of the session. +/// +public class CreateSessionForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.TextBox txtSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton notSignedRadio; + private System.Windows.Forms.RadioButton fullSignedRadio; + private System.Windows.Forms.RadioButton fastSignedRadio; + private System.Windows.Forms.CheckBox migrateHostCheckBox; + private System.Windows.Forms.CheckBox useDPNSVRCheckBox; + private System.Windows.Forms.TextBox localPortTextBox; + private System.Windows.Forms.Label localPortLabel; + private System.Windows.Forms.Button btnCancel; + + + + /// + /// Constructor + /// + public CreateSessionForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + peer = peerObject; + this.connectionWizard = connectionWizard; + deviceAddress = addressObject; + txtSession.Text = null; + this.Text = connectionWizard.SampleName + " - " + this.Text; + //Get the default session from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + // Get session name + txtSession.Text = (string)regKey.GetValue("DirectPlaySessionName", null); + + // Get host migration option + if (regKey.GetValue("DirectPlayMigrateHost",null) != null) { + migrateHostCheckBox.Checked = ((int)regKey.GetValue("DirectPlayMigrateHost",1)==1); + } + + + // Get session signing option + if (regKey.GetValue("DirectPlaySessionSigning",null) != null) { + if ("Full" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fullSignedRadio.Checked = true; + else if ("Fast" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fastSignedRadio.Checked = true; + else + notSignedRadio.Checked = true; + } + + regKey.Close(); + } + + // Set default port value and hide port UI if provider doesn't use them + Port = connectionWizard.DefaultPort; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + localPortTextBox.Hide(); + localPortLabel.Hide(); + } + } + + + + /// + /// The port on which to host + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(localPortTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + localPortTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.txtSession = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.fullSignedRadio = new System.Windows.Forms.RadioButton(); + this.fastSignedRadio = new System.Windows.Forms.RadioButton(); + this.notSignedRadio = new System.Windows.Forms.RadioButton(); + this.migrateHostCheckBox = new System.Windows.Forms.CheckBox(); + this.useDPNSVRCheckBox = new System.Windows.Forms.CheckBox(); + this.localPortLabel = new System.Windows.Forms.Label(); + this.localPortTextBox = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // txtSession + // + this.txtSession.Location = new System.Drawing.Point(96, 24); + this.txtSession.Name = "txtSession"; + this.txtSession.Size = new System.Drawing.Size(176, 20); + this.txtSession.TabIndex = 3; + this.txtSession.Text = ""; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(288, 12); + this.label1.TabIndex = 2; + this.label1.Text = "Session Name:"; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(128, 168); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(208, 168); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + // + // groupBox1 + // + this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] { + this.fullSignedRadio, + this.fastSignedRadio, + this.notSignedRadio}); + this.groupBox1.Location = new System.Drawing.Point(16, 64); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(112, 88); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Session Signing"; + // + // fullSignedRadio + // + this.fullSignedRadio.Location = new System.Drawing.Point(18, 22); + this.fullSignedRadio.Name = "fullSignedRadio"; + this.fullSignedRadio.Size = new System.Drawing.Size(80, 16); + this.fullSignedRadio.TabIndex = 9; + this.fullSignedRadio.Text = "Full signed"; + // + // fastSignedRadio + // + this.fastSignedRadio.Checked = true; + this.fastSignedRadio.Location = new System.Drawing.Point(18, 41); + this.fastSignedRadio.Name = "fastSignedRadio"; + this.fastSignedRadio.Size = new System.Drawing.Size(88, 16); + this.fastSignedRadio.TabIndex = 8; + this.fastSignedRadio.TabStop = true; + this.fastSignedRadio.Text = "Fast signed"; + // + // notSignedRadio + // + this.notSignedRadio.Location = new System.Drawing.Point(18, 55); + this.notSignedRadio.Name = "notSignedRadio"; + this.notSignedRadio.Size = new System.Drawing.Size(72, 24); + this.notSignedRadio.TabIndex = 10; + this.notSignedRadio.Text = "Disabled"; + // + // migrateHostCheckBox + // + this.migrateHostCheckBox.Checked = true; + this.migrateHostCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.migrateHostCheckBox.Location = new System.Drawing.Point(144, 64); + this.migrateHostCheckBox.Name = "migrateHostCheckBox"; + this.migrateHostCheckBox.Size = new System.Drawing.Size(136, 24); + this.migrateHostCheckBox.TabIndex = 11; + this.migrateHostCheckBox.Text = "Enable Host Migration"; + // + // useDPNSVRCheckBox + // + this.useDPNSVRCheckBox.Location = new System.Drawing.Point(144, 84); + this.useDPNSVRCheckBox.Name = "useDPNSVRCheckBox"; + this.useDPNSVRCheckBox.Size = new System.Drawing.Size(136, 24); + this.useDPNSVRCheckBox.TabIndex = 12; + this.useDPNSVRCheckBox.Text = "Use DPNSVR"; + // + // localPortLabel + // + this.localPortLabel.Location = new System.Drawing.Point(152, 122); + this.localPortLabel.Name = "localPortLabel"; + this.localPortLabel.Size = new System.Drawing.Size(64, 17); + this.localPortLabel.TabIndex = 13; + this.localPortLabel.Text = "Local Port:"; + // + // localPortTextBox + // + this.localPortTextBox.Location = new System.Drawing.Point(216, 120); + this.localPortTextBox.Name = "localPortTextBox"; + this.localPortTextBox.Size = new System.Drawing.Size(56, 20); + this.localPortTextBox.TabIndex = 14; + this.localPortTextBox.Text = ""; + // + // CreateSessionForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(290, 200); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.localPortTextBox, + this.localPortLabel, + this.useDPNSVRCheckBox, + this.migrateHostCheckBox, + this.txtSession, + this.label1, + this.groupBox1, + this.btnOK, + this.btnCancel}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.HelpButton = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateSessionForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Create a Session"; + this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.CreateSessionForm_HelpRequested); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// We are ready to create a session. Ensure the data is valid + /// then create the session + /// + private void btnOK_Click(object sender, System.EventArgs e) { + ApplicationDescription dpApp; + if ((txtSession.Text == null) || (txtSession.Text == "")) { + MessageBox.Show(this,"Please enter a session name before clicking OK.","No sessionname",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlaySessionName", txtSession.Text); + if (migrateHostCheckBox.Checked) + regKey.SetValue("DirectPlayMigrateHost",1); + else + regKey.SetValue("DirectPlayMigrateHost",0); + + if (fastSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Fast"); + else if (fullSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Full"); + else + regKey.SetValue("DirectPlaySessionSigning","Disabled"); + regKey.Close(); + } + + dpApp = new ApplicationDescription(); + dpApp.GuidApplication = connectionWizard.ApplicationGuid; + dpApp.SessionName = txtSession.Text; + dpApp.Flags = 0; + + if (migrateHostCheckBox.Checked) + dpApp.Flags |= SessionFlags.MigrateHost; + + if (!useDPNSVRCheckBox.Checked) + dpApp.Flags |= SessionFlags.NoDpnServer; + + if (fastSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FastSigned; + else if (fullSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FullSigned; + + // Specify the port number if available + if (ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + if (Port > 0) + deviceAddress.AddComponent(Address.KeyPort, Port); + } + + connectionWizard.SetUserInfo(); + // Host a game on deviceAddress as described by dpApp + // HostFlags.OkToQueryForAddressing allows DirectPlay to prompt the user + // using a dialog box for any device address information that is missing + peer.Host(dpApp,deviceAddress,HostFlags.OkToQueryForAddressing); + this.DialogResult = DialogResult.OK; + } + + private void CreateSessionForm_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent) { + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_CreateForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_CreateForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_CreateForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_JoinForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_JoinForm.cs new file mode 100644 index 0000000..a86efa7 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_JoinForm.cs @@ -0,0 +1,481 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_JoinForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will search for existing running samples and allow you to join them or will +/// allow you to create your own session as a host +/// +public class CreateJoinForm : System.Windows.Forms.Form { + private const int EnumExpireThreshold = 2000; + private bool amJoining = false; + + + + + /// + /// Hold our information of hosts we found + /// + private struct FindHostsResponseInformation { + public int LastFoundTime; + public ApplicationDescription ApplicationDesc; + public int RoundTripLatencyMs; + public Address sender; + public Address device; + public override string ToString() { + if (ApplicationDesc.MaxPlayers > 0) + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + "/" + ApplicationDesc.MaxPlayers + ") (" + RoundTripLatencyMs + "ms)"; + else + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + ") (" + RoundTripLatencyMs + "ms)"; + } + }; + + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + private Address hostAddress = null; + private bool isSearching = false; + private int findHostHandle = 0; + private CreateSessionForm createSessionForm = null; + private ResultCode resultCode; + private ArrayList foundHosts = new ArrayList(); + private bool isConnected = false; + private ManualResetEvent connectEvent = null; + private System.Timers.Timer updateListTimer = null; + private System.Timers.Timer connectTimer = null; + + private System.Windows.Forms.ListBox lstSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnSearch; + private System.Windows.Forms.Button btnJoin; + private System.Windows.Forms.Button btnCreate; + + + + + /// + /// Constructor + /// + public CreateJoinForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + deviceAddress = addressObject; + + //Set up the event handlers + peer.FindHostResponse += new FindHostResponseEventHandler(FindHostResponseMessage); + peer.ConnectComplete += new ConnectCompleteEventHandler(ConnectResult); + peer.AsyncOperationComplete += new AsyncOperationCompleteEventHandler(CancelAsync); + + //Set up our timer + updateListTimer = new System.Timers.Timer(300); // A 300 ms interval + updateListTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.UpdateTimer); + updateListTimer.SynchronizingObject = this; + updateListTimer.Start(); + //Set up our connect timer + connectTimer = new System.Timers.Timer(100); // A 100ms interval + connectTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.ConnectTimer); + connectTimer.SynchronizingObject = this; + // Set up our connect event + connectEvent = new ManualResetEvent(false); + + } + + + + + /// + /// An asynchronous operation was cancelled + /// + private void CancelAsync(object sender, AsyncOperationCompleteEventArgs e) { + if (e.Message.AsyncOperationHandle == findHostHandle) { + findHostHandle = 0; + btnSearch.Text = "Start Search"; + isSearching = false; + btnCreate.Enabled = true; + btnSearch.Enabled = true; + } + } + + + + + /// + /// A host was found and responded to our query + /// + private void FindHostResponseMessage(object sender, FindHostResponseEventArgs dpMessage) { + // Now we need to add this to our list of available sessions + SessionAdd(dpMessage.Message); + } + + + + + /// + /// Add this session to our list + /// + /// + private void SessionAdd(FindHostsResponseMessage dpMessage) { + FindHostsResponseInformation dpInfo = new FindHostsResponseInformation(); + + dpInfo.ApplicationDesc = dpMessage.ApplicationDescription; + dpInfo.device = dpMessage.AddressDevice; + dpInfo.sender = dpMessage.AddressSender; + dpInfo.RoundTripLatencyMs = dpMessage.RoundTripLatencyMs; + dpInfo.LastFoundTime = Environment.TickCount; + + // Let's check the items first and see if this one already exists + bool isFound = false; + + lock (foundHosts) { + for (int i = 0; i < lstSession.Items.Count; i++) { + if (dpInfo.ApplicationDesc.GuidInstance == ((FindHostsResponseInformation)lstSession.Items[i]).ApplicationDesc.GuidInstance) { + foundHosts[i] = dpInfo; + lstSession.Items[i] = dpInfo; + isFound = true; + } + } + if (!isFound) { + lstSession.Items.Add(dpInfo); + foundHosts.Add(dpInfo); + } + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + + if (isSearching) { + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + isSearching = !isSearching; + } + if (connectTimer != null) + connectTimer.Dispose(); + + if (updateListTimer != null) + updateListTimer.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.btnJoin = new System.Windows.Forms.Button(); + this.lstSession = new System.Windows.Forms.ListBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnCreate = new System.Windows.Forms.Button(); + this.btnSearch = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnJoin + // + this.btnJoin.Enabled = false; + this.btnJoin.Location = new System.Drawing.Point(7, 227); + this.btnJoin.Name = "btnJoin"; + this.btnJoin.Size = new System.Drawing.Size(74, 27); + this.btnJoin.TabIndex = 2; + this.btnJoin.Text = "Join"; + this.btnJoin.Click += new System.EventHandler(this.btnJoin_Click); + // + // lstSession + // + this.lstSession.Location = new System.Drawing.Point(5, 37); + this.lstSession.Name = "lstSession"; + this.lstSession.Size = new System.Drawing.Size(400, 186); + this.lstSession.TabIndex = 1; + this.lstSession.DoubleClick += new System.EventHandler(this.btnJoin_Click); + this.lstSession.SelectedValueChanged += new System.EventHandler(this.SelectedChange); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(5, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(312, 16); + this.label1.TabIndex = 0; + this.label1.Text = "Select session to join, or click Create to start a new session."; + // + // btnCreate + // + this.btnCreate.DialogResult = System.Windows.Forms.DialogResult.Yes; + this.btnCreate.Location = new System.Drawing.Point(84, 227); + this.btnCreate.Name = "btnCreate"; + this.btnCreate.Size = new System.Drawing.Size(74, 27); + this.btnCreate.TabIndex = 2; + this.btnCreate.Text = "Create"; + this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click); + // + // btnSearch + // + this.btnSearch.Location = new System.Drawing.Point(319, 7); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(86, 27); + this.btnSearch.TabIndex = 2; + this.btnSearch.Text = "Start Search"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(333, 227); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + // + // CreateJoinForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(411, 264); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.btnCreate, + this.btnJoin, + this.btnSearch, + this.btnCancel, + this.lstSession, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateJoinForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Join or create a session"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// The selected session was changed. + /// + private void SelectedChange(object sender, System.EventArgs e) { + if (amJoining) + return; // Do nothing if we are already joining a session + + btnJoin.Enabled = (lstSession.SelectedItem != null); + } + + + + + /// + /// We either want to start or stop searching + /// + private void btnSearch_Click(object sender, System.EventArgs e) { + if (!isSearching) { + if( hostAddress != null ) + hostAddress.Dispose(); + + hostAddress = new Address(); + hostAddress.ServiceProvider = deviceAddress.ServiceProvider; + + // See if we should prompt the user for the remote address + if (ConnectWizard.ProviderRequiresPort(hostAddress.ServiceProvider)) { + AddressForm addressDialog = new AddressForm(connectionWizard.DefaultPort); + addressDialog.ShowDialog(this); + + // If the user cancelled the address form, abort the search + if (addressDialog.DialogResult != DialogResult.OK) + return; + + // If a port was specified, add the component + if (addressDialog.Hostname != "") + hostAddress.AddComponent(Address.KeyHostname, addressDialog.Hostname); + + // If a hostname was specified, add the component + if (addressDialog.Port > 0) + hostAddress.AddComponent(Address.KeyPort, addressDialog.Port); + } + + //Time to enum our hosts + ApplicationDescription desc = new ApplicationDescription(); + desc.GuidApplication = connectionWizard.ApplicationGuid; + + // If the user was not already asked for address information, DirectPlay + // should prompt with native UI + FindHostsFlags flags = 0; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + flags = FindHostsFlags.OkToQueryForAddressing; + + peer.FindHosts(desc,hostAddress,deviceAddress,null,Timeout.Infinite,0,Timeout.Infinite, flags, out findHostHandle); + isSearching = true; + btnCreate.Enabled = false; + btnSearch.Text = "Stop Search"; + } + else { + btnSearch.Text = "Stopping..."; + btnSearch.Enabled = false; + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + } + } + + + + + /// + /// A form was disposed + /// + /// + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createSessionForm) + createSessionForm = null; + } + + + + + /// + /// We should create a new session. Display a dialog allowing the user to set + /// certain options + /// + private void btnCreate_Click(object sender, System.EventArgs e) { + this.DialogResult = DialogResult.None; + ((Button)sender).DialogResult = DialogResult.None; + if (createSessionForm == null) { + createSessionForm = new CreateSessionForm(peer,deviceAddress,connectionWizard); + createSessionForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (createSessionForm.ShowDialog(this) != DialogResult.Cancel) { + ((Button)sender).DialogResult = DialogResult.Yes; + this.DialogResult = DialogResult.Yes; + } + } + + + + + /// + /// Determine if we need to expire any of our currently listed servers + /// + private void UpdateTimer(object sender, System.Timers.ElapsedEventArgs e) { + lock (foundHosts) { + for (int i = 0; i< foundHosts.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)foundHosts[i]).LastFoundTime > EnumExpireThreshold) { + foundHosts.RemoveAt(i); + break; + } + } + for (int i = 0; i< lstSession.Items.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)lstSession.Items[i]).LastFoundTime > EnumExpireThreshold) { + lstSession.Items.RemoveAt(i); + break; + } + } + } + } + + + + + /// + /// Wait for a connect to complete + /// + private void ConnectTimer(object sender, System.Timers.ElapsedEventArgs e) { + if (connectEvent.WaitOne(0,false)) { // Wait for the Connect event to be fired + if (isConnected) { // Are we connected? + // Get rid of the timer + if (updateListTimer != null) + updateListTimer.Stop(); + + if (connectTimer != null) + connectTimer.Stop(); + + this.DialogResult = DialogResult.OK; + this.Close(); + return; + } + else { + MessageBox.Show(this,"Failed to connect. The error code was: \n" + resultCode.ToString() ,"Failed to connect",MessageBoxButtons.OK,MessageBoxIcon.Information); + // Restart our timer + updateListTimer.Start(); + } + } + } + + + + + /// + /// Fired when a connect complete message is received from DirectPlay. Fire + /// our event to notify the sample we've connected + /// + private void ConnectResult(object sender, ConnectCompleteEventArgs e) { + if (e.Message.ResultCode == 0) { + isConnected = true; + } + else + isConnected = false; + + resultCode = e.Message.ResultCode; + // Notify the timer that we've connected. + connectEvent.Set(); + } + + + + + /// + /// Join an existing session + /// + private void btnJoin_Click(object sender, System.EventArgs e) { + FindHostsResponseInformation dpInfo; + if (lstSession.SelectedItem == null) { + MessageBox.Show(this,"Please select a session before clicking join.","No session",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + // Turn off all buttons + btnCreate.Enabled = false; + btnCancel.Enabled = false; + btnJoin.Enabled = false; + btnSearch.Enabled = false; + amJoining = true; + // Stop our secondary timer + updateListTimer.Stop(); + dpInfo = ((FindHostsResponseInformation)lstSession.SelectedItem); + connectionWizard.SetUserInfo(); + peer.Connect(dpInfo.ApplicationDesc,dpInfo.sender, dpInfo.device,null,ConnectFlags.OkToQueryForAddressing); + // Now start our 'Connect' timer + connectTimer.Start(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_JoinForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_JoinForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_JoinForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_ServiceProviderForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_ServiceProviderForm.cs new file mode 100644 index 0000000..4884d84 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_ServiceProviderForm.cs @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_ServiceProviderForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +/// +/// This form allows you to choose a service provider and username for your +/// sample +/// +public class ChooseServiceProviderForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListBox lstSP; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtUser; + private System.Windows.Forms.Button btnCancel; + + + + + /// + /// Constructor + /// + public ChooseServiceProviderForm(Peer peerObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + // Fill up our listbox with the service providers + ServiceProviderInformation[] serviceProviders = peer.GetServiceProviders(false); + foreach (ServiceProviderInformation info in serviceProviders) + lstSP.Items.Add(info); + + txtUser.Text = null; + //Get the default username from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + try { + txtUser.Text = (string)regKey.GetValue("DirectPlayUserName", null); + lstSP.SelectedIndex = (int)regKey.GetValue("DirectPlaySPIndex", 0); + regKey.Close(); + } + catch { + txtUser.Text = null; + lstSP.SelectedIndex = 0; + } + } + else + lstSP.SelectedIndex = 0; + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + txtUser.Text = SystemInformation.UserName; + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.lstSP = new System.Windows.Forms.ListBox(); + this.txtUser = new System.Windows.Forms.TextBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lstSP + // + this.lstSP.Location = new System.Drawing.Point(12, 63); + this.lstSP.Name = "lstSP"; + this.lstSP.Size = new System.Drawing.Size(324, 147); + this.lstSP.TabIndex = 1; + this.lstSP.DoubleClick += new System.EventHandler(this.lstSP_DoubleClick); + // + // txtUser + // + this.txtUser.Location = new System.Drawing.Point(13, 20); + this.txtUser.MaxLength = 30; + this.txtUser.Name = "txtUser"; + this.txtUser.Size = new System.Drawing.Size(326, 20); + this.txtUser.TabIndex = 5; + this.txtUser.Text = ""; + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(181, 215); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 2; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(260, 215); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(11, 44); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(376, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Please pick your service provider:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(10, 5); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(327, 12); + this.label2.TabIndex = 4; + this.label2.Text = "User Name:"; + // + // ChooseServiceProviderForm + // + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(343, 246); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.txtUser, + this.label2, + this.btnCancel, + this.btnOK, + this.lstSP, + this.label1}); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChooseServiceProviderForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Choose Service Provider"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// They don't want to run this sample + /// + private void btnCancel_Click(object sender, System.EventArgs e) { + this.Dispose(); + } + + + + + /// + /// Same as clicking ok + /// + private void lstSP_DoubleClick(object sender, System.EventArgs e) { + // Call the ok button click handler + object[] parameters = new object[] { sender, e }; + this.BeginInvoke(new System.EventHandler(btnOK_Click), parameters); + } + + + + + /// + /// Select this username and service provider if valid, then continue the wizard + /// + private void btnOK_Click(object sender, System.EventArgs e) { + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + MessageBox.Show(this,"Please enter a username before clicking OK.","No Username",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + try { + connectionWizard.ServiceProvider = ((ServiceProviderInformation)lstSP.SelectedItem).Guid; + connectionWizard.Username = txtUser.Text; + } + catch { // We assume if we got here there was no selected item. + MessageBox.Show(this,"Please select a service provider before clicking OK.","No Service Provider",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlayUserName", txtUser.Text); + regKey.SetValue("DirectPlaySPIndex", lstSP.SelectedIndex); + regKey.Close(); + } + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_ServiceProviderForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_ServiceProviderForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/DPlayConnect_ServiceProviderForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/DXUtil.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/DXUtil.cs new file mode 100644 index 0000000..5d0f0e5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/DXUtil.cs @@ -0,0 +1,285 @@ +//----------------------------------------------------------------------------- +// File: DXUtil.cs +// +// Desc: Shortcut macros and functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.IO; +using System.Runtime.InteropServices; + + + + +/// +/// Enumeration for various actions our timer can perform +/// +public enum DirectXTimer { + Reset, + Start, + Stop, + Advance, + GetAbsoluteTime, + GetApplicationTime, + GetElapsedTime +}; + + + + +/// +/// Generic utility functions for our samples +/// +public class DXUtil { + #region Timer Internal Stuff + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceCounter(ref long PerformanceCount); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("winmm.dll")] + public static extern int timeGetTime(); + private static bool isTimerInitialized = false; + private static bool m_bUsingQPF = false; + private static bool m_bTimerStopped = true; + private static long m_llQPFTicksPerSec = 0; + private static long m_llStopTime = 0; + private static long m_llLastElapsedTime = 0; + private static long m_llBaseTime = 0; + private static double m_fLastElapsedTime = 0.0; + private static double m_fBaseTime = 0.0; + private static double m_fStopTime = 0.0; + #endregion + + // Constants for SDK Path registry keys + private const string sdkPath = "Software\\Microsoft\\DirectX SDK"; + private const string sdkKey = "DX9J3SDK Samples Path"; + + private DXUtil() { /* Private Constructor */ } + + + + + /// + /// Returns the DirectX SDK media path + /// + public static string SdkMediaPath { + get { + Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sdkPath); + string sReg = string.Empty; + if (rKey != null) { + sReg = (string)rKey.GetValue(sdkKey); + rKey.Close(); + } + if (sReg != null) + sReg += @"\Media\"; + else + return string.Empty; + + return sReg; + } + } + + + + + /// + /// Performs timer opertations. Use the following commands: + /// + /// DirectXTimer.Reset - to reset the timer + /// DirectXTimer.Start - to start the timer + /// DirectXTimer.Stop - to stop (or pause) the timer + /// DirectXTimer.Advance - to advance the timer by 0.1 seconds + /// DirectXTimer.GetAbsoluteTime - to get the absolute system time + /// DirectXTimer.GetApplicationTime - to get the current time + /// DirectXTimer.GetElapsedTime - to get the time that elapsed between TIMER_GETELAPSEDTIME calls + /// + /// + public static float Timer(DirectXTimer command) { + if (!isTimerInitialized) { + isTimerInitialized = true; + + // Use QueryPerformanceFrequency() to get frequency of timer. If QPF is + // not supported, we will timeGetTime() which returns milliseconds. + long qwTicksPerSec = 0; + m_bUsingQPF = QueryPerformanceFrequency(ref qwTicksPerSec); + if (m_bUsingQPF) + m_llQPFTicksPerSec = qwTicksPerSec; + } + if (m_bUsingQPF) { + double time; + double fElapsedTime; + long qwTime = 0; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_llStopTime != 0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + qwTime = m_llStopTime; + else + QueryPerformanceCounter(ref qwTime); + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (qwTime - m_llLastElapsedTime) / (double) m_llQPFTicksPerSec; + m_llLastElapsedTime = qwTime; + return (float)fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + double fAppTime = (double) (qwTime - m_llBaseTime) / (double) m_llQPFTicksPerSec; + return (float)fAppTime; + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_llBaseTime = qwTime; + m_llLastElapsedTime = qwTime; + m_llStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_llBaseTime += qwTime - m_llStopTime; + m_llStopTime = 0; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_llStopTime = qwTime; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_llStopTime += m_llQPFTicksPerSec/10; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + time = qwTime / (double) m_llQPFTicksPerSec; + return (float)time; + } + + return -1.0f; // Invalid command specified + } + else { + // Get the time using timeGetTime() + double time; + double fElapsedTime; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_fStopTime != 0.0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + time = m_fStopTime; + else + time = timeGetTime() * 0.001; + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (time - m_fLastElapsedTime); + m_fLastElapsedTime = time; + return (float) fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + return (float) (time - m_fBaseTime); + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_fBaseTime = time; + m_fLastElapsedTime = time; + m_fStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_fBaseTime += time - m_fStopTime; + m_fStopTime = 0.0f; + m_fLastElapsedTime = time; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_fStopTime = time; + m_fLastElapsedTime = time; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_fStopTime += 0.1f; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + return (float) time; + } + + return -1.0f; // Invalid command specified + } + } + + + + + /// + /// Returns a valid path to a DXSDK media file + /// + /// Initial path to search + /// Filename we're searching for + /// Full path to the file + public static string FindMediaFile(string path, string filename) { + // First try to load the file in the full path + if (path != null) { + if (File.Exists(AppendDirectorySeparator(path) + filename)) + return AppendDirectorySeparator(path) + filename; + } + + // if not try to find the filename in the current folder. + if (File.Exists(filename)) + return AppendDirectorySeparator(Directory.GetCurrentDirectory()) + filename; + + // last, check if the file exists in the media directory + if (File.Exists(AppendDirectorySeparator(SdkMediaPath) + filename)) + return AppendDirectorySeparator(SdkMediaPath) + filename; + + throw new FileNotFoundException("Could not find this file.", filename); + } + + + + + /// + /// Returns a valid string with a directory separator at the end. + /// + private static string AppendDirectorySeparator(string filename) { + if (!filename.EndsWith(@"\")) + return filename + @"\"; + + return filename; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/GameClass.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/GameClass.cs new file mode 100644 index 0000000..b07a261 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/GameClass.cs @@ -0,0 +1,130 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public delegate void MessageDelegate(byte message); // Delegate for messages arriving via DirectPlay. +public delegate void AudioDelegate(); // Delegate to handle audio playback. +public delegate void PeerCloseCallback(); // This delegate will be called when the session terminated event is fired. + +public class GameClass : GraphicsSample { + private GraphicsFont drawingFont = null; + private Point destination = new Point(0, 0); + private InputClass input = null; + + private PlayClass play = null; + + private const byte msgUp = 0; + private const byte msgDown = 1; + private const byte msgLeft = 2; + private const byte msgRight = 3; + private const byte msgCancelUp = 4; + private const byte msgCancelDown = 5; + private const byte msgCancelLeft = 6; + private const byte msgCancelRight = 7; + + private bool networkEnabled; + private PlayClass peer; + + #region GameClass Constructor + public GameClass(bool startFullScreen, Size size, bool enableNetwork) { + this.startFullscreen = startFullScreen; + this.Size = size; + this.networkEnabled = enableNetwork; + this.Text = "SpaceWar3D-Step02"; + + drawingFont = new GraphicsFont( "Verdana", System.Drawing.FontStyle.Regular); + + input = new InputClass(this, play); + + if (networkEnabled) { + peer = new PlayClass(this); + } + + } + + #endregion //GameClass Constructor + + + /// + /// Called once per frame, the call is the entry point for 3d rendering. This + /// function sets up render states, clears the viewport, and renders the scene. + /// + protected override void Render() { + + input.GetInputState(); + + //Clear the backbuffer to a Blue color + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + //Begin the scene + device.BeginScene(); + drawingFont.DrawText(5, 5, Color.White, "X: " + destination.X + " Y: " + destination.Y); + + // + // TODO: Insert application rendering code here. + // + device.EndScene(); + } + + /// + /// Initialize scene objects. + /// + protected override void InitializeDeviceObjects() { + drawingFont.InitializeDeviceObjects(device); + + + } + + /// + /// Called when a device needs to be restored. + /// + protected override void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { + + } + protected override void Dispose(bool disposing) { + if (networkEnabled) + play.Dispose(); + base.Dispose(disposing); + } + public void MessageArrived(byte message) { + switch (message) { + case msgUp: { + destination.X = 1; + break; + } + case msgDown: { + destination.X = -1; + break; + } + case msgLeft: { + destination.Y = 1; + break; + } + case msgRight: { + destination.Y = -1; + break; + } + case msgCancelUp: + case msgCancelDown: { + destination.X = 0; + break; + } + case msgCancelLeft: + case msgCancelRight: { + destination.Y = 0; + break; + } + } + } + + /// + // When the peer closes, the code here is executed. + /// + public void PeerClose() { + // The session was terminated, go ahead and shut down + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/GameClass.resx b/Source Code updated 08-12-05/Spacewar3D/Step02/GameClass.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/GameClass.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/HelpScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/HelpScreen.cs new file mode 100644 index 0000000..7d54363 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/HelpScreen.cs @@ -0,0 +1,113 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.IO; + + + /// + /// Summary description for HelpScreen. + /// +public class HelpScreen : System.Windows.Forms.Form { + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.TextBox helpText; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public HelpScreen() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + string helpFile = MediaUtilities.FindFile("Help.txt"); + if (File.Exists(helpFile)) { + StreamReader sr; + try { + sr = new StreamReader(helpFile); + helpText.Text = sr.ReadToEnd(); + sr.Close(); + } + catch ( Exception e ) { + helpText.Text = e.ToString(); + } + + } + else { + helpText.Text = "Unable to locate " + helpFile.ToString(); + } + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.closeButton = new System.Windows.Forms.Button(); + this.helpText = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // closeButton + // + this.closeButton.BackColor = System.Drawing.Color.Black; + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.Dock = System.Windows.Forms.DockStyle.Bottom; + this.closeButton.ForeColor = System.Drawing.Color.Red; + this.closeButton.Location = new System.Drawing.Point(0, 615); + this.closeButton.Name = "closeButton"; + this.closeButton.Size = new System.Drawing.Size(616, 23); + this.closeButton.TabIndex = 0; + this.closeButton.Text = "Close"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // helpText + // + this.helpText.BackColor = System.Drawing.Color.Black; + this.helpText.Dock = System.Windows.Forms.DockStyle.Fill; + this.helpText.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.helpText.ForeColor = System.Drawing.Color.Red; + this.helpText.Location = new System.Drawing.Point(0, 0); + this.helpText.Multiline = true; + this.helpText.Name = "helpText"; + this.helpText.ReadOnly = true; + this.helpText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.helpText.Size = new System.Drawing.Size(616, 615); + this.helpText.TabIndex = 1; + this.helpText.TabStop = false; + this.helpText.Text = ""; + // + // HelpScreen + // + this.AcceptButton = this.closeButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(616, 638); + this.Controls.Add(this.helpText); + this.Controls.Add(this.closeButton); + this.Name = "HelpScreen"; + this.Text = "SpaceWar! Help"; + this.ResumeLayout(false); + + } + #endregion + + private void closeButton_Click(object sender, System.EventArgs e) { + this.Close(); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/HelpScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step02/HelpScreen.resx new file mode 100644 index 0000000..a4f535a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/HelpScreen.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + HelpScreen + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/MediaUtilities.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/MediaUtilities.cs new file mode 100644 index 0000000..685a63d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/MediaUtilities.cs @@ -0,0 +1,35 @@ +using System; +using System.IO; +using System.Configuration; + + + /// + /// Summary description for MediaUtilities. + /// +public class MediaUtilities { + // private static string defaultPath = @"..\..\media\"; + private static string mediaPath = ConfigurationSettings.AppSettings.Get("MediaPath"); + + public MediaUtilities() { + } + + public static string FindFile(string filename) { + return FindFile(mediaPath, filename); + } + + public static string FindFile(string path, string filename) { + // First try to load the file in the full path + string fullName = AppendDirectorySeparator(path) + filename; + if (File.Exists(fullName)) + return fullName; + else + throw new FileNotFoundException("Could not find this file.", filename); + } + + private static string AppendDirectorySeparator(string pathname) { + if (!pathname.EndsWith(@"\")) + return pathname + @"\"; + else + return pathname; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/SplashScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/SplashScreen.cs new file mode 100644 index 0000000..9ffea2c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/SplashScreen.cs @@ -0,0 +1,237 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + + + /// + /// Spacewar Splashscreen + /// +public class SplashScreen : System.Windows.Forms.Form { + private MainClass mainClass; + private System.Windows.Forms.Button helpButton; + private System.Windows.Forms.Button startButton; + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.Button soloButton; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.CheckBox checkBox1; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + public SplashScreen(MainClass main) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + this.mainClass = main; + radioButton3.Checked = true; + checkBox1.Checked = true; + mainClass.GameFormSize = new Size(1024,768); + mainClass.FullScreen = true; + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(SplashScreen)); + this.helpButton = new System.Windows.Forms.Button(); + this.startButton = new System.Windows.Forms.Button(); + this.closeButton = new System.Windows.Forms.Button(); + this.soloButton = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // helpButton + // + this.helpButton.ForeColor = System.Drawing.Color.White; + this.helpButton.Location = new System.Drawing.Point(440, 280); + this.helpButton.Name = "helpButton"; + this.helpButton.Size = new System.Drawing.Size(136, 32); + this.helpButton.TabIndex = 5; + this.helpButton.Text = "Show Help"; + this.helpButton.Click += new System.EventHandler(this.helpButton_Click); + // + // startButton + // + this.startButton.ForeColor = System.Drawing.Color.White; + this.startButton.Location = new System.Drawing.Point(440, 364); + this.startButton.Name = "startButton"; + this.startButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.startButton.Size = new System.Drawing.Size(136, 32); + this.startButton.TabIndex = 7; + this.startButton.Text = "Network Play"; + this.startButton.Click += new System.EventHandler(this.startButton_Click); + // + // closeButton + // + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.ForeColor = System.Drawing.Color.White; + this.closeButton.Location = new System.Drawing.Point(440, 406); + this.closeButton.Name = "closeButton"; + this.closeButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.closeButton.Size = new System.Drawing.Size(136, 32); + this.closeButton.TabIndex = 8; + this.closeButton.Text = "Exit"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // soloButton + // + this.soloButton.ForeColor = System.Drawing.Color.White; + this.soloButton.Location = new System.Drawing.Point(440, 322); + this.soloButton.Name = "soloButton"; + this.soloButton.Size = new System.Drawing.Size(136, 32); + this.soloButton.TabIndex = 6; + this.soloButton.Text = "Solo Play"; + this.soloButton.Click += new System.EventHandler(this.soloButton_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.radioButton3); + this.groupBox1.Controls.Add(this.radioButton2); + this.groupBox1.Controls.Add(this.radioButton1); + this.groupBox1.ForeColor = System.Drawing.Color.White; + this.groupBox1.Location = new System.Drawing.Point(16, 320); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(128, 128); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Screen Resolution"; + // + // checkBox1 + // + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(16, 96); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.TabIndex = 3; + this.checkBox1.Text = "Full Screen"; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // radioButton3 + // + this.radioButton3.Checked = true; + this.radioButton3.ForeColor = System.Drawing.Color.White; + this.radioButton3.Location = new System.Drawing.Point(16, 72); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(80, 24); + this.radioButton3.TabIndex = 2; + this.radioButton3.TabStop = true; + this.radioButton3.Text = "1024 x 768"; + this.radioButton3.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton2 + // + this.radioButton2.ForeColor = System.Drawing.Color.White; + this.radioButton2.Location = new System.Drawing.Point(16, 48); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(72, 24); + this.radioButton2.TabIndex = 1; + this.radioButton2.Text = "800 x 600"; + this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton1 + // + this.radioButton1.ForeColor = System.Drawing.Color.White; + this.radioButton1.Location = new System.Drawing.Point(16, 24); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(72, 24); + this.radioButton1.TabIndex = 0; + this.radioButton1.Text = "640 x 480"; + this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // SplashScreen + // + this.AcceptButton = this.soloButton; + this.AutoScale = false; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.Black; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(594, 454); + this.ControlBox = false; + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.soloButton); + this.Controls.Add(this.closeButton); + this.Controls.Add(this.startButton); + this.Controls.Add(this.helpButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(600, 460); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(600, 460); + this.Name = "SplashScreen"; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + private void helpButton_Click(object sender, System.EventArgs e) { + HelpScreen helpScreen = new HelpScreen(); + helpScreen.ShowDialog(); + } + + private void startButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = true; + this.Close(); + } + + private void closeButton_Click(object sender, System.EventArgs e) { + Environment.Exit(0); + } + + private void soloButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = false; + this.Close(); + } + + private void radioButton_CheckedChanged(object sender, System.EventArgs e) { + RadioButton btn = (RadioButton)sender; + Console.WriteLine(btn.ToString()); + if (btn.Checked) { + if (btn == radioButton1) + mainClass.GameFormSize = new Size(640,480); + if (btn == radioButton2) + mainClass.GameFormSize = new Size(800, 600); + if (btn == radioButton3) + mainClass.GameFormSize = new Size(1024, 768); + } + } + + private void checkBox1_CheckedChanged(object sender, System.EventArgs e) { + mainClass.FullScreen = checkBox1.Checked; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/SplashScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step02/SplashScreen.resx new file mode 100644 index 0000000..18fad73 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/SplashScreen.resx @@ -0,0 +1,4715 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + False + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + False + + + 80 + + + True + + + Private + + + SplashScreen + + + + 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 + AElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/Step02.csproj b/Source Code updated 08-12-05/Spacewar3D/Step02/Step02.csproj new file mode 100644 index 0000000..e1a2b8e --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/Step02.csproj @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/Step02.sln b/Source Code updated 08-12-05/Spacewar3D/Step02/Step02.sln new file mode 100644 index 0000000..c644b0d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/Step02.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Step02", "Step02.csproj", "{DE8FEF2E-6E28-4456-9712-68437802A747}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.ActiveCfg = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.Build.0 = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.ActiveCfg = Release|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/d3dapp.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/d3dapp.cs new file mode 100644 index 0000000..9384434 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/d3dapp.cs @@ -0,0 +1,1517 @@ +//----------------------------------------------------------------------------- +// File: D3DApp.cs +// +// Desc: Application class for the Direct3D samples framework library. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + +/// +/// The base class for all the graphics (D3D) samples, it derives from windows forms +/// +public class GraphicsSample : System.Windows.Forms.Form { + #region Menu Information + // The menu items that *all* samples will need + protected System.Windows.Forms.MainMenu mnuMain; + protected System.Windows.Forms.MenuItem mnuFile; + private System.Windows.Forms.MenuItem mnuGo; + private System.Windows.Forms.MenuItem mnuSingle; + private System.Windows.Forms.MenuItem mnuBreak1; + private System.Windows.Forms.MenuItem mnuChange; + private System.Windows.Forms.MenuItem mnuBreak2; + protected System.Windows.Forms.MenuItem mnuExit; + #endregion + + // The window we will render too + private System.Windows.Forms.Control ourRenderTarget; + // Should we use the default windows + protected bool isUsingMenus = true; + + // We need to keep track of our enumeration settings + protected D3DEnumeration enumerationSettings = new D3DEnumeration(); + protected D3DSettings graphicsSettings = new D3DSettings(); + private bool isMaximized = false; // Are we maximized? + private bool isHandlingSizeChanges = true; // Are we handling size changes? + private bool isClosing = false; // Are we closing? + private bool isChangingFormStyle = false; // Are we changing the forms style? + private bool isWindowActive = true; // Are we waiting for got focus? + + private float lastTime = 0.0f; // The last time + private int frames = 0; // Number of frames since our last update + private int appPausedCount = 0; // How many times has the app been paused (and when can it resume)? + + // Internal variables for the state of the app + protected bool windowed; + protected bool active; + protected bool ready; + protected bool hasFocus; + protected bool isMultiThreaded = false; + + // Internal variables used for timing + protected bool frameMoving; + protected bool singleStep; + // Main objects used for creating and rendering the 3D scene + protected PresentParameters presentParams = new PresentParameters(); // Parameters for CreateDevice/Reset + protected Device device; // The rendering device + protected RenderStateManager renderState; + protected SamplerStateManagerCollection sampleState; + protected TextureStateManagerCollection textureStates; + private Caps graphicsCaps; // Caps for the device + protected Caps Caps { get { return graphicsCaps; } } + private CreateFlags behavior; // Indicate sw or hw vertex processing + protected BehaviorFlags BehaviorFlags { get { return new BehaviorFlags(behavior); } } + protected System.Windows.Forms.Control RenderTarget { get { return ourRenderTarget; } set { ourRenderTarget = value; } } + + // Variables for timing + protected float appTime; // Current time in seconds + protected float elapsedTime; // Time elapsed since last frame + protected float framePerSecond; // Instanteous frame rate + protected string deviceStats;// String to hold D3D device stats + protected string frameStats; // String to hold frame stats + + private bool deviceLost = false; + + // Overridable variables for the app + private int minDepthBits; // Minimum number of bits needed in depth buffer + protected int MinDepthBits { get { return minDepthBits; } set { minDepthBits = value; enumerationSettings.AppMinDepthBits = value;} } + private int minStencilBits; // Minimum number of bits needed in stencil buffer + protected int MinStencilBits { get { return minStencilBits; } set { minStencilBits = value; enumerationSettings.AppMinStencilBits = value;} } + protected bool showCursorWhenFullscreen; // Whether to show cursor when fullscreen + protected bool clipCursorWhenFullscreen; // Whether to limit cursor pos when fullscreen + protected bool startFullscreen; // Whether to start up the app in fullscreen mode + + private System.Drawing.Size storedSize; + private System.Drawing.Point storedLocation; + + // Overridable functions for the 3D scene created by the app + protected virtual bool ConfirmDevice(Caps caps, VertexProcessingType vertexProcessingType, + Format adapterFormat, Format backBufferFormat) { return true; } + protected virtual void OneTimeSceneInitialization() { /* Do Nothing */ } + protected virtual void InitializeDeviceObjects() { /* Do Nothing */ } + protected virtual void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void FrameMove() { /* Do Nothing */ } + protected virtual void Render() { /* Do Nothing */ } + protected virtual void InvalidateDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void DeleteDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + + + + + /// + /// Constructor + /// + public GraphicsSample() { + device = null; + active = false; + ready = false; + hasFocus = false; + behavior = 0; + + ourRenderTarget = this; + frameMoving = true; + singleStep = false; + framePerSecond = 0.0f; + deviceStats = null; + frameStats = null; + + this.Text = "D3D9 Sample"; + this.ClientSize = new System.Drawing.Size(400,300); + this.KeyPreview = true; + + minDepthBits = 16; + minStencilBits = 0; + showCursorWhenFullscreen = false; + startFullscreen = false; + + // When clipCursorWhenFullscreen is TRUE, the cursor is limited to + // the device window when the app goes fullscreen. This prevents users + // from accidentally clicking outside the app window on a multimon system. + // This flag is turned off by default for debug builds, since it makes + // multimon debugging difficult. +#if (DEBUG) + clipCursorWhenFullscreen = false; +#else + clipCursorWhenFullscreen = true; +#endif + InitializeComponent(); + } + + + + + /// + /// Picks the best graphics device, and initializes it + /// + /// true if a good device was found, false otherwise + public bool CreateGraphicsSample() { + enumerationSettings.ConfirmDeviceCallback = new D3DEnumeration.ConfirmDeviceCallbackType(this.ConfirmDevice); + enumerationSettings.Enumerate(); + + if (ourRenderTarget.Cursor == null) { + // Set up a default cursor + ourRenderTarget.Cursor = System.Windows.Forms.Cursors.Default; + } + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + + try { + ChooseInitialSettings(); + + // Initialize the application timer + DXUtil.Timer(DirectXTimer.Start); + // Initialize the app's custom scene stuff + OneTimeSceneInitialization(); + // Initialize the 3D environment for the app + InitializeEnvironment(); + } + catch (SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + return false; + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + return false; + } + + // The app is ready to go + ready = true; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available windowed mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestWindowedMode(bool doesRequireHardware, bool doesRequireReference) { + // Get display mode of primary adapter (which is assumed to be where the window + // will appear) + DisplayMode primaryDesktopDisplayMode = Manager.Adapters[0].CurrentDisplayMode; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + if (!deviceCombo.IsWindowed) + continue; + if (deviceCombo.AdapterFormat != primaryDesktopDisplayMode.Format) + continue; + + // If we haven't found a compatible DeviceCombo yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + deviceCombo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + // This windowed device combo looks great -- take it + goto EndWindowedDeviceComboSearch; + } + // Otherwise keep looking for a better windowed device combo + } + } + } + } + + EndWindowedDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + graphicsSettings.WindowedAdapterInfo = bestAdapterInfo; + graphicsSettings.WindowedDeviceInfo = bestDeviceInfo; + graphicsSettings.WindowedDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = true; + graphicsSettings.WindowedDisplayMode = primaryDesktopDisplayMode; + graphicsSettings.WindowedWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + graphicsSettings.WindowedHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.WindowedDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.WindowedMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.WindowedMultisampleQuality = 0; + graphicsSettings.WindowedVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.WindowedPresentInterval = (PresentInterval)bestDeviceCombo.PresentIntervalList[0]; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available fullscreen mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestFullscreenMode(bool doesRequireHardware, bool doesRequireReference) { + // For fullscreen, default to first HAL DeviceCombo that supports the current desktop + // display mode, or any display mode if HAL is not compatible with the desktop mode, or + // non-HAL if no HAL is available + DisplayMode adapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestAdapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestDisplayMode = new DisplayMode(); + bestAdapterDesktopDisplayMode.Width = 0; + bestAdapterDesktopDisplayMode.Height = 0; + bestAdapterDesktopDisplayMode.Format = 0; + bestAdapterDesktopDisplayMode.RefreshRate = 0; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + adapterDesktopDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + bool adapterMatchesDesktop = (deviceCombo.AdapterFormat == adapterDesktopDisplayMode.Format); + if (deviceCombo.IsWindowed) + continue; + + // If we haven't found a compatible set yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + bestDeviceCombo.DevType == DeviceType.Hardware && bestDeviceCombo.AdapterFormat != adapterDesktopDisplayMode.Format && adapterMatchesDesktop || + bestDeviceCombo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + bestAdapterDesktopDisplayMode = adapterDesktopDisplayMode; + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + // This fullscreen device combo looks great -- take it + goto EndFullscreenDeviceComboSearch; + } + // Otherwise keep looking for a better fullscreen device combo + } + } + } + } + + EndFullscreenDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + // Need to find a display mode on the best adapter that uses pBestDeviceCombo->AdapterFormat + // and is as close to bestAdapterDesktopDisplayMode's res as possible + bestDisplayMode.Width = 0; + bestDisplayMode.Height = 0; + bestDisplayMode.Format = 0; + bestDisplayMode.RefreshRate = 0; + foreach (DisplayMode displayMode in bestAdapterInfo.DisplayModeList) { + if (displayMode.Format != bestDeviceCombo.AdapterFormat) + continue; + if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate == bestAdapterDesktopDisplayMode.RefreshRate) { + // found a perfect match, so stop + bestDisplayMode = displayMode; + break; + } + else if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate > bestDisplayMode.RefreshRate) { + // refresh rate doesn't match, but width/height match, so keep this + // and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == bestAdapterDesktopDisplayMode.Width) { + // width matches, so keep this and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == 0) { + // we don't have anything better yet, so keep this and keep looking + bestDisplayMode = displayMode; + } + } + + graphicsSettings.FullscreenAdapterInfo = bestAdapterInfo; + graphicsSettings.FullscreenDeviceInfo = bestDeviceInfo; + graphicsSettings.FullscreenDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = false; + graphicsSettings.FullscreenDisplayMode = bestDisplayMode; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.FullscreenDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.FullscreenMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.FullscreenMultisampleQuality = 0; + graphicsSettings.FullscreenVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.FullscreenPresentInterval = PresentInterval.Default; + + return true; + } + + + + + /// + /// Choose the initial settings for the application + /// + /// true if the settings were initialized + public bool ChooseInitialSettings() { + bool foundFullscreenMode = FindBestFullscreenMode(false, false); + bool foundWindowedMode = FindBestWindowedMode(false, false); + if (startFullscreen && foundFullscreenMode) + graphicsSettings.IsWindowed = false; + + if (!foundFullscreenMode && !foundWindowedMode) + throw new NoCompatibleDevicesException(); + + return (foundFullscreenMode || foundWindowedMode); + } + + + + + /// + /// Build presentation parameters from the current settings + /// + public void BuildPresentParamsFromSettings() { + presentParams.Windowed = graphicsSettings.IsWindowed; + presentParams.BackBufferCount = 1; + presentParams.MultiSample = graphicsSettings.MultisampleType; + presentParams.MultiSampleQuality = graphicsSettings.MultisampleQuality; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.EnableAutoDepthStencil = enumerationSettings.AppUsesDepthBuffer; + presentParams.AutoDepthStencilFormat = graphicsSettings.DepthStencilBufferFormat; + presentParams.PresentFlag = PresentFlag.None; + + if (windowed) { + presentParams.BackBufferWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + presentParams.BackBufferHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = 0; + presentParams.PresentationInterval = PresentInterval.Immediate; + presentParams.DeviceWindow = ourRenderTarget; + } + else { + presentParams.BackBufferWidth = graphicsSettings.DisplayMode.Width; + presentParams.BackBufferHeight = graphicsSettings.DisplayMode.Height; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = graphicsSettings.DisplayMode.RefreshRate; + presentParams.PresentationInterval = graphicsSettings.PresentInterval; + presentParams.DeviceWindow = this; + } + } + + + + + /// + /// Initialize the graphics environment + /// + public void InitializeEnvironment() { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + GraphicsDeviceInfo deviceInfo = graphicsSettings.DeviceInfo; + + windowed = graphicsSettings.IsWindowed; + + // Set up the presentation parameters + BuildPresentParamsFromSettings(); + + if (deviceInfo.Caps.PrimitiveMiscCaps.IsNullReference) { + // Warn user about null ref device that can't render anything + HandleSampleException(new NullReferenceDeviceException(), ApplicationMessage.None); + } + + CreateFlags createFlags = new CreateFlags(); + if (graphicsSettings.VertexProcessingType == VertexProcessingType.Software) + createFlags = CreateFlags.SoftwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Mixed) + createFlags = CreateFlags.MixedVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Hardware) + createFlags = CreateFlags.HardwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.PureHardware) { + createFlags = CreateFlags.HardwareVertexProcessing; + } + else + throw new ApplicationException(); +#if (DX9) +#else + // Make sure to allow multithreaded apps if we need them + presentParams.ForceNoMultiThreadedFlag = !isMultiThreaded; +#endif + try { + // Create the device + device = new Device(graphicsSettings.AdapterOrdinal, graphicsSettings.DevType, + windowed ? ourRenderTarget : this , createFlags, presentParams); + + // Cache our local objects + renderState = device.RenderState; + sampleState = device.SamplerState; + textureStates = device.TextureState; + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after recreating the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + if (windowed) { + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + } + + // Store device Caps + graphicsCaps = device.DeviceCaps; + behavior = createFlags; + + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + // Store device description + if (deviceInfo.DevType == DeviceType.Reference) + sb.Append("REF"); + else if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append("HAL"); + else if (deviceInfo.DevType == DeviceType.Software) + sb.Append("SW"); + + BehaviorFlags behaviorFlags = new BehaviorFlags(createFlags); + if ((behaviorFlags.HardwareVertexProcessing) && + (behaviorFlags.PureDevice)) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (pure hw vp)"); + else + sb.Append(" (simulated pure hw vp)"); + } + else if (behaviorFlags.HardwareVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (hw vp)"); + else + sb.Append(" (simulated hw vp)"); + } + else if (behaviorFlags.MixedVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (mixed vp)"); + else + sb.Append(" (simulated mixed vp)"); + } + else if (behaviorFlags.SoftwareVertexProcessing) { + sb.Append(" (sw vp)"); + } + + if (deviceInfo.DevType == DeviceType.Hardware) { + sb.Append(": "); + sb.Append(adapterInfo.AdapterDetails.Description); + } + + // Set device stats string + deviceStats = sb.ToString(); + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // Confine cursor to fullscreen window + if (clipCursorWhenFullscreen) { + if (!windowed) { + System.Drawing.Rectangle rcWindow = this.ClientRectangle; + } + } + + // Setup the event handlers for our device + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + device.Disposing += new System.EventHandler(this.DeleteDeviceObjects); + device.DeviceResizing += new System.ComponentModel.CancelEventHandler(this.EnvironmentResized); + + // Initialize the app's device-dependent objects + try { + InitializeDeviceObjects(); + RestoreDeviceObjects(null, null); + active = true; + return; + } + catch { + // Cleanup before we try again + InvalidateDeviceObjects(null, null); + DeleteDeviceObjects(null, null); + device.Dispose(); + device = null; + if (this.Disposing) + return; + } + } + catch { + // If that failed, fall back to the reference rasterizer + if (deviceInfo.DevType == DeviceType.Hardware) { + if (FindBestWindowedMode(false, true)) { + windowed = true; + + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + + // Let the user know we are switching from HAL to the reference rasterizer + HandleSampleException(null, ApplicationMessage.WarnSwitchToRef); + + InitializeEnvironment(); + } + } + } + } + + + + + /// + /// Displays sample exceptions to the user + /// + /// The exception that was thrown + /// Extra information on how to handle the exception + public void HandleSampleException(SampleException e, ApplicationMessage Type) { + // Build a message to display to the user + string strMsg = string.Empty; + if (e != null) + strMsg = e.Message; + + if (ApplicationMessage.ApplicationMustExit == Type) { + strMsg += "\n\nThis sample will now exit."; + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + + // Close the window, which shuts down the app + if (this.IsHandleCreated) + this.Close(); + } + else { + if (ApplicationMessage.WarnSwitchToRef == Type) + strMsg = "\n\nSwitching to the reference rasterizer,\n"; + strMsg += "a software device that implements the entire\n"; + strMsg += "Direct3D feature set, but runs very slowly."; + + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + } + } + + + + + /// + /// Fired when our environment was resized + /// + /// the device that's resizing our environment + /// Set the cancel member to true to turn off automatic device reset + public void EnvironmentResized(object sender, System.ComponentModel.CancelEventArgs e) { + // Check to see if we're closing or changing the form style + if ((isClosing) || (isChangingFormStyle)) { + // We are, cancel our reset, and exit + e.Cancel = true; + return; + } + + // Check to see if we're minimizing and our rendering object + // is not the form, if so, cancel the resize + if ((ourRenderTarget != this) && (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)) + e.Cancel = true; + + if (!isWindowActive) + e.Cancel = true; + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + } + + + + + /// + /// Called when user toggles between fullscreen mode and windowed mode + /// + public void ToggleFullscreen() { + int AdapterOrdinalOld = graphicsSettings.AdapterOrdinal; + DeviceType DevTypeOld = graphicsSettings.DevType; + + isHandlingSizeChanges = false; + isChangingFormStyle = true; + ready = false; + + // Toggle the windowed state + windowed = !windowed; + + // Save our maximized settings.. + if (!windowed && isMaximized) + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + + graphicsSettings.IsWindowed = windowed; + + // If AdapterOrdinal and DevType are the same, we can just do a Reset(). + // If they've changed, we need to do a complete device teardown/rebuild. + if (graphicsSettings.AdapterOrdinal == AdapterOrdinalOld && + graphicsSettings.DevType == DevTypeOld) { + BuildPresentParamsFromSettings(); + // Resize the 3D device + RETRY: + try { + device.Reset(presentParams); + } + catch { + if (windowed) + ForceWindowed(); + else { + // Sit in a loop until the device passes Reset() + try { + device.TestCooperativeLevel(); + } + catch(DeviceNotResetException) { + // Device still needs to be Reset. Try again. + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + goto RETRY; + } + } + } + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + else { + device.Dispose(); + device = null; + InitializeEnvironment(); + } + + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after resetting the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + + if (windowed) { + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; + isChangingFormStyle = false; + + // We were maximized, restore that state + if (isMaximized) { + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + } + this.SendToBack(); + this.BringToFront(); + this.ClientSize = storedSize; + this.Location = storedLocation; + } + else { + if (this.Menu != null) + this.Menu = null; + + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + isChangingFormStyle = false; + } + isHandlingSizeChanges = true; + ready = true; + } + + + + + /// + /// Switch to a windowed mode, even if that means picking a new device and/or adapter + /// + public void ForceWindowed() { + if (windowed) + return; + + if (!FindBestWindowedMode(false, false)) { + return; + } + windowed = true; + + // Now destroy the current 3D device objects, then reinitialize + + ready = false; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Create the new device + try { + InitializeEnvironment(); + } + catch (SampleException e) { + HandleSampleException(e,ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(),ApplicationMessage.ApplicationMustExit); + } + ready = true; + } + + + + + /// + /// Called when our sample has nothing else to do, and it's time to render + /// + private void FullRender() { + // Render a frame during idle time (no messages are waiting) + if (active && ready) { + try { + if ((deviceLost) || (System.Windows.Forms.Form.ActiveForm != this)) { + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + } + // Render a frame during idle time + if (active) { + Render3DEnvironment(); + } + } + catch (Exception ee) { + System.Windows.Forms.MessageBox.Show("An exception has occurred. This sample must exit.\r\n\r\n" + ee.ToString(), "Exception", + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + this.Close(); + } + } + } + + + + + /// + /// Run the simulation + /// + public void Run() { + // Now we're ready to recieve and process Windows messages. + System.Windows.Forms.Control mainWindow = this; + + // If the render target is a form and *not* this form, use that form instead, + // otherwise, use the main form. + if ((ourRenderTarget is System.Windows.Forms.Form) && (ourRenderTarget != this)) + mainWindow = ourRenderTarget; + + mainWindow.Show(); + while (mainWindow.Created) { + FullRender(); + System.Windows.Forms.Application.DoEvents(); + } + } + + + + + /// + /// Draws the scene + /// + public void Render3DEnvironment() { + if (deviceLost) { + try { + // Test the cooperative level to see if it's okay to render + device.TestCooperativeLevel(); + } + catch (DeviceLostException) { + // If the device was lost, do not render until we get it back + isHandlingSizeChanges = false; + isWindowActive = false; + return; + } + catch (DeviceNotResetException) { + // Check if the device needs to be resized. + + // If we are windowed, read the desktop mode and use the same format for + // the back buffer + if (windowed) { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + graphicsSettings.WindowedDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + presentParams.BackBufferFormat = graphicsSettings.WindowedDisplayMode.Format; + } + + // Reset the device and resize it + device.Reset(device.PresentationParameters); + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + deviceLost = false; + } + + // Get the app's time, in seconds. Skip rendering if no time elapsed + float fAppTime = DXUtil.Timer(DirectXTimer.GetApplicationTime); + float fElapsedAppTime = DXUtil.Timer(DirectXTimer.GetElapsedTime); + if ((0.0f == fElapsedAppTime) && frameMoving) + return; + + // FrameMove (animate) the scene + if (frameMoving || singleStep) { + // Store the time for the app + appTime = fAppTime; + elapsedTime = fElapsedAppTime; + + // Frame move the scene + FrameMove(); + + singleStep = false; + } + + // Render the scene as normal + Render(); + + UpdateStats(); + + try { + // Show the frame on the primary surface. + device.Present(); + } + catch(DeviceLostException) { + deviceLost = true; + } + } + + + + + /// + /// Update the various statistics the simulation keeps track of + /// + public void UpdateStats() { + // Keep track of the frame count + float time = DXUtil.Timer(DirectXTimer.GetAbsoluteTime); + ++frames; + + // Update the scene stats once per second + if (time - lastTime > 1.0f) { + framePerSecond = frames / (time - lastTime); + lastTime = time; + frames = 0; + + string strFmt; + Format fmtAdapter = graphicsSettings.DisplayMode.Format; + if (fmtAdapter == device.PresentationParameters.BackBufferFormat) { + strFmt = fmtAdapter.ToString(); + } + else { + strFmt = String.Format("backbuf {0}, adapter {1}", + device.PresentationParameters.BackBufferFormat.ToString(), fmtAdapter.ToString()); + } + + string strDepthFmt; + if (enumerationSettings.AppUsesDepthBuffer) { + strDepthFmt = String.Format(" ({0})", + graphicsSettings.DepthStencilBufferFormat.ToString()); + } + else { + // No depth buffer + strDepthFmt = ""; + } + + string strMultiSample; + switch (graphicsSettings.MultisampleType) { + case Direct3D.MultiSampleType.NonMaskable: strMultiSample = " (NonMaskable Multisample)"; break; + case Direct3D.MultiSampleType.TwoSamples: strMultiSample = " (2x Multisample)"; break; + case Direct3D.MultiSampleType.ThreeSamples: strMultiSample = " (3x Multisample)"; break; + case Direct3D.MultiSampleType.FourSamples: strMultiSample = " (4x Multisample)"; break; + case Direct3D.MultiSampleType.FiveSamples: strMultiSample = " (5x Multisample)"; break; + case Direct3D.MultiSampleType.SixSamples: strMultiSample = " (6x Multisample)"; break; + case Direct3D.MultiSampleType.SevenSamples: strMultiSample = " (7x Multisample)"; break; + case Direct3D.MultiSampleType.EightSamples: strMultiSample = " (8x Multisample)"; break; + case Direct3D.MultiSampleType.NineSamples: strMultiSample = " (9x Multisample)"; break; + case Direct3D.MultiSampleType.TenSamples: strMultiSample = " (10x Multisample)"; break; + case Direct3D.MultiSampleType.ElevenSamples: strMultiSample = " (11x Multisample)"; break; + case Direct3D.MultiSampleType.TwelveSamples: strMultiSample = " (12x Multisample)"; break; + case Direct3D.MultiSampleType.ThirteenSamples: strMultiSample = " (13x Multisample)"; break; + case Direct3D.MultiSampleType.FourteenSamples: strMultiSample = " (14x Multisample)"; break; + case Direct3D.MultiSampleType.FifteenSamples: strMultiSample = " (15x Multisample)"; break; + case Direct3D.MultiSampleType.SixteenSamples: strMultiSample = " (16x Multisample)"; break; + default: strMultiSample = string.Empty; break; + } + frameStats = String.Format("{0} fps ({1}x{2}), {3}{4}{5}", framePerSecond.ToString("f2"), + device.PresentationParameters.BackBufferWidth, device.PresentationParameters.BackBufferHeight, + strFmt, strDepthFmt, strMultiSample); + } + } + + + + + /// + /// Called in to toggle the pause state of the app. + /// + /// true if the simulation should pause + public void Pause(bool pause) { + appPausedCount += (int)(pause ? +1 : -1); + ready = ((appPausedCount > 0) ? false : true); + + // Handle the first pause request (of many, nestable pause requests) + if (pause && (1 == appPausedCount)) { + // Stop the scene from animating + if (frameMoving) + DXUtil.Timer(DirectXTimer.Stop); + } + + if (0 == appPausedCount) { + // Restart the timers + if (frameMoving) + DXUtil.Timer(DirectXTimer.Start); + } + } + + + + + /// + /// Set our variables to not active and not ready + /// + public void CleanupEnvironment() { + active = false; + ready = false; + if (device != null) + device.Dispose(); + + device = null; + } + #region Menu EventHandlers + + + + + /// + /// Prepares the simulation for a new device being selected + /// + public void UserSelectNewDevice(object sender, EventArgs e) { + // Prompt the user to select a new device or mode + if (active && ready) { + Pause(true); + DoSelectNewDevice(); + Pause(false); + } + } + + + + + /// + /// Displays a dialog so the user can select a new adapter, device, or + /// display mode, and then recreates the 3D environment if needed + /// + private void DoSelectNewDevice() { + isHandlingSizeChanges = false; + // Can't display dialogs in fullscreen mode + if (windowed == false) { + try { + ToggleFullscreen(); + isHandlingSizeChanges = false; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + return; + } + } + + // Make sure the main form is in the background + this.SendToBack(); + D3DSettingsForm settingsForm = new D3DSettingsForm(enumerationSettings, graphicsSettings); + System.Windows.Forms.DialogResult result = settingsForm.ShowDialog(null); + if (result != System.Windows.Forms.DialogResult.OK) { + isHandlingSizeChanges = true; + return; + } + graphicsSettings = settingsForm.settings; + + windowed = graphicsSettings.IsWindowed; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Inform the display class of the change. It will internally + // re-create valid surfaces, a d3ddevice, etc. + try { + InitializeEnvironment(); + } + catch(SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + isHandlingSizeChanges = true; + } + + + + + /// + /// Will start (or stop) simulation + /// + private void ToggleStart(object sender, EventArgs e) { + //Toggle frame movement + frameMoving = !frameMoving; + DXUtil.Timer(frameMoving ? DirectXTimer.Start : DirectXTimer.Stop); + } + + + + + /// + /// Will single step the simulation + /// + private void SingleStep(object sender, EventArgs e) { + // Single-step frame movement + if (false == frameMoving) + DXUtil.Timer(DirectXTimer.Advance); + else + DXUtil.Timer(DirectXTimer.Stop); + frameMoving = false; + singleStep = true; + } + + + + + /// + /// Will end the simulation + /// + private void ExitSample(object sender, EventArgs e) { + this.Close(); + } + #endregion + + + + + #region WinForms Overrides + /// + /// Clean up any resources + /// + protected override void Dispose(bool disposing) { + CleanupEnvironment(); + mnuMain.Dispose(); + base.Dispose(disposing); + } + + + + + /// + /// Handle any key presses + /// + protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) { + // Check for our shortcut keys (Return to start or stop) + if (e.KeyChar == '\r') { + mnuGo.PerformClick(); + e.Handled = true; + } + + // Check for our shortcut keys (Escape to quit) + if ((byte)e.KeyChar == (byte)(int)System.Windows.Forms.Keys.Escape) { + mnuExit.PerformClick(); + e.Handled = true; + } + + // Allow the control to handle the keystroke now + base.OnKeyPress(e); + } + + + + + /// + /// Handle system keystrokes (ie, alt-enter) + /// + protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e) { + if ((e.Alt) && (e.KeyCode == System.Windows.Forms.Keys.Return)) { + // Toggle the fullscreen/window mode + if (active && ready) { + Pause(true); + + try { + ToggleFullscreen(); + Pause(false); + return; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + } + finally { + e.Handled = true; + } + } + } + // Allow the control to handle the keystroke now + base.OnKeyDown(e); + } + + + + + /// + /// Winforms generated code for initializing the form + /// + private void InitializeComponent() { + // + // GraphicsSample + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.MinimumSize = new System.Drawing.Size(100, 100); + #region MenuCreation/etc + this.mnuMain = new System.Windows.Forms.MainMenu(); + this.mnuFile = new System.Windows.Forms.MenuItem(); + this.mnuGo = new System.Windows.Forms.MenuItem(); + this.mnuSingle = new System.Windows.Forms.MenuItem(); + this.mnuBreak1 = new System.Windows.Forms.MenuItem(); + this.mnuChange = new System.Windows.Forms.MenuItem(); + this.mnuBreak2 = new System.Windows.Forms.MenuItem(); + this.mnuExit = new System.Windows.Forms.MenuItem(); + // + // mainMenu1 + // + this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuFile}); + // + // mnuFile + // + this.mnuFile.Index = 0; + this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuGo, + this.mnuSingle, + this.mnuBreak1, + this.mnuChange, + this.mnuBreak2, + this.mnuExit}); + this.mnuFile.Text = "&File"; + // + // mnuGo + // + this.mnuGo.Index = 0; + this.mnuGo.Text = "&Go/stop\tEnter"; + this.mnuGo.Click += new System.EventHandler(this.ToggleStart); + // + // mnuSingle + // + this.mnuSingle.Index = 1; + this.mnuSingle.Text = "&Single step\tSpace"; + this.mnuSingle.Click += new System.EventHandler(this.SingleStep); + // + // mnuBreak1 + // + this.mnuBreak1.Index = 2; + this.mnuBreak1.Text = "-"; + // + // mnuChange + // + this.mnuChange.Index = 3; + this.mnuChange.Shortcut = System.Windows.Forms.Shortcut.F2; + this.mnuChange.ShowShortcut = true; + this.mnuChange.Text = "&Change Device..."; + this.mnuChange.Click += new System.EventHandler(this.UserSelectNewDevice); + // + // mnuBreak2 + // + this.mnuBreak2.Index = 4; + this.mnuBreak2.Text = "-"; + // + // mnuExit + // + this.mnuExit.Index = 5; + this.mnuExit.Text = "E&xit\tESC"; + this.mnuExit.Click += new System.EventHandler(this.ExitSample); + #endregion + } + + + + + /// + /// When the menu is starting pause our simulation + /// + protected override void OnMenuStart(System.EventArgs e) { + Pause(true); // Pause the simulation while the menu starts + } + + + + + /// + /// When the menu is complete our simulation can continue + /// + protected override void OnMenuComplete(System.EventArgs e) { + Pause(false); // Unpause the simulation + } + + + + + /// + /// Make sure our graphics cursor (if available) moves with the cursor + /// + protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e) { + if ((device != null) && (!device.Disposed)) { + // Move the D3D cursor + device.SetCursorPosition(e.X, e.Y, false); + } + // Let the control handle the mouse now + base.OnMouseMove(e); + } + + + + + /// + /// Handle size changed events + /// + protected override void OnSizeChanged(System.EventArgs e) { + this.OnResize(e); + base.OnSizeChanged(e); + } + + + + + /// + /// Handle resize events + /// + protected override void OnResize(System.EventArgs e) { + if (isHandlingSizeChanges) { + // Are we maximized? + isMaximized = (this.WindowState == System.Windows.Forms.FormWindowState.Maximized); + if (!isMaximized) { + storedSize = this.ClientSize; + storedLocation = this.Location; + } + } + active = !(this.WindowState == System.Windows.Forms.FormWindowState.Minimized || this.Visible == false); + base.OnResize(e); + } + + + + + /// + /// Once the form has focus again, we can continue to handle our resize + /// and resets.. + /// + protected override void OnGotFocus(System.EventArgs e) { + isHandlingSizeChanges = true; + isWindowActive = true; + base.OnGotFocus (e); + } + + + + + /// + /// Handle move events + /// + protected override void OnMove(System.EventArgs e) { + if (isHandlingSizeChanges) { + storedLocation = this.Location; + } + base.OnMove(e); + } + + + + + /// + /// Handle closing event + /// + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { + isClosing = true; + base.OnClosing(e); + } + #endregion + + +} + +#region Enums for D3D Applications +/// +/// Messages that can be used when displaying an error +/// +public enum ApplicationMessage { + None, + ApplicationMustExit, + WarnSwitchToRef +}; +#endregion + + + + +#region Various SampleExceptions +/// +/// The default sample exception type +/// +public class SampleException : System.ApplicationException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + + strMsg = "Generic application error. Enable\n"; + strMsg += "debug output for detailed information."; + + return strMsg; + } + } +} + + + + +/// +/// Exception informing user no compatible devices were found +/// +public class NoCompatibleDevicesException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "This sample cannot run in a desktop\n"; + strMsg += "window with the current display settings.\n"; + strMsg += "Please change your desktop settings to a\n"; + strMsg += "16- or 32-bit display mode and re-run this\n"; + strMsg += "sample."; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when the ReferenceDevice is null +/// +public class NullReferenceDeviceException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Warning: Nothing will be rendered.\n"; + strMsg += "The reference rendering device was selected, but your\n"; + strMsg += "computer only has a reduced-functionality reference device\n"; + strMsg += "installed. Install the DirectX SDK to get the full\n"; + strMsg += "reference device.\n"; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when reset fails +/// +public class ResetFailedException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not reset the Direct3D device."; + + return strMsg; + } + } +} + + + + +/// +/// The exception thrown when media couldn't be found +/// +public class MediaNotFoundException : SampleException { + private string mediaFile; + public MediaNotFoundException(string filename) : base() { + mediaFile = filename; + } + public MediaNotFoundException() : base() { + mediaFile = string.Empty; + } + + + + + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not load required media."; + if (mediaFile.Length > 0) + strMsg += string.Format("\r\nFile: {0}", mediaFile); + + return strMsg; + } + } +} +#endregion + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/d3dapp.resx b/Source Code updated 08-12-05/Spacewar3D/Step02/d3dapp.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/d3dapp.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/d3denumeration.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/d3denumeration.cs new file mode 100644 index 0000000..cd79b45 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/d3denumeration.cs @@ -0,0 +1,449 @@ +//----------------------------------------------------------------------------- +// File: D3DEnumeration.cs +// +// Desc: Enumerates D3D adapters, devices, modes, etc. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + + + +/// +/// Enumeration of all possible D3D vertex processing types +/// +public enum VertexProcessingType { + Software, + Mixed, + Hardware, + PureHardware +} + + + + +/// +/// Info about a display adapter +/// +public class GraphicsAdapterInfo { + public int AdapterOrdinal; + public AdapterDetails AdapterDetails; + public ArrayList DisplayModeList = new ArrayList(); // List of D3DDISPLAYMODEs + public ArrayList DeviceInfoList = new ArrayList(); // List of D3DDeviceInfos + public override string ToString() { return AdapterDetails.Description; } +} + + + + +/// +/// Info about a D3D device, including a list of DeviceCombos (see below) +/// that work with the device +/// +public class GraphicsDeviceInfo { + public int AdapterOrdinal; + public DeviceType DevType; + public Caps Caps; + public ArrayList DeviceComboList = new ArrayList(); // List of D3DDeviceCombos + public override string ToString() { return DevType.ToString(); } +} + + + + +/// +/// Info about a depth/stencil buffer format that is incompatible with a +/// multisample type +/// +public class DepthStencilMultiSampleConflict { + public DepthFormat DepthStencilFormat; + public MultiSampleType MultiSampleType; +} + + + + +/// +/// A combination of adapter format, back buffer format, and windowed/fullscreen +/// that is compatible with a particular D3D device (and the app) +/// +public class DeviceCombo { + public int AdapterOrdinal; + public DeviceType DevType; + public Format AdapterFormat; + public Format BackBufferFormat; + public bool IsWindowed; + public ArrayList DepthStencilFormatList = new ArrayList(); // List of D3DFORMATs + public ArrayList MultiSampleTypeList = new ArrayList(); // List of D3DMULTISAMPLE_TYPEs + public ArrayList MultiSampleQualityList = new ArrayList(); // List of ints (maxQuality per multisample type) + public ArrayList DepthStencilMultiSampleConflictList = new ArrayList(); // List of DepthStencilMultiSampleConflicts + public ArrayList VertexProcessingTypeList = new ArrayList(); // List of VertexProcessingTypes + public ArrayList PresentIntervalList = new ArrayList(); // List of D3DPRESENT_INTERVALs +} + + + + +/// +/// Used to sort Displaymodes +/// +class DisplayModeComparer : System.Collections.IComparer { + /// + /// Compare two display modes + /// + public int Compare(object x, object y) { + DisplayMode dx = (DisplayMode)x; + DisplayMode dy = (DisplayMode)y; + + if (dx.Width > dy.Width) + return 1; + if (dx.Width < dy.Width) + return -1; + if (dx.Height > dy.Height) + return 1; + if (dx.Height < dy.Height) + return -1; + if (dx.Format > dy.Format) + return 1; + if (dx.Format < dy.Format) + return -1; + if (dx.RefreshRate > dy.RefreshRate) + return 1; + if (dx.RefreshRate < dy.RefreshRate) + return -1; + return 0; + } +} + + + + +/// +/// Enumerates available adapters, devices, modes, etc. +/// +public class D3DEnumeration { + /// + /// The confirm device delegate which is used to determine if a device + /// meets the needs of the simulation + /// + public delegate bool ConfirmDeviceCallbackType(Caps caps, + VertexProcessingType vertexProcessingType, Format adapterFormat, + Format backBufferFormat); + + public ConfirmDeviceCallbackType ConfirmDeviceCallback; + public ArrayList AdapterInfoList = new ArrayList(); // List of D3DAdapterInfos + + // The following variables can be used to limit what modes, formats, + // etc. are enumerated. Set them to the values you want before calling + // Enumerate(). + public int AppMinFullscreenWidth = 640; + public int AppMinFullscreenHeight = 480; + public int AppMinColorChannelBits = 5; // min color bits per channel in adapter format + public int AppMinAlphaChannelBits = 0; // min alpha bits per pixel in back buffer format + public int AppMinDepthBits = 15; + public int AppMinStencilBits = 0; + public bool AppUsesDepthBuffer = true; + public bool AppUsesMixedVP = false; // whether app can take advantage of mixed vp mode + public bool AppRequiresWindowed = false; + public bool AppRequiresFullscreen = false; + + + + + /// + /// Enumerates available D3D adapters, devices, modes, etc. + /// + public void Enumerate() { + foreach (AdapterInformation ai in Manager.Adapters) { + ArrayList adapterFormatList = new ArrayList(); + GraphicsAdapterInfo adapterInfo = new GraphicsAdapterInfo(); + adapterInfo.AdapterOrdinal = ai.Adapter; + adapterInfo.AdapterDetails = ai.Information; + + // Get list of all display modes on this adapter. + // Also build a temporary list of all display adapter formats. + foreach (DisplayMode displayMode in ai.SupportedDisplayModes) { + if (displayMode.Width < AppMinFullscreenWidth) + continue; + if (displayMode.Height < AppMinFullscreenHeight) + continue; + if (GraphicsUtility.GetColorChannelBits(displayMode.Format) < AppMinColorChannelBits) + continue; + adapterInfo.DisplayModeList.Add(displayMode); + if (!adapterFormatList.Contains(displayMode.Format)) + adapterFormatList.Add(displayMode.Format); + } + + // Sort displaymode list + DisplayModeComparer dmc = new DisplayModeComparer(); + adapterInfo.DisplayModeList.Sort(dmc); + + // Get info for each device on this adapter + EnumerateDevices(adapterInfo, adapterFormatList); + + // If at least one device on this adapter is available and compatible + // with the app, add the adapterInfo to the list + if (adapterInfo.DeviceInfoList.Count == 0) + continue; + AdapterInfoList.Add(adapterInfo); + } + } + + + + + /// + /// Enumerates D3D devices for a particular adapter + /// + protected void EnumerateDevices(GraphicsAdapterInfo adapterInfo, ArrayList adapterFormatList) { + DeviceType[] devTypeArray = new DeviceType[] { + DeviceType.Hardware, DeviceType.Software, DeviceType.Reference }; + + foreach (DeviceType devType in devTypeArray) { + GraphicsDeviceInfo deviceInfo = new GraphicsDeviceInfo(); + deviceInfo.AdapterOrdinal = adapterInfo.AdapterOrdinal; + deviceInfo.DevType = devType; + try { + deviceInfo.Caps = Manager.GetDeviceCaps(adapterInfo.AdapterOrdinal, devType); + } + catch (DirectXException) { + continue; + } + + // Get info for each devicecombo on this device + EnumerateDeviceCombos(deviceInfo, adapterFormatList); + + // If at least one devicecombo for this device is found, + // add the deviceInfo to the list + if (deviceInfo.DeviceComboList.Count == 0) + continue; + adapterInfo.DeviceInfoList.Add(deviceInfo); + } + } + + + + + /// + /// Enumerates DeviceCombos for a particular device + /// + protected void EnumerateDeviceCombos(GraphicsDeviceInfo deviceInfo, ArrayList adapterFormatList) { + Format[] backBufferFormatArray = new Format[] { + Format.A8R8G8B8, Format.X8R8G8B8, Format.A2R10G10B10, + Format.R5G6B5, Format.A1R5G5B5, Format.X1R5G5B5, + }; + bool[] isWindowedArray = new bool[] { false, true }; + + // See which adapter formats are supported by this device + foreach (Format adapterFormat in adapterFormatList) { + foreach (Format backBufferFormat in backBufferFormatArray) { + if (GraphicsUtility.GetAlphaChannelBits(backBufferFormat) < AppMinAlphaChannelBits) + continue; + foreach (bool isWindowed in isWindowedArray) { + if (!isWindowed && AppRequiresWindowed) + continue; + if (isWindowed && AppRequiresFullscreen) + continue; + if (!Manager.CheckDeviceType(deviceInfo.AdapterOrdinal, deviceInfo.DevType, adapterFormat, backBufferFormat, isWindowed)) { + continue; + } + + // At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed + // DeviceCombo that is supported by the system. We still need to confirm that it's + // compatible with the app, and find one or more suitable depth/stencil buffer format, + // multisample type, vertex processing type, and present interval. + DeviceCombo deviceCombo = new DeviceCombo(); + deviceCombo.AdapterOrdinal = deviceInfo.AdapterOrdinal; + deviceCombo.DevType = deviceInfo.DevType; + deviceCombo.AdapterFormat = adapterFormat; + deviceCombo.BackBufferFormat = backBufferFormat; + deviceCombo.IsWindowed = isWindowed; + if (AppUsesDepthBuffer) { + BuildDepthStencilFormatList(deviceCombo); + if (deviceCombo.DepthStencilFormatList.Count == 0) + continue; + } + BuildMultiSampleTypeList(deviceCombo); + if (deviceCombo.MultiSampleTypeList.Count == 0) + continue; + BuildDepthStencilMultiSampleConflictList(deviceCombo); + BuildVertexProcessingTypeList(deviceInfo, deviceCombo); + if (deviceCombo.VertexProcessingTypeList.Count == 0) + continue; + BuildPresentIntervalList(deviceInfo, deviceCombo); + if (deviceCombo.PresentIntervalList.Count == 0) + continue; + + deviceInfo.DeviceComboList.Add(deviceCombo); + } + } + } + } + + + + + /// + /// Adds all depth/stencil formats that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildDepthStencilFormatList(DeviceCombo deviceCombo) { + DepthFormat[] depthStencilFormatArray = { + DepthFormat.D16, + DepthFormat.D15S1, + DepthFormat.D24X8, + DepthFormat.D24S8, + DepthFormat.D24X4S4, + DepthFormat.D32, + }; + + foreach (DepthFormat depthStencilFmt in depthStencilFormatArray) { + if (GraphicsUtility.GetDepthBits(depthStencilFmt) < AppMinDepthBits) + continue; + if (GraphicsUtility.GetStencilBits(depthStencilFmt) < AppMinStencilBits) + continue; + if (Manager.CheckDeviceFormat(deviceCombo.AdapterOrdinal, deviceCombo.DevType, deviceCombo.AdapterFormat, + Usage.DepthStencil, ResourceType.Surface, depthStencilFmt)) { + if (Manager.CheckDepthStencilMatch(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat, depthStencilFmt)) { + deviceCombo.DepthStencilFormatList.Add(depthStencilFmt); + } + } + } + } + + + + + /// + /// Adds all multisample types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildMultiSampleTypeList(DeviceCombo deviceCombo) { + MultiSampleType[] msTypeArray = { + MultiSampleType.None, + MultiSampleType.NonMaskable, + MultiSampleType.TwoSamples, + MultiSampleType.ThreeSamples, + MultiSampleType.FourSamples, + MultiSampleType.FiveSamples, + MultiSampleType.SixSamples, + MultiSampleType.SevenSamples, + MultiSampleType.EightSamples, + MultiSampleType.NineSamples, + MultiSampleType.TenSamples, + MultiSampleType.ElevenSamples, + MultiSampleType.TwelveSamples, + MultiSampleType.ThirteenSamples, + MultiSampleType.FourteenSamples, + MultiSampleType.FifteenSamples, + MultiSampleType.SixteenSamples, + }; + + foreach (MultiSampleType msType in msTypeArray) { + int result; + int qualityLevels = 0; + if (Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.BackBufferFormat, deviceCombo.IsWindowed, msType, out result, out qualityLevels)) { + deviceCombo.MultiSampleTypeList.Add(msType); + deviceCombo.MultiSampleQualityList.Add(qualityLevels); + } + } + } + + + + + /// + /// Finds any depthstencil formats that are incompatible with multisample types and + /// builds a list of them. + /// + public void BuildDepthStencilMultiSampleConflictList(DeviceCombo deviceCombo) { + DepthStencilMultiSampleConflict DSMSConflict; + + foreach (DepthFormat dsFmt in deviceCombo.DepthStencilFormatList) { + foreach (MultiSampleType msType in deviceCombo.MultiSampleTypeList) { + if (!Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, + deviceCombo.DevType, (Format)dsFmt, deviceCombo.IsWindowed, msType)) { + DSMSConflict = new DepthStencilMultiSampleConflict(); + DSMSConflict.DepthStencilFormat = dsFmt; + DSMSConflict.MultiSampleType = msType; + deviceCombo.DepthStencilMultiSampleConflictList.Add(DSMSConflict); + } + } + } + } + + + + + /// + /// Adds all vertex processing types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildVertexProcessingTypeList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + if (deviceInfo.Caps.DeviceCaps.SupportsHardwareTransformAndLight) { + if (deviceInfo.Caps.DeviceCaps.SupportsPureDevice) { + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.PureHardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.PureHardware); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Hardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Hardware); + } + if (AppUsesMixedVP && (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Mixed, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat))) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Mixed); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Software, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Software); + } + } + + + + + /// + /// Adds all present intervals that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildPresentIntervalList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + PresentInterval[] piArray = { + PresentInterval.Immediate, + PresentInterval.Default, + PresentInterval.One, + PresentInterval.Two, + PresentInterval.Three, + PresentInterval.Four, + }; + + foreach (PresentInterval pi in piArray) { + if (deviceCombo.IsWindowed) { + if (pi == PresentInterval.Two || + pi == PresentInterval.Three || + pi == PresentInterval.Four) { + // These intervals are not supported in windowed mode. + continue; + } + } + // Note that PresentInterval.Default is zero, so you + // can't do a caps check for it -- it is always available. + if (pi == PresentInterval.Default || + (deviceInfo.Caps.PresentationIntervals & pi) != (PresentInterval)0) { + deviceCombo.PresentIntervalList.Add(pi); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/d3dfont.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/d3dfont.cs new file mode 100644 index 0000000..2b374eb --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/d3dfont.cs @@ -0,0 +1,666 @@ +//----------------------------------------------------------------------------- +// File: D3DFont.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// A generic font class +/// +public class GraphicsFont { + public const int MaxNumfontVertices = 50*6; + + // Font rendering flags + [System.Flags] + public enum RenderFlags { + Centered = 0x0001, + TwoSided = 0x0002, + Filtered = 0x0004, + } + private System.Drawing.Font systemFont; + + private bool isZEnable = false; + public bool ZBufferEnable { get { return isZEnable; } set { isZEnable = value; } } + string ourFontName; // Font properties + int ourFontHeight; + + private Direct3D.Device device; + private TextureStateManager textureState0; + private TextureStateManager textureState1; + private SamplerStateManager samplerState0; + private RenderStateManager renderState; + private Direct3D.Texture fontTexture; + private Direct3D.VertexBuffer vertexBuffer; + private CustomVertex.TransformedColoredTextured[] fontVertices = new CustomVertex.TransformedColoredTextured[MaxNumfontVertices]; + + private int textureWidth; // Texture dimensions + private int textureHeight; + private float textureScale; + private int spacingPerChar; + private float[,] textureCoords = new float[128-32,4]; + + // Stateblocks for setting and restoring render states + private StateBlock savedStateBlock; + private StateBlock drawTextStateBlock; + + + + + /// + /// Create a new font object + /// + /// The font to use + public GraphicsFont(System.Drawing.Font f) { + ourFontName = f.Name; + ourFontHeight = (int)f.Size; + systemFont = f; + } + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName) : this(fontName, FontStyle.Regular, 12) { + } + + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName, FontStyle style) : this(fontName, style, 12) { + } + + + + + /// + /// Create a new font object + /// + /// The name of the font + /// The style + /// Size of the font + public GraphicsFont(string fontName, FontStyle style, int size) { + ourFontName = fontName; + ourFontHeight = size; + systemFont = new System.Drawing.Font(fontName, ourFontHeight, style); + } + + + + + /// + /// Attempt to draw the systemFont alphabet onto the provided texture + /// graphics. + /// + /// Graphics object on which to draw and measure the letters + /// If set, the method will test to see if the alphabet will fit without actually drawing + public void PaintAlphabet(Graphics g, bool measureOnly) { + string str; + float x = 0; + float y = 0; + Point p = new Point(0, 0); + Size size = new Size(0,0); + + // Calculate the spacing between characters based on line height + size = g.MeasureString(" ", systemFont).ToSize(); + x = spacingPerChar = (int) Math.Ceiling(size.Height * 0.3); + + for (char c = (char)32; c < (char)127; c++) { + str = c.ToString(); + // We need to do some things here to get the right sizes. The default implemententation of MeasureString + // will return a resolution independant size. For our height, this is what we want. However, for our width, we + // want a resolution dependant size. + Size resSize = g.MeasureString(str, systemFont).ToSize(); + size.Height = resSize.Height + 1; + + // Now the Resolution independent width + if (c != ' ') { // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + resSize = g.MeasureString(str, systemFont, p, StringFormat.GenericTypographic).ToSize(); + size.Width = resSize.Width; + } + else + size.Width = resSize.Width; + + if ((x + size.Width + spacingPerChar) > textureWidth) { + x = spacingPerChar; + y += size.Height; + } + + // Make sure we have room for the current character + if ((y + size.Height) > textureHeight) + throw new System.InvalidOperationException("Texture too small for alphabet"); + + if (!measureOnly) { + if (c != ' ') // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y), StringFormat.GenericTypographic); + else + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y)); + textureCoords[c-32,0] = ((float) (x + 0 - spacingPerChar)) / textureWidth; + textureCoords[c-32,1] = ((float) (y + 0 + 0)) / textureHeight; + textureCoords[c-32,2] = ((float) (x + size.Width + spacingPerChar)) / textureWidth; + textureCoords[c-32,3] = ((float) (y + size.Height + 0)) / textureHeight; + } + + x += size.Width + (2 * spacingPerChar); + } + + } + + + + + /// + /// Initialize the device objects + /// + /// The grpahics device used to initialize + public void InitializeDeviceObjects(Device dev) { + if (dev != null) { + // Set up our events + dev.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Keep a local copy of the device + device = dev; + textureState0 = device.TextureState[0]; + textureState1 = device.TextureState[1]; + samplerState0 = device.SamplerState[0]; + renderState = device.RenderState; + + // Create a bitmap on which to measure the alphabet + Bitmap bmp = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Graphics g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Establish the font and texture size + textureScale = 1.0f; // Draw fonts into texture without scaling + + // Calculate the dimensions for the smallest power-of-two texture which + // can hold all the printable characters + textureWidth = textureHeight = 128; + for (;;) { + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // Scale up the texture size and try again + textureWidth *= 2; + textureHeight *= 2; + continue; + } + + break; + } + + // If requested texture is too big, use a smaller texture and smaller font, + // and scale up when rendering. + Direct3D.Caps d3dCaps = device.DeviceCaps; + + // If the needed texture is too large for the video card... + if (textureWidth > d3dCaps.MaxTextureWidth) { + // Scale the font size down to fit on the largest possible texture + textureScale = (float)d3dCaps.MaxTextureWidth / (float)textureWidth; + textureWidth = textureHeight = d3dCaps.MaxTextureWidth; + + for(;;) { + // Create a new, smaller font + ourFontHeight = (int) Math.Floor(ourFontHeight * textureScale); + systemFont = new System.Drawing.Font(systemFont.Name, ourFontHeight, systemFont.Style); + + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // If that still doesn't fit, scale down again and continue + textureScale *= 0.9F; + continue; + } + + break; + } + } + + // Release the bitmap used for measuring and create one for drawing + bmp.Dispose(); + bmp = new Bitmap(textureWidth, textureHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Draw the alphabet + PaintAlphabet(g, false); + + // Create a new texture for the font from the bitmap we just created + fontTexture = Texture.FromBitmap(device, bmp, 0, Pool.Managed); + RestoreDeviceObjects(null, null); + } + + + + + /// + /// Restore the font after a device has been reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColoredTextured), MaxNumfontVertices, + device, Usage.WriteOnly | Usage.Dynamic, 0, Pool.Default); + + Surface surf = device.GetRenderTarget( 0 ); + bool bSupportsAlphaBlend = Manager.CheckDeviceFormat(device.DeviceCaps.AdapterOrdinal, + device.DeviceCaps.DeviceType, device.DisplayMode.Format, + Usage.RenderTarget | Usage.QueryPostPixelShaderBlending, ResourceType.Surface, + surf.Description.Format ); + + // Create the state blocks for rendering text + for (int which=0; which < 2; which++) { + device.BeginStateBlock(); + device.SetTexture(0, fontTexture); + + if (isZEnable) + renderState.ZBufferEnable = true; + else + renderState.ZBufferEnable = false; + + if( bSupportsAlphaBlend ) { + renderState.AlphaBlendEnable = true; + renderState.SourceBlend = Blend.SourceAlpha; + renderState.DestinationBlend = Blend.InvSourceAlpha; + } + else { + renderState.AlphaBlendEnable = false; + } + renderState.AlphaTestEnable = true; + renderState.ReferenceAlpha = 0x08; + renderState.AlphaFunction = Compare.GreaterEqual; + renderState.FillMode = FillMode.Solid; + renderState.CullMode = Cull.CounterClockwise; + renderState.StencilEnable = false; + renderState.Clipping = true; + device.ClipPlanes.DisableAll(); + renderState.VertexBlend = VertexBlend.Disable; + renderState.IndexedVertexBlendEnable = false; + renderState.FogEnable = false; + renderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; + textureState0.ColorOperation = TextureOperation.Modulate; + textureState0.ColorArgument1 = TextureArgument.TextureColor; + textureState0.ColorArgument2 = TextureArgument.Diffuse; + textureState0.AlphaOperation = TextureOperation.Modulate; + textureState0.AlphaArgument1 = TextureArgument.TextureColor; + textureState0.AlphaArgument2 = TextureArgument.Diffuse; + textureState0.TextureCoordinateIndex = 0; + textureState0.TextureTransform = TextureTransform.Disable; // REVIEW + textureState1.ColorOperation = TextureOperation.Disable; + textureState1.AlphaOperation = TextureOperation.Disable; + samplerState0.MinFilter = TextureFilter.Point; + samplerState0.MagFilter = TextureFilter.Point; + samplerState0.MipFilter = TextureFilter.None; + + if (which==0) + savedStateBlock = device.EndStateBlock(); + else + drawTextStateBlock = device.EndStateBlock(); + } + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text) { + DrawText(xpos, ypos, color, text, RenderFlags.Filtered); + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text, RenderFlags flags) { + if (text == null) + return; + + // Setup renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.SetTexture(0, fontTexture); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Adjust for character spacing + xpos -= spacingPerChar; + float fStartX = xpos; + + // Fill vertex buffer + int iv = 0; + int dwNumTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / textureScale; + float h = (ty2-ty1) * textureHeight / textureScale; + + int intColor = color.ToArgb(); + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + dwNumTriangles += 2; + + if (dwNumTriangles*3 > (MaxNumfontVertices-6)) { + // Set the data for the vertexbuffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + dwNumTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar); + } + + // Set the data for the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (dwNumTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + Viewport vp = device.Viewport; + float xpos = (x+1.0f)*vp.Width/2; + float ypos = (y+1.0f)*vp.Height/2; + float sz = z; + float rhw = 1.0f; + float fLineHeight = (textureCoords[0,3] - textureCoords[0,1]) * textureHeight; + + // Adjust for character spacing + xpos -= spacingPerChar * (fXScale*vp.Height)/fLineHeight; + float fStartX = xpos; + + // Fill vertex buffer + int numTriangles = 0; + int realColor = color.ToArgb(); + int iv = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += fYScale*vp.Height; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1)*textureWidth; + float h = (ty2-ty1)*textureHeight; + + w *= (fXScale*vp.Height)/fLineHeight; + h *= (fYScale*vp.Height)/fLineHeight; + + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + numTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar) * (fXScale*vp.Height)/fLineHeight; + } + + // Unlock and render the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text) { + this.DrawTextScaled(x,y,z,fXScale, fYScale, color, text, 0); + } + + + + + /// + /// Renders 3D text + /// + public void Render3DText(string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.PositionNormalTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0, VertexInformation.GetFormatSize(CustomVertex.PositionNormalTextured.Format)); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Position for each text element + float x = 0.0f; + float y = 0.0f; + + // Center the text block at the origin + if ((flags & RenderFlags.Centered) != 0) { + System.Drawing.SizeF sz = GetTextExtent(text); + x = -(((float)sz.Width)/10.0f)/2.0f; + y = -(((float)sz.Height)/10.0f)/2.0f; + } + + // Turn off culling for two-sided text + if ((flags & RenderFlags.TwoSided) != 0) + renderState.CullMode = Cull.None; + + // Adjust for character spacing + x -= spacingPerChar / 10.0f; + float fStartX = x; + + // Fill vertex buffer + GraphicsStream strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + int numTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + x = fStartX; + y -= (textureCoords[0,3]-textureCoords[0,1])*textureHeight/10.0f; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / (10.0f * textureScale); + float h = (ty2-ty1) * textureHeight / (10.0f * textureScale); + + if (c != ' ') { + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+0,0), new Vector3(0,0,-1), tx1, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+h,0), new Vector3(0,0,-1), tx2, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.Unlock(); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + numTriangles = 0; + } + } + + x += w - (2 * spacingPerChar) / 10.0f; + } + + // Unlock and render the vertex buffer + vertexBuffer.Unlock(); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Get the dimensions of a text string + /// + private System.Drawing.SizeF GetTextExtent(string text) { + if (null == text || text == string.Empty) + throw new System.ArgumentNullException(); + + float fRowWidth = 0.0f; + float fRowHeight = (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + float fWidth = 0.0f; + float fHeight = fRowHeight; + + foreach (char c in text) { + if (c == '\n') { + fRowWidth = 0.0f; + fHeight += fRowHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float tx2 = textureCoords[c-32,2]; + + fRowWidth += (tx2-tx1)*textureWidth - 2*spacingPerChar; + + if (fRowWidth > fWidth) + fWidth = fRowWidth; + } + + return new System.Drawing.SizeF(fWidth, fHeight); + } + + + + + /// + /// Cleanup any resources being used + /// + public void Dispose(object sender, EventArgs e) { + if (systemFont != null) + systemFont.Dispose(); + + systemFont = null; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/d3dutil.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/d3dutil.cs new file mode 100644 index 0000000..ea2d5a3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/d3dutil.cs @@ -0,0 +1,928 @@ +//----------------------------------------------------------------------------- +// File: D3DUtil.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Windows.Forms; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// Various helper functions for graphics samples +/// +public class GraphicsUtility { + /// + /// Private Constructor + /// + private GraphicsUtility() { + } + + + + /// + /// Initializes a Material structure, setting the diffuse and ambient + /// colors. It does not set emissive or specular colors. + /// + /// The ambient and diffuse color + /// A defined material + public static Direct3D.Material InitMaterial(System.Drawing.Color c) { + Material mtrl = new Material(); + mtrl.Ambient = mtrl.Diffuse = c; + return mtrl; + } + + + + + /// + /// Initializes a light, setting the light position. The + /// diffuse color is set to white; specular and ambient are left as black. + /// + /// Which light to initialize + /// The type + public static void InitLight(Light light, LightType ltType, float x, float y, float z) { + light.Type = ltType; + light.Diffuse = System.Drawing.Color.White; + light.Position = new Vector3(x,y,z); + light.Direction = Vector3.Normalize(light.Position); + light.Range = 1000.0f; + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename, Format format) { + // Get the path to the texture + string path = DXUtil.FindMediaFile(null, textureFilename); + + // Create the texture using D3DX + return TextureLoader.FromFile(device, path, D3DX.Default, D3DX.Default, D3DX.Default, 0, format, + Pool.Managed, Filter.Triangle|Filter.Mirror, + Filter.Triangle|Filter.Mirror, 0); + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename) { + return GraphicsUtility.CreateTexture(device, textureFilename, Format.Unknown); + } + + + + + + /// + /// Returns a view matrix for rendering to a face of a cubemap. + /// + public static Matrix GetCubeMapViewMatrix(CubeMapFace face) { + Vector3 vEyePt = new Vector3(0.0f, 0.0f, 0.0f); + Vector3 vLookDir = new Vector3(); + Vector3 vUpDir = new Vector3(); + + switch (face) { + case CubeMapFace.PositiveX: + vLookDir = new Vector3(1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeX: + vLookDir = new Vector3(-1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.PositiveY: + vLookDir = new Vector3(0.0f, 1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f,-1.0f); + break; + case CubeMapFace.NegativeY: + vLookDir = new Vector3(0.0f,-1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f, 1.0f); + break; + case CubeMapFace.PositiveZ: + vLookDir = new Vector3(0.0f, 0.0f, 1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeZ: + vLookDir = new Vector3(0.0f, 0.0f,-1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + } + + // Set the view transform for this cubemap surface + Matrix matView = Matrix.LookAtLH(vEyePt, vLookDir, vUpDir); + return matView; + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control, float fTrackBallRadius) { + System.Drawing.Point pt = System.Windows.Forms.Cursor.Position; + System.Drawing.Rectangle rc = control.ClientRectangle; + pt = control.PointToClient(pt); + float xpos = (((2.0f * pt.X) / (rc.Right-rc.Left)) - 1); + float ypos = (((2.0f * pt.Y) / (rc.Bottom-rc.Top)) - 1); + float sz; + + if (xpos == 0.0f && ypos == 0.0f) + return new Quaternion(0.0f, 0.0f, 0.0f, 1.0f); + + float d2 = (float)Math.Sqrt(xpos*xpos + ypos*ypos); + + if (d2 < fTrackBallRadius * 0.70710678118654752440) // Inside sphere + sz = (float)Math.Sqrt(fTrackBallRadius*fTrackBallRadius - d2*d2); + else // On hyperbola + sz = (fTrackBallRadius*fTrackBallRadius) / (2.0f*d2); + + // Get two points on trackball's sphere + Vector3 p1 = new Vector3(xpos, ypos, sz); + Vector3 p2 = new Vector3(0.0f, 0.0f, fTrackBallRadius); + + // Get axis of rotation, which is cross product of p1 and p2 + Vector3 axis = Vector3.Cross(p1,p2); + + // Calculate angle for the rotation about that axis + float t = Vector3.Length(Vector3.Subtract(p2,p1)) / (2.0f*fTrackBallRadius); + if (t > +1.0f) t = +1.0f; + if (t < -1.0f) t = -1.0f; + float fAngle = (float)(2.0f * Math.Asin(t)); + + // Convert axis to quaternion + return Quaternion.RotationAxis(axis, fAngle); + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control) { + return GetRotationFromCursor(control, 1.0f); + } + + + + + /// + /// Axis to axis quaternion double angle (no normalization) + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by 2*THETA. + /// + public static Quaternion D3DXQuaternionUnitAxisToUnitAxis2(Vector3 fromVector, Vector3 toVector) { + Vector3 axis = Vector3.Cross(fromVector, toVector); // proportional to sin(theta) + return new Quaternion(axis.X, axis.Y, axis.Z, Vector3.Dot(fromVector, toVector)); + } + + + + + /// + /// Axis to axis quaternion + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by theta. + /// + public static Quaternion D3DXQuaternionAxisToAxis(Vector3 fromVector, Vector3 toVector) { + Vector3 vA = Vector3.Normalize(fromVector), vB = Vector3.Normalize(toVector); + Vector3 vHalf = Vector3.Add(vA,vB); + vHalf = Vector3.Normalize(vHalf); + return GraphicsUtility.D3DXQuaternionUnitAxisToUnitAxis2(vA, vHalf); + } + + + + + /// + /// Gets the number of ColorChanelBits from a format + /// + static public int GetColorChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 8; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 8; + case Format.R5G6B5: + return 5; + case Format.X1R5G5B5: + return 5; + case Format.A1R5G5B5: + return 5; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 2; + case Format.A8R3G3B2: + return 2; + case Format.X4R4G4B4: + return 4; + case Format.A2B10G10R10: + return 10; + case Format.A2R10G10B10: + return 10; + default: + return 0; + } + } + + + + + /// + /// Gets the number of alpha channel bits + /// + static public int GetAlphaChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 0; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 0; + case Format.R5G6B5: + return 0; + case Format.X1R5G5B5: + return 0; + case Format.A1R5G5B5: + return 1; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 0; + case Format.A8R3G3B2: + return 8; + case Format.X4R4G4B4: + return 0; + case Format.A2B10G10R10: + return 2; + case Format.A2R10G10B10: + return 2; + default: + return 0; + } + } + + + + + /// + /// Gets the number of depth bits + /// + static public int GetDepthBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 16; + case DepthFormat.D15S1: + return 15; + case DepthFormat.D24X8: + return 24; + case DepthFormat.D24S8: + return 24; + case DepthFormat.D24X4S4: + return 24; + case DepthFormat.D32: + return 32; + default: + return 0; + } + } + + + + + /// + /// Gets the number of stencil bits + /// + static public int GetStencilBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 0; + case DepthFormat.D15S1: + return 1; + case DepthFormat.D24X8: + return 0; + case DepthFormat.D24S8: + return 8; + case DepthFormat.D24X4S4: + return 4; + case DepthFormat.D32: + return 0; + default: + return 0; + } + } + + + + + /// + /// Assembles and creates a file-based vertex shader + /// + public static VertexShader CreateVertexShader(Device device, string filename) { + GraphicsStream code = null; + string path = null; + + // Get the path to the vertex shader file + path = DXUtil.FindMediaFile(null, filename); + + // Assemble the vertex shader file + code = ShaderLoader.FromFile(path, null, 0); + + // Create the vertex shader + return new VertexShader(device, code); + } + +} + + + + +/// +/// An arc ball class +/// +public class GraphicsArcBall { + private int internalWidth; // ArcBall's window width + private int internalHeight; // ArcBall's window height + private float internalradius; // ArcBall's radius in screen coords + private float internalradiusTranslation; // ArcBall's radius for translating the target + + private Quaternion internaldownQuat; // Quaternion before button down + private Quaternion internalnowQuat; // Composite quaternion for current drag + private Matrix internalrotationMatrix; // Matrix for arcball's orientation + private Matrix internalrotationDelta; // Matrix for arcball's orientation + private Matrix internaltranslationMatrix; // Matrix for arcball's position + private Matrix internaltranslationDelta; // Matrix for arcball's position + private bool internaldragging; // Whether user is dragging arcball + private bool internaluseRightHanded; // Whether to use RH coordinate system + private int saveMouseX = 0; // Saved mouse position + private int saveMouseY = 0; + private Vector3 internalvectorDown; // Button down vector + System.Windows.Forms.Control parent; // parent + + + + + /// + /// Constructor + /// + public GraphicsArcBall(System.Windows.Forms.Control p) { + internaldownQuat = Quaternion.Identity; + internalnowQuat = Quaternion.Identity; + internalrotationMatrix = Matrix.Identity; + internalrotationDelta = Matrix.Identity; + internaltranslationMatrix = Matrix.Identity; + internaltranslationDelta = Matrix.Identity; + internaldragging = false; + internalradiusTranslation = 1.0f; + internaluseRightHanded = false; + + parent = p; + // Hook the events + p.MouseDown += new MouseEventHandler(this.OnContainerMouseDown); + p.MouseUp += new MouseEventHandler(this.OnContainerMouseUp); + p.MouseMove += new MouseEventHandler(this.OnContainerMouseMove); + } + + + + + /// + /// Set the window dimensions + /// + public void SetWindow(int width, int height, float radius) { + // Set ArcBall info + internalWidth = width; + internalHeight = height; + internalradius = radius; + } + + + + + /// + /// Screen coords to a vector + /// + private Vector3 ScreenToVector(int xpos, int ypos) { + // Scale to screen + float x = -(xpos - internalWidth/2) / (internalradius*internalWidth/2); + float y = (ypos - internalHeight/2) / (internalradius*internalHeight/2); + + if (internaluseRightHanded) { + x = -x; + y = -y; + } + + float z = 0.0f; + float mag = x*x + y*y; + + if (mag > 1.0f) { + float scale = 1.0f/(float)Math.Sqrt(mag); + x *= scale; + y *= scale; + } + else + z = (float)Math.Sqrt(1.0f - mag); + + // Return vector + return new Vector3(x, y, z); + } + + + + + /// + /// Fired when the containers mouse button is down + /// + private void OnContainerMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { + // Store off the position of the cursor when the button is pressed + saveMouseX = e.X; + saveMouseY = e.Y; + + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // Start drag mode + internaldragging = true; + internalvectorDown = ScreenToVector(e.X, e.Y); + internaldownQuat = internalnowQuat; + } + } + + + + + /// + /// Fired when the containers mouse button has been released + /// + private void OnContainerMouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // End drag mode + internaldragging = false; + } + } + + + + + /// + /// Fired when the containers mouse is moving + /// + private void OnContainerMouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + if (internaldragging) { + // recompute nowQuat + Vector3 vCur = ScreenToVector(e.X, e.Y); + Quaternion qAxisToAxis = GraphicsUtility.D3DXQuaternionAxisToAxis(internalvectorDown, vCur); + internalnowQuat = internaldownQuat; + internalnowQuat = Quaternion.Multiply(internalnowQuat,qAxisToAxis); + internalrotationDelta = Matrix.RotationQuaternion(qAxisToAxis); + } + else + internalrotationDelta = Matrix.Identity; + + internalrotationMatrix = Matrix.RotationQuaternion(internalnowQuat); + internaldragging = true; + } + + if ((e.Button == System.Windows.Forms.MouseButtons.Right) || (e.Button == System.Windows.Forms.MouseButtons.Middle)) { + // Normalize based on size of window and bounding sphere radius + float fDeltaX = (saveMouseX-e.X) * internalradiusTranslation / internalWidth; + float fDeltaY = (saveMouseY-e.Y) * internalradiusTranslation / internalHeight; + + if (e.Button == System.Windows.Forms.MouseButtons.Right) { + internaltranslationDelta = Matrix.Translation(-2 * fDeltaX, 2 * fDeltaY, 0.0f); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + if (e.Button == System.Windows.Forms.MouseButtons.Middle) { + internaltranslationDelta = Matrix.Translation(0.0f, 0.0f, 5 * fDeltaY); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + + // Store mouse coordinate + saveMouseX = e.X; + saveMouseY = e.Y; + } + } + + #region Various properties of the class + public float Radius { + set { + internalradiusTranslation = value; } + } + public bool RightHanded { + get { return internaluseRightHanded; } + set { internaluseRightHanded = value; } + } + public Matrix RotationMatrix { + get { return internalrotationMatrix; } + } + public Matrix RotationDeltaMatrix { + get { return internalrotationDelta; } + } + public Matrix TranslationMatrix { + get { return internaltranslationMatrix; } + } + public Matrix TranslationDeltaMatrix { + get { return internaltranslationDelta; } + } + public bool IsBeingDragged { + get { return internaldragging; } + } + #endregion +} + + + + +/// +/// Handles our meshes +/// +public class GraphicsMesh : IDisposable { + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + + + + + /// + /// Constructor + /// + /// The initial filename + public GraphicsMesh(string filename) { + fileName = filename; + } + public GraphicsMesh() : this ("CD3DFile_Mesh") {} + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + string strPath = null; + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Find the path for the file, and convert it to ANSI (for the D3DX API) + strPath = DXUtil.FindMediaFile(null, filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(strPath, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + } + + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. Note: because we are passing in + // no flags, the default behavior is to clone into local memory. + localMemoryMesh = systemMemoryMesh.Clone(0, systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(Device device, bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render(Device device) { + Render(device, true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/dinput.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/dinput.cs new file mode 100644 index 0000000..738d110 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/dinput.cs @@ -0,0 +1,98 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + +/// +/// This class is where the DirectInput routines +/// for the application resides. +/// +public class InputClass { + + private const byte msgUp = 0; + private const byte msgDown = 1; + private const byte msgLeft = 2; + private const byte msgRight = 3; + private const byte msgCancelUp = 4; + private const byte msgCancelDown = 5; + private const byte msgCancelLeft = 6; + private const byte msgCancelRight = 7; + private bool pressedUp = false; + private bool pressedDown = false; + private bool pressedLeft = false; + private bool pressedRight = false; + + private Control owner = null; + private Device localDevice = null; + private PlayClass play = null; + + public InputClass(Control owner, PlayClass play) { + this.owner = owner; + this.play = play; + + localDevice = new Device(SystemGuid.Keyboard); + localDevice.SetDataFormat(DeviceDataFormat.Keyboard); + localDevice.SetCooperativeLevel(owner, CooperativeLevelFlags.Foreground | CooperativeLevelFlags.NonExclusive); + } + + public Point GetInputState() { + KeyboardState state = null; + Point p = new Point(0); + + try { + state = localDevice.GetCurrentKeyboardState(); + } + catch(InputException) { + do { + Application.DoEvents(); + try{ localDevice.Acquire(); } + catch (InputLostException) { + continue; } + catch(OtherApplicationHasPriorityException) { + continue; } + + break; + + }while( true ); + } + + if(null == state) + return p; + + if(state[Key.Down]) { + pressedDown = true; + play.WriteMessage(msgDown); + } + else if (pressedDown == true) { + pressedDown = false; + play.WriteMessage(msgCancelDown); + } + if(state[Key.Up]) { + pressedUp = true; + play.WriteMessage(msgUp); + } + else if (pressedUp == true) { + pressedUp = false; + play.WriteMessage(msgCancelUp); + } + if(state[Key.Left]) { + pressedLeft = true; + play.WriteMessage(msgLeft); + } + else if (pressedLeft == true) { + pressedLeft = false; + play.WriteMessage(msgCancelLeft); + } + if(state[Key.Right]) { + pressedRight = true; + play.WriteMessage(msgRight); + } + else if (pressedRight == true) { + pressedRight = false; + play.WriteMessage(msgCancelRight); + } + + return p; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/dplay.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/dplay.cs new file mode 100644 index 0000000..dd2ad03 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/dplay.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + +/// +/// The class that houses DirectPlay code for the application. +/// +public class PlayClass : IDisposable { + private MessageDelegate message = null; + + private GameClass parent = null; + + public Peer peerObject = null; + private ConnectWizard Connect = null; + private ArrayList PlayerList = new ArrayList(); + private int LocalPlayerID = 0; + public Guid AppGuid = new Guid(0x876a3036, 0xffd7, 0x46bc, 0x92, 0x9, 0xb4, 0x2f, 0x61, 0x7b, 0x9b, 0xF1); + + public struct Players { + public int dpnID; + public string Name; + public Players(int id, string n) { + dpnID = id; Name = n; } + } + + public void Dispose() { + peerObject.Dispose(); + } + + public PlayClass(GameClass parent) { + this.parent = parent; + this.peerObject = peerObject; + this.message = new MessageDelegate(parent.MessageArrived); + + peerObject = new Peer(); + // First set up our event handlers (We only need events for the ones we care about) + peerObject.PlayerCreated += new PlayerCreatedEventHandler(this.PlayerCreated); + peerObject.PlayerDestroyed += new PlayerDestroyedEventHandler(this.PlayerDestroyed); + peerObject.HostMigrated += new HostMigratedEventHandler(this.HostMigrated); + peerObject.Receive += new ReceiveEventHandler(this.DataReceived); + peerObject.SessionTerminated += new SessionTerminatedEventHandler(this.SessionTerminated); + + Connect = new ConnectWizard(peerObject, AppGuid, "Step2"); + if (!Connect.StartWizard()) { + MessageBox.Show("DirectPlay initialization was incomplete. Application will terminate."); + throw new DirectXException(); + } + } + + public void WriteMessage(byte msg) { + NetworkPacket packet = new NetworkPacket(); + + packet.Write(msg); + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.Guaranteed); + } + + #region DirectPlayEvents + /// + // These are the events the app will handle + // when DPlay fires them. + /// + private void PlayerCreated(object sender, PlayerCreatedEventArgs dpMessage) { + // Get the PlayerInformation and store it + PlayerInformation dpPeer = peerObject.GetPeerInformation(dpMessage.Message.PlayerID); + Players oPlayer = new Players(dpMessage.Message.PlayerID,dpPeer.Name); + // We lock the data here since it is shared across multiple threads. + lock (PlayerList) { + PlayerList.Add(oPlayer); + } + // Save this player id if it's ourselves + if (dpPeer.Local) + LocalPlayerID = dpMessage.Message.PlayerID; + + } + private void PlayerDestroyed(object sender, PlayerDestroyedEventArgs dpMessage) { + // Remove this player from our list + // We lock the data here since it is shared across multiple threads. + lock (PlayerList) { + foreach (Players player in PlayerList) { + if (dpMessage.Message.PlayerID == player.dpnID) { + PlayerList.Remove(player); + break; + } + } + } + } + private void HostMigrated(object sender, HostMigratedEventArgs dpMessage) { + if (LocalPlayerID == dpMessage.Message.NewHostID) { + // This application instance is the new host, update the UI + parent.Text += " (HOST)"; + } + } + private void DataReceived(object sender, ReceiveEventArgs dpMessage) { + lock(this) { + byte data = (byte)dpMessage.Message.ReceiveData.Read(typeof(byte)); + message(data); + } + } + private void SessionTerminated(object sender, SessionTerminatedEventArgs dpMessage) { + // This session is being terminated, let the user know + if (dpMessage.Message.ResultCode == ResultCode.HostTerminatedSession) + MessageBox.Show("The Host has terminated this session. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + else + MessageBox.Show("The session has been lost. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + + // This will post a message on the main thread to shut down our form + parent.BeginInvoke(new PeerCloseCallback(parent.PeerClose)); + } + #endregion +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step02/main.cs b/Source Code updated 08-12-05/Spacewar3D/Step02/main.cs new file mode 100644 index 0000000..1ed0210 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step02/main.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Container = System.ComponentModel.Container; + + + /// + /// The main windows form for the application. + /// +public class MainClass { + + private GameClass game = null; + private SplashScreen splash = null; + private bool enableNetwork = false; + public bool EnableNetwork { get { return enableNetwork; } set { enableNetwork = value; } } + + private Size gameFormSize; + public Size GameFormSize { get { return gameFormSize; } set { gameFormSize = value; } } + + private bool fullScreen = false; + public bool FullScreen { get { return fullScreen; } set { fullScreen = value; } } + + /// + // Main entry point of the application. + /// + public static void Main() { + MainClass m = new MainClass(); + } + + public MainClass() { + + //display the splash screen and determine network status + splash = new SplashScreen(this); + splash.ShowDialog(); + + try { + game = new GameClass(fullScreen, gameFormSize, enableNetwork); + } + catch(DirectXException) { + return; + } + if( game.CreateGraphicsSample() ) + game.Run(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/App.config b/Source Code updated 08-12-05/Spacewar3D/Step03/App.config new file mode 100644 index 0000000..5bbb96b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/D3DSettingsForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/D3DSettingsForm.cs new file mode 100644 index 0000000..f897a24 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/D3DSettingsForm.cs @@ -0,0 +1,1107 @@ +//----------------------------------------------------------------------------- +// File: D3DSettingsForm.cs +// +// Desc: Application form for setting up user defined display settings +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + + + + + +/// +/// A form to allow the user to change the current D3D settings. +/// +public class D3DSettingsForm : System.Windows.Forms.Form +{ + private D3DEnumeration enumeration; + public D3DSettings settings; // Potential new D3D settings + + private System.Windows.Forms.GroupBox adapterDeviceGroupBox; + private System.Windows.Forms.Label displayAdapterLabel; + private System.Windows.Forms.ComboBox adapterComboBox; + private System.Windows.Forms.Label deviceLabel; + private System.Windows.Forms.ComboBox deviceComboBox; + private System.Windows.Forms.GroupBox modeSettingsGroupBox; + private System.Windows.Forms.RadioButton windowedRadioButton; + private System.Windows.Forms.RadioButton fullscreenRadioButton; + private System.Windows.Forms.Label adapterFormatLabel; + private System.Windows.Forms.ComboBox adapterFormatComboBox; + private System.Windows.Forms.Label resolutionLabel; + private System.Windows.Forms.ComboBox resolutionComboBox; + private System.Windows.Forms.Label refreshRateLabel; + private System.Windows.Forms.ComboBox refreshRateComboBox; + private System.Windows.Forms.GroupBox otherSettingsGroupBox; + private System.Windows.Forms.Label backBufferFormatLabel; + private System.Windows.Forms.ComboBox backBufferFormatComboBox; + private System.Windows.Forms.Label depthStencilBufferLabel; + private System.Windows.Forms.ComboBox depthStencilBufferComboBox; + private System.Windows.Forms.Label multisampleLabel; + private System.Windows.Forms.ComboBox multisampleComboBox; + private System.Windows.Forms.Label vertexProcLabel; + private System.Windows.Forms.ComboBox vertexProcComboBox; + private System.Windows.Forms.Label presentIntervalLabel; + private System.Windows.Forms.ComboBox presentIntervalComboBox; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.ComboBox multisampleQualityComboBox; + private System.Windows.Forms.Label multisampleQualityLabel; + + + + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + + /// + /// Constructor. Pass in an enumeration and the current D3D settings. + /// + public D3DSettingsForm(D3DEnumeration enumerationParam, D3DSettings settingsParam) + { + enumeration = enumerationParam; + settings = settingsParam.Clone(); + + // Required for Windows Form Designer support + InitializeComponent(); + + // Fill adapter combo box. Updating the selected adapter will trigger + // updates of the rest of the dialog. + foreach (GraphicsAdapterInfo adapterInfo in enumeration.AdapterInfoList) + { + adapterComboBox.Items.Add(adapterInfo); + if (adapterInfo.AdapterOrdinal == settings.AdapterOrdinal) + adapterComboBox.SelectedItem = adapterInfo; + } + if (adapterComboBox.SelectedItem == null && adapterComboBox.Items.Count > 0) + adapterComboBox.SelectedIndex = 0; + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) + { + base.Dispose(Disposing); + if (components != null) + components.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.adapterDeviceGroupBox = new System.Windows.Forms.GroupBox(); + this.deviceComboBox = new System.Windows.Forms.ComboBox(); + this.deviceLabel = new System.Windows.Forms.Label(); + this.adapterComboBox = new System.Windows.Forms.ComboBox(); + this.displayAdapterLabel = new System.Windows.Forms.Label(); + this.fullscreenRadioButton = new System.Windows.Forms.RadioButton(); + this.cancelButton = new System.Windows.Forms.Button(); + this.otherSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.multisampleQualityComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleQualityLabel = new System.Windows.Forms.Label(); + this.multisampleComboBox = new System.Windows.Forms.ComboBox(); + this.backBufferFormatComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferLabel = new System.Windows.Forms.Label(); + this.backBufferFormatLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcLabel = new System.Windows.Forms.Label(); + this.presentIntervalComboBox = new System.Windows.Forms.ComboBox(); + this.presentIntervalLabel = new System.Windows.Forms.Label(); + this.resolutionComboBox = new System.Windows.Forms.ComboBox(); + this.windowedRadioButton = new System.Windows.Forms.RadioButton(); + this.resolutionLabel = new System.Windows.Forms.Label(); + this.refreshRateComboBox = new System.Windows.Forms.ComboBox(); + this.adapterFormatLabel = new System.Windows.Forms.Label(); + this.refreshRateLabel = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.modeSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.adapterFormatComboBox = new System.Windows.Forms.ComboBox(); + this.adapterDeviceGroupBox.SuspendLayout(); + this.otherSettingsGroupBox.SuspendLayout(); + this.modeSettingsGroupBox.SuspendLayout(); + this.SuspendLayout(); + // + // adapterDeviceGroupBox + // + this.adapterDeviceGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.deviceComboBox, + this.deviceLabel, + this.adapterComboBox, + this.displayAdapterLabel}); + this.adapterDeviceGroupBox.Location = new System.Drawing.Point(16, 8); + this.adapterDeviceGroupBox.Name = "adapterDeviceGroupBox"; + this.adapterDeviceGroupBox.Size = new System.Drawing.Size(400, 80); + this.adapterDeviceGroupBox.TabIndex = 0; + this.adapterDeviceGroupBox.TabStop = false; + this.adapterDeviceGroupBox.Text = "Adapter and device"; + // + // deviceComboBox + // + this.deviceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.deviceComboBox.DropDownWidth = 121; + this.deviceComboBox.Location = new System.Drawing.Point(160, 48); + this.deviceComboBox.Name = "deviceComboBox"; + this.deviceComboBox.Size = new System.Drawing.Size(232, 21); + this.deviceComboBox.TabIndex = 3; + this.deviceComboBox.SelectedIndexChanged += new System.EventHandler(this.DeviceChanged); + // + // deviceLabel + // + this.deviceLabel.Location = new System.Drawing.Point(8, 48); + this.deviceLabel.Name = "deviceLabel"; + this.deviceLabel.Size = new System.Drawing.Size(152, 23); + this.deviceLabel.TabIndex = 2; + this.deviceLabel.Text = "Render &Device:"; + // + // adapterComboBox + // + this.adapterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterComboBox.DropDownWidth = 121; + this.adapterComboBox.Location = new System.Drawing.Point(160, 24); + this.adapterComboBox.Name = "adapterComboBox"; + this.adapterComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterComboBox.TabIndex = 1; + this.adapterComboBox.SelectedIndexChanged += new System.EventHandler(this.AdapterChanged); + // + // displayAdapterLabel + // + this.displayAdapterLabel.Location = new System.Drawing.Point(8, 24); + this.displayAdapterLabel.Name = "displayAdapterLabel"; + this.displayAdapterLabel.Size = new System.Drawing.Size(152, 23); + this.displayAdapterLabel.TabIndex = 0; + this.displayAdapterLabel.Text = "Display &Adapter:"; + // + // fullscreenRadioButton + // + this.fullscreenRadioButton.Location = new System.Drawing.Point(9, 38); + this.fullscreenRadioButton.Name = "fullscreenRadioButton"; + this.fullscreenRadioButton.Size = new System.Drawing.Size(152, 24); + this.fullscreenRadioButton.TabIndex = 1; + this.fullscreenRadioButton.Text = "&Fullscreen"; + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(248, 464); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.TabIndex = 4; + this.cancelButton.Text = "Cancel"; + // + // otherSettingsGroupBox + // + this.otherSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.multisampleQualityComboBox, + this.multisampleQualityLabel, + this.multisampleComboBox, + this.backBufferFormatComboBox, + this.multisampleLabel, + this.depthStencilBufferLabel, + this.backBufferFormatLabel, + this.depthStencilBufferComboBox, + this.vertexProcComboBox, + this.vertexProcLabel, + this.presentIntervalComboBox, + this.presentIntervalLabel}); + this.otherSettingsGroupBox.Location = new System.Drawing.Point(16, 264); + this.otherSettingsGroupBox.Name = "otherSettingsGroupBox"; + this.otherSettingsGroupBox.Size = new System.Drawing.Size(400, 176); + this.otherSettingsGroupBox.TabIndex = 2; + this.otherSettingsGroupBox.TabStop = false; + this.otherSettingsGroupBox.Text = "Device settings"; + // + // multisampleQualityComboBox + // + this.multisampleQualityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleQualityComboBox.DropDownWidth = 144; + this.multisampleQualityComboBox.Location = new System.Drawing.Point(160, 96); + this.multisampleQualityComboBox.Name = "multisampleQualityComboBox"; + this.multisampleQualityComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleQualityComboBox.TabIndex = 7; + this.multisampleQualityComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleQualityChanged); + // + // multisampleQualityLabel + // + this.multisampleQualityLabel.Location = new System.Drawing.Point(8, 96); + this.multisampleQualityLabel.Name = "multisampleQualityLabel"; + this.multisampleQualityLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleQualityLabel.TabIndex = 6; + this.multisampleQualityLabel.Text = "Multisample &Quality:"; + // + // multisampleComboBox + // + this.multisampleComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleComboBox.DropDownWidth = 144; + this.multisampleComboBox.Location = new System.Drawing.Point(160, 72); + this.multisampleComboBox.Name = "multisampleComboBox"; + this.multisampleComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleComboBox.TabIndex = 5; + this.multisampleComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleTypeChanged); + // + // backBufferFormatComboBox + // + this.backBufferFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.backBufferFormatComboBox.DropDownWidth = 144; + this.backBufferFormatComboBox.Location = new System.Drawing.Point(160, 24); + this.backBufferFormatComboBox.Name = "backBufferFormatComboBox"; + this.backBufferFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.backBufferFormatComboBox.TabIndex = 1; + this.backBufferFormatComboBox.SelectedIndexChanged += new System.EventHandler(this.BackBufferFormatChanged); + // + // multisampleLabel + // + this.multisampleLabel.Location = new System.Drawing.Point(8, 72); + this.multisampleLabel.Name = "multisampleLabel"; + this.multisampleLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleLabel.TabIndex = 4; + this.multisampleLabel.Text = "&Multisample Type:"; + // + // depthStencilBufferLabel + // + this.depthStencilBufferLabel.Location = new System.Drawing.Point(8, 48); + this.depthStencilBufferLabel.Name = "depthStencilBufferLabel"; + this.depthStencilBufferLabel.Size = new System.Drawing.Size(152, 23); + this.depthStencilBufferLabel.TabIndex = 2; + this.depthStencilBufferLabel.Text = "De&pth/Stencil Buffer Format:"; + // + // backBufferFormatLabel + // + this.backBufferFormatLabel.Location = new System.Drawing.Point(8, 24); + this.backBufferFormatLabel.Name = "backBufferFormatLabel"; + this.backBufferFormatLabel.Size = new System.Drawing.Size(152, 23); + this.backBufferFormatLabel.TabIndex = 0; + this.backBufferFormatLabel.Text = "&Back Buffer Format:"; + // + // depthStencilBufferComboBox + // + this.depthStencilBufferComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.depthStencilBufferComboBox.DropDownWidth = 144; + this.depthStencilBufferComboBox.Location = new System.Drawing.Point(160, 48); + this.depthStencilBufferComboBox.Name = "depthStencilBufferComboBox"; + this.depthStencilBufferComboBox.Size = new System.Drawing.Size(232, 21); + this.depthStencilBufferComboBox.TabIndex = 3; + this.depthStencilBufferComboBox.SelectedIndexChanged += new System.EventHandler(this.DepthStencilBufferFormatChanged); + // + // vertexProcComboBox + // + this.vertexProcComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.vertexProcComboBox.DropDownWidth = 121; + this.vertexProcComboBox.Location = new System.Drawing.Point(160, 120); + this.vertexProcComboBox.Name = "vertexProcComboBox"; + this.vertexProcComboBox.Size = new System.Drawing.Size(232, 21); + this.vertexProcComboBox.TabIndex = 9; + this.vertexProcComboBox.SelectedIndexChanged += new System.EventHandler(this.VertexProcessingChanged); + // + // vertexProcLabel + // + this.vertexProcLabel.Location = new System.Drawing.Point(8, 120); + this.vertexProcLabel.Name = "vertexProcLabel"; + this.vertexProcLabel.Size = new System.Drawing.Size(152, 23); + this.vertexProcLabel.TabIndex = 8; + this.vertexProcLabel.Text = "&Vertex Processing:"; + // + // presentIntervalComboBox + // + this.presentIntervalComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.presentIntervalComboBox.DropDownWidth = 121; + this.presentIntervalComboBox.Location = new System.Drawing.Point(160, 144); + this.presentIntervalComboBox.Name = "presentIntervalComboBox"; + this.presentIntervalComboBox.Size = new System.Drawing.Size(232, 21); + this.presentIntervalComboBox.TabIndex = 11; + this.presentIntervalComboBox.SelectedValueChanged += new System.EventHandler(this.PresentIntervalChanged); + // + // presentIntervalLabel + // + this.presentIntervalLabel.Location = new System.Drawing.Point(8, 144); + this.presentIntervalLabel.Name = "presentIntervalLabel"; + this.presentIntervalLabel.Size = new System.Drawing.Size(152, 23); + this.presentIntervalLabel.TabIndex = 10; + this.presentIntervalLabel.Text = "Present &Interval:"; + // + // resolutionComboBox + // + this.resolutionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.resolutionComboBox.DropDownWidth = 144; + this.resolutionComboBox.Location = new System.Drawing.Point(161, 94); + this.resolutionComboBox.MaxDropDownItems = 14; + this.resolutionComboBox.Name = "resolutionComboBox"; + this.resolutionComboBox.Size = new System.Drawing.Size(232, 21); + this.resolutionComboBox.TabIndex = 5; + this.resolutionComboBox.SelectedIndexChanged += new System.EventHandler(this.ResolutionChanged); + // + // windowedRadioButton + // + this.windowedRadioButton.Location = new System.Drawing.Point(9, 14); + this.windowedRadioButton.Name = "windowedRadioButton"; + this.windowedRadioButton.Size = new System.Drawing.Size(152, 24); + this.windowedRadioButton.TabIndex = 0; + this.windowedRadioButton.Text = "&Windowed"; + this.windowedRadioButton.CheckedChanged += new System.EventHandler(this.WindowedFullscreenChanged); + // + // resolutionLabel + // + this.resolutionLabel.Location = new System.Drawing.Point(8, 94); + this.resolutionLabel.Name = "resolutionLabel"; + this.resolutionLabel.Size = new System.Drawing.Size(152, 23); + this.resolutionLabel.TabIndex = 4; + this.resolutionLabel.Text = "&Resolution:"; + // + // refreshRateComboBox + // + this.refreshRateComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.refreshRateComboBox.DropDownWidth = 144; + this.refreshRateComboBox.Location = new System.Drawing.Point(161, 118); + this.refreshRateComboBox.MaxDropDownItems = 14; + this.refreshRateComboBox.Name = "refreshRateComboBox"; + this.refreshRateComboBox.Size = new System.Drawing.Size(232, 21); + this.refreshRateComboBox.TabIndex = 7; + this.refreshRateComboBox.SelectedIndexChanged += new System.EventHandler(this.RefreshRateChanged); + // + // adapterFormatLabel + // + this.adapterFormatLabel.Location = new System.Drawing.Point(8, 72); + this.adapterFormatLabel.Name = "adapterFormatLabel"; + this.adapterFormatLabel.Size = new System.Drawing.Size(152, 23); + this.adapterFormatLabel.TabIndex = 2; + this.adapterFormatLabel.Text = "Adapter F&ormat:"; + // + // refreshRateLabel + // + this.refreshRateLabel.Location = new System.Drawing.Point(8, 118); + this.refreshRateLabel.Name = "refreshRateLabel"; + this.refreshRateLabel.Size = new System.Drawing.Size(152, 23); + this.refreshRateLabel.TabIndex = 6; + this.refreshRateLabel.Text = "R&efresh Rate:"; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(112, 464); + this.okButton.Name = "okButton"; + this.okButton.TabIndex = 3; + this.okButton.Text = "OK"; + // + // modeSettingsGroupBox + // + this.modeSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.adapterFormatLabel, + this.refreshRateLabel, + this.resolutionComboBox, + this.adapterFormatComboBox, + this.resolutionLabel, + this.refreshRateComboBox, + this.windowedRadioButton, + this.fullscreenRadioButton}); + this.modeSettingsGroupBox.Location = new System.Drawing.Point(16, 96); + this.modeSettingsGroupBox.Name = "modeSettingsGroupBox"; + this.modeSettingsGroupBox.Size = new System.Drawing.Size(400, 160); + this.modeSettingsGroupBox.TabIndex = 1; + this.modeSettingsGroupBox.TabStop = false; + this.modeSettingsGroupBox.Text = "Display mode settings"; + // + // adapterFormatComboBox + // + this.adapterFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterFormatComboBox.DropDownWidth = 121; + this.adapterFormatComboBox.Location = new System.Drawing.Point(161, 70); + this.adapterFormatComboBox.MaxDropDownItems = 14; + this.adapterFormatComboBox.Name = "adapterFormatComboBox"; + this.adapterFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterFormatComboBox.TabIndex = 3; + this.adapterFormatComboBox.SelectedValueChanged += new System.EventHandler(this.AdapterFormatChanged); + // + // D3DSettingsForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(438, 512); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.cancelButton, + this.okButton, + this.adapterDeviceGroupBox, + this.modeSettingsGroupBox, + this.otherSettingsGroupBox}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.Name = "D3DSettingsForm"; + this.Text = "Direct3D Settings"; + this.adapterDeviceGroupBox.ResumeLayout(false); + this.otherSettingsGroupBox.ResumeLayout(false); + this.modeSettingsGroupBox.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// Respond to a change of selected adapter by rebuilding the device + /// list. Updating the selected device will trigger updates of the + /// rest of the dialog. + /// + private void AdapterChanged(object sender, System.EventArgs e) + { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + settings.AdapterInfo = adapterInfo; + + // Update device combo box + deviceComboBox.Items.Clear(); + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) + { + deviceComboBox.Items.Add(deviceInfo); + if (deviceInfo.DevType == settings.DevType) + deviceComboBox.SelectedItem = deviceInfo; + } + if (deviceComboBox.SelectedItem == null && deviceComboBox.Items.Count > 0) + deviceComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected device by resetting the + /// fullscreen/windowed radio buttons. Updating these buttons + /// will trigger updates of the rest of the dialog. + /// + private void DeviceChanged(object sender, System.EventArgs e) + { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + settings.DeviceInfo = deviceInfo; + + // Update fullscreen/windowed radio buttons + bool HasWindowedDeviceCombo = false; + bool HasFullscreenDeviceCombo = false; + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) + { + if (deviceCombo.IsWindowed) + HasWindowedDeviceCombo = true; + else + HasFullscreenDeviceCombo = true; + } + windowedRadioButton.Enabled = HasWindowedDeviceCombo; + fullscreenRadioButton.Enabled = HasFullscreenDeviceCombo; + if (settings.IsWindowed && HasWindowedDeviceCombo) + { + windowedRadioButton.Checked = true; + } + else + { + fullscreenRadioButton.Checked = true; + } + WindowedFullscreenChanged(null, null); + } + + + + + /// + /// Respond to a change of windowed/fullscreen state by rebuilding the + /// adapter format list, resolution list, and refresh rate list. + /// Updating the selected adapter format will trigger updates of the + /// rest of the dialog. + /// + private void WindowedFullscreenChanged(object sender, System.EventArgs e) + { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + if (windowedRadioButton.Checked) + { + settings.IsWindowed = true; + settings.WindowedAdapterInfo = adapterInfo; + settings.WindowedDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + adapterFormatComboBox.Items.Add(settings.WindowedDisplayMode.Format); + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = false; + + // Update resolution combo box + resolutionComboBox.Items.Clear(); + resolutionComboBox.Items.Add(FormatResolution(settings.WindowedDisplayMode.Width, + settings.WindowedDisplayMode.Height)); + resolutionComboBox.SelectedIndex = 0; + resolutionComboBox.Enabled = false; + + // Update refresh rate combo box + refreshRateComboBox.Items.Clear(); + refreshRateComboBox.Items.Add(FormatRefreshRate(settings.WindowedDisplayMode.RefreshRate)); + refreshRateComboBox.SelectedIndex = 0; + refreshRateComboBox.Enabled = false; + } + else + { + settings.IsWindowed = false; + settings.FullscreenAdapterInfo = adapterInfo; + settings.FullscreenDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) + { + if (deviceCombo.IsWindowed) + continue; + if (!adapterFormatComboBox.Items.Contains(deviceCombo.AdapterFormat)) + { + adapterFormatComboBox.Items.Add(deviceCombo.AdapterFormat); + if (deviceCombo.AdapterFormat == (settings.IsWindowed ? + settings.WindowedDisplayMode.Format : settings.FullscreenDisplayMode.Format)) + { + adapterFormatComboBox.SelectedItem = deviceCombo.AdapterFormat; + } + } + } + if (adapterFormatComboBox.SelectedItem == null && adapterFormatComboBox.Items.Count > 0) + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = true; + + // Update resolution combo box + resolutionComboBox.Enabled = true; + + // Update refresh rate combo box + refreshRateComboBox.Enabled = true; + } + } + + + + + /// + /// Converts the given width and height into a formatted string + /// + private string FormatResolution(int width, int height) + { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} by {1}", width, height); + return sb.ToString(); + } + + + + + /// + /// Converts the given refresh rate into a formatted string + /// + private string FormatRefreshRate(int refreshRate) + { + if (refreshRate == 0) + { + return "Default Rate"; + } + else + { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} Hz", refreshRate); + return sb.ToString(); + } + } + + + + + /// + /// Respond to a change of selected adapter format by rebuilding the + /// resolution list and back buffer format list. Updating the selected + /// resolution and back buffer format will trigger updates of the rest + /// of the dialog. + /// + private void AdapterFormatChanged(object sender, System.EventArgs e) + { + if (!windowedRadioButton.Checked) + { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + settings.FullscreenDisplayMode.Format = adapterFormat; + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + + resolutionComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) + { + if (displayMode.Format == adapterFormat) + { + string resolutionString = FormatResolution(displayMode.Width, displayMode.Height); + if (!resolutionComboBox.Items.Contains(resolutionString)) + { + resolutionComboBox.Items.Add(resolutionString); + if (settings.FullscreenDisplayMode.Width == displayMode.Width && + settings.FullscreenDisplayMode.Height == displayMode.Height) + { + resolutionComboBox.SelectedItem = resolutionString; + } + } + } + } + if (resolutionComboBox.SelectedItem == null && resolutionComboBox.Items.Count > 0) + resolutionComboBox.SelectedIndex = 0; + } + + // Update backbuffer format combo box + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + backBufferFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) + { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == settings.DisplayMode.Format) + { + if (!backBufferFormatComboBox.Items.Contains(deviceCombo.BackBufferFormat)) + { + backBufferFormatComboBox.Items.Add(deviceCombo.BackBufferFormat); + if (deviceCombo.BackBufferFormat == settings.BackBufferFormat) + backBufferFormatComboBox.SelectedItem = deviceCombo.BackBufferFormat; + } + } + } + if (backBufferFormatComboBox.SelectedItem == null && backBufferFormatComboBox.Items.Count > 0) + backBufferFormatComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected resolution by rebuilding the + /// refresh rate list. + /// + private void ResolutionChanged(object sender, System.EventArgs e) + { + if (settings.IsWindowed) + return; + + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + + // Update settings with new resolution + string resolution = (string)resolutionComboBox.SelectedItem; + string[] resolutionSplitStringArray = resolution.Split(); + int width = int.Parse(resolutionSplitStringArray[0]); + int height = int.Parse(resolutionSplitStringArray[2]); + settings.FullscreenDisplayMode.Width = width; + settings.FullscreenDisplayMode.Height = height; + + // Update refresh rate list based on new resolution + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + refreshRateComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) + { + if (displayMode.Format == adapterFormat && + displayMode.Width == width && + displayMode.Height == height) + { + string refreshRateString = FormatRefreshRate(displayMode.RefreshRate); + if (!refreshRateComboBox.Items.Contains(refreshRateString)) + { + refreshRateComboBox.Items.Add(refreshRateString); + if (settings.FullscreenDisplayMode.RefreshRate == displayMode.RefreshRate) + refreshRateComboBox.SelectedItem = refreshRateString; + } + } + } + if (refreshRateComboBox.SelectedItem == null && refreshRateComboBox.Items.Count > 0) + refreshRateComboBox.SelectedIndex = refreshRateComboBox.Items.Count - 1; + } + + + + + /// + /// Respond to a change of selected refresh rate. + /// + private void RefreshRateChanged(object sender, System.EventArgs e) + { + if (settings.IsWindowed) + return; + + // Update settings with new refresh rate + string refreshRateString = (string)refreshRateComboBox.SelectedItem; + int refreshRate = 0; + if (refreshRateString != "Default Rate") + { + string[] refreshRateSplitStringArray = refreshRateString.Split(); + refreshRate = int.Parse(refreshRateSplitStringArray[0]); + } + settings.FullscreenDisplayMode.RefreshRate = refreshRate; + } + + + + + /// + /// Respond to a change of selected back buffer format by rebuilding + /// the depth/stencil format list, multisample type list, and vertex + /// processing type list. + /// + private void BackBufferFormatChanged(object sender, System.EventArgs e) + { + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + Format backBufferFormat = (Format)backBufferFormatComboBox.SelectedItem; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) + { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == adapterFormat && + deviceCombo.BackBufferFormat == backBufferFormat) + { + deviceCombo.BackBufferFormat = backBufferFormat; + settings.DeviceCombo = deviceCombo; + + depthStencilBufferComboBox.Items.Clear(); + if (enumeration.AppUsesDepthBuffer) + { + foreach (DepthFormat format in deviceCombo.DepthStencilFormatList) + { + depthStencilBufferComboBox.Items.Add(format); + if (format == settings.DepthStencilBufferFormat) + depthStencilBufferComboBox.SelectedItem = format; + } + if (depthStencilBufferComboBox.SelectedItem == null && depthStencilBufferComboBox.Items.Count > 0) + depthStencilBufferComboBox.SelectedIndex = 0; + } + else + { + depthStencilBufferComboBox.Enabled = false; + depthStencilBufferComboBox.Items.Add("(not used)"); + depthStencilBufferComboBox.SelectedIndex = 0; + } + + vertexProcComboBox.Items.Clear(); + foreach (VertexProcessingType vpt in deviceCombo.VertexProcessingTypeList) + { + vertexProcComboBox.Items.Add(vpt); + if (vpt == settings.VertexProcessingType) + vertexProcComboBox.SelectedItem = vpt; + } + if (vertexProcComboBox.SelectedItem == null && vertexProcComboBox.Items.Count > 0) + vertexProcComboBox.SelectedIndex = 0; + + presentIntervalComboBox.Items.Clear(); + foreach (PresentInterval pi in deviceCombo.PresentIntervalList) + { + presentIntervalComboBox.Items.Add(pi); + if (pi == settings.PresentInterval) + presentIntervalComboBox.SelectedItem = pi; + } + if (presentIntervalComboBox.SelectedItem == null && presentIntervalComboBox.Items.Count > 0) + presentIntervalComboBox.SelectedIndex = 0; + + break; + } + } + } + + + + + /// + /// Respond to a change of selected depth/stencil buffer format. + /// + private void DepthStencilBufferFormatChanged(object sender, System.EventArgs e) + { + if (enumeration.AppUsesDepthBuffer) + settings.DepthStencilBufferFormat = (DepthFormat)depthStencilBufferComboBox.SelectedItem; + + multisampleComboBox.Items.Clear(); + foreach (MultiSampleType msType in settings.DeviceCombo.MultiSampleTypeList) + { + // Check for DS/MS conflict + bool conflictFound = false; + foreach (DepthStencilMultiSampleConflict DSMSConflict in settings.DeviceCombo.DepthStencilMultiSampleConflictList) + { + if (DSMSConflict.DepthStencilFormat == settings.DepthStencilBufferFormat && + DSMSConflict.MultiSampleType == msType) + { + conflictFound = true; + break; + } + } + if (!conflictFound) + { + multisampleComboBox.Items.Add(msType); + if (msType == settings.MultisampleType) + multisampleComboBox.SelectedItem = msType; + } + } + if (multisampleComboBox.SelectedItem == null && multisampleComboBox.Items.Count > 0) + multisampleComboBox.SelectedIndex = 0; + + } + + + + + /// + /// Respond to a change of selected multisample type. + /// + private void MultisampleTypeChanged(object sender, System.EventArgs e) + { + settings.MultisampleType = (MultiSampleType)multisampleComboBox.SelectedItem; + + // Find current max multisample quality + int maxQuality = 0; + DeviceCombo deviceCombo = settings.DeviceCombo; + for (int i = 0; i < deviceCombo.MultiSampleQualityList.Count; i++) + { + if ((MultiSampleType)deviceCombo.MultiSampleTypeList[i] == settings.MultisampleType) + { + maxQuality = (int)deviceCombo.MultiSampleQualityList[i]; + break; + } + } + + // Update multisample quality list based on new type + multisampleQualityComboBox.Items.Clear(); + for (int iLevel = 0; iLevel < maxQuality; iLevel++) + { + multisampleQualityComboBox.Items.Add(iLevel); + if (settings.MultisampleQuality == iLevel) + multisampleQualityComboBox.SelectedItem = iLevel; + } + if (multisampleQualityComboBox.SelectedItem == null && multisampleQualityComboBox.Items.Count > 0) + multisampleQualityComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected multisample quality. + /// + private void MultisampleQualityChanged(object sender, System.EventArgs e) + { + settings.MultisampleQuality = (int)multisampleQualityComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void VertexProcessingChanged(object sender, System.EventArgs e) + { + settings.VertexProcessingType = (VertexProcessingType)vertexProcComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void PresentIntervalChanged(object sender, System.EventArgs e) + { + settings.PresentInterval = (PresentInterval)presentIntervalComboBox.SelectedItem; + } +} + + +/// +/// Current D3D settings: adapter, device, mode, formats, etc. +/// +public class D3DSettings +{ + public bool IsWindowed; + + public GraphicsAdapterInfo WindowedAdapterInfo; + public GraphicsDeviceInfo WindowedDeviceInfo; + public DeviceCombo WindowedDeviceCombo; + public DisplayMode WindowedDisplayMode; // not changable by the user + public DepthFormat WindowedDepthStencilBufferFormat; + public MultiSampleType WindowedMultisampleType; + public int WindowedMultisampleQuality; + public VertexProcessingType WindowedVertexProcessingType; + public PresentInterval WindowedPresentInterval; + public int WindowedWidth; + public int WindowedHeight; + + public GraphicsAdapterInfo FullscreenAdapterInfo; + public GraphicsDeviceInfo FullscreenDeviceInfo; + public DeviceCombo FullscreenDeviceCombo; + public DisplayMode FullscreenDisplayMode; // changable by the user + public DepthFormat FullscreenDepthStencilBufferFormat; + public MultiSampleType FullscreenMultisampleType; + public int FullscreenMultisampleQuality; + public VertexProcessingType FullscreenVertexProcessingType; + public PresentInterval FullscreenPresentInterval; + + + + + /// + /// The adapter information + /// + public GraphicsAdapterInfo AdapterInfo + { + get { return IsWindowed ? WindowedAdapterInfo : FullscreenAdapterInfo; } + set { if (IsWindowed) WindowedAdapterInfo = value; else FullscreenAdapterInfo = value; } + } + + + + + /// + /// The device information + /// + public GraphicsDeviceInfo DeviceInfo + { + get { return IsWindowed ? WindowedDeviceInfo : FullscreenDeviceInfo; } + set { if (IsWindowed) WindowedDeviceInfo = value; else FullscreenDeviceInfo = value; } + } + + + + + /// + /// The device combo + /// + public DeviceCombo DeviceCombo + { + get { return IsWindowed ? WindowedDeviceCombo : FullscreenDeviceCombo; } + set { if (IsWindowed) WindowedDeviceCombo = value; else FullscreenDeviceCombo = value; } + } + + + + + /// + /// The adapters ordinal + /// + public int AdapterOrdinal + { + get { return DeviceCombo.AdapterOrdinal; } + } + + + + + /// + /// The type of device this is + /// + public DeviceType DevType + { + get { return DeviceCombo.DevType; } + } + + + + + /// + /// The back buffers format + /// + public Format BackBufferFormat + { + get { return DeviceCombo.BackBufferFormat; } + } + + + + + /// + /// The display mode + /// + public DisplayMode DisplayMode + { + get { return IsWindowed ? WindowedDisplayMode : FullscreenDisplayMode; } + set { if (IsWindowed) WindowedDisplayMode = value; else FullscreenDisplayMode = value; } + } + + + + + /// + /// The Depth stencils format + /// + public DepthFormat DepthStencilBufferFormat + { + get { return IsWindowed ? WindowedDepthStencilBufferFormat : FullscreenDepthStencilBufferFormat; } + set { if (IsWindowed) WindowedDepthStencilBufferFormat = value; else FullscreenDepthStencilBufferFormat = value; } + } + + + + + /// + /// The multisample type + /// + public MultiSampleType MultisampleType + { + get { return IsWindowed ? WindowedMultisampleType : FullscreenMultisampleType; } + set { if (IsWindowed) WindowedMultisampleType = value; else FullscreenMultisampleType = value; } + } + + + + + /// + /// The multisample quality + /// + public int MultisampleQuality + { + get { return IsWindowed ? WindowedMultisampleQuality : FullscreenMultisampleQuality; } + set { if (IsWindowed) WindowedMultisampleQuality = value; else FullscreenMultisampleQuality = value; } + } + + + + + /// + /// The vertex processing type + /// + public VertexProcessingType VertexProcessingType + { + get { return IsWindowed ? WindowedVertexProcessingType : FullscreenVertexProcessingType; } + set { if (IsWindowed) WindowedVertexProcessingType = value; else FullscreenVertexProcessingType = value; } + } + + + + + /// + /// The presentation interval + /// + public PresentInterval PresentInterval + { + get { return IsWindowed ? WindowedPresentInterval : FullscreenPresentInterval; } + set { if (IsWindowed) WindowedPresentInterval = value; else FullscreenPresentInterval = value; } + } + + + + + /// + /// Clone the d3d settings class + /// + public D3DSettings Clone() + { + return (D3DSettings)MemberwiseClone(); + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/D3DSettingsForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step03/D3DSettingsForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/D3DSettingsForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect.cs new file mode 100644 index 0000000..3f0e9e6 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect.cs @@ -0,0 +1,272 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; +using System.Runtime.InteropServices; + + + + +/// +/// The connection wizard will allow our users to pick a service provider, +/// and then connect to an existing application, or create a new one as the host. +/// +public class ConnectWizard +{ + private Peer peerObject; + private Address deviceAddress; + + private ChooseServiceProviderForm serviceProviderForm; + private CreateJoinForm createJoinForm; + + private Guid serviceProviderGuid; + private string username; + private string samplename; + private bool isInSession = false; + private bool isHost = false; + private int port = 0; + + private Guid applicationGuid; + + + + + /// + /// Constructor + /// + /// + /// + /// + public ConnectWizard(Peer peer, Guid application, string sampleName) + { + peerObject = peer; + applicationGuid = application; + samplename = sampleName; + } + + + + + /// + /// The guid for the current service provider + /// + public Guid ServiceProvider + { + get + { return serviceProviderGuid; } + set + { serviceProviderGuid = value; } + } + + + + + /// + /// The game's default port number + /// + public int DefaultPort + { + get + { return port; } + set + { port = value; } + } + + + + + /// + /// Am I the host + /// + public bool IsHost + { + get + { return isHost; } + set + { isHost = value; } + } + + + + + /// + /// The username + /// + public string Username + { + get + { return username; } + set + { username = value; } + } + + + + + /// + /// The sample name + /// + public string SampleName + { + get + { return samplename; } + } + + + + + /// + /// The applications guid + /// + public Guid ApplicationGuid + { + get + { return applicationGuid; } + } + + + + + /// + /// Are we in a session + /// + public bool InSession + { + get { return isInSession; } + set { isInSession = value; } + } + + + + + /// + /// Returns true if the given provider requires a port component + /// + /// ServiceProvider Guid + /// + static public bool ProviderRequiresPort(Guid provider) + { + return (provider != Address.ServiceProviderSerial && + provider != Address.ServiceProviderModem && + provider != Address.ServiceProviderBlueTooth); + } + + + + + /// + /// Handler for when our form is disposed + /// + public void FormDisposed(object sender, EventArgs e) + { + if (sender == createJoinForm) + createJoinForm = null; + + if (sender == serviceProviderForm) + serviceProviderForm = null; + } + + + + + /// + /// Set the user information + /// + public void SetUserInfo() + { + //Before we call host, let's actually call SetPeerInformation + PlayerInformation myinformation = new PlayerInformation(); + myinformation.Name = username; + + peerObject.SetPeerInformation(myinformation, SyncFlags.PeerInformation); + } + + + + + /// + /// Show the service providers form + /// + /// True if a service provider was picked, false otherwise + public bool DoShowServiceProviders() + { + if (serviceProviderForm == null) + { + username = null; + serviceProviderForm = new ChooseServiceProviderForm(peerObject,this); + serviceProviderForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (serviceProviderForm.ShowDialog() == DialogResult.OK) + return true; + + // The didn't hit ok + return false; + } + + + + + /// + /// Show the create or join screen + /// + /// True if we will be in a session, false otherwise + public bool DoCreateJoinGame() + { + if (deviceAddress != null) + deviceAddress.Dispose(); + + deviceAddress = new Address(); + + if (createJoinForm != null) + createJoinForm.Dispose(); + + createJoinForm = new CreateJoinForm(peerObject, deviceAddress, this); + createJoinForm.Disposed += new System.EventHandler(this.FormDisposed); + + //Set the address's service provider (this will be the device address) + deviceAddress.ServiceProvider = serviceProviderGuid; + DialogResult drCreateJoin = createJoinForm.ShowDialog(); + if (drCreateJoin == DialogResult.Cancel) + return false; + + this.isHost = (drCreateJoin == DialogResult.Yes); + return true; + + } + + + + + /// + /// Start the wizard + /// + /// True if we are in a session, false otherwise + public bool StartWizard() + { + isInSession = false; + + while (this.DoShowServiceProviders()) + { + //Now let's create a game or join a session + if (this.DoCreateJoinGame()) + { + // A game has been created or joined now, set our flag + isInSession = true; + break; + } + } + return isInSession; + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_AddressForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_AddressForm.cs new file mode 100644 index 0000000..1ddb1c8 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_AddressForm.cs @@ -0,0 +1,220 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_AddressForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// Summary description for AddressForm. +/// +public class AddressForm : System.Windows.Forms.Form +{ + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox hostnameTextBox; + private System.Windows.Forms.TextBox portTextBox; + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + /// + /// Constructor + /// + public AddressForm( int defaultPort ) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // Set default port value + Port = defaultPort; + } + + + + + /// + /// The remote port on which to connect + /// + public int Port + { + get + { + int port = 0; + + try + { + port = int.Parse(portTextBox.Text); + } + catch {} + + return port; + } + set + { + if( value > 0 ) + portTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Remote hostname + /// + public string Hostname + { + get + { return hostnameTextBox.Text; } + set + { hostnameTextBox.Text = value; } + } + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) + { + if( disposing ) + { + if(components != null) + { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.hostnameTextBox = new System.Windows.Forms.TextBox(); + this.portTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(248, 48); + this.label1.TabIndex = 0; + this.label1.Text = "Please enter the optional components of the remote session address. If set blank," + + " DirectPlay will attempt to search the local network."; + // + // okButton + // + this.okButton.Location = new System.Drawing.Point(104, 144); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(72, 24); + this.okButton.TabIndex = 1; + this.okButton.Text = "&OK"; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(184, 144); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(72, 24); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "&Cancel"; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(32, 80); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(100, 16); + this.label2.TabIndex = 3; + this.label2.Text = "Hostname"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(160, 80); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 16); + this.label3.TabIndex = 4; + this.label3.Text = "Port"; + // + // hostnameTextBox + // + this.hostnameTextBox.Location = new System.Drawing.Point(32, 96); + this.hostnameTextBox.Name = "hostnameTextBox"; + this.hostnameTextBox.Size = new System.Drawing.Size(120, 20); + this.hostnameTextBox.TabIndex = 5; + this.hostnameTextBox.Text = ""; + // + // portTextBox + // + this.portTextBox.Location = new System.Drawing.Point(160, 96); + this.portTextBox.Name = "portTextBox"; + this.portTextBox.Size = new System.Drawing.Size(56, 20); + this.portTextBox.TabIndex = 6; + this.portTextBox.Text = ""; + // + // AddressForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(264, 176); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.portTextBox, + this.hostnameTextBox, + this.label3, + this.label2, + this.cancelButton, + this.okButton, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AddressForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Remote Address"; + this.ResumeLayout(false); + + } + #endregion + + private void okButton_Click(object sender, System.EventArgs e) + { + DialogResult = DialogResult.OK; + } + + private void cancelButton_Click(object sender, System.EventArgs e) + { + DialogResult = DialogResult.Cancel; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_AddressForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_AddressForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_AddressForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_CreateForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_CreateForm.cs new file mode 100644 index 0000000..56dfcd1 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_CreateForm.cs @@ -0,0 +1,363 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_CreateForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will allow you to create a new session, and set certain properties +/// of the session. +/// +public class CreateSessionForm : System.Windows.Forms.Form +{ + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.TextBox txtSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton notSignedRadio; + private System.Windows.Forms.RadioButton fullSignedRadio; + private System.Windows.Forms.RadioButton fastSignedRadio; + private System.Windows.Forms.CheckBox migrateHostCheckBox; + private System.Windows.Forms.CheckBox useDPNSVRCheckBox; + private System.Windows.Forms.TextBox localPortTextBox; + private System.Windows.Forms.Label localPortLabel; + private System.Windows.Forms.Button btnCancel; + + + + /// + /// Constructor + /// + public CreateSessionForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + peer = peerObject; + this.connectionWizard = connectionWizard; + deviceAddress = addressObject; + txtSession.Text = null; + this.Text = connectionWizard.SampleName + " - " + this.Text; + //Get the default session from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) + { + // Get session name + txtSession.Text = (string)regKey.GetValue("DirectPlaySessionName", null); + + // Get host migration option + if (regKey.GetValue("DirectPlayMigrateHost",null) != null) + { + migrateHostCheckBox.Checked = ((int)regKey.GetValue("DirectPlayMigrateHost",1)==1); + } + + + // Get session signing option + if (regKey.GetValue("DirectPlaySessionSigning",null) != null) + { + if ("Full" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fullSignedRadio.Checked = true; + else if ("Fast" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fastSignedRadio.Checked = true; + else + notSignedRadio.Checked = true; + } + + regKey.Close(); + } + + // Set default port value and hide port UI if provider doesn't use them + Port = connectionWizard.DefaultPort; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + { + localPortTextBox.Hide(); + localPortLabel.Hide(); + } + } + + + + /// + /// The port on which to host + /// + public int Port + { + get + { + int port = 0; + + try + { + port = int.Parse(localPortTextBox.Text); + } + catch {} + + return port; + } + set + { + if( value > 0 ) + localPortTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) + { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.txtSession = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.fullSignedRadio = new System.Windows.Forms.RadioButton(); + this.fastSignedRadio = new System.Windows.Forms.RadioButton(); + this.notSignedRadio = new System.Windows.Forms.RadioButton(); + this.migrateHostCheckBox = new System.Windows.Forms.CheckBox(); + this.useDPNSVRCheckBox = new System.Windows.Forms.CheckBox(); + this.localPortLabel = new System.Windows.Forms.Label(); + this.localPortTextBox = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // txtSession + // + this.txtSession.Location = new System.Drawing.Point(96, 24); + this.txtSession.Name = "txtSession"; + this.txtSession.Size = new System.Drawing.Size(176, 20); + this.txtSession.TabIndex = 3; + this.txtSession.Text = ""; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(288, 12); + this.label1.TabIndex = 2; + this.label1.Text = "Session Name:"; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(128, 168); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(208, 168); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + // + // groupBox1 + // + this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] { + this.fullSignedRadio, + this.fastSignedRadio, + this.notSignedRadio}); + this.groupBox1.Location = new System.Drawing.Point(16, 64); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(112, 88); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Session Signing"; + // + // fullSignedRadio + // + this.fullSignedRadio.Location = new System.Drawing.Point(18, 22); + this.fullSignedRadio.Name = "fullSignedRadio"; + this.fullSignedRadio.Size = new System.Drawing.Size(80, 16); + this.fullSignedRadio.TabIndex = 9; + this.fullSignedRadio.Text = "Full signed"; + // + // fastSignedRadio + // + this.fastSignedRadio.Checked = true; + this.fastSignedRadio.Location = new System.Drawing.Point(18, 41); + this.fastSignedRadio.Name = "fastSignedRadio"; + this.fastSignedRadio.Size = new System.Drawing.Size(88, 16); + this.fastSignedRadio.TabIndex = 8; + this.fastSignedRadio.TabStop = true; + this.fastSignedRadio.Text = "Fast signed"; + // + // notSignedRadio + // + this.notSignedRadio.Location = new System.Drawing.Point(18, 55); + this.notSignedRadio.Name = "notSignedRadio"; + this.notSignedRadio.Size = new System.Drawing.Size(72, 24); + this.notSignedRadio.TabIndex = 10; + this.notSignedRadio.Text = "Disabled"; + // + // migrateHostCheckBox + // + this.migrateHostCheckBox.Checked = true; + this.migrateHostCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.migrateHostCheckBox.Location = new System.Drawing.Point(144, 64); + this.migrateHostCheckBox.Name = "migrateHostCheckBox"; + this.migrateHostCheckBox.Size = new System.Drawing.Size(136, 24); + this.migrateHostCheckBox.TabIndex = 11; + this.migrateHostCheckBox.Text = "Enable Host Migration"; + // + // useDPNSVRCheckBox + // + this.useDPNSVRCheckBox.Location = new System.Drawing.Point(144, 84); + this.useDPNSVRCheckBox.Name = "useDPNSVRCheckBox"; + this.useDPNSVRCheckBox.Size = new System.Drawing.Size(136, 24); + this.useDPNSVRCheckBox.TabIndex = 12; + this.useDPNSVRCheckBox.Text = "Use DPNSVR"; + // + // localPortLabel + // + this.localPortLabel.Location = new System.Drawing.Point(152, 122); + this.localPortLabel.Name = "localPortLabel"; + this.localPortLabel.Size = new System.Drawing.Size(64, 17); + this.localPortLabel.TabIndex = 13; + this.localPortLabel.Text = "Local Port:"; + // + // localPortTextBox + // + this.localPortTextBox.Location = new System.Drawing.Point(216, 120); + this.localPortTextBox.Name = "localPortTextBox"; + this.localPortTextBox.Size = new System.Drawing.Size(56, 20); + this.localPortTextBox.TabIndex = 14; + this.localPortTextBox.Text = ""; + // + // CreateSessionForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(290, 200); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.localPortTextBox, + this.localPortLabel, + this.useDPNSVRCheckBox, + this.migrateHostCheckBox, + this.txtSession, + this.label1, + this.groupBox1, + this.btnOK, + this.btnCancel}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.HelpButton = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateSessionForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Create a Session"; + this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.CreateSessionForm_HelpRequested); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// We are ready to create a session. Ensure the data is valid + /// then create the session + /// + private void btnOK_Click(object sender, System.EventArgs e) + { + ApplicationDescription dpApp; + if ((txtSession.Text == null) || (txtSession.Text == "")) + { + MessageBox.Show(this,"Please enter a session name before clicking OK.","No sessionname",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) + { + regKey.SetValue("DirectPlaySessionName", txtSession.Text); + if (migrateHostCheckBox.Checked) + regKey.SetValue("DirectPlayMigrateHost",1); + else + regKey.SetValue("DirectPlayMigrateHost",0); + + if (fastSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Fast"); + else if (fullSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Full"); + else + regKey.SetValue("DirectPlaySessionSigning","Disabled"); + regKey.Close(); + } + + dpApp = new ApplicationDescription(); + dpApp.GuidApplication = connectionWizard.ApplicationGuid; + dpApp.SessionName = txtSession.Text; + dpApp.Flags = 0; + + if (migrateHostCheckBox.Checked) + dpApp.Flags |= SessionFlags.MigrateHost; + + if (!useDPNSVRCheckBox.Checked) + dpApp.Flags |= SessionFlags.NoDpnServer; + + if (fastSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FastSigned; + else if (fullSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FullSigned; + + // Specify the port number if available + if (ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + { + if (Port > 0) + deviceAddress.AddComponent(Address.KeyPort, Port); + } + + connectionWizard.SetUserInfo(); + // Host a game on deviceAddress as described by dpApp + // HostFlags.OkToQueryForAddressing allows DirectPlay to prompt the user + // using a dialog box for any device address information that is missing + peer.Host(dpApp,deviceAddress,HostFlags.OkToQueryForAddressing); + this.DialogResult = DialogResult.OK; + } + + private void CreateSessionForm_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent) + { + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_CreateForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_CreateForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_CreateForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_JoinForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_JoinForm.cs new file mode 100644 index 0000000..0b9fe7a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_JoinForm.cs @@ -0,0 +1,519 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_JoinForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will search for existing running samples and allow you to join them or will +/// allow you to create your own session as a host +/// +public class CreateJoinForm : System.Windows.Forms.Form +{ + private const int EnumExpireThreshold = 2000; + private bool amJoining = false; + + + + + /// + /// Hold our information of hosts we found + /// + private struct FindHostsResponseInformation + { + public int LastFoundTime; + public ApplicationDescription ApplicationDesc; + public int RoundTripLatencyMs; + public Address sender; + public Address device; + public override string ToString() + { + if (ApplicationDesc.MaxPlayers > 0) + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + "/" + ApplicationDesc.MaxPlayers + ") (" + RoundTripLatencyMs + "ms)"; + else + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + ") (" + RoundTripLatencyMs + "ms)"; + } + }; + + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + private Address hostAddress = null; + private bool isSearching = false; + private int findHostHandle = 0; + private CreateSessionForm createSessionForm = null; + private ResultCode resultCode; + private ArrayList foundHosts = new ArrayList(); + private bool isConnected = false; + private ManualResetEvent connectEvent = null; + private System.Timers.Timer updateListTimer = null; + private System.Timers.Timer connectTimer = null; + + private System.Windows.Forms.ListBox lstSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnSearch; + private System.Windows.Forms.Button btnJoin; + private System.Windows.Forms.Button btnCreate; + + + + + /// + /// Constructor + /// + public CreateJoinForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + deviceAddress = addressObject; + + //Set up the event handlers + peer.FindHostResponse += new FindHostResponseEventHandler(FindHostResponseMessage); + peer.ConnectComplete += new ConnectCompleteEventHandler(ConnectResult); + peer.AsyncOperationComplete += new AsyncOperationCompleteEventHandler(CancelAsync); + + //Set up our timer + updateListTimer = new System.Timers.Timer(300); // A 300 ms interval + updateListTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.UpdateTimer); + updateListTimer.SynchronizingObject = this; + updateListTimer.Start(); + //Set up our connect timer + connectTimer = new System.Timers.Timer(100); // A 100ms interval + connectTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.ConnectTimer); + connectTimer.SynchronizingObject = this; + // Set up our connect event + connectEvent = new ManualResetEvent(false); + + } + + + + + /// + /// An asynchronous operation was cancelled + /// + private void CancelAsync(object sender, AsyncOperationCompleteEventArgs e) + { + if (e.Message.AsyncOperationHandle == findHostHandle) + { + findHostHandle = 0; + btnSearch.Text = "Start Search"; + isSearching = false; + btnCreate.Enabled = true; + btnSearch.Enabled = true; + } + } + + + + + /// + /// A host was found and responded to our query + /// + private void FindHostResponseMessage(object sender, FindHostResponseEventArgs dpMessage) + { + // Now we need to add this to our list of available sessions + SessionAdd(dpMessage.Message); + } + + + + + /// + /// Add this session to our list + /// + /// + private void SessionAdd(FindHostsResponseMessage dpMessage) + { + FindHostsResponseInformation dpInfo = new FindHostsResponseInformation(); + + dpInfo.ApplicationDesc = dpMessage.ApplicationDescription; + dpInfo.device = dpMessage.AddressDevice; + dpInfo.sender = dpMessage.AddressSender; + dpInfo.RoundTripLatencyMs = dpMessage.RoundTripLatencyMs; + dpInfo.LastFoundTime = Environment.TickCount; + + // Let's check the items first and see if this one already exists + bool isFound = false; + + lock (foundHosts) + { + for (int i = 0; i < lstSession.Items.Count; i++) + { + if (dpInfo.ApplicationDesc.GuidInstance == ((FindHostsResponseInformation)lstSession.Items[i]).ApplicationDesc.GuidInstance) + { + foundHosts[i] = dpInfo; + lstSession.Items[i] = dpInfo; + isFound = true; + } + } + if (!isFound) + { + lstSession.Items.Add(dpInfo); + foundHosts.Add(dpInfo); + } + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) + { + base.Dispose(Disposing); + + if (isSearching) + { + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + isSearching = !isSearching; + } + if (connectTimer != null) + connectTimer.Dispose(); + + if (updateListTimer != null) + updateListTimer.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.btnJoin = new System.Windows.Forms.Button(); + this.lstSession = new System.Windows.Forms.ListBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnCreate = new System.Windows.Forms.Button(); + this.btnSearch = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnJoin + // + this.btnJoin.Enabled = false; + this.btnJoin.Location = new System.Drawing.Point(7, 227); + this.btnJoin.Name = "btnJoin"; + this.btnJoin.Size = new System.Drawing.Size(74, 27); + this.btnJoin.TabIndex = 2; + this.btnJoin.Text = "Join"; + this.btnJoin.Click += new System.EventHandler(this.btnJoin_Click); + // + // lstSession + // + this.lstSession.Location = new System.Drawing.Point(5, 37); + this.lstSession.Name = "lstSession"; + this.lstSession.Size = new System.Drawing.Size(400, 186); + this.lstSession.TabIndex = 1; + this.lstSession.DoubleClick += new System.EventHandler(this.btnJoin_Click); + this.lstSession.SelectedValueChanged += new System.EventHandler(this.SelectedChange); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(5, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(312, 16); + this.label1.TabIndex = 0; + this.label1.Text = "Select session to join, or click Create to start a new session."; + // + // btnCreate + // + this.btnCreate.DialogResult = System.Windows.Forms.DialogResult.Yes; + this.btnCreate.Location = new System.Drawing.Point(84, 227); + this.btnCreate.Name = "btnCreate"; + this.btnCreate.Size = new System.Drawing.Size(74, 27); + this.btnCreate.TabIndex = 2; + this.btnCreate.Text = "Create"; + this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click); + // + // btnSearch + // + this.btnSearch.Location = new System.Drawing.Point(319, 7); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(86, 27); + this.btnSearch.TabIndex = 2; + this.btnSearch.Text = "Start Search"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(333, 227); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + // + // CreateJoinForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(411, 264); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.btnCreate, + this.btnJoin, + this.btnSearch, + this.btnCancel, + this.lstSession, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateJoinForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Join or create a session"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// The selected session was changed. + /// + private void SelectedChange(object sender, System.EventArgs e) + { + if (amJoining) + return; // Do nothing if we are already joining a session + + btnJoin.Enabled = (lstSession.SelectedItem != null); + } + + + + + /// + /// We either want to start or stop searching + /// + private void btnSearch_Click(object sender, System.EventArgs e) + { + if (!isSearching) + { + if( hostAddress != null ) + hostAddress.Dispose(); + + hostAddress = new Address(); + hostAddress.ServiceProvider = deviceAddress.ServiceProvider; + + // See if we should prompt the user for the remote address + if (ConnectWizard.ProviderRequiresPort(hostAddress.ServiceProvider)) + { + AddressForm addressDialog = new AddressForm(connectionWizard.DefaultPort); + addressDialog.ShowDialog(this); + + // If the user cancelled the address form, abort the search + if (addressDialog.DialogResult != DialogResult.OK) + return; + + // If a port was specified, add the component + if (addressDialog.Hostname != "") + hostAddress.AddComponent(Address.KeyHostname, addressDialog.Hostname); + + // If a hostname was specified, add the component + if (addressDialog.Port > 0) + hostAddress.AddComponent(Address.KeyPort, addressDialog.Port); + } + + //Time to enum our hosts + ApplicationDescription desc = new ApplicationDescription(); + desc.GuidApplication = connectionWizard.ApplicationGuid; + + // If the user was not already asked for address information, DirectPlay + // should prompt with native UI + FindHostsFlags flags = 0; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + flags = FindHostsFlags.OkToQueryForAddressing; + + peer.FindHosts(desc,hostAddress,deviceAddress,null,Timeout.Infinite,0,Timeout.Infinite, flags, out findHostHandle); + isSearching = true; + btnCreate.Enabled = false; + btnSearch.Text = "Stop Search"; + } + else + { + btnSearch.Text = "Stopping..."; + btnSearch.Enabled = false; + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + } + } + + + + + /// + /// A form was disposed + /// + /// + /// + public void FormDisposed(object sender, EventArgs e) + { + if (sender == createSessionForm) + createSessionForm = null; + } + + + + + /// + /// We should create a new session. Display a dialog allowing the user to set + /// certain options + /// + private void btnCreate_Click(object sender, System.EventArgs e) + { + this.DialogResult = DialogResult.None; + ((Button)sender).DialogResult = DialogResult.None; + if (createSessionForm == null) + { + createSessionForm = new CreateSessionForm(peer,deviceAddress,connectionWizard); + createSessionForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (createSessionForm.ShowDialog(this) != DialogResult.Cancel) + { + ((Button)sender).DialogResult = DialogResult.Yes; + this.DialogResult = DialogResult.Yes; + } + } + + + + + /// + /// Determine if we need to expire any of our currently listed servers + /// + private void UpdateTimer(object sender, System.Timers.ElapsedEventArgs e) + { + lock (foundHosts) + { + for (int i = 0; i< foundHosts.Count; i++) + { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)foundHosts[i]).LastFoundTime > EnumExpireThreshold) + { + foundHosts.RemoveAt(i); + break; + } + } + for (int i = 0; i< lstSession.Items.Count; i++) + { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)lstSession.Items[i]).LastFoundTime > EnumExpireThreshold) + { + lstSession.Items.RemoveAt(i); + break; + } + } + } + } + + + + + /// + /// Wait for a connect to complete + /// + private void ConnectTimer(object sender, System.Timers.ElapsedEventArgs e) + { + if (connectEvent.WaitOne(0,false)) // Wait for the Connect event to be fired + { + if (isConnected) // Are we connected? + { + // Get rid of the timer + if (updateListTimer != null) + updateListTimer.Stop(); + + if (connectTimer != null) + connectTimer.Stop(); + + this.DialogResult = DialogResult.OK; + this.Close(); + return; + } + else + { + MessageBox.Show(this,"Failed to connect. The error code was: \n" + resultCode.ToString() ,"Failed to connect",MessageBoxButtons.OK,MessageBoxIcon.Information); + // Restart our timer + updateListTimer.Start(); + } + } + } + + + + + /// + /// Fired when a connect complete message is received from DirectPlay. Fire + /// our event to notify the sample we've connected + /// + private void ConnectResult(object sender, ConnectCompleteEventArgs e) + { + if (e.Message.ResultCode == 0) + { + isConnected = true; + } + else + isConnected = false; + + resultCode = e.Message.ResultCode; + // Notify the timer that we've connected. + connectEvent.Set(); + } + + + + + /// + /// Join an existing session + /// + private void btnJoin_Click(object sender, System.EventArgs e) + { + FindHostsResponseInformation dpInfo; + if (lstSession.SelectedItem == null) + { + MessageBox.Show(this,"Please select a session before clicking join.","No session",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + // Turn off all buttons + btnCreate.Enabled = false; + btnCancel.Enabled = false; + btnJoin.Enabled = false; + btnSearch.Enabled = false; + amJoining = true; + // Stop our secondary timer + updateListTimer.Stop(); + dpInfo = ((FindHostsResponseInformation)lstSession.SelectedItem); + connectionWizard.SetUserInfo(); + peer.Connect(dpInfo.ApplicationDesc,dpInfo.sender, dpInfo.device,null,ConnectFlags.OkToQueryForAddressing); + // Now start our 'Connect' timer + connectTimer.Start(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_JoinForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_JoinForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_JoinForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_ServiceProviderForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_ServiceProviderForm.cs new file mode 100644 index 0000000..be9ea90 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_ServiceProviderForm.cs @@ -0,0 +1,242 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_ServiceProviderForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +/// +/// This form allows you to choose a service provider and username for your +/// sample +/// +public class ChooseServiceProviderForm : System.Windows.Forms.Form +{ + private Peer peer; + private ConnectWizard connectionWizard; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListBox lstSP; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtUser; + private System.Windows.Forms.Button btnCancel; + + + + + /// + /// Constructor + /// + public ChooseServiceProviderForm(Peer peerObject, ConnectWizard connectionWizard) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + // Fill up our listbox with the service providers + ServiceProviderInformation[] serviceProviders = peer.GetServiceProviders(false); + foreach (ServiceProviderInformation info in serviceProviders) + lstSP.Items.Add(info); + + txtUser.Text = null; + //Get the default username from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) + { + try + { + txtUser.Text = (string)regKey.GetValue("DirectPlayUserName", null); + lstSP.SelectedIndex = (int)regKey.GetValue("DirectPlaySPIndex", 0); + regKey.Close(); + } + catch + { + txtUser.Text = null; + lstSP.SelectedIndex = 0; + } + } + else + lstSP.SelectedIndex = 0; + + if ((txtUser.Text == null) || (txtUser.Text == "")) + { + txtUser.Text = SystemInformation.UserName; + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) + { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.lstSP = new System.Windows.Forms.ListBox(); + this.txtUser = new System.Windows.Forms.TextBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lstSP + // + this.lstSP.Location = new System.Drawing.Point(12, 63); + this.lstSP.Name = "lstSP"; + this.lstSP.Size = new System.Drawing.Size(324, 147); + this.lstSP.TabIndex = 1; + this.lstSP.DoubleClick += new System.EventHandler(this.lstSP_DoubleClick); + // + // txtUser + // + this.txtUser.Location = new System.Drawing.Point(13, 20); + this.txtUser.MaxLength = 30; + this.txtUser.Name = "txtUser"; + this.txtUser.Size = new System.Drawing.Size(326, 20); + this.txtUser.TabIndex = 5; + this.txtUser.Text = ""; + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(181, 215); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 2; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(260, 215); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(11, 44); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(376, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Please pick your service provider:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(10, 5); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(327, 12); + this.label2.TabIndex = 4; + this.label2.Text = "User Name:"; + // + // ChooseServiceProviderForm + // + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(343, 246); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.txtUser, + this.label2, + this.btnCancel, + this.btnOK, + this.lstSP, + this.label1}); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChooseServiceProviderForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Choose Service Provider"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// They don't want to run this sample + /// + private void btnCancel_Click(object sender, System.EventArgs e) + { + this.Dispose(); + } + + + + + /// + /// Same as clicking ok + /// + private void lstSP_DoubleClick(object sender, System.EventArgs e) + { + // Call the ok button click handler + object[] parameters = new object[] { sender, e }; + this.BeginInvoke(new System.EventHandler(btnOK_Click), parameters); + } + + + + + /// + /// Select this username and service provider if valid, then continue the wizard + /// + private void btnOK_Click(object sender, System.EventArgs e) + { + + if ((txtUser.Text == null) || (txtUser.Text == "")) + { + MessageBox.Show(this,"Please enter a username before clicking OK.","No Username",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + try + { + connectionWizard.ServiceProvider = ((ServiceProviderInformation)lstSP.SelectedItem).Guid; + connectionWizard.Username = txtUser.Text; + } + catch // We assume if we got here there was no selected item. + { + MessageBox.Show(this,"Please select a service provider before clicking OK.","No Service Provider",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) + { + regKey.SetValue("DirectPlayUserName", txtUser.Text); + regKey.SetValue("DirectPlaySPIndex", lstSP.SelectedIndex); + regKey.Close(); + } + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_ServiceProviderForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_ServiceProviderForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/DPlayConnect_ServiceProviderForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/DXUtil.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/DXUtil.cs new file mode 100644 index 0000000..4d235c9 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/DXUtil.cs @@ -0,0 +1,313 @@ +//----------------------------------------------------------------------------- +// File: DXUtil.cs +// +// Desc: Shortcut macros and functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.IO; +using System.Runtime.InteropServices; + + + + +/// +/// Enumeration for various actions our timer can perform +/// +public enum DirectXTimer +{ + Reset, + Start, + Stop, + Advance, + GetAbsoluteTime, + GetApplicationTime, + GetElapsedTime +}; + + + + +/// +/// Generic utility functions for our samples +/// +public class DXUtil +{ + #region Timer Internal Stuff + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceCounter(ref long PerformanceCount); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("winmm.dll")] + public static extern int timeGetTime(); + private static bool isTimerInitialized = false; + private static bool m_bUsingQPF = false; + private static bool m_bTimerStopped = true; + private static long m_llQPFTicksPerSec = 0; + private static long m_llStopTime = 0; + private static long m_llLastElapsedTime = 0; + private static long m_llBaseTime = 0; + private static double m_fLastElapsedTime = 0.0; + private static double m_fBaseTime = 0.0; + private static double m_fStopTime = 0.0; + #endregion + + // Constants for SDK Path registry keys + private const string sdkPath = "Software\\Microsoft\\DirectX SDK"; + private const string sdkKey = "DX9J3SDK Samples Path"; + + private DXUtil() { /* Private Constructor */ } + + + + + /// + /// Returns the DirectX SDK media path + /// + public static string SdkMediaPath + { + get + { + Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sdkPath); + string sReg = string.Empty; + if (rKey != null) + { + sReg = (string)rKey.GetValue(sdkKey); + rKey.Close(); + } + if (sReg != null) + sReg += @"\Media\"; + else + return string.Empty; + + return sReg; + } + } + + + + + /// + /// Performs timer opertations. Use the following commands: + /// + /// DirectXTimer.Reset - to reset the timer + /// DirectXTimer.Start - to start the timer + /// DirectXTimer.Stop - to stop (or pause) the timer + /// DirectXTimer.Advance - to advance the timer by 0.1 seconds + /// DirectXTimer.GetAbsoluteTime - to get the absolute system time + /// DirectXTimer.GetApplicationTime - to get the current time + /// DirectXTimer.GetElapsedTime - to get the time that elapsed between TIMER_GETELAPSEDTIME calls + /// + /// + public static float Timer(DirectXTimer command) + { + if (!isTimerInitialized) + { + isTimerInitialized = true; + + // Use QueryPerformanceFrequency() to get frequency of timer. If QPF is + // not supported, we will timeGetTime() which returns milliseconds. + long qwTicksPerSec = 0; + m_bUsingQPF = QueryPerformanceFrequency(ref qwTicksPerSec); + if (m_bUsingQPF) + m_llQPFTicksPerSec = qwTicksPerSec; + } + if (m_bUsingQPF) + { + double time; + double fElapsedTime; + long qwTime = 0; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_llStopTime != 0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + qwTime = m_llStopTime; + else + QueryPerformanceCounter(ref qwTime); + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) + { + fElapsedTime = (double) (qwTime - m_llLastElapsedTime) / (double) m_llQPFTicksPerSec; + m_llLastElapsedTime = qwTime; + return (float)fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) + { + double fAppTime = (double) (qwTime - m_llBaseTime) / (double) m_llQPFTicksPerSec; + return (float)fAppTime; + } + + // Reset the timer + if (command == DirectXTimer.Reset) + { + m_llBaseTime = qwTime; + m_llLastElapsedTime = qwTime; + m_llStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) + { + if (m_bTimerStopped) + m_llBaseTime += qwTime - m_llStopTime; + m_llStopTime = 0; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) + { + if (!m_bTimerStopped) + { + m_llStopTime = qwTime; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) + { + m_llStopTime += m_llQPFTicksPerSec/10; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) + { + time = qwTime / (double) m_llQPFTicksPerSec; + return (float)time; + } + + return -1.0f; // Invalid command specified + } + else + { + // Get the time using timeGetTime() + double time; + double fElapsedTime; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_fStopTime != 0.0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + time = m_fStopTime; + else + time = timeGetTime() * 0.001; + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) + { + fElapsedTime = (double) (time - m_fLastElapsedTime); + m_fLastElapsedTime = time; + return (float) fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) + { + return (float) (time - m_fBaseTime); + } + + // Reset the timer + if (command == DirectXTimer.Reset) + { + m_fBaseTime = time; + m_fLastElapsedTime = time; + m_fStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) + { + if (m_bTimerStopped) + m_fBaseTime += time - m_fStopTime; + m_fStopTime = 0.0f; + m_fLastElapsedTime = time; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) + { + if (!m_bTimerStopped) + { + m_fStopTime = time; + m_fLastElapsedTime = time; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) + { + m_fStopTime += 0.1f; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) + { + return (float) time; + } + + return -1.0f; // Invalid command specified + } + } + + + + + /// + /// Returns a valid path to a DXSDK media file + /// + /// Initial path to search + /// Filename we're searching for + /// Full path to the file + public static string FindMediaFile(string path, string filename) + { + // First try to load the file in the full path + if (path != null) + { + if (File.Exists(AppendDirectorySeparator(path) + filename)) + return AppendDirectorySeparator(path) + filename; + } + + // if not try to find the filename in the current folder. + if (File.Exists(filename)) + return AppendDirectorySeparator(Directory.GetCurrentDirectory()) + filename; + + // last, check if the file exists in the media directory + if (File.Exists(AppendDirectorySeparator(SdkMediaPath) + filename)) + return AppendDirectorySeparator(SdkMediaPath) + filename; + + throw new FileNotFoundException("Could not find this file.", filename); + } + + + + + /// + /// Returns a valid string with a directory separator at the end. + /// + private static string AppendDirectorySeparator(string filename) + { + if (!filename.EndsWith(@"\")) + return filename + @"\"; + + return filename; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/GameClass.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/GameClass.cs new file mode 100644 index 0000000..fe121c5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/GameClass.cs @@ -0,0 +1,157 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public delegate void MessageDelegate(byte message); // Delegate for messages arriving via DirectPlay. +public delegate void AudioDelegate(); // Delegate to handle audio playback. +public delegate void PeerCloseCallback(); // This delegate will be called when the session terminated event is fired. + +public class GameClass : GraphicsSample +{ + private GraphicsFont drawingFont = null; + private Point destination = new Point(0, 0); + private InputClass input = null; + + private PlayClass play = null; + + private const byte msgUp = 0; + private const byte msgDown = 1; + private const byte msgLeft = 2; + private const byte msgRight = 3; + private const byte msgCancelUp = 4; + private const byte msgCancelDown = 5; + private const byte msgCancelLeft = 6; + private const byte msgCancelRight = 7; + + private bool networkEnabled; + private PlayClass peer = null; + private Mesh spaceSphere = null; + + #region GameClass Constructor + public GameClass(bool startFullScreen, Size size, bool enableNetwork) + { + this.startFullscreen = startFullScreen; + this.Size = size; + this.networkEnabled = enableNetwork; + this.Text = "SpaceWar3D-Step03"; + + drawingFont = new GraphicsFont( "Verdana", System.Drawing.FontStyle.Regular); + + input = new InputClass(this, play); + + if (networkEnabled) + { + peer = new PlayClass(this); + } + + } + + #endregion //GameClass Constructor + + + /// + /// Called once per frame, the call is the entry point for 3d rendering. This + /// function sets up render states, clears the viewport, and renders the scene. + /// + protected override void Render() + { + + input.GetInputState(); + + //Clear the backbuffer to a Blue color + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + //Begin the scene + device.BeginScene(); + drawingFont.DrawText(5, 5, Color.White, "X: " + destination.X + " Y: " + destination.Y); + device.Transform.World = Matrix.Identity; + spaceSphere.DrawSubset(0); + device.EndScene(); + } + + /// + /// Initialize scene objects. + /// + protected override void InitializeDeviceObjects() + { + drawingFont.InitializeDeviceObjects(device); + string spaceSphereFileName = MediaUtilities.FindFile("SpaceSphere.x"); + spaceSphere = Mesh.FromFile(spaceSphereFileName, MeshFlags.Managed, device); + + } + + /// + /// Called when a device needs to be restored. + /// + protected override void RestoreDeviceObjects(System.Object sender, System.EventArgs e) + { + device.RenderState.FillMode = FillMode.Solid; + device.RenderState.Lighting = false; + device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, + (presentParams.BackBufferWidth/presentParams.BackBufferHeight), + 1.5f, 20000.0f ); + + + device.Transform.View = Matrix.LookAtLH(new Vector3(0,0,-5), new Vector3(0,0,0), new Vector3(0,1,0)); + device.RenderState.FillMode = FillMode.WireFrame; + + + + } + protected override void Dispose(bool disposing) + { + if (networkEnabled) + play.Dispose(); + base.Dispose(disposing); + } + public void MessageArrived(byte message) + { + switch (message) + { + case msgUp: + { + destination.X = 1; + break; + } + case msgDown: + { + destination.X = -1; + break; + } + case msgLeft: + { + destination.Y = 1; + break; + } + case msgRight: + { + destination.Y = -1; + break; + } + case msgCancelUp: + case msgCancelDown: + { + destination.X = 0; + break; + } + case msgCancelLeft: + case msgCancelRight: + { + destination.Y = 0; + break; + } + } + } + + /// + // When the peer closes, the code here is executed. + /// + public void PeerClose() + { + // The session was terminated, go ahead and shut down + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/GameClass.resx b/Source Code updated 08-12-05/Spacewar3D/Step03/GameClass.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/GameClass.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/HelpScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/HelpScreen.cs new file mode 100644 index 0000000..b281029 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/HelpScreen.cs @@ -0,0 +1,124 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.IO; + + + /// + /// Summary description for HelpScreen. + /// +public class HelpScreen : System.Windows.Forms.Form +{ + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.TextBox helpText; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public HelpScreen() + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + string helpFile = MediaUtilities.FindFile("Help.txt"); + if (File.Exists(helpFile)) + { + StreamReader sr; + try + { + sr = new StreamReader(helpFile); + helpText.Text = sr.ReadToEnd(); + sr.Close(); + } + catch ( Exception e ) + { + helpText.Text = e.ToString(); + } + + } + else + { + helpText.Text = "Unable to locate " + helpFile.ToString(); + } + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) + { + if( disposing ) + { + if(components != null) + { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.closeButton = new System.Windows.Forms.Button(); + this.helpText = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // closeButton + // + this.closeButton.BackColor = System.Drawing.Color.Black; + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.Dock = System.Windows.Forms.DockStyle.Bottom; + this.closeButton.ForeColor = System.Drawing.Color.Red; + this.closeButton.Location = new System.Drawing.Point(0, 615); + this.closeButton.Name = "closeButton"; + this.closeButton.Size = new System.Drawing.Size(616, 23); + this.closeButton.TabIndex = 0; + this.closeButton.Text = "Close"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // helpText + // + this.helpText.BackColor = System.Drawing.Color.Black; + this.helpText.Dock = System.Windows.Forms.DockStyle.Fill; + this.helpText.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.helpText.ForeColor = System.Drawing.Color.Red; + this.helpText.Location = new System.Drawing.Point(0, 0); + this.helpText.Multiline = true; + this.helpText.Name = "helpText"; + this.helpText.ReadOnly = true; + this.helpText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.helpText.Size = new System.Drawing.Size(616, 615); + this.helpText.TabIndex = 1; + this.helpText.TabStop = false; + this.helpText.Text = ""; + // + // HelpScreen + // + this.AcceptButton = this.closeButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(616, 638); + this.Controls.Add(this.helpText); + this.Controls.Add(this.closeButton); + this.Name = "HelpScreen"; + this.Text = "SpaceWar! Help"; + this.ResumeLayout(false); + + } + #endregion + + private void closeButton_Click(object sender, System.EventArgs e) + { + this.Close(); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/HelpScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step03/HelpScreen.resx new file mode 100644 index 0000000..a4f535a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/HelpScreen.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + HelpScreen + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/MediaUtilities.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/MediaUtilities.cs new file mode 100644 index 0000000..bb1759f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/MediaUtilities.cs @@ -0,0 +1,40 @@ +using System; +using System.IO; +using System.Configuration; + + + /// + /// Summary description for MediaUtilities. + /// +public class MediaUtilities +{ + // private static string defaultPath = @"..\..\media\"; + private static string mediaPath = ConfigurationSettings.AppSettings.Get("MediaPath"); + + public MediaUtilities() + { + } + + public static string FindFile(string filename) + { + return FindFile(mediaPath, filename); + } + + public static string FindFile(string path, string filename) + { + // First try to load the file in the full path + string fullName = AppendDirectorySeparator(path) + filename; + if (File.Exists(fullName)) + return fullName; + else + throw new FileNotFoundException("Could not find this file.", filename); + } + + private static string AppendDirectorySeparator(string pathname) + { + if (!pathname.EndsWith(@"\")) + return pathname + @"\"; + else + return pathname; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/SplashScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/SplashScreen.cs new file mode 100644 index 0000000..3d7fcb3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/SplashScreen.cs @@ -0,0 +1,250 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + + + /// + /// Spacewar Splashscreen + /// +public class SplashScreen : System.Windows.Forms.Form +{ + private MainClass mainClass; + private System.Windows.Forms.Button helpButton; + private System.Windows.Forms.Button startButton; + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.Button soloButton; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.CheckBox checkBox1; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + public SplashScreen(MainClass main) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + this.mainClass = main; + radioButton3.Checked = true; + checkBox1.Checked = true; + mainClass.GameFormSize = new Size(1024,768); + mainClass.FullScreen = true; + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) + { + if( disposing ) + { + if(components != null) + { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(SplashScreen)); + this.helpButton = new System.Windows.Forms.Button(); + this.startButton = new System.Windows.Forms.Button(); + this.closeButton = new System.Windows.Forms.Button(); + this.soloButton = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // helpButton + // + this.helpButton.ForeColor = System.Drawing.Color.White; + this.helpButton.Location = new System.Drawing.Point(440, 280); + this.helpButton.Name = "helpButton"; + this.helpButton.Size = new System.Drawing.Size(136, 32); + this.helpButton.TabIndex = 5; + this.helpButton.Text = "Show Help"; + this.helpButton.Click += new System.EventHandler(this.helpButton_Click); + // + // startButton + // + this.startButton.ForeColor = System.Drawing.Color.White; + this.startButton.Location = new System.Drawing.Point(440, 364); + this.startButton.Name = "startButton"; + this.startButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.startButton.Size = new System.Drawing.Size(136, 32); + this.startButton.TabIndex = 7; + this.startButton.Text = "Network Play"; + this.startButton.Click += new System.EventHandler(this.startButton_Click); + // + // closeButton + // + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.ForeColor = System.Drawing.Color.White; + this.closeButton.Location = new System.Drawing.Point(440, 406); + this.closeButton.Name = "closeButton"; + this.closeButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.closeButton.Size = new System.Drawing.Size(136, 32); + this.closeButton.TabIndex = 8; + this.closeButton.Text = "Exit"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // soloButton + // + this.soloButton.ForeColor = System.Drawing.Color.White; + this.soloButton.Location = new System.Drawing.Point(440, 322); + this.soloButton.Name = "soloButton"; + this.soloButton.Size = new System.Drawing.Size(136, 32); + this.soloButton.TabIndex = 6; + this.soloButton.Text = "Solo Play"; + this.soloButton.Click += new System.EventHandler(this.soloButton_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.radioButton3); + this.groupBox1.Controls.Add(this.radioButton2); + this.groupBox1.Controls.Add(this.radioButton1); + this.groupBox1.ForeColor = System.Drawing.Color.White; + this.groupBox1.Location = new System.Drawing.Point(16, 320); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(128, 128); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Screen Resolution"; + // + // checkBox1 + // + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(16, 96); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.TabIndex = 3; + this.checkBox1.Text = "Full Screen"; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // radioButton3 + // + this.radioButton3.Checked = true; + this.radioButton3.ForeColor = System.Drawing.Color.White; + this.radioButton3.Location = new System.Drawing.Point(16, 72); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(80, 24); + this.radioButton3.TabIndex = 2; + this.radioButton3.TabStop = true; + this.radioButton3.Text = "1024 x 768"; + this.radioButton3.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton2 + // + this.radioButton2.ForeColor = System.Drawing.Color.White; + this.radioButton2.Location = new System.Drawing.Point(16, 48); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(72, 24); + this.radioButton2.TabIndex = 1; + this.radioButton2.Text = "800 x 600"; + this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton1 + // + this.radioButton1.ForeColor = System.Drawing.Color.White; + this.radioButton1.Location = new System.Drawing.Point(16, 24); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(72, 24); + this.radioButton1.TabIndex = 0; + this.radioButton1.Text = "640 x 480"; + this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // SplashScreen + // + this.AcceptButton = this.soloButton; + this.AutoScale = false; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.Black; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(594, 454); + this.ControlBox = false; + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.soloButton); + this.Controls.Add(this.closeButton); + this.Controls.Add(this.startButton); + this.Controls.Add(this.helpButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(600, 460); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(600, 460); + this.Name = "SplashScreen"; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + private void helpButton_Click(object sender, System.EventArgs e) + { + HelpScreen helpScreen = new HelpScreen(); + helpScreen.ShowDialog(); + } + + private void startButton_Click(object sender, System.EventArgs e) + { + mainClass.EnableNetwork = true; + this.Close(); + } + + private void closeButton_Click(object sender, System.EventArgs e) + { + Environment.Exit(0); + } + + private void soloButton_Click(object sender, System.EventArgs e) + { + mainClass.EnableNetwork = false; + this.Close(); + } + + private void radioButton_CheckedChanged(object sender, System.EventArgs e) + { + RadioButton btn = (RadioButton)sender; + Console.WriteLine(btn.ToString()); + if (btn.Checked) + { + if (btn == radioButton1) + mainClass.GameFormSize = new Size(640,480); + if (btn == radioButton2) + mainClass.GameFormSize = new Size(800, 600); + if (btn == radioButton3) + mainClass.GameFormSize = new Size(1024, 768); + } + } + + private void checkBox1_CheckedChanged(object sender, System.EventArgs e) + { + mainClass.FullScreen = checkBox1.Checked; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/SplashScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step03/SplashScreen.resx new file mode 100644 index 0000000..18fad73 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/SplashScreen.resx @@ -0,0 +1,4715 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + False + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + False + + + 80 + + + True + + + Private + + + SplashScreen + + + + iVBORw0KGgoAAAANSUhEUgAAAlgAAAHMCAIAAACGG0FDAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA + CxMBAJqcGAAA/3lJREFUeF7kvQd4HNX1/q+d3dne1XtvtiRLbrJsy73buABuGAwGDBgwGNNMM733DqH3 + ZkoSOoTQIYWShFBSv6QQEgiEhECo+n/uvdrxaLVldlci5PffZx55LU25c+fOfe855z3vsefFPi7dGfT5 + +d9XX3/t9XgKC/OjkciXX375xRdfGPtk+sVmswWDfo/H8+WXnPXrTA/Pff+CaLQgP/Lxvz/p6+vL/Wyp + z6BpmtftsckOHNpruZzOgkiUZ/HVV18lOTOX3f5x6rpN09J2OA0uKioIh4KffvqftDvnckeLF805+IC9 + 3nzrtx/+4x8pzqPrDqdT/+qroew9t9vd0d5aUlr0/vsfDL5Hu93u9bodDru5Yxm0DP5gwP/vT/6Tl9fH + f3O5d47lDHabJs/TPwj5luK0kWCouLDw3598MqwPxZaX4L5GtjQ11tW+9/cPGGw53vWQHO7zecvLS2Uf + 5jGNfP0171Yf49bjdvv9fhpppYsCAX9FRQl7fvbZ56lbZbfZNZsW1zF2TXPadfFq22zJX0CrtxsNhQvz + C/7z2WdxQ447YohYnzroBFrbJ0eUy+UqLyvRdZ3TMtHxZLMbtG63i5MYDRND1qapS1j88EJxTHaTLXfE + Ux7+edrCrcg77389aJXdrlk4KNUunIRRyMZN5niq7A6XN5TrRJbdpb+Zo0qKCyf1jA+HQsbluF9Gs8UO + By/V2LXSWnZzABp2u5WdzfsUFkSrqypcLmfCA2mq2+XizBUVpWyDG8MOut1hsZHmS3BO1gR+n9fv9yU8 + HLSrKCsJBPirOA7UjIRDNCY/PxLw+7hTsJlZxmJnpu4WM/DQiTyjZPvzV3VFJmUxN8Q+tCeLzk/c5zbN + oSXoUp/Xm9HbmsVDyWjwMDWHQkGegvkoXT5W6+ehq3myVh6i6PC8/plK9Tv/BQXpK/ODsH7puD05P/aG + U3cO7rcselIssMRKzsNygWWBGhvil7zToKS1l9rcwiwOibtBOo2nY6Wr4w5k4DGJGcM795ZYfEYMMJ8v + 8eRg8QypdmPKw9SIRMSN/Q9BEa1l1mMSyq4LOJyZN7tjszuKoT5h/Oidl+3ARJ/dGYyjGL5+n48pOMV5 + 8BNUlpeFAgGL16JDCgsKwKFU+9tsYQyggkJeXTo/Dh7U+0C/Mn1YvOiAGZMZNOUdqUdmvHX0QFVZGWt/ + 4J4O8XjcTqdT7pDFxVPfdPr1GZOmmM5M5gktyWKKSdaOhBahxfsUiy2g3K5/YxPWwIaBVxrPaAh7I+7G + Aavi4sJgMKCmryF5/jxNr8ud9fSS8NEwJEKhQFlxscflMXYwnuzQtT3BxRP2Cu9L0O9P/dINPhdHVVdV + RiNhBeSsWliMWhyKWe/GyobZhkcMBmd9kjQHNjbWHb/10F133QlvxnBdYxjOy0QfDYfNdjBvmsWXLRQM + TO+d1DaidajW7FbujxcUm4ZhY2Xn1PuwdgkFg4Mbr1ad6liv18srFzdG+2eKRHOFx+XqHjO6vEy4tpJO + xzYbIKc74hf4dHs0GmGxpg4cormovxXJJgh+73Q4QT9iBLRKXjT9HDgcCyBxzqyM4NxHgpUzqI7SE9mU + Vg7PcR/GBoZ7aUkRxlCOp0p2OGZxbW0lXgGL5zevKtQrE1vD2X0erxreACEz79COZE4LFjKVJ5x2+KXF + 6cvibRovI8GahIt+4bBN6UeUBmu8pcFRzD+qZ/iOuT8czTbfo7Jcpecs/QueUeeIqUquWMV5WaRM6Z0w + atTI4b6fzJqYbu842CstLZo6pScc3u51THYCFhfFhQUrly0eParjf+uW03WJDSgKh4P9w4WIgfDVbR86 + Iizq9Yi1c0BEl+M+7Iqpyuou3VUG/J3RyVshl7pBbMSMjrW4M+t9rL2EUxLwE/YHWblbfD/ojMGGrMVm + JNuNS4uhODR2SI5tSXA4TWPNxKoo61OruSJrSKABOANZesa5TLNuz+ADhclrrYXiYdlwn273nUqPej/g + eVzukvwir8lcG8JGpj1V6h7Ozn3KRZkG6PnsJjqmC+aKrB992lu2vkP2bQDqcUckuxLzHZGVTGc96+1O + OFhzOTztsWVlJWNGt6e+IybB6nICWyUsyjAoMW3Snjb1DrxCkVD4G3axJp2RbTblHky5g4dAvXXfLCCX + LFiorqJiHkO/UjPdg/CHJhnJYo5mOT/QEBQGkJ54CSznhaFxnmX/ZuY45jI8nBkwGAhgE2R4XP/u3GZr + c+OyxfMh42V9huwOHI6jGCoyJpc4ngIoVpWXj+3qiITDw3H1rM9Js7NDsqyvqA5kfvuWTG5Z3kgwFJjY + M7a4uCDZ8dwh81eOazQ5AaVfizc21M6eMYWITpY3M3SHRcORprq6hE7F7C4iHB0eYCBNnJJ3z6FlTFrJ + rkmpj2JeS9ta4wzsLH25Se08Qss1NZVD+KqwUsk93sA0F/aH3M5hMU9V59CHWa+yh+OxDt85QdBlixZs + 3G8v/EaZXkUEkFzObzL6kGkL4/YXqN/SOGf21IL8aI6n+t86nJkchtG3ZI4asq4D4RYtmL14hznYB0N2 + 0kQncjp0l8MpGMzJP4ytJYvm7bf3WuIEw9qYtCdX/m6I8Wn3HNodhIFid0KkHNrTWj8bi56MaHtmIIQB + kuJCuEOj0bD1lqTeE1u2rqZGLcaFwyoHKlMs/0EsabFZh3wuzmg9MVT9k8t5JHJvj+xaD0dhcPNEcJ9k + cXURTHI6Ey68crSnselE0lESd7RanqfdBt8RJyQ/JxlpOYse+F85RPBjHS6w8BtoMO8jRJuhWT1vp6gl + mtWJEk3sGVdYkG/lrsSqTeajWNnZvA8HwlBg3Z12TBO4gkmRwk+b4tK8RX6/N4W7L9NmJ9vf5/WMGNGE + iaN2SHtTGV1XpAolMZ25EOsVov2YagnfTJkBkSUzlhPyVk/t7ampqsiowf+VnUE+1nDKbcV7kgsQGg+R + vFhCANmNvSHvBEmeTBVsGyq3bVzLebvLS0oC/u2B4bjg8ZDfaQoQ4loY04z5TKdCsZDlTZDglx+NFhUW + qJc07lqMHuubOhZM9bjhn2e/RBbr6+EMEst14dAzdwbM5xZ8e7mPE95uUshKSgqH4JWE/RX1hPO9ETJm + sn90cq4neAA4Y6tlSXOQuaC5906KM4BM7W0tw23a0oDamsqlS+ZWVZYzRxQV5peVFlt3IebSA0wH7e2t + HR0jEsYt4ImAkRkNmrjJlGhofW2N4jp/kx+L+Y7cNVHI4etqkTSgD31CRXY9yYTrhteT5JURVg7UzkQk + PVzrcVcUCyvLb55QeMiPZgo8CZZlKc0si/ADQZM4ts/j1kVwN4Hdpq7L+GGBbu4NsYyQ1Fw+jGpuSh2u + rksHqQ2jxryxwDdvcX9Vh0AW8ODClQ/Gcqdu7x6Zwu8c/IyyGySDj6IroH+TszTck61cgNoZhMN3Ic7M + sizFyj6D1GdebVAw3xfRtYzNOHMvY2kUFeTD5sqd8DaEucNx40DwzUIiPWioRlWy84C1ePmYNPECTRgz + prmhPoU/TXg7nQQ/sjfUjGZwlZKSInyMCRsmMuQy4XCzfyQSNqJ60hucWWwyrqvVnWYKVDSgvHyACZKs + 2/EoBLy+TM8/3INhmM6fwuDDZy95CfEPi54pLiqE32SmIwGoeH2YsIa8nVwubgWTEKviMI9GM0QQWUgI + RXHYI/5r245b5lMZ1wJaRrQ0TuntTrECNlBQgZ8Z7eAFER9m89g0T56N+JB54/fswMYhIY+nIBAgFYAz + qJZkgYVo28iIS65zVLLjhVfM58ua7mR9kDChlRQXMYFYP2Ro9+ROU3i846+l4hO5B7uGKs7BE6qrqq6p + qMh9yTm03Zrd2ZgIIsE0QRH2gXY65JGn7Bo8YHHjsJNNZXCgWEFbpJWrk0jvkxhcxjmzA0KIpgUFUSt5 + Y2okx914Whdi7h1l3O83sMay0lpBjE0UE6V5iA6ymU+Cu5vFU2o2b7KLpgRjzetxKych87oZogx7yzC5 + zMCDDExxOBL1+9UvFcyk2AaAli1P4RCbugrXdTrsXR0j2kc2J3NXKkPQgECFfKAdOSJsuIDZQjZbyKaF + 8mysMdUG20dt/BXmHgJaldFocTDEsapJqg3ZwaGVp5zioQgtiEFqEhm5yi36YFK0k/eOLOf/+rTG0p8U + L1jK/2PrY15gIhBY7v9j7U4+ItTkyDxeWVmWLDw53BOodA0ldaNZfOsyepHUOYc7emSl5Ti+lEqIlZ2z + 3gdHiDDrUzJ+ZZbk9ii4mH8tr/1l51ttXYp3Z/A5ZGYUk7bls8daIT3taNElikaLWyPq79ClD8HsY4zz + Lhr2ljKzYNEgqlYcCAQdDoVDYIyxKUxSm/FLtY9ALJsWdbgDdl1ZadsvREukfWlYadtXZjF3qIGCHKtO + CNTBxwvn5cH4JNRflGcrtOUV5g3Y+D3UCXZgZRG1aQW6HiK5Vt6IaoAZC60+vKHYb/AAYPQgQEPgIO0w + Yge8WSw9hzWLKYuZgYZJRaHMBmppafG0qT21tVWDvVO5Oy+H4ll9a86RdmTk0lKed2VFWW1d9S6rlq7b + fYWV8CRrc4QzsuCXp2gn50TYd1jvNJdeyuhY8pT93gwUAofP025utnhLUyq6sQMeSGIH/eZjHkJlDrcD + gym9t1mQAqRLM5f1NSfJD0cqisuGyi2mIkCDn10yN6NhaYF2bAbIgWp0ChASJknRhECgSyTPFs2zCZhJ + ssl9BFwBWgV2R6nTW2B3+vNsChq5igGKykw0eyzN7VSmJ/vTGNrACQG54rw8hJHK8/Iq8/Kq8vKqB278 + hg3aGDuI3TR7pe4usjs4nJOoS3Pa/5ZRGEekEuE0liUWtILxEMIkSJbmJFdvmUHR4BGCq6C2pkosTzNZ + fgnOtseTkYHEXUNwA9QHyzfi37LSGxlNTdt3xu5BjWVIwl1ZtsAwRNJl47EjvVNQEDH4zXRxRq4/Ky2k + rysqypqb6ydPHNfcmCpSaJwNmdYJ3aPrannLhvCT69g1moK8Fokuxn8ZT9lpgWZ3bzyj0sKiwmj+/yKo + x62CiaBZfKvZDbYqzMZcXl0WEG2NLaNaRkKxSYZeCWN4xi/TPrKEECiiazHYA/AU1IE0CsOwqIActjKH + vcxuB3vYSvgv0GKzVTkcVbxBEm8SboCQwiEOKc2zldo0jDbOBnByCeXABBQNWDKQyXDVKltQoSA7Kwjk + bIBfTV5eQ15ec15ea17eyLy8toEbvxmRl9eSl9eYl1fHnpqj1qGX5Nk4nJNwqsFYmLYDh2oHMZVlTt1P + e3VwS8rMEpbNfj6R/vlo24imirJSZo+0FzV2EIGPdLO6xPv0CKecMdYvndmeNIJJPBrBnZ7ZgUO7N52l + pJxRiE7oqsI2UgJ9eABQRq2qKlfLn6L8wtryoUzoVveVOnoqclco1GMaWCok9k3K9Fjvf+6FFHVzKgJp + s2lldjmKm0o7ifPgUmfcq85MpkbI4UAFeT7fAEZyLVgnXM561/3X98QgIFyNkqri5hubCRIYiDZzAM8I + s8UZUgnvRZ3QHGlTYTZlY2GxAXvSx7gd6kA74I0VX43NVssmEaVewk+TzdasaSMdDqQawaFkGzgEUDXJ + QziWM4BenBB0BMy4loIlw0ozeyzhjMJohJhDVBIZC7QEiSPBI4LqXatpTZrWpmmdmjZa08Zp2gRN6zFt + /Hc8m8021mYbnZfXIUDR1mATViM3BRhzUWUXGg7S/+qkmOvoU5OYCLfnXIuDOZnsMsr84R0Z8lcV3y/u + orR4qbpD5Q3m2jXDd7x0uSQoVmLxisIb7vGQxQHRY3CPwJhaNGf24nlzw8EgKYkopBUV5avIMNNEOJCY + b2nx0pnuxkVBwYQ1cTI9VVopB64FJ6KpqS4LiAX8oPNk6p03boHDSfdJ65FjgYJPOIvmqQtBCR4zpp2k + oky7Lov98SJMnzKpuZHp97//sRJuiTP1ElJXnJrdgxZxjGySMDcgGfUjmZsR/MM445Fg54EQAvMkXIF2 + GFLK2Gq12UbYbO02W4fNNspm6wRa5DaGTdNAGvBGbd3Glpc3IS+vOy9vfF7euLy8sXl5Y/LyuvLyRkmj + jXNyZp4N1wJoQUSFTLzbWIfKY0kuBUQONvQRiHPixYpij9rtlXZ7nd2OfH6n3T7ebp/kcEx1OGY4HLMd + jjkOx1y58YX/zpR/6nU4JgGQsgFcmpviolioADCXYx2goNdwkJqHCw9O0sVNVZNgFWUYAxuS8QckAEuI + ZCVze+IDN4e3c7momPTSpcBmfX6L7l/OL2xHu45ObC7WbdbttHQgtA6iKcPEGmUKmzW1d+rEHjXhWq/e + Z6np/72dhGWWUsqB/pwwYczcOdOQFMi0mS2NDXNmTTPKQWR6OJe28hYxIwx+6Na9CypXbMjXmAlvViSW + hEIgd6ZdkfX++FETyrChg1peVJJMq8XAp4TpcXFJAsSQxSa5HmADG19U5oDBPUnIhIxDQcU3AQaAQGwy + 8K/aZquz2TDyWjDyNA1x+lF2e5fdPtpuHyvxZgKD0+GY6HBMltAyRWIM2zQJQmygTuLNbp+pabPYbLYZ + NttUm21yXh6wBDpiqIFMmIyALgAMHAJOALMw1NB8kRDIxpeA3U7dmSJ8sHY70YuRdvsYCYFcd77Dsdjh + WOZw7OxwrHA4VjocqxyO1S7XCrTi5J/YYRZ7atpkrEN5RQAYtyrAD/RyLfpQGYVqDWF8hHPF7eJlNIJ5 + QCBmErnOQ1utycqQK8zP7xk7Bl9lQrOVCRnPfOIEG1O1DYEueUKYF3+boa82TO8jMbiRI5tyFKJS4/bb + +5EO7gEC50IlduhcuhlkWX57Oym+ZTInOtVj5a8s+rLjT+IDpHj5kCxNsAuZta28HrLiqNfKnkPylHjP + EQrIXZs008YomyDtUUIcR1hr8TviKC6IRPEIxf3BDE5xuXFmoqaZt6JIK2xkyzeVFJX5fSo3IJBn81Ij + PmZLKfvGzAERERf5G84MlCJrRHQE2jcxv2qHY4TX0+H1tEvkGwfmSYwB6hTIgSLK0gJRFjgciyS6LJHb + UodjR4djJwlCalsu0WiV08kXtpUu1866DiCxp9jfbl+qaUtstkU221yJi4AiJiNmIjYiZij+UoAZfMIL + SilbIHDpokVbDjvsvDPPvO+uux64554Ht217ZNu2x7dt++G2bU9v2/bctm0vbtv2423bfrJt20+3bXtJ + bXff/fLdd790770/e+ihu44/nmZw6YWaNlteDvTlWjUSd1kHsBpIBoQ8LyY6KW7T/1BJTsIjUliY/w0b + hXJmCFJCx/DZmH0M/BVvEI60hG+iMFpMNXUxyMqLS4vyC5Q4zvAp6NJLkyaOw15K++IMwQ4sT4pZnlh4 + S4fgYilPIYp6f7OFQMVT1GBZDaMsgpVOwzP/jSGBlfbkuA+Tfk1lBW+OlfMAhFZItlZOZWUfophlspCI + lZ2Hap+CaLSro414ScITAn51tdUV5aWZjgGFTAqcDLNPkVYUb0VhnsFbARuYteGtsOFFLNMdtX4fTAZJ + Y7ERdA3DvosFvYwwm+EmFakj0tNoWFeFyJfY7bV2e4uuTwj6ezxu8A/ww6oD8wC8nf3+taWl+9bXH9zW + tqW7+7hJk7ZOnHjJmjXf2XPP76xb95099rh6zz3v2br1gTPOuHXjxqvXrr123brr99zzyhUrLpg16/xp + 07aOaD2mtvbYirIDfN69HI49HY495LYGc42fmrbKZtvJZtvBZlP4hFu1XdMwDfGUgoXEAim/iSF40MaN + 99xzz5tvvtmX+efVe+/dUl+/VmLzzpoG+k632bBEIdEQrcQ7SmemBsLBD10kB1j3gQzVKBx4Hl5SK/4b + Yf/JlCFzShgI6vdSglFI9uB7E7m/GdpcxoI+dZxPZr5vPzWXk8HLYeC/wAU45qiNe61bZb1A5fA8l/6z + fsOe3JiAegakpiG/fZYgpIKCB0NyZs4m5cEyHJhDcm15EkY2SyuUJuKGOG7Gwakd7CMLE6Y3lYaugRlk + PfKqo2JjMSafooX0RmkxyeyJS1sURqNrVuzYM25sXIQvxQnNhiBjVwTDTOBnkFYUV1PxVpiyBUXTlCSA + QcNWB3IQM5N/ZTcAErhWcS8VZjOyEVByM4Jt+BhZO5dKFGz3eidHo4sqK/fr6Tll1aqrDjnku+ee+9QN + N7x8//1vPfPMn19//cM//enTf/4zcwzq++SDD/725pu/feKJn95ww70HHXROZ+fRkcjhbs/BunN/h2Nf + h2O9rq/XtLU223Lg0G5fEgxM9Xjapd9SYCFDUcYFF8yde/rppz/yyCN/+9vfrDfjy88/f/S44w7T9Y1c + yOHYFei12RbbbDMJYUrvKIhLpw0GQubu3MfMEA74xMuvoajoK97fzDWkBBlHgqj0f1ide4U/1q57dfew + MF8g/a/ddSfMz+HQXhrWZ/lfnOuH9r6AAXJRhqr/OU8cD4WOUn0lMDImRDKEvSei4mYiAK6zRMKDsPkj + wVBcXIRlJpaQFTUZi33OjXLOLDjlCakonEioU8bKag9lp8X4nCxu3U69MBrxezwgDTWOVbRgcFa40QMG + CioIZMMHDTNP4Z9BWgH5gDf4jQLtYhTNFgJ4lA1CjUwGydpgi+g6/kwcfYoAouJeanI3YyFMD5cMtlFJ + eWR9/cJp0w5at+70LVvuuOqqH/3gB3/+3e8+/sc/Pvv006+//to60mS65+f//vdfXn75iWOPPRczUde3 + OJ1HeDwHORybbLZ9bLbd7PbVXg+WKCiFuYaPFGsVmzWCtTp+/L777nvVVVf9/Oc/t3jRj995577Vq0/S + 9WN0/RBdF7hrt+9GVRybjTilAkIuQSezbsDsNlyjUMPJn4PC91/PLrP4ynzzuyliqrI1rb9T0hykU1k0 + D1jli9/n7s5UHl7qIqFBmnsGZY59atGMYTLFl51dkaAcWzgch2c0GtI2IG5o8V/SZoU2rCz5HQ5BGOOL + bwi9kQAPITc1NmXFSl8CuWcmC5+fLe4R4/pwurJnDg/uDV4UxkYWNShSczKFOeuJ15FKUaw12WMybD5z + fpuRyVCcH60sLVFKzCo4Z7glB/AvTO5QHJh+zV7i8hbbXSo3HJsP8IO00igxb4TkrQB1Bm+FAF53jLfS + 49AnsuXZiLEp1gkpChxO6EthIS5WLiEQN2YOrlm16qYbb3z5pZf+mZWRZxGHUu/2zz/+8eH1609zOk/U + 9aPBKrv9cJttg822q7TYcF3C7YQ+Q24i2gRY4j3d3TvssMMJJ5yAUfivf/0rbRs+fPPNuyZPPlfXT9P1 + 412uo3T9CJvtALt9V03DDTtNnl/FCBVZhsCaV7MzjsWDs+VRT/Eb43OlnRDM66fhrnchsM0KvElbMJeU + AWO5z3kIfA5ZoaGQN1BRUpo1oz1TbE/48MBj0sushCrBfxInku1pfYmRdgzJKHd/DZe0O2e3A60N+YPh + UHiYKGScnxmcTdltjBuwR/3GSldbuSmzOVhYUDCqbURNFTI7ZTxQ/gRtB3YA54mTwDDOzMtJ5v4QPrUs + TiUlnVIFHhIyXQ3s5Aspod3jR0M1ijsPBqUi5piJnYNZLUpjM+h2BeQ7bQT84tibcbxNlR4eteuluqtU + s1doWo2mNcqsAGHqSVakwjxYmoq3QvRO8Vbm6fp8p3OeIrDIGBv4AQ+zK0Y5UdEvw9YhCU/RL5fssMNZ + Z531wAMP/P73v0+LKMO6wzOHHHK+rp+h68DhKZoGVu1ns6202bidSXl5OEhx22IUlrhcE7u7p0+ffvDB + B992221vv/126la9/9JLdzY3X6rr53Fyl+t0p/METdtss+1ls62w2ebJk0PMwYDG+6rSJxAg9fBuqeUL + oMj09A0yja28pOxDw1hiJSzcZvEMaXdTkSaqamhiCZf0oywZQouDX1VlFaR+hZlYSkuLFIOG9yvhecSE + E8tYyyDcRrOQK00RqpGGI4KCCW6PPxEvJSyUi1uck6t7sziLEW4Z7H/DDkCOhOLv6gnQHhYLVkwfcXcC + IQbcnYh1hcPQu7KsNpV21MQaGQ2GeZapLRJrJ8tgL4mIQx9z5rFgdDbU1fZO6KbzWdmgTJ+ShmqLBEKF + kfyMtCcyuE8LuzLqmhrqconRYuaOGd1x+ilH93RDrd/+YVyVo4FYWGhQWlTSnhL6Ah6V6mac0macZpg5 + U1sBoeBtsr6RlEgVq8PuwfppsNtxeKrEuJ4YaQXMg6i5xO1eW1Z2+IQJZ+6009UHHnj3Kac8d9ttF+2y + C5QTkSqgaeDHMswdp3O2y0Ve+QBzR7VTpeKR/zBu3H777XfFFVf8+Mc//uKLL4YV6lKf/JN33729ufli + XT8L0NK0EyVcrbPZlkqjDUSnQ8iUKHU6FRAedNBBt9xyy+9+97svv/wy2Zn/+swzd9TUXK3rACEW4XkO + ++madpTNtr/J3OQZG/2DX9TInVBGPDNJNBTyunmw38pPbuSB1PMzWIseTdoYnhjDA4MpsZ4SKJO2ck6/ + +G3MuZqwl2XRYKcLSM6IWZMWfijB3FBfk3Cy4JYKC6JCPsDCc1ee2MGAygSKWNzgqVnwSAdpCAmECwU8 + nnjqAYYFFHPYDaoh9FdlRbmVrDjIwaSLxTmaaaoo5xSEdBZP5RDWVXLeF+fxuikVa5UAkrbzLfTrt2sX + HhmUUbFUEUWCUgbDCai4PWwpOgGLKjslcUGqtEDPA67Ly0rT6gAM7uLtfk6bDdInprByEZt/j2XA5veK + +J8BgWYpFqVDxsaUqjbifIq6qWSdlXVoeEpFrE4aZyo9XDFWauz2Zru9Q+YtzA6H17a2Hjp16mk77XTN + wQfff8EFrzz44Ns/+9nffve7f3/wwVcmDPj5/fdvcDj2kUwQbKk97fa9goGV/sBUm4abFB8p8UK4M8pB + ClOUDSAcN3o0bsbjjjvu+9///nvvvfdfBEIu/SzUU12/kM1uP0PTtshgIXYbBi5wRZ8I5TaPZ3LPRIDw + kEMOufPOO7EIkwUy/3D//XdWVl7rdF6p6xfp+iV2+7madrzNdojE1x3laTGasTWhyeCCNiKpynvc78qW + fr//915qMaMOVJMf8kmHt3WoEr5VJt7QPwUcNhA6kk1q1q+HfUYOjcVcb05Lqdv6uprB4cB01rN4RtIZ + 2D8LG6GphHa3YhJbf67M7/n54WRBSp/bW5pf9E0qc6ZoubRrQ7mYO9a7JZc9WW0ARYMHGGO5ML/AYiZG + XAMYbCixZREvTHYjA0BO+JrykKGj0bhK3LqTyc+I/Jm/UFU96PVgw4n0Oyl6orQuDVaL1M/s3/hO2AmH + m8pOU/JdZsEwEhhUejiJARXBYFdV1ez29j3nzTvtwAO3XXbZ0/fc89qzz/7t//7vi88+SwtR//jjH08p + KTlS1zfrOkYP0/2+DjvWoXItIiem0gOU0aMS8gISCAGVDRs23HDDDb/61a+++uqrtBcy7wAI8cEmw5r8 + PPbhO7/hVJlybX60fv110nq7TILWsTJSiHU7R2Y4AITVLBEKC6b29s6aNeuII44gieKdd95J2OC377// + 5sLCa3QdFLxE16+w2y/QtJM07VCbbb0EV3IWydDojDlFWSKwZFESNjxcF8t76/NgLq/KMB0rhTOrROUc + 1l0JPswkuHyHLBo3THfxv3Ja5jsmZYukPul09aPcanH/hJ2ASddQV2PwEjE9YYrk6BUUFdJNdXbiriuC + XkncyMP3mIAQFQiMu0R9fc2Rhx3Y0gyfPMGHkW0x7T3rlpOm6XN6XY5+Nk2y8+AcbqipwZsatwMDhiQ8 + XPfWG4BFrvpBMHe8PGsrroqkpzfTW5RbUoEcK6zq8pL5s6a01te6kYOJZRoo56d5U38ydFiAwO2sFpsN + +U2VwMDGF0guNTHBMHZjZyXrbGChSuODZLxy6dIrLr74Jy+++O9//QtIyQiN+nf++ut7V6yADyJibHY7 + po+KhO0sTR+ABAcgRmF/GMxuBwsRglJAuCeJgN/5zi9/+cvPLCCu0TZwDuz797///eGHH/71r3/905/+ + 9Ic//OGPf/wj4IRx+dFHH3366aeAokU4/PzDDx/u6rrB6bxM16+y2/GOmoEQzTaAsMbhaC0pnjp16vz5 + 84855hhCm++///7gvnrz5ptvqKjAuLwCTAUL7faLNO1UGXfcNxZ3BAVxtyLqhn6NSthnfdAv5OZw+Ai6 + WyT7DRprTEfOmJ+MoZtsdkobPLP+jgzeE8/ZrJkENEancOH8TwO9uGXcdBgoGc3+zPVWltKCY5CREzaX + ZyWPJd9xRHOTUeYmre+ro611xtRJRuya9Q5IPNzMZhGXNjlUA0F/Q32tMBMdTGjD8lHpg4JcPNCRW1Nd + OalnfML8cdBl5vTeqkp8PEP88bhcQvRZOvGBwIDLT/w8tc4RTQ8FgoOHHD0pHE3W8nVZCkztnTB7Zi9r + HV5aHnp2FKR4yy+msWImuWAEdI1oXrtsSUddg9emKcWyqN9bGg1DWo1XNYuVviNpvdhmE6wWux1WS4vM + YVCUTja+IABtZDIoWWdldggVNCqnU72PIjV2e3kksvW44+6++27yAT755JNsUFAe8+q552L9wAo52+EA + SMDCg2223SX3slcahbUxYiRuWIAQp5ABhGQjvP766xkBITYfKAgEYkr+9Kc/feqppx6Vnx/+8Ic/+tGP + 3njjDRAROOScVrDwne9+93a3G4uQW/iOpp0lXaNYb8s1bYHbzSBolkUt6gsKQG7cuVu3boU1CgbHddfP + rrvuQo+HWCOWpTiV3X6xREHOhn252mZbaLNNkUHHOBRkgdIfwZWKGFm/RVKbsJ87rbxTg+dqRnIkJMgE + WeuFpYAxLofcUnV1JYUns76L/4EDmRwzKGYvb8jtdIt4b/KHS7diTJAZRkwu+yGQeeeVlhSPH9ulZnYu + HfD4U0fjCC/xGXidYW+vJNb3xwjpxl1X7XjLtRdv2G1tVX45aSoJbzqjZUqybsPwlbzt/r/zcgb9/mQE + NroFFMwiNpb6oQk7HtW0mHQLAw/6khmezWsXGUO0mlGbdrDgBN5zj5VLl8xTRKq0Ufe4E5qNPyXXYnBb + FLAphouh21Lo9VaGwvkOp5JuwXQbUVU+fXxXSUCIIyhoFL5QnoLM7CanjXgezjogEFbLaF2fHc2fn1/Q + 63RO83jmRCI95MAR54uphdXIfG1lkHFCCPpwSn26DiDVFhcfeOCBl156KVjy97//PWsg/Oitt24MBrGE + gIErNe1sTTsm5l3sD7PFgmGwcnDGhmNAuH79+quvvhrowsLL6OrYfETpXnzxxe9973vXXnvtBRdccM45 + 5/CT7/fff/9LL72EjUhiRgo+i7rcl5988sS0aTc7naLxDsclmgZxFO8uKL5E0+a43d1uF0Y2ZJnG4mKA + EIvwqKOO+u53v4sBaub4vHzjjWcGg+dIaswF0sWKLXgaBBlNgyBDBj1SMkibki8BCpJYYtiCKnyrPARq + 5GT9MTstZJp7AhYbpNRgQHCKs5soRI6TO+mxzBsEERLSyL8lViBzGs0bKqJ7Bk9KPI2Uph59N6azvbN9 + 5JDPpKlbKXujf6B4yB3XvyH95Qz6Tu4KEIpyE3m2onDB0Zs2Pv/Ydw9dv199QbXXkYBOBvcHYdncx1yc + fcwTxOxjG7xcpRNZA8ITyfS+0u5vduDQHliTnR0jiotE1STwKRQKoh+o4hD8hsEzhINb3ZQVnvBgCBTI + J/PADAg0XJpmbqdRbCgckysDqLDb4G0SXakJ+psIaTrsChdJcseQAkKoeAAKlptYLVODweX19ScuXXbt + EUfcdfbZP7r//qPnziWTAVnO6bLKQWds5jXLOuP7hiMDIDVVVa1aterkk0+GsYKDMSMoGhCx++KLx3t6 + gBN4ktfb7ZdJSwgHqTAK7XbksNttIltOyJXJG8l3uWCNgiv77LMP0PXWW29lCoSA0G9/+9vHHnsMgxIT + DQLq7rvvvm7dOnIbQMT77rvvZz/7GSZjmtN+/fXPjz5aNRtWy6V2O+bg0TEIJ5hHB1LpgvQJ+nxEVRUN + pnePPPJIbGiubqQSvvn448dHImTNn67r5zgcnOdCTYMmerSmHUCGvrSMjaxBUDBOYjs1CgpV4JzwccAg + 5V2GioUaMGvdtO9g3A68hiJZQYQJEhPFFVdz8GnlajJ92b9M25PF/rQ8IdFUsin/q9QkLI/Wlsaaqorc + p+8s+oWHilNbXVosFqQF9l9pSbLGo1/qpjJ5nt3jdHU0j5g/ZXpbVXOhL7+8qJQcD/PsT7NJORgmPkuy + uAJoMXJEU01NgscnBBaGKMkda6+mpnL82E5U7YlGTp06cUpvd47CtiJqWBAlYydhz2c0BswmoJ0UKFmZ + yJzboBIblFwnyAdtBKIgsKcUy5RcWSWp607n/NbmyZUVfDeEyqI2G2tsIBBiJ8+73ueb3da2z6JFsFru + vPjinz399N/+8IdPPvpIwdJHf/vbAfX1CE8jRY0JgpA05YcUO9HI5xPUTfjSTmeJ3z+6rW3hwoXM7Lff + fvuvf/3rTBkrZix848QT73I6b9L1axyO6zQNygmIAol0jdezyO+jQBJtECUdJBAWejwTJ0wAVwCw66+/ + Hg9nphkUX3366Vt33/3YMcfcuOuuZ86efejo0RtGjFg1ZsyCefMg4Fx22WW4STEZ//Of/5gji4pcY4QP + XzvxxJtdLlAQQ/ZiSZPZKp26aK0BXVNlsSQKDeJ/BghHNTXR4BUrVpxyyimPP/74u+++q/yuf3rttTNG + jjzG5dqq66c6HOfb7edLFDxW0w6y2fYgn0SqqalYKasBHrriDcXpayezBQVZzwJp2crsRxpA2B0qCETI + 5mLFLF3vGXxA0Pa2lpaWxkytSW4hbYqtlXZoQ1pNwbiiC0mmgnysiEzvy0qbB+wDvAB4atZWUdwhXONk + 3JrYAUziE3vG1tWxROv/2G2ikuSQtA1nHS6IXOg5qk0As9flUbkcIs/U5mA0Qygd2zZqXHtnRrI4/T2f + QxBCNcncP4K15Pcl5ICBgikWjxk9NRGo84jyyByFwM24cZ11tVW5RFNEx0ogTGjLqvc2bmIyB/xMyEfC + kyDVKPuPzXB+KmKnYfnB3lTcFsBAIZ+gt9hsDZoGF4ONON9on3duVeV4vw81E/KsiasJ6U6qv8oMv9nd + 3WeffPJ9d9zxmzffNGcvmNHoySuu2Nvh2F1W/4H0KIJScjbHHUfWNurYUYedToS0WRoI1kXyMcvw9R1+ + +OEKCDMK1MWZjx8899z3A4E7nc5rdf1WTcPHSEIeoLIbxRYcDhRnuCnagEUr7Fq3W+Xk7b///jfeeCOX + zhQIP3jwwWcLCh53Oh/W9e/pOtfFsLvC7d5cXb3LypVnnHEGfBZOSygR8MMuxJWKAUdgDw/wBx988OG7 + 7758+BEQZPCIYgtixsVlOCj9MyGxpmkiiZAKUB0dCxYsIIkQds/LL78MxH72ySd//d3vLl269MSS4qPd + 7uN0/Uy7/RxpDYOC+Ff3lIwhqKcsR8xSanEpgzl6RK2/SgTag+6AxwkLOoo+e7JqXMlOCAdt0qRxqGma + dxBLZJPBqpKUrDfJ+p6UYvUg2StYAkP8IamPZUEGOjBZe58wDgTJk9kFr0goUhwpNBKfmc4IyUTD8drK + Q3yviU5HMJlqXszXw3EtImpChyznZHMG67Id5k+ZjJNm+wdPYG15JeVLrBsu7MkjsDhGU1CHGC5CuMfC + fSncNTeb5597atTg0w7R47MBtKxdYl0qWq/EH5inDJUyBXhGVkM0ECwrLGSJZ8h1quCfsv/gpyjLT4Gf + KDNrs9XLWuogn6K3KN0W8vZEmT0p4CJKmZvK4+GXIxxIfeQNe+1FpsFzzz33l7/8JaEP88vPPrt89uyD + HQ6y+vbTtHWyogITOmfDFqF+bJ3fWwjJC8PU4cA5WR4M9U6atHTpUlyLRNrigl6Zukm/+uyzp0aNukfX + AaQ77ParNe1MTUOxjGYgJ0b5PZCgRvp+MQqLY0B4wAEH3HzzzbgZMwXC/9u69UmnEyB80Om8T9dvdzpv + kBkLBOrW77Yb3tEHH3wQQxPkI1II+GHAcYP/Jz+/evLJR+bNv87pgttJPO9sCWDYgmiNKuhSeX5wfFiO + QJNBVqaMsk2LFu2/337HH3PMeSeeeN5hh521fv0xc+Yc1Ni4r8t1iNt9qK6fZBdZ84QYj5PJEttpohQQ + lkZ5SzAwuaWhIhRU9F3DIzpEA9jSaRRoEVNAtcb67BFblFMZeIARKbiQQlOz/zUnqA+pEH6+paZktJOU + sxFaM8PAqZTurkxaAwE9wyO2n11di44rDEfRQDHOw5xeTb56YQk+wEzaktm+IjUns3vN7PzDtzdskQVz + Z45oZU2//SPMRLSVY9mNCa8+GDBEMoYFVVmkeUa0Nibj+mLkEZ/DPrNYe8VoGwg6duyoUaNGmlceIlkV + d4cmio4OIdsli8dBd0EhxtxUA4UNXGR9RpcZ1t5g2kvE5ysIBiDnKW0zI71PQaBS7ATJGhx6k7T5UCyD + 1UmBWaPSHvGzmS7X8srKfbq65jid6JahXsZEjF+OuRhjDjoMqNnq863caadTTz2V6Bfze0KUevfnPz85 + GEQzE3Hnw2ITMYEuzBFh2dhsmDWi0iyysTKJvrawEJts9erVZ5555hNPPEFFBSscyxQA+cYhhyjj7HaH + 40ZNw0NIHgJ4ALRMl2xJwABQwcFbEgNCDKxbb701tUpLgit+9dVrixc/5XY/4XY9ouv3YoNKS/RyEhl7 + ekjSv+mmm+DRgHwAIfeFj5Qw5GuvvfaLl19+5sQTb6+uvsbpZGdoruc69HM0+1ZNAwXBbGXAifRHPNWa + xhIEp6iyyKd1do6rrBxXWNgTDEJH4klRWXAXhwMT/ADZ54eDhRIFD5MEGaWsrUKDQrA0L29sVcX00e2l + oaCROP+N2YJZvBFWDuH9NSMT3sWyspKh0v2nAaykmWiyUxNVdpeVu8h4H4v2ROrzxgGSuFWIvg7nkDgk + E15aKMWEogFfIEdnWsb9Ze2A1Alq9I9FTXQefMC/XWQVKzwLxyyXw/WBxGcKW5Y/ZVGZgfE8uqu9ubne + UOATxVAcHiHe7fWUlBSa3x+F4jIyktFSLVWPpz6VMPtiEKgMPrdOdFZQUY0cBoV2StLMvCl5M+FyVFag + zG0ol7ElIVfmdHbouiozi2IZFdXR6lyan79x/PgzVq3aduaZLz300J/eeOODP//5kBEjKCdLdVnq1TGH + gmHCsSmlXkb5/bOkuNc111yDXy6h/fTsySdD1hCFDhyOY+32A+32XTQhmAmgAoRYY3BVFBAK3iaoXF+v + MvkuueQSYIN8gxyB8IMf/vABXb9b12/CKNS0yzXtZBkn20Xei/KOVkpQQahpck8PV9+0adMdd9yBlZaW + 3mmGwy8/+ujFsrKnXK7HnE6uiBl6C0CYn3/xsmUQRxEC/clPfkJCoQoHgoWc/5e/+MXTV1xx9+TJ10GN + cTqVBOgFkh0DdOHCVQa0QsFRoKA0xA0UHFFUNHPUqP123vn6889/+v77f/H882+8+OJbL774yx/+8LZN + mw4vLj5I1w/WdTyiR+nOTQ49zilK5wt9A4edMJRCQWZoiyObt3go9aCtTUrZ7TWEb6tqAIvRmspKEqIy + bQ/MPgxTizNnpif/X92fetyoUAa8YrH/rboH2oObkVGeuweV+6qvrhrd1qGKj3Oj2aLIUGJPXG+bb5N1 + j8uug4Vcj4VbnDlIraXSIpSDEte5zuIhskogBTbhYisu2wE/p08XNZPMqQ5KzEzF/IwStSrbQW3UWMfL + UaBpxXL2ZA6Fc49oNRgGkuHznOF2r6qt3TRp0lWbNz9xww1vPPvsP997Lw547j7qKFTK1jkca+12SBao + kFDKHODk8HGRyLSpU3fbbbfzzjvvmWeeGVyx4YtPPrlrxgxV6OAMstodjoPs2poYEI6IUfYFDVWWmQUI + u7u6ZsyYsXHjxuuuuw5riXBapu7QuP3BnKeam3FUAkt3aRreUWDmCCDZ69vZ5QJg2iQDU1SiD4WmTO4F + CA899NBt27ZhumXE0/nXyy8/7XQ+4XQqILy/vPyBnXZ6+MorH3roIUxbCueag51ff/XV7x5++MGlS6/3 + +5E9U7agUj47z24/wW6H3apwC7QWtqCmYb7zBGlnuds9t6fntK1bH/re9373298mS7W8dPFijEK2Q52u + EyLRQ/yB1bL0LlmDiMypAK1KX1Epg5k4RUXVl7KSYiW5/v+3j6iL4EanPTM1YyaT4sKC4aCy/2/3vzIv + ckRBOtdsbw1Jj9CkaCgc9oUydXzLxlClaPv4APkK86PFBQRfE3sDhil7JsdeTdaNeHGpQMsqIcd+BvkU + E1hEJ009Ewd+CHgabk9QEGYq2QWGkmcc21PlOfRvNhuOPjbwT2Q+UJlW1pjFmYkXdFIwuGNDw/GrVt18 + 8skv3Hvvu7/7HYSNFGDzp5dfPioQOARXm6yNR073Sk0jFwL3aW9ZGbBBqgNuzCeffHJwNvc7zz57hdfL + /H6mVI4+XtMOlEncTO6QPszaLqAgflFklib19MD+gDJ61113EaXLhSlj3NRre+/9fV2/Q4YJ8Y6iLna8 + Q98Sjuzq8eAkxNJSAtY1Aggnz5w5E7mye++9l8yNjIzRP2GWOZ3PlJa+vGjRb88++/1XXsHmA//wfxrK + Z1998cW/333317ff/ujy5TeEw0Cg2r7jdJLgcY2mkeFwmt2OJxnnLYJwixz2Xltep82mUBA38qT29pO3 + bn3s0UdZJdBCLOaEZuvL9923qbhYSa1S1PBgj3edy7Wj3bGdbiODxDBFlY6aUhO1viTnzc00e9vKW6MK + D1lRO7Fytm/VPkz2VnIhWGFQIiKF+5STYFbmPgt9qzonTWOUXZJiWmfEDBUH0tyULJKEwDz0Zbo62qwb + /kT1mhrqE+rCZP2QCBPW11UPX7ZGKOhnCOYItOqxDrRExRyknJ+AXyTgmzims7K4SPk8BdVFFKfVKF+i + Uh3MbE/YcqSJVEn1MrUxY7LBp1AbvtC2QGB5d/eRa9Zcf8YZP3vmmb++/XYyhudgRGTuvmXOnBMIdMny + dcf7/fvoOp5Syj7MqKsDCHfdddfzzz//hRdeGFwM7ydbt0IVIQ3gXKntQnCOMBXEUcKNIgdA5tQL3dGY + X7Q8FJo6ZcpOO+100kknwSsBPzJyTiaD8/fuv195R2+GwKJpJBSepNk32R1YSCKzXsmVQduRQDh79uwt + W7bA0+HqGQHhe9u2vXPllR//4hdfSiuWYxUd1Gwo/+fDDx+hRIauA37XQ6WRP2+kVXb7TZp2hbRWcYpu + JMOBUF/AN8elC3qtbB4LmsldXUcfddRFF12EwYrfmIUCHCVk1biQYTq//8c/bjvppH3z86HpchJ+YlmS + O7/S5Vri9fbabJ0mQVGzOchEw3ySReQi67d18IHEv6vKh14HYwhbOKynguLQ3tba1FSXolYSk1v5kJb7 + Hqo7ysyzmdEcCocqFBj+PJKh6AlmdlLooKRaPxnrmoqyUitUT+vnJDBOIZFhEs81/KUZPcS0jVeGoDnV + obaibIeZ08rCITyfItUBG92uKfAjoqaS/Kqlkme99JgJ3orUc6FQLY4+vvObrnB4ekPD2nnzzj7uuIe2 + bfvrn/+ctY/xF9/5DrErQn1n+f2XRCMH6vquDgd5gbNbWwHCvfba6/LLLydGGGe9ffnpp9+fMoVMAJS9 + LrfbEXYhh4/6CRQ6UIWEYKmoJG5RgF76RRvLyxWynnvuuU8//TRTfEZQlOwGP3/vvR9UVJi9oxRzgEKJ + pxdX4UQK/IKCdFpBwbRp00hOP/rooxGCMXLysu43PKvxQP711+/jQd1jj1uCQYisbGCh8oviQCbhD5In + pFbM7tW6YwePe5ImeK0qd742Gt1xxx3pHEKYZ599NrklZO4jvkNH8Xn++ecfuffey444Yv+2NmK6ov6U + 3Ci3u6vTuZxkUGpX4RKXhrg5fV4JijL8igryJ4wdQ2WxDAzDtIM7kx14rYQU0zBxSUwtSWtgZNLqodyX + WZTIi55EGVxdSRCBMvTKDk0TU/BlRL6aRyRgWLkS50GQjP0tTqPsBglzmKRthjHmlqQvBL/m/9ECLlae + /uB9Bia891fyY0rC+el3CD+hMv4qvJ4pLU1thfkYT/15fhL8zGzPsapKn8MxiXrlkv9CCHBmVdVBGzZg + WqVOb7Ayy3/8pz/dWFEhPJwuF7YdXER8bmt0fe6oUeAWyQaknyNIFneqv77w4g2RiLIIsXUg8TPFY52Q + FY7EMwn1GK+KKUM4WgFhe2OjEnahIiCCZENWJv7rr3+x++5wR8lnuNNuv0FyR5FbU6iMkQRpli6Fe8LV + 582bd+yxx2KPIgFjpXOy2+fPDz74+OzZt/r9WIRXOZ2q7iDJ74fZ7UoQ1eB2CglQVZQxHJ48cSKFJpYt + W4YIHDTUs88669yzzz7t+OMPWbt2HRCenw9rFEsd4QK4o8vsdoRJl2MRFhTsHArS54LuKzNBGUvwhw1z + UNBkyB+trp40ftwweVOye0cyPSqZhJv5PLx3sMGHPKKUaVPZP24SBk2Y8FPYgllcYmgOEcI/drijSXXO + hNSk12cRnzkbZVqDPiMnLHEjBYEiefGH3G+McUCGg1tPLNks6jwQB87Myh3QKKwxvLWDwR6XS1pDjaNE + ktzwLwmtdGP/stHKrin3GZzz7qbAL4GQWApEXCU/7L98XSfCp1L9mv2+qdWVI/xeGIMqyKdSHRTyQVqZ + GwhsnDz59F13XVlcvMTnm6PrpDpAAZ2q6zPa25FoQScF3U5cl4NjeNYn8R8dcABFfJivyfI+Fi4i06vX + O2f8eOZlqCVYJ4NLur9+6aXYOgII0feSXE1CjND3oYwaAUI1HQsUdDoL3O5xnZ2cEIuHTAOQlXxz6y1M + vec7N9zwgFPfhhGm67fJzPoTbDYClqsQWNE01g1CIlwCIbn8YAwMl0zrEcIFJZ+dNsNeIVk+rS37xccf + //mhh57de+9bGhooRn+6y4Xz+UCHA+8xYdQFsWLx2M2Yg6T8s1CAqVVbXt7R2gqlaGJX14TW1o7i4rZg + kFExxuGY6HROcejo2AGHEJowdunqOQR0Xc5exoxEwTrpTmBo0e0qOqhoMoxSqYxraU2f8zsxXCeQEYf0 + gU5pdmaj1SXEQ+Q1LN5AMu00oZPs84f91HvfTp6gUQChRTSx1AAxnzq2J1RaOibBit1GkZ0gSwenPxlt + REC6ZczoF0tLN8sLwNAFazHLZic6jM7FYdjZ2aYGOsmRihgZty+/gQxC2fFcHgYomJBXaeWOuC75DN8S + IFQlSqw0O+GTMuOfkequvoQCvoJIRHFhDBYozD0l+JKv2ardrlqnk7AfPjFl/JHkrlId4GoCfvNDoX06 + O89Ys+aRa65588UX/yWVqa/asGGlrmMB4LTEIFjgcMzx+abLfACInWAh9P2ssfDdRx5B9+sqmet9qq5v + wSgMh2f29i5atIgCQMg9xyfUf/31IwsXAoTU/aHiAfwUcsNVgBC+BqYJWeFGOcCQrhf7/aWBQO/kyRRS + wDMJVwWmSab57Cmw8LN33328sJDcPryRcEep54CFincU22u+ptGrYEmHBEKoOqqSQ8KSRgkvQTtR00ZV + gKNwVz777LNUrgBHwUUrvNN/v/PO67fddllX12HS1F6naSp9nuUC0IXdTN4LgnY4CUi1JBVJVIxSmnDK + ZaoKF+vO8S5Xt90xWdPwPLOhpo0VSJoKVXzJnSdLBFtQoaDIVxmkpjaEE87/q6ci5w1jBva4+QaZsfPD + kcEV35hAyMFzQguPzbSKIMmx/Az5gxR1sI6p2XQpfDxakBHpMSEJijOAhQ7L1dizaWvmx2SEvur0oMv0 + aZPGjYUfJ8BPZosnWNTwV8zBHKPlWTQv8z74lh4RB35K3sxgfhrVHlQZW7Psmcr2CzNJoedJqp/D0eBw + KPsP/MP4mwiqBQKkOpy2evUDl132y2ee+fiDD+Im5fd+//sja2v7Ux1klEhQWiSxU2EhKlz4G5nfswAY + JFp+0NsLrQPdE6JZFPnbIAsAQWxBHZtiQ//4xz/M7fnXH/5wW02NcvqBOgQIVRWhZTIrn3mZSZkAYX8G + ocMR0fUKgppSNpMMfU5IiE6hiKp2q+JtWRe55TwvzZmDd/S2mHcU8g4Fe/eW9RwmOxyI6XTGgPD444/P + CAgBvBe2br32iivoCo6FQ0vWIJWYoNt8/PHHqWsQQp9547bb7l21CoHsjZLesquSw5aeTJHjqIpCyDAq + tGFqnbCBhUruHJep4LuyWtLshIfpWI4C+dj40ild0AQFqdhJXJCVByjIMDNKIqvcQasGztC9dipB1uL5 + +sllOai3MKfBxlQ5wczqhKhEWSHLDTDaqfLLjckT61NI7QeCpYXFnoHoyCFgCslRMMP7Z11U+F0Uuu43 + AfEJFebnZwSEsX6w2m9ios/oJtkZQTW2jI5K+BQF1CMF4ktCLMzEgkx4foAKgkmmAmzC+zxQnT2jVYLF + 8WrejRuFt0I2RYrBVllZ1txEYtvw6Cxk0ehsDzHwz4EqrE2smxT4GVBnkD/xRCEtTQEwI/NdGIJk+2ma + kPiSk5pa4GMC4q8j4LdDcfHRixZdc+SRrz7++D/Ahi+/TGH3vHD55UegJ+Jw4GEDEWEMrtb1eW1tCgup + bUSeOC5HK5WABl/ld5deSowNqRTIL2dgu1RWcs5ddtkF4gZJhHEVFX5z663Xut1XOp1YkOSwI3SpzC9B + TpFTM5omKomNIYKhw7TeLAspUK6B9HOsK8N4BQXBElyONJtsAbip+B4h5lgxtsx38ccrroA7inf0NpcL + oRnK8lGhkDoMBNLwJGNtjy0RJY1wJp9wwgkYdtYtws///vcflJTcMmUKvCECeCwODjnkEOpX0C2/+c1v + iDXCHeVsQPuf5YffcCP/+M1vfnr22dd2dOAUPc7tIvLKI9uFwJ7MoKeXwDAADPQSxFpGjs1G8hrzNz/x + oNFvTFjkP+DAqdL1erujgYx7mSAIfPITUi6Hs+Cgq5VaujoP443QBYNTpUxklDWR7Ssy4DjhsdMc+KUs + zrfKkLK4c8IWEvgsKSlS0yZWXVGkIOD15S6WIswnUXRYJBwbMypQl5+fQDd/wF0gLYmWqAyBSY2R9B5p + 9qTlKLIOxs5ceib+wYjbiWF1Lg8b+n5jQx0k4MEnobnY1NbJMgmbQfjQyDKRUTergynZTeU4wlKcFhgM + w3sU8cIEe/Hsx4xup0bEf4uilstTNo4dQHhhQofl6/aotHelbWak/amc9yK3pzYcKXA6BU+SNZMEADZQ + kKU92X4q4b3b51s7ZswZe+315B13/JGqeJZDZdRHJ9XheF0nEe1wmfmH1NbqUGjm5MlM8SQGYLL84Ac/ + IP8MIyZtECsOCz95++37KypIS1cO0r0lZRQJmIsvvhhDc8DOX3/94ubNSKVc7nRe5HBcREBOpgQQkGOK + x1hhjsZHx7xMnxBjV0DYKU9IRJMaRq+++qqRD0A7QUGwBE0ycAWXKZYWEtWZ3sLHr732SCRyn8v13Wj0 + 0UiYCoVU5iNvfRcq/El9gG7JWVVASCUH66UQ//Hiiw96PLBSj5UF7tUHDhHlJh5++GE6h2L3fLgpKvSC + 8Y/eeOOtq1ZdVFWFk5mHdSRrF5drf5drN7t9hcp5x6SD/RurC9Fvw2GOMPPGRpdYVGFSg4IBf5XHXWrT + yvJs/TVDpB0pBM0l/mEF0tUY36J4lmaPEsRn6o6FBtUYtvhBY5rN4s4pdlMqaBZncIu7pbqcZOqpHYRd + ZbmYjzTCEtuuKJqR8ij4kj4vpYqov6bOX19XM2f2dGbpFO0x7ojpF8iwQpAR7km7jntSudyU1xMMFaqS + 5nI61p8l7VMxzNwf5+Az0GvcmGE7myuVKEjPtMhIikaCglmXslQDYkRLU/c4ouzp1yPZ9RWsEJ5SwmPp + KAix1t0j2TVgOI4yg5+R80APgnx+3RmkRmhM4VrJuzCLMQ3xluD2rPZ4G4KhYrsDtRf8WgR+gEAiPaBg + ta6PLSk5YNmy2y+55OWnnvokZZJ7CqPwz88+e1E4TKoDFERmWJKpCTstq61VszPke2CGVAdm+SwcpK/s + sw+2FIx/HKT7Tp26ZMkSpntOGEcZ/ewf/7h3zBj8omiGXYlUiqRokiGOWth0mTgBZQMeED0jZHFk6ItU + +u4xY0hdgHqDXzGuBBKgiM4LMU5QnMx9vrADNpYVTsr2vvr66x/NmPE9l/Mev/8et0tVZcJhuwc13yXt + aIIEQqKeJ554YkIgVE7awf325zvvJEkRc/lGp3NTXd2MadM4D4n56OMQmkWIFWUZMhyeevLJey+77JI5 + c04MBnk6xygI1PWNDv1gp2s/h85CASnwZeHQLnU14zweesmgd4J5yp1uONj5zquFXRh16mHNpoYZRrax + MeQU/qn6kaKcsjC+nVGX34NC4sCiu6JYQzpXofRnDpDxHL6JdDje3EzPyewdDosScoN7RvwJkRhZLA9b + c+zYTvYUyGKzVZSXlpXyQif2N9NjHBeJhNSsq1DNesMkPROnkubSXWE/ygPCFto+gUtjy6UsTSsnDfoD + 0VBESH4N50euJrLhJg1no7afm7Z1tLe2NONN+d/4WHlXh+lO4sBP4Z/Z+amkPvvT/mLgx0qc9bhI++P1 + 0DTq+ZH8BwWGZTvJ0bwrpQ5HJTXwWlv3Xr78ivPP/8Wrrw4JT/L5Qw8lMkf5AhQ+FRbu7XLNGztWYSGy + KRS8RVEadMnUKPz7M8/c5/GgJX2dz3f4ihWYg+SeU6gBqogZm0mVE4kTTueFMnGCpD1V8EEkTsiCD8Sr + FHFR9JikfkCWIZkdZIWxqYpOmE9IU3/58ssUeyJhEWihRhJBRLAwma5KsoXC7yiEJAW4b3I4btY0TFUo + PPugoUrFYJJPBgIhRqc6D71EeBJnLC5Z3LMqgd18iV+ccAJkVFi1SjJ7c3HxovHj6WrcpPQPqSCUzL3p + zDNPnTp1k9fL41CbIIhCE7U7qI+41qbhEYUpCuN3XWvTvt3jOrweUR9KIplB71RmnNn3rhwPRmkRQ11P + GH8yFkgP81dVZVA4KjAsADNpBZqnP5bUcNyEyrxlSoQIAwWC6GdmOpFa15MaknqBqecEgR18BmGHgLpQ + sLyshGTuwWcwrwD4bp1dCG4BnJw2m7w4m2B7KO69aMDgJ0XPlpeVprZGjZuRblnJzMzAJTBME+x/87SD + Fw1CadPh9Lm8WK5D1TmsXEK+7aLbWd8wrRXF/3xiNZT1SbI7UE0ZKpqSEP/M5W1Lnc7GUKDcrokKR9A+ + Kf0qmZ+qvJ+o8IdclkyRhuDQ6POtWrLksM2bzzrrLDIQMHQoSpB7wsC///SnbSNHEskDC092OBQW7lZY + qCwVIlg4M3/84x9nwZr56pNPnps2jTDb7eXlZx52GPROauxh8cR5EX9x/vkicUL6RUmcoAaQkThB0Qk8 + fkzxyi/KYltVpa/Kz6dtFJ3ghJh9cfE5cOjZiy++ZeLEwzdt2nfffYnAXXjhhewGAANO1uH8o5/+9CG3 + G+sN1s+dUsmFth0ASxNxAIzCgUCo+gcHLFFJQJEIH75Z0PcXv/gFpFBzluEjixaRJQLqkwvI4kNkQfh8 + OzU1zZ89G4v5xIMPPmzy5N283jU8BRm4FZovdvvemraXzCdZqYklAjRRSJ7jbNoYl2uk28XgYRWFf20w + scUYiubRqBSIDO119X07JwumhjQcEgYFebmAHFVc02JWtLJmVEWwZK9VQrOE95egSTJHkXEqGjtiRBOh + k1y4e1YMHcXq4MbNreU7xZuw26hnY9G4sji3SNx1seYYlnkMg5RY1PC5+LhJuTax0rEWO+TbuJvf7Zs3 + ddq+u+3aUtMo8itybiNomh+KlkQLEyxe0p2cERMJhQvCUYNwzOjx+/3DMoAGNSaZ/1MF/4TmWaywA2tw + ZivcUMr4aw8HJ1aUjSsqbPN4iPZB+4SOSNofG+QXfsIC7cIqksX/AMjOkhLwifJ7Bx98MD5G8Ml6aCoF + ZL69bRtcFbAQkU+iUDBowMJlMghnGIUE28yl0i0C8P9deul3df2BceNuvPJKjDPajBdxAFPm66+fXrtW + JE6AhQMTJ5SymjlxggAyQEistFU6b1XEEfGwwVrbDy1degcCb9KuJddw7733vvLKK1U9hzieToob+fJf + /3p+/HglMYOqmSpPuEnTVss89KkSCFUeIRV06R/WJcRTUTID+fAnk4tJiXnCftijXJodMBO/+Pe/r6mr + AwJP1vVT7HZKABKa3VMIDjiWl5buOnLkEo+HIsB4X/m5iBIfdjt1PLD/cBSTNU+ZYrqFpH6SJcxJDoIp + KtcKqkygWRQ7bmVm0JKNgiTGF2VBQlsM+rxB3p1BhqB54CuPy5DM+7ykyVKPFOiqq/A6FxcVKtsIPDVf + OhwOr91150kT4TBlE8MCC0RyuoVjKXtOjXFIKGb+IO3HdBumqQYgoWFD0s/pJtGh/rtc+zgy6hewOaP9 + h7rJGZxPhmEdWp5GWagD91x39gnHjmvuDLtCDJEMzpJoVzHo4SBlZcNxbElhUWUJTsT+N0F6IHJH56T3 + lAL8zPhn2H/gH/EYhX+4PWtI1kSdhFBfwD+7rGSC2009W9IeZgUCRyxadOuZZx67bBn+N7SqJ/N7KgBI + aijiXl1lZSh7MQVDmKT2EGQKyCA5ik0TyHp2110RtEQOhjmaMuXUpdtAur1MK1y7di2cxuxqO3z6hz88 + WlT0zMKFxL2wBfmQJ2DGnk/eeefeESMAQhEg1DRqo5OlgIbLMpnZZiROKL8oBr7KBKAoJA3DflINiwOz + j37967srK+/0eG70+Xbr6lJwTgl7rg59JiMf71tHHgmQ49293uG4XtOIXx6OCJnDsQPe0YoKTkvtCyxO + /L0sSn72s5/xk/AeJFL8yXg4qVOIjA5iPffcfvsDF1/80NFH37ls2UluNwG/w5zOYzTbRk3b3anvU1Sw + e1HBXF3niRN97NX1qS7XFNRZNY00SraZMlxKIQjYoSrPD0O5XjI8iZ4yrkDBwbagMUTNX+KyVBP8F3aC + rIOnhj5vETwL6wCTKTrSNvxtackQMOn2XLt6t9XLMRBplTm1gP8SYwsGMRwFRmbx4XbxdsbNwAndiXB/ + WPSbHcJDsxZI0mgWG1zO7XBlYRuk6QccvCIhP+dZ20J3p5mFsXkNE5uy66x0hnHattBca7sIApJDE0CI + X7S+vLqzfmRVuNynW5WCs3aVbPZiMZEdiGZxsQH8T7mONpIflP1nlHc38E9onsXwT9V2R/MFs28CE5/T + ubK+/vgdd7z/iiv++OabX37+OTP7Y9deu1TXmXDnsUlUIEEQexE4nNDQoCZ3sugoaYTZgReOFLRcJKf/ + 9atf3V1djctOqJZAaGSm1vU1MkWBUBxinqran0VD0Ew5eW2ffV5auRKCDFYRRhIGk/kkf3vuuVt8PoCQ + OCVAaAQIoYFQTogahCpAqOgbmIMwZSKoonR3o20GtpHgMVik5hfnnUc6/60uF+nw50Ui8yQJFuIPRiGc + TCJ21jvq708++T2XC2ILLbxZGqxbgC4pQTBDAiEfvK8IWxOqRF8GrL3zzjtRuqHm4uUXXXThli3nrFlz + 1rhxp1dUnOj3g3/9+SpO5wancz9NW4uMXNB//LjOXWuqkP6Z4HT1BoILKkqXVJZ3w5SW6X1qgzTUITuE + VAd4MUAgKyoMQQaYWiUQ2FO2oNmfOXhKSYiO5l/GvQ4gotfltf5m4SQkD2rwOwWSQQwZ7Lq0CJykqy2Y + N6ttBLGC/hzzYTWSAH4imkzLqScH4FOor2W1drcy7QCEWB25KHUkvUo0EiGxH8vDSjuGbx+eYhXjogQV + CDFWGW3/KxYhrTWoR6yPfA6v2zHAUTB8nfZfP/NgK9CgwJjxT/k/lf0H/qngH/afwj/ATOCf3c6qf3V9 + /UX77//MnXdSBCAOY/702msHFBdTPZyIFJ4xgGG6PArTsBMzMZbtR2Ye7kHsQhLOCIBlmi1nvuhvrrzy + BpcLbRdS4HHcMWsfEInMnDoVyCGPArg1+CAZweHfH3/81yecQAgNSgsoGMccefPCC4Ercicuczio80BR + IQB4N00D+1UVXJU4IXgc0i8KEJYEAlN6e/EPk42O2nVcoBTf4/2TJyuJamiZ17lcm2TxXqgo55xzDuYa + 4TrrDFhKQzzR1UVavaj/QGAPg1XTSGNf5nDMjAEhpjn9c/XVV2P5XXnFFRecdtrJ69cfNWXKETU1m91u + bodts/Q24wUl+U9kwdvtbBRr5LEilr0kP8JiaJRNG+/1zSwpWVBf01NY0KRpuIWNDfuvVi4L6BCsQJXk + IPL85MJLiZ8ZCe9x3JYsXpysYYYlPenLcVfkN1Mm9UycMDbrGJ64o8zpiripWLVncaBkWjrTzskEBbm1 + LM5v/YkMuXUkrEzdKSz9b4nLFT6PFa+09S5Te4rwsp9KuYFhCoLixSgtEfVm1eWG/DlZV+fDo5JQpzTT + HrOyf1ygReFfXPwPwl4y/FPBP1He3eHA5bV3Z+fVRx7504ce+uKzz5KByueffHLuxIn7ywASMlpw5aFI + TNE0PKgigojrbMwYZZEQAMP+wN5iis80W858dciOz61erVLgFYl0kwRCVMSAnIxyxgecFv7kb38L9kCh + HAylz69eDWKRa3i13Q4t81SX8wifD/hXymqkeBuJEypACFOmtqSEu4YpgyYL8BwXIHzn6adv9Pv7azW4 + XNf7vBcHAkvHjcN6hmQEZYYVg/UwITfyy61bRQshtTocyiI0AyGuUVR4joRcu2HDhh12WE2Qz+tl7cIt + iJJGDsde8ieHwHxZY7eThgj+4fiF88k9CsKLydVJnnuN3UGGaJlNGHzmjUWVkeQXtgCBqVEjBRWTgEJR + YT7FXobw3QYtWPdTSc141zL1yckXMDM3JHvjVySdLtNrWZkQvm37pAVjZXnzEQI3uhDN+X/8g++3t6d7 + Uve4bBi3FvpGDK9hiwyzOKDMb9xzSvjSiqBgcWFpKXLTucYm0960gYIG707R0JXUmZn/Yth/huY1+Ee1 + Byy5mV4vatfXbNny65/+9OOBfPpkWPjwEUcoDueBkjGI8CZCl4QMAVSwcFwgME3G8PgcdNBBpNP9/Oc/ + x/AiXmidGBl36X++8cY9dXUUwMNRCXHmkKIiuDnYUuSMw/iwLp6S8I6U5pn5T59/8MHjPT3ADNWXrrHb + KfJwrKZtkPQQUQI3pqymXH8GELbW1HDLiikD/Mdd6+XjjrvZ4+GcN2EOAmAu18VO59HV1Qdt3EhmAhYh + IdWEQKjSHgYbi3957LHr3W4MZaKnpBIeYbhGy8unTZgwZ9y4Gc3N3fn5o51OHvQkXKbSm01Jh6VSx3W5 + 3U5pYp4diqBLY2wX7k5F+/B2GtE+5erEkYCpx4oqbgP8VJKfkeSgrMA4Q5DBzCK1oIC806S0Ed4dL0ol + 7sQ5u5FQaFT7iGiECw7XB3zyEPnS+t1ygixjQTDZohPVaLSY9MW0L/4drjv5r54XmwSbh/CqlQii0rWx + Huv9r96ZNP/l+iV7Q4swd11NNVrYadcI/+VbTXR53oe4HB3uAgLbYGcL/STjqts1aofpdngSBgHdkIAx + QoDwP1XNP+J/hv/TbP/NDYcPmjLl9jPOeOvHP84Un966995TpOwLKmhU21knZ1J4E8oohFDag9zllCkK + C4866igCVJQ4x/eYWq8ytWPzd9deC4QQLIQ4c2xLC+Ygrr/TTjsNtmeOQDj4uu8//fR90SigxeWot47E + 6JGm0ktkENbEMgjx/qETppgyo6VbWDFl4GeaT0tu/mPz5t0mgZDteoS//f7zRo06eY89zj/vPOrTApwA + odluNtL+sCzpOhytcbfJOW9rbibhj2dB/T+037D24HPOCAQm+v0dUtwHoXN4TIRveS48Hao3wHOZR+q9 + tPxw80L1nBFju2ACdkqBbJEYo6J96Nc77MgmqGR2oI4BFrcJrpBcfhl5DkaaoJneCajU1lbV1GBVJp79 + +b2MwyS1rngBh9vRwhQneAYxoxWSS1xCQnbvcmzyHHC0UMO3gLLZXdF8FDDDEmT44oVxLQTS6mtrRrWN + JDXTSvYaqEmO47AAoeBTueDzDOVyg/FBLp31NNW43vF7fWVFJdaTe3J//MN9BmGA6jg3sl8ZmFvIJBDw + +lHRNa8SUtMHzOmASqeKeYq1uQoBUu2dDD+S/5TmteH/RPP6sDlzbj/99Ld+9KOMImrmnT98660rq6pO + k9Ub0DQhkxrDYhGTrNM1zukkUtgbDM1ubFJACGIRqUL9meT37NRB1aW/+vTTZ5YtQw4GK+38ceNggqDe + AhkEWyrrYhTJeuBPt9yyjSw9ruVwGBUe4I8AHkYGIUsNVfpAiUcjtz2pp2fOnDmHHXYYRjA5CeaTv/uj + H93g8wGBJDzcUVDwGAU3Lr1UsTdBQTpHpTFwI0qAFERU+IdXGcLRW2+9BfOTzAe+mJlBj++/P09BUF00 + jWJMlOyYS0K9w8FapE3XW10uBoBIANW01piSNekNVHJQG98x/kbH7D+FfyraxxBiIBU59TK/l7QQRpeR + 0ofXwbwp44+sLxicqWOB+ISUYHTch9UklBOUSqyIVQ73ez3wrbQqn5aiVbzFQjRlEPlDsseHcopO2AYC + OuPGdE7t7UnY8xl1pgjeoSaabsZjNZMfjRICG2DwJDlKJaikgirOwlWzc6+RUkpW/tCG4sB2JuusndoF + kShAOFSwkdHz+1btLP0ACYxFAuClBcXUNFHr4bQQaEZB5QtlzY7nCo5TOWUfSHKXpkA//9Nun5+ff/ic + OTefdNIfXn/9M8uan8lw4qsvvvj+nDmqesNWu500890JUIWja0vLez0e7I/xfv9Ef2ByUz8W7rzzzuef + fz5VyKGlML9nTZz5x6uv3ltWhl14y/IVxOHgmEADQfcyG9ZoylXAWyeeSLq9oLTY7aSrU4MQw3eXgRKj + eAjNQFjo8UydMoXqS0pTJq4c7kunn07p2ocmTPj5iSf+89e/BufoClLahWLno4+S7UekEywE5/g9Oe9U + gwIXMaPBP2ix6LGR9kfmA/xPCK6/eeONP7/wwitXXHF1dzd2+Sbsck2jVvBOmkaeAyTedtS3I+GuSBir + jg1sw4QlrgmxE4cnNh8kT37yHfCD7cJf2U3hn1nSE2FrUqbNpp6SRjN0YdQXSo6FAn4KviTMc0/9AjIV + olnf2TFysHPlW/Xm5tIYw3cqQBHfkjupu2jIvWVMOE2NdfW11Vi3rDOyPj9h1OU7LZ45rdeKtzNRX8UM + BpPhAAQWRKO+RJI3288AjPVO7p43d3oyj3mKB2OOXXHnKaxO/mSkhcadkAPjcmJyHAr/P0TBwZWmR+LT + mz0rKiuEmAelKJ7sxOAWS0Sz4oYhQxU39RikUFAQVxWnK9S0UqQ+7XZYoPjEMAGZEBcUFW1Cl/Kyy377 + yitZ238JD3zlpJNIsKN6w3FovsgyQGvcnqV+f4+mtWN/SBjugIDT0aHsQtyYlE8CtJjlcyHO/Obii5EW + e+zAAzGnSFGAnEkAEkNT6WeaP1nfL8mLP1q0aBt8FvRI7XY0ZdDaVjUIcf9iP4EcMGWUZhgmPBYhlNEa + WfwI5ovy1g7A5q+//vXtt//xgQcgjppbBUOHxlNE/rrrriOjH+uQ75R6IJUC4w/8U2nvKvOBjMDrLrro + 2qOOunrJkks7Ok7z+8kkIecBhTNoLypSi8GKzjVcnhE2W4vTSRks2qnILHwhTowUjsJFNr7wX0X1VCFA + oN0c7VPeTnO0j0E4OL1PuOhF5VThUUxICuXXRIwo5Y1VNNgGYgpC+kQWeBka5wqXwINqGECiScLhOny2 + VwbN5h7J1lAZh3EfJnwpiJNd+QHoEeBc4uArdx+Nhqsqy4WvMlEnC89tOtu0prrysE0bpvRMyLYnE/QS + Y4aMwTTISuMmTBg9a9aUXExaOhe/fFERgzzBhwJD7SOboxEGf4IPzlWSKBQMM8TFIB7GwZQLyKY/Vthh + w+yON+uSGw2K837w3/YRrXOmTysqKECcyWz8xclNGThnVtkwhKaM1EBmYSRqVGlTMvYxBEVpU7t9Sih0 + 8OzZd5x77m9eeSXT+J9F/PjrU09d6/EQoELw5bhYrdq5NhsON3gWzVJxhgBVp9c7tbtbYSHBM2ZzTJxc + iDOkDTzd2/vTo45SCinkiZP5oFIV8SiicQrKCp2UL77A7szu3mGRPjlqFHCL6ub1MkXvWKm1vSOJIprW + icEtoQUTXKhfxiijLZIpA1ET2xcMsyJ2A1iy53WXX37CoYfiUIUBS+UmBEipDwwign8g/c033XTt+edf + vu++F8+afW5FJdkj6FwjfobyCxCIEPlaOJ+yBC5l3MnpxNWJnUc+HwgHvOG/VdwWvAVsTAQYfGozyC+G + nrXA9Vi0T1FdDFenEe0z+yrSv3hyDxVND3oDHij9pjJ4Fg/PdDcmTAg15nQI3s3hCEEJG0PkLmcmGaOi + oIOtDqhAuM0SOgnTLhEwZnAsJ0MKluPQ9woK8hOeRzg8LRTuJoyHt9NiuG37hdR6X9pUAIpEa0ZWgttP + laeXZIGVwcBgtq2tqcSqTdgFLBMaGmrQvUx4RpCPw5UGinzkQ+Auz6DpQ7qrEjvnJxUWs4tTsmiYPm1i + YwMxlAQf+kcEZQfR4RiC5ng4u8maUyINSLwPckQYEGiAn0p+UA5PMzHB0B0W8sTSZ6UKfFP5QaFgu9e7 + 1/TpV2zd+qtXXqHsQ3YwYBEIP/3LX+5rbyefgRI8eA7xjopCrGhdejxdmkZ2MaEplaE4OhKZ1tursPDI + I4+kaDseP+rfZk2c+dtDD71z330qeKb0w8A/+JZoaQKxaJVhaWEj8svsfLAfv/76IxUVd5BEqOvUdkC0 + hTgoJheVb+d4PaNdLiOVXjFlqNSBCH9HSws3uH79eiiggzVlEvYq7f/eDTec0dx8TGPj6pUroZsCh6ef + fjr59bh8v3PGGRfuvffpPT3HFxQc63Qe63JtcYpqf5S93U9mPqwl50/SPg2FT2ELmlAQ/FMkF/Nm1rNW + 5BdFdSEb0quReGs3IFC5382ElxxfSqYUI1Q22DJJO91bvLq0bwZMtXIKs3h0mt14bRUY8EW4GoV5MDSn + ToYEilSZonOUPZfCpBOzdxItNI7yeT1pFVOt9p2phL1osJjgRGoJV+cSGH/kysMKjnsY7MmUGPT5+3P2 + sgsHpm5ifn5k4fxZE0SJogTLFjViEnYxTc9d9VTCgxvla6v9OMz7UV6xqqzCIhBKp/F2cYOGhtqtx2zq + 6cYxlvijgC3uA+yxDBo8Rg0IFPEV3ihZm02BnxJ/YYZiwmKpHo6t6PnCpmYxkRohDUGFglR+mNnefvLm + zU899NBH//hHdrO/Rfwz7/YCOpkymQFpysMkd3S3UGhH+PqYg9AuJFtHlecdX1o6fZpQX0MA0yDOgFvW + hVQG5P9xh599BvIRbuSD7cV5+AkKIlSGUgw/ibTx3+x8sH/FInO7yVXn7q7VtLM0jbvbgwRzTet12EdS + f0NaWipAGHa7C3w+mDLjpWQaFYtQbzFXsaAm/Qd//SutQsINgETzU8nOgdMv3n77edXVpEVudTpXT5xI + JHU9dTDWrz9pxYpjOjoOzc8nQQXYw/Ij4X1fmfO+DggkTULT1kCNiUEg7lBy/JXCZ03MFmS0KNUbZeTF + bcBeQHN4NbtyfjICAw53yOl1MmuZJGASujoHvwCMcHgJFqkuTAvhQDAc3F4/nMOhNaZ2fQlWhZCHHBrU + yW6moeXM4yqWydyNt2yowDtFe2SVulRTqLkgonQLU+3RqpEK9hA6TOsXZc5MS4NXlt92eoOEQKX6im9a + wCFrrH7Ts39P1XsKCLcbDGSxD0m3cln8D1AQOVtZafH+++7RO2lCpmema6Q5mJNjnTun1hRc0+yG3ZAf + JZUDxbskBrOoL5jqpRKahnI8ifCCVJovLS1OJj/BvuoZD+5n82/M+Kcy/xizUTz3SObHwI/5S7mw8GsR + vIG/XsYmEyH4bwla/pq9SHMUOnQSskrc7jmTJh24fv31111HPImSAlhCWUBadof8+vLLcR4KyozDQaE+ + dDhXOZ2zyamPzchkblTFsHBiTH1t+fLlOA+hegIJGZVcSN1I7Ms/v/02nkZYJ3SFKvWXkWiZcf7/u/DC + eyW982pJGaUq/SFEQGWyAQkGYDyPA2NLBQhxSAWdeoHbPXniRMoQIq5G8BJ71zjbZx9/vG3t2tsuuIDS + S6RV4PMEFGnYL++997zS0hMU51PX9y8v32v8+P0bGg4MhfbzeMhzZ8PtiXwo1R7Y1tpF2jv2HyLXmIA0 + Ruh86vrsUHC80xmn8MkSSuG0onf68IXIsqeGp50p3OvATSmGuBiKTEZQAmNeikzRhjcF15n57VDVthO+ + wh6Xu7q8kpCh8VcOB1RS2zSFBflFheRxDGia9Kv0z1H43XIs6iJmTlcqQRY1Zat2Gu+1wClTlRskY2RZ + g0y7MLPZjquDx9BMzJdhLTJh/GhUcviS2enS7S1qJiXPB5PmpoA62SvSuhLS46rmoxCrVpvaQaFjP/U0 + wXwpmpJB36lrJmw/F4kGI+WFJTwhnlkw4LdSODhdV2Tzd7ESGCK/QTaXT266wdW2OFYY00CgKp2V7CPc + Cx78C27gkC/JRHnMKGjovzCT4lXDc83MBf4RuVGZD4ifYU7VSe+i2upJwyIj0Garc+j1uqdcdxXjEdX1 + GRMnrlq1ikQCqCjPPvtsHFkxO4SzeNRHr712c34+WX3CprHZDpB8DfLSugmkud24RkXBQk2rkFg4wuns + 7exUDtJ169bBDcldcSauna9dcMHDF12Mlg0f2CUwLXGcZoG1b27ZAhCKbL8YZVRVpVdFJ+BesihhvaIy + CmTuhKPY5+O+FGUUYqc5+f2f7757QWHhRS0tWw8/nPR/bpxFwMv33HNOebliu2ySdR6Uwtmebs+GaP6u + Xu+OUjWUzPdlmrZMCr5Q7WGBptGG6VL2RWQ+EBSMhpc01XcFAnhrzQqfgLSh8IlbrSAcyA8FQbs4ypXB + fDFW8inGeepXmelIOPfkTqw38/OjhsZT3DlVwD6jN1oV1VPv7HYEcujlBSUYl+pUENAK8/OtG0ODG4B4 + ZnF+IX4j6zNxNBge3dTeWFGr7oilv9/pRes4o7sb3D9p74K5HR3/SJBhKDO8pWcP/9/kSeNamnnzBFSr + pMyMWpLCXkq4yqedRdH88pIyIY3Wn2oO+Alc5GceX8R39V9EoAU6msxE690sXayDP7TJ7yHilbS7eR5i + kfLtA6GMnsq3YWcrkWQ1BfCk+SnLoMQ/s4QQqNievMSMZfxsFbre4HFD8wMzqGoEzQTxT2gvkD/VRiIE + NY8E5R2lR5u9RrMDMGyNodBUGYGDikI9AagouBwtIlmOu33x8ccPTp4Md5RUthPtdhIMlNk03e3qzY/w + OjI1C76ippVLLOwwEWeU4gz5A8TzMqvPnrzRP9+06YEJE045+WTqC+KAhYoJ1mZarRCn60+WLr1b1q9X + lNHjJRUIPySJ510yAqeYMngXG6rKO1sbo15PVUEBj4ASiVw3rpzTbx577HSfD/GXU7u6EDzDGr77oovO + qKgQVd2V21MqwqySai/LnK4lLhellOYSj5TQi9mH2gvlHVD6JoURLgxtIKMfE1CkQ7icLX4f3Yv/gIWU + ofCpeFVGngO6HQxOpRFo8l5tz9JJ+64x0TPhpJ4oDZNOujGHfv4RQs+8ZDFyCkm35YWlfk+/pKK4QQuk + D+NO6Y5oNGKuC4FAMVlMss4MAmjpoZorNlXWzRo3pbWaZCXpPbJpToeTuUDOCeI8mU7CPB+fj6CdmNsT + BiBVOJA7ZeUt8tlIGXcLdgKPFoPYuB3aX1iYb3G5L1ou8/kS0iG5BS5BDqi6l9gdie8Y0HVVNaXFFOcW + E6CAPbtD/ERGtf+n+hLbBBD2Y+F2bJMYm2oEim6VknRx+4mWmagZmfZ12kGfdgd6ramhvr6mOs6bQUuS + RWXTnvP/1R0MFIxLeFD6Z5iAOD/xH44M+EcHAyMcDiUCQuYDxR8WlpTs0dm5YdKkaZhTJErrIld6jM3W + rtmAQ+xF0IWf4xoblaW1efNm/HKZFvTJBQ5fOeqoK5xOwoTHOBwom4hAGmYK7QwEWt0eHLncIGQ1jNcq + 3TnS5xudX2AozhxzzDEkxil3rnWx6RStff3AA6nbfsbOO1PPgQ+KNvTGr3/9azil1nlDn//97093dd1F + dFBSRhGzhjK6n92+nApENhuE2BrptRaRWmpNjOmY0NUe8bgbZTUMgnwAIQkPZgmYZy+5BMsPFyg5lyfM + nn3+iSeeUFtL5h9irXtjCJJ/Kc1NmDjz7PZZJAJS1S8vD50zwn4YoASlO2PlHQC/RonEtIHMB5X2wCqK + tZShcKZifoPZnmqyy9REMN5KmfVsNfI0VO9y/LwnUpm3ex2VJZTwWlaKxwEbyNwM5okA+c2N9ZUVpWkD + Q+wQCYQqi8spBBjXDDCMwuBuPZsgIjO+yFuzO6Rex4AbBC9EdMfEXQD/FPybe4PvEP7HjukgL0VFbdI+ + Ea7FIiDhbpxN5CAOOEm/F9Th0D0eL1UoZJ15ByjIEkJgofwpv+sCFAU6CkSUKKjcpP2eUgHkLpdIGjHs + Q84UV3pKLCuE6pA9hceZXoAUmtaUTtsRGe3A6Jk7a9roUUzIA5BceNg9wyt5nlE7/+s70zuDM9+JjTBz + EQUEJ1QIrQXOodM5GsKF3T7N51s/btzFBx30yHXX/f4Xv6Cm+Cf//OfJS5ZQDXWers9yOin1QG5pt66T + K6aKxbf5fFMnTmQiJkZFEht566Rj5yLsaR0a/3zvvdf6fQhhk9Z9uOTLKAHuecUlPUXFzCWKvg8Wljgc + NU5XI+neEjOUI5GkeMSmIU/mkmVvtPbVFSsAwpvKyxfMnKnsM8SsScsjc9F6b3z69tuPVVXdibJajDIq + yhA67FR1wCFJHjrpd6C7qDSLQ9vtDlGnG3t9xAgFhKRAgL7oq1GXWKH73Zs3k+qAC5TtMK93S03NBlXw + lvif5HyiTkfmA5Yf+IfNB/hBe+FCwB7xSMw+0hZBPpyfkHQIT6qcd9WxCv9U2kNczl8Wue3W3xfmL49H + 1Yoflk9sfszm/EybggyQjjAicyoS4ChxkJrqCrL9cjIwlHOQH5n4/4S9xaP0eAjHJJvSrbQKIujIEc11 + tVXEEYP+gBVt54SezySPVmBu7P6k/1NinggxOwg0u/hJbUT+K3/yXcKhAsiYaejAwBM+S8xQHct+QFZG + MBCA28LCi14wq6GnHmjsn2mIGKIISSWkE2Q6hFWUUy4tbRxuGMvGeZTZnva0nEUUuEj+FnENoUmUbiin + vdB/cYc4dyhrLUWHIRYoUAHmYYxFgv4ZJuBkt3vfnp7LNm9+7ZlnPvrb3+Kg6Pcvv7xHILBCxo12sNuR + TgZsmDE5Fg8qP3tkYXQ+UPBhLf7yl7/EzPoG6KMkUSB3id8PxgdAKHIMpB9vvMvV6nRiskBvqAwGSEeN + SruQuwa5JzY3q9auWbPmsssug+GSY5a96q6fLlr0fV2/x+k8pKX//CQzkLkILFnvjX/8+McPRiLU+SN3 + AsooKqPcF0bbIqlGDThhiinKqGD5ggdwd12uCbLiPNn0mLlkPsDWwev74iOPfO/ssw+rqiLbAfuPnyoQ + qCpY7ahpLBrIvMTzidsTn6eqaovUi7L5gD2CrIokpcCvxKFX+n3kminmsIF/hiM0zhAcvvHP6xkI+IYP + CJlrmSKYwVPOEsJTOjiNT83pVgAj6/5Rrq90M7OqIZxhlE7E9nKtfOf2uEkrlBFbW2p3MTvAg02YPiGo + hQiqDfgoBDBQUFh+EgLxB3vsRIV0UFBt7tgX+FgCC/stRWkX4tn1enweN7EFmbQQ5xel2ySr0dHV2V5X + x/pvuD6o2rS3jjCCzBYvwwLHgx3MreYceuQEdL1Mjum/OPcOrBpjiy8VZaVlpeBFZsPIyr3Qw8OdXC+A + HJ+7lF4U3HSJgtsl0GIQiBd0jN2+U0PDWfvu++S2bf94//0UHrxb9tmHaZSKOehJwhskFIcBMQ4BSRlK + HOPxGAUfYGQQpqKmT3bJAynMwcHNoyzCgzvthL4MKd6bZSUK7BuAkDldxdLyNa3M5yW7gIk7qmkEE9C+ + QfRkikQOPtQIUln2yoSy7sOMaycteXHGjPt0/U70rIPBhdJE5qN6A4aqxd549667yJ2AMkruxNXkTtjt + RzqdlCHEaIOfQn6CQRkVj5WoMLxfr3fihAlcS/ljzzrllFM3bz5ozpxVxcWE/Qj+wfzkwVHnb6WsF4gu + tqK9kPaACahifhh/9Jih82lUe8B5YCS8N5UWj6qvDVK1PInCddqcPzUzWlmtpn6VBk9fvMvmNEErb2La + S0hlq6RGIVMyAshYXblfK6MzMHtgaaU2s/qRMuepMqOGZboz01RRfn5LfcNgo0hFHBVJUMFVPwTKyJ8A + P2ntgXZ2pycULgiG8+1Or6Z77LqXAh7yCz+BRoGIdgGQcv9+l6k8g/CU9tNHVZ7FQMwVED2AiCz+bIOP + xDN3ZGpoJ+waHiSM/bQaAdLpvL1xAKFXh6LjyR0IZecOuHGAUKYt9i+yAEK0UsPhoHAtmD68GBGhGZGN + w0SdhrTNhpqa6rJy4tGZjhvr+9NoCpAgwOjMs3nybIoUU0AWhIQBAuuYcWOdznUTJtx01lm/ee01HINp + CSOkyB1XXAy9UBSQ0zSwEGOCmZQKOygsC5uyslJN/YibQNNHuwsSf3aJevEYI8sA4V2knYNNq59deilk + Gfx+BNJwjSqLUAEhpgzzuJG1DRaCi+jAQYjtCIWmyfrsfAAPxDkJ5uUkyf3ZZ8/19kJyAcPwam6O9QZG + J0TNV155RdW+SOv1/e2ZZ96r66LOH7kTdvtVhYVnFBevJUtBirZgrpkpowoIC4LBKVOmLFywYMn8+RQ/ + Gl9QMJrwYazs0Q6S/Llc06Db0DnUq1LV/ggBdsr8d5yfNcrtiU4sNTV1nU4zbD5V20HlAkZ93hDpeklk + zwwWTNKBasvDjZNMZ8v68I7bU73LyGmXFBThiMvoPAowkgHz0K+CM2pcop1F6nfAb4VKw9HK3rF+TTnl + ChGc1EdldtLkl6d5GEUlhYWDVxuiJbLx/Rl+ZNM53aFAhJQNAYF2FwgH8rG5vMFIQYnXH7HrPruTzS+/ + CDhUO4g95SZsRGkdGvFC5WLF8scqg/sjW5qONeNzY8EOKE1gvX+z2BMvc3V1hSE6I5ApP8p/M3quCa/L + GbgXl3MADpkNZIaC3+9PSLDGY1xWRrApMyCUMkj9OZoEfVH6Q/Ap05NY7EMzNcZtQ4LSGSSZ0mYrijEn + cQxCAd176tS7r7rqd7/6FawKqBxWJmhm8KdOPplqDyRZoy2Jsw7FL2bnyUzQqrK80zktVhEXBx0FDUgq + t2gGJYMH7DPaRuo3YmBKyQVuC2Qcs5DmX1955YyiIhRPoH5QnwF3H02KA0I1jwtlcN49qYMDx2dMcbEC + QhUsxJ1Ig7PIdlCN/+xvf3uqsxOlbCS5r9D1c5zOpbHeoDYtrJzf//73Vk7+y02bFGUUue3LHY6Lo9Gj + g8FVmkYMD1804TrMXEw07siwCEui0dHt7dUFBQQ24PGS68JCh6UJtR6pdQz/hSULGw/L8IJCulFCaJiA + KuxHzDhfs5UH/MW4jWLIFyeqZ2ieWcx5V2w7Y8kr5jXpc7I4mK3sBi2A11lUL0KCw+NJG5kbDKKyRVZp + ONIxNwxuIiu3KvexGP1hT4xGol1p7Q3zlWXMSHgkk02z/N4Fq2X4S7ypVvFcYItKFTl0UAPRcKHbE4gh + nM/hRoMhoLuDuifkcAcdroCdzak2v9wkIipQVECoQobCQdrPnQEIQ74g9QY87njCUYJnwrOHO0pQMsXz + Eo6CRJq2lh/x9h3pbuhG5SbIAQgpDI33MouzDTgEp6juLMkvItE+2cNOwb0246XFlnCIeIyxSpsWj8pu + tziCqJdnrNmjNuEPrHI4GnWdyjgL6+uvPOWU137+c0AFMTAlkpnWTFE7fPr++5c2NUFLAQv31bTdlLAI + 9XQ0DZaNqDYHtEwTAi4USUemS5lB1s8/uBkAIVBKhgNSKUTaEPYErvA0EtUjRU+5Mb/6/PPLp0zBVBU5 + AJq2EJ+tXRuj6xi+hkWoXHlsDHahD253wPhnByNYiFORBqvMQuvEFnODP/m///tBYyMCoaqQPd7ajVIF + mw/1e6nWhN43HZ52zfHybrupk1CPF8rocZpGkSnsbzBM1eNVlFHuCMsMbz4bRiHZhNQqIotNPGule65p + XcRKpfMT/VU2vkMBNbygkG7oHyJ/cF5AVhXzQzYPzba4mJ8Bewb/RY20tB9GPq6r4ZMIltodlFKAHycQ + AuFspmkR20NHN23jrO0QZyzKeoGpyIPWzjrsezHtAIQs9zPqB2URpjA2FIco09VGxner5lnaIpiaKgro + 0t0+3SUMPgAPDSKHJ6R7ww5PWGcTXyIOd1hsrhCb3RUUoMieLvZXcBjDQmFQKuKMQyYaKhtYGcEZ9VaS + 28K0RKwhowWI+UysRBjHamkm+yCVSS8N5wRPjCeESxNrMkXXg9aYtsBh7sZlxg94mA/gMSqOqJgipUsQ + WxCGSLVDEDvnV1Yevdtuj3zvezgtqcyHQiaexkxR6rXrrkPbkxQ0gGcfyTmExDEdfXYJhD26Pl0KffFB + 1ZPKDMAV9lzWgTeQBuSgqYihUDCIakEk/0EGufW66+6/8cbHzjvvYWrvwRApKiJ+CQcE7x9FX+eFArOK + CzuDfrLpmeXNEicFHt/oxvpWmYKLl5iCeUawkMzC22+/HZqPRR9mHGwDhI81NqKLhl/0AlmrlrDlMlkp + lw/KZ3fddRfmbOpUiq/+85/n5s3DuUrJw6vsdsq+ozJKYQ1cmjgz26UBB3QZQMjS3edyhb1ePBiQE4Ti + naZRCQuQw3Yk7IfnE+RjUyxQkh9qpBfUgEAj7WF7/rsp/29wwnuy2UI4Wgj1ZM6Ay/GdMAh0ZM1RYgKj + sKG2luLbmQZQmHlEYrRp1hHxBVGxKFd9q5hxo5STv7mAYiY+0QwewrBPmypeJ1AQ80GyQJ3eULSoorrO + GywAAnUi/p6o7st3+gtcgUJ3oMjlL9R9Bbo3X/dGBSKKDWgMYSnqHixFgYUOF1iIUSjswn4S6YDkQnG9 + /mBkBp2RaFd4qINrP/bvmG6hwW54HYsK8y3iqDSzBFUobmARQ64sL+NlyPFevg2Hc4+8h2m5YUZTzSiI + 6cPqPhLjSWL6zKuvv+Tkk9E6ocIOwTDsHuseUfOMTyHA26dORcnlsFhMTgULJ2kaWMg2K6bqSfLApZde + io1l8Pgt2p2Dd8MihAOJIXj7pZdeu2HDd+bPv6yl5YKiojM8nq0u12aHg3wAzEGYIHhr5xAD83t7/P4m + h6NK18vcbpFpIB2JrA9aa2r2Xr1zb1d7ARWCVLAwHJ4ma9nPnDmT3ANkWVgl0DmZUl7/8aMf3R+NKgy7 + wm4nb48u2jsQmCnVBubNm4f3FUkXlUqRrCs+feedR7q6btB1VAIus9tPt9uPwAstzVxMOlDNUBnlESuK + JpFgL/M1lhwyF3la2KYV2jRcnTg82RnYMzbQ0Uh+CJuS3+PSHpT9ZwT8+r+kWyszUIllJKskY36h/D4v + 3HrSA4bjLWMGqCgpQ9o+o5OzgCa4GFePkDuiVu+QTCa8y+FQiARz6z7YjNr//8DOisCIPS99z1jdzv4o + oBupnFB5TUNlXYsnWKx7C3Rfoe4vcsIED5X4oxW+aLk7WOIMFDn5JX8ScCgQUeClsBSxHYMOt9+OXQh9 + Roi6xyKFpmwKn9cXCUWAsOHtSZzwVOGILxksr8kQMeQPMlprKBWBOPKOMu2H92a+qbPzzgjrNklpjsGt + YKZStiAzPsEwZQuSLSBQsLn5ygsuYIrHo0jlVeZixF+yZki+/dBD57pc1OLBQbpB00TNB5mFpoBwqts9 + Y9QoZQYdcsghlPKhShGmZy5G4b9///ufXX75AwsW3FZTc43TCUicg5qMy3VBccnJ0Si2KTFLzEH4kCol + vEd6EeGA1DqdlWQyxdTI6JzicLi9sb6Y4EksWEga5bhYZiHgjfAKQnHvvPNOptHND59//vuRCEBIgPAa + XJq6frDMWF8SUxvYe++9oaeaE0sG98k/33prW3k5UEp5Kfyip7hcx4RCJPwR3lMqo+QzYOOyyuEpA4TK + YlOysdydX3NE7U6wEJwjxQLbET8qoKg2ooBmL2jCzD8z4UW8YtINKNlt3rSLVItlV0d3te+3fm11FWkg + Q/mRVoSwggZ7YrHqoMKlmF7AvMFJ39wOaJ1a3dD6DQj5eyeLln7Ho1rmZjTjWb8We8qKQzkJrQ2+HFMr + ImoUVMqFLZjsLtDDKyws0PHl2gkru8Ethyeg+8JOf9QVKPCESlyBYqe/xOkvdQXKXMFyd6jcE6nwRCvF + z0i5O1zmCpU6A2o3QLHA6c/X0aL3RRxeIojCR6popf2ZFYI10x8pxBYkK9/r8Qoe6ZB4R5PdJK8QMw9r + q7gHz39DvgCCdXSxCFh/I8oRXJS4KEuATJ0nGQ3Eodg5M4uQCVHNhrEwmJ0wGLGiRaNGXXbhhSRZk+fO + LMwUDzcSjmjW1fKoZvDQypUQNXGQ7m+3r7fZVsiM7Mkxo3BKJKLUWxYvXqxq41mJjSU2kr7++ldHHPHD + xsb7nE5S667T9culyjbu2eNdLlDwSL8fp6gyB8lxnOtwTLPbJ0kpMjINcCQCAMo7atg9Rj6JDBZKlTgO + aW9X4A1cIRT36quvQiNKy6Q1t/nDF174XjgM25MWXgmG2e2CYet0ri8vnROjpxqpFLBmWIiAtXwxn+T9 + n/zkxnD4EpfzdKKM+EXtdpL/KPtOgJA7MpgyLHS4C3PoTmEhMx/hMkM/HZtL1Q9RX1J4QQcH/8RMbUfv + iwifqHmLtTRUS0wyzJhMc6lyOvjlQkYDKRND32sAo4QOERL3qVAh2QJ6aIFKBNjcGD2CK0STYKXn0qVC + UkDKCydYE8tbtqLnktE0xbJg7pypkyeOG3ogpGaFD606v7QCBQsGAHMG8l2hYne4VOIcW4U7VOkOV7nD + 1Z4IW403v8YjtmpvfhWIyA6uUJk7WOqUBiJeUxAUHAVNBZtGACFGoaz0pXINVfRR2oUm3bWMumTQzowY + liCZPleO8rq9olRFwN/cVGfRC5E6nJv2PljhFoSj5cjTDbIdlVx52jN8C3cwzEGme2XrgIIQI+e0tJxz + xhmUWkV2i8mdbDZQENdc1iioZu0PXnvt4kgE7x9ilShVrrMLmcrZmjZRGoX8nB7LWD/wwAOJjeGMzdoo + fHXnnZFruUfXRTUGXb8Yc9DhOMnhEGrRscJ4JMntW1m5KhRCJHOmw4EUGfYTgTGQA2cglpCqYWtwQLbb + zUTUJLtkBOI4PT0KCynggCGrpNesx1D/9sADpNJDGcVgvUKWjMBhu0bXdwn4F8bUBkilQJocdzHLEYAW + BzVPBNexgYXvPv/8lcHAWS4XBiXVhg+U6qmUfSeVHr9oXIBQLV8NhpSxEuI2Ra69vGWV/GDkP/D7OBXQ + ZJl/sTD8ML4OvGsuh2tIeGSKYaDmH1pu4I3FVxU4EUKmKa0BYR9LSkXs/Bm70YT3K5aqoYRJLTYv4W7o + v0RDBIUTAKEQ38eCT5dxP/C0YrmTOiuDXq2uKofGmKzZImJFXmVGwUnmW+Ha05Uj1OEK4tLEmHOFSjzR + cm9BVai0Plze5Cus94qtwVfYwE9vQb23oMFXxMYv67wFtZ5ojScCRlaChZiGeE0BUVcQLJR2IT5Sd1Bm + Vqgsw+2RQgWE22tT5GgRhoPBinL4BxkPDtWnACFV7K08uVjkzOr7KfVh5M7i9aBimWih8EAnamoKIMR/ + /a0Vb1PRQWUQMOVFZNo40a/ukpKjDzvskksu2bZtm6JZktiXOwqqWfuFY45RaeybXK4Ti0v2DYdhzWC4 + KAfplEBgujSDFixYgMyYqkqBgZVFmPD9Rx+9X9fvlql1d9jt1JrAGAUnDlfkVYfjxHHj7j/77D++9trW + GTMwClG9wTtKBgXJBtBDlFGIVYQ70ZDBVKazWjSIYlKyu7pilFfaTHHaJ554IqNsir9gdMu0hysdjsux + CDXtYE0jmX1nv39xODhz/HiFslS+pTAFWAj9h+qAlLkn/AknlqjkP//4x6ePPpq7Qxr0MIfjEKkYt0xy + kbgXMghxJkZN1u3gSJ7ZTWpk+8V9McRfzF7QXGbkrI+FsUdmMHZn6slHYU/cVXipzYIY5r9K8y5dSHPg + 6aysrf1eH6FHZTsiSz20Fm0WfQhuEddM5GbLgzQEx36w3SZargS5Bl0vFAi2N7VQ+yKzjpPnMZ4OfSIE + uHGoWzInxMJAQKBDQKDIghAQWOgKluDt9BbU+IvrA2VN0eq2aFV7sGJEsGJksKItWD4yUDrCX9LqL2mR + W7OvGJhs8OTXeaLAIZZipVs4S8vc4RJXUNiFwkfqhT4jHKT9RqFwkPan2MtsClWkIlanKYuHoQ7hhuh6 + wEw5WDNbEWR+Vevn533AJQIS8uxpHrnwZjV0hoXK1ky7NBPeVI9HZjFaBWB1WwwIkpzwxFobGdv7IiMm + rwJCs1MUd98It3v9LruccsoplASCZoJ9A+UEX1yOtqCBZJ/85S/XNTTAmjnc6To2HD7Q7xdElby8SYZR + GIuN7bvvvlA9KQpPYDJTBopgjX744dNjxiggJHh2fgwIj41ELpkz58e33vrx+++rVl2x556o3oCFC6Vs + ClbUKJtthMuJwUfADMqMSjlQSKCwkN+ozEJlQE9oalJwhelGnXeyNaxnU/zlnnsAwutppMNByYgTNe0g + m221y7UiGl0UDk2JpVKggsbK4N577wVo+Tz66KOPPfzwY9dff/c++1za2oqRLdYWDgcgClkUEqwgItnt + 7ZpWE8sgZK1jBAiNcWK2C7k7dYPmTf0yLv8v85dviI9IaIQJx2Z/nQFRXiDgi49i8D7yMhJVyhTwErYe + V9ZgOBm8p2DZx3xIVqYgK/tk2psimyCW7S5mXZ+fKkAJVglCFjuBuUmxi/Fju6oqywe77pgeq0rLUd3M + qElcWmhVStNTKPsIswOiCyLcKfMyxcKmnxHTbwV6Iq5AkRtLLlLpza/F1POXtoB84aqOcE0nW6RutNrC + NV2hylHBilHB8vZAWZsCRV9xs6+wERvRW1CHp9SDp1RhoTAKodXAr4FNKnIN7dJBOjBSKNIKUVNXyfXi + NrijjHph8M4KcrII9VkRrBF2N0MxE9M1tpa0gUWMdZlvsX3Fw2ODAlAcLaSGcNobT7gsTXsUtajQhs8P + o3OZZqVl/rMYXqLojKVYutkcxOjBvkE5BQLIwu5ujI+zzz4bQ4V8PiZ00hhw9OVCWomz5167/HJEPjFf + sMz207TVsVSKHomFvV7vdCkzNnv2bLMSdxZG4ZvHHaeAULlGL6msvG/Dhp89+OC/B9Z7uufYYykkS7CQ + oBo1KCha1OOwT4qEm10ulXtnQIgBFcbqoUgGC5spsjF6tMJCEh4yyqYACO+SUUwswos1jfqIODZ3cznn + ezyTUTN3OHplGBJdcp4LNXKxC++88cZLDzjg1PHjj/L78fRi4+JqRhR0vZTIIfKKjh1ZE6OptYIeguS/ + GHBuhPVFbSDk92PSuHHOUiP/Ic58TD10hwRg0r4dCXcQr3lMg00AHgkZg2ZntU9CxeosLiqSyECXLI5M + cgjPQnCLMvNM9p8rYTOA4Ab0qGoqmROM09IDrM7TTizmNmIVoJdFuDejo1J0jEi5HlR5KuVkrlIjRJk+ + zeEhz49ECCDQB+clSqiv3lfY5C8ZEShrD1Z2hqpHR2rHRRu6C5p6ClonsuU39/DfwoYJBXXd4arRwCF7 + +kvbOMRf3OzHNMRZKjylBA45IYSaUlcQ7kyBExIpCRVmIOz3jsqcQlNyvcDC3Km9pECUFBWmLhuWAD5x + 05Iyks7YcpIGgj2bbreMxjODyedCejzl+iWjMw7cGTcKPtUBr4REVPNemKT50Whc4S46RFYGSf8xooMY + N4r9AVO0q6Bgj912I5MPs4YMdJyiudBEk0HX5x99dNv48STMxaVSTJZACBxOq6tToJKjEvc/f/7z+1yu + W53OB6ZP/9mFF/7tzTdJ9SOAF9ewH154IZ5SFOBW2+0KRXoJFrpcLbpO2pwiW6qsAzPZ0vAnEywU2RSR + iDmbgtgqijBWalP85d57VSL8ZQ7HBbJ2EkUEhSKMpnU7HKj5jEHUbepUlgUUbjx248bDd9hhfXU1yA3l + Fb7PPvLnOjZJxMW8xhYEBeHIQBZVFScIzpj5omp4MLWQtC5SY6kAP9AlmIXzk0kAQfyCfITZrYy+9OPT + 4h6Cmxqr+Ga+NGvX/zn5e0JtVkzMhIYEtJ7BCFqQH1mxfAeKORiH0C1AGn44i92b0MDNlNKR9bXUKJVi + 2dshkGw/3YcVWBEpbc6vbMe2C5R1BCsw+MaEqsaHqydE6ibmN04uaJla1Da9qG1a0chpBa1TikdMrWyf + WdzcG64dF6oaE6jo5KiYaYintMkvAod13kKBhVBJRbAwUETSofKOSukZqcTW7x2VOYX9xQtjRmEu96mO + FW7roL+upoqQofUXSSKDTOvv5z8nbojaLfdGfvNnkCVZBNYKuVSnN+ILiqrFMZoDGolF+dGsw6tGBj3m + jmEOzho7FuyBo4hNo+SkMyJAWjfafnfffWc7nRiFG2V+PWXtjPx6sHCSxzO9u1th4YknnkjBI0giWei2 + fPXpp7+94II/3n33lzGOJT7ewRItv7jnnkPdbiwqsHB3mYQ+HSCkmDDWnim6ZgChwS4BHQn+IMuijOmx + sWwKqhpdeOGFJPJTVSptNsWf7rxTlYy4xOE4T9NE7SSpCENiCWpnFOig1vH4pqb5vb3zW5pnhUMzdR1q + D45cCkFgxa5xOveAWSMPIWuQo0gc7DRxX8MxZQCDL2q8DGqZbf2NS/YKQFurqaAQXqlF2lrur5KwDkRJ + VTFHAoSDE5GxCJG/x0Ga+7WsnEF4x3LOv2IaLCiIMBNaPJWx5KArWM3EsdnpIsRFi4tQStgel+GXFpNV + Et41s01hQT4ZA1b6xOI+NI9hkyRnQynT4TQlHIgujIBAVwAiaK2/sDlS2RmpHhOpGRep64nWT47U9Ubq + pkbrp0Ubphc0zyxsnVU0cnZR2+yikTMLR84sbptZPHJGQXNvtH5ipHY8WBis7BKe0jI8pSNwqAosLMYu + rPUUQCXFQVoKa0Z6Rw0slPRRh8opjBVp6k+ul3UKh+TD8q2ksAhp6UzPxlst4CIrf0Km17Kyv8frgcha + XFzAcCksiKamX6sTxkIbA07PHfk8Xm5NmG5onnkCxeGoEws4ZpfEiXdYaZuxjxEdNMii+Pc6IuElixYR + mTvnnHMQ/MQczJqxmRYRKad+/4oVRArJat/HblfwMwtBL1Xal7TC8nIFhGvXrkWJG2IIMqFZRArTtoQd + 3v3FL06rqkJ0FOuKABtGITXWqdgwwpZXLSv0Gn5FI1vALMTD2g17WkivUYK4o0M1e5999oFzy2KCCGvq + zMvfXXGFKhlxscNB7aQjZE0oSmFAYR0tCzfWyzAkqRrtLtcYl4v+ocrxdNg9lEPCsezz7+z2ztOERxdD + EH1tWK8IwWAFqAwQo/GiippcRZk/TIuBAJV6c/JtYFYWRfKFwMo3+DGIKgkXuVR/EEGNb8Q8pQGiJE22 + jD+jz8Ct5ub64qLCtECo8EyAXyL0FfJiMDllsZqhfSDAFRHWoZ1sCYrhSUgAhECgJIWSwCDpMMTtKoBA + T36zr6g9WD4mXDMhv3FKQcuMohGzC0fOLWiZG22cE2mcW9A8r7B1QdHIBUVtbPOL2ucVtc8FFAtaZxS0 + TMtv7I3U9oRrukPVY0OVo4Plwi70l0KiwUeqjEJ8rWQZ4iBVrJkCpw8H6cA8CrtIWzTLcJulhTLu88Gr + 0SwWp6nNwbRtEkNqSDMRSf+fMX0S5aioFn3c0YdMnMDUtP2T0DY14tgD95ROgRhVgeIf6CzFERmY2uqq + K1oaa1V9GutMGbNflKQknHu1VAoc0bpkyRIEw2Dqo28JTT+tvqUVmEm2z3uvvnpufj45hWS84dbbWVJm + IG1OcLmmhQK9ft/0WMGj4447bkiUuJO15LN//evyMWOU/BsxS6wrshuhzIA6rR6PChOyBjZbVEaElV8K + FQJNI1gIuWak329kU2zZsoXaFCh9415OkU3xm8svV4ow5zkc5E5sttlYFmAfg2ooXDdoGopueK1VJeQm + 2ExSCxScphYg+/TaNNIf+S8EUaTUcIfWyvR5mh1WZXiFX9cmdKIcqP7GIwPJeVQNyxEIGbf/o04X+gMI + AzQSThTWpyOBymnnmnQ7SEar1VwyLAdl2/EBSyCCKnxi6VxcWIi0jZXZAK4mRJi0uJuu4Tn9XWSemeFc + 3BDBTV0MWE/AGYhC44TGAqvFV9TqL+4Ilo8LV0/Kb5xeOGJuyaiFpaOXlI3dsXT0jlXjV3XO2a+ld13p + qB3LOncq6VxW0rm0pHNxyagdikctLGqfX9g6O795RrR+SqRussDCauEjDZbjI8UoHCmMwlKMQtIqSDQU + RqFbGoXQR3U/lBkRKQSSNZFQKLijcUCYKR1ye5exnKmvrwmHeGCiqsOQZ3FafDiCMuBAbxegGRrblrFF + GSYGJWmk8+ZMN4QwVDCDqEzat0uMbFRvdd0gtSumokpiUxrQKq8LzfypPWO72loMr93g0S84rpzK7B6R + kClEtkjHlGkAePbagsGZPT2oPDN94xeFoz985qABSD888kjq4gI/5PNhhxHcolRhj9s1JRLudrkmI7om + PyhxU5CIdMYclbjVdWH9xBF/qNV057JlQhMcVNY0MvDwMYIuo3UH1hh2leLLDAZCpcijHKSqGwkWjo41 + m9oUcI6QI6DCoqGbOphz9KvLL0f15kKX60xdP0HTYMrAHqIrhEkqUY0iR9S3ZCuVWqD8howIpQUK8rEZ + cqD8ScmBwo4hLmjSSrVRToaYxuDJ2sxptPjKDMluDPK09QVpW1pidvLGCN+pxJVUCAWWIMMkfH2J9kqG + 7sIBNUTTRYrOtNJFHE5T6qqrG2vxGgggFJ4krzdhv8UZHvx3woTRE3vGDAWID8mgUFqhdsrkom1GSjtQ + 5CuqCZQ1Bys7QlVjwzU9OD/zm+YUtS0q7dqxvHtF5aRdqqbsVj1lbdWktaMWHrT6kEtn7LK1Zeo+zVPW + l41dWTZmedmYncvGAJNLSzoWFY6Yl980K1I/LVJLpHBiuLqbcwYxCgWVtE04SKVR6MU7CoMUIAz3A6FT + eUcVZUaHO0pOYaw2E25bFSnM2jUKGaSyslylj4T8wYRKB4qXNTR9nPwsoCDJnujVxe2iVouZNiBZapEk + 6emDy1LHWYEin4G1f2V5YThkBj+V4wzlgdnN2HxIEbpYothUsrNBcze/1DhtCiJRc/UoBZZuh4N1Y1h3 + kAOAX3QUqi7TpsHRJyaH5jUJatll72VkI5IAd05Dw4FUQSLihea1NIPG2GwU7KVsL4UgpsWUuIHnBx98 + kMIXuStxA/AAKj/NTX3hnHMAwo26vqfdbgAhBhnQAhBGyaOK5R6oRALVh+ZgoblOU09Li4Lw3XffnSwU + cv6QyFHhSX7Gdezrl19+qct1tsuFoxilbAR3iPbh51QpgAAbDQDYSATkJ35acA6DjzTHmtjGd1EUMCaH + pgxBRos56yMjh8Fwv3Gcn8nXeLNkJlL8aw5HsaWxAZTKtjEiA4rpJfXhvK1yCspgEVxUWNA9djT18LJt + mNXjBLVS2nzqAFWNdfB6HczDBESBK/V5pTd1wGxG1l5pSVEolOZAlS2Wdvked3WO4glmotYm/F/oQNtd + XiRdSGDwFVYHylpC1aMi9d3CBUrYb8SC4vYlpaNXVHTvWt27rm7m+oZ5GxoXHMDWMHf/xrkHjpy/aeTc + gzvmHVLfu3d5964VE9ZUdK8GL8vG7lwyaknhiPkFzXOiDTOj9VMj9ZPz6ycXwampmxCqIlgoI4UkFxaR + SqGAEO8oKfZ4R1VCYX9mvcPpo5Chk+qGqkghKGhIzFh5sHRKfU11ZVlpEqZl/HrM6XISlW1qrIsMj8au + uc1i5WgacMafGGEFBVGEJ6zcYNp9BvuBjUOMWVUhGYMu6HYTHuQlNqteMcGRTgEtT02LbPzGkL8ylMDM + M7WccaS/xbRgUTM4IksRrztsdxDfwu02uqxM2V6qwB51G4Y8IJcwAePHV16JRUgldMrAEpnDITkaE0cS + VYDDHrLopk2jYcuXL7/ssssQ/lYht4zg1tiZA/FSkhCCiin5kRBwjHt8++mnj/J4aAmQDHNHuEbBY1l4 + r8blrPT7wLmEuGIEC4VAnaYp8m2r1zslRvbZvHkzEjmkwHNdyEf8VGJ1Rqtev/56kkmQYD3CbieDkBpV + pHCokhFcnWq6yrzjQbMp5TMePYiohEDZ+K7kQI2iuKqpKvfRiGumHaJZ7JBiVFs8G4goUsoGASE8l5Li + olzYLsMRH6S1tTXVY7s6iecNvkGxvpRinckiRqnhBM5ROBCKC+wpuxBEJOaCuFrcGUDx0Z1tI1uaktYt + iLVSOhxT4b0omTfQdcSh2MqVFWX4zzMFwnA4PKK5iRKqg3uJqzDfGr/HIiJG6CJn2uGm5gNhOW+BgEAy + /6INPfnN0wpb5xa2LS4etXPpmF0quveomry+dvr+DfMObll82Iidjhy5/Ch+tiw5vGH+IXWzNtbPOqhu + xgHVveurJu1ZNWmPyom7lU/YpWzsCjylRW07EDgsaJ1T0DKzoHla6YgZ1R2zixoxDUeHKjsDpSN9RS3e + gkZPfq07Uk1yvZQhFWFC8ihiFqHgjupuvwP10YFaa3SupQHPmF48d87kbtKikiYd+vxe2CXq1Ro5snn6 + tIm1tZWZrCm2t0QYcyKhzlJGXbIbkLrmA9aqLFogMCFpkGlEhLtgbZuQTWBGQcMFqorB8qoxtTHBiVlP + lomHkYH1xlbOf+UkiOAb0yK7AddGQZzUc585QMjcrdj/E6S2GTXiEfl84YUXkJIZwsRB5ZDEGILwwpnN + SPbJBx+cOm7caodjASJn+GpkYKxVkkRaKQVM5DJGPyGLjpCbxSq1yZCSBnAGTDQ0a7jNX7zyyq+feuqF + s866cuLEw9xuyDK0hGx0AckSCOthnTgcpU6nykBQqw1zdrkBhPxJqPPE5GY68vNVNsX8+fNPPvlk6uty + USUKA4OGL2ikffinP71+yy3XjB59vMwFVLnwxEopBD9OqtvgCCXUp5ycSu1MeQWYXRQuGpsqCqjKCJu1 + 0LIwBMWAtIAh7IMLTianD5gCEjK/LM0R1naCOOYSQqaW5h0rN2Ltsv17KThJdlrVJwkpKiLeweo+OZ+I + 0+YHIxVFZUT7zLwbDiRFCkCSnuR4g4HEs4b6GrIPM7qLhDuTGk9MJ+4SgYAP8k4WIWRmPIzUwbM982lJ + URERMdUGJtL8goLa+nqq58LPRN7FX9ocrh1d0DK5uGNu4+TVjZN3Lxm1qqRzt7Kxe1X0bKiecnDdzMMa + 5x/VsuS4EctPaF99UvsuJ7WtPGHEzse1LD26aeER9XM31848qHba/jVT9q3u3bty8h6VPbuVj19dOnpn + FTIs7lhQ3DancMTMohHTi1un5jeSbjE2XN0lKDPFLd78RiE0AxCGSaIoR61GJRSakij8Dt2ngJAwoSE6 + KnRHrXzoF0AO0z7ZzpjRu67Zcc1qKgEIoXUqK0WjUBCyjEAzFhura+uralKHHoWdWlsdCfc/lbQ3wmMT + Eg2p5Q8SnYVVIqZt3LAYDIFC+1jVQ5fTH6YAUEeICLoERAmEsOFKgBBsfGm02drcnq5QuNrhYLoEL81l + g+LsQnOjuC5ebQgUXIsuRieMkyu64x577IGyGoYXwl3ZWV3JjgL8cEjCRKVMLp9f/+xnr9xwwz3r1180 + c+bBZWVkAswB8yTjAwAQ9R80TRSJhUSan6+UuJcuXUqVWkRbcmHxoFVNsSR04x648so7dtnluq6us3X9 + xFihRNInVtjtMDbJ4aMSBUAI/VI5J9Vqg0djYKHqYUaaDy0IU7DQyKYYb8qGpOVgIfFCPqJE8N1337X/ + /pc0NXFpoqQQVmEM7Uv6oDRGYcEoYxRzkOvGCC8C4dRGG5QiqNpU9WCFf4YCTurFEFMtWdWDhypDVCpI + pIcZ+AzYKHG+R5/Px9ScECeysx1FmDAmidI/dcrSFmlfVXbgpcsoxCiwyuUGycy3j7soIxhIGlak/K/X + n7peD/oGmFCVlWVIWRk3yJMCNpLdCE3FBIWOYOWRpe40qSoj0rIxLod8AWG+HVCgv3yseLrI8wSdvgJX + sAzBs2BFJymAQGDZuGU1k9d2LtzcPO3gsjH7lo49sHzCIdVTttTPOq5p4Umty05rW3lWx5qzO3bl55lt + q04bueLk1mUnNC8+pnHBkfVzJBbOOKB2+n41U9dX9YKF+EhXlY9fXj5uWdmYxSWdC4raZxeOmF7Q0pvf + NDFSPy5UDWWmzVfcQmK+J1ongBDFtX4glBYhuqNSa013BzyeMIJjIkwogLC/EkX2McK4p4IOxMwZk7q6 + qIU+BJRfMkZb6hrIx0jNn64qL581dQorFCvv1RDuI2wyoZcnEFVZgQoC1WKflwBPF5Nvhc2GrQYekElG + Phm51cvb25d3dJBexsZ/u92ebn+g2e7AdFAUCfNkrdxiCegzQjRVwwHLRIgFA8WjHvkSGY1bt24d2iWY + LHHFDXIHRcxBkuqwhJ65886799rr8qrqM3z+w51OjDAKIeEXneZwKHMQ7KnBGIrdOzfeO2KECrnBaL3n + nntyKc8EL+ZXt932yOLFNwUCZCygu0Y9CqKDVD4iLX1Xu31nu51KFL0OxziHA99si81GmFCRMCN5NkNl + xvA6AoRCNT5WyspcwaPR6Zws5WYopnHMMccQLESS+7aLL75gxx2PkXRZRGGAQPyxIiM+lkypVgOQPwFg + PAFxV1S0YTFgKCLocvqlcqUZ/1IsgIwBzDTH2t9YlZsHNp49tkwdHsYZWFkmDMtxRWzHLPycLKBFeyxY + qHGvp/QoZqbjDITP6J3c3srb1g+0YExRUb4/8/TzZEuBtHMI/FXUPllPGHsKIZiUki75+eHS0qKENgMG + KFqgGfEQITGAx5kOgFj8JYHdQleoxcSAPhHhQF2EA71hINCTXx8oQRStp7B1Ttnonaon7147Y7+6mQfX + TD20cuLhFRO2VPYcWz3lxPo5p7csOadtxYWjdru0a91lXXtcOmq3i9pWnTti+VmtO57esvTk5h2Ob5x/ + dP2cw+vnHFo/Z1P97APrZu5XM23v6im7V03etWry6sqJyyu6l5aOXlg8am5R24zCEVPymydG6saHsAgr + 2hGa8RU1IcyNEjdAKGS4gxRvAgjzRQYF1e0lcbS/MJPDrSxCFSO0ahGmHQEZ7ZB6dclTKcMVWwiapPkg + qoHbPTvva7pzJ/67giX4e7D4sMkUBDJ7MvCVF1RAoM1WqWn1Tr3F6WyT2iLj7Pbdurq+e9VVH73//t/+ + +Mf9JkyYKifrCQ77OJtGCT0qBwEeKp5knjp5oQcDoeEa5bpwHfG4Nuq6qrcOuQMgpBI9uJU7+JnPALL+ + 8Ve/enzz5u8UFIhySG73sR7v/rqT6CC54bMdDhIniA6qGwF4uBdlCmP7Iq0yXVaphYd57rnnPv/889mU + Z/rqq79u2/bchAn36Trl4FFyuUTXIWoSnDsaoWpN21fTVkhIpjFTRN86RjscwDCYRJOqNUelw1mg2ePM + btW9qksVRBnZFAQL2yje29uLGPemgw46YePGQ7q79w4G95aS35iAIm2RTdP2kMmLFIsgd1DZxFxRZQGa + Jb9VCFlt8IBDeMSoVDdQC9SiLxQAxds2gEtsoQh2dmOeo3hhlXhvBmfoVw0V77qoyafgMHNEtH5FLBVo + DGbWiUyy9MctzUV7SOdNYjRLE41EpyxdWaqvMgJ+WZaW/nEKhSBT/9CS0sLippp6tf4Q9OCBtrXqGQFU + /C3J7ajGpG0PVnuyOJRakUgTUPYJLcSkd3iQa8Hx6M2v85fCCEUCjeT3ZRXdu9fNPLB50ZaWpZh3p9TP + PbV2xmnVU86smXp2/ezzWxZf2rb6O117XTd2vxvG7ntd17qr2ldfOmKnC1qWntu8+MzmHU5tXHBiw9xj + 6+dsaQAL526un3Nw3az9a2fsUzt9z5ppu9dMBQtXVkzYsWzMopLOecXtsG/goAKE5FEIvoy/dATqo6Ja + RT4y3NIiHBAjVOUJBWtUio7G6vTG9GWsj7Qs92RNZKYtMTpTs5h4o9lhqBQFs2x0osMUS4XNZdP8Om5m + TVmBRiCwBH68puGobNX1SdHIzML8SS7XhqlTv3/ttZ99+qmBK+/94Q8Hd3UtlO5EEBGiP7mKcOhxpgEh + QGmcXShkG2J2tpDAkKsXNWUrIGwCCMeMUTFCqsNjEQ45EP4dtbPublUUEIVoQmIouewF9mgaOXMGAGB+ + EfvE/OIusIdoGzYxS/TJsfJM+++/P1qbUF1w3mYUxcQWfH2//URhJqdTlYMngf1iu53qfUdpGkn9GKbU + hFoke/XkXXfdqa4OhTOwkHWG8NbyaGwaDwhwImKn0grNNrd6svxGZVNgahN8BcjHVFcvRBSmrg6TlwIX + hiIMwcjdpCgaEEiBYsS+BWM2hoLY94ZT1OztNHBXjCU5P8VtFocrilz+wIDwnovappmTA61cjlYm5IUm + O1YQDuFOuLYrWxJbw06qr62Bq2kxOmilYdnto5I6kmGDIroPBKR+IFFQlN1Fkx0V8PooDEeBCxzdcYDN + 5SieyqYWEJKRlICfwVHJnOHSmEsgCmpujFQ/Sxo0NfbsXxeIBEEkL/1UhMfqwhtJPh9MzqJ2wAmj7YDG + eTBfTu3Y9fzOtZd1rLlyxPIrWxZf2bTwO02Lrm5ddm3HmpvGrL+t+6A7ezbdOW7DrZ27Xzdy+RXNiy9q + Wnhu44KzGuedWj/nxLrZx9XNOqp+9hH1sw+tm3Vw7UwcpPvWTt+rZtoe1b1rKieuKB9PNsWiklHzitpm + FrRMiTYiNNMPhIFyRRylVJMEwkgMCH0Fuof0iX4glHV6VW1CQ3EUo9AUTZD+5SF+0izTeid2j2xtVmNL + LS0zcv0nG0PSP5n+EQ7JwDXCgcq1RZpPRSQKU0o5QpnxRYqYFBAh/teOCeh0zotGtize4YEbbvjjH/5A + dC3OPnvnzTeP7OjAglksLZhp6FLGCumZsVDmGjpqK8oiIl9T1poQakUipSweCKVFCGuUaBa0jqF1jX7w + 0kt319VRgV2hoHAJgj0yJEbGnkLB/pw52RuADd3CVmCzwQ8ima/L758myzOhPQ2v9emnn86iPNM/nn/+ + 0Wj0Po+H4n93adoNmnaB3b6FyohSqxNkAgh3r6x8+NprgdgTVqzALuwlndHlHAt7S0YucVcq9koccWa7 + XWjLKwyFaguLKGaj6jSBheqZjpUFF4HD2RQ9RhRGskOxAqHGkD3J4xOIa9PGRCIjQiGzlzsh81POqtmP + 3v63yZQ9J1LjrDFQMn0juFZCXmiy8xACZGYHlY0daNuothF7rFzZ2TIy60ZKc9KqoSbNPvQHRBeLKjBu + so2yiZxhjUG5VNCYsU2crqMxCdCkDAdE1nK6fYVFmHAfYCyFzUCzU5ODBCORRXbqfhUdL8RfbXaPwx11 + h6r8xSOBQBL7yIWo7NmrZsqm+pnHNC0i8ndx17prxm64dfwBd43bcM+Yfe7pWndP5+73dO5xz5j1351w + 0P2Tjniw96gHJx7+vXH73zVq7U0jd766efFlTQsvaJh/Tv3c0+tnn1Q/+/i6WcfUzTqyduZhNdMOqp6y + AZZp1eR10EcrJqwuH7ezyCkcheLMnMLW6dGGyWFkuGvGCouwsiNQMZKcRX8J+jK1VDSU6tuorA2sxyQs + Qo/N4cKjJ5RlqAVmFGNS/SuqyfsCjJm0j8TKDsaSitDCpAnjy0pYIvd/hso7Ip5xtm8+x9IwIpEWXywF + QsoOE+BE/rXDARVaOULNEDjGbp8ZCh21bNmT991HIjbTPQkDJM8NdlS+++abW9vbcS0yfSM+OYM67zLG + Vj/QLsT/FYbJJqXaZDMYj/EWIfJdUzo7gZkdd9yRHHBkZYaQLPOfv/3t/o6Oq1BO0fWTKRBvtx8uUXCl + REGDIKNsQVAQmGF9oDa+q/q3YMnEhgYVKVy/fv0tt9xCuJEkhIxyPL7+6quXli75vt8PEN5kt19utyvb + FCDcEwj0+S7eY4+//OY3qquvPOQQDLhFft8Ofp/Q4DatM0CpqMOOFoHBIDWAEJdZVWFxbUmp3+6AgQdx + Biyk/Yr40ymfkZSDEbrefEEXlDN3ynUAD67R5R5fXl4bCMT5twc7PJU3zMqrlHAfZiakq3ibrWND1tca + fCC6z8XFhSkcbnF/4r/lpaWjRrZFgvHFXQfP1PI38d48t+4Ke4NunYp6ll5Z5mzkLwRL3G6nnJMs4Ocd + fKQwmJKo0qi7FqkCUixGORhBU1b2EAFB1lz6k1MR0STQm9ZpmctVRGkkYUQm7TGxXBDkxtTUKkExJBak + uyLRosZIaYe/bFx+45ySTiBwn9ppODCPb1xwdsuSS0auuG7U2jvG7ve9CZsennjYDyYd9uTEQ5/sOeTJ + ns0/nHTEU1OOe2bGKc/NOu3ZGac82Xv0I90H3Ne5+61tK65r3fE7LUsubd7hgsaFZ9XPO7Vh7on1s4+r + nbGF+GLV5I2VE/er7Nm7smePigm7lo0jxR7FmcVFbfMKWmdGG6aWtE6v7ZpTWD8hWDkqJIsXAoSB0gZf + ca1PAKGsx6Qk1sgj9ATsbr/d5XP7gl4S350YhU6ny8PLiv9iu0XIqgR+cLpOSfVc6FaYohUVpaApq0Lj + GX8zgoEZjRhGNr4aBqKVo+JQEIckUzxGDxBIIgSOUGZ5YlFA4Pzi4jP32++5hx8m1UxBIHN9CtXmv77x + xsltbVgziC8v1HW4jpD+yT/DdsEuNKgWcaR/M7MjSjxVTtMqS2HevHknnXQS9hY2aEaOxxQBxZcOPPA6 + p5MqSFSOPRkLzGaDHgkKQo80xwWNhDnleFSpAnwnn0ZJWnd4PNNkLfiZM2eSkAD3Mgsl7j/fccfdLhdA + qMxTctghrRzscp01d+6Td91lhtVHLr8cLusyp3MH3UFTVfF67MIaiDyUKgz4Qg67Ku9nBGKVu1KJ4VG2 + XNUsjNhsxdRCgvsjeUB4WVGEYb3CxhfwjxgkPm2S4ukB9gQ7VTq8IZKQMOynJlYrwy8xEAqtauSUkuYy + ZX3mwQfGmRRgw5iuDkj/pqWtcMFZuGL8/dIB+fkRyVPdvkrmVNL22n5CGgAVoLSwCE1UAwgFLEmbOtlC + YXvzkkuTyzBNOntI+rE4Gz+bGuondo+jzTKOaOWWE/cKp4KUpHyhcTeQ48AwrldWWrxwzqyGutoUwwx3 + utmDPbit0tZwajr4UeSPNNeOmFvUMC+/ZceycXtXTyWMB73lgtZlV41cfkv7LveMWnv/mPU/mHjw8xMP + fXHSkT/pPeblKce8PPW4l6ed8PLM016de+7P5l346rwLXp51xvO9x/xg/Mbvd+15Z8eam0euvBYPauuO + F7csPa95hzObFp7SMO/42plHVfdurpx4YEXPfhUT9qqcsDtAWC6AcEcU14pGzs1vmhGunVzbOW9kz+Jo + zdhAOeKlI4PlrVT0DZTW+4qqvZiDokJvIbrbTlGqXpXn9XoDkZFt7S0trbrLA1MmFAqXl5VTVDcD0e3U + vnU6kdXHuLGj5sxCYCt+3WfhJclplyzmFOuHmG1BhYJM7sppBgKNlBTQ+WVl527c+NIzzzC5k8wODmGT + AYFpCwH+5ec/P6W5eYPLvavLTXyLGusYGWBhnF1o5JapxijbFLBR6RP4Hnvq65W9RQ0mNFyA4SEBwn++ + 8cYd4TABOVDnTLv9OJvtAJsNMU9sQUwi2DHAgKoFb+QnqEw4lSRAC1lrkKUuav7RyFh5B9I8brjhBnLy + MjUKP/vrXx9tbzdK9UIZvWzq1Icvu+yN11+nrLwZzn/93HP7BIMEDoFDMgvxYeLApMGtdq3F7y9zOXmO + NNUIE5rmTdG9uNJCHo8fC0DatYoGbCjCYP6yCUyV5eNxdyiHcIGuh+x27lpBbOoUiExHvHRjiFwx60M3 + 00sM3h+LoaqiHHtOQQ6XxucZDoUMKiPTAkiWIrFKnTNhIIOzoXcRR3aLzTPb26JgI44cxG9I7bXiVEzR + CRn1JEXjEFykJoayYo1P3PlFwwRSpjf3AXWgKC6VntsUnqocFkm0h7b1jB+zdvVyHlyK2xfVDpLBuZDM + RiZGhAPdoTpvPol60wqadh4584i2hSc3zDu9ZdllI1fc2L7L3aN2e7Bzjx907fXs2PU/nn/M24tP+vOk + w16ffNQbU49/a/qJv5p56q9mn/nWvPN/teCit+Zf/Prc816dfvILk454YtyG+zv32Naxy61tq64fufKq + kSsvH7nyopErzm3d8YymhScQJqzqPaSy54Dy7n0quveCg1PRvaZ8/IrysTuWdC4qaJmNVFuociKypcGy + 0YHSDrLpA+huS61RRN08+RUe9NVkKn3MHBR8UYDQ4w/V1NYXFBZjDsIXtQujkDwKKvRaXtawfiF0m2Lk + 8fDINWQlkuPotPT2KqXaYECWL8k+1pL2WsocVHxC5k0UGpS7TPEhCR0trqu75OijX3n+eWUFKgik5JB1 + p987L798Vlvbvi7XKkl6FDlwMSzE2WhwZ8wybAYQUolQ5RGOLSxUQLjffvvdcccdJPxlLeBihpPXTzpJ + KUqfJRWlD7XZ1slCE9NkXFCgIAaTxABlCBrJcColgP8KEmaskZRfmDp+vGrn1q1bH3vsMdLS09Y5irNW + 3zjpJMUavXf27Dfuuuvt3/6WFHtQEPvbvOfH7723pbwcYufusjbTCod9gVMnubDNZqu3a0UylUJRZpTF + NgAImaBdnvxA0IObJJYYGo5ppBmKMIQbwT8crfyJs6GD11xenu/zDWbHpB1mCXcQ4CGqo/e/orxW9fXV + yMF/E+9XrEGsbgFCqo2qLuIdF9wKU4fRPKZ+I1dPgpYIyMXdkZYnivHk4hyKwwZFwUvh94trgIyFxbdK + 4LqQSdku3CENssTziWiAxCdumVpLTD4oO8JKNTeMvqmuKp/QPZrUwLQPXekkmy1L0R4hbSMsxVw+jBAa + xnSdjc9BdIDD4fJiTkE8CVWNRtWssHXnoo69xu903hFXvr7wsEfb19zRte7B0Xs/OXa/F8cf8Gr3Qa+P + O+DN8fv/et4xf59+2DsTDvnt5C3/N3Xr2zNO/sPsM/4w97w/LLj47QWX/n7ehW/OOvNnU455ofugx0fv + eX/7mrtGrrxl5Irr21Ze1bb6ivZdLmlfdf6Inc9o3uGE+tlbqqduquzZv6pnv5bpB6K4RoCwauLKuskr + KsYszm+cEaqeHCwb7y/p8hV3+IrbkPMmccIHX5TavNFKV7jMKYoRqjx6Kbct1GSoR+ghfbA/OijIojLK + JCvUZ5BHqNZBOS5Vcnm6ccfi22wb2cxwHMJzDj6VmIxUtjXCaXa7IlAQNAIFFzQ1XXzssS89/7yKBWYB + gcbE/c5LL53a2Eg6GowPMxbG8UgNu1ABs7K3lLLMKL9f5a2vWrWKqrwYW/BlcjcKfzB16jUyXe8caQ5S + chanKLot46VXsEawhDTETjGDDFWwAUkCcvUARlKZBtYMndYtpeD4rFmzBiVuCK5I1aSo7TDYZ/vP1157 + euHC3996K6Wg+CuyZyRjcJI4ouxXX3xxaW8veX4bHA62g/Oju0XCU2y2LlRvdJ1VPehlVuI2P3plvgg5 + XiMqHNOJjVOE4b9KNUbcpsOB/DMBJTMZNZuZKNYUpjOqtBsTJS8fkPNNJguphmTkAwQREVJJyuYfnndV + uPgI8yS3oviTFHaJX/WLCKLXZ06TT+v34g4IEFJ3EJjB8osrrK2MVzAotcHw7ZlF1QOR8C8C5WKKd7hI + P4dsEqnpKm6fXdGzum7GxsYFxzcvvWDiPvcsPfHlKZtf7D7oJxMPfW3ykb+Zcsyfphz7bu9Rf+3Z/Ndx + B7wzdr8/j9v/TxM2vdO75S/Ttr475/T35p3zt/kX/GXBJX8SWHjBb2ee/POezc+OWf9ox67fbVt558gV + t4xcfp0EwsvbVl00ciUW4WkCCOduqZm2qXLS/vVT9h8588C6XmKEKysn7FTVvaykYx5ao8HKnkDZWH9J + 50AUhCxahbIaKEiOv2CKxsrTkzUhUNDpQRBcqsmIqrwi9okhqDZrsechG7/0M0uejLQekl2b8yA4m3DA + 8VBlfTFLERTpHkhsF5ujg37qUdjtqnDd5Lq6o/bd98HvfQ+8wabBFjEcoVln7/3fM8+cUFWFBZPQLjSz + EI0UbICQVQBNwkYYqetTZU79nDlzTjnlFBTIAGbrVmnCZlMX93vNzfhFz8Ei1LQjjUp7kh6C8xaDFY9o + IQ9CpncoCDRCYoYlrbLUSx2OOhIraafM9OBz1FFH4cVFHzwzJe6vv1YQqD4Y3xyesP7ww4ceqmRfSLff + 6POu0HW0sCnY2+pwlNv6k/xYWxhtjsNC89Mn7QhRJhIChDsamSGXC67NYFEYdaohfKu+bTNmRhOBoqKk + yMkjYZz0uRzvkZe3KL8gGmJhE/+Rs02Cuki88sbvsyDcKaeoMI4tRUb7WyVEWaVTrahI1DrNqCeHfGd6 + gBnS6HlhFWObUlTAHXCHygLlbei2VE3epXnJYaPWnjX+gOsnHvr9SUc8OemIn0w88vXpW/+48Mx/zjvz + 37PP/HTuuV/OPuur6Sd90XvUf3o2f9x90EcTNn048bAPe4/6YPrxH8w785/zz/tw3vl/m3vBO4sv/vOK + y/86+4Rfjt3/qc49Hm7f5T6AsG3lLbhG21dd1bby0pErzm9ddkbzohMb5h0NZbR6yoGVE/GLrqvo3q1i + /KqK7p3Lxy0hfbCwdUakbhK17ANlXf6Sdl/xCK9Mole2oFSTKZa2YNThDjtcsuKEyJcAAt1mFBSCKNIc + FBDYvw4Yum7eHvROArCCkmNypGR9Zdws3EeywwHa8rKSwkLgI82HAQ19lHGZ8G00+0WBXICwyu9fOmvW + YZs3X3DBBXffffdPf/pTPKJUQsjIpkkGlr9/8skTqquxC+HOqHghHEUYGdiFQE4cFiotGwGEmqYicBRR + VACDgAsaKHgLcyxA8dl7790rsybOIINe+kVVpT0kxBTrBN+goEfizxkYElOsE6W8I4xpaTZV+HyNfn8z + gWSUuOWHWhm5K3HTmYMLM6kefu3mm5FAI9ljo90OwYdIIakOpGzi0VUQrkpSJARCsUyWm4BzME+4VKBa + i8pZ7U2NY0a0EtpSKxKVURO3CEg37iz9nStA35cSZZYDGJZO/E3sxDuIqgvUOd6vhKYabxwvHqJoObZG + uBNJO05Y4ZZ4rWd7OqNh/eA2JL6Y43I8mQc14e3QSOKLqGuDgnBureeP5bhKSNgYTATKVhQXFSgDQKjE + OJwOp1/3FXrzm0LVE4tH7VQ386D2Xc6acMitM055Yv6Fv1h46R/mX/TenLM/mnnqJ/PP+nrHy/oWX9G3 + w5V9i68RP+df2Dfr9L5pW7/uPfqryVs+6z3q0ynHfDx160czT/loztkfzj3vvTnnvDPv7D/MOeXXEw/7 + 6dj9BBCO2vW7HWvu6tj11o4117fv8p2Ryy9qWXJWw9yTamccXT0FPZqNFRP2LR+7BzrdJaNXwJEpG7uk + pGt+Udus/CZqMHUHK0YHyjr8xVJKRnlERTFeVLaVsigFCKnEi46azy4hUNZdUsqiwhbsr7vU7xRVHu9c + fDcDuxnpQpQdRL4Ovm9Nz2KpZb1UvQLxZK8Qf+IFSFvDRfkEYroJCU5mACHTJX5RooM1Pt/USZOQGiEH + AJEUVQh+SJyQau7+v6efxi4ECw270IyF5lx7RUVRtEwhLkOYkEpMU6cCMCtXrrzyyispCp9p0nocQn/+ + 4Yf3NjRcpuunwxfVtE02G/njMDDJmUNBhpw8sJkGGKRWYzSJXkWWSb5nRjgzqjvKnE68uBSmMJS4Dz30 + 0NyVuJMtLP78/PNnksqi6xSK2iCduqS9j7PZaDy0F4BQNX4wX2awaagU9RQoFufnlxUWYmgY4GcYwUP3 + MuXBk5w/d0ZXRztFuNKWJsgaS2I+saxPkPRAZtuyspKqqvJk1o8IteRGCbHQ6MQPRKpyinykrD8Uzi0q + wBeTPv9PXQKDq7GhrqmhLiMFSsxWei8ju3PA0E3SvegboAXt9wulb+EMxRfqjXgitf6SMZFawGZd1eRj + WpZdAZ9l2omvLLjknSXXfLLk6q8WXtY39xwBeLPP6ltwSd/S6/tW3t23+nt9q+7rW35H35JrJRye0Tf9 + xL5px3817YTPZpzyyewzP5577j/mnv/+nHP+PPPU30457rWJh/5o3AFPjd77oa5193XucWfXHreM2u1a + zMHmJefUzTqxqveoigmby8cfWDpmn5Ku3Us6VheN3Klw5OKikQuL2+YWjZgpytNTm74C5g6CasQFG30F + daCgKElPskS42BUs0P0GR7QfBY3cebOgmnyb1YwlB8IQDkXWWaUl/UwZUlkzXcuwpiuIUFnov+w0iJsE + lX+P6ZIwGMEw/KIdsdJCe+21F7XgUbgmTDUkzBQ1of/m0UePKylRWBhnFzJ9K7tQVSpQ+QlhUcJC8GXa + ScyPFYWHivLEE08QucypYV9//f1RowwgPNhmo9QfRQcJEGJUKSwx6vwNppwoo8roQJrKEpQOhGo7JhpV + 5ZlQ4r7wwgtJfMxFiVsZhdxpXEz0i08/vWr06C1KDhQRHAWEgyzCwUAo9CE9WIDb7TDjjUn2xfqUmmoF + ZzoLVMxxYzory8tIakpmZGSx1oybKAmxK6DilrE+MwoHpr3lmGxY2h3/mzsg6ZIpqUTMVNF8cuGtJ5vx + 0IHAuO6VFfyS2vrqEIvxnbgeBHdDFMGADJnoY0QEMZLIK/AUVFHqPb8ZrZa1pV1HVPac1zD39o41z0zY + 9NsZp/xr/oVfA4Eg39xzBQrOPK1vztl9i67oW35X3+4/6Nv7xb71P+7b69m+tY/2rbirb4fvyN1OYzdc + pp/NO+/f8y/4aN4F780990+zTv/11K0/n3TEi90H/3DcfhBt7hm9122de9zQvvpyBEjrZp5UMeHI0tEH + l4zaUNy+Z9HI3QpHrMhvWlo6YmnT+NU1nUvyqUFY2xOqHBssHxUsawuhplbY4InKuoPRck+k1B0ucoUK + nDEUFEFBYQsK+Riy5qW4toj7x2rwqj4wAaG5o3DFKBmF/8rApFE8v0zf7UzhNqNbU/O4cu7BF1UlcHFC + Tm5vV849DJp77703FxXphNbMW/fff1xZWTIfKXahquwDCClyP+lrWFpkfE+qqFAN23PPPW+++ea33nor + xzr1z+6+uwJC8uiVRQgQKouQtAFlVBmpAoOX2GaTWhTlkPRR1dTekSNVUzdu3IiT+Te/+U12TQX88EvD + lCETgxWJWUngPx9+eFVPDxn3RF4Rxd7RZpsuya6kA0IqjyR3jeLNw6eXWH7atIy0aFKYaRqwQMP+kMeV + YLUnlPNM2bdpB6qiblpMME82IcpsNjFd8tZb99elbVvqHSTR1J3dFG/l0hJCKAFogXtpy+NZA4RpTysZ + o/24peZQZsu4ShdpTxK3ChFeE4lVwrubTpo8o4kOxbZwMJR8LhV15CFSegsrovVdpaPnV/fuVTfzmPrZ + FzbMv711x6c6d39rwkEfTt365ewz++ad37fg4r4FFwmEAwWnn9w3+wzhDl11T9+6p/s2/Lxv41t9B77R + t+/LAhd3vq1vEYbjuViNX8899/N5F/x73gUfzjvv3dln/t/0k16fcsxLk454dsKmx8Yf8N0x+9zRtecN + HbteMWJHcPfkqklbSkcfVNS2T2HrHgUtu+Q37ZzfuDhSN698xA6jJq2pGjEPakygpNMvCKItkfKR4ZJm + Ci0hq+1GTTQkITAQdfrDujfAfREUtMt8eaEd0w9+MhyYAvzMzwY/xsiR6FZaGEAZPfPh2RnURDBiWN/e + wQYNQAj1cWw4rJyQqEifc845zz33XBaCYalpNW/ef/8xRUUGFpJTYfaRwtrHEFQMRoAQkQ8UokXDvN7p + kybRsNmzZ5922mnPPPMMSY25GIW/v+02YoRoWx/rcBgxQqrvkldOCh2QrLLxFFMmztFuxNiUd1RFNKlL + rIzC0YGAUuLGz4waThZ9aIZAiKOQbpAw5QN96f233/7Zd75zTXf3Vq/3IIeD8kzUyyW6iRYMifC1MimQ + DlSs0cEWIbag0hOxOHLVFKnq4ECIMB/IjCy9W/2LS+YmqvnEGXnilz4/8srN9fU+aZ9xQqDCusFhsZ3Z + 7ZbRFMwlFJUkxbWYYSidkWNOeorzc3X1LOL2MZBM9XBGvcH+caw6/pujzaAWMTzlivJSss7i7UWTsh1/ + krQjqwNSkXkS3KDoAmgaHk+0ONrQXjVpYeuy/bvWnT5u/5vG7//IuA0vjT/wD5OO+NeMk78G/4C0xVf3 + Lbuhb8eb+5bd1G/tzTilb86Zfauu79vtu317/LBvv1f6Dvhl3/6/EKbhrg/17XRL36LLhY903nl98y/4 + bP4F/5x77nuzTn972olvkFw/+cjnJh32RM/mB7sPvnvcATeP3vvqjl0vbFl2Wt3sYyonbirp2geTtKB1 + VUHzjtHGRdGGOZHa6eGqyaGKCf7iTl/hSG9+iyfaIGS+C2rdoXKnn3BgoUwTjDi9IZ2kX3IkXAICSZCQ + ZWdhAwlGjFCNMcn6pnn0dB1pMayP1FBmvZNjMDmjcZbFznLVgwyW1cGRxSUYSnh46U6MHkyfiJzEicZR + UGJaS4syaMjbu+2227IQDEvLL/3lPfdsiUQMLJxhwkKlO4NNAwqqwoc0DKVT8hqnNDWphhHFpGEYhVR1 + z5o++vHbb99QWEg2/bG6fpim7WWzLZWyagacKC2xhHCilhEGdxSrmrEF/BhG4eRYU/fdd1+a+uabb1ps + KhDIHWEFsj8+VWhB3CaZGBQ7fP4HP3j0lFOuHzcOHRzaDGWUDtyF8kzSL4pTV0G4ovkoCM+R5KmI0ACn + 1+ul9IFYiZvGpKQkpxmi4GJNacXS+XOXLJoDi0EZHMS4MwVCGoHIZ6ZTfOr3IkO8yBOFSwvzU6eT0yEk + po9safZ705tiWby2CQ9BmbqloQGOCPYfwctMc/XEVJAz8iVsGL2BINfgSCrLBfxzBpzn/lgFlusudzg/ + XNtSOXF22+r9J225aN75Dy255rUdb/zrsus/XXrdV8tu7FuxrW/NA8LVufvjwshb91TfXs/17fFU3+qH + +3a8VaDjokv6drq2b/ntfWse7NvzGQGBe0rX6Mp7+jgcIJx3Ae7Tz2ed+dHM096ddsLvpxz9y2lHv9p7 + +PPYghM23d+z+Z6eQ24dv/HaMftc0rHrGSOWHd805/DqyRvKxq4t6VhRNGJJQcuC/MaZkbrecPWEQNlo + b3GbgMBIvTtc7QpWugJlTl+R7s3v19F2UVBCmYAeDStQdwr86y8oIbMD+7M/41bp/Y8i5iBNMspYfZCZ + YIVsMlTDNIvzpLmHLM446BD8K9FAUElf9E/iNht4Q6G7Xp9vhrS9Zs2aRbqCEgzLNDc8LRa+ft99x1dV + 7a002CSPVGlzwyNVWIhzEjjEMqOugqrz0O3zTZfy1qphTz75JHUEyTHIOqfwmfXrySOEfrnZbiePkEgb + 3EvlYFTcSzNfxhyAVkwZlYqn3Mv0obJflWE9GtG1WB+eeuqp9KGVpnIjsGFxgSoIxARUEPjMY49976ij + rmlvB7ZPidXLxSlKkcLlmiYE4aQuNvJ1+EVVsz15NqcUGczIOpDGwfaEWv4rqBcS8YRv3yKlXsk8SkuR + M/g83lHtIyjnSaZ2diOXc5UUwNNE51zcTQr5MfP5+31FA36V3fX7j8KilXXSU2E/d41WWWVFeTKqZ39y + Av0J4yorxqxYhA08EPLR2FGjigvQVA9UVpRmVORPPSNiqCL1PkbTM9uXOXVZkoOlYZ3lKl86n10mg1W4 + QnVkNUtrSkf3ti7bc+KhZy+89KHV3/+/vV/8dP/X+jb+qu+g3/Qd/Pu+Q9/pO/LvfVs+7Dvivb7Nf+o7 + 5A/iN4e/33f8P/qu/2ffmX8S4LfTrYIpgxd0l/v7dn9CYOTax8R3QZm5pm/+xVBmPp+69e+TjvhDz+Y3 + uw96eeLGH03f/GLPgY+O3e+ecQfcPn7jjd0brxqz74Wjdj+tY8XWziVHt83dVDt5j7Ixy4vbFxW2zM5v + nBatnxiqJhxIsnyrJ79BQmCFy1/iDhS7fAXkRdgl/rk8QV8wrFRDB1QWlJIIsNnYUiwgeGUTLkG2PxDp + AU/lGhKFvvzxhb6sjwYeEjkLua9xEl1RvNrWW5J6TxJ1yU/y8QLEstcrHPpIf4BkuAl2+6yaGmV7UQXw + uuuuowpgprnhaYFQcGceewwsNMcLwUJDgw0XH3DIxhflHcVanRqTW0PJ7Prrr4c+mkvD/v7qq5f7/RhY + BNsO0jR8jMiVoX2jMiiEjxHpL8SiTNXVFZ3SgECV6aHU6bAIgW3sV9g9qNNNrq1VfUhJ4bSia4oRQyiR + xE1EDAgr0uc/+clPgMAHjj/++q4uIJBwJhUKRcoEVSmkCbuKQlGaRir9aBnaRBCO7hKEI4SQ/IGQx5sp + EGJSoLUyOLAUDPh5rywOPzyo+eEIiXTGCCReFFeRLqNhjJ51YQS9B4GsKginptEUb4PgBG3fTbw4xBpo + VdpbUAGzhM1LgKyD9kuxhMUMKi8pUYJtqt6BupCakSzGQTgAzp1ZmJQzEH9NlmUx+Ea4XFzlKTGxUvIF + p24giAVP2/xe3Gd+fpvRY/pmdmYokj+marcJZyhpOMEiZKmrJi3rWnfcrNO3Lb/rV3u/8Cngd/hf+476 + Z99xn/ed1Nd3el/fuX19F8iffD/hq77jv+w76Wvxp1v6+j7q67vr674Nb4rQ4K4P9615qG83aTXu8YO+ + /Z/u2+fxvuW3SSC86KsZJ3/Yc+jvx+7zs651z4/a7Qdduz3Ytdu9o3a7pXPddaP3vnLMPheP3pva9Ce0 + 7nh40/wDG2esr5m4S9noJRSUKGiZFm2YGK6lmsSoQBmkUEGHwQtK4UMS5D3+wlCk1BuIirxAUYPH4/Mj + n+2XGREqNV6NS2H8idUqQJhyFRVnc2fzaIgvs6bLj2CNZPMBCIkzp33fMj018Ix3V3DAhmJwsqbGnaJL + 7qAR4qp0udsCwVancwzeUbd7Zne3msepYP7www9nnBtuBQn7+n798MPHFBev1/VVDn0HXVf5hUqbmxwG + hC6V6FcFiQEeN2ZWD5HCCRNUw44++uiHHnqIHI/sqCiqgU+uX09OPZ5G0IW6EzvZbGSmYxTCHYUygy8v + lGdThY3MEmsC/7B1EO+Q0jPIopJWjykGDiHsIigzJNcX5s+cNFE1NYXomgGBqARgecNOQsqAJM7nnnji + wVNOuam7+wKnk2RHzFY4ooegI6NpGK9kPe4MCur6dIeD1uIUBbnpLkYtZhdtC8qc1oxW3QxaeOfkYOEO + jRufeLfSSm4ah8CSGMLygcI9K0p4bqe5DaivluRF4hA6QMGS8vtRCbakoHBweCmGRqneyMGvc9xvhPvY + VJuJq+BJjltP0KsImQ4GPOZ0FIyt82uclIpPwpm0MqvI2JBKkBnwQaKalbEIA9s0r9Pjc3mzqFtHP1N3 + nshO6pYAs5DwM7Vc1TlVzVdJ79EdrpA7Uo84Z3XvPl17Xjz33BfXPPDPDT/rO+RtgYKH/02YgMd91nda + X9+F1Gzp6/tOX98lfX1n9Qn8O0H+PLWv75q+vrvlL4/+d9/mP/RxuHCHPi4MxL0e7Tv2Z32bnu1beZcI + KC645OOpx789bv9XOtb8sHXH7zXvcHvTwmubFl7WvOTCkTuf3bb6tPbVx7ev2NK6+KC6GesqelagHVo0 + cnZB85Row4Rw7ehQZVuwrMVXhLopGjGlFFHyhosiBWU+f9TpDni8QUSEYhQYgqZmCsz27pRMqW+E6cJA + Acnws8tQ4oCgNKOEQIXFtZuVQWl9H6qVMkMF/EJhz+KW4uTFhYWtjY2CUy6NG+UdzafaQ56tTtPwjk6i + BmxJiZrEyQ2nNDypFBgruZBTkiGj4M6AhaacCuUjBQuJeOGiZH4HCJs87ja3qwujsLxcNWynnXaiQuGL + L74InSdrB+k/f/vbqysrKfVwKIpldrtBPMHT2KRp1Q6HxMLtYmPYf7zlmFwC/+x2pJFJwSTritx/gnNK + vRogJLm+O+CfHjOsd9llF0TXXn31VbMmjoJAMjX5JY7T3/3ud7/85S8puPjCM888fPrpt/T0XOxynS3r + QyEis5lN0zZKBZxdNG2pps3RtF5NG22zGSgIEhtF6lNnECYbG9Z1BlOYPlZGtaX1nA3FLzxE/YqXilVh + cYlpbp76rtxxFg/P6BY4p3AtmqYnqXpRWliQXvVCWYRZ+wkHt1Mqy6RRtEnMNZHWtuof3LZBd8DnzHhB + jy+ttrIKfkOKfiZ75+CNe+23z1oRftZ1DHfrDyVmBUDf8unecm/huPzmFTXTTxy913dnn/X26vu+2vel + voN+1XfwbwXPBbbL/r8UiIjld35f3+USBbEIT/yyb8s/+o4AJj/o2/q5MBDPlBt4eexnAkT3+YmIC8Id + Bf92u69vFSh405eLrvznrDP/r/eIV0ave7xl6Z31s6+pmXYRFeqrp5xApnz9nMMb529qmr9//cw9qiat + KO1aWDhihjABRUHBjmAFtSMa/UUkBVI4gvJJRAFJive7vIxu1Jy8Ri684n/KOV4MjbjABh0l1Fr7UWko + TKK0A10MbkGDHoC9LOjqqqusMJLTnj/tDma0ExEpUY1T6HAo11yKTZE41GY+ifmKDD4Gq4i1xLLCRV0e + adBUYXvJSq0zKNMqCwHy2bx5M3ouzNS52F4pTMQ3vvvdowsLlY9UxQuVXUisDncflhkbEthweagJNQE5 + sVjDKAoPFQX8wEGaNUi/ddNNZzudyijcy24nOZ08CopGjdK0ZmY0ST8BY4BDQ40zSrqVxL+WwsKGYBB3 + KBuNBLlpcK3NBneU5PrRuj5t9GjVh1u2bEF07e2330Y1DTqMyov46KOPQHGUtWEkAYGA+mOXXnrrlCmX + uFzYqUAgrQKhD7LbD9S0vWVxjDU+z5qC/Lke93ib6KImU4kMAwUNpmvaYZbdDqxKiUuZ69Nmdx5RjN6P + 2H1iw5V30Ofx4Qnsn51FmcP0omUJ8TLR1N8//Vqfha3fI+dk6khIvFQtGY6LquYBM5EIHooMfAHGQoHu + VW0mAOXR3VQ9tH7Lak+mFGlTppqjmT+XLpk3ZnQHPoam+nrSSa23VjhxHS6HhyLyI0PVC8vGHNq69OZJ + h76+8PJPdn1E8jzfEGkPe78gkAyqJ3SYjb8WaAfOgYUAIT+3/F1wQff9ad9+r/Zt/mO/ydgPhP8R0cS9 + n+/b5ft9O8Imvapv4WVfLLiUjMO/zDz9zbmn/PzA6/624PCnaudcXD31jIqe48rHHVY29oDycXtXdK+t + mrhLVQ81BSkoOCVSNz5YMUrkxQtpmGp/YWWoqAr7jywIBxRQ+J9SDgZBJ6GF1m/8DVilCfGWpC56UUsy + 2aJwSBd7g56/WrVxcTyKORKL044tA70MPFNBKSMupQgaKbY4Zaw4UDQaoC5kNgpxrMG2wCiEoknJ8rmx + 3PDFixeff/75L7zwAhkLOWqbJYPD1+66Cx6p4s4sogJwrJYvE31NDGBoGCBNZagp0egMmZ+gvI44SMES + OCZZM0if2LCBSCH1//YlGwEGiuRhEiwUlflcendxYYPXg7UHIrI1BgLN4VCFw1HrdN536617zJ8P7LE1 + gn8SvPmJNUlTR9GNBQWqnTvvvPOll15K2I90CNYTpAbyBVwEAl955RXy7h+/6qo7Fiy4LBQiHHiqrh8n + I5cH2+0EL/HZkuaI2xZezDyPZ04wMF7XMQRr5RJBlchIWCnQPNiErQDxLDX9P+3oVLOt2x2NoONlSfA2 + xSlVQN36PGildSJ9XjhFt+9rTCjW4SduT+sHqqviUqIUYdx98V/6TTLW7ea0Eys3pfbhCQIzqRsji7pn + gIKcFnNWZQ0O98wWd6dI2GQyikQ8UPdFfcUt+U3zKroPblly/cTNr62+7T/7v9p3xLt9J/yn78TP+47+ + V9/Bb/ft9Xzfmvv7Vn9XEF4O+l3f1i+E2XcGZt/XfSd+1LfhVeH2RDtml+8J1ijRxCPe7zv6o77D3xOJ + g4QJV9zdt/gqCKJfzD7rH7PP+OOs09+ccfJPeo96fMEJP1xzxrM9u19TN31r+fhNJZ3ri9rWFI7YqbBV + lE/Kb5oSre8OVXWCfwiEukOwQIn/FYoUCF8Y48/uQhpbJD/A/AQCybjFyxuzVrb3DYOkvraGhWbMLowf + IEJO3e9TRhrPrra6Silu8vgKCqII6wzjc8QetVKFy/qYjtvTDH6yhIaUsoRorjnYnDLJgY3QjXLNKe0V + 86Z+yV/Z4gJaBi4ONhMVEBrJcIZRSGY9eEP8aU5rq5rHsb0ogZRjxkLquOFr27YdGQr180hNWEi4Diop + cFiHg1TmUUDnmVFdbThIAWmUuAmwZaZwbWoNNJXvr1wp6KMyJwHhmx3xPUrp0Uke9+KG2vHRMKhTA7FW + 13urqqZWVTUTujvsMM5xxSmn0CSxsYCIlbRtlYY19ivdOHXUKMOwJr8e+5V0QIMUCjQ+cdNNt++wwyWB + ABAIHitGzCF2O+FAdETx1pIgAYuH4CXYDC+G4hjKb4zT2JAgMApF8TQTcmRCvmBJtFCxDHL8xKFppjhh + vnpC2yGnE0oDJ/UNDrlZZr4i3/EQBim8N7ARwswSmj6SgjvQx5skLy7+JoiNMfGlfXbKHlV2nkHfTXEU + TTKHA+N6bzBAGtOIcU4Okak0afi0wK3ZxyYit9aWZVTXw5HojdbmN06v6NnQuuzKcQf8dP4FH+/5XN+J + /+67oq/vtr6+O/r6rpNRwOu/7jv+vb79ftG34bW+w97tO+nzvnP6+s6THJktEgVhgS69DlNPoN3yO/vW + P9V34E9FssRuj/QryMw5+z/Tjn+vd8tvJh356uQtz00+8tGezdvG7XftqF3Pb97h+J7lp43f4ZjitpXR + hoWR2pnh6knBSlE+11fc7M2vdYcrXIFi3ZNvd4U0p1/O3y4j+d1we7IkDfoCCV/GosKCjrYRqdNv1DOi + /7pGta/bdRXJM/wXznDnqJGVFag9ZlDDK+1wGrCD9J4Pi3ygYZYpbycrdg9cAwLa4Jxmz3d6I1CDbRoM + CDZW/UamuUqzY9nApr4bjjt2U+Isg2sIKA1lMyKq70akkLMxvdZT3I5isxiFgcBMmbFA5QfS2MlYyKL2 + ujXejNjrlZtuOiIQAAtXSLtQ1fLtlGQQHnU9lhYhMYkuk53OmTGAQWvm2muvxbWIwZp1msdnH3308N57 + A0IQUlTRqCUOx1xNm6rZJ+v6OASpNQ0uaKfbNd7vH+N2b1q27OOPoJv1/fLHP57q9/c4HMAzrR2bl9cl + /boj5P4YhRNCISW6hlEIZlOqEBMQUihh1yduv/3WXXa5qKiIvH4coViBQOBhLhfu0P1strVSTZtCwUAg + mf6QYhQEqpLxKttSJTuaea2GSzxuiFMMwedm4f+NhBYye71y2ptJQYp3D7ivtFhonsQhd+CmY1aWwYft + 50l4krRnVgg0+JbUL+l/gyQyeDcrJ0/WWcaxVFDCLFDghAeLOTftaY1zCvoo63AxJYgPBzoJf0KuIVQk + k3rLkP+VX5hbDNyj5wrCUZQTUlyIxEGySszudHQri4sK09TeEpwYt9Nf4i8dU9a5W+v8C9t3eWLS4e+t + vrnv6N/3nfFl3019fT/o63uhr+/pvr77+/oe6ut7irUpsCfjgldLUigbjBiwEHtx31eEiCgUUDRlSIdY + /J2+dff27XGv/M1FfehuTz7yL+MPeK1rz2eoyjtqtzs797i+c49LO9ac2brjMXWzDqyZvOfIqXs1jllR + XD8zXN7tKyQRsNEdqaGuhe4vJP/P7gpqOjO326aRviSL4krlTxn42z4q6GcYTwm7iy5C2prMXfMQHTzC + +Svehbqa6hFNTV632Fmqp/mBQ6kFP2yvOYs4LkPRtJze2tjBNJPFEaRpwyZTnk9Fx++vmGrTonZHPspV + MkbF4FO5BGxglbExJ/Kdn+pP+O6wEtifWVKhowGKhqVohkMFhAMUUiRjUxmFUx2OeYPSAIhsDUlJioQA + +fL11x/q9Ro+UrAQDABawELcpGzN0nM7HmprMDhjYj8tc9OmTRis8C2RIktYt8gKGH/1+ec/veiiM8rL + yVUnS2+Nw7HM4ZhPPWGHo9fhYFkA1LFNdrm27r77B++/r8756ccfHzxx4ly5Gx7dqXl5wCGg1WGzAYSs + JyD49DY3A4SkP8J0veWWW9BK/eEDD9yyceP/R91bwNtRXe/fZ2aO33PdXXNvkhv3QAJxJSTBgrsEDYHg + GtyKFihQrFCKFCgUSmmhxd3d6kYpVIC2FFrO+917zeyzj1yJwPv/HeYTzp0zsmdmz372s9az1jqzqekk + TQGPBf80CzzUdQ9LJveLxwhqJF/MbM1KORoRHRhd27R6iEcsEMhch64iclZDBHPegK/wldgob0LgMGOu + OXhbq/2aM9aTfLJ/OtLPTcBSWVdTU1GGZiHST7nBjXStIVWlXRe8VUAF7poBYR1Hrr6uiPWMgxInLWdZ + pw6g4joUEGY6EWhKRAUjDy/gFCJWKXupuyJDDVgo27ENYn9mWv1EreYkF1UQi0okkalJmXOHVbvRhSbK + k5XDy9u3rB97XPf8u8fs9IfJq/638IL0AU8onedV6fS9GgWf1kD443T6jnT6Zr18PwDFx1GGp9N3aVA8 + 48v0ob9VjsMV31cB8iSXIYPokm+lF17w5cxTPt7k8F+P3+e5Edvf373F9zrmXN4+49y2GSe3zzyibcaB + LcQCTiBH9vyy9mlUCqyoG9PcOrGsckgkWRuOl6uKSNEiVcrMM+CncU/HpaxrpkAy8Y4Y3k1+IjMX4S4N + PhKhYOKhdei98mBM7FH+nmhnMMVulGpbCvywnySSiUjUBKWJ2ZOhTWgf4GeQD0U+sslmRIw68SZhakS+ + d+oF15R86XTddha0+46D0QzXESOm4CLHkXFTEFFsp+JitEU3Ehiuqq7rHTkO4zjj/tx4fE4QsXDCCSdQ + lQKz3noTr8EA0nPf/vbh8bixkQoWYhJESsrbiNWRhoEuINPs2tpZOiHcrFmzCPO46667yOGCCHO9sZDm + /fnll3+0evXapqYDdAIzqCFwSIpwEHFpaelRCxfcceWVhLrbF3Lr2rXbhMPLNIvFhjlT2zBBr5G6qcD2 + hKKiGdOm0UgA+1KkrgcddGRHB9qcQ8NhQJeLPSQWO9h1YYG76+jApa6Lk5IweXUQDf9AoJHtmNTkOUQw + 3yKKPb+ionzw0vx1eGHWcdOCwzFjBHSDAZSBm1xcyPcLRkf1gxEcFt0/yzoN93bblaFSCxMMZnDTmPIW + RNb1O0vQfrW3mEbzbx5WMkaYdbypG23zvvCShjIcYYEYT9Il3bFnhULTMdI4DuYZJtzrYYMbjHZXBwim + YqUdpS2za0cf2jr9pq4Frw/f5rNx+6Q3P0llOzvonfRZX6av1wj3o3T6h+n0nen0ren0TRoF+f7TdPop + LEzp9EsaKe/XvBCOeNy/lSPwgGfTe/1c6UKBw4WXfDxz7S+nHvrU6F3vHrr02vbZ32icfHzd6INJDVox + ZNvyzsXlHbPKWqemGkYnq8gC2hotqkukaouL6yLRYseLgdbal5VriOGWxsOxBEGB65g2Qeo/m57GBAKK + tyEBM+vWS1ToTyql6mn1kZiblqn6Jus4ccud5gT6FHEBCgUU+AGlGOBALHALHAL8QD6BPdSS8DN8TsIw + GFgxuBFdnrMQ9sCvLBgP2X6I62LhZACF3glfpOMaRGQ2Z+DQVuL4aTP1sMsROAVkaEFQe11qxGOE/IpC + KQy6PHP5ZUekUj4vRL/qugYV4Ea9jsPFIm2lbXODEHsSe5566qkoM0EpEZGud8YZmvG3X/3q2WuuuWXl + yiuwZy5efNVee9164olvPPron//0J0Iq33//fRsI33n00ZXFxbtqiy6iU4yZM0IhgkDGYMzUj4OHsklH + x9KlS/dZvnyXnp6tNb6y/W4EL8bjhxUXQ0DxBcICl2idDheLibUfCExQ0t1T9eL7IoLS8ZjbwT/6SShI + tydEwQ5+X7fXZn23lvcIk1o8EueNIx3l8CHdqQTztMImnX7euwFn3Ov0zjJM19ZWU1ovfy97jXzPX2Pu + xyBPao7DrJ9ZeD4rKsCTNGqt740vsB/dAyVngQBHbYJi6sk0FAicKf/qL5IcmIGFIUvJTAf94YnT2fql + 7zBlaifVFTdMrR93QNeC60fu+ObYPf81dq/0hJXpTY9ML7hIZUcjQQyBEIQGYvPEL3hpOn2JDhbkX/4E + DmGK2EiFDoKUeBBZj14GN+Gqd9MHvZTe8+foZf655IpfzT79ySmH3jVm16t6tjyzY+aRjZP2rendrryd + XNjTElXj4mXDoiUdseKm8pq2usbORFG5Yn54rtTL11+1P6Z0Ma41m14P+j5lNhzMvKH/w/bfW1RVP8YI + +5GIW3jjdrLMixFAoDjkjBVUkpJgw8SYKeHYTRr/hkQiE8pLJxSngD3QCCvlRDgQSo1odH5l5cKqqoWV + lYv0shhdYiy2mTbfEf8Hh5tMMSDNmUALsHOo6yJoNIhofEviRAQOCeMsCpPPTsmllW9StwcqCe8cl0pN + SyTmRCNzgzCANWvWQLy+ulAKAzAvf+97R5WV7aV1pEtw13lhpqLAAxF+IASGRy6Qi52NinLECFGjLF++ + /Mwzz4Szvvvuu2DhhvBC0wxSf37+r3+ZPwlYRPBJ8J8NhBRFOm/y5P01g9wjrJIDEIABmClhi+MwKWEZ + k0zOam/fJBrF2jwvHF6kGSQJ0kgWqkinhk8SvLHXRH2BSIR4ZExHmMHQN4TQy/OqLiuds9nU9pYmmYXi + hQBCyGSWgyKG6/TznsClmuoavuoCYaooj7YR9fVyqfh3skkVmjvnkBVCzyRSvp+L6ovfGOiyN8g5lJrI + Bxm8+K4zrQ7Kx9a/4CVzlj4abjYQhLWvLgduwa2C0vn8BvR1l3LWSx52eyX9isGBvsdMThFBINBCQbAQ + +z/FL+midE78UQyaBR+HDmrMPrLOENbXs4NakWalpGlM46Q9KO++2fFvL7r08+VBXmzkLUuuTu/ww/RB + b/nxfwDbKV+kj/lH+ti/pdd+mj76w/RxnyhRzGXp9He0guZGjX94B0/9T/qoD9MHvZ3e8/Evd/7RZ9vd + 9udl17656KJHNjv25nF7XTB8q+M75uzfNHmH2lGLK7o3K2keV1TdEyttiSbrwrEKN5KiWW1t7UOGdMVV + KT1l9jSXoLx9pAlat1SG6wGI679Lfy8Lv4nSdD2yJxRske/81L9BZnPeVeMIFFecYYGSl0soYKPOSAL2 + MGgq0x/RchUVC2qrt2xqOnjmzEsOPfSn117z7D0/fP4nP3n7mWfefe45e3nxJz957NZb77vyyqvWrDlq + 9uztGxvnxeMMuIKLgCJQqhBRGzREamH8TNpe6qZUYIsPhDxqGsbgCyUdXVw8IR7nOCaUAlrzVYdSGIx5 + /c47j6mo2CcS3SWW3Coanw8F1DiBlwI4HOO6XBpKltnx+NxAOIMg5eyzzwYL4YXYSNc70H4wJlx7m8cv + uohoB6oD7hdL7BmJbKkGC2cS7kyCETWnR+8KNYTK02Yeykxt/JzvOGhTwb8ZWg4DzBOwQbK09iAugr4B + BEqAoLZpox92KqnnN3ZkZXmZvJGYTeorazSdyvrQyQdU0gOWg8kCw2ZQFpXNeeBxvMAWvB2Dz6sJNSEt + S352G7k2sn0iBlkP3RrDbw6i5ENgzg2kJXWMEWWqerD25/mX1j/AaJTNOhL+FFw+MtSogwyazxU8kbqV + 66J4WteZPa1kUMILOCkUAvCAvcwSCmEaRbo1M6SchbyDQ6KRFh5WQSuaE2prbWptZWLf36yFG6uCSVTU + SypVP7Rh4goKGM09++2df/Q/AhuO+0f65H+mT/5UQd0R76dP/Ev6tH+oMAnQjqQwxL8T9kf8+xGvptdQ + LOkBcC596G/SJ/wzfdp/06d9kT7u7yqaYu9n0zv+6H/Lb/j7okt/Pe/c52adev9mx900ddXFE/Zc27Nk + /+ap29SOnFsxZAp52lL1lIBojBVXRRIlBDggW8TsIskY4Ov5Yaw8SzguXtX1h6mvf0/uuD2T6mtitR4N + 406hhUW6I32OgFbeVfkuQ5WoUYQImtSUsC5slbWaAmL/ZKDEjCYDJSTs0HnzrjnxxKd/9KOP/vjH//z7 + 34Mflz//978/+v3vn7rjjuuOOmr15Mki4oAvMvhCK+GI+NhEdmErD43v0LgqGX8BS8LYGcdp0qxIZP7w + 4UK8voZQCnO9r9x8M/GFK2PxHaPRpZ6ScU7XVQNxno2FFLouqplpnjcvmZw7frw0b9tttz3rrLOwkeIv + RDvzlbozTTs/fOutsxsaELzAC/d0XQIeFkejyxvqZlSWY2Hm+XZGo7hyecoQ9NE6ixuIzoUw3PCdqTcm + X6bYNgTSQwQCxYgddUJJinKGYU5ZQ6kSOFiyi/XowAPugpdi/JjRjfUYLDamUa7geTlXV1sbQWbmV2aW + mCvJQyY+tr7CpGgbY65swEGIUMybGeSeUINWn1ck8K9yxlCCKlx4EmD27utQHITRAHmBChXAG4JHMi+9 + GevVOKtpWQ5a9/9o1DwmRiq9rIG44BWp7BmBb1KG9YIcgDm6MofqaRn4B+wJCs4OheaEQnP5V39n/ea6 + EPQwCi2FwzkZaET3hK2XSAAi3vq/hPr62rbOjlRtW/WIeUOXnj7tqGeXf+czot1JEypyGIgdKdBu018Q + hf5AryRNDA6/k79IH/rr9D6Ppff8UXr5NarELtXkCR/c/aH0Ho+pfKHb3PL5okv+OvOUNzc94pFJB9w2 + Zo9LR+542vBt1nQv2qtl+lZ1Y2aVd4xL1Q1JlDfFSgj4I9sLNW+JdiCELZB6Dvhu/J/bANVAb28PmpyN + 23KeupJfJ4pMP5OE/YKCJjjB2EJhYFJdyECgTwG1SXPPSZOuXbv27Wef/eyf/xw8+PW15acfffTaz39+ + xYEH7t3ZCSISFwi3w8QK3NLXC8aiiWbVkELAEkcjBeKnx+ILSkq+zlAKc1Evfec7R5eVib9wCREdWpmJ + lwL+RIIxQJr7BtLPKyqaG1SxJ/sa5Skw4aIjJXULlkxkrhviMhzMs7hj221JBEONwD09b3vHWRqPbdtY + P62sBBbe4bodkSgMGx0TUxDuPJinhD960OnRTJ31Ygilb0hSN4FAIwrFAEWyD2qxfOVYlPeGIOVA6Q4q + 2L/oNISFRdSDx0uzpSAKo7XGsMzbxErO0tnRSgPygC33TtRUVQ0dMgSJXVlZKSHJijsFceI5AJMDf/60 + NQ8UC17I4I2Q0mByg8qAgCG6OFmUT9NpJDnBc27vYIYphpqqygrZsZ97nkzE7TSnOkNWaw7n5lZyFER2 + zMmwu4g5FPIH8s0PhRaFQmiYF/MFG0YILFT20k1x1WsLU5me5avHFyYlcnlDQ0O7/pTmZRXIuSjShta3 + d7VNmTdqp7Vzznps+7v/ue8LOtvLvxXnA+3w7T2QTj+XTr+gHX4/0zESrEQmg18QUkikIEXkSYq98GJK + 5qrCuXxZcMF/Zp32x00Of3HcXvcO3+aqIQtOb595eMumezRO3Kpu1JyqnsllrcOLash5XQPzIzwDx6XK + 8KKMBoO56//HtyHAorOzDdfgxr0O5nHYPXJmqQWJIFMjQBiTow+B4TD8QGKuZ5WVHb/99j+//fa///Wv + X0Xqlo9++9u7zj13v64uXFMQRB8OXZeBuCOwwokjikYykeaVkLpCkELGbkUKySKdF0pB8YevNJTCwM/z + 1167pqhI/IVbBlgoQXvo2cTYqJqXTM4bO1Z4Idlw0LgSU0HEOgHsOPY2UD4zIBb+6sc/PjkaJSSfdpII + ZjECHx1izx1WCcQdB5DjXzJKIehlxGElC1/APwJgGOZ5BMICeQQmLmJARczG7c+DPBoo2NTYQGaQ/PFX + 2IA4+fluW8Ys2Cs85CgXg8Vv9PaKJDG37D9AQpAACtLa1MSmZBBsbW4CUSdPHDti+NC+Ckj1zwjzb0X+ + xao1waUIQEqb85GJIaKhoZYiHgXhXN2uPDXpgPMJdWf6kKGas7ANmGcH8CHTzcnwCUrT8ZiNQfJmiPFT + h+4Agbiul+qsRhg5tgqF+A4oQg3Zhi0nkThCd2xxnVGxYEh39/Tp02fPnj1lypTm5ua+pLAqNqKopLxz + zNBlB8+/4OcrX/zXyR8rtQvghwSGQECWa3UUBPpPoiPAwsc0IwQFYYTUkTj9SxUXiPmUcAjKJG3xrfT8 + 8/81+4w/bHY8NXjvHrHi0o7ZxzZM2Ktq6NKyts1LGselansSFc2a+RHtIOmt83XWhbu/9iBgJl0nYdAg + 36SvbjPyKviULOscanK4jsmHBtPGnMPmQ6BSo+jRrVzjChGpHdHo2FTx2Hgcuces8vITdtjhifvvh7ig + 78CON+CAu94b/OP997+/du3u9fUGDpWxVDu927SlFFMtrylNBQVFxcrQzHpSuqgkn9mhFMcffzyuuK+o + KkX+NT512WWHJxLCC5d63gLXFb8apsUJWGl0NMUMsDCRmB/4C+fPn7969eqrr7764YcfprARZlJSz3x1 + 1JD0NFeMG4enkHj8nVyXEYQpM+I6rJ1yb+kAdbFoYzJBEQT+lAX+x03mtosvUKLjsZGVEFOgy0cM9mXV + mR77itIdTE9ep23EbKgShVj8SL6KZYwv/IsBxqRkgucRsZc7ZcyjZn01I9tqWHgrgxwqFEqp4Yo3nTqx + p5vYogLIJFgVcMEMo8rxJmafyQe9DKIHP2czTh8R7ZXaGaYyywx4nweDfwWPM+COXDGzdvA4MxJiZkAw + oT3TvjpUJ3AA6gC8paEQ+IcQeodQiLkdqW4RNi8LqVR/QgqZfY52HUghOErqzNra2okTJmy9fPkOK1bM + nzdvRG9vVSVJebMuGbmMqp1U2lg7csvRu1y55Mo/YN5Ez0JoPGbPuzX48Z2wP4AQcyixEEhAUX5iIEUj + Spo08mXv/2p6LxKKPpDe+e70Vtf+e/55f5hx0jObHH7n+P0u7d3uuI7Ze1H5obx9SlH1MKr9Ueo2HCvm + pL7NM7vL5c/IVEWqshKbMtVUVHW2tH3VmrIBO8Y6baC0cgMl5NNZ+wYnBlunc6tXy4pPl+h4sYXS1WAD + LTrmb2Q0NiWZ2jSRWLPllj+7+24KCVF8AGXHV4qCBlr++OabF65YgWRxQThMP1a+Q13BQFFD5tTWoMzQ + TMthKrAWwthVYLgVSrFixQqpSgHArHfC63UCdQQpq2MxsJAUaMuj0YUgn3578bShYQMLyY+K+XdhLLZw + 6FDhhXwoZ/+Nb3zj7rvvJp+LUEMUNOudlbSfBn/EjW1rw01IC3fSSdFomyltKISb6BxqVgB49kIPEQpo + DKGMKSXJIhXflt3/dA0aVRSFXs67OmfWtAnjR0naKro0XrTBmNf6GS4HMZL6DeJ0A6bA5mg0WMZcoWsA + oflTyU/yQFSOzl59ZfTmhuRwINtLZ98tDKSSL6b/ixLYy9mmkN9QmVnNZuLwy5G9ZNAxQw39FvV1pf0M + LyoHDZm7w9rJIoKDoKnMLbB25u874OODIi9aMGvSRHRm+oC642GWGOM4yhyqnYK4ACGChPHA/4BAevKu + odAejkPO970cd1fXXeG4Sx0XnRcbMxkV+aiKV9ZJtOfOmrXPbrsdvO9+K7beetrUqUM6O6kgaJqKIK+0 + qrm2e1bbzJOmrHpu+fX/XflCeu1/lM6TOD8wD7S7TkdBkBeNAAk4IpmysYLy5YwvlNV05weU8XP6sf+a + fMhvphz4wqYH/mzMTt/u2fLEjrkrWzbdum40lW9H43GMlVR5cTKcKZunDvIb7Ien3NrSyC2i7J15eAim + aivJsT/wJGYwp1HvRXSAnLGDOU7Bbfw0BYP05RM4wVx1wH6zTq0xXFBEMRIdKKGBlPIRRQw2RuQq6DtW + zphx1/XXo2wEBeGCGBi/HhQ04/hTN998cFcXWcTmhsPTwuEJuvrS8EiY6hOi15esNOLORCMBfqM7peWz + IxFjfpSqFJTQ+4qqUuSjzhMXX3xYIoGOdMdYbJkXVrwQX4WoThyH5vlYSGx7c/PsIDE38hlSulBhmErx + JLkmCvCTTz7BBL0R4fA/f//7rXPmkCaGAPk9CRPUilAcmcwwsC0zTHAnTdI7ccTKQj8x+Ee3sZL+5PZl + glxnTJ86auQw3EK8k9R8v+pb5+y3z84mjYg9UhfsukAo7zN1btepY5uB2N4LkxcRG4N/g9jSJNSnnW1t + zQw3BfWE4Bz5Eqsr6Xe5KCL5yUC4AeOL2ay+pgZLnXWQ3Is26CIYY/7N34Ut4QcE20mDVQXBklJq2AqC + BsfJkMWcNfaJ7YfKZkxcwIl8JGYXoK6+rianyrc5Yz+nKPi8pA2Me2PG9Ep9KFGHYq7AHIrTfZaDBIYY + VkUEl4VC24ZC8D/KXu4Zcsj5vtJxD3ApgRLezw3v5nqE/TDPAzIhhbx92P9RvHfX1EweO3bb5ctX7b// + kasO3WvX3RbNnz929JiaGmqUqepCpF9J1Q5vmbLvxH1/suSqT/dB7flB+qTPFOaJKAYuiPOPP4/5JL36 + dypq/sC30ge8oRKH7vV0evu70/PO/2TCyreGLLy3ceLFNb1HVXbvVt6+uKRpSlHNMMye0eLKcLzIJaWc + cvitax/PdDb0OwS22kVRCj6g9TtBSUnJ9E0n93R3Df7dGfyJOCZAuA5lYRhHNq6ZVIggCwOZEEHxCEIE + QZFWLRcUd+Cy9varTjsN7xooiF2REgQyKH/VUo58UHn/nXfOXriQ4O5FhGpEYwQpwvmY3GHowGXFu8J7 + wiJOTaaNqB9R2YCa88vLZ85QyTOXLFkC2Xr88cfB8q/CtVmQfj12wQWHRqN7RyJiI5VMLhksJD2p+AtR + 1pSXzw/kM3Pnzt13332JrLj55psfffRRBKXAIeyQ+ceGG0s///jjH22zDeVzyZRGBMXeWjWKygAXJklh + cAFyM6GAxu0naX3UbEnVuyEdfaa6Vj+G0Lrqms2nTu1saxUK2NrcvHj+7CFdJBQa7EQVdUtXazuF2gf/ + avWxZQYAFDPSWND/0GwfB0TsaG9BXF3w4MBMRVmpLcORI/PO6hyHuGqyoidwH4p1xx5ZlJJWp78wfrt8 + 0BWWJf68gh8b5KghrzXnakOGjnhMqS5tMmogqo9DmXE28zu7NDU1tKgJgU9ZbKss7SfnJCx/8HnSBxxb + 2UBqLSl1qLYDaXOoUoHiEST4FSKIOxCp1y6aBe4bCpHt6CDHOcRxSAG/2qUWireP6+2oSKHK/KDkoyJ7 + Liqa2tGxcPPNoYNHrV597Jo1hx100M4rVmy+6bT2llamTTh/ExXddeP2Hbv3E1vfnF7zJxXejvLzYm3w + BAJRwZAgBiBEJkNQBCmwSY2N+GXmKf+afsz7kw9+aeSOt7fPPLu6d99Uw6J46cRIYogXrXPDpY5K7KnD + 2zfSZ8DbuN7n4ci4rhcvmgvQrvdB1mFHxzKfYEaoqirfKKnR+nxh9EMwARJ4BLEF8JbT1ejjQgRVipZk + 8oSdd374gQdIuEzE9x/+8Afys8ClvmoRRz/WPGItvrtq1Y7R2NJoDKoHhIiZtC0IrgAFGTWVXVcnXZNS + hZgf5wdVKVauXElFQGgWoNI/wQLpzWedLKL5Gz90xhmro1HRzvhYaHgh1JASThoLEcpuGYst6eyUNGx8 + ttpqK7yG559//q233orjkOkIc5EPP/yQuQiIKA+i4IyElVwdG2BWZUueGrtwyXz59P33799uOwpHnKyL + V1A4kHk0cYQqE5UWIHDruId0CdF/WpwvlIzHSlJFoicZ0Beoxt9IzAQthQlh0jYfPalTeESi3n6qV2MW + g4ShybSG3dyxgyMZTSMHNIZNu+fbwwQ8qbWlKUeJnQ1Jate8kcUHtv4nozm+OnFn5DSeI0NMKWpoTpFv + E+IndVUZsMlApgXeuSvlkvPRnWYo14umOPYGxlDKFy18MdjmQ6S5h3ZTMXT7CvPsu6a2cZSJmIErMCZL + e2wcFSAvoBftZyhnBwYokjWqzPUiDUX8oi35y3ABQgRDod21IXRlKHRQKLTKcVY7zhrHOcJxjtT/Uh0a + jCQd/MJAMrOJ686qqVk2duzuW2552AH7n3T0kaccdwzLISv3W7po0YjhvehUvXCkqHpMx6yzF53799Vv + KcEnfkEWrKCSGpsEabgGMYEe97EKB9zi8n9PPezt3u3ua599cePEQ6uGbVPSPC1e3hNJ1LthjHmYURhx + Nxr4rQO6rO+maG1UMZCvQKfSV4twbQ5p7aCYvNoAfVRTYx02gZyXua8wTzXxTKXWYRYW+AVNmKDoYmBR + eATJBYpFkT6364QJN11+OQpGBl9sidARMYduOB3ZQFBh94evvHK3oiLMpEpQmnEZOsT4S6pSFe+oPYVk + qMGCivmRWIXZOuE1iaQJVMDkSFWKviL2clAE7giigCsbQoLBwlVanwkWLtO8cEbgL0Q+g98CLMSjOUen + CV1WUbEoqOVLm3fYYYfDDz/8vPPO+853vkO4IXUWibLARs1Dwd8p8EbEhXwU1H36KStx4gKZcF+uVOoo + 8eW9Bx+8afRoUJAa90chGY1GsSNJOUOstcMDuyi2AUYfGwWFieDvU66y/omJNYLafZhwtAj/qSptKlUm + IIFFEWl0X29FXV31lMnj+i8rrQsw+PwSfKXwQP9YxdGwI+Vkys9vgKFl5ifazCtpO124BNtOEyCQol9i + pMrxBRqIsnmboWUCKzYe6MmC7+SzoMgHEvsgBRHLrCwrKW1raiEQImczczqeJ0xO7NXSbPt05rpsSBNd + A5dvrMcCb9l4lmt6tY5f+JnnwyGPlnGwTcutce8JEcSGvwWimFBoBydEwZO9HIfiXwc6oUNCzmGh0BGh + 0FGOc6zjHOc4x4dCx2s4PCCktgQ46edA6dxEYquurj1mzTpk112PPnTVaccfe+baE8457eRjjzhsx+23 + nTRxYn1dHRAQr+gYvvS8s575HP53ri4Kf+qX6RMJlv8ofcyf02t+owrK7/Lgx0uuen2TI+4attWpDRN2 + Lu/YvKh6KNUnULtgWs1HPrl164tNX+t+6jUfpOsuaNc6bp51OdyZloam7rZOrBe6I4aUkcQ2+CL+6Whp + ZWpc8DZgOqiqqBj8zZW5vKCgCb+rw+OqzaEkSJsGEdxtt5/99KegILXoGHAxhzK2imRjQ8BgwyHQHOGZ + m27au7SU7NJk/yI+HZfhSMfrdFyJbEMvAyIifeQVktK4yvbY1iY0a7fddqMKEjQX1WtfVSlYj2KTDcAS + PoCKuQPrfRUPnHSSwUJfR6qxUOlItZR0Mtm6tZSUfNlc2vKGhgUTJ0qbwW/g8JBDDjnllFOol0tFiB/+ + 8IfAOTXiX3rppTfeeAPDNawdrSkfvlOIEdbLeiBTPnx75PTTr2psPCcSoZAh5ZMOD4cP0t5BUJm5Nnk3 + iBfkpsGq6WqMi3YghPQ9ldVhfcvbaiD0s0VzKLgF0nyV/KWPDzA5buwI+FP/b7/1rsqbW2DS3df7rCLP + 9eXwBYw04g57TJd9NbwZ06WPRsxZFagH+CFgIAhhnzH7e/bLL9wvaLPZEggkAzJRmPC4fHwK1gh2Cnpl + rj2DkXoYJpVdRVm5oXHBxj5yyTPF7SeJzvNRMB+DZU+Fgh7ZljN1v/u5TOsg/uULaPbn8eFOOmpSSzIN + ikjM0KKYOeIRdEIQQUShe2ALdUIHYAgNhVaHnMOd0NEa/05wnJOc0FrHOSUUOlV9d9aEQmyJghRSOJc8 + Sg0NO02adOB22x1x4IFHr1595snHX3j2qReff+Y5Z6496MB9Z8+a1dnRAbWNFJV2zdtvr++9feofVWq0 + U9Ppw/+ogt+XXvP3Wae/NemQe0bueMGQ+QfVj1tY1joyUd5ArhmV7apfNKisKCdH2LoCzNcKgOt1Mq5I + ZZMvlHeQl6wsVWJPxfo6g34dJcKz0Ic5XWtjUz91sOzOqmRbfftgBAWZZ0nKGMa7ctdtDEfaw2HRxSwb + MuSqc8555JFHnnvuOUZSaATmUHjGhlOi9caPvnZ85sYb906lttIWxeleeKLrDg857UGUN0CIiU95Comv + 16EUZHGbO2mS4ApSFMrEU2+9n9K4UCvEsYAKcAKuyISAlRvCie8/9thDAl5IfCHaGTwWfnyhdl0Yaogm + iISl28TjWzc0LApy0ACHpGRDVnrEEUfAay+66KJvf/vbN910E+VzwcUf//jH1A584IEHHnzwQVU4SX8w + qFIE+OdsNmOG1NGliCDlAymfhDcFiZ1KrqYTx+BtRSbDHELoILNZAULhfxoMnMaG+vY2DAeDdfKt1zvl + 7wRNYdToJwF3/sHZxdaU9YVGsiNzTVBWAv66uzp6hzMPxJgJjPlGX7ChPFuVnnNGH3KyrH9Z6cSykVUQ + S/1j0EiOkMMF1a3W1YW0JdmH9hySmoc6wYECZiYbGFCUlsu5cqYLzKRRuOS4/QriX3D5GapnW0Ht02V2 + 988rEOsfQL4oHW+ghM8BBn5ngOIVJpiHkB6IoAqT1x5BnNkiisEWuj/uwFDoUG0IPSoUOkZD4MngnxM6 + 3XHOcJyzXOcs9SV0AnxR77XMdfHEb9fbu9e8eYfuvvtRq1YddeihZ5x43OUXnn3FN7/xrUvPW3vS0dts + s3zUqFGVlZV4WSt7Jo7c+aR5Fzy6/Z2/3+GH7y+86Inx+13VMfvA6uFzUvXDS2taK6rqIhGfTA/Y27lM + fMaDr9414AE3cAOZ0GzgQczuqjALqtc88y8QWF1WOZgSzQO0ZPDTBxqhrE9KylDgY1BQBDJKI4pTMBob + VlwyoigJCu43f/6dt91GMVtQEAAABsQc2o8vaqPD2zodECzcr7QU+YzGQg9ehb8QLMQoCgqyEAnepuPr + JZRiYW2tAOF222132WWXcZn9hFJw1cwDnn766Z/85CegJqBCPANrsDquv1boyy8fOe+81fE4Qk0Ta7+Z + zjsDFI3Vaa/xegLqoqDhurAAs+X2lZXLe3rmT5kya8YMqiMRfb/TTjvh7ySl+IknnkjmbvKpwhSvuuoq + yC4WVCgjsfm3s5x33vXz5p2fTEop+aOAwHD4ENfdR0sMyL6BxYlTi58VMl0W0EFGIrqR7QikH5L9BDXE + xnpz7OP038lzIC1nfJfjMCiDgoNMQBEgkBqSGZgqKyvYEeSj5qbBCrhddXWF2FENDuUDTIAuPi2zICfL + Nmh2FP5mGmCzuj5wK8tWaY4vEJN/D20MK3RXzS6ZJojLVm+cWZn7lPNoa3ZLMiCXfdIM9uYcUO5Cfl9S + LDaIkeDVQB2KPZMg1+Wqx2LhDGELFUUMEHi4tnweGwLqFATC/4DAs5zQOY5znl6+oRdAEbK4H/EVnrtV + RcX2w4fvPX/+ochkDjnk6EMPXXv0UZdfcNa1V1xw/bcvvviCM1buu+emm2xCcD1TBDK5lLb21o6a0TBh + Yd3omWWtvfHyahXerr3dTKLwFeRcgjJ+Ei+0IVbCr+IFyzsm9598coOJX1IvFwRdzRnXBzULvq1f+SUK + IMss3l5EI2oEMtBBUJBIk8ZweGgiMb6oaNUOOzB6MuJjEcXIhm8JeQXm0A0hQOuEauu38VPXX793UZFg + 4WYaC3F0CRZi5WOBFKL8RQFLYjMVShFEryNC6T+U4pOXXvrdo49CjsGVS/TnxhtvhGAxRcBYCpVc72CG + xy+8MAsLqZ2mAypAQVJAsYwJ4FAspQhKBQ6JPNi+rm7brq4tx46dN336FgsWkJttl1122W+//VYxtz3q + qJNOOumMU08977TTLjnyyEtXrLho/PjTo1EMoaemik4uLUG8ShFBTElMjZlZI7pDIGNQUDQykiw0BwUH + PxXLGZcFXfrv9PAe3sZBTpMxWBGVYTsOzMH7GXn6ab+M/sGYnusUsd9hC2DymZYqYCsCt2xzpQYrffgc + PpSPi8G+Gb4okKnX+x/ru0rkxiw7OI6ycBp+ZqG1v7vZMbslPkoZSBM0DBDRanNwl4MNfHJp7k/OHbb/ + NCR4MGMfYxQGiXZHmUYwVIhHcImjPIJYL/ZQtlDcgUoUepgTQggDC8QLeJI2gYJ2ZzvOuU4I5LvAcS5y + nYsd52LXuYQ/XWiic5jr7uq42xQXb4eDcMaMg3fYAdMojPCEI9Z88xtn3HTNpbd998obrrv05BOPWrhw + QXd3N/kN1AWSI1BKt/f9ofeCKdItmT8NJi/8YO7Gxt2G7mE3DGxDWTKYYATuAayusrQ8GXiacRSIm2Mj + t5Ab7Q0wXAz2jPngJxBoo6CEDOI3IPYE1+DIoqLdli1bu3btFVdcARDiT0KFgUtMAtf+H3EK9gOTD11y + CXXywEL8hdOp8GDxQskN1qbj66VUIVUpRJM5YCjFx88///SkSU+eeio065hjjjnwwANRrEC8MEK+/PLL + 0OUNEdA+fM45q6JR4YUqH6nGJAKkgEDMQUS18y9OO9ghmlIyzAGHSlOKsTQc3pG6gNHosR3tZ0+ZeEBn + 5z7Dhq0cN27VpElrNtnkuHHjTuruPrmm5sTiYvKIHh2JkDgGCrgmVbSmrJTKvQwlBB1jDsXWhHsSDkqG + Du4PKIhrUFDQJAuVbo4riE4/2P6ni/aJvUWFzJeXmkQtfR1BR9oVSGhZcHtl/CzpU1/Txylyhnt/q8G/ + xhYaZeGKOR2OvuqqCgmwE8ixoCWDZDYa2dhjTJg5uGKIYw5Qyb3F1UTWFfEw8mdxcVHgPfGv14ZeA6UW + Gc3QXPu+CZBb+8rRsiA5/z7n30z7VpjvNBYOIoKGnHulIMRxcAp2IxzTIUZzQqEFOkYQ0wVTN2wY2EKB + wNVKC6oMoceHlC/QgkDnfGr8RkMAAP/0SURBVMe5EPBznG86zmWu8y3XZbnCcy/33G+47gnh8ErX2z4W + 37a5ZZfJk1cuW3b4fvsdverQY1avPu+0k7537aV33XbNXbdff/ml5+y+285jx44loHBwlkOHHOXEUAqo + 4AsfDLoM/oXaKFvyVjY3NZILfj2ORncgkAmpijBCLg9QrCgh2cZghwUc8IjAB3zjAOYNLa8k+GcAj/YK + +ZPFxIFJ4LxoZEgl1IBGtKxs7rRpoMLuu+8OFt52222M8tBBYTz/76OgAOTdxx0HFiIwQXVJwkyolYzv + khgT1xeZuCW+XoVS9PSIgVRCKQjR6yuU4tXddvtRJHLX/PnHHXAAkQwLFy7ccccdMUVCnVGp4GLEdLze + ZtKfn3EG/kKwkOq4YCHljVCsgOIwQgyVtJ9/WQj+ZeVkcAuHos4nQMI5COLuJcUHVlbsrqMyKJNLEQki + AhG/UEeef/kO7LGeX8mpvZeOkRAI5EQUxAB0wVrUMdwcyUgg+dKMa9AYRc3oPJhXCF7S2FBXEmDVgF3f + hg1z/BwAyIGW7FE7Q+bym8c8vS81tYVVBexz2awogwTB2C3YpuBHJ4VSwp+qynJdyi6DlPbl2BCYs41w + rOAaM1PsALr8c5kjyMYMtRLJYO6VCE9yWpizl4FDa31mlhBAoGB5BqiyW6jbk7nXPvAbVCvYW8zdRh41 + csRQxsTMMw0gl3GJ2Ri9nXpJOAXppUhDiRFURDAUQhd6kBPSEIiRU2lBFQsMhZQjMBTCBArnAwIvcZ1L + HedyxwH8rvLcqz332rB3XTh8bST8rXCYwNk14cgekeiKmtodRo3ae968Vdo6Cik886TjAMJ7f3D9j394 + 4803fevIIw6eMWOz1rxM3329Ajx6SakDNhQn16c+O/dRdaf1VaIN+G4CMZUVFX1lUu1vd13VSSWNCp4U + zgKSxcMRB5nzm9ewob7OLs/Sf2sH6d3IOkg+/tmwx6AmeUDszCAMdkojQ0IWz0P2MKq6WoLN+eB2QqOP + 4IJ4iY1VJ3b9DJ7ruheVZq/YaitKqPsxFfC/oFSspIoGFEm2CynE2Dg/lZq96aZcb04oRf5J//rYY/ck + EndEIt9ta9t/2jS5SwsWLEC9SeF7BCmYSaVw0vqZSX964olg4R4BFuILIdAe2MO6i3QFlCKqD9UcoAhH + 5Iow/G4CXmp7KYiIuBSOCPxvG4nsEI3AFO1lB8/b2XUZR8C/5drLwvHhnYhU4ZriFIQxN0YiZBPFBmQE + MjKdWj+rB28L/XidFC4DvsOD38AM37IL81CybA+mMX0Rmhwws//kXIwFcFn2BYD0WXwIyYzyAcAJlthM + yyBf8JOBnyyroxxcAk6CRvpfMytyOag5l4Pvs6mxXu5ADlbZoCjXZTXSwFsub7OA1j+LdeTMxpJUzxzW + 3DdmSMwYMuElemwlKBVgbPHcsdocqoignrEh8txFi2Iw5hMdaEShqECxc+ILxBCqIFCzQOyfCgJd5wrH + +bbrXut514e9G6Ph78Yi34vHbk7Eb0zELovH1sZiB/CylJSuGNK927RpIhwFCE8++shrLvvGj+64/v57 + vnvv3Tecd85JWy1f0tPTQ2WR/L7RT4cEMNbPLspZmLT1A4RWvrzBvxAbYUsahs1fa6r9IYEZ2OCDFKR7 + sH1f4X/WO4UEoXTUiN5J4zFUrcvHoKDx/AnhA/YY1OhbLEzzsbnnLH4eMs8jzxBCkslISIJRHofTxRdf + zBBPSfcNoTvrimQbvv3Hf/zj6ePG7aSxYSYprTW1Ik8Kwz1AqEghAKNLFeaEUpDJTEIp8sHsf//5z2Nz + 5twGEEajVyeTq8hMuNlmAocQaCYNmEk3sHDST086SbBwWyIIPQ+LJS0H8wAqgJDGy9Ku/wQRoXH8Cp8D + MinGPct1Z7vuslTRbnW1y2KxLVx3S/7Uy1JXgR9jCsdEm4ohVOgmB+nQ9wQiiCWKkgftVZWoBo1FVFBw + /YBwXfrvwNsWwqcCJrVs4MkclrEY7yMf+zh8V6Zb7c4JRuqMGy/7jD5YyGYcTcLmAgKn1qjh3udzPpZY + VkSzxv9iMC8AoYzzLzhsBsPMRYmW1TTM7Ks3yKCm2d6GTEx2VOoNtDAZW2gO5ml+GdVu2iyGJ8e02KE5 + Y9adMRgvd4aQRJLqiZ3W8Nec6ZG5HDgsoxMGmymuO1PP1YhwWE7WbMfZXXsEEcUcphUxxEVgCAUCz3B9 + CMQQepGGwMscrKDOla4jFPA7Ye+70cgtsej3k7E7ihJ3FSd/WJq6qzR1U0nRRamio+Ox3RPJFU1NO40b + t+/ixYftszdAeMxhh51/xto7brrygXu++8CPb/7ONRcddODeE8aPr6qqWic7J0hGwth1womBXwOVvi6h + FNSDNkUO5pj2NrruVmEnqLwvhW7CRh4haAN1V5YsnNfUgLRjEB8MtTEv6umaHAYCJU2a5IiRlJvl2t5V + hSLGdTF18y/fGfhYqoIS8ySRoQo5uVdmVFZKvDkfwuwuvPBCVPhEpBE/t96mvw3HtnU9wq+ffPKQiood + wuHFONUogauJFPgHkACE/EshPcSxKpQikZhTKJQi/4y/uvrqm2Kx66LRb0djl0Wjx9XULJkyRW4UkQyI + UxBnoj4lYh1t0frk3Pnyy/uOPvrgSGR37f8jmn6u600JqcJpkELaDGJh3WXBzCtXwRUJR4TYgW2A4uxE + YnF5KVohbJ6gI9c+Nx6fEQmDqTpa36Ug8AjHZVoAoHJAbFD0gTI9TyJxC7lAxHhuZKIbuY9blGUQHXxQ + mxgnVt7WWW0PUEFWqn/FnWbix2V3GZctFMwa6GWb2poqgvH1NpmNDSiaZtgNszApg3mGOBoDrIU30gaD + tRlYyrFVBrtkGhNcQgbU/SvKVaj6SB4AqjoFJIYM43jvrJtp4Z9/5zJtCxqZge0AyNU2qu5jTFLq+M+i + va15kynjqRls322+Sx0JnIJTdQWJeaqIoCofQYwg0lAhgmuUOzB0ouOsDeQwsECBwG+6Lo7AK1xlBb3G + c6+DAobD34tGbo1F7kjG7kol7i1N3V9R8mBN+UP1VQ81VP24tvw7FaVnFScPjMW2Ly9fMWTI7pttBilc + s3LlkQcdfOpxR9/w7Yvuu/P6n9570+23XHXyCUfMnjWjqam/uLX8ngoEkjB242ZjgUthVySfg9U/B/WO + DHIjCB/ZXAcUtfnPLqTSL7S1NlNBU9rDxUa96EZRyQ4276ju9U4iEqtMlVWkSpKkBNdOHeF/DGpC9VQI + HXERntdEOmBt/5SF76TSxhqmDGI6RSdySjxnACEkaVF5+dxgiN95552hOxQtwvQHFqId/b/iLHzgrLOo + pQC7QlqyeSCcgQC1E2Koy8lKfD11cRfU1wueEUpB4AFaWbSg+Zf5nw8/+uGYMddEo5dHYxdEo0SjH19S + sl0gPcVrSADD9ddfT7YXkp+tXxHBL//73x+uXi1YuG00tkU4OstxgTdBcXCLCRLsjcfKvyz8CSjy+IQm + gpfQR6ypkEVcLCyjXXdCLDpSl28EMod6FJIMt1JZMGCBAoFSQWLjEkG6KKNqXxYeCUsf8P00o6pglPag + 2wQud4pqDxAFAdKGKw4Vjwv7kcPn2gwNxthMCCfQtE0nTRjPrVUtyaFiFpT6F2cjqwFj04zsXwPAMtBk + fTHIEazLYXUZyJSbZv2bOYqFmjkc1AdFBiCsUkFMvY9eNlJy03QqVPv49rxB7qR/NP+++vsr3kwUSl2t + ryVhBi+aC1CRnixOQYwWVEoiHShmfFLA7OOEIIKriQ7URBAIPN0JGUOoaGGUI9B1v+0617quooCR8M3R + yG3x6J3J+A9TyR+XpR6sLH24tuLJ5prn2hpe7Gp6ubvlua6m+5pqr6wqO7YovkssupSMHK2tK0aN2m3z + zfdesuSgnXc684Sjv3ftJfd8/7o7brnqvLNOXLHd8iFDhuAS20AEIkttXV1uPa8B3wKzAWfPSdEwmH15 + ZEzdBhO8T1J4lkFeIy/O8J7uzTebSvZRed4o6cj8MMjdB9PyAbYxhlDyBqaisfryytriEpovybLhf4rn + kRVXC0GheiRLw+zJwtA/uqhIvrOyg+Ljjgo8F2IxUteJVTF2CC9LSuYHPImiRWR8JqEXYfXiBvs/gYVf + fPbZ5QsXgihKOKOTE47R3sGhXnRIOErqGUihlCqckx1Kceedd8KAEYLmk8JXzjzzykjkokgEFDwtEqFi + w/Gx2M49PYT0gaOU9CQSAywESslhRvKB9bhRYOEPDjwQkQtuTlq+AKjWbE8kP4wXoCD8nqcsRJ/pDvIv + AUXmNGL7ZUt7ASmFTTaEVIEOtq8kEJDa4rrPGAiUqPn1cArycir5frYNVdeYLaV8OX6EfEyS8TS/oxfF + EkgMCk4qKYQ0fZMp2PfMXoApAV79h1vYzkIzPtsDtT3KW4joD/QCdWZwhz5WV1eRLpxZsIV5hhfavC0Y + /jNgmW9szBw5GD4MhskX/+zZiFLgLPZV5KCghdb+MfPh0L4WA2PZd8Zfrd1CZuqQuUYeN7PxYHLgX03m + 5zxLAI84FiaLdoTK4Cp9qHYKSuLQrXSk/B46RhBp6BpXhUZABBGFEhR/Lo5AwiFcVxyBygrqutd57g1h + 76ZI+JZo5PZ49AfJ+D3FyfvLin9WVfpoXeUzzbUvdzS+OaztF6O6fju+5w+Thv9m4rAXh7ff1Vp/XkXJ + ftHIlkQoYo9lxpxKbca0eNiwLefMOu6Ig6/65tnf+86l37r07IMP3GvSxPGUrd+Q4Zu7gVazpmbdTKx9 + nZGke3DDAZXY7M7kY/68GUOGMNhvTPsOz5o5EwxyMG3YkPtWeF8uRQyhLMICi8Phiki0wg2Troe8eJ14 + emIx8I/0GFg7yaWCMGRuQ8NBCxZccdJJLz/xxBUnnwwTohoDMDAMrqBzVYt5jeReZOxEfMEQvHNR0eJx + 44QqEaNG+hIK45FoDbb0NWChpJDGwIg9ltOhXOXDF/6UcMbBYMyfX399TXU1zkIys+A/Iz5vZMgZ5oV7 + IlE1CbBKFVKVYpb2+W2xxRYwYKlKke8p/PiXv7yhpeV80rJEo6clEyfE4+QnY9m7sXGe9q1SUJfi8kQl + MmnoJ21b/5be/33++R2EaEQiu0QiqtqU5+EFlLRn8D+AEAgUXy9kTly/vKBlAS4yDQLqzML2fGelwKfU + qMJsjrQjHwL7cgrS1zFq1dZiU899l4DAno7Ohtq6fOUY9A03SVl5af/kzx55SxBXS6bdvE9tTXV3V6cd + 9suOgdOrzzdcGmxarWVvmfHaQIJBOwMb1k/BwXUBBLKpmaYJLzLwGeySS7ZsKLIPa114hkUF8FOY0gUg + 5+8aHMHApyG1xnppANWgkt9m03QDeObUedjp30O9QeZmBvdWrU3EYgSNGL5ugbFsnyGXGvxV83gMZQw+ + 4TCyNcyhKkyQIkpOaBcnRIAEMYKrXUUECZAXCBRFqHIEEg6hhTDXQAE9rKDe9yLh26KROxLRu4vi95Uk + f1pe/FB12RP1Vc+11L3S1fhub/tvx3Z/MKX3H5uP+fecif9ZMOWz+ZM/mD76uVFdNzbVHpNK7uC680Oh + GTqEl8GQIimtVZVTJozZaftlh63ad81h+++5xw6bTJ1kbIDrP6xvPCjincIymZOYkL6NbivHjYcpFUv+ + OslEfZ93H9fJe026Pt4Fe5q2/vdkXfc0RNC4A3kjpXBgrRdt9CIN1IuIRnuLkr3RKPgH2i2orT1s0aIf + fOtbbz///H+/+MKMv7d/85uzioogQ9hCgckxqCh1JBluJPIYMTPCtUZY2x7J5NKxYwULly5devLJJ8OW + SL39wQcfrLc8cjDePoFAOBlJ3aBWpDSTzJm/+tWv+BNWOvh8pw+eeSZV17kWQtFn6swpvWB/LNqJPkgn + XWM24IdSBBVxiUknVxlIhqsvv7UP778/+cnOTiYvrq0+KZU6NBJB4cK/+1dWLp48mRuFdoYoTNLQkIZt + vav+/vezz27ZY48DYjHEnzyLzT2PsGKT8wU8A/9MjUDs4Sz0BNaAcAYdbbBUyKe3YUvRD5s82oNxB+KY + 2Gz65CFD2nMqRxMCP3b0iLkzNi8r4WwFPoyMvKuDVRn0M0wMYgTJMbfaw7ppGaZaMvlmWzUNEOSaRmXc + NzhnAUYGCu2VAU4YyDGI6HM7g3zBMbNOnY9DYmW00dqCSfvgWUCY0yQhYwbDsqHU/JSFhoVmA7YROGsA + lD217EhSsGY+Gv/UKfTAat8WZvBKpsAsnAFnjqvMoct0hiNie3wiGNhCz9QsEEWoyEG1FtTREOh+N+zd + AgTGoncmYj8sStxXUvRARfEjNeVPNVa90Fb/+pDmX4zo+MP4oR9tMvJfM8d/sWBKesvp6W1mprefk14x + 579bTvvj9NEPDGs7v7p832iEzErE7E9zlIiMwaGzqrK2sgKFUXt7S08PCUdbCSXsJx3uug7m/WxPF60o + K4tFB8jWlumawbFYwyQSiMr/aZ2ax6x30oSxvNcF5Z0cHJtNY019VVnFYN/rdTr9gBsLEBoiKAlCcyrI + qzShYW9SNEoU6FUnnfTGM8/869NPC2LPz268ccuKCjyCZPACCRhn8UUxIYJ8zMRGQfgBdXlqqo9sqNt6 + xAjBwsWLFx9//PE58YWDAbZ13Qb8wMcG5hHYB6Kg1kGTCc265557ULFSWZ6gDsB4MGHsZMs+c9QoMZDO + IyBdqyUxioKC4lrDWAo5lqoUc7RKiLxl5LPmpFSbys/E/eHLL3+zsvLMWGxtUfKkcJh01UTpsRzCkkpt + M2oUpXQplkTeGQLt1xsIuWPEgdy6//6ISLfBckudKUoqaiM27j24HbADqgmkFRHiGg6LeSA/SEYCZlgv + LkBZJKjUJFgY0GIi2ThZ+Ejvl4GP72QcHdLZnu8LtG2SZtwfsJNbqFNwW4MKmV8NVmFrDcScPn4YIEHz + rbO9mLE4AzA5bZMtDPboK1VYnoMuZjPZsuAFWscJ+JlvJlWbBwfM/5KLfAGC5KJMflPNFtbxM+vs7dWz + I0NKNmxZxljVdrv9OQcM/jToaJ8l64rYkjtfV+ujiJyCYpZ1WKSikU2j0blhbwtXlRIkvEd0MYdrWyih + EYhCz3Gd81VeGPdSpYVREKgcgZ57ExAYDd8ei9yViN9blPhJaepnlaWP1VY821TzSkfD20Nbfzt6yJ8n + Df94+uj/zJn45eJN0lttDvild16Y3mNxes8l6T23SO807z8Lp74yYegNzbVHphIU7CVgUXLtdqOfiEXj + fYgnB9mH8zcbxFxO7YRDYfSw3vL1MsPqgpcDvs0DXAHMfs7MzUb2MkspvCUSqJKiYsLq1/tWFLo5qvz1 + wLoBYxE1ohgm/jADVUFeOwKBQFggELj/zJl3XHHFr999V2q39gNCz91zzx4dHWAehAM4RK+FtlBp8XWJ + k8XE2TQ3HlBRvk80ul0QeI7pj/RdxJ6/8MILklGlr6IN6wp+9vYcEy6IPIck0WSRJlAPJyUx/lDSc845 + h+zS4CL6TMLYMT8OqN95+dZbASqhVlwXEXhQK1TalIVt16oZDMgSSrGwtVUgH4kQZ6GYA8fPv5AH99uP + dJ3HqZjcMHkLKftJuDqnWAWHbm4m7IQU2ORj20Ag5LwUEvz+mjW7YqMmUU4kguEaOQzWUeycAKFE+4GC + zdV1dRWVCT1a56dNsJFPLOo2/snsapAfzJKYOmUQFCDsZ0csJ0qBFkhR6OOW5jtzzozREpFhWNVmKviS + 6JP2Z4nJQSOBMzk4L9jIkUOZ1MsMF/DW+d5UThMDY2bQD1b6reCmzpu3OWzYOr5Sx0lG+2Avgxn+GTk4 + 3kRNgjJYE1yCaoPMIQphoaFu6tgqKlGVdhCmZcNWPgLlbGCjqdo5czY6ifbp6vK89se/ZGtVDgs0p8g5 + e8HG+IfBoUimFXxjxpWLgKo8leqoqBhfWbF5SfGSWHQ7neRhpas8gkRH4A48XUGgCwtEDnMpGWGAQLSg + OAI9ZQW9NRK+Mxa9pyjx45KiB8uLH6kqe7q+6sXWuje6mn85ouNP43v+NnXkv2eM+5+hgDvOS++2SOHf + PkvT+y5L77s0vfeWas3yzf+46aj7uprOLi8mnQXuSSy05LJhfMCVzvRx8K/GgG+QxID2Q6GQKVVUlOtu + g+GxaJCJBgc873psIIEfg2B7G/H2qNkSwRK236FAywUFJUDez5GtaUGDqyrID9HePobyXSZM+N7FF7/7 + 9tvkRWME7x8FZXz/xbPPHjxiBOoY6vmRqxozBaISlhkkdHBd6r8vC4fxsTHQbz9kiIAEsefII0m2KZKQ + DSzC0BdeguL4I1HoXH755ccffTRlFpB0Llu2DG/lXnvthR+OjNIkvzZh7P24DKFW35gwAQUpMQkUeZAy + Qwi1QUH0k236u6hmiDSYG9SFB++BW6yy+azuz889d24qRd7qNaSupnSD53F/9uMulZRsvXAh2ddEL7Mh + plH7tpwxe/ZulRVLK8qpzaQcGNpNaIAw7oVLi1Kk2CJtLpN86SoFF8E8s6zHG2IoxWD21UQqtxptDswI + EslKxmWS1pvXr8DE1rJSGgDLaUk+HMqWFIg3JXDBNmofZotFfUTURc9EC+qfLFVcNGPzqV1ddBMf5PgJ + T0yMOsNBiaUs46XeDxFBpY4Wz0YaDUiOM3xo9+bTpkpVKRsLxX5obhE/0RiAsBBk5h8461Bch0pxYqWb + 0c1WHw2KtqnS97PS2rIyyIAaAfPMp/6TFzyWZkfDUUrtkEUsvymmn9CAhtqahrpaudv8yUhXVVHe1tw0 + or11k6aGhZXlK5KJPXWMIIUj0IUSHYgo9HzHRQ6jIiK0L/A618UReHPYwxH4g3jsnmT8/pKihypKHocC + Nla/2t7wbk/r70Z1fTBx2CfTRn8+e8KXizZJL9ssvd3s9E7zFeDtbUGgAOFeS9K7LAAI/z5t9BNDW6+s + Ll8diyDSQbPKGIh+tYU+w/0vxIkIiugZ0kn2UbvvyZO1u1+OXdHc8r7eneKSFJmYvh7r62De3695GxK0 + Vpb7NcIKn9rmgkxSRBqKaKEtHutJxIeGw0oLU1NzwZFHPvPkkwADBj2JcxgkJ/vT228fP306chKoIbEE + pOgk5wikUCU3ct2FnodRESzE07ZjR4dgIR8yO1933XVkF6MIw3qGzQ3Uvl88//y9hx12zcyZF/f0nNbW + trqtbYexY2fr7KBz584FGsn2SUJU0bL2zwufv+46dJiimqGvCynELorAkoUvJCCdnIgvKCleWFcr6XWW + L18OseMCEQflt/Te3XZT9WwjkdWeBxdcSWKzZHLfJUtQjRJ5CX5j1CULgdH1rF+N+7//9re3HHDAyoqK + XcvLFhcXw9cJjWBIFiCULGjC8JhlE5ulDCPZaFfwz6+5i8vpGAiKi1IEVPR1dnsQEa6Zg4UMNJAwPdxk + URBRXgT4kTtLzQdUVeU2OwOZASSNRD4QymhuoZ0cOZdpBQDpw4EPEipsJIMQ5vh8gYptt9WWO2633GQX + kz0RYwISnJ8RYcyo3o62Fgv/+sKa3FvhD8WOtkbWVOtM3OrmyCXrSHnTKp9hc6uTcZUAiPaMHzOqrblZ + 3WcduZ/XAG0J4Dg6QbOSQRWXUuImaJyPxPaDYzMykMv2NIYk6c2NDd2d7b1Du8d3d85sbd6qunKvZGK1 + 6x7rqpIRZ7ruNxQE6rh4Bzmoc73n3ugpR+DtUaygMaygPy0perii5Mnaiheba97obPrl8LY/jun+25Te + f28+9n9zJ6W32DS91Yz0itnpneend1+sAE+xwGCBCLJmt8UKILeemV449eOpI4mmuKWmfG0ytitTfxV9 + q1LeYzEq1/aVnA8XO3fm5gfuu0d9LaRRmc19T4Gq4Y49Q3Ue1lRWlJE3Z8AUKvbBBSnNGhWCGZSmMivZ + QFW+VG6QdfjAROGayURG5LUOO39dm+qRqm+KaaOg8gbpEbDacZrD4d5U0ZhEHEXMnptuett11z3zzDNS + NRAUHAwXtAf3jz/44FzEMDrkjpRdm7kusdgGCxdRm1CbFsHCnVtaBIr4IGwkCTUCS0yU6xc21xcUfvGP + f/zyssvuGzXqBqLXI5HLdMSCkqjEYkfW1m4VkDbq01J16N5776VGIFfdTwz7F//617kjRggpXKg9hUz6 + EGHCriQ4nTDKcUXJGSXFVKWYH/hEucBbb72Vg+ffzw9fe+2CqipIIZJRLKKrEolTdtnl9NNPJwwRbS02 + VUg5MleAkFaxO7yZjwhf+2qn6IOkyjxG0VdvuOHC3l7yhUq6uFlwVg2ENiOUyHc6SSIe0+Ff6/aGbNxO + biCH4QCuQESRfXwkKp2trUZTg3ESzpQfusurTqXDxsb6rEFBJXJSowxFzijOZ0iJHB9RHAuiON52m+cZ + +GEIlkSjghOG7pgNDM4wcjH+xKNqSqHG7ggGxExYiNmdQQoHicEJlVs8qKpre0Zle9VsECiwQ7Ip1bOB + BIt4KRMoyClm5GFDhxx60L6Tx4/T2dpU3KRt1dSQlmkv18XBcxCLDSQ6ReraCxDmfII1iqVpoEIQGyXY + TIWR6VLJ2OgKwi/xMGWlpZxRVWZWgTH+x0hh7L248wSA00KAuba6qqO1eeiQzhHDekaPGDp5eM+8jtYd + qisPSSROcl0Fga6GQG0IRQsDBN4UDgOBd8Qidydi9xUlHihLPVJZ+nRd5csttW8Paf7NiI4Pxvd8vMmI + z2eM/3Le5PQW0xQEIoQB5HZdlN5jC4V5gnx4BAHFXRamsZFuOyu9fLM0lHH2hM83GfXRmCGvtTfcU112 + QVH8IM+DFOI9QS1BOkO01tnQgcw1kooWoZHu6lCqMXIFwKGlywVqJD1XQk5C8XQrFVnBF01uVP5Parbh + eShUUajl/A4ElhaXrBMQ8lxG9PYcdui+w4eTReP/5oebVFyU7Gxpqi0vAwVFIKpQkChA3B6RyORo9Mgd + dkBG8uijjyLmJI5bUHAwoQU5IIRA84q99oL8iZkULMRvTDoueCGyZnghYzGJWsCS3err506fLli47777 + YrpEGIKeEwK0PulU8sAQDHhl//3viMVujEavikQu0RCITw4GBvCwHJdM7tDbKw0gpQvuQ+L9kc8AIf04 + LB864wzSTwPnZC/DE2Ai8yRXS5smhahmKO8wv7R0to6FgHeCbRhgQbV8zH7ggANO17VtT6youEln38Zc + DEMFBU0QIQEYPA7M1Kzh6ZB0hqgMqexoPyO+s4Znx4nY7O3HH797551Pi0aPikYPiEZVrjiCHXV+HIgs + sM0rKqZRkwJG2dCsZLgbvb8zRhuZzIAH50WFK1CoRdiVfBg6EcKZ2MGmpgY0qP4gYo0GrIE0kJfLjBH8 + qCx6GkhyrE9yWDJOJZNxkvn2dHfanj85gmKiWEUTvmPfHnwsPYjPKbFDiu6OE9F47J8wnmwOqrZkVq6B + UGBV8yft3QwwwCdb0gA2bqjV4nXzs74hNkTJoTT4EmpWxcilK0hEGE1NclEbYGR7Lharo8SliUMx+2P7 + FO1f1Jb50GhuuIjjJYe4ucagta6qzGfhXzYQ2kxdP5qycgqJM6QrFGzRKDi0e/SIYeNG907v7Vne3rKy + ouzEaORcWKCDIRQIlIgI9ybPuzWqHIE/TMR+nEr+rCz1WFXps/VVr7bVv9vd8vtRnR9NHPbPaaO/mDU+ + jSNwyTSMnMoQusM8ZfAEBTGHsoB8gOIOczX4zVCbzZ+SnjX+f9NHfz6l95Ox3R8Ob/9tZ9OrDVWEW1yV + jB/DRF9nIiSLLzNOVGl2HA+POh6OJSIZcGTSMFCSlz4pjupFTAbzpKFMSoQIihYt513rCzutt0wl87Tx + le8kN1+4cJZEvv5f+4ghHp9tVeUWc2aM6ukSFEQlQUYYYuHxaW2SSBy/zz5QFlJjI13Bm4XAhPF0vasG + /u+LL247/vhtolHBQrKxgIUzxEZKoGuAhRQx2KO6er7OVc1nzz33lJSkGzE99x/vvPP2qqprIpFLI5EL + w+GLPO9Mz6ObUk59tS6qfmQ0uksQ7QAvFHEKMNNPlfkP33rruKqq/RKJbeNx+jrsitBJjKI6zFz9265i + 7YMEpO3tcnUkmcMZSRWO/Pj6v7/33kWlpRfU1b3zox9RuV5KwJNuVPymBjh5IqhmOALCH9izFDrG3Gps + 10IEWUP7f/Huu4+dc87V7e1kx6d20mGx2L6x2E5kDdWTEiw2TFRpKrpzHBS8kXYutK+0i/NyEr07sKYr + GOIZTAGAviJteTn50bhDchiehhc1pLKBXbjcbGYBSmag4VxywBwwECwMwMzHPhkpcnDDjPUMJZpi6gp/ + aq2hkv5ApP+XtdJCaPOT/0WUKTb/yzugOhyt72hvbmiQzG3q8jXl8h2EBaGL68X1KeNm0PjcazLMjx8U + umdBYBYYB9cWwlOLEduS0vQFqPkntf2U6rYz0GMDwEiLpXdYd9fI4T2jR4KCIzYdOWxpe8v+1ZVr47EL + lS/QJS5eQaDrfi/sfR9HYCx6byL2k+Kih8qLn6wpf6m55s3Oxl8Pa/vz2O5/TO79bPqY/82ZmF64iQqH + gAWCcyhCt5+rMA8s5AugiOVz6WbpxZum508G/L7cbMwXU0d8Nn7oJ6O7/jq8/f0hTb9rq/9FY/WbtRUv + lJc8lErcFIueEfao7rRcv2tYjMhBgZvQxqIcHLLxZl3fPp6xqtlr2UKlQyrjwUB1J9hM9FP5J4V5Y7LO + +Un1okIbr2ubv/btuUBPV9dksPPCFalUCV1TD3+NhIFrFJwajx+1115XX301QQX4sQAh/GTAwIZXkP/p + ZZdtF4shU5yjzaQzNBbO1rxQsJCYPBRWe1dULJw6VdACnSQBA1Rv34hp2H5/zz3XV1ZiET0zEjk5HD7Z + 83CkH4YyRSt3cMsdWVS0w5gx0gD8hehToGL9VJkHmb49d+6RFeW7FxUt0X5QiUYwJez5ImV7JQHp3CCx + ztFHH431FaKWTwpfveyy3z/yCOuJ5cApyOWDeTnRh8xLMB0TjEELr7zyShyrBIFIfSvwj+wzEES+c/zX + Hnjg7uXLL4lGz9bE9zBiEz1vD9fdVtdLwkFI4jSQm+yg5XquipFAQiD6tqxvUNdlqLcFLAXfJV65wlo4 + /Ct573n/rbHfXgYIhs6lS+aTw8Xay4cWGTL6PJqBrwDqBAux6YkmLQDUDC0zoCjHJB3OsJ5O3DwW4GUB + jGyWizn6kgFRxReTwhfNpx8skWtR/KCjo4UkINl7qV/NoewvCtL0leqry2qL+UvWQyyUx9I33qo1fTFC + OYrCbB8v+4fAwm0zN43jkLOUNAhd7a29PUNGjRiK73PCmBGbjxy2fWvTYaUlpGcCAq9yHbQwEhGII/Du + ePS+ovgDJUWPVkABK19tqX2vu/kPIzs+mjD0n5uM/GLzsV/OmYRvz2eBoCCAp5YZChFBviWbphdNTeMs + nDn+y+lj/jt1xH8mDP10dNffe9v/0t3yx46G37bU/rKh6p3a8jcqS18pK36hpOjpZPzhWPQHkfA3PZf4 + fUghr9sY/a7xMIybsK8e59+xgZCGJ6Vu68Z4WYkFgt7lgKj0SQlp6v9Fk2nhBg0NX9POemyjD+EMYYor + rkHGPrKGEiZB2YSJnrdy6VKwh4LpDz74IK5BBIoMqRvFMsmw/th3vgPnE/nMDNJwE2IPL9QJkBbDTjQW + Epm3d1nZIh1CzgdaJmnYwIONlYbt3ZtuurS09JyiItGkHKZjjPZx3V08D7cZDsv9E4ktx4+XBhx33HHA + FbS4H1L4yJlnro5GaflWVKiXgKEg8bSkKMP9RhQK4iOVgLSuTlQzVB+E8hLOCGL15dSE3oGF4FnBkJU3 + b7nlB4cdduqppx6qP5hbv//977/44osAJPQRIkizH//GN67r6lI5azQXhPUSlUF+DTIuEmtMDsaxurWg + tW0X7QcIN7CvszvDeipRVF1eiYUwp+ebg+txtvDktK9dDIrYcJKzMXAyZtTw+bM3x0baz0tHC1UpgyCK + w0cDDXW6/b4TSw0QWqojTrgANPq0HOJRJIpLMy3/ULKTv2/IwdZKvjedOi4DdUwISFdNsg+smrTKhiYD + PP0gEMOTqEwFvdQUJHD+icnU/JR/NHuN2cw0ACVodUWlaa21sQybdkv9s9sr+0fNrJ2DByDtx0mGZBRp + zIhh3WMggmNGTBndu2ho5z71NcTgXhL2rnJURMSNngsE3hmN/DAeuz+V+HlZ6snqshcaq99qb/j10Lb3 + R3X9feLwf28y6n8zxqXnTlSGUEgeRk644NLp6gt/LpySnjcJ2pcGJjcd9cXk3v+MH/pPwG8Y4Nf8fnvD + 71pqf9VQ9V5txdtVZW+Ul7xaWvRycfKFZPzZRPypWPSxSPghz7vP88Dj01Q4f2hLXfWT1413TcmNsj/c + EOY62EUFijB6kz60/zRjitqoxKrrBoT0QAljsN9lvmsJdOHsSwMiFK8Ms7QBTTtswKvXVywjB6Gf48Ic + 8DgDtqfPDRwvRBUcSgBw1yR2XoyiCAWJlGCYRh2z9dixBLZjDyTPi4nn21goKGP9qz/5yf5tbWChyGcE + C+GFykaqsZASsiDKPsXFW0ycKFCEu44hnpCDjZiG7aWLLjq3pBRBCu69vT2PgmTk4cVUCBLj7SPYfE+K + CWuHJWVyCTfkbuBp66si4O+eeIIq7Zh2KWEv1lGJRpD0m9xhsLAd9wDlqEBKrj1bNfPuu+/25XxlPedl + OsK/+UbUF1evviMeP3/uXCJASEoAgWbSwI0iMwBKnNcfffQHK1ZcqIkgflBKyYP6oCDBxaAgMjbIq3g0 + pallAR3sxy7Ky4NXzCDEenRHmedCIxCP2K6+godiS7tcZ8FtjEPO/jUfrdUaPZ4i/1F+OKE9Pnr5PEz/ + qb5XVVQSioDi3xwzgC51DNAoUHz4O6pxv9DInbfOP56spw060jcI5qOrVFehrsyGVT1vUGV3/HqBBYHQ + P2CfLjp/J4a++toaFBlSGSPYKwOTBUExOKNmdMEpZNSmM0j7DaYS9lAaLy5LlBAQKfekICKaBudvkHOB + 1gYhpEFlqaKmulqcgooIjh4BEZw5YuiO7c1HlZVeEA1TIwItzHc977ZI+AexyI8SsQeKk49WlDxbV6Eo + YFfT73vbPxzb/QmQNm3Ul0AghlBIHigIF2TB2smfIN9mY0C+/04e/tn4nn+O6vp4ePtfe1r+3Nn4x7b6 + 3zbV/LKu8t3q8rcqSt4oK361pOilouSLyfjzidhz8egz0chTkfCT4fBjnveI5/3cde933Vtc9yIdyEim + U1LMUIRgWHl5XakyDNidltQMY3pHdLW1y/vFpA1kyvHnFezY+Sv7eTHZmDBckmXTo+jHtg6u4Ks0yHec + XpovRs3fF6AdO2pkQx3mpwIfIHD8uJHDhw2RAltfwQeNWSwUToS8hDJ5MdJhysEoyqy40XFwDVI5aEZ5 + +b577gkBws6GXwoysXEVm4b0/PqFF46ZOFGkpCRdo6CPYKGqE+a6YCSFHcDC/ZLJZYGJkjg/Ow2blLYf + KEpigN+fOPdcGCFAyLl28jz6KPBAGoitCG3UK7cNAhwphIS7tJ8w9o9///uzWlowroKjZFQioBBjY1tQ + igjLM1ioDKRaNaPK9paUzNYoO2/ePFHNQPsKNhf7Jz/xLBANEb5iXzVJtB9esOB70SjanxO7u+duvjka + HIJPCNjHXvrTCy+8vKsL8+/aSORYTQQx/0J8d3dUrg3QGi6Ia1CSq4lRlP4gofRCB/EzENGVYyfhT5Qp + BY0nG7fXythaUkS4nZSlVbQGPBjVO6ytpblgA2QAlWbIl2BINfDTZxutXdVeMLPqyoqg2KxvYzTHZOxA + 2aFm4Ro4GVAkPsE+Z87Z7cFdMJUPaNTS3ADPk+MEcKKOZIBVzsJHr+nTnhmoODPnsRDLBzB1fBXSRzrj + ChE+CCcwHj69i08SbaZoY1UOFho889FOxel7JfHiVIzYU1/jkw+EZo2c0Twm3LtdnW2kr9SPWzFv86vu + eJGqstKOpsbeoUOg9ePHjJg+ctg2XW2rqyvPTsSvRA4qjsBI+G4oYFH8odLUU1VlLzVWvQ0F7Gn988iu + v4/v+dfk3i+mjU4DgbMnqAUgnDUhPXOccL7/as7379FdH/d2KOTraPxjS91vG6t/WVfxblXZ2xr5Xi8p + ejWVfKUo8WIi9kI8+lw0+kwk8kw4/FTYe9LzHvfcxzz3Uc992HUect0HHecnrnMXfkrHgRTiKWTGPzIc + HlVV3UBwmw4vNS4IZhXtzc2wpaAbZ3Vmu++uE/LldHr2xQcskhnw5ivkXoXeNp6jEt/1YWWFDXd3dTBX + 25AL7HsgQqMVUSgYSYa8uJ9KjSFP6CCFc2Eq5ELbctIkIsrBG9K74GoS2cV6yEQHg08f/OIXJ266KVhI + os5Z2kyKcIZFJYl3XQrmEY2wb6podWXFNiNHCi80adjw2GEqxGC74Vj44CmnkMAMJgcL3MbzyEOxjetu + rbGQNbuVlAgplGgHygiTmLvg1ZHM+rr58wlIQIe5FCmQdhN2aCIICoIx/AvlIspemLcq29vZKde16667 + opqhbC/TjvyDQ8excHLJ1GDCiAoYm22++OSTu7q7r4tEUMB+KxY7pqlp/rRpODUvPO20y5csOTmRIEON + sv2Gwwd73kGuu7frHlpbc3BzM/ecCrpjgmKENIz5kAkflEoRyuTievFIdEDHwMbFP/toDJAmcF4X1lZG + lcXz54wbM5KiM2b4KPzOaLAhIkLisgs2UsAvIIo+jNob27BqfweP0bwY3NMEN8MvLRjOsZHKuTJn5IpA + 3Byqx9ESSUnm4zcJi5PCyxLyHuYbXX0UKchHs/HGAJ9cda4/LwcFbcDLQKZlR7UhMAcdJUQkOIX9PUMc + DbgaqOPqSEcwccIoyAq/clvUnVFFiRVUx6PR6rLSrpZmdDEkq9xkdO+S7s4DaqvPLEpcQZlc173Zc++I + YAWN/iQVf6Qs9UxN+WtNNe91Nv1heNuHY4Z8MmHoZ1N7/7vpqPT0MbA9WUC+/03p/WLisH+P7f7nyK5/ + DGv7qLv5z+0Nv2+u/U1D1S9qyt+pLH2rrPiNktTrqeSrycQrifjL8fhLsdiL0egL0eizYYV/T3vek673 + BPjnuo/qRSDw564DCv7UUYzwh657k+NeqEs+MbyMc5x6J1QaJTCpXEdkBoA3iHdpQ0jbIA6/bpvQ8uy8 + TgV2B2iRKw+mVJN0b5NWqa+m+DKzdWup3hp9UljTQcUIo2q+rxJoSQYZTQfxXW1eXLxo3jyEmmeddRYO + OfgHhrgNR5p+QPHTDz88f+utiSMUKSkF3xUWSsEUeGEksnMqtbI4tX88vl0g4/wq0rDdddhhB8UTu8di + K2Kx3UpLt49GIUwgtFhol2oY5rYgRcFJ2U8Y5V177YXudDeso65LZD0mR/QyAoSM2VLEkT87tGpms0Ry + +4aGeYEflFwz6Fy456C7fcdIEP7pL38J+D3xxBMYq5mgoA41G3z83ns31ddfEYtdHImcG4kQcbGmrm7N + 7NkndHQoR2A4DNklK83+2iOIo37HePSsaZscO2nC5snEKMdBJkq8BChoc8GvTSy6rt1YBgvlutOCESto + weCO7uoB5AneZNs/lXJEtpGjmX9lp8yfBoKC9dnoqORmAT/LXEewkwHXHIg1v2d4av4ZBXL0hN3nf5yg + qal+1MhhygGjZSkFuZrAGD5XIfFC8gxW2aBlr8xHOzm+YZOm0cHKAHezbaQ+6gX/yz5FBhGtW5TlMjRY + KAnktKBGGQDkEpjIlIXDLcWpkfV1E3q6piLZ7+nap6Hu1FTRZeEwERG3eN4dkTBW0AeLk49XlLxQV/Fm + a+2v8eH1tv9tzJBPJwz7DBY4ZQTylv9O6YXzfc4akC8weH4A7Wut+11j9a/rKt+rKnunouSt0uI3iote + L0q+nky+noizvBqLvxKNvRSJvhCOPBsOP+OFn/LCT8D/AvB7BPBzfPz7meM84Lo/1UbR+xz3Xte523W+ + r+M3Tlcp31xSTiLhJYWh8S4HUxy/O9kzN382FHQ0uysO+BKxsZ3zb8Dt12MDFY6aJYDNPQbPtLWlicTi + 69TyvlrC7Ki8pJQ6GOvR1JDyDoa1dzCueaGWyWAHw31Fvh/yYUIHZ7W0kOFs7733Jn0JAQOY4zYkrfNg + SCHbfPbpp9ceeCDkb3EkoqSkiCojkUWxmMo747roS/lpFz2amzRsVOYj09gNN9xAmD+mQopFbKAL8/N/ + /et7e++9TziyC+EE5LaORtFSLvc8To1wZhvN2yDKyGjxUPYDhA+dcIK4CSXHLilmcIkTPgH+Sa0GsJAb + joGUIlbTS0p3a+tY3twi5QYx/HLb4Xww3ZyAxd/fdNMrRxzx/OOPE0pIFadrr70Wh6Lc3r+++uq1NbUX + xWLYP6lfeEIisSYWI80N2leaASQr7Y/r7qDLsC1WmfjdhaWlhPaPjkaZ/RAsQXsAaYhGfu3c9elnA+2j + Mg3qPFs5G0pSl4H2zv09fxe9RnBIfSyMyuCcrCyIedZe/nGC4UkdikG5HKNVqUp/FZzCYKpthrVH+/zv + NjqC0/45C+5jwUNY1WMPRyHoliHR4Jy/jsBEDJKEo9nmRNtAmoNPGvMC5pahehkgDBA3wF7LEWgjq8Au + a8wBMxgc8E6rGcG1ZqA0i83KPTdoj6yoxnHHMFcuTm1ZU7VjQ+3BVRWnpYq+FQnf4Dq3hr27YpH7EWeW + pJ6pLnu1sfoX7Y2/72n5y4iOvwOB47r/hZ0TcyiwN3rIJyM6/w7nG9IsBk+FfLUV71WVvl1W/FZJ6s1U + 0RsgXyLxejz+ekwtr0Vjr0SiL0YizwN+nmJ+T7guyCfg94jjaObn4AUE+R50QD6H5SeOcz+L69znuvcA + gY5zJwZbXeP3VJ37G78Jr55KpuDPxjLd1djM1/Vd6Gt7ZlS4A8UfvK4fmoeHErv9erybOefKfR/XtSnW + 9ioAKZkaMA6kwBlQ6YYxhwaLG1NAKHZR2EA7XqtwZBohDZr6UCcIYQhSC8x0X5FRNAcjOcs9Z529YzwO + 7CElXVCUWJhMqCEbpuh5i4M0bAzuO7W1CWzwOeSQQzAnwpM2Shq2/3zyyfW77krkBnH94B9Itq3n4acE + gwUIOR3Qi4a2HyB85OSTsUOiON3edfHAEaJOGmuJzJMqfZLKnHveBimMRqcnEirXTBC/v//++0P4OAXQ + bt+iz//2t4d6e382adLd55xzxhlnULvxrrvukm1+c//9FySLIIJoQU8Mh48oKT4gmaDN+Cm5CmXjdRzC + BIlOmUkkr9bF4Lkk6w1EEKeg5NeW8rlSNUJyquUjEh7sigrylawDVtH1bfcDb7hkg8ypUs14R3wbi5gH + VZKXPhLzm1FjwJco/63rY42MRDkYlOGUAnjmX9qPhA+LqEFHC03lKH1RwMJol8+6+oBDlRqGs2tVjS/F + tL1uhiBqFiWU0ZCwLOJFqjzEOIjGc0DLYoGCggaG/ONYsGcYoVGiZm2MXxmFjF4Ue4XM8V3y0HBktUYf + XC0GNy3mal2LwlYyDlByfhISNs/DhXFiJPwNz8MXiBz0++HwPfHoA6nE42XFL9ZVvNVc+6vOxj8NbfnL + 8Pa/jez8h14IbPjb0Na/dDW939bwh+ba39ZX/aqm/L3K0nfKSt4qKXqzqOiNZOK1ePy1WAzMe1XDHstL + 4cgLXuQ5L/yM6z3lKdjTNk/nYYV8LjZPmB9mz5857oOu84DjKvKHI9Bx7nMU7N3uOt9zne/oXKaUecIW + ihBvKQMCqSvxPet3zbZAZPdn3Y2CiZr9ZcBuX3ADdc/7zV/fz2HZkUJRLS2NVkb79WvF/wN7IQ8lTjBR + GYqXhSIpRQcRjopetEzzFdJqj9Uuq9k6dG/lypVILYjdXtdUaoOkgH1t9tC3v71jKqWkpJEI8pnZXniL + WAwgJJM1WGjSsO3a1GTSsIEcFOeDvG4UUc9/Pv302ytWQKR21kCCWEZpRyPRZSNGIMjEb0pUJT7CfvKs + vnDZZcdEIiqHuOchyCTTPGpM+J8AIXjDIuokbnun66JOUrlmUM3oBAIwXanQRNhDzl3687333h2L3VlS + csMWW5x63HHkWsNZyDZ/eu65syoqOOmh4fBhlBsl/APww9fLTdM+eezM6EKRsCKKIcYfhtqmzw4RBJJN + cu3+UZBxq4WMLPW16wCDTHijUSwYwJq8BLzeMojnvBOsbG5q4OAM82yjxREDn8eeovIdfTn2H7OjgT0B + J4NkQUsya6wNfAwyQ4/N+cwlWPAjmGdTw/UBQg1IBeDPnFHPJ5AOFjNFyIE3PcYZ3PLRJThg5k8/eE+z + cHLFTBw3hjRsymicRQEzxNBidRlQFM7nf3RSUJix8pIGrA6oYwH8gC4WeGuMzGo03iVnSoRF46KGQ032 + MseyKGNAK/VG2PSofgN/ct09POc4T6VJAwKRg2IFvS8Re7ik6NmqstcIXWit/x1QBwsc2vZhT+uH3S0f + dDX+qa3+D001v6mv/GU1ps7it0pTbxRj50y8GsfIqTEvGns5HMHUqWEvrGDP855y3SchfJ6n1C5wPr2I + w89nfq6CvR+7zr0+5rnfcdxv6opOJ7jOoVqJBuaRRXKEgxOE6aaDHUhyMRj0818Bv2cGfTR4MbItIxlc + XHeLiZp6ksU7v4rZ4HFJJXvTvurB79LXlvmT0Q0/5qCPgFggHiqqC5U0h1J1oUS5j4XGQcgwjXZjghb0 + SxV1EpthA4SX9KUK2UDA62f35+64Y5/6epGSIp+Z5boE5M0JhWBXYCHrASeAavfaWpOGDUPuN7/5TSSX + GyX1DPUFL1u0CCQjdgLvIP/uX1Oz1447UhADlgziAlH9mIufveACxJkrI5EdPQ/hKLmUVNIy160mziyo + W+sndNUWaaOaMRWaiNMA2onTyPEUctOe3mGHW7U69Oru7m8edBDBgiqn2quvnlxdzUwZGsqsE9Xrch0a + OFObXygACQWkRCLNwB0IBEJPjS6mIBHsq7+rAHb0hlC6WHyQE0zFTvoQhuW8V8JOBt2nM8OIvFqAAWwV + o6UAYQ5GZrsM7WFFvhtGaJun8pEpQ/gCL6O9jY2INrCZvQq46/LPYZCJ2YD266h7ri9QZYEJtg/Imo7F + RPseYKF49QxUqdsSsEN/VzbAsUpOMkmYZ7FAwxoLQFQG/3wmp/6n5LupIoL5NPgp5ENBS9Y7JiNEwGFK + K3Id/1+EEqmS6lQxDVWVvAKmKG2S5gp4Z6yp+kI4AqX7Fnnuwa57FhBIjaRw+K5o5IGixJPlxS8Rt9dU + 86u2+t93NPwRO2d7wx+Bw6YanHy/UMiHk0/JW15Lxl+Jx16KAngRLJwA3vN6wc6p2J6LyMXF2gnhY9Gw + p6ydytTpwfaUhw/bJgzvu45zHam6dfGmUyiOpmv8LtOANwaNhVK+aKqnkdwvwiK4l/1GGTAQV7e+dn9a + lv9SmK6rshZk5zYz8yR7wpT/BhHfiWnTfg0HA2m0CmELxa0G+aYP5s3lvMSbIvZep1r2gznyoLbBLwgR + LG0NlbUrLAQR4xWhaKlyEGLfwTKGiYzUX0S2zQuAEFUI2a4Bwq/BQZgPiu8+8cShw4b5GbpNuL0OMYQd + Srg9+ERI/rwgDRuJyqgUsbFSz3z0i19QVgk32/6kmCET9x57YI2EgRGZB0vuJ46Qa3l87drjIyTwjEHL + BAgRxQwlPjoCFfert0vFYzGQdjgO4USqQlMsNjcI3j/ssMOgnvm5Zv7xxhu3VFRcE41+KxK5vLzsim23 + ffTBBz/+05+OrqvDossUYTvHWSKlXvLwj6cMC0QeDBllfkoDpO5u/0Qwp4fxfleWlnc0tfAC8xoT1/2V + qkmtN1ZRovzKEvBH0jNKgQKlJ83NHdXfHNYCoSw/jS2lCbbxsdX8mTdgUeMpjPdOBnT9McbWAkAYAEAW + ERQMEzzgA66PGTmipqrStFMSVedAlzKW6gw7hpYF5E8dTaUSJ0mpTxmNtVM91eBcGdwMQNSgqYHJHGhU + f3JIwTMoKm1KhSM18VRNvKjM80pdp8J14ZukKK1ynUrXLXeduni8HmKCAlkxRVCT3TU7DCipQUFpGD8x + qel1nRWue4LrXo4cFCtoLPrzVPKZsuLXaivfa6z+VXPNb4C9hqpfibylvPjNkuRrRag6Yy/Hoi9GIy9q + nve857E853nPeO7TniuET/x8mDoheehZfkRsA4ZW0E5lolG88xTXPYZAI5zrOgHhbFe5OUZ7LrFPVU6I + ZNVkNJCJiQ90xrNnrATZTmjbJiHPlKfJpMSapfndVQ4awJv/RWYe5pfB0zODu9KJA3o3AHbQrzraW9Bn + cd5BwcwgNuIdaaptaGvNCpAdxH4bZRPCm1KhkqZQeVeovDtU1hkqbgwV1YaKajJKGcKoUcpMkRgGzQgh + JYz7ZNn+mk2jBhT/9M47x02dCuZJUV8qNxGKMCMUghrO12EVIubcq7x84ZQp4i/cuKlnPnz33fPHjEH2 + ctdxx/3swQcp3ouGFqcpwhyIWj9+0wdWrTouGj0wEtsFu65k18UrEA6jBDdqFLi4hG9iL4WOD3Fd9LrT + uf9VVXL/CRGhPjDS0PzY+eePO+4KqZVBPYp4/LTe3oe/8501nZ1MDjApQwRnOA4skLANVRxYx8iDfyAu + Mx6BQCGmAoGCguIRHIzhg+GdytFYO9UgGw4rtZumKevdVQvumyVw8Z0lLglVZCJp78J34iJ0rV0ziBiX + noV0/oBlBpfc08rfORhmrckcSg7BgMRZxRgLPEtagIQOrCwIcmZ/yxTpr7M5kL0vPjwK8YgzVeyfCBYk + s5qNlzZ+2Eim91J0MBsFfbyUY1rw6bOyAE3NnwYCA6IpJQxRtGr8Ix8B6cOLSX4diTbFkk3RWB3uXsdp + cR2sHRhCWAj2bKDiRyRSH4vhYWZj+KJgobqNvlnVv3OmVSWuO8J1d3Tdsz2PGhE/ikYeSsSeTiVeLk29 + WVHydmUpwXxvl6XeLIbwYeqMvRKLvhQJvxgJv6Bh71kwD8BT8Xw6nt3Dkun+0HNvd90bdOrti1xq87pH + u+4q19nDdZc7hGyFcOBRNB0fXj347YDETpD7R3WOiurKkaNHFGn3cED//S8GbAQX7T8tHPJ7XcD//M10 + NKqfzZUD88CKk0XkUDUmd+vl8g++Hq+bnJu7zLlMYnrWiTe54AELejHW49RmF/W26vPJGg3J6sI35JiA + a4Kcg5Rw6f840MFkbaisO1Q+NFQ2JFTWESptUVgINTSSUcZKIggBQpQpczWuUDGJ1CQIMpFjfD1imXxe + SOWmM5YsAfOkou9U1wVUpKKviGjI3qISoRUXLwmqJknqGaoUbZTUMx+89tqL117L5eMUJJ4SLghFk9wC + fZl2qWtxxzbbkLpFiXp07TE8c+IjBIQke6fAj6l+rCI4dTJu0tphCl7Q3S24DilHmGOkoeaMn3300fVD + h5Iym2Sh4DQ5UXePRAj5QGSE6IY85hOhmIEWhjgNQwFFqoM8ijZwdgmQMLqYvjqjmkJmp/S0Oxy9sKa6 + kvrgg582rl+/NwQrBwhzXiFgicxMpjFmTOKVFs2OGZV4H0EVnXFbgNNAVYbAWUAq3k1FvJjFU92psryM + aHTmy+2tLXXVqja6OLQG/BQCwgx6BviUM5D6aCQDk49RBsky5k1DCjNmxoDuZbhdIQj0QZHxUaUxj4Fx + PvQqKNW8zRg/lbdPgx+OQbCqTBM+Hj85isG8dg9LpjPcdXoVjKl/WYa5bif1vV2nkcIXMEXXYUeFhXQt + zSwNl/UxXotrwM5ZrndEOHxzJPIYsXoxgtZjL+vlJc32no+EnwkTt+c96nl47O5x3Ts99zaqzOsU2+e7 + 7jnx2GkV5YclE/u4Kj8GnvJprjOBt8NVFbNBa+LVaYOwOmh1gjkHFgXD51S2sqylpqZyaE8XUqOgu2Q6 + jYVtGet6AJfq+MFTkw6r1sg3ninVzcjtaY5AZa7yVFk8qlLo5SFEpqda6NIfjuQfxF6j3m7tdd4QKMrf + VwCv4JvO6XRSN3UhMkfbkFPTT4uiyYqismQ0EXhfCx2PO4lGBswr69JLpwbCDmykXmVXFhDSXwUIF44a + JQPxsccei2SDaPqvNIiwf1/jvz/55IoDDoCnQgoxHk7UozzQAhzOcl2ciMhnkEfunUwuHTtWmg2EI2m5 + 4447oLPEfmyU1DPQMsnzSS7Q/nML/PvDD68cPlxUozvpvC2iGoWTYQiVOrcwMBaJXREDKXBFlc6RgH04 + PC+ZnBNw3BNOOIFHkJ+A9LUbblBhEqnUUeVloCDS0EXEX0Yi02LRKZFwr+MQwo8jUCAQ/DO+SZsFDgiB + 0qGgIEhkAJiC/ZUOTfqxgSrF+K/+evT4flAz532Wg4PZsEY9svkDjow62pGmKjQJoLISMyPXhU8xKLor + Q0wwSmXrX+Sl1QXZVUIWMp4gKOcLHjIC4bW5MoOA9ncbF/MhUA9DYQZBYdU2G5M/5WPxNvkzwwjVdz/G + wIBfgH2+ydHmdpnvPLKK8nIpE2gWCqsSw64ryKtTcLe0+FOVZ0TzgicQ9GKWAYxh6qzUqNYEqHgOmq9h + rjPSdcfyhlKMMxJZXF6O/msTD6mnMx5FuutoOGR7V7CQ44iNNDCQZlBc2gO+TvHcvcMexWFghN8Jq6xp + F3vuOZ57lueeockcqSF2cR3SXxBwTIIkZKU0ADKKPZYW1hQl6srLpNqTeug5i0Toky2WJF6OU1leQVYz + KpibR5bP1KWP8bhxnmnokk/mwNKF7IcuPQpkB+0o1WU6rXUWZb7W5/L7HvW2wELugXRds4vVP7OMItIq + ezP7RetrvdklaKGqfrWx3IH4TShqWDC2gS5npw5YjzEh6+oICXQR2IX7Q0H19kaVCRTXoOBfcXuouMMp + 6WoYusno6UuyGSEAo/UpW7a1CaKgl7nlllsI7l6/6oMbUU1z8+mnU6thqk7FQkdH+oj6gzAA2A+GU1yJ + pHHZOxbbKsjbuWjRIvLDkQJmI6aeQTQEpg6YYef9Z545IxYjjB0X5vY6JwBNRaLSEFLVqAFC45ATXgi8 + qAKQOjG3qGZUMu76enkEK1asQDUDE7VJ+V/feeemLbekjuDxVZXHVFagTYULkqwVxjzOdYc7fuEnCQ2U + NDESFyGnNtERgzSH0nEZ6/sKZtjAftz/7jnvcDBSZN55e5TgO2MTqYLt6XYwTvlwYkYfPTahMgUaVQ1e + e+Qyo481wOXubtNTGZ7yB83Mmj4UobIBeMwkQ3w/AcJlMSRZb34NQNHniEB7aVGxjCwUOYSq6rLvgRnT + sjoak6McgRtFdp5gYx8Ldc7JWIRxBbs30gxt/CSsvaqoaGhTfV0yQR+G/NV7Gv8o1qbxb4zrTnBduh/v + 42zPnUtWplRqVWfXLlVV8zx3JhDluVMj3lgKfXseWAh3rHEdqCR4i1BEmZV97M4y1UIWyzy3Ufvkejy3 + zXU4KSAKQLJUaDGO3Bns1DwA/Rj0F/WvpFHgu7+eTdU0SCYO+iP7cr1ifK6vqZ0/fUZPV5ci3bmPzOoh + rsrP2dPdgYLX6irqUEpEph6lqRlp2JuaRVHTkacj3D+Ariz0sjuhbVwwGxsg7Af2+v+pn9cN0wiv+Qby + M3N85qOSgV215ysdIwZ1cLyDRaHiJlDQUTIZLKKtoVRruGLIsMkLRm26hWInDBu4qRiF8WMRTQ+ubFVW + NksXiF+yZAnyE4rboQ3ppxrtRgS8fg512/nnT4tGwQmEJ9j9CIPDBzYxFMJ3SAA+rkQi//aFGw0bJhBi + Us/g1ZPqfRt+CTDjAa3Ejx5zzMk6mcseROLruIWxmu11pYoa4FaWTw5CJpl9JIJFhXLqZNw8BSyc8wJQ + h5fjmyQyRAI23rz99vPb2mCch0Qie8eiuzvuVjpAYlN9ImywbZpf4g4UOYwYQm05zCDxb1AdbAM2MsPB + YI5hjx35818fIF1n1Ihh7e2Y+XMnyDLE9HUiMwDZw1OwMsv2JYfpi/CZ4wihsUdbP1bAp27+KGyQSYZd + f/jNEo/4aBcAoc3tNCnEShmLVZSURsEuz8Vw19baFKhp1MaFvIOGL/pqUiv0Qof3aUln4P9T5K/Cc8e1 + Ns8cOqQtGm12FKsb6inv3ThP4R+cj1RQAN4Sz12mExNu7zq7MBFMJneMxZZHIlvEY4tKihdWVkwrKhoT + jQ6LhIE0zJ4BKXRjGgjzsNAX0mRhmwE5gboA8CQaww9RzDa0mlvOuEzZQuFeMhUIHpAGPpfixomW+ib8 + 0AYFzfwjpzNwz5lzZA4h3cJRNSKgfdrqoFf4H4UFHErNMCImdFDBtPIrU5NZncbvm3YvNfMwgZL8/mu9 + FANgDZ0Df4EUCOvzLeibUw7mDc3fhualEsnSVDF3fv2OsNH2wjsYq3RSbeHyDlf5BRvUkmpyS9sjVT3R + qh5/FMY0hxmNMXS89lHheFs0bpzACQV9iNpmFO5fHvKVYuEvn3761lNOOWD8eLQkRDoCFVga4Vj8O4K8 + LRoDZhGooDWTKoy9q0saP2vWLLSXlJEi2I4Ygw1PPTPgZX72179e2dlJYk9Smu3pugQSEb1H+c1Oz+su + KaGMil3nFkBiEVIYJD0P9SYT4+PxTTCQlpbO0iXs4eUkdcNZ+8u33rrrwANPiMUolIGcFY3ozow7Fgpy + QwQFTcBifpqYQj4HBr4wk8FSpaf3o/02Whe0DsQLz6tYUGIqr/RgoDF7pMiCN/5AgBcUzhWXnsuYpewz + waiklSOZiMacAavQnwbdMtiWMyzagJeDf2asFDdYMMLahC+H/OkxOYOFGSC0+Jyxi6qD6uB6tVmg3MG6 + lYE6WS/jvtnMWumDJQyQRR9GoSAPCa4GBEK80IxQAaE3HhsdDY/yfMvnVM/dzIP8efORcHsknXC399xd + PXd319nLc/eNhCn1vGc8vltR0U5lZdtUVi6rrVlUVzujrGxiMjlSJzNCPlPjcQoHPAF0AyD0iaw0WTVY + 2pTR9diX5l+XXF2w+BtYuln/dnGjtB04x3uaeb7qLNIPs7VIsoUuWRULKgn7My1rVqT6m2pzZpaUAUID + aTHqEWtHtX5o5O+Nk/1HduGIcgnyIgT93PrqvyC5b3BAujKom//yQl6HDx1CyaOv4r3u65i87K2NzW2N + zSYJ4td59sy5QEECJJKNTrLNLWp3ihpDyepQsiZU1BRKtTklHcmq4ZmAekZPoAWrI3Y5lV2ztlawZMst + t4QUUpUXD9mAVsEBcWJdN/jH73530047HVxSAsLhvCTrDdLKHgwyuLuTSZZh0ciU0uIp8dimlK3QFkKU + k4QY7tTiZyzjEg4++GBJPYPOhXq2G5iGrf9LeOHccyn1B1ChlKGWkyhlkG42oyPXAUZCzsQ5J4uQQj+/ + jxPqicdGJuIQX1B/rrZRExZCiOT3L730rHHjsLgSMo86BhQkZRoZ4KR2BFxQUJA0MQYF8+MiCs4btQo0 + NX7MSEliuX6dNet97eMQajTRgWs5v/eFf6zHdMknIGqZDc0362CZw8pknL2Yg3e0tWLIksGFcSpFeZu4 + SqciU+wA+fr6kjVKmo1tomDGPZ0YOjPOmj0VFYBAJPGv+ahmD+vSKhv59ChsVhYEQn8lFjgZeS0MCIBE + /xQcx0fBbID0AUNhDdXtI7FERFlEK8tLauBNRGQibPEU+YP54fMjmH02bgjyWnjuFsTyUqZN54vY0XV2 + 0268lZHwQdHoqmRiTUnxYaWlqyoqDqyuXllfv0dz845tbVu3ty9sbp5ZUzO1pGRMIt5DvlCiKfC2aqej + ZoRZ2lGFEhoCNWZ73EBtwrWvSBUugJaJd1alLC9WntogS43cGZWCJ+/m5D5TtixKJEmZZ2I0zeOQpyM7 + 0ACKnwTeRr8D5vePoJPYvwhq4pOO4n+twGcZT5AbTMW06KuUs3AJnCIocmK9Iz4mqjOatyznlen/T86u + NVAqWnH93u712IsmMZjUk7ihskry0Uiyo75e9kGegt3XzYvJXcMomoT/tYWKZGkJJetDybpQETH1bTgL + vYohGR+VsstpYyOFgYCcHTBoBNoTUsyQ8euNN974+9///pWiSA7GwK5umjuXbCmM+5g9BQiB6qGYGcPh + 8bU1PSVYeb2xFWWTCbdyXapckqGUzciIhn9u14aG2ToOgQ+XsBFTz/SFhf/4xS8ur69Hw4JddD/XJZ5P + Mm4zw2CeUWYpZYxxkv5usDBjIMXvopMbbB6LzR4/HkZ44s47r6yogOyyAIG7e55wQYOCpo6goKAdHShw + 27/phGGGgKHmpnrGgkH2SHszDq4GpOyyYaboq2zJa99/fqb8N4QeX1ZaKlFWjIR2uFUAjWZibo0WwYTa + Rz49WBrkE+l2gJS5g4s1eglwFh7odDFev8CebEFTU1rvbhMO9YN29XBnggK82vZo6KHeV+DKOp0NbD5c + WRhgoC6DCiCiBXL+d8vgGWCeHncNHvs4qv+GDBJpmIzF2uprGsuKyfzQptWeaFWweZJudwfPo9dh7Yfw + oU9ZGY0cUlS0fzRClC34d2gycXhx6siK8rO6Os/u6Tm2qenI1tbDOjoO6R6y79Chuw4btqKne0l72+y6 + uk3KSsfF41hH2z2XKItyBYTKDCspAwI27CO33Jb21uY5M6cjS1a2RB/g1S9gEkOt1CSh9xFzqUDRvz3q + ongo2tdpsCxDNwl00UJo/xETbE6Ut73GwKfpAXJAcyw6AJIimdjZn776jILzeExq/vGd10FZY7P6qj93 + MZYR6TmCXjmzx/yXxfcOFJpl9oU99voNxKeCg4Z+RuqFk8uULroew4vZhf5RXV2FRn0dWquMohWhJLHz + GgVTaGT4lwUfIXQQFOwMlXcqOmLH1MNdkF0Rq8B0b+fycpPPE+0ibipCCGBUG+5pGyQv/N1Pf3pOJCJm + xp2ZhML5dNk8lR6MlEvhMG8GepAGz20PhxVHpPGkeGDSqhNsEmK4a13dXG1d5EOy7I2Yeib/Ev772Wc/ + XLyYkAYCJxgd9tC5PZG2YheFqDHPAJ9su6ggE/+yQBCNgRQkQ1/awUxcR1PMa2jYRddr5IqIm1S1gvHB + 6OxN+AU5vvgFpZquCERzUFBOMeBHBkvpshrUlFmfrquKsw9kL2UXjE45M7XSkpLWpkbhc7zzagMV6rcO + Hxl6BCFoT3bV0AKmVMPwApjMvC/6m/pHj1n2v1l/yohjjWv2d7WlDHO80tiatLTSh0pulD2MGlSTu6os + tEFMgr4OJSLQsjrypclIbdvrrLFc/yK/y2bmY5DP5nmDWZm1vcCip4CQdlBkuTwSRgvTgQlUWT7d5Sqr + mbfK844ipN1zT9T/HuuFmZ4elUgcWVREVtujK8qPrak+rr7+xNaW88eMPqO398Se7uOGDzuyd/ihvcP3 + Hz5892FDV3R1btncPLemetPi4vHx2Kh4vCsaBQiJRQUImT4Q1wYRRVVvJgrSTjoA9QomTxwr4l5pbaG7 + oUBKpaArTmVrhfy7a99DnhQUUEk5AiDU8wPhjnJw9ZTzv5iOIe5ALI1aD5LTSWQrmaJlfpLJk/RDq39a + fc3vmb4xg/YMHdI1YdyYIAOLbfDwT5DT4TOAYdtJNDMzc8H810/ammn0OrygX8emiiroB6KGI89DbZRI + DNpqxV7holCsPpRo9YEQFCyBBQoWtscqu5P1wxwBQpNlTayj43BrUQJCZ9rcLqiTR0kEyh2QwAzr4kZR + nQwGC39zzz1UFCKLNLX9SBu2XCcMAwhpJDF5BAZg8C7Toz/f8XHCaBUWIiXFdaGRg6oLu1dVzd9kE8FC + ST1DWV0i85D/bFxL71OHH36hLv5OASaVikJnuKYxyi6qzZXYRQUIc/iZIYX8JAZS0J3MivhRwMLxOg0p + jlsy/kB2yR0KvkIE0eAgmhUUBGixiAoKSjXdQQYIilc/pzszxW5qrJeC7Jhx2tubbQQaTN+XY6pooUL1 + Jfp6Xe2W5LdKv/Oq9JLArXl7DXLreGQZfcwwFHzLvOe2RTRnNLGHpIJDmz84al7iMS3FpWr2kaFT7+bb + YH2Tp17PrWhpamisqxMflYy2mIyoPy5h1GIAVFcXDMSyke/dy8a/bLOhJnn+dtoeKLTPX2SNTSL9Y3Eq + 5ihqvi4oqAWiKc+tRpzpudhXIII7ei6lK0/yvHM97xLP+1Y4TBqHS2OxC5OJc4qLTy8vP7mm5qSGhhOb + m0/u6Dh5yJDzJ4z/1ozNTxs1cu2IkWdNmHDiqFGre7r37+zcs71tp5bmZTU1c0pLN43Hx0UjwyNhbDkg + rvgIAcKaiophQ4YQl2nuj74n6kJUrqCsvDnmen3QMgBG/gESn0qWWvs4AbCZ2YatIQp4v6WgUcfNmKzl + rwxx95+XflJ23KjNBWm25MaTjdW/uldK5yyEnZkuJy8IXaW7q7O9jbfPN9LIjvYn/zUxr4b9loGCfWUZ + zX7pBvNyr9s2HN+UER3kntyoiObxsj1/asN5n5N5s2UBOPcioURVqKg1lGgLxdtCSY1/iheqxSlGKdMd + rhoSKm3LK8yr1ZgkiUaHCZDsGY0uDerC77zzziSaIdEJqpOvBwv/8ctfXt7SAhCK8GQrCwilbBCqSKlq + BBzyJ0AOFg4PhSh7tBlvcji8XIfb75mdeoZ0Lffddx8FBT/66KONFRby8sknk/BM+OtqYpt0taMZ2nVH + hQdQihaaCMJ8Q6XBQtiTqg1JVkbCrYgF1Mog3KLoSHGCckAW1DdSPgKuyZwALliH8jsWKw+Hmysrejvb + kdIPJkBQcCX/XeIdNvkMGVmwLA6yB6/TZnmvdH9zUmkkPZ65rZ3FRtbzpjU21gG6+k3IYKH1PRh9LEtU + MB7lcr4cbMv/0+YW8qsadvUXnWXG5D+TYdoffElEp/ifb45Tx2Ckk6gJ+ajcaSp9q/+nRi8DYLpYRwLC + poZ4gQcRdhgMyAE/PWHIwKgNlppXKaeayoajt1F0Fuuikq54+AVHeO4MjYL05DPCYTr2DZEI6W3viMdv + TyZvLS7+Tnn5lTU1lzQ2nNfWdkZX16k9Q9cOG3bKiN7zJ0++aMoU9X3osPPGjDmpp+fQ5qb96+sO6+46 + fMSwrcrLZsZjBLmSomwIQRGk3uWM2GNhcrgkCc2sqYE2ywUicWxsqCMYxtxDc4F6guDfhOBZ+PcquOrM + rbOmEOarT/Vs/mc9U7Ov4YXqR8nSIHicwbZCxFFgj54AX1Q+ywJ80XQ5QcRMz7c31p0qy3YqICqd3KZ8 + +r1TtQZhS8ah3tfLWBA7zYtTcK++dhnM+47nlTT6A5qU7EPxjqg8xpYRta8AQXpLXTWRooys6sOsfURv + DxoA/2jYn+KlKmQC/pdsV0CosBBQxEyKTKZFUcOytnBVV1X7eN9BJdZRKAUAg+GRQRYDI6SQqgt7FRcv + CBgVia3JPopwhhxjXw8W3r/ffidoRgg93QqbrXa50UIYoQAhNAvrSn0yWUUCM42FbZqEsRlhFYSCSLg9 + V7FFkHpm2223JWsoKUPxepIrYAOx8D8ffPDiqlXXR6PMlL+RSq2Nx1c7zi665h+pPmGotAfCattF822V + rFEJMwnh8tza0uLx3Z3tFWVcoKK5pOR2HMpTTIlFkaqDrPhxmaxABIfHY8PIX+o4ddHo0Ib6inist71j + q3nzqktLBx8gwRuFjsNOxTKY/v2VbmNePO0x8ieGhmnJSIA3rqyklDeBvxjNef9lABLFgR6t+mR1BtuC + L7lbmqllzsDkY14w8xfTmeEBnJfa8QGnsS2ZmW18FiHjrjq6tvX5KTaUXCKPyqifGRoqy8rLikENjVsa + 4LhkREABVPjAYMyJWqnvG10tFFRTHEIskPjLcXzKpeUqGCWrUMd4yi+4HC7oeadHwldGo7fGYvckEven + Ug8WFz9QWnJfRcVdNTXfa2y8uq31kiFd5wwdetrw4acMHbq2u2dtV9dJ7e0ntjSf0NR0SkfbsY0NB5WW + 7ks97ZqqPWqqFseiRBNO8NzhZJ/RGdcqKYmg6SBGc13c3Hdgch/a25qIhKFnCi4KwpkLsSDef4ZyG4MN + 8oEw17CcB5DmOBnrqDwXPQNT1fgwABjczelCFmX0n7Xm2b5VP6+/yQq71xX4rvu5mdX5uwjmCRBatla1 + liDF8WNHkUhd2qzeBX1L+3lVbYQbPNpxct15vL7wyT4U/VBZZf0m+Yac/kcP+1L72ZJJSWdH67DuITII + qDtQXcmaIISfG5QMJciprcEv2RSKN4eirepfEm1TdyLVGCpuccs7ukfP2nHXQ30HVVauLz18UzcZTyGu + KayLe1VWmiIPUpuJsrFfTzTC3957j1knRRVoxlax6IJIhMBBcA50wSWGaZTHThrf3uamaqZsQeV3fhUs + ROoGtfXD7ZPJZQG7xdK7du1aUlpveOqZ3914480UgohEriguvrah4cLK8oOQkmsHHnZRyawGQtt60Xwg + 5Cky2HV3trY3N1RSfbuzramsFF7IjrBJFeKZTEyrq+mNRqGA5A6F+JI+e0xt9cjamnJqdpOiSSdTqUyl + hrd2VJeSUqNPS0JO36JTV1dVoe0ykNN/Nx3Mr/kvVfYrV+AYZgP7NcDfU1dbLaYh+4LYpjRV0lhTZ8tz + ZGRhY4lotrmfjAvWx8zEjakq8yPjC+gSiCDEzql+tTHPfNdQ7e/LXkzJNfxkBlNaWF9fowti+NvJvtoT + 5o/n/K+2tkrVn8ricDYjVHxRZD6BndPhzvQOY/7r5x2Vkd0AoRYp+KhpjsotAmCWLZ2PKopG+0CocMgj + 5AKYRcZJ8pdZnrub550QCTO3uyUev6+s7OdtbY/19j7e0/NEU+MjVVUP1Nbe1dB4Y0vrFR0d53d1ndHZ + ubat9aSmpuPr646triLV0Zri4sNSqYNJbBaJ7Bb2yG22yCXAyZ1MxTEXOuiRXAY9Tqmmg2AwEwDBOfnQ + +MrKMib42vGsLkqJRvX8JrhA37aJcZd7G7Bwf2VwHPMU5Ki5U5McLKTbKGWv74CUJ66JYGmJJN/JVTgF + z122lH/lRPYn50/Tz/2JUKHpmunt+XzRh0FtMASbefrmgDSSP2m/vF3cTRIm6DQLfb6y/b+nfe1Gk2Fs + LPlAyMUjiEUHlDvISG5x1TzxawxmFBlgG87F+CB1hgtgJ6Xno5SVaNZA2BiKV4WiNaFIfShWq2InSLSt + VrbEyns2nbntwatPUUAooWxZub4YZDWKYF3EQEo0wt41NTYWwguxkZqsmwPGmA/GI9jXNu/+6Ecn1Nbu + HY3umCpaDB54HpQIe6OQQrCwKhqtJCcCeKDnmNUwJI2UgBAORSyKIDrh9rDbvePx5UH2uC222AIF0G23 + 3baBqWf+95//vHLyyVdGIhcnEmeVlh5XlFzpOEQ1iF4U8gqrg2pDuLnD/eS25sWora6srarA+Y7XqDwR + rykq4oq4QGX1JWtUJMLwgY4G1sskgJVViCrx69DJgrRtDGfFCSWkW6eOJvO7ddql4MbrMKnUr4INftl/ + +ofHKy7QIn9nttdmUpntykr9JvjbyFBkvx7yq/WvGalyVup5dDiMECZHDWiGs2w4zAx/ekc1lBvIlC0Z + SdvasFiXZw+7mrlq4SLbs83IkUMp9GhG0pwx2vyp4VPm40RkxpA0yfcMW9LfdfFe25EWYKTncj+HdLZj + pDXAo/WiCo1KdQ4X7JaLPfeAsHdmNHJdLHZ3cfHPhg9/fNGip3fZ5dltt312k02ebm5+pLLyxzXVt9bV + XVVff3593am1NSdUVhxdVromlVodjx8SjR4QCVODbE/KkJHJWlVQ8ma4Kj8iho1uz20F+D2lFyVZESYQ + TQddpc7SWC/8D0N3RWlpWUqBEA4j8Q0HF2vuhwKDjvZmikAFUROZO2fgMMA2A4c57FDPS3D6VlWRXE02 + gklJlY9Rw4dNmTBe5Mr2/EY6kOqEmqoGf/YFgX6AoAAbU1Yy8+XLTU2fFaiw3w67e8uvNEbstDkwYHaU + niwbBK+P/4IUfE8Hv5KjyF3KHwS4FUo4rS269odbxWRFm23U812nHP1s33/gR0tj4+abbtLSxEBrLtVV + 5XYRi8apOAjg1YeiVaFIdShSp5ZYdSgBIraGYm1uqqO6Y3zHaKo5aP4tqsVAqUHmpLCSLIacGTqxNTF8 + RMXtQ/G/IBoBQf/ll1/+8MMPoyMlpmLjqk7yEfG1H/zgsMrKnWKxJZHo5pHI+HCYJDgd2bk0y6mhXFkx + oaO9p6amJZFoiUbbNBZiSwQLEZssjUb3Li45sLh4m+HDRTuzEVPPPHnUUedpXQ/ZXg5IFe1RnJqDzsXP + rDYoIPQ7q56X8DggNUizixyFoOIEBREBVBa+iHNUJSmNx1Q40jqWj8jvwazRqsYCCDp4eCt42MGszGF7 + wZ/+vNEaETRu5b5j/ugjhiT9u8Ce/92MFFmjVN9/qOi0pJX5U0/3821fAngyGmb/agZcf0fLcZU1TBs3 + HmcE8vVA74/RAga6pFTGgGlgIMcAaAMhI3h9bU1tNY4C35Do0z6LchEzSlLNAHVUFD1QRMLPYkdJtDBd + LvM8YlUviERuisXua2h4eP78J45Y88yFFz536qnP77DDsyNGPF5a+tOS4u+XlV5ZUnJuKnVCUfLwWEzh + H3NNQixcd+ewt2syuV0iDgTOCXtMXokFYkghd1kz6W88j1Q1FMejfBfeQRoQjYYBGxu/Vf5VGAS5YcUm + 6itIs9Bd632ikv1V4N84RnPmAVbQhf9QLO6t1ujRWTi3+l5RXgoq8kbU1lSTjlUejRA/s/A3b0xFaZlO + 2u5/sudJhTuZytLe1qznTAUNFbKX+Slrqme/CwG8+XZHAUgb8/K/D+Zl7H8bbsL6TZpN2/zXY9CskMdC + P9DYWaBpPLLxo0cvW7xQYoX9D2lFya8do8pgeShaqSAwDB2s0wQR/GsRFIQsohotbup1KjCxWUAoBtLy + kNMRT44vKx8diUzWia2p7AOd2g8sJBph+nRBkT322OPCCy+k+N/bb78tnravNDH3uz//+enTpm0bjmAd + RdQ6DiwkaaHjYDaEHmFCJP9vIwmcWluG1tVNbm8fXlnV4CheSJj5GLAQDWcisVtV1a4JZa7ZLijvMHv2 + 7I2TeubLL3+2evVJ0egJVRWnDe9Z3dEyjzBkjcS0kOYVjJ3If7BC0FkkJbeUamKCIkXtQT4WvkjuUKap + RdEoc2qTO5TdGT4gNIPuZkHPgVnqYGG7ScZIuOHvz+CPIBgWQFpmP394yFDAAoQyf+Cxx4K8cUdgLGsn + ti8vLWtr9oWy/uCXaxf1kU/v6b/XirT4IWs5QGg4ogyj5mMsn2Zste1+MsT7RQSN6CUHDyyQC7x9YQ97 + kTbtGiCUL0Kn1P8BDMZuZFASGKNwCHFWWdmo5ubRFeVTo5GtPffwcPjiSOSWaPS+9raHt9328XPPfeqO + O57/9tXP7bffM+PHPZZK3R+N3hyLfTMSOTUcXuN5+5FTRutrtlM46lIxdF4kPDPskYBmvOeSj4Ykuq2e + R4ZSBDJYRJGnMtXjvAKEtARWF7TZb7mN5WYSIF+4OB5TbVWVjl5QayAiqVgRuaol+sLGuZw/rUP53NoM + zb7VWrdHZDv+tCqQjPoPL3jqkjxakXTLfi7fbUS0e5gYCYKKSzZTzME/HwvNC2AOYk3sbBzNeVPUn/LE + DXYO+A4OuCU3pa2tiWzjAx5qI25AxiuMJYiBCx6TNhPHRIe3r1/TwRINhGWhiAbCSG0oCjXEWdjmK0gh + Som2mo7xLSOmehWwKv0RFiKhbAy1DYn4tI72caWl6BIRKFLwSNxsK4HDmpoFQSFciv+deeaZJGCjPtH7 + 77+PfOYrDbf/50cf3X3GGft1dBAaARZOCCva2u15bY4DK270wp2p4vporBK9ZTKJirIWLaUWVQoWbkIY + og4LkdQzO7a3z9b5VPkccsghJvWMlFhaD2Mv1ZfuX7XqzPq61ZUVK5KJeZ7HrUPVAhgD1WVWASYj6Sz8 + aPXURJ6IwKEgYs4i620IlAkTWruGemzD6/zJt/gzEum65+tmNe3r9ZPXjH/15M5IYGT6m0E+A1f2BdiW + omAg8H/3dw8OY82mM8MEl6DrCtmgl/nVJnzsziWjz7Tn/nmEzwBgBsPInEVyFqEUAdb5v9oELoeICJsU + FiIDdB7tU6IYiY0rtI2PGcFegncyvvv4l8MI5U+wkGMChepP5CqRyJSRo1dus83WUyZMLy4iX+hqz7sw + Er4pEv5RU9PPt1zy6AknPPHtbz9z3nlP7bjjk0OH/jwWvdt1r9NhFUd43j6etyJMojVyWXgYQqYruQ25 + 4xX+DSNftue24BQMA4FeOTZPIuiVJVahoCKjEr+R0cLkNFtlftNGYFU2xNwiBYQlpbWVCgjltmA/jfKf + j/f+E7AhMOfuBXfeB8EcsDRgZp6d8QCauY/pTXLD7UlV0KP8Hpfd8TJ2jhzaZ3XdAjM6a5Vv7fCRM4sI + ZkgTv4LmVioJQdYCw4LFIwfw3TFZaW1pZAq1zoPLQDvIXS24FXYB3MCDjOBSzwGxqBdT2WTAwmi5poOa + EUa1mTRJWhmNhTDCWJuX6vQIIkQ+Kh8z8oqBtCIcbi0qaotEcMXhkINOwW8ECwkVP7C8fItJkwRCUJ1Q + 5OG73/0uUlLykX4NZtL33333hqOP3pl0TeEw75ukHsX9PjSe6E2VIEVDoqkIovaigUA41bhKsJALQQEk + qWeITCc/yy6NjXbqmW9961uPPPIIV0HNo/XEwv/+986DDsKMDNZyFgoo4qQUjauQQhNBobQcYsvr42Oo + oUFEqRphFo5QEFBNpF0/fY+hY5BlUOidCkKo+JVMouZAsdB/l6ZDNzXUUbAt0G6pzRnKSRAj+7IBI5oB + RSx/9jzUYGKftyUL8IJJtD5s9kiR9TczWViyNkYV+ORYPg0ftfFPdgsQzh89A8zznUy+/c5nA9nb+oAn + Q6K6OAE/xTx0ufl8kDOIyLhTWVEhbpIcmBSqZ0GdsaP69sTsXw3GKDGh4VuKEUbCjZXVYzraR9XVjI9F + lY/Qdc8Ke9e57l0lpT8dP/6hFSseXbnysZ13fmzTTR+qqb5PVYr3Lo1Gjgt7+3redmGP1GvTw95k/T72 + ei6OwC6UnxxWC3AqVSo1xDhAoHIKMl9QdS00sQs+ciF+CwOzsPqbaVNdVQ2YZwyn+ddr3+uCkwkz/8j+ + 4pu15VnYj0AOSDPUdEHJkfzphXUim9AbwMvigva8qy+CaLpjsHHBnuyvDKaA2X09A4QGYv1ppXRIf4S3 + xhp9vf0xRU4AD6Pgtuyu31kJiFSfzLs5AG4OhH7B7xwZnNMl0tYnrZU5DS9TeVlJJBoLuVFFCilGH9GM + ECAEDmOVaok0hiJtaoERhvUXQJHIQhsIRTVjFKQqrFt7ucYgnAmwkDAGeOGqVGrbQHUyd+5cGBUuQ8rm + vfnmm1Ts+6qpIU7EP7z99rVHHrmiqQlqSIwdkXYjiD8Nh2GHmCJFTgIisvAFvihYyIVMpahvkIaN1DO7 + WyIgST3zs5/97Be/+AWITtGl9eCF//388+/utRcaV0IYEelMQSZHmhjdJAwKJqbeqGb66SyClGIpRaqs + arZpJmUv69cVebepv9PXFMxuEkE5KhO36+Es6e7uGLCn0qe70DQPpWxOhvNhqqtSTqk8LZnKhJ158+WV + M2c33y3/v69tCUYE2yPYHxAqc1kw0pgRJ3ucClxAwWGs+X4GPrPZnoHDwqOkkXcGw6hP+0hIg3GJO8lT + IKtdlXJBqfbZY3H2WK/AQEBCAWGWOsaAR5ZkxgYVPcSocuQ2NRTXYwCHChfhy0Xkr1I2THc2fr5I+ASg + TgFe+IdVlfcPG/bAhPEPjhjx07raeyORmz3vynjs9EScoWArD5WpN558bCQBxlsR9lrCXlMk0lqUrI1F + ubYysoAqd6AH/iHJUeZQZY+1mV/uVai6VCoVmSJ4mhEqZhO0378Qe/aQPSHIXKk9bzDfA8bsg5rBP5RH + gZrDf1KcnlkIA7TeJoOaBg4lSt6eJAVokemNNgTm2B70xvlG1Bws9N+D4IiGDmbQ0Z4H2i9vnutdlddm + XotUB5ERFxVgZO4ogiJ0VM/wrlay4KltmIQxCHBbzcFlljCYAWQwYKiBVhVrxKhvjwCD2dceLpjc87jU + ERgmcRNCChUWloYiFQChE62KJOqisTbHaw+5GgVZ4IVZQCi3OTCQom+Eu0iKkxYdxzZWY+F8zQvxF0J6 + kIft0t09e8YMoYYkbSE4DxEmdR4gVeRtwWtIMrb1wJLBS0x//corVx955K49PQYOYYcYS9sdh+gC8A/4 + wUoIKQTRBQuBJbJgCxaSRk6lnqmuNoGSu+66K6lncHy+884765165vN//eua3XbjLlENY/NwmDLCxPhz + don3wMNnEq3ldMDgIeR2ADaLRanpnOTNFHTsn032B65in9RT4P77Gb0cu5MkTqNhDNT5fbRgr83RqnEW + joAhqySFvrUAcDNSMwCZH2QbcyvMn9lvuO7t2d7EYI0/YpiD2AhpDVtZQ5UMSdavBuQy5k1EnkGEYtaY + GIx99i4ZH1UOBUE7t3DBrIXzZ8IFuSFNdfXIzXPoSDA0+/Agxy1E/vwRP88d6NNE5f9ToSAJaI1so0AF + x2MAMAED08ZSLV2BtyHpnJ5MHNDccHpzA+Xdv+V5N3ne7fH4D1JFP0gkbg+Hb3Ddb3reWixDYY8cpBhC + qSbdifHTcxtIFhNWQpiKSLg8Fk1xOqGAEDt9Cs6sEs6qlqhG6hb6X4ILlHaSvtzHfjXg+hZjg505XzJ6 + okLkWO6ePQ/IbK/CAAKIVWKxmJ/3R5CvEE207d6Cjn7PMdMd88XueMZ8avU0tXvONjIKm391Hy6omvHf + ERsG7FfGfmvs9dxTgBB/G93PvIxZeEkuQ8Iw4gnSHjF/lePrJ6UEqGY2yUHWO4U3zzxfWars81r0tE7g + 19/G5JTx4ooXCjUMl3mxmvKKrrJSSja0qxydXns43uEk2hUdJOJerlPsM7aBVFKcVEcjXcVFbaBLNi8k + BTbZn1fDDhsaFk2dKlhIXfjDDz8cavjjH/8YryFB99gYRUTzlcLh+7/8JWV79x41ysChTE47HAcHIQQR + RAQI+cINECxEBIQgFl/jVhoLST2zODD24vg8++yzSawKu13vcPv/fPrpt7bfXgykJAof5zioZsBmiawv + mGIG2yM5Ffsq/sDTMdle1ruvcBDcyiYRQ//HYbOqikrenPzNmLih0Rr8fDARS4wdPrK1AU1i7gvMwXXq + Tb+Ap7EW5wOhjCDarKpaZI0gShSQjXb5c2r/99wNLRVMMKj5eBbAm9qRW9FQU1deUiZh+/lDnqEIgliM + GjJwWBim1nMoXrSenk5KBmpFqKpcKkQv3y7XB8vJmDSzB3cz0GfQUYBQRR8oGFSnAMuJytcJZYxbTtBI + 4ROMDQdeHeFJidiuXW2njeo9KpU8RVeEv8p1r3H517nMdc8LeydGInBBUJAE/WSHhwKCfz75A3o1/4vr + A2ryp3VEGtdy/tX5Y6VtNinMbGl2se5GDn20UbAw2mkc9GcSwZRCHpPHiC93w2CeDPeaoGdJaSxjgJnx + mCeccRXbXVG/s+rq6LF2t5GeLF0xnxHK+qCL5/C/LO+g3iwHOIN9LeOKbGYgTUfsZL3TBhFZq2pblpZR + HMqGWL7TKsgxc3F567mhOo28ksvKyzjIQQlYj0fjJJWFk9IzBrlX/mYDnlFjd5Ta9SGkhLgMEeBHyiOx + Bi8MJrC0hcMdAKGig6Rbw0fIEemMkmFZXVKWcMapIIdNPMbwDYoIFs6IRBbFojjGRXJCqPuhxcUrRo4U + LBRqSKw6JQBJTPr6669TERf5CfEVXzUc/uODD+665JKDNt0UOMRXgbFU2CHKUuAeEGLhBmClNFhINW2w + UNKwkXpmyfjxcglbb731qaeeigiIuvB/+ctf1k8QCxZ+c7vtIJ1kt8GXOdp1hkejrZEwBlLkSEIK1fwz + 6KT0qrKyLPvDeveSvnbkWes330/E0P/xFVErGE3BfKKlhSyI6v0e3IdhEI2fXRTUmo36B7F7doCCBt38 + N40xBV8jubik8rV8GGkQfSibrcUk9S9ZU2mzvRp9rD+yhyQ1tAXDk0HEEP6Shmo/+5c1omUIgW0yZaBJ + EZkdg19lxmibXshty4y8GUlnBjiD8ToACJ/QGAywR/wA+RRoZEZ8gDiAH8O9FA6pYL1gM77QGYpiCcEj + MBn0ghQ20V1j0XmxGBKYlWHvyLB3Uthb63kne+7RYZdXfo9IdItIdErY6w57DeRBxpcG/sH/NPiRIIkc + prrCkNC7DP4JEGp4U4GDzDAUP83GSPOn7BiwxixWl23ptX9S2zNeG89rMM+QO+Pfn5wJSrA+EOdqCho8 + IDPvMSzfeAdzgND0h0wXYtbZxbSntZH4EOl0wT5ZFtEc8ymb0STJxufvpZso33kpW1udSZOcpUudgw8O + HXts6IILQldfHbrpJrXceqtabr459N3vhm64IXT99aFvfjN09tmho45yTzi+4tijhy2YV9LZGSoONJg5 + ShkuXYmfCwQCKvDjnpDFhZTXySQRnFEyBvKFP9dpIQdAfX1pe1sNdgqOxovLZHvwRSm4gfL654w93Ctd + sc0XMUA66V1MAtX4ChyGOVMi5KVCLpUrGqBIFDUhfMIta3fKAkaYc8QsLGQ6rKPWsJGChcPC3hbNjUtr + qokWpyYZsfbQKYKH1kSj+zQ3LwoysS1evHj//feHV910000PPfQQmcyAQ2GHX7Wx9JOPPvrhpZfu0ds7 + N5WaW1GO5x922O26AoeykJlFsJDML6QklTRsu0Yi+xUXLwsqT1GF8cQTT7z99tuhtng9KUq8HsEh//rb + 385dsgRj8gwMpJHwhKJkTyyKgVRFATJe6HqkBggHhylf91a4Bkf2DrW1y3QPVVBpILe29NRgaus323j7 + ZBaZ8xL6U7FMF/fBzFwzLyJJiMePHgV7tldCdIKZuDqsTOj1sCRDR9Y8uiApDMBPhipfBCiHykSP5Wjo + ZawMyJwZ4FiHiF+PYupjqJ58kQ/zTmzFWClNUm0ZpgP8yzGEZg3ihtwEIGk29sliDvD4uKJh0hhIDcYw + XsQZpAWKtPcO+zvcjoouJELbNOwtCitFKNlhdtf/bh/2KEO/WdgbE1buwFqAU+8CgrIv+FdVXkYgI+MR + t0DMmxae+d+l5dwitY1pVcAX83dRaBpgmAzH2RTTIK628UaUIFYyzOkH5IOfoX3WrZaG5HJK85j8R6aP + qeo9BQnT7VJQFrDZuKi+00WROy5aOHPK5LFBvEQGCANc9DupwUL2wm5JP6+prpJSiwr8IlTVCE+YEDrg + gNC114buvz/0zDNqefJJ58knQ489Fnr88dCjj6ovjz3mmOWJJ9R3/n38cffJJ90nnlD/Pvqoc++9zjXX + OCDowoVOc7PCoVwI0AWu8wtWlJaGzj8/dN11zre/rZarr/a/6D9D8u9VV/FF/dvPIhtceWXo8ssVil9y + ifoOWh9zTOigg0K77RbaYosQF9vRESopyWoet6KvShrM5ajDZeIomOFVlpYXxZNKVkGWGVyGylhKV0/G + vNIosayRpmR1d/2QMUUNPb5pVOanOle64oVCpE1AhdhIBQuRQY+gZixF8opTC2Kxxa4LhCAlxUxKBO6h + JSU7DRs2J4hJ2GqrrRDRnHvuucAhCpRXXnmFTDTkuUZKgw7lKyWIf/3jH++56MIjpk2dl0pRyWi0FLV3 + HElOxsIXbJUEhxDqR6mKLVOpHUtK9istO7isbOsRI4QXLly48JhjjqEQ4wsvvPCnP/1p/XKrfvKXv5y9 + dCm8cyrNCIdRHqnUMFR9q6yoLEpiWWCax6CBL7og/fq6cS/7fDRpm6VbHH/UqqFDkQ/39+mLHNqevAD8 + fEONxdgMXPnQqP/n46hBMtYwKJASBddaAHvKcxlxwxI6bwAPr1NRLEkwQ2ZCnWU69Wfugnn2J4NUvuXK + V9Do9bb5K8doJvv5Cos8G5oPh2b85W8qF5I7NMgfVnCkFtOlGaMzWBiAWSbkINjSbG+sncr0Khlb/L2y + YUkgx+CK4oua0sHtiHPA4delAW+qcnV7LOAfLHCsJoLNYa8KFUwAgcoEqvhlpJqOXUGhnDhkSCGsdXyD + cNYX/yrYjEZil2PwzWeEfgstpAwAzDYUi9/RB0WOpn1O5r5l3WR+BaIQVuiZR/79z1rDNhxKsu4FPUH3 + h8zMJsdx6PcHupbKB1tdSZybMbzn9Do5oJmH6e/QtVRbSzPeBy0eARed5cud664LvfCCAj8w75FHQg8/ + HHrooczCnyysf+QRJ/jXAfP04j72mFoef9x74gnvySfDTz0VYeHLI4+E77zTBX5AHVvKRiPwoVAspbqy + inth3vyGhtDzzzuvv5585ZXUyy8nX3op+eKLiRdfjL/wQuz556PPPRd99tnIM8+E9eI9/TTn8p56ymCw + guQnngjJv1yF/g6WK/ym8QLnGsv9C/zJTwDd0IknhlasCI0dG0JjAMnDw0Kq3MwkOmgca2iqWc/z0fNj + Lc9XWBh2XKpukf8wmvDiSaw28YriqtbKlmHxmiEZIGTq0dhQS/f1Z+V6HOKoFOpM4RfVWIhzixiAVi88 + NBaluubUSGQz6gEhn9FmUgrhUiPiSFKrVFevGDXKiGi222474BB2eP3111Pz4ZlnnkGHAkFEiiKI+NVx + xN+/8cZ5u+8+JxbbhCq+Or3TMMfBwMugDhDyL1io/IVkz0kVLUomt4rFdib7TCSyYsgQwcI5c+asWbPm + hhtuoNm4PD/99NP1CKv4+5/+tHdnJ6qZccR4iM8yGm0uKalMJpnANDfW9Q4bMnXqePT9///CXv7ZeY3J + Zjl1yviKyvKBgLBPM6ngU/6U00c/zRql+1r4Z/qz7wWR6ZnNIAUgGUWKk0XU/NbDiWaZms9hEhF1DwZn + hjwVuWEQL2P8zMG2/OHMNoJlTGQyzmU7lnLNZcbymQNmsq+M9fZB8niej0/ByK5siQZUrPFduFHGx2aD + IqGNFUVlFUXKkqxgRteYtPmZASSzkjWChZA8jBZAXaOOggARu7QilNpJAGQ1YYhYpDUKCqXzF424ChF1 + atB8LqgAT2OeYLN8EVkMf6O/UFoeYYrBktdInw7mQGzGLBxAr3VLDdr5t53mATMMd0asqzb2zbb+pMcw + eOuL3wd8w6k/b8rtJPgEzVPT+/oGhhz7pwWN/jb2ZEsP66qPYQX91rcUBAISIN/Pf67+FdjLWSwUVEAi + KCgQaFDQAOHTTwNaseeeSzz/fPLppxM//nF4zZpQz5AI00d5zXgcKL1Li1WecfPyYlN99lnntddKXnml + 7OWXS196qfjFF1MvvFDEQZ59Nv7MM/Gnn44ZlH3iiTDQCxnVDVB4HAAzUC1o7S8C4QWvCJrLwlX/6Eeh + Cy8Mbbt1pLNlfTiDG3IiDkY4Zsd68aJJSr9ESyLxKreo0S2GHOmPmaeYa+Zm0DEQtCqLgM6TqZLOuF5H + qrQjFmc/yV6mwu0dZ4nrbhuL7RqLQQ1xIRwZjR5cW7ttkOEaRKHgw4EHHojvECnNrbfeSqDFc889R0qa + 3/3udwhScCJiezSguBGVNRzq4e9+d/fubnBIgg4pum3gEH7GVRDzTtkmNLGztc7ThNubosQbEm7/z7/+ + 9dp9912RSnFwuCnZzPFT4nNlSgNpLytK1ukUh0wbBxkx+jWDZf7Ma5ANMDjX1/bWkf2vARwaOajl9AtM + qXJYIXISetE9pGPsaJ6qH/Bkb8B3sFwK1LE5Q3QyGtfzRH0QK12WP6blxcKb0SpnY9vOKd/NkGcDpPlJ + 2+jETGezDftP+Z7FRQKQM+zQOMwEOQxYmn0ztkeBGVyVQAvfcT9TGSOVUkmlg30LGC2VXFNjFVwOkAPq + 4HywQ6I9ZCnVAMl6vLJApkFBYE8bD30gLAyBivNFrUXlSgUxZY1mhPav+rv+Vf0Y5E/LBn7/DsjpdO7W + zA00d8+GpTxDqNqeNpB2jrA5nbXA40LIdMruwWPNSGlsdAys4pn5E7/SAtFa64Xv3M8IN1OuwOpmpgf6 + VgmZnplxWLrxmDEOGPDUU6Gf/UyBQUH8s1dqgFGLgRyBQM0Fw08+CQuMAIHPPBMDtDQKFr3wAtyu5NVX + S59+OnXNNd7UKf0JWEaPBpKdN98sf/31ytdeK3/1VYHDEuCQQ2k4THBwDYdRzsVJAzj0BI8tLMxCwYJA + mI/0P/1p6NJLQ1OnFphbGyATI3bOsMPooOgc8dBuOOmRDpVRIBJF8ePFi0uq4yVWntL8AUuejG0jZeym + 6F0VUWVaewKQYF3E0zaL7BIN9Ye2te4Yi+E1RFGGoPRo0g/W1m43ZsycIEPp8uXLKeR01FFHQRBJ2w0i + oi8leTdpr6GJGE7xxsEUP/nkE7yJGxEX//jOO2dutx1QhIBzgueh9gYLcRPSfha+gIXkBSVvwEwPp4iP + hTs3NZnUM9TckHD7X/3qVzg7Bxli+OHbb186dy6SIpypc5DwUHQ+iKPA1Kwq6DLvC8QygwSY/wc3GzRY + KmCzMMyfgdm76+9GPpNhcYFZVe3CgBKkv1KDhcpIqbXg9sdAnaxkEAIDICl5JlN7Mm6+56xUf2Kyq6oq + zy71kKsqzEHH7DFXZTCgNlsiKskz/bE1IHM5birZIGuUD4hRlkVUAECL3ZSfTxYDdeq7WhTXoeXUcxCF + ekGUyl+pdaRhlC/kAE3yr+Z/ogX1oyAsLoj1j2IRHF8AuMDROEJMJYgRtNPfc2HPgKJsAP4BJPzLev5V + x8yCf1sN5GI0QxCLRFa6h9hkrYmF/z1Y7RtR5VkgrampqKKyHfF1XBquJqwIwb4ZA2gWCmYLTQUyLRRU + EBhgoY+IGhTlaPYkTP0pH+M7kDWNjb4JERQUFtgXFzRGUciTQUFDBAOLqKAgEBgDrp57LgmTe/HFYlDw + lVdKX3+94p13ql97rfL66yPjxmWrQC17zuTJoZdect57r/qdd+refrvmzTerXnutIoBDxQ6BQ42FQg3B + QtBXeKEPhDYWAoqCf/n/2hAoFmC5fM10Q3fcEVq2LNe1yR3joZNXa7NpU+AWuSYozeV0lkonpeEwTk/R + VU9U3WCkNAN+xF9oUl8yfCN6FJchMIoIUxU8wkZaXLxdRTnCEETVBFdgKUVEc1gkckw0elhV1Z5Dhhgp + zaJFi3bccccDDjjg6KOPJvSQGPbrrruOAEQiFh5++OFnn30WreZ7770HWfzggw/EggouYpPcELcice63 + n3320tJSoYZoSnt1SIPBQriawsJQSLBwW+ILUdDU18+dNk3MpHvuuefFF1/84IMP0rb+QwxpJ/beX91/ + /0Xd3UwISGGzNUDoeeS1yQFC5i0FgZCHqkw1yvv1/8dn0HLQgo2j2ahFCqIjqctQnIrUJdjAjAL+ikBf + Y/7M5YWMJYxfBvbMTFDN2wJVuvxqhhhQUBS5ehSSn8wA5H/NI4Wywt+S/APU/GS4l8PaVC/YMSNaMUxC + hl3+hAuomJPKCgLXAqyyFTEZ86bl6MqgmtG5GOrnR8RrKCLei6UfeIPo1KjKCmWDgUBjk9SQJkyLB6oG + cRnKDQvUgOdjHjH7RiCTB4S+FVSQr7Wlefq0afPmzjFLjyop54NiV2fHzBkz5s2dO2/OnC0WL9pnz90n + jh2rg9o10mc7NYPJgbgnFbmUL0opo+6y7f8zoGgmClkiIyYTOr+ocivqa8rMReRp9mEDyKxnB+2RjTQ1 + Nk6dMmX2rFlz5szWi/qgfNG3zngZbdWM6pMcn7cjEVdllfjgF0Tzif9MULAfCAxQ0HcQPv6488wzzrPP + us88o5xzxi8ICoJMgoJQN1AQJgcEQuzeeKPyrbeq33679te/bnjrrfqLLw6DwfnvLy/m7Nmhl1922exX + v2r6xS8a3n3XwGE5hwJTX3oJLEzCNQULhYNqXpjBwjwDqW8mHZDvmvuAlfiuu0Jz5wbmTClKVZzC3N1Q + V0sZCvqAonDZ18BIKz4+lbFZGeQ83IZ6gMXFkgkXyYxpAq30ZnMcwUIDh2ImleJ/hKtj68PxJsITvIbz + HWep627teUSUCxweHo0eH48fU1x8QHPzjiNHLtDQQucg7nCnnXbab7/9Vq9effzxxwOKZPGGKd544413 + 3HHH/fffDwPDgkoMBqlecNERyQAbAxcJxhDP4roaUZ+7554d6+tnIV3RHruRjgOK03jgkH8JexdjL1hI + /J9oYu1w+5133vm8886DxWLU/etf/wovzI/9p2208IVLLrmgokIVo9AH2YY4DcchkJ/TcbuYQ+BwZUoB + EBZUjWLzi4WxC2WCXr82POTRqxDvwDGAOY+300TXGNTJmNCDyaz5CTdDIhrXYgICGyjjEETmYE4oKWlu + aMg3XBhcFBRk6KH78a+ZIwv8QBJoXgCBuTFVBhoN/pk1gkYGHQMU9NcZeYsByJyBjw0YIlF/COaJndPC + Px9hM7/qRNKqJH1RSnMTlU5F2xslnNwifEL7giQvVnS5+sHQFxvA7NE/MAkq8tEHyCk8QFwwY9OpnR3E + TqnDGhcdf3JRoHshDmf58CzAU+hITs/AVqkPlXXqbBzNUENAVHjeki22uOeee8jcZN6dSy6+2HDElfvt + 9+KLL9qv1XFHHYGDRtyc0v6+4NymwjYzNrMHw4btLwFCmsmNWiEOzoAUWg/bdAALGgUj9URBkb8ttliM + rQvTkX0Vc+fMoaKFsk5TMcpXI2d8h3R7+PSkcWPqamrE1b3lls5LL/koaHQx+aTQ9rTBBZ96ynngAee7 + 31Wi0Ntuw6yKVsU3imqLaFyjoE8EYXJYOIHAd96pBdV+9avm3/ym5YMPOl58sWGPPVSQhnn7zKu9YAGM + 0P3DH1r/8IfO3/629de/bv7lLxs1HFaDprBDfIc4DjG3wjjxGnJS4YUChMILDRBqRpjlLCxoIDV00BYH + obIhPqSryy/HxrPCLqTCqMQIYi0yjGi4U+MtyCWlCxKoabApwDioYucR1Jb34TGQ7YYZpDmEOVAOFqLu + QESBx0sVUtf+tjE6Vn1zCKIFh/smk4cUFa2KRJDSgA1Hl5SsamjYpbd36aRJ8zbbDESkNCChe8DMPvvs + c/DBBx955JEnn3wy5lMYGEWAEZ1SQZdsL4899hgCzrfeest4FtcjHuPNRx/dr7sbQ+WmWkEjWAgQop0B + C/nOJUjqGQm3VyGGZWUm3B7tj1S3J9weXpiDxLTnHx999PCqVedHIqdEIkcQkqEZIUA4S5cnxAxr6vRK + KGFf4RNiPvna8M+cSGkWMKEHvQeT2pIt5o4bxzwn92PYqgCMmZ75czHlk4tQRF7UsLKJOqxlAjL4p7+Y + rTKZLIRxiJROmbB0kmgLCIXz5ehgsrSgORwxgLqMYyaY6RvJQ8bgaZMAOZGBOsMScuyfGtUUtoF8pcmi + 0kSSvCp6UdnFIq4jtfdAecNXGHNTiSKELXIoxl+pTmD+NEY+AwA+GPQNCQquAq6m0S5ZXVXBvzmAJxZj + ptJZ0hXNArWGBZAzqGkgjZDQ0rqqamUFjahEHDgh7d2FIwpZlDYINBognDRxIpn6bbR7+aWXBAgJcd1h + ++2JWWKWaVBkh+22S6r74QOhhYIZlNVMMfB9SvY4bSJmwgLo5AGkL4uRQwWgyNxLc0GVaD6G/UCXd7ZN + 1jIHEnAM5kP+hEiBqAAhlwzfpdApwkAbCOfPnTtiWPeMzaZUVijFo20dFVqCHLqxvk6iLKCDt9yixJP2 + 0J9PCvNR8IYbnL33VmbDLbcM7bRT6KSTnPvu8555Rrigcgq+8AI6z9Qrr+AULAO6MG++914DYPbb37b9 + 4Q8df/pT1wcf9Hz66YgbbywbNizLGiUv+PbbK9PoX/7S9eGHw95/f8gf/9j5u9+1/frXih1iLH3zzWpM + rFDDAAuNjVQpVMVZSAgHC7SVJQcI+5LM2BdubggbwwsPPzxUVJSLfPlYaK6E8ZT7q4r2YB31YkVUP8PY + 7yTCEXDM+igbjkripVLSFcoMmRVWwfAm5YGEGuI1RA+JGlN4lUrp6TgLHWe541DOcAdVqFpFWaAsXR2J + HKUR8cR4/KiKilVNTXt3d283btzCTTedP2sWhlMSeYM3ZDuj6uGqVauwoBpcvPrqq2+55RY62ZNPPkl4 + IogIGiG0WScx55/effeQUaOoOYzLECwcZWEhcAgWSuoZwu3ZhviQXaiylkwuDUIM8XQSbg8WwgtxZ0p3 + BxFBwQ/efPNHS5ZcFImcgU04ElnleQeEIweVl6NHxegqSUfh0Nx1U6f36/cR8iLr9ImFveI5Gk8GhmHD + hjQ2ZpWz4K2gh2QMBoHs00yYBNgYJbQzT4idzMkCuLSUooa35VA9dmSMFiUzrUXApuuj5n5s5Yv9GwBD + EVpyKmodqa0I1TNxqcVaXVldpSZ80vMVe9Ib24zQDhqz1vt4acZKv6ofgEdZc/J2UiFZl7plIdk03ysT + 8ZbaqrJUEV43STMmYypWTUIpBAhVjk0VeIBYWyqzZ8Qv/TAhmyFlQV0GxjQoZGocKsbDWYTYGYVLPpnT + a3wDqZyFNUxuSD4iRJB2avJkq0D9Nhsolb1AMkG7rq5OKrh9//vft3GirrZWvIZbLllyySWXMNk1v8Kl + jJom+0rVqbUHMQIUSzPsuQJrcOvW1FC3O8NZ9U2wb6x/W6xrURelY8lyjKuWZMYylprZEltrp2ZkRG8v + bhQsW4SKmavA2FtbU0U+eoE6m2OqJ57UIiZFKxU0jx7lPv+8LxC1h/5+lKLEJNx3n0ME3lZbhbbZJrR0 + aWjTTYm7D110EZZSQhrEIgoXRBqDObQCFBQiCKv73e/a//SnIUDgRx8N//vfR33xxYS33+5ZtoxGaiIV + vLVEDu+3n2KE//jH8E8/HfvXv/YKHIKgUEmhhvBLixcaf6ERziggFB0pDYa/8m+O2LUf1UzOtAAgvO22 + 0NCh6s1dMH/+oatWncIHQWbw4SkEL7XPKLi7ajoI43cQfMVT0aKyIlI/FpeUlqlL1dYSkpyoJB0sNjTK + M8tao8ezHGrIsM6RCK4QSylw4psZXQc4nAfT10XbKVdN0CG+N1KVHoTJNBY7Kho9FkSMRE6OxdYWF5/Q + 0HBIW9sew4YpXJw+fd68ecTmAzwrVqzYZZdd4IsHHXTQEUccAQ7xthDhh/oUoc1vfvMb4PDf//734CMx + fvfaawf09CyMRmfGYhPDYbAQOkuzASqwXOQzWHqnuS4SG0mvulciYarbA9Wnn346eIzNFmstpwaMf/vo + ozePGUM50zOj0eMikcM972DH2Z3c/LH4TNeFDnKKzki0PVlU4XliF+Veb8SAel54IpB4k/rnkbzh8LyC + QDhI5yC9gt0zLFCfL4sX6jXMxsWZ5wOkRRz5Sjvlpxxks9foUUZtAwsZM3IEJVLlzTS75FhBM7oDh+QX + Scqfko1ehh179JHvHBxNhMo+DGCHY8VkoogoEmD8gjLGBWv8wSuHJSirJnFmmvZRXYjsYiAfyTbJXk2u + MsrvUXtBivBNaG+bM2lsLVlqMBLqNC7i8VL2tGCk1ikcM7lA87lgX1bBgITZZkObzxkBix+WwIkMkzMI + Z74Y26mBxoDzqeNk20Uz2JOzseGCsh6Q0JwvNqSra9asWdh78CAYnIAwQfv4df68ecx6sf1YEOIDoYRD + 6jsmups8ialaExS6Vyb92KiRQ4f2dCqGHShuZC9usRxMQ6law9nLSopxRooN1hLpKJ2OBIME0JjlDDa2 + gcA0Gunq7MTpw5hMLg4bzrGTs+RoSmkwwT+IdCSZMNF7bLD3Xnj4MkDYl0wm0JgoLHn6aefCCx1QkJA7 + lu22U7xwzBgVsf7ii0RKKBSEqAkKvvVWDaD1y182Yd6E1QkEfvzx6H/+c9x//jMpnd7kiy+mr12bqqzM + vNS8dMxCV6/maN5nn4397383+fe/x3/yyei//W3EX/4yFCop1PC99+phmdpMKjbSImykkFEo6dNPQ0zD + kNRDDlHHOeSQ0Jlnhu6+W1HD/FAKGw5toZCNhdwWhDPbbsuk3IMyYUigSrw9uyKXiyCacfToJ64jqUIO + RtFULNlY31CviLgWy+h5qB8+koOCqgNoHw/H0qOnD4riMmTE5TcpHiuBhgxUOMCkCuCYouSmFeUUvIZd + TdNRFos1QVzhODu77i6et3skCkekrhOONEUTqWobi1Hbdm0ksjYeP6Gk5Ojq6gPb2nYeOXKriRMX6SKI + 2FEXLFgADoGLRDVgpURo89Of/pRofcnlNkg9J/fr1y+8sH9X58JYVPFCakRoHSlA2KbNvBhLRT4z3XHm + hMNbQmrBwlhsm2HDRDuDIReZz6OPPoozgAiQt26//dtNTRSpPy0SOS4aPdLzDgEFHWcZuzsOwlrJu92V + KOosKUd5y403dtENUcRoO6T/UKhpMG7sCLCwfyAUpBlwm/wNfPjJLh5V8FCCVXIEmfwGMKn7oE69yLBi + TpGNhb4dNQA86aJRsFCVjsrFzcyu6lbo8+jZvRo2tRo+yzWYgUPfQaMOR/OgPTHN04KpulqpRkm/NK7F + BnyXnq7qLmZPAuR1sdly16lxXQoPtXlupy5FNFQvQzy3Pez1lpV2lhRXhT0iEAg/gAAy+Eo1WkFEm80E + 9jrFGfsBv75+snlhwOoypI0XWSVw0IISG72MIdReiQCl0DZZsYBynLwtszBSGCELQMjrw4wW378Ztk47 + 9VRACHiD/6Eqv/fee/OBULEtXQg3QEH5IoiY0aMa+kiTsChQRskHPx2GIQLUDIhqiQ0LtRnxpIoNVrZR + mwXBG+ZPRdXV9MQWOvl6GX9OE4kwuersaO8dNmzK5MlcDguSGTI0sS8NttSkvrKUxojKRu4AG5x3ntKL + DtouqoCEFDNHH+1svXUGCLfdVvFCONNLLxHqLhZRJY1B6qlREHOoQsEPPxz697+PBAI//3zS//63aTq9 + eTo9K51efOONLUQNmkkn31Kp0HHHET7hff751HR69pdfTvviiynAIQgKjv75z92//307/BIshBfifRQb + qdbOKOEMxPTpp8P77ONMn650LosWKePtqaeGfvhDlf7GjinsSzWT7ywksOT447EqwwgXMH/CfWYD4cMP + P6xihywgzB7TnHAklkyVxpMYjbI8ogUGRxlZBCzpVYYdskp4IVho11JnDBY4rHWdoSXFo0pLhmjD41jX + m+J6xOptHgrNJT1bgIhwxF1cd1dAURtOibuAKZKkZo02n8KrIIs4204DI0tLj6ytPbitDbI4N4jHIBEa + WhvIGQURmUXCzzBHDD416Bs///nOlZX4AgULYYHgH3AlC9SQlo/TYRXoa5bosAoVbt/ZKZB87LHHMg2B + kj58zjkXFhdjDj0jlTqhKAkKHuQ4u+lrBAXxOHJkIBYpVrWrEvwLHRxMJaYB4QpNTTKawAnf0FBLPDL8 + RhihSuSo3fI5R8in+P2fwj4CJiUAQ1kVMyTP3zuHDgZMT8GMnkvZdtQMQbSZosUOfRA1QGgOnsMdbV5o + O10YTJgNaM7qJzvWV+3DpBC+gBRmeWuyLagqy7m2lPhOISBVSigo/qftnxg8iTfGtArto/ZCB2ZkXSx6 + rOdO1MVpSSc0OeyN1/UZyPPXwpZEqVOZT5dlINzJFkP6qFYA+SxnmNLfK8utbQa0XXEBdSOvikLxgtim + gbDYhDpY/E85yTJ/5sNbLnAG7kAr/j1AzYxB1TBCbRqNYhqVeSS5iM2wJWMWGyxcsID6pvgdbLLIT0AU + XBnVDOJb2XL8uLGnnnoKO8oHxc22225jM8WA1fmwpw5CepBkspIpVXGRwUI7ZkNAUVFG3+gqf/oGWFXl + R2cKsKwCvpdR3IdiGhVgVqVF6utIOCdsUkJBTHChxQv9oEMeYnV11UUXXfjAA3f85CdVcJ0c9tOPXVQD + ico7ChDCBWUBCJcvD91+OzrPmAQLCgpiERUuCI3Dtvnxx6MAs//9D2zbLJ2ek04vSKe3SKe3e/jhCaSb + sT0aVVUKt2CEn38OUrLN3HR6xpdfbvqf/0z85JMxWEoFCxHdvPeespGKv1DHVChSqIMXIytXOtOmKRfm + PvsoDCO5GlAtIR9iI+3LUyiXnzM5AAivuCLU2pycPGkSxRIIUocLmZ7z2KOP0mFygRDaIIuq00RtiqRe + Bp3MpCCFsOGQKGVy0MArxXFos8M2xx0dL56UKB3lhamOS/Q6HsTNNEdEU7NNNHp4R+vqhrodHQdQ3J2F + cmgaFyGLNi7iVjw5Ejkdw2N5+V7d3cIR+SxZsgSJDcoaAjAIvVin1KBPfu972yYSc8Nh8uiPExGpyqAR + pvgUgZJGAWQq+m6jVaArWlsJt4eSXvvtb1+93XagNW07JhY7q7H+xLLSlY6zk7YGz3Yc2LCPgtqTKmJR + ph99BU4MiHw5GzCq86R7e7tHjaQMgDFiO/w5d/ZmPuUP9mH0VzF3Ygco9GEDXQcuNxxVSKSv3zGymLyJ + E9vInN1CyoB5WTTU/jUXC7MYn8/+DJ+0gTDHKBpAnR+SbMybZjNrjRg/RSVo8qL5xFX+Z4yiMuSBPpjM + KspKUkzqff6nis3W+vjn9UYik0tSu/QO3aapkbyyc3BaeB7lbZfG48vLSmfFY5PD4bEKJr02MrOQeF3V + efDzc/ZN+AT/ArAxLrqyEuoA5HG+jCxFgAe0M17AfLpmuGDwReFWNvPTCpdcOpgxtw64MUfGzjRkSDv5 + +ZTwWNszxTTKO7v99tvffffd9vxdPIjLli7FakpGxiyrqQZCCBPWSxgeZYrPPeccar3li8bR3UyaNDHg + iL7t9JCDD0Z/jt/EHPPMM88QIDzuuGPtoZMNCOrQQBi1da2sB2sDG2ngvtXxEipmUft6+VeI3aiRI5HB + o+/LUY3K7jw7IqdxgtqNf/ihhyaMH49/h10+/vjtJ56ozFGK5itlNGD44fMA4c9/7uy/v/IOCgSyAIoC + hK++ShY0lQtG+wVr4IK/+51BwdGffTZRE8GZ6fT8dHpJOr1VOr19Or3HG28sJFhCXlWB+ZYWB2OmZoSg + INssTacXamo4/fPPJ4vXMMDCJkgnoPvqq+UAsBaRErmosHDlSpcWHnmk5CxVKPjjH0tOtVwDaUFemAOE + hJeQZ7y7KzW0p4dOhS0B3YY9uwpy/AUDo8I/nX07HA9FkqFoSlWxj5WqZcM/3CrSlU8cNXLCqJFKGpdt + LC3DWOq47ZHEkGiyw3UhRhKoACJieAQnZkYj+3R37NpYDygu0bZEvInbYz51nF1ddw8WzyMmHbciQhvI + ItJTmCKIeGIqtU9X17zp0wUOiU3EdwhFQ5D2/vvvDz5N9g2rVuEFxBeoakRQO1CKqwXFm6CGNBidCxEX + VN6APiKfwWW4U0vL6j32OGnKlFWUKQ6HD9bNW0WGNhLOacqLcxQvI/ZVLpn8olKhnimCGEU3Ch00z07M + gPajrK2txkOW49+VPp1PE2W9/CQhCuvUK2xga6qvH9rVZQdI2FMotlRjhrbl5jQjh+1JM4W39UUEs9YH + QcqCiIYCCv5xUlAhmZQi7+LtM//ayoWsEnQ6qkHZP+nVZMhuqiirikWrXFfbP912VdvEHeW5kyKR6Yzg + FeVHjh61sr5+GwKHPHcnz90x7O1clNyxsmJxacnMVGpqMjmalHWJRBcVa0m6jSlMewqzUpRlRIw+BBos + 5AttRt2zcP6szk4VCFEIzITP+Z68HGeebSPNh7G+1viCmgKImGUyhSlhMSIYwzqOR2DGxAmjmZNpzx1A + qKBOgJBUU/j4bagAwPh1+xUryFxBMHE2I/Rj8NkAfxqKCGKrSMFRMHrq73/7W4CFPhDOnTvn0ksvJfzX + ssSeIkB45hlnIP+2m7H33nuJ7RTLLWOI+QkoFZzT2Wt806jvtAzCJ4RH9nR3U+IbrXsOEApqcpNozJ13 + 3gmQmw3wZhmH4p///PTDDydtIOzLVGhyitpAKCgIIgKEuAkBwtdeS7z8cpm4BtGIImzRFlG4oEJBLJyA + mYa0Zen0inR6l3R6r3T64N/8ZoelS+lj6h2k5AtxHSNHehoIw59/vm06vXc6vUM6vTVGVE0NN/viCx8L + kc/gLwRuoZ5AL/JUCS58/vkESd0AwqOPDl1zTQhZ7N13hx54QKUbRRkUgHpW3rWcC883jbIvFzikK9yp + rXSIsPBVmbt6/XXX+T5CLUvj6XlQQPAPCqhq9hYp/EtUhOLlGwqECgL15JlnPHncmGG0SKdKEWMpI774 + DqGdZY5T4Tg1jl8vHg+i+OFgYBCmMQEoIq0kEhEihfkUxSmkaivH2Q6VDaDoOHtqUNxbxyYKIkLFji4r + I3mNoYYmTTZYiIZlMIGGn3700dFjx+IFVDUitLMQc66UuWchMoTWDqUGdyRGuXmRz5CJjRj5XUpKCK6A + ILLQsD00EVyuIynxiUJ8h6tSH+oggoKEsAgKblyNzOBBiyeFLpxRKWcXQGKLRXPnzNysLylpwVNwNFH5 + G0hjDWHbFWVlOQDsIxZsOBavq6qRgIqACyrrZV8fhk+V96HQFsLqJCmVBAnKmuzF3wRoJ5UrbFjwPkBB + +4u/3lBAvhgvICZQ9C+12DY9t8slM5E7Ds+3503zPDoD5I+qZLiQ94zH94lE9gl7+0ej+ycT+xQX71FZ + sUNt7VYNDfPrajerKJ9YlBwZjzFNIOK3Bq0gFrPsXJ1i1BWjZQ4dFArIMEotQ1Kf2O49wykzZkkr8sHg + ov9rnnmzIASKNkQmWAOiJsRRgBBrg9qYQEMRyMTQpqowdfXdEsvwthIudc0119hQccSaNeDc7rvtCkDa + qtH58+dxDGGTLMRXEG2M7SdHGWEfCiysraVslg+EkydPwmIEdtpcQVjj+d/4BuzTjtbA3Co7YrlFdmB2 + OeP003xGqB3PovjV/6rep8ZZnXOcBbEMMI9qNJ8RCpRK7mWQteDo9P77jzz0UNQ2A/YRPujTQSAEIHzo + IefAAxX45QPh668XBa5BQuabEXkib/nHP0Z99tkEDJsaBRdpSNsRIphOr0ynV6XTx/zlLwfssCPOFjVN + JOEc0R1jx7rnnCNAuLveBrzcOZ3eJp3eEiINFsILP/lkLBCL0RXTq3YW1mAgFVL4wgsAYXz//R3Moffe + GyKhNkAOkj33HF7MLCDsJ7I+Xzj6gx+EOjvdjo4OOhXWUeST5ravXXuKtqeoUKKKkrLm2ubSVKUrQChY + GC0Oxcs2AhByDm4Qp5EJvvoU8h0y+ks+GsAACkrsIoIawi1ACIiXgKKkwIYpErCGWw4UwbUGnBCSCC4C + LQhtIIuAIkxxN8yn2nYKDyNW7/hodK/OzlkaDBGaQpAJsWCGRQA+4e2DwcKX77lnp0TCFNEFniGC0Dga + ydLoej2R5DAvBrDRtqmuS8lDFDRsD3zCJrf2PFjsMtcFIGe5Shw0xnFGRaJDo7H6kMP1mmK8igvqrHXq + RolMQ9d2GTyYbciWWKjaWpsZmHIOwhC2w3bL58+hVnGmJQWJo72SlpeW+E9fX5D6WOzQ97Tbxk+lSigi + E38guYJdVVe2tjTywuXYSKU3SUJmA5OG6llrFArKbCz41eBmgHo+KTT6zwzmiWlUFvMRWygr4IIIQUH1 + +rDXoZK24/ZzZ3vuQs/jQS/zvK09d4Xn4eHe0wP8ImtKUkeUFK8pLTmiqvLw+rpDm5v372jfo7t7++7u + LdraZtXWTi0pHhmLdmjraGUkTJGHHCDkAZlEZRrqMunKBI2knRYKZtkzLZpo8ln3h2cAmDF+6u9ZmCe/ + 5mzjo6OFkdYRtN4yOI5goWkStlHbNEppmssuu8yGirvvvosN9tt3X8TYNgKRX6Yk8At2d3WRsvicc85h + vMMDIrvD21Cr2Yfiu8EzjtnY2ID3BB6WB4TRE0844eabb4Zcmp9kR+AK25JNFlkvXkYR9arEddlRhhkg + 7OqaM2cOVXeYiJvDskZQkAWtHykbSRtiLkE2Q9zAYPWnP2GFjWAt1PnSchcbJOzMogQkHHqoUo0KHWTh + O2IZspG9+WZKQgZ/+csGuBqMDXXMv/6FXxAUVLoYjYJAGiTv4HT6iHT6uHT6zI8+OmqHHajiTTkRVEQQ + GWfGjNBZZwGEkc8/PyCdPl5j4X7p9K44FLVNFV44DdEpEAvQ/v73HWSf0cGFGEiVgvTFF1GQAoTud77j + 153Aw4dt0wLCAXJw5/sIiaC4885QT7djgJDMXxYQrhVGSIBoeXFpQ3ltKk49QqnTG2AhptFEueKFG/Lh + 7hhlqhxHjewAMKuzk9EYe6l4EOGI4kTEbWaDIm45EAiVisS2QxbFgorqktk3Qe5zqRRBqL6Wnu6EykbD + IaJTlDUH1ddLBaj58+dTShB/O/0bB8Bg6gjS/67YZRdIHvAGznFS2gBIg4KQOZI9NLrhJselbUNBOMeZ + gAQGQqBJJE0iPgR/59xodHYyAafEHNoVcpBOUIa8POQYvyDzhfqKipb6BvCgrraaIU+ZSoqQHA4Q8DDg + M1IClmwxZ18criDnU5M+naOrnxMF85zMJuwlhQBzIFAaIoho/s02kPoHYeQd0tU+tLtTsNmcIocg+uRP + OF8eedRgpoLQGYZlbqE2yVBDQUibCPoOQhMgaDyCemrvOwWhg6AgRBAVzAiPqQ+0T6m69iE21HMPJDYm + rP+NRA6Nxw4vSh5VXnZCQ90JTQ0ntrac0Nl5XE/PkcOHHdLbu/eIETsNHbqsrW1OTc3U4hQFb6nh0KAS + WKtqR6l4jDrDXL6hgBo8AnWMxhIMjDjGJNtZHvnz4/wKkTadES3w82luXYDbBdv44ermOPbGel8fJgX2 + OBIsgZZLvF2AfwZ01cayl95Y/QstlAAJMY0SE3XRRRfZ/jlMhWyAP++JJ56wIysWLpgvO2JZnTVrFnW/ + ye6E7ZQ5LkMe/6JZu+bqq0EP2wvI0YTYsWN9XR1npIyMAR42FlkNQQ4ApB2t8Z3vXM/61pYWquWQ1sqM + qmsOP5yUpAYIFdHwP36fAQgFQeUCDzvsMMK6bCAUKQ3/8ivADCl89dVXzQa4JJHdoX7//e9B+RDZpR98 + 0M8sIwk2pW4R6lDwg4V4CV2SkGxqznPPOWQ+O/lkqjUVAMK33koR6g4/gw6KURTehuBT+wWRxuAU3Emj + 4CHp9NHp9Np0+qx0+tLf/e745cuiiTjdr1hKapNWhpKBGggBS7Y5Np0+LJ3eP53eLZ3GWIrjcPb//rcJ + EEtMBXALKSROEVKIVVZnXwMIEwcc4FI3mJabGkwChIFYJpN3NCegMIcLyp8ChN0BEOJ4LgiE4mZRrgU9 + NvGWO6o2oXYTCi9MlBUe+thcct4OOATnbEDPL46lyOot1NAoS429VBBROKJkuxFQpCGAskIdHYwIG8M4 + acgigQ0TEvGpiQSgCFNEaCPSUzK2bO9RL1TJahCaHgAWakEp8fhoZ3BKYyAl1j5ntljwz18/++ze5eUw + PJKRTtSqGc4OEALVADYLbeNPnDNDXFdqGQpzBaTxBdKw8a4zynWBcPCS9gPw0F+Vy0dfMijITagFCBsa + 8Va1tjRBp7TUpUA96HW67cQ0V5aUY3UcDBau05FthMsHQkZsguIMspqQCYsUio0gB+EyMEmPhAvS0TRW + +VETwUkzJlPL52fYnga7wGRKG7SWzw+Hz5C7bDi0rKZqE4Aw4IJZuUM1xVRxEWWe8gViCIUF7kQ8TNg7 + wXNP97xzwt7Z4fAZ0dipyaITS0uOr6oEAk9ubTmpo31td/cpw4efPKL3hBG9Rw4ffujQnn27unZqbV1W + VzenrHRKIj4qEoERQjEliKK8pJjyIxLsYYOc+c4vhDqgOjF6TtnS/Dug3VLMmzYy2bsIwoltk1gO3KgK + tzKwl9nRpoxsg5FW6g4aFMw5S+Bc9OEwHwi/8Y1vUObTfhl7hw878ogjSJRhryTE0NhFic/D/EXYksGY + G2+8AYDcfLPp4BkIau+IkpCfACds9YwJu+++OzAjGxggPP/88y+44IIcqynzVLyMxGU9//zz5oA4Gk1g + hiKEPhBmbKSSOkdMo5yOoGcb52CEEpXBkxY/zkknnWQfH7ksWbSQ2Dz66C0nn1y9zz4Jotcpw0uh2lWr + QocdFjriiBDeNarpUp/vlFNCZ5yhYOkb31Dhg5dcQkVc98gjHeigBBEaRogR8p13SsgjqjUy7X/+cw90 + ENdgOj1d2zOXalcfRk5BwVPS6fPS6W+m07c88cSBw4dnGXigmBoIo59/fpLe5jTNHVdrXgihBFBxNM7A + Wfjxx2MghdhgNSlUnkKdiRTraNIAYYDrykEYAKEYezO8sC+9jKGGPhAO8Rkhw362adRnhGpwCXgaunq8 + D4wdihqimhEsjPWhGuVJtzY2tTU2idlzkB+FukAtqaKt+X9BRBQnogFF5huAYplLaeywmE8BHsFFsAdc + xFHXhtDGcUzmF1U4ScMhfkTkCcTpo6Yhx/d+TU1SPok8bfQqAiowOAwGCL/83/8u33bb7cJhVUQ3IIUi + cgGkTaskaQCa0nbdGGAPUGThi8QgCo805lAjjcHAp6x8Ghayhny1Rq2AivSFZHrU7pOuAYRlqRL+zVNx + qucGFqhkxN46PEfzuHOso+ZPGlNWVsrCkJz1rLOj/AwhNFio0TSwovso6eOiYXoqHiuquJ39sb2EICf6 + dx2UIdZC9REtSbbzz6hgstQxgRU01yhqeCGxhIAqqWEIihiGS5jYHs872nPPD/9/3P0HoCRXde2N3+6+ + Oeecw9w7eUYaaZRzQgIFQIBEBokgEYQEEgJJSEgCBYQCiCySyDlL5ChAARDYgLGf8bOx37M/nN6z/bB5 + Nv399t7n7DpV3ffOnRnhv79/U4z6VldXV1dXnXXW2mvv3fj2xsb3NTd9sLX17o72d/b03Dk0dMvE+Gvm + 5l67aeNrt2979ZbN12ze/OrNm69eWblicfHS2ZkXT06cPzR0bn8fnZ+Pa209tLXlgPY2pIIhgND6Oaj5 + oh7PK7pAI0VbCwLzNC5nZikAoW4ZlEzFxQq11hbmp/v6tIFDVD4TbHNEtHdlf/qeUyB0OqiYGvLTLQvC + CBPSKAont2d6bz7nOedfecUrqSpcAEJjhL3d3fTKZtb/rne9y+ggDxIQeWnLpo2kkeFPSSkm2RSWsMEG + fCIISjkqexdBRGOEYCoImuafgZGsP2T3wbQBSCVTc5OGdBf1NImEHp7IFcjPaC6bukBINqGFGFk4GKgt + SV++fz6Uy+AJTzibuOk3vvG1//7ff/LTn37nvvs+dccdLzvkkEHy4ukIYQv9aX3ZurVh27YGWiPxLwuv + HnywtCg69tiG004TAnfuuWQ7lH7xi348nBodXPj1r6UoDLxNRVFJk9C44Auq1csiCr65Wn1vtfqp179+ + 1+SkdHiwWw8j+bOfLSnwCoQ36Ta3VauvUSxEIzXvDLB6InHH3/xml5NC7DnwUYKU1HUjvz5lhOiiLo3W + tmdaT4kZgJAY4Yal0sjwMGeV0GwtEFKjYLC/33wJ/EyaQSs59Zo+AQqacWaV3Gu+OT1NqChILaW6wh1D + My30GI+yQbOh1FxpokIHWFgXOJ0gejJ+ShMBxd6WtsH2zvZS2eRTV1AtrGigSFgR+RTIgSPi5ISNEUQk + fEiUDicnWEjI8Ilbt3JSqDWAuIH1K5VZ1kbEH3zoQ89saSHmBykEaIE3WKkRO76nk1dAeqxcmaw0TjSU + gD22kV67CpDQWY7TtndrDF8Nn8bBB24ngL/alEK6gUiKXl0sC5bONacjq2bIU0F7amS8qz33S/vW/NBs + wKhYS/gKH5d+AJn7J590DKQ2bpOpoBHzslxAW5Nioa3II13YhlF2w9LC2OiIbpBtk5DCEhM6kiatDIfW + iisj3fCwMGH+36I1VNEutYnmMuVNGpU0+bIUiJmplA+tiORwaWPlDvCvufmzra1fbG//UmfnPb29nxwe + vnty8i3z869fWb55x/bXbN16zfLKNYuLr5qduWJinFoQL+nrvaCr85ltrSQIPaqJXNXKrtaWLe1t001N + kj5BdoHVWosLCQ+4YDy9L9C+4JHpBAYYZA201mCBQY10WTISvsj8MsVS3Sut/PpCU3QzNbZIQ6dkJ1rG + TOuoyZKooJEganqcvpptFiKLKdACElK9xYEQswzaIMlO6S35hjfc8eprri7kM1jRGZaF+XnwAzzDAeDv + CkC4eRPOAKpNpdDFS3yhbpxgra0MCHwilTf8jQAhnUCxtPBIR0/TVGkfgR8HPcm3p0Rqwgi9GZZM2jhr + 8mPFDhirA2FIT+Rgjj/+eARe3z/pEwqETwCVKSaQDy4eT2/EwYHy6GiJkmmUmd68GXtIw8AAhSNYpG60 + lI4WeSNb2Hj7duno+6tftf7sZ2IWRahErgSflA6SMkiyxFnK5OBzl1SrV1erN1erRG3fU61+4eGHL3/8 + 4ytA7Oxs6HbU0SH0NALhLdXqR6vVt1WrtxKNVRC9sFrFQYNxBlJ4tJLC7RSsMfso4UksM3/wB9K28IIL + Ki6N1gJhISa6mmu0lhEODAzUAqGVWOvt7CTMmRr0lB8YHVTvqC3pg7GJiahFfXgyNjIy0Fc/isjVddCu + HRTmToGwQoI+gck1I14pQUwREVBEIGshZTsyxVRBTcOKxskYg4FDzDVokhR/MSx8iuYwPHd09PhjjkGa + oDAplhnayq+HEbLNP/3N31y5snJ2YyMlRvGvesskGCEwArDZwvMeNcHKotopC084FwaBHC0c15MF+Wpk + 1y7Oz1rZzPqzBIWGdTLvvdoMsbq7vZMAU913MUVC3sTxJGGALE2+7pFkKxHQqD4qxYqC7BlYnX1EQvsK + f7pS6rBoaJcxZIYVqcHRxlwooGAMEMbYn0YEhQtSFoL6nIqQFlXLvDHBQZqtSI0wtiOLLHpQMLXMsCOi + gxRFW65UTqqUn48W2tL8wc6Oe/t6vzEze9/KyndnZ749NPjV4eFPTU6+e2bmDfPzr52fv2Zm+qrx8VcM + Db28t+eSzo4XtbY+r7kJSxdumtMqlaNBQbpgah7hKBVPVBcNjf2iqQRQt7rYtQuQT9VUrb9V59WMwOUz + /zz+5/pnwRHT0covaUCYhQ/zDE+LkAkQhhghz7XTfTDFiLAtGeO+WSqlhnfZDk0adSB8/OMfDyMsNJr4 + 8Y8fvu7aVxeC+pSRNEY4PztjxC5N0TMg3LZlM5UX8aekYiP2FirV9nV1k0R/8MEHU9mfpIUUCI84/LD3 + EhJ8z3vS1H424PsdfthhuDrTOTT5f1KDTaO5URqVaRPTF6neoIXfLPt+NSA04dRihCilhEi9UrECYROp + IwR0CjXHqUpj2fd8qDKzMm4zMnW5gKnji4ulu7vU02OL/AlA0sFi167S1Vc3/Lf/1vizn5E1Ibooqe4g + E/gUo4N4ZKCDz1JRlGgfMT/UzvdXq5//4z9+zYUX9lOqFGl0IjasJZv+ootEj6Vg229/CxB+vFq9u1p9 + q0qpKKUEC89X3ykOUjILD6NUDeVmUEdhojGPQgrNXHhhDggJdnqM0MOE3/xmEEhrpVELDa4GhFxUaYyQ + TlhmGRVEKzCFEkBIjFAhsLEOEAp5tPk7ozaVDgoZ2T6Y8vNj9+Bj9mpQZgTiWnF7hQx2yeL+GnZqZDFV + UMEQT9UHmYBD2OGsdUM0XlguP54qaPDC/v5TTzzxkksuwZeFTL9+IKRy9l1nnw2a4gmk4vZO9bLyKSAc + 4GfYVoBno4nGF8E/jtAh0IKCwSCaP02cgYKouFen8ZHdmJ8bGlDIHSyIoo5wYpprzBIWI9ULR2So5hsb + mCX8zxleBpYOeM7/EjTNMgKdPnpcMLhfIuYZtuWjg/Gv4ktlctHmZqcZxPVdOfufeszQRSkQWtleqZxV + KV/W2PjW5uZPd3V9beuW75599gPnn//QGWc8uLx8X3//PYOD7x8evnN46LqBgVf0dL+UFiutLRc2YeAS + NfWcSgVn6UmNlSObGg9sqmxqbJxprIzQLF5tMpQbjaiWywhM8yJS60oX8bs2ydKLdA1EDACWpDpEd4wC + myFQiOFpeRTeC+cT9GtroTFG9mpO6iwqn5HqSToEc19aMxpxBBtGhgaxHLsoauVs6omlohmmQIjCSYww + daMYRFEgpjBtxTVq/QhpW2hAmNadkdpsrS3bt22zdt8ufppqyruondbT2XnggQfiJwf23DEAfNImgn5J + ZGuAeemH8tKzn/0sGt2kK6kISjtJPssVUaXyQg1h0mOjQxQxMfFzDWnUIM2AEFXWDwYg5L3nnPMkgJBy + 5PRh9Y9mywiEOcGDw8AmSrfCz31Ols9/Xopu04OJVIqf/AQ5tPLHf9yqNdWklAyxOmwyf/d3G8EnNYvi + 8ETGxCNjdBCFE3r3wf/zf977xS/SOr0LcXXLFlmWlqgpJnfr+Dgl3FJGCBCSKPnuapXf63olhVhJn64G + VAw4R8I7YZ+eR6EtfMU7WhcIf/xjqSxjXYXXUEQdF90449KoMUJIf1qKwYDQbOd1xkyUSypdSnK9qqOr + PTjr6uyvT1MYELkvV9Xj6u2UHU2Oj23duFJkqXHjlCy6ywYgKRhtzGVD0A4eNlYqETukpArTbfRMrC50 + injWtm3Pf/7zUR5oe/Ynf/InaVbsHqnhd9/6VromnUUWRKWC7oo6ypSIDzIgNLZa4KysZyEWaBTQkuUN + y+uioE0y6MH5yOKZ702njRK6U7jNzVRsZd3PlXdh+CXIu/qPynuxU7DzdR65w6TtMmGKqTSak0DzemkA + wghy8qKDWyR2ARBrRNEwanAGoJjWU8wejCDTUxMQdA0r1ikiA83EyDtOmWzNjriysfGdTU2fGxz85imn + fO/66x+8664fXH75Q4cf/t3e3nvb29/X2XFrWxs1cimq8NzGClrMU8il0YJ8QOBRjZWDGytbGxsXGytT + TRoaRBTV9EHCtg6EBnirJUUUCKLmGqIJi0waqF7M9ksSHoyNuZ8zky65bRGWD9u9a3Fh1qJ3wvlywmZA + MoM0wzZ7DnxyJtFvcRyQMig1zySzAVaYk0aNYhaWAhBSYg0l08DmW9/8puc4fTlfLpJXTzn5JD4BcKKA + pwFhWonUGOGO7dtJIL7hhhvuu+++gmra1dEOELIB7yVhwztCrGzY8JjHPBpMhV+m8MnbQdxLLrmYocN3 + hV6KOYhdAatW1sdIoV1CnASSO9HqrTzb2ozQgPDEE0/kYPxbf/Obwgif+pSnII0ChGlaRQRCjUbKI6j9 + /EUyww9+UMJHSgPe++9nqVDM84EHKLFN30Fa73bFajKjlD37H/9jkcovVFOjEIzqonhbwC0kzSv+/M8v + +sIXznn720++4IIx4pHEIIk+2gIWtrfL3YsqS6HRRBo1IIRBvqVaJWRo2RTwS1gmWYnHULkUVw6FZmjw + hGFVOzRRZaarrjT64x+La9QW98sUaq0ZESxgoZtl9gkIGaNLDYxmTS0SKVznQ/yN/G8/5Dt+yHGK71HS + PD6cfdYeQy1TdJpoqfrS/okMfUrAVCpL2nGeZAYS+yi9dvkll4CCzPW+//3vE3j3uPoeUZANfnHPPc8j + ykhShKqjJELMlEtk3g3Tdg2oiDzV2KoTVsc/Z4GrQaB9UxvE63zrUom4Lor2foqkNn2xeyY920igHW11 + CpCyDT/uavHd7FBV2nQxs3D8vpmBmVM9fRJoXn5lAfX8z0L4MKxPPJ/FyF9ik8nF//hcxv0jD9u9smHR + mzFJFFAMKsHvkBdILetInDLjOrs6V4Cw8q7Gxs8ND3/9MY+57/bbvv+xjz14zavvP/LIb3V2fq5Suaux + 8dpKhX5bTxf8qzymUSjgcc3NhzU376TbJXVGmpumGxshgv0oolQ+gwtqaHA9bs+628A/qIqQAmEwpNRj + damxJcJVMxfYxsVFGuOlgcMCmJnbRd2kGRCKLqptKzirqogG8dO3Mekvtz4eVUEatUZFFiMkNAgHYvSn + xlghtY5XTz7pRJIWoGIzU1NACFSyAIS8Cs6RRAEQpokQhpFpzgZirKfhE3rEoUp0kD7baSEb+cQTT7zs + 0kvTAKE5aNgb5UOX5ucAZuOF6WKu0T2ZZYI0ChBSGNNHJICQ8/bUpz4FdEQarQeEIo1Gk3OYz11zjSRR + KH7Q2Ii2t/T889aDVNnuIoFPS2yPUU0mCRAerZE84nnYZNBFr7/5ZghzaWkJrVXuUwwDw8PivjEgtNZn + ACSGVaRRNcuYNAoQslAV4VYNMZo6Suk1PDjHIsCSUIgYiyRrSRSWWV/LCGtdo2sk1BdSCQuMkJyc9TJC + Y1o2gsMWpAnC+h7kj9J5nCjg+jZfdSspXNsu8Es4ZGpyvLbKSX2+EhVUP3hIGPX+B6TTTQUb3q7u7jM3 + b37B4x53zVVXgYJ33303uj/1KagZsc70Cbso//w737movR3fDZhKkgZ+HObyG3p7RpXBeVEYV3FrnxiE + 79XDHaEMz4tzs8Tw62LkXu2zsDFeEhoOiba2SrAQgLPKZzXwlq3IQ52sr0VzR0HHvBQUa6BvVcyzLWMC + oGukifaZ88X4TNlpX0BEeBZCKNP5aLdxBhlGkxgdNPOpASExQjTM8vZKmcDzyxsrb6lUPtnV9ZVDDvn2 + hRd+91Wv+t4znv6dTZu+3NT44XL5tkrlpY2VpzZWTmusHNMoJbZ3Nla2NTcuNzVCOZd7eua6OvuoCKNE + UORQdVWkoT6jZYWUhvyfeddJ1B5jaDDkPzgDC+CXz5qI3K5Zqr1o49+MUBatLpm8mSFcTvPMsT3XQnVj + QUdnkCm4Fhghmg0mTyt7Rg85qzFGoUgeNJBJ56wAoeHZakBojHA1IEytqqQXe1QStHv5ZZeRcZGWN7PP + xSD6issvTwOEnm5ByhOXU2r09RlVBoRaVbyQPhFdo2sC4VP2AITJ1S+eZwdCsulp8kfb2+99LwAhJc0U + CKmyTQahOGUgZyATRA26pkn0UDeyJi4iOvi1r+2+7bYGSpUecURpjFCQtFho6O9vmJ8XILRaF0ceWYIR + 1gAhRfJMHcUy81IVWpFbJUxIn6Z//mdJogAIzS/z859Tg1uAkPqiDz5oOZGSEAkQRmk0Y4RGB2tlUhdF + 7YnnEfb09HDOqVSQxghPOP74VaVRxmioVWAwmmK/zkc6wKVvYQAVAUY8Lnt+MJE88/STDz+M0vyU7ZGu + 2aspdWvAoR0/B95dqfRXKlvGx59+9tnPfdazzj/vPOo1UO6W3kwEA7i+sZABhOtvzGRAeElHB3n6hAmP + LZV2NpS2trcvdXf20o4rXx0t5azp8z2fhWQLNNKjDj9keYlYpOGK+D5qoMggYd+nIOQ+0xS0VpGuy0r3 + 6vh94zzahe+SUMM6HtEUFNPsCF8vSqyWCJevn4lCKZKFCJ86XwIWxuyIrFiMRR85sdqXTkLU6cY+0VZE + lH65ACGtIQbVLEMRGbLmX1epfEBI4dCXDzzga0ce8bXNm77U0/OxSvnNyhef3lg5UenjFuYx9GCSfPnK + MBSwsTKAeEhNUWyoyKG6pJiXaKHBq0IwjHFWOwWGxkYmbyb5DGnSeiiBVvDC1LhdMlbnEEWoiqZ8NW7P + bI3DG9RTKl1Lr2AB0SQKyJ8Ge/LEUDAfI8ztDR1VC2dThlvSJy666KJPf/rTlkd47atfffttdF34CnwO + FcdqT/tDGKG+d2Z6FUbY2rJzT0A4MTbGh5JTD6TZngHCm268kcxC6CAVZNIPfc555115BVpf9iByaWyP + 75twQbFosVKElnZ0UaHLnIENSxLLLAAh4Gp02cwyRUaoMUKk0VpGiDLMxEVzhULjEdM/aoAQRihAeP/9 + Io0ChATkAEK6QOSBcLfm0VMIhrKiEDho3LW//e2r/8//ueIf/uGCX/7yqE9+svcZz2jo7JS7kOAaJtWO + Dnl+3HHSLKIeEJJHgcuGMOGlWp7NgPAEMjQUCDdSYsaAENuOASGu0dWAcO3S2wUUzIBwSTLTOKukmaaM + kAKkAQhXgxOJuikdJLl+Px/8OHjP1gmE5HAcefjBFBPhV7TPhaCsFjJc7eCNFBKQ66IDHAWye3uP2LLl + +NiYiUa+RHuvv/56YuBM92gWyCW+/sZM//2b37yktZUMfcKNlHbDhkMzCjrMEWIa6e7qoSNj5KaCW5oA + uD8nkOIyj3nUSYvzc3vcyf6AFk26yX2u/YjVJjeOygnOBWyri3wG4QblEdDDuiQFophEsZowaoqugZ/V + OwnsMFdKO1cvzVMA7b1WMsYR0XRoykQdsH0r1aJsECHSQ3ZQZxvczxSnIHMZKZQq20T1KpXDGiuk0l/e + WHljpfL+SuUTra2f7uz4VEvzhxQFr9LiajhLsdXQsYSsWyTQgcbG3qZG+J/4QmlM39O1aWVxaJAelOEj + CoKnQF0wbUoyn5VYS5EvLfvp9k59kjKzjBcmdpVM3kwZYeptCaZQseFKJkCEugzYmD0M9vX3dVP+RlYC + BSlNjEBYhMPoNc2ijGLSSYAQbwtjltkmr7vu2gue/zxiY0Aj9dX+4i/+4pECQmsByOdSM5qBkokyLS/M + NAAQAr2MD6Ag/341qVGJpvrRj3wkPQbz3QgQJkmf8oNSKq+vb3lunlMUgLC5mejjKkBovQ/rAaFJo/WA + 8NGnnsosRF2jnuoTLvLICKXhu0qjBoR0OwpteH/yEwFClMk8IzQgRMMk+Q8gpJTMG6rVD1WrNAP59L/+ + 69t+/vOzbruNnlAytnV1lYgR8iArcR1ASJUZ8jHOSIEQ42gEQlIJg1lmT4ywjms0jRHWmmUMCOnKlwKh + oeBajk5hMGTWV2jTu8cReA8b7BVZ4czKGJdohwzRI5zydT9SadeAcKa9bbmtbWtHxxFcfxEOyazkTrMM + IS50NHeEDjTSPdYd/elHPkKLYFzvZ1FPWYFwQbM1Bpsap/DL9XRjl7NsP+6CznbKJu/XGTSmomEq6du3 + mjVp3aen/oYOomujtrO6wl4Uh8K6FDvj9rnJQO1OIuAJENYyv5gdIe9LAS+DyQQXU7OAQV2KdgkcukCq + +ieAqkVw8Goxc9epbnnj8uJxRx0G6kQiaMqoIGJTo5BCjJ1kUNCKBLZH/A+B9OZy+S3l8tvLpbdUyreA + jlLSSF7d1lghCmhGGEqvgn+SKW/kD49ob/fmTUuIH3XtoC5vJrQvS+NLPaI1RpgsFGcxObqG1FpU8mE8 + 7bRXY4FhGzqkYwJncpACoWOnersyR0yeGjodFCxUsMwRR+eIAoQEFyMjvOKKKx544AEDG2DmsEMPoZIL + mQxU/iwkF+4nIzQ2yUyQgZJu3jjJLfjHh8IO8c785V/+JWtS5OOlFBdtYwNCmaKkNVSxjEpaheRouzRq + FQPqMcIsfWL9MUKnkmbM8QezPerLkC+vNpnygw9WWB56qOmhh2jDK4xwTWmUMB6M0ICQ8N7rq9W7Yszv + Y9Xq5/7qry57zWsIRYdIPzf/ySevAYTgKFVm6jLCTBp1RmjSqCUR1kijWT+m9ZTe9hihASGF69YJhJg9 + 10hm28/xdl/eLtdPve53q+0rBUIoO0A43tQ819SIcfQgzsXQ0AkHHMAZ4UHKKs1QiJ9TIeL+++/H97Ue + avi5Cy54iXaTeBwlRSIQksjPJUExsXaqgSgQ8hjopWroJKPKvnztmveAguSJ/Z6AcI9HWKCGe2SfEbQC + DjkjtPX2Z+GhK7P1dbVQQ0pjg/F5EDxrioVqx4n4cERMcNHtoJWRwcENC3Nc9zYPYxtkOspBjIxIbTMD + v0gKDVxFIMUOQWCPCPSWxsqxlcoT6CnRWHlZY+WyxsrFjZXnNFYer0blLU2NCKGgnLlgCAGa/pnCnuHT + au4YtRpqPcNczoNgWwjjpe5QaekQNMl8jnzmW0kJH5kS4vAkVzCwvTyfk869JFS0HLB1yynHHoNswJ8J + FhqqFeEtzxolQdB00YiC4V3I2omgKq8qELaaNEohGAe866+7FmMv5hF8pG9729sKldIMCMmKn5uRPMI6 + ZpnVpVFDQVt4L/Z6bJmWdA8NJW2RnEVYKSn81Dj1RH7a93wjaRrMxrFIjRTcNmbvv6b/aUDIVMI6D9eL + EYYev3WlUXGN1jPLEFy09IkIhDFMUCndcEOJrImPf7z0iU+UPvnJ8qc/Xbnnnsavf735/vtJnGj/6U/p + xItZRqqMmlkGG+dvf0s2/dExRojJkxjhlZpKT68MM79gBOXfL/z0p887/fQMCE86aTUgfJeWmKE2G2kY + z9FUQujmcf/+74f80z+RUx+A0M0yuEYdCK1oqsYI3TWaZVDUzaOojRFaZZm9AkKcz6eecsK2rWSh/xd9 + 7FlmdCAEfwjakUQxVCrNVCqEcw7QgekxlIaZmTnpsMMMDgmfklBIhzPKCXLjMfUzapjqHv78H/7kT26a + nKSENzkYjy2Xj5UYoaTtA4RWOJvYZLCDauUdsNB9Lvt5RhmgLWd2f/bDHSqGppqCBnsEttU+lKMC6WEa + 6R6cHXJngi78W5s7mCFrsYJMwEeTKyNHzHViSjiivh4ZoRPKECNJp8dJFoSmOysR1Kghf05NjJMsARLY + SvLeJifGbD5o8R6P+qSIyI/RSit5TSgkEf4QtYNqsxF8MY3HNzXuoupsU+OYekFxwUiNGLODrrsQaEhd + yIDNuzfEvIjEgencTpLqVKQTbAsuzSQKmORCgE+gINkOGE1jDC+gVBrt41RwimanJtkskTo95mcIF8RP + A1RllnFlKyn2so1wprClbAwKUkciRhB5SVBQGKESJlqHuoETIOQloJHoPsmFaeVP0TBPPpEgWX9Pz+Lc + nAEhaVF+z1oe4c4d9c0yBSCkHP9rX/ta84i+9jWEtcKDat3UZUSStbnyPfd8gYyOnDx74okGcj6hKWCh + TFkECKVsW10gjMRuDWm0ua40mgKhx7ZN/z/llNJJJ1WOP6589NENLCec0HDiiTTjLT3zmaVXvaryyU+2 + AYR/9EfkEVJue/p//s+lv/97ysrs0iqjpPqR8Pd0bTdh2fRYWN8XsRAgpHbPx9/znq3adkKmsOy5njQK + aoKg5NRfpZiK+waiiRMH1+huc41SXEZdo5Y+0b0GECZ96rPS24WUiVrXqBTdjkB4yimnIK37D7eaNEph + rC2bV/r7pBkvE+o9Z8NLsESLd+zP6LzO9+pUNDfg1n0jQMhNjUTZUi4zkoFPOCypcLaMwbdSOZzmcI2N + ZHE9rbv7sVu2GBbyoGL9ddddh+pCKN6ihrVYSK3RLzz72a9oaqJ+N65RGlwcqa7RWS2cxgfxccigDoQS + N6/HZTXatKpeWuBe/h25w+amp0nw2ivQUlk1/DogS1tzG0VkDE3XuR+7ytNH+ifj7OTI6HDPQN1rwPDD + Wax+NdlTygVjs4hCKn0tY6zlgrKNEUc+yMZTl0YV7ay4qGOeaKBMmwGIAkGUyXTWTFWbq3V3JekTqQ+e + 5+FPwTNtIk8VmEERPytLjZXNkhQo/xKFnyAcqLFAb6WkLCFwhTwjXLUcTJre4MQxoXq5etkxmYFAU8iO + F8NLlsAemFk+1NfcksiVBazK4FCpYWJ4yRRO43mGcEDmzOQE+QOYZ+QYMo+MAqFkFmb0sSCTKiMECAMj + BPO84jbkDMJHR1ycn8AhwcIcCAGE7a3YUWZnprmXqUNWm1APEKK1klB/Xz6PMAVCanDzdtINraAa6Ouf + glx07NFHY1vFxUoHqM9+9jNpf1cNKJ5g9bsjEOYYodFEZ4SrSaNCnTXjvg4j/OY3NX3iqbVmGbWbyse6 + q8suez5Rk1gg9FJrprubmpfl8fEyrRgoK3POOQ0vfWnD3Xe3/PznAxQatTzCv/u7zSTUaydeym3Thpd4 + HlE9cuE5FbdXq3A7I4W2fOYHP3gB+Gr3KmaZK6+sNctQXIbmVtaJAky1Kmug7NH/9m8k1G/9678mj1Aa + E1oe4cMP54AwkUat+0RWcXs9dLDWLMOJRfpeHQiNRtkQLg9OI113mL6sBVJ8eXzd/AbrHFLXCXirbaYD + 06p8iJesoyzfgIL9Q309HBbIREkXapvh+CWSR3ckGucepw0CqcFNOuB54+OnHXKIYSHyMUY1hBGmDFjF + uNyRRFI4/MHrXndtczMtLM7j7eXyqaXSoVrCjdKmYC0fVABCLv7aM8OXGB0ZxmRXH8Up0DA2unP7FjIZ + ChtwnifHRzETrf80gjqclvQYdJ64X5zSP912K+bedmET9mfG/HQ7zw50NE2eKIAxWYE8REJpd1RMYyhg + YdZeKaKdbSysjkGapHhmcDYj5l+tiSnVHiLz8+owJnLmFgfL1G5g7hgfXAz/dGUwztgGUkBSY37AIS7Q + 4eamYfwR2GEkI6KRYqHC6rQtkQFz3UCgMr/M+ZkPB+bqkAVV07XQUCk0LdcSrZiBLGrYKaT0mTMlYJjB + IWXZCMMbIwy8zdhbLpiXBg4Dz3Od0za2CCX4t3vnzoO37yCNPqAmEkS2Z1F4DTXTt9tKyT5MYoQwM2+H + CyYBdaedduqLX/xijJ2Fhr0wQnXZtJprFHmzUGKN3e46YCczXYqWpRmBRhZZSKgng4ZcOd7+ghe8gEQ9 + /DIp5yNYCJTiMyeGwuDAnwXFyNtf1OrbJo1yto0yrsYIDc8s0FgXCIHJWiD8v//3N6eccvTwcOPEeOP0 + dHl5RSqIkvMHPj360WXKgZ57bum88yoXXlii/tmllzZQVo3AIf++6lUNl13WcO21DV//evt/+28A4STu + TW3AtOPf//1QbcaLgEmZbIyjtI8wdZTU+JQUfuzv/u7OZz0LkUDu/iOOqGWE0EEii7eqLkpjJiyjICv4 + ehJYSzMm8vdBX8goiYxaWSaUWFtNGl0DCN0pUz99QhkhxWA5seTOWXPK//5nf2aMMBkSGRutWzzSXlB9 + pWjMHg2P+++KXP+wvvaW3EgMhQw3RjjE9arGUdLqe1W6pGWS1Vo7iu6ACJuQQmtk39n5lE2brB8Fj2c+ + 85ncgZZrz+wPEw2BgX/9l3/53pVX3tTefgVNDRsbKY5F+1/6C4plVBsqYbgE2ayVkk8nGF4pUDI2xodn + D1aaWrja1+FbAIT0uyxsYLDwSJ2uR2Q/dY+H2dOWzctoCwlk1sYFwyxSgZBu66IaCoIVH7JGA3LZqw6T + Dod8EEaN8bER8goYc306HMOBAQtr8c/jhY52Hg604SzBQgNFgU/3dsYnQe2k21BvZ8fE8EA/NQmaBB2l + 1lyMBTLGYTbZuHFpYKA3minqN39IaF+wfXoXCI/t1ea5p2G/QPhioroBUsICAy+09VxvU+NjTCI5MKDI + QcvJnHFEkLKvr8cVVEWyAJyCYe1UdZnetHEJMo0xBGeNlRg1OTQin9BBR8EcjuqWBoQA3gaNERK899qH + xgi3bN5EofznPve54FnaMUaAECrZ2jI9OckbcQZy/+ak0baW3bsPomIZXSnSFk7s1nyqI0MDU5Oj9Knn + 7TRjAmgLafukbfT1doGvFNom/7iQX89nWQsLmU0Ua73KlYP+vG3rxg2LsxhnOCFrmmWamVSswgibLUb4 + kY+88VvfOvuBB854+OFHf/e7h959d8cHPlD6zGekQyF9ClnoU2hPfI39CUiQ3vDkJ8tCP6bHPKbh6U+n + +lr5F78w4+is9mCyVELChJZTD4ejuAykELcLkPaOGCOEEX7oP/7jA1dfPWepFBTgzucRfkIZJIkTr9UG + FCTmE3FEF8WGYwFCTyKcjEW3e6zo9sc+JvVFjQ7ef38uRui5g3WTCOs25vUY4QE7d3JiyRewkkBMawIQ + BkWT0dUKsbCQyM5w/p+hdD4CQzG3WloGJaUjVncNVCRu56SQFAQIHHXRjqV5b6ViWPg8+hQ2N9On8NG7 + dxsWIpMiy3AvoaKIc/oP/uDz5557Y1PTVU1N2GRou/qUcvkxpRI9ntBF2SdAh5bMmfNsesMrQiAnnnDU + 5s2IsnsBYMZymGEUyNwjcL72YhfFA17tK7j5xffNPX/EYQcbEEbziwGh/BOXnF8GsKAhnOkPRRqola9j + veygjqYxQpCJjAIGX9yejL9RHQ2BQ6ODHhH0CF/ifwnml3QNIxcOUqxJBmMGhyFSSF/DpqYOPJIERkO2 + g6pe+Cq7u0kXo5iWtQY05he2UTn0hOOPeMmLz5uaJKSIkCtUjNE/2D4lZT5kMkQLTJYj77Anfs6geWaF + zcxE497LNHVBUc3gJ3LBwAgdC5sZmklCI8+tt7dLNs7TNaeP/KwAeWenRMFSMFMuSA/ednJ/DzwAa3Zb + T49pBBnti0SzxYquJVJq2CbKqoKCIIUDoaOdAmEbjdC5N5/85CfD7dKO8waEtCamLQn37wknnEDfvgwI + Fe2OOOwwWlIgmaYNDgUIFX2puj3Q17NNYyX4yann6eFJ28/73//exYVpko8R1hBmU+chr1rPJgdC+9FT + swwh5xOPP2Lz5g0GhKvFCI0OrgaEvGSM8MMfvgZ4wD8CWvzoR7L88IfFJV2vz0s/+1npfe9reNzjiBHK + v/QO5AkLVpo/+qN+gBC/DJU/UUfhaqqOWrlRI4WE98ibROHE/0mlGPPLkCz/8Te+8WCqjHLnLi6Wksoy + uExJt0AUhUe+Sm0yRgcp24YuehS6qNVXswAhQEhvXgqf1gJhjVnGa42WVnONpqTQS6xxHwOExAhpMGlm + qBogBDQYwhnIDQtV4INS7Ud+9l6MuPu8KWMcabwMf7V7MKHX0+qt7ijqJUVBMbbQMmI3WEjb3nKZkqFo + pOc3NlIH8uKOjqcuLx9/9NEEzC+88EJmnSQtfeXNb3737t2vVRS8hOggnefK5ccpHbQ2TPS4cF3UgNAx + RPTlThq87EsmJgNXZ1vHnin5uk8fAENLLCbsq72jLtTh6T/s0IMAmFp6mhI+e257MA7nfybYVscpakjJ + NQoKZozQ0oHV9RkSBoNkmqqjxvMqSHDUnAOE2Fq1xxwEui4axc+iLpoXPzMhVMdxrDBBHU1ZIKJrT2eX + ViHPCmgBBnggzbkH+mW0IHmODXVmZgIk4FXYFYgIbKCY1ng7C2kPwttoa8AYquYXd4QGI4xnOxgcigQH + sCEptEnRS3yemvOQS1qIbM8pXXhjQR0NmBfpGgBfS+kM5LCegn+0qeCCnxgfATUTFhjAT6p4yx7yQBit + pJERtmJ7MdcojNADEyqNtlHGk4Ro3G0kPhHId6gzaXRidGjn1hD1ZyKbsUn0z7aWY485GlZHh/c0P4ru + hmbPSYt9EyLh7XRnS8XPW15389BAHz4daCU5V2kMks1QSg0FtUg5ZRmojRXqlduVwJx4eHgA9ZUPWoMR + BiCsL41KHuHTAhBe95WvNDPcf/3rYalNJKc/Q7ogKlJo9MorS2ecETrUGxbyJ9nrf/RHPX/8x6O//KWo + o9g46ZqrDSioL0NRUEjh0xTGADMML2AhZWKYZxD8Aws/9ba3nTA3J7c+vQnRWmNCPUW68ciAguQgkjUB + p6RaG6VqkFtpUn/4v/zLzr//+02U+ab1BBFKbczbS6HRH/xA+hEijTojdCBUXTRXaHRtm4ydkxQIJ8bH + Ub8f/7jHUR7vmmuusR5M4qHIPC6Wgm7db9sbSm0NlXapKUNLpr2uBrbuoXk/NzTmtOqwnhSK42tJ3VFt + HAgWEiykQCgwRj8K4nykA1I4lLxALDAkCD5vZOTMgw8+76lPvf75z7/ztNNu6O6+uqnpcuWCL6hUziuV + nkjqaKl0mAIqdJAMwl7df0EX3c9vZ8P6fu4kfTt7IyVOWintzYOGgocesosb295kjMqec/LhLKszxUzI + TZMiajhiYIAFkOTbAyjWQckVUwMze4M91VggWQxS189oYrLY5uFRTxeV75I6Ylz5NDzUVzNG6KIoIzKj + p8/6a6f/yRqlBZEc2GfZyEj5QGZxIqSFOmdeAsajfZkLBlCRwi0Qt5jhYEKoQ2CeBQoy4caktRCzhL6g + Uqa+Fc9kyIKCaRhPsSrAlWEhNloouwGhL26xMQwz5OPnsM4VJoo6F7RtHAjzkmkw0fAqjJDFgdBBCyC0 + YtZHH3UUCXbMU/GtJEB4EicHmIHVmahDXry3hiAFgu6Vn/zkJ/B8/uM//mPeZcMbW6RvJSerLVRog1Be + eeWVhc4SL3vpS/mKL3jBhWCklSlO92NAKDVLW5uZ4uw+aMeuA7ehNtssJwgD0oOJ/o6Cl2swQgsT1pVG + e7s6zz/v2TDCD37wNV/+cksqA9blRrF1n4AHHSeou02HesCP3vS2GBCiQ/78511kL1haPUkUeEchhdqD + 4gSFLgAMgZTeEdRII1iI1IlGiokUOPzYXXedQqE1bsm+vtCG6Yc/bPrtb9FC2QYuCArS1BdRFGZJdPDk + 3/1O6KBXGSWVnt4XWmWUAGHnQw9Jh/pUGl0FCIUOrscvkwKhe0R5ouZtuSMFCIuKnUUKgUC6L2ljXhpQ + 0KT3/4sPUeISLDTpF8QCCwnpzWq8kMwHa2H/GKWGGEGfqXAIO8QRc2lT02VNTXTxBQIJJT6/XH52qURo + EBQ8AkFcGzABq9BB84umdNDhgfFqdGgYvvJf8xz6ca6BZwnzk54VCs/C/OCXSFW1cxH3hSoXzGiiU8OE + LJpYGrFQP6kojQbUc8tozJEqYp5DYAjjGZIZWCbSqAuhWZkYx8g0CshKkAbvKIOXS6N1ooNJOmABEVOD + aNA/YwuIyBcr7NzoWqELhJk/mbVQ10akx1jtLAW8iIXysuuiINZQf7+kthfT+wIjXDVKl6Q3RLiKQT74 + pdpoUxRUFtjGesifNH9ykGvLkNIBVV4FWbEsF7AwIq7tGYk2BULcoV7MU4Cwg49rw7ECSNBfIu2gS42x + QOzapKaoqaMkRBUqsRV84P/4j//AuyTbvYd2m+BsCy42w9EXvvCFaSdeMYVqqiIcAqsOttK3vvWt3imQ + Vz/zmU+zq9HhwdFhSP/kY8961MknHk2JokLldAdCixGic2JEcED1BvcGhDwQ8fwM4NwZHxl+7vnnsfJd + 77r+K1/pAAZSIljAwoQ/BSD81rfKL3xhfSD82c86f/YzkijEMkOdl1//evl//a/twJW258U+ikBKlRko + HVgILwTkML/caCHDO+88YmpKbmRrzKuMECDEX4PRFIMMKEhWPmXVEEUJOh5j0cG//dtNyLCIsdhkSJyg + 0ht+0Ycf7njoobYCECICI/z+5CeWPpgVlCmg4HrMMikQwgromeVYqENPgw0qiht0lqL7UtKVl05M/x99 + uEBqBcSNF5pGiokU78ySt7BvaHhUqXQGmqfCIcny+ELpZc+CakqJrPPK5afS17dUelSlfGJ7O4n5y2oW + tawJazRvNhkmFxg78XwatDDETU9MDPUP/GeeQ9gGEuhq2LbPR2IQ5W83W6ajXWoQTVaGNzmZS6CuiHmI + eZQQQlpydFyb5EWyZxCoBV+CM5OESxU8pI6aIK0JpDEKaLZP9bzE4F+EQAsHhvR5bSHUZZWraiAw11Ug + ml9q8yKKHSRMBXXhFHjgxzJiV1sXBlUdcpUAnscCayuzBC+MVHyWQGlqh3GbqLwrR+ny0T6hdDkVNMf/ + CigIfgwPDWBjZgFEEEW1uIy/JSN/Er1TnTaioMChcceEIOqayAgtRviiF73Iu8lHIGxHouAlSmGQVp8y + QgsuinF0RoyjPJ72tKcRFEz79qUcjud3v/e96s2B34fYpAMhCRj4ZVLg1DBkyxmnnw56sWcoY1rdRjrd + S/tVIuPSf2p6apyahZzMgnFGgVBOsgEhGmzaB7gWCEFcugLYYUM6+YjHPfasV77ylbff/oqvfrWvwAgd + CVJEVFIo+HHffaVvfKNE1WwUUWwyBUb40592EqJzUmiRwn/+551RICWqB5kDC+GFaKTEC+F5hAyBw5tv + vXUbze4lwNFIeqK1YQIICSviryH1Ai5IBj0piaisx1FfFK5JG0Kig1pre1Jb8g6ii1Lm5oc/bKcI6gUX + lJwRgoIGhARE19BF7VTUOmUK0ijnM21LwllN+xHyFaTHnDXApY0QyAcQOhauAYTyTsmV3gsnyD6Pwqu9 + kUFLeibUixQqxoesEMNCpbsCXZg8cbhYyNCoIYkQxynbe4y0Wq2AiPSZo4YkvphzFAIfXSpRR4bucYe3 + t2+iX53uAYqJWZTduk2GDxURS2qU6Gkx58t/4iniU/l07QT5CPwu7ERbTmYStO00TyUD2sXUiJTUyZZ8 + f83eEx21RiY1OCQNo7KyuLRt0ybthRswskYLdaUzZAfa35H5Ceo4C5T15TJtBudnpzkhCRYazmnwLxhB + DdUyR6ghH0GvwcE+cCg1xayGiDVewSxfMH3JgTCFvaiO1kmTALowc3IYwfZZp/hLgDc3eQoKqqUziQvm + chUybTOLz6WYJ/iUQppuzxoTMMOWbIA/iVPEv7Z9WEQe1CWAojwHn3LbaKQwGmcMFAMuGiM0IARvnJZd + f/11MEJuLLxIhnMkBf7pn/6pgYQxQnsvy2GxVgalW8AzEh6wf6OL/vrXv06xbdPGZeKRWnwg5C9KKFEf + xx13XFrXho9YWV7i1YN27aJS8aMe9SiKFWMg8L15Ggbx3zDRITacFEM3SYDpAGJ1b3fnxo0r9kEUynHa + WguEHD8mVdsAIARBIaY05bjiigvuvbe3wAhrgbAgjX796wKEQCBAaFjo0ugf/mE7UPTTnw784he0qp/8 + 1a/mACoE0n/+5wM0lYJgIe0J4YVopE9VhgfCvVgJ35W33LIyRtNXvWex3igQNv72t1BAa8MLfAKigoK/ + +93hv/nNLhNF/+qvQnRQsyaEDhId/MEP2h54oOX5zy9//OM512iBEdbVgdfDCMkISBsvOxAKL+T+zwZM + uGFzEEVFGgUOFRTTB74EBhcbB7mCrBLjIw5v698hY9zWTRsn8S2tMu67RmremVBuplTuL1WgaYAZkAY1 + JGp4gMLhMaUSYikEEeTDGnpaqXQyuaLqESWsSFyQjUnPhwsaCnZSS5CxMk3CXP/RPxJb2tC8nj0Baf39 + fWv4ZWwnVlDM8Y6rxIGwIITmVVBzytg+wn+4QiDEhJcEDutkRwgG2jyBV7s7xfokAb98XND/rE2cMC6Y + PPRPLahtQLhpeenwQw5iWuBbJrwwwGGwg7ovNFpgdOwmJyI6PzNrTKyOlppiiqb5IhCGbMKQ9hfqX+vO + Q+fbpEFEE2qjqLICVC1zs1Ojo0NJ4kRa9tpy2KGVws8D8uVTFPJaqGxJDC+hdxkEpgG8BAsTXIwA6a+6 + IybFOcNLB0I+EZpExDK/jfHCDHH5kwMD6lg2aKN5WsfdddddpPMyYAGE8E7FwoBzgISXj5H2CwqBBocM + UEcdeaQhDWImSfS0c6IYDTkPWGysTNpzn/sc/SzZXoHQUhhb7V08yNMgmxCfPfCJPmlZFjt37rBXObbb + brvN45TPOf88s9tYQr0sej3Yc5sJKRBKO53F+ektWzbZfuAoXi7uJK1Nw+KH8fjHP560ZmsMQK0PXuJ7 + nXvuueeff+7HP95Du/Z6Hplcc1oXSIkROhA+4QmZX+bMM3GNNvzBH7Q9/DCt6mnJZALpFK4ZUilIeIfA + 0S9JsRCNlMwHuB3Yhn2GGjGwwxffcsuiAqE8qLttQPhv/3aWbnO2NpqAUMIFD6cl/f/+39tJVcQj8+d/ + ThI9ZlGS6MUsSotgooM/+EErBcGRRu+9t+EP/7DhgQckfSIfI6wfF6ztx+tnJo0RIpinVRocCElA3rxp + A8HdMIriFKUWS6CDDoSJNMrIsrgwNz6OQUQepketZwj+/W3DKCp3GN2xVn+kWAhitZWbRtp7hts6kC8B + M48aGhzCDg9SRKTpLuBHOPDQcnl3Y+OOUgmPKO4YeKSjYHu5PDs2NjE8BKPOqhH8/r5tvT0r/1uXBWZ+ + buYp5z5ubg7or/OwmQS/KeZ3NLPCxIL7mUkPI5eiXYS7yDmdAzoKhqlSSwtAaMUBUp6Y54VhOhkgNFYT + BQ+pR0AuK0SSf3nOnI2fm9C2I1+M/wV11PEvBAVJUpSRpSUyv6B5CuELXpiQTptFAT1TIqbSOwVUzKpV + RGvb54buSHkimNQFjel9ZiZERiP9MQyasQQMNt2RoUGua3DOvDmalpelTBiSWTaFiYq6JlNBHRdTSZMJ + AQ4OdTKnkbzw3FmgEsosnqfUzUih8EJle7lXDeHAiQTqov4JcezqJHgmMbjcBjgsBcITOBQgBOpYDAhP + PfVUaBnd4yh7fe21r7aX2M0ODROiXt56660GRac+6mTDyLC0CRY6LyTd4uUvfzkmcBwulIPBBXPZpZds + XFmwuKCeZHJIAo76ux772MdiWyVxEK8pn2JIuXlTADCG1Isvvpj2NSaQetVvI+5m3OXrqOidieESEsbU + 09VplJcHtY7hrHRYZCfWj9CS7u1VqCf+WDYA8m+++WZeItMR0+zZZ5/1nvf0f+c76wRCERUBQkykL3iB + SKMGhCyWSgEQ/vjHLeQtYFcBlqw9IUnuBAuhbmAhtWYoh6Z118iyB9WwzwCHZASieT7z5ptnVBqVSfCh + hzbccANAWPntb61CG0SQHIyjoZXGBUFBDQ3OaMoEHhkxi9INigrgiKIPPtjy/e83P//5HG3DX/0VXlYQ + WnTRhx/2GOGqQFg7J6h1jXJKn/KUp6TRX5NGsWTPzkxxX8RhUY2j5Q4xy5g0Sg+mtPsE4x53bIEW/OcO + +/v+aQ6HHc2tQ509nU3NoAeUjkGalDdTSmfVU0r8j3RDyB8L0EjFrO1tbfS4B0Cky4QaUHkjb28tV3oZ + XaisANdslBnfGjMDSQ2U+n9r5USIOF2m3c1eNKww7XE952VifOzAndvWLqnO3oyTFXbIVxsbpWRKaCqZ + RASNCGb/+hvTlREFPY8ww8WUKPJFREctl8Bh+uR2lUvdunQx3SmX0Dd5SYEwC/ulfNB0UfTR/u7e7g4q + ySkLLfplxEQTeWEx+GdOUddOa4XQNBxYzx1TzJGvoQVZ2ReOE7Z3wnGHa4p9SKIA8mI4zVQ7GalHBwYZ + tT1Z0EN9Yj3tJBnRMTJIoBEmC75N2ZV4TzMUDNjmgicvsc/R0UGaKkXzp4IcBcyErofjKQCebSBLAnUQ + QQ0Mhpfsib+RwyCHnUpAKTpGIGwd6O/lYpuamlzesHTgATuPOvIIlElDQf6lIDLFE2ampzeuLO8+eNej + T3vUhg0LBoT2BfVI5IDn52exy5900kmorCDKK15x+XOf85ytmzceediuA7ZvRqVEkrXIqNFBvh89KIgU + skxNTgBX27ZtOfDAA7Zs2mSMkBGTm4hX+Wd+bhZid/BBu0jMGBsZsRwMD/eaKziGfpNq6eIiboTujwwP + s1AKB5mUiifHHHXU5Nh4r0xShFZS5WB4eGh8bGx+bo4Ntm3dysEAkIODg5OTEyw33dhaCIn5n7XKIRop + 9cnAwosvDkDopNAY4Y9/3IwyaQ3rVSAVBylOFrBQeeGWf/qnnf/2bwerj/ToCIfUC0Usffz1148ODGjP + 7nKZnHplhAAhLhuw8BjyEX/7291AKXn6tB6knCnGVHOKwj7NI/OjH4lHBi74wAPN3/9+E0BIXPDv/16w + 8M//vOFP/qThT/+04Re/gOlm9dXWk0FYFwjBQuql/OpXvzJRHSDE6UBdoXwRNTXLMMBTmqwMb2pv7+xp + pfLwaqrjegbf/1LbMFpjJXjMKSdsWVnyqCEZ96Aa2AYcQvWAOhAR8RM3DbjIv+DfZLkM+wcCYZDujknT + 59mzlt6gld2qQjHDb1tjK/HYtc8JQNhcCY2c/oucPYOxQiJN7VVRw/MC1QvvFrAMgMhZAm2yWKDiH5xP + 8a/UUyoNlUvj5RJmtLlyabpcGiuXBhQRIxYKwjkcqgqakUL2TGI76mJqFjX1wh+GYQXAU2Yg5pR6gcBA + BxGWcUSw5Roe0VApWxvLCXBq7TEbEw0Xueu0n3Cz1nMh/hdcMKzBVyKMXIt2wgslB4Jy0r09Si/SXEBh + ZoN9fcMDA1pPMqt5XZOZkCUnFIhgKk662gk40RNqYmKEPrLGEfnX6s4YEEZqmPK/BO00HMghDQ/39/cX + cc7wkn2CtNs2rZBx6B9huzXaB6Ql/8oa00Xjq7kNSJkAtlXyBeNFzZa3w327xAtqVI839nR28C+b4HLF + 1QIKy2674Kkx60MTMGanJ/p6uw323IlqZWuifKpPkp4V/qcqU2kOaFoYPcyQsJJSClAwOybgW9E1phkz + 4+NTo2OAs74k8Gwv2ZOQpyhtnmTNc59Lf8Gia7SuX0bTDMQv873vla66qgQLfOITAym055/+NOn2tOpt + /+EPO4Alw0KASnmhaaQb/u7vNuEjRSYF1Qj1qZuUnoUn/va3J734xd0MewSL+U5LSyV1jZbVcXo0XhuI + IB5Rwo0WF4QLGgpikEGJpcT2D38oKRMPPCCi6AMPNH3ve43Pe17pa19r+Id/aPh//p+Gv/7rhv/xPwQU + f/pTvqykTNTmDtqauoyQPEvOkhTd3hC6TwCEiOqI3r/5zW8MCDFmD/XSKrJWUwwOk+bWtr6BvnWqbv9F + Ruw9HwaDy8nHH7OyOG+Zk4CZm2goQGM+GmKHYB6gaAvPwUiDQAKmACfnjHcFmyijuwmCNt6v/hBGuL4i + BUXM2fPXWlXqTPkZ43CBsCYiZzj49U96/PtG5idsD3ASPUiKrIbciYIiysniGMaGaEPbJ+yTcrWUhC2V + Osul3nJpGPArlxZKpS3l0oHl0m5E6XJpZ6m0XC7P0Pc4w8Jii6UiL1QM9LyImidGCnM6JyIpw6YIkiQm + xrLaoJ3l/HG3qAdQcqUBJ+0GbKKol4+RBEErGZrW9oxA6PmCkgVv/hHQy/bj8T9lJ5b5YIJnK9kTmDNH + h4es219MirBEQHYikJCDN40wQWvAUFvvgmfhT0c+eRJcMAJyfLs+avUCwCmBw+WhjDCqoDnzi61XkMvQ + EYwxRmgLuzVOaX/C+SZGR1iTMkLbiQNe+oTjsUNKYdLxEm43MT5KPfpwNrT+wJalDds2rsA7M8k0aqeK + rB2zMzCrgMQW7ARQ4eh5IAxmVCW7MfXeAoqGhbE+qkisUfSOKZ6eCWqphGWmZ8942hOe9fQngYXmIHWE + s+4Z0otDcw0LKJj+aUB45hmVWrOMgUE9Rihc6v77S298Y8nMMjBCqqw997kNV10l2+PzBIoAJGDJsJAM + d3ghtbCJF1L8hajer3+9QmlQgnzQO3COLIhq9Yh/+IdDnvjEps6O0Hh1ZKR0/fVURCv/y79s04jgDtgk + RJDcRMglsArRVBQcgAuCguixfOiDD7Z9//siit5/f+P3v9943nml226T0OCf/ZkA4f/+3w1/8zcw2jrf + qxYXHQ6BQGeEn/hEw8J8BoSI6jfddJMlrgCEWm+/TlHodORc/6i4F0M1N1tvT48VBS0M0/85oqvZKAzu + YWduohnq7JjjvmltMUT0hT+hjOjHQKAZRAtccC++/N5vKoNdG7HI/XUksQdGKsbG1Q6hFscLP3+Cmjng + Zz33ubo9JWmPSTh/OhDqFMGFUK0j09g42Nsr4zT8jzxc8K8k+DdfKm0F/EqlY8vlU8riVDqjXDqtUjmu + qeng5qbNjY1g4SAhTBo/SdUZ0Ugd4Qz2Co9I+1JEDAbR1CDj/I/xS2iaMkKXQPmT8vO07LAykpp0oeJ1 + VkOrApOghhZ4aYTP4MoooCWYp1aXuIFnuAexVLeRrhHatCHkPzC8IhKyyDgbgdBzBFP/pw3lhPeogjY9 + OQFt9Vedh7HnhIHlAoHO88zPCaQ5aLEGxJqcRAGTnHpfXAgNuqiyvYCUCYjaSlNKfUvABnmwgILpn0Hh + BLqSNyYbqBIbPxGUnZoaw1LkqI8wvjA5feDWrRNjo5YdIVaaIN7K1AG/6/TUGD9c9PtEY62E9wIPzs5V + 0mEqlZHz5z9X6C4mvYSsGCZMXDDs8LBDd532qBMWF2ZBYr+EEk9NuPByF0z0YWno0do8VXbsqPhYv0fL + jJHC73639OlPl84/v+Hccxue85yGyy9vuOMOYUuE4qBiQBFYiEDqWAgvJKGCPD84nMmkCJsGh+icIOJ/ + /MeuH/1o+fDD5TbUIEQJVxwNKH74w9Lf/z01S7cCgbBJiCBVTAFUdcc4F8Qg06mhQXGKgoJwQVDwW9+q + XHddCdijB+HPfiZAiED63e8Kqq1WXHQ1RmhldzDLUDpnZkYkKOLjmzduWNmwwAwmzSnk+d4PzPv9DmaJ + 1MTitk5QsIHWLVuWV7jm93v3e7cDDxwyhp112omXvug5s+MjVn48XRz/HAL/c6wxXFsyCncSI8txTf7s + 6+7t7xE35vq/MBtrumjuYRDivK0wOzGmm/xrEBi2clKosGHZEbJ5treIrnElllQxv5DbgRaN2jxXKm0s + l7aXhPwdWymfVi4/oVx6GrULKpXntjQ/q739qf39Z42MHNvff2Bb24bGRvTSHoBQlFVuvwwIaxCxxOx7 + ZWWREVz8NcVH3drZGUF0FDS6JqXpOjoMBTV73VvtmN5VYQjeuLJIbVIb2nxc4wkFPHl7Tdck72ekkmZS + KTSBSUa9YISxBHlzx+RRMM1zyPwvqTXU2BgLdAPLYsG9uRoUpUAoRA3nJ0GFQqZEPv4XYUl4oYKf8qcE + GlO8ZLYkqm+gkiEMWfdg2BttcBzz1sBON/gYxxX0lTwmS/nIsC3dQ13SnK9FkKuGmi9okP0cYX1S5dwD + uvbTczVaDgx4wSHB8vlGXBjTk+Ow79RXVfe5XVdsz2Ky/NCQdK9dBynM5EQLE956a8PLX95w000N1B2l + GjX5eX/6p+X77gMIIWSChYTrDAstoQLvjMqkUMNJ8IzkP/pFAG8g4r/+69Z3vnNofq7U0SKSCTdZR0fp + kksQWst//ddz9FcCO3mLEkHk0FHtOJhxQUAXFLz/fkRRULDpu99tvO8+aC5LicqoDz0kywMPiMdnbRSs + m0Hoxedglu98Z8PwkAAht7HMfrhPNXPKl3V6LOrLbnWHYB8Z1x6dC5txccxMT+BH5U5f/7D+SG1pWMjF + tXXT8u4Dt1E/wyVTI3+mgrIYfbTCA+vBH64M7kAjH/tD6WpPNXsbGxpZf55+gcylRJygl2YXSCEVO0gl + dlbdLIO9dA/G9tKdpNDoqAleoD719oopWVRTWUQIpVQ9PRU3a4GeU8rl08vlx5bLTyqXnl4qPbex8qKW + lku6Oi/tH3jZ+PhFs7PPXV4+Z3n5pImJQ3t6tra0zjRWCMO2Ch2Uh2Oh/mW4GM42OhPzbvtqtjL+62XV + sjqiBZk0HYwYd8AAoEVRsBFggxipqpklSJhQ6fXSDAsjOxQMS00TXgUmXxetNgU+dC+yzVLykWqhPqyn + GX4+7gs2xBSFiYnRrVtWGEl99M+4nRIvYXgJk+NViqMuLc6ayioFzAYkVOmczxhhCm/23DlctmVkb76x + KKUSsmt1OJSNVVnNHDdK4HSHsrjummq2eVTLitcYmXO2Z5vVRjejdBxhUkOMfFD6XqlxKpJr1nMxTkdC + pbpg1g31fSQwLD+36tseMoSgo9zaZaOoRovmyuTE+O5dBzA7yahhTeeKIEIoEDKrGxsbtu2xQlM4dLUM + itVyCgHCr32t9OEP03FCkhN++cuGv/xLqUH6ne80AkUJFkq8EO8MiQ1omCiZwCEVQaF0sEMMpVqJbf6X + v5x92tPQS8oEtvk1UWlwDZKq+PDD5b/4i0nCgWAnb+GN2n1egoLqEZW4oKGgckHighIa/O53KwDhd74D + Kpe/+U2WAIFWSq1uNbU1ooOcAcNCvibNp1pbRRpFrYc8cDs6BGbD3D7ACb/Hjh2bUTYK7GGgr29ilMr6 + +0Izhazst/q3nu8iNf7rNct1amg4ZwvfBN8CERPxYnjH3fV8jG7DEGgsYd/OyRqfY70p9mEiY0N2ume9 + 00Qi9/PPEM6gScJoAnU52LNpQAELC0yRPwGhxYUZMyUbEPIxcFssMLtKpceXyy8qly8rlV5RKl3e2HhZ + S/OlnR0vH+i/YnLiVfPzV68sX7Fp86WbN1+4adNTlxZPHR4+pqf34K6uWebFyggjEJoaKgfPpJuxhvHO + TaFJmDBrouRlYhT80khhLjsiwcJcQ3mLddVO2xOZy1HQnmSjobMEd8dEFdS5RdZEwqlhZgEt5jzkFDyH + N4W0rMiLQwUVTwj+1UWRFLpS7kXA7ICdm4kOshO+tXb4yFTTAgQab2OzoSGiXV31XhV11Dazo0KfHBkZ + TGOHqeCpKGhAqLKqpglFEhmikkWCGHI8gn6bhkjrUslIImW6YM/5ICPNfj7x9RDR1DUyHYm+pPA8rgm/ + oCuixvKjNuBquXWdDLYpQNeqk6cqgl1aXnIvAqdcnMiizMmYuZqYf/TRFUwlIERBI/XIWR4OQ9MGsJCF + QjNUtX74YfTS8re/DQKBQzksBKUeekiwkEge6KUphkPgGewQsZRQ369/Pf32t/cuLNgE1PzZ8iD6CJ/7 + 0z8lvkg4cJRAI+5QTZMgKEhzCcrHZO4YVUQdBYFAAcJvf5sFjM88olZZbbU8+tUSJ0wXpRHVZqz/WieZ + VK7ZqWlO5bqH8Hob8iX5VfjC/BLzc1KtI92KM7FxcWnL8kbG1f36mN/nm7mYN29YxqZcN++QMwWNYAJo + hE+CiKUS9zT+mnXWhuEtDK04LR4Rt8sjfib4BY2dpGSu9lPYBHs6ES/nduYEsj9N5LQzlEmg6R9hm1AF + 21CQffZx0zc2jpUaiAKeWypdXam8o1T6SGvL50aH3z8yfMfIyA0zM6/esOGaTZuu2bjx6g0bXjk7e8nY + 2PP6+8/t7DyhufmgxsYVuu9KjLDUjCgaGKHxQrkNcTZCARnFIv4ZCwxQp/hniqivEW3E8Ma7Jq0iUgVH + jL+aRGvEIBMHslxzXYvlmDKWskD/k8FX1EGxOhZFNubXJBdyKcIAiH75uJzzxWS5fTrux6E8KoEoom3L + y/ObNi1KmkBSEWYVBTKLujnasQeWFJwiBSwQwexPPDIkJhvPq8XCNExo4ArDBhr1kIo4J14Y9cjEdwV4 + Czga+GIasxRjS0KR0yBoeF5XYpWzmhXTCWfST3UHXWCyegW5VE4TUR0ajbjzpThmp/smBsgVIv7hNL9e + Lg8zWyVaenYJxYstC1drfFquapt1DQ+333STpNzVeiZXyy6IDtLgI4V4UYD0O98BfoSNGRZ+73topM1o + pGBhDBkChz0Kh/1AGobPX/1q5Otf75fooEyh00fDySdLjPAXv4BEDkMlSUyEU2pniUAE3SNqKMiHmigK + BCoKCgTGZvSGhVl90drvVYuCRgRZDwrS0ZCAqCESYSFGoXVyEr6SzTaiEpYoYNxLFNDjSlptgCacz9Sx + rmT6iI/p+7ZD5nNjwyP9fX11gZDLcdPGDWRWpjBmjKP29KnglfP7yLluKLUw9FWK6/ftaH9P7+IWAuT4 + jWvh0NFOvUQpC9QrKR8szKNg2CB3T8QdsJJheqCne6BSQRE9u1wGBT/Q1vbV8YkHNiz9eHH+a+PjH56a + etP8/GsW5q+cmLh8cPClXV0vbm15TmPl3DLdskqHlMsrmlCBLtrGQKAqaPxpsjqiMrQIAVfAS3yheTiM + 7BCps6lRp9hyNlINKpU960Kj17b2+bunRjgJ4H6BGwEMAQuTroE6YrYM9wzMDU2N9g0J4cq694mfZX5m + emlOQH1ujny20Vr8i2kMIbE9Sn8M6JlTFP63m27xOzYX4oIpKUw5VsStgGoBBWvEz7Xl0Dz4BT7HARgX + jCJnzupS+Nygr0IuyVTp40tYakQOVvUYFAITh05QYiMWomAj7Vr+iaNjXUJciBRaMTmbfNROQRz8Uqbu + sCc0Vxt/2IzT0wpjRb3MPJxMngwpswq0NrUqLNbby41dPOcgl5cb3/EOGfHXKLdWkEkjrlgBa0MdQSDV + JAULDQ7BQgsZklZhcAiZQ9UEEf/0T/u+8Y2eU0+lwXhWCt9v/F27Sj/+cemnPwU4pWSMWkO7cIeyE6KP + ZM2bNcZRkA+NKChUNQ+BgvGr0cE1iCCKMaHBL3yh4ZxzEEVlGEIzgp/UOiRWG2MZ6sxXEOFMBUHTzVir + FadyyifrhwYGxkaG/39jvHkksAL0giTYD6km9WJCCdckIkf6UZxQRCKuxdrPlxPF3tYVQ3wkjn6VfTho + ycHkDTWwAziu6wN7nLgU7Dh2ooznFSijf2gtUwRYmR2MlRsOL5deUCm/tVL54szM9y644KFLLvnBYYfR + /Pszfb1v6e29pqvzopaW5zdWnlUunVMuUwb9eMmgKG8ol8fLZfylbUIHBeRMES1kChoXTB2hMTRYUEGD + L0ZHE+n8kI4vFsJZhRqG4UnInIRWxRJiEBgRMVQSYSckCB51xO6R4UH25i7QlA6O9g4ujcxO9I9ITmGo + FCP0gsEUUyXEQgdiz44Ihap1S4bprBxMyoFStmd2jDRFIdUVDc8c1QrwBmJh7iDHxY0qtQzP1yi8meyZ + IZa/kamAYFm2Qdgsc3JqFLB2/5LIIQmhkv/npDDbzFAwj9P+9aXy9fQ4UrkyzmJef+E8eJwymXDUB8Iw + X8naSwVGmAqk+jxYghPzZ7HcmhNBF0tTXphefnGWFq6xdNLG802bynfeKYCBtTKlhqsIpIIrGn6zwFvA + QgNCxULIGVgocTsPGT7wAAAmcPiHf9j5i190ffzj7SefXOqg4EX02KVPlpfF6vKTn4jdhsJpZg21HAlN + FgwQ6O4Y/VxTRJ0L+rGlocFiEmFdHsycgKDgPfc00CJ42zbKv4TxkRG+tbGV23qfRmYTwCoNOlTUj/zx + iy/PLiCKohD8Hsf1vd+1il3rEmlBNRLY15nht/aBAADqfscbtr/ZDnv/jcM7ujo6x0dH+ckMpUCC2l2h + EtRZST6fmrMTpphWU3P8C08MCwsO0giBxSRCbhmyK7CJHlUqXVwpv6tU+tLmzd99y1seuPvuB08//dud + nZ+qVG5rrLwE1bQsbUBOLJeP0FTCjeXyXLk8rFVm8Mjg5wEEFQjTnhKFlMFcsrx7ZGyKZyFbRT6rIROE + Jl9TgMDU5xLQLmqh6JZ0W1WPTDbTd38EwyuMhKE5ixsJS8hGSSkh3SnZcYZtarcJ8GYiG8G5CIc5d6jS + lFwYrC7RcZqY0L68vSWPhQUoIoBnKJKilD33NU7yeEJ1jvhqgEN5NW4s+1GNkemDhf1quaPtOf9xIaxY + SyVNvw0ssAbRyeWHEVrKRJHCJmZXTjJgefhhu6hWo0UM/Kx6jDBXarwWKU1zjupozMGICTCRFKaZ9VnM + OAsVh94jaTJ+RhDlqksUC5+0+ZPp6fL555dIEkAmRQw0B01qJKmrlHoZUueFSg0zmdSp4YMPNv/4x60/ + +UnrV77S+spXNm7ZUsIU4zBoKOhYSE49UPTwwwKc4F9kgZIvr0RQINa0UCWCrogKENqRpAe2WlzQUNDg + 3L41xWgsd57mwJs2BSKYDWUhurMej+PqQ+8aw7pUS8H+3YgZcP8+Y58H/npv1IhRD7GK9QCSMEIdFR+R + Q2AGTwzykcoDkYJhqze/rcNHS+WJkdGZiQnetbdfhzMwOTnmHhknfNbbyPaWcEG5+mOQPIkWZtpoMX2Q + S4R8wUNKpeeVSnc2NHxudPRbz3nOfRdd9J0dO+6tVN74qaQpAAD/9ElEQVSJZaZcfiL4VyrtLJdWFP/Q + QrWgTLmdfracCk0fDJJoPl8+HxcM8GaYp+EZGWIcCFXVDuVjCnJTKpBGqudNIYL5xZFSbI/tKJ8hV6xm + +m/pFkIOUpuMoF2xX7ylSRTrf8KlDAhTu2NEzZwo6vQu0wDThL+6eFCM4WVxvghFlvyXgVaqbbrUaahm + pA01Nad/BtQML9k2cVHMi8cQPjEyv3S97lNQU/LrQ+jRDzU75gK1VRaYGFzNdMPHRauOUUlOJrOZleUF + q79aiJ5GaTRtzZH+RqEEqwGhY2QSMgzG0cQ+GgvsxVpC6TTL5VONLqfSqNi1CqKF8MKs+C3BjsrOnWUc + m+95T8OXviRiKdogHBFsWKVvn/BCgxx/Yhoppk0MnFhJH3yw8Uc/aqSC9ne+0/yRjzS9/OWV3bsb+vvD + HW5AmOVdxRLB5NSjcP7sZ60U8gY7f/KTFgqZUsLt4YebfvQjFtkhyw9+UHnooQqp9w89VH7wwZIv5EuA + o7ZYD6bCYmW4WQn48TXBQvjfBz4gfRBpprG0RO+d4sj3Xwma9nZUXvf2/BjU0RgZGUqFSlbK3Jt5yzrO + AdtQcWl0mKomjwCWEz2anpysa0xd93fKNqQa49QUqLZekOa7aOmy4hcppDekR+Ib84QBt/BZXZ2dywsL + VjXbKGACh6FPrycOKk7VfWgePbmDZA3iF8UpUy6/p7Hx88PDX5wY/0xrKyh4Vbn0hHL54LLUVBsrl/up + L1qmvigG0cACFeryKJh4RyPtc87nRUQlLUTjRFlPeemFK2HztNComdqzMIy7GHRlrm6Wi1raZydNh8+e + R3eMjK0MuC6NJk9Sg0ygHTURqWD6rxmjc9BYYEVpPMxcl84Ia8J7xeSHFN4EexSEnBSGEi0KSy6EJsBW + A4RWycX2IL4bcgd9mwBviLcH7doGJ7NsfSeRqdxqBzA82C/FaHI2nFDORr9gHhRz84A6OR6pOloLgana + XC+D3sKHObJofmzTRZFzRweHGAocAp38paBYAMjEZZoLEAoExuiglEGR/4d6DgqHmbxBVcH5+fJxx5Uu + vFCS5T/0IYmT4Sw1XDRESQHG8MZAiKQ9fVL+/veFF37xi7SJL7/pTeWLLy4/6lHljRsrfX0hHqFiTK7M + vd/zbDEyUvnEJ0q331553esqt9zCv408Ybn55rIvN91Uxubjy403luLScOONYbnhhhL1u2sXAO/aaxuu + vrrhooukOM6jHtVw4IENs7MNHB72230YY2vesjoKGPjv7WfY2dnbd61ze4YgM7ww8i1vmKevwj5TOg6R + dGmWR+RoTSJY57ewzYjiYrEBRfxdhJ9wcLMfawLu1hUZ0zva6wqb6//E2qMrHLBRPWsfyLAzPDhgpzrS + wfAFE8RTDbZc4Uexb+/Q6LKJxPPQNksl2mVBCp/eWLm2qektpdLbGhpeXypdVi4/vlQ+oFSaoBmTBQKl + vnbK/2I4kJXiXFanqEYIPSjoOfXpGhM8AwOM02rGDtSC+flpTMIqk9ojCxwaL1TAK4haXjTLuwrkgNCL + bKXuCUbVAhA6hzDnRSQTmdrpYmlqkynwlTzg5cqsoKl6YMxhMoUKf57qkFTgXFqYRQ51vGQn1nQwQcRE + 9gyhQdMzU7YXeGQeIx0FXe2UXWEtOfqo3aecfPTgILVMFQjj3gw1I3a2ETdFwKzrR41qbR2CWAxkxvoy + aTW41U5suj411LjmnCqlaZSXjIvp8QnKMNiWqR6wmoU4lRN4C7+gSu6hYoNP0fzKzE3atEhYKpmCiEzs + l5fLGDtPPVX65dJ3gpov4ArVy97whoY3vrGByOKb3tTwlrfwJ1n2AkvXXEN7itIzniFtBQ85pITISXe7 + zk7puGuRiPjw56aIZrNfNujoaJ6aaqJ+YlyAKJ7bv/Kkt5dFatD09DQMDHCczWAYz22lLrKNrgmLver/ + Mi1ngfmh4nkMiobIC7OzjJw+Zd/bcVgCgeXGhgq96SEe9cbwgYH+dbpOfTjWM4IZr0hl1n9wDGdcCHW1 + TU49ueT9PX0yOmsX+FolUIKbYlr5vTyMeK1Hd13j4xU8wtTKHE08bNSeHB3r6syladp+mHLiAlj/OVzP + l6+Hiw1cT7g16hLHiIjBL5MSQL5CREEmKOHnsw3se0IKmW5MNJQObWp6Qlvr+ZSPKZfPFUdMaZMEAoFA + ToREAZNyabkKMlpjJWQK2lYMQBgqVPk0m0x46Lgg5SRqNSW2nJudPOLwg/CzOC9c1R2jveXy+mcBDv1V + K7Ll9dVyrXFrSGEuEc3HWR9kQzpESIoIzLJQ8KUeFpKT0A50JRG4+nyoNiA3NjJEE2N7r5EwQEjlWfN8 + FoTNvMipumjESwEzS7i0d+lLUkom2Sa8nZ3jrcUbmldNw6vp9kHbtJz9eIS18cta042tWSXKmBZNzdVK + zZPCnGpqIi0HLBmQmZspBAiFLMbS5JxMNrPpUSSFmRJQBMhYsJu3WAWZ5Jp091aIbbuAkWr7NeHDoHm0 + tZWBxt7e8uBgaWhIFnjb1GTbxHjL6Gh5cKjE+oEBAar2dm6ospbWyB7pzRgR0W7qFALDbW7+Nb/r7d73 + R0zEsulyCamJ7HPdPqRmrT1gRpCTRt9q6TQEkAfFZo84bDedQexPcvwI9MAi1jMG6k609RINeOnE29jW + gPPfi3C5FUJYyF6yHGMVhXdJh5eRoVpbZt1jZbzjy9QFYE6cVAdIKFTtHqhluLcVyNZ3ymQrDgBPyn7W + weGrQftSIsiZQeOl7R/fjlPX1tzS19XL3bH+A9vbLVf5VcOML9lbxgINCNNHhMbgnbGX+GrKZXNaKX8A + +DRUomQombhUViMcSIm18VK5hyyfWC9G6GNQQcORONsTE7ncA1mZGAYCbYRlIcCQOJiAouufhSmztBrg + XakHrxYL3RFaQLhk/u4RxKzUpNPBfLgop4UmvhhjhLkyYKS1JdVhMmtMQedMQ4OrAUDt+ho3Si4KqDXh + DAsFCA29aoAwhT0HLXGHMlEz9MIuOz46FCmdoGBXV/YujybyFkTRBGsDBqefHrMvEpE2ktHUuVN4HvAv + Q8G6Jp20PmrmJPLpCBeACacG5zzhYBYWZsbHhvmTc2WBRte008xCXW9df7XnRlZLz7Pv7YlWl821rQh9 + fQsXpOFcAfnWBEK5IyAJzGu1moqlFVXwD02NjG1dWBkdGDIDtt1QHKLNKYPiElig3YMpCwwyjA3vBURM + IVCfF3xzGeDxktnV4mASBhYZYFVhCtPqmkGNkwzgETZyqYxd8TXR0YwRsUM8zyiFlgxd+6iBs0pDqV0a + EEr3QYBQl0pLQ7lJFjgiC08ekQefTbfMmenJQmWT1XZu53f9H23GDdve1E4uwvW/fV1bSnkUaKb8clp7 + eS8Or3b/wpBE7ReR30y9rGEKzY9n+NTX1TM2OFIAwr2akdRu7GuSKZhfrMVj9Os4nNV43ft29S50WccP + wf0ZUVCv7xhX4CkXOF2mgENcMPRGJkFeaoeGm62OAuM5EvGOtVvXHlkSoaOjEEG1g6rsWWSENnCEQSEr + nJ33JiRWBXMu8K+RJPMWMrq5F9Qn+46O7p6vp4hK51WX0VLlM0Sqstoo9QOBaXCrAISJ/aTofHH7SaRT + GUNKqVhnVztVVKgqYfzJgDBlhEqGcnjmMMmWeDVZzDsjz/tARWeEgVwm22cvZZslvNM+uh4fDZacyPMM + 4SLty1tSU63VI6DpVCCRjtVfGoOLnLERxqupcamno00QmR+wAcdDNRwtO5elWOgloS2TYvUftUQJvHFs + WIuN4aUwGemgrsxQMCvOZyLEalhYcNPUWkmjOoIy1zE5NgZJ1fml4OhAT9/c+DQoyCfbjcCDj6Nl99LS + HMejWzpAhoIVkSEKw4OlyCReH3qnh7s+xxGLs+X6E2h2J9xLByEfvYmBUsaHsVGxMBuXbGDkhoQtMP1d + jZ2xM+7ydRs12Cn8D/CLbXjpxBsWbU8PNNqfazwYZ9b9eVp1pUYsVT3QSO6+P/gxpqbGqS2yzl1w2EzR + Uja2njdyqG1NrSzrT8xce7ek3g8yerT3MnTXQUryOtSX7y/x2682x1nP8ds2drGm2Bafy3/jLC/Ni/Ar + uHApZ3O9yBLTDcLzlBPmtRSbZgblJL3NPBQf78aUF9qEJ9y9EREV8wIuZrzQRgdekFEjBlF8BLG4YD1F + NFsZsc2rw8jcv7+3l1/BgdB9EJb/kAe/tOxIlnNW8BkG8rdKYeg0UqXcIhY540lNtc/U5JnCA25JcEVz + vbMQXQSGQkgv/BnBSaCoFvxSPLNXLV/QN06gVNFUUc0pprtMs/1IGW4XVwMA61vqUNLMgBo1T8U2j1/K + V0gU0VpdNxhWE0QsuooAwo0bFncftAPaB0G3c2VO1FTHTulgGiY014ylwRgvtOdxvf1Z7EBiYWm/JmuB + 0KOGmig5Ab4q58upHR7wjkAlc6908mepOk7y9IYqYRc/5ujDtm6lfJMAW/4u8/oVMcahNxm3AKMu1D+y + QA0Y5rMpwkvks2tsPweOMjtuKjVSBrS1JEVINKlL/y98Q29x6wXDOpcnbYyKw1Ruqr9+EGHLhGWBtXA+ + oK6zoaW7obW3oa1P/uV5c5csLT0Nbf0NbXTnW+XBUfR19zA1WM8ozHdrqTDZqKnGEr9VspMiF/RvvtoH + cc6sCc56joRtOOa5qem+nt51bh+gQlPvH8EKavzY7QQUGhEF60wEGFUP2L51bobGwAHArAXrXh1zAfD4 + +RGcvfWHX0+FfSYnPKgfycWXXIix6Fq8OmuRMnflO/Kl+GcMsqC9xDUZTPrUNdU/IwuUW96mwEYH04Vh + iIgylcIMCxMg5EaTQko+jtSTRoNhwdmeKV0+zNlgJx8x1M/EX38gL5+dDYX5ciQ6kgb2EHojkJcfi8WY + QJclyRWsHJnUGVsA5jXAnH6YgUG7lLWE1mjczg0ptebPXCDQWtcagMVQX+EJ/XINqwJ7ywKBqkk6BMb9 + ZHDoTDRFWfsUaQAZdmjIGoKU8TC0K2H9sGWo+u1BwTpGHplNSh6FRw3dFqunK5Qb5Tkwg35uhWnSThpZ + HNe9qbGCXcIIPUKcZY6aHl4bLbYEG1scC60gUYH5RY+MdKLA3MSFV1cvFaIWL+wonISbQqeLhbxb+ZOT + MDs7CY9nh5Leo7bqmoe7ZuS+5vCAT24GB8J0aut3PjsZHhycn52RSXzWmsZQsL3U1CFLI73gVSNNRiJG + Rc5LrfCWbpR/x6pIlb7AYY+ODlMFOq7kmNA/WxuaOxva+xs6Bhs6h2ThSfsg/5a7R5r6p0s9k6sDobBU + wfn1DM3lhjIjvmQc7qnqCuW8yYhQbAijsAhSGGdCeHY9n7aHbUSElNTeVSGcUQlL4T5k4z0CBxd3QURi + cX4OKfwR3KeIBjrwr8c7Wph86WGohJEFwNUvStShXZozuNyan/dlfznV82mj/qYOhDk3mrE9HUklVJzq + ov48CRaGwmkpEBo6Igr1dkn77JQCsp5w7IE7t3GxrcILQwVRG3qiWUYDgbF2qA1qjJhIEUTmKWUCzERd + 1PlfmPhnLDD67H3Q9AYRHheUETkZfA3PMjNnvYT0qA0qQiRJ6wUfZs7JGbIahH5BFqfGxqbGpCtQwDzF + JAfCguEl43bRAuNQZ8BGII1Kp84ChS9qfYAcL6wx0bj0anuDYkaXTXuvJPhDaXM5GPn4ZTSvBjdNEua0 + 7vZJNgjfMc4SxI/KLMFnGJwBzoYF/2TeE4ymwUrjv4X/HAUTaW1OYYwBe7p99iTNMc0HnrPs1XqiRZrn + kzHI3PyPgF9nh0XB7eFiqQcUnCYKrURL1EC73jLSQTNuZnQwFyP0eaqxmFWJoNzeDcxLJ8bGFuZmpTy1 + hwwpyNzYWWruFcrV1F4CF2J5Lx/uUhaYruS5IXQtCq4HFxlX6UpI1REnCeqY6mho7mhoH2joHG7oAAXB + wmHgsNw10jk62zm2VOqbC+OfDaD7PShbMEx4Sd1gISedtr0qAJJA1oh4SEzO7KPktM1MTTJB2+9j2PMO + mOksLy8wvu950/+/2EKmZ5xqubYKaRJ2oWdf0gicRdQN4rgq+DW5OgpA6EKI3UV2t6RPMjgsmrPDXUcy + H/oPVsb0jk1u42CZsWraPvP1+J9bRu321us3kEK22b510zlPOHN0ZNjEpUSPSlhgKBmTS6Jw/dMlMgZH + a84Q1VFGOm+ipKNePue6EBr0TLWcCprP/yu8VHRLxtR1Vxe1CbsxuWA/UZIUyrukccGhoT4aN06Oj8xP + TVGKQcuhCZMLgqeaPwWWsmSGTCmNomgGmRbSA1eOP/7wQ3bvdChVFMxYo+4t85Ea/8tjrXyuaK3hSKjl + 3c3i9DHVUWtoX6C8bMPnUjefTAYlkan6mhV1i4zTfTp1qt5E1pjVpSsw9Xzc18vNWHpMMSXf02aCWSax + lSZwGLJ36l6cdWUMB0Je1Y+QHnCFhRPBFNB8iH6n2O2TzC/Dc49BRHYYbmGNQ6R0MYtxBH0nUUF5ande + bkaMHNrSW2oZKLX2lJpbUxRMxKeAsmKcYS9hZGrgbHGxcMv6uLQa/tVdz5HgtQFlbFDjFqeGNidE3DGI + okIHBQKVFA6VusZaBuYaB+Ybemdla45Di2jsiy5XixRcNBAdfvLal/zQpdMQxc2TSqlAIEfMtGI9sL9O + eNIhEiejjPRcr+O0AleLDSstvLzO/fy+NzMU+f19ihC7WJU0zvLsusuAMMU5bgOfDKYBx1ypiTwxDFBY + jAuGW0gwMtxagSDaXaqDSKvftIkuGia5qS+GV/lTi4oEyagwCvjwASqg1YCCjBfED+tGZSRC0yxN4NA8 + 1R2TZU0kA1lWXiuxP+Q6CNbAXqiLnY6kae0Yt28Y2qVBKc1+C+rfWlgoKNgh9UpFVBRUAAqkO1I3hTsz + UdEYUn8/dFa6zwtm9PX093ajB1ruoCFTQvUydBSEi+hlGJbgnOQVDA8TSwV/wtstfBhjfu24ciLWynvl + o3t79ICNAsrndneHoKO9q6DQOsPLooxZXZvsO/IuvrUlcpidhxZj1vKiZnEPjgqhsRsGPwGUkUpsnJnA + y600Xb53Y91f2adKjoWpWzhFQS4e5HHJmGgiz6GLJFe6P5oU4f/mI4gW+ZZc+/BkzTJsdiOws/n5mYMP + 2oElym6WWproMQgDuhrAKyOkaXe50LvNp7Ym2CVRD7n/NfoQUh3CeCDe8eZSW2epo7vU3ltqAwg7IDsW + BTHZSewzZqKRLLhyC0YU7XNhkhRAyLlP06ltzwqNaw2SvCYpXnlJ0uIjSl3bJBYYgHCkoXOkoWOkoW2y + oW2moXO2oWcmxwb2dixmLsC4ZPKpJMmJJSk89nZXbM9oRN7COsXYPe4f+YOoiReg6evrXVqY85TMwtv5 + MQmTr2aT0UGQWUL2M3B+lSc9MqZbq2BSOCQL+e5xWuAX0BrTDr384lXoT5MYtYOibZjHOPnLvnrt+kj7 + nBGmvlBb6fdPqB2TVJApxAhN48lZRpPQoNy0xDYGe/v5Zf0+T+fOjouM+MuL88S3ZHSoCcakdZAZQ5EH + YhQnc81kClgI/GTZEQUvTKqVpagmo2RbsaxXmhoY1M72VoraL83NMRy7HJdFCoNbxKu9aMGzTklEQ0c0 + 5kc8bHJiZPOmJdAu8MKQ3leQGQUz+JSRoQHKbStWZfAW0Qj8C/wPXOnr7dq+deP2bRsZu03JjH4Z3ium + UwDVIdCeSIZ+9NQo21MJtKuDLhN96NQBIHPw6dDo3hknrHlpNBe/NOQrvAV0oaYahDV1kOae1+sexcxg + BOdnIp96RYKoi3q5tRD0jchnqS85UqjxYFksPzVNtpHxrbNjbnZ64/ICH2rIl3LE2pBhLedLw961r/It + uJ5NMk1V0/hn7uZKOGIQI7mtJEQuc9MM9qJOaWuCUKRxSnlYp7GwXmCnWfCvc7DU1dfQBRb2oI6WUEeb + mtEArVMVEA0Jsmx5GSLCMKDjjD00bpaiHh8HB157MGT3LRgypNVsDtSamonakZ/fLh4Z1NGu0QYigt1T + DR2TDa0zDW2zDR0A4eweAWWtDZjAcnkbdDEicKVzxPu8R5eq+c78jvu8Hzu/ct/BiOPptJ96tX3yAzEC + 8KHacIAq5umpJANdaEj6Xi4Ua6G5Pwfp7zWAKeyKy5GudftzPsNF5aJDuMQCpDnm5QEuZYrhoPiytNtG + uLZulEnYL6bWJrpoFE8yCLQQhdYoSGFSntuE1OXQVAJN0iSyjhPMGCTH1BUhLUalQ0MuB8sGoNSYoFON + xLMXn7t/wcKEqdOhVuEsJA7WYwmSiJZ1hMg3kk1RMAlZdRy+a9dpxx8/rCW8bT3AMzE+QrKUxbrSACF/ + YuTbtW3r7NSErecTKRmzbctGcEv/9Az3kCaYAoZQKEWvKHtarC7HCz1wCME66vCDDjv0gAIQGvzwcXBN + SsY4Rkon3uEBSxy08+BsLyecxgChg2hGJaNmm1dWQ4Z7EFdjCj+ZiyrVhslBFIpr6+A4gwxn0sOHbqhx + 21F4Qsknsirkrs/1qUhxUZ/nOx1mXQ8FGsnN2LhxiS/iUzEw48jDdj/pcWfwC3Jf14saZm1768YOw9Ue + ezYVKs7wFiuj6LAX75TQpzO90fy+i8xFmJOMmGTdx8mrTWR9OmsU0P5sb27tbu1CVbF9hikyk9zW7nL3 + WKlnotQ91gActhEm7GxobSt3NY8uDm8/ePPI6BBvsOl2RNVszClgmI9gexxmOQDJfPMkDXhpsB41dXT3 + NYHHkk3fIViINNo9UeqdLfXMCQRCB7up4bZ/QJiO4H6a9njQa28w2Ne/dcMK2TAMm6JY7Suy1p0+6LVd + PwzJ9lOT4yefeMyWjSuF9D4tqvJ7lC7rnhDGbuZatZ9bDzTDDrjC+IKedmpQp9AlibcpphoFtBmDU8AI + jYU4ohS6W5yb27pxBSQo8MUwW9Q7xx5+q8QbTOrpiDlBLN1hUpkHPyeCARFdDk2CHMIUfZKbBktq0ySS + V2WsiV4YkFBygeTPWFy0ZkqeFU12N3xAu1gyG3nLXkqJYIKILVR3I9ZViDCl2WxW/ctHXobv8dGRyfFR + xEBrv8cyMz1+1OG7Z2cE6pJUgWAZHR0e3LqyjM7vOQygEbUsAJ4kxlYI0UX+FNLeFfmidVOoXgjyZaE+ + 2UDT4YFDhTGhgyl0YW+BgcFNbb1xQb47cBhhL9hnEvEz44JsXAuEUY8NVtXUs8NOmBmAvsYX7SPYA0FQ + FvvifDrPvS1UjawqPqPa1MOUfztGCiBEddRoX6T7oUJs+IltrhNrzXgGBQe5a+e27ds28WrqSV6Ym968 + soE9+2Vp+Tlx0pZTShXS5KZIQXEVRij6JLcYQMbG3IOpfca6VadR9houGOaj0qZOHBvucQtMMQn/h1uY + z0OrBATVhkPmsD6a20tdo6XemVLvFEBY6hwqtRIpxKXS1DLcsuuE7SeddezgxHhDY0sDGW7t7ctLi8z1 + 4yi0vwMszGFhfqZfonKN/CCDA8OdUFJCQnycoaAAYQ9O0UrvROfkxtbRZYFAFujgfgLhfmJe3bdzpU+O + 0uFBnCyc5TVo3N5+Or+UXdt1UQ1ycvjug17+khccf9SRKRASyOzr6BntH+K9e/WJMulTH9B/Gogyi12c + nZsaHxcsTJCbrwYHEOU9WWkIqEgY49T69QKg5f9jXM2hLpknFkTRzCZqoGgLN5i1UbU7KjrdUi4YYvtO + Cg0OIyjG+mp5d4BNfuvOnbO4YNEXGrpM5FUpb7LqtbJCmkSIA0VDBBSNwhH4MhIgzErDGMLVRcEEC3NF + 0YTzRQepj8hIuzBCa5NkSQ6eY2DSqK0BvVjsT6354j6XDEiMNoUlhvSyNVHwTN0u/qruXIN8hnNKJVP0 + Ms5nL+GB606U0vQjHLQCd1RMle2DiKr0MYE3x7nUX8P2Y6N0R+1NX0XjPfCALRs3LuoJaVuYn962bQWw + VENQxoyDhpwUYyvAoeOf/wTye2mk0DTYONcJBWPzAeAggKcKAcCp9dk8myJcV3bFpkVuDQhrUimEzwCh + ID+lTSXUndadkTodchmzf+d/Pv9jhwT57C1J0L1OToVLMgqDFsR3Icdnrfk1toHc2zIYsH8qESC9yRvp + Twfy9c3gwCz1wbcmBRTJUiBM2NHa2NfUN93TO9Zfbm0XvGwisN0bki7yo2rNaLlegMR5d8rJx27duhG7 + EOeFi5cZr9YXbQ0oKNy0V1ImeidaRpYqgwvikWEBBc0s84g91k2bHils0NF2XQkegWUrJ1/t+44OD23b + vHFooN9rjbJxV2vnwZt2nnL4sRPDY3t1otiJFqrei8Pbq/3XbsztQasN0nqcRtt55h+bEDo4hfUJ6vEW + 4EpVjkKYMECqc0GHt/BE7wm9O+xGqr1zJCdJzWwChIwE3DnMPG22Wc8pkyUL2mFzS+N6t2DeGlGTBBED + Ota01fVGEyKTYrvzfHkP59io5KGdBAglUERoZ5qIHD40SaXICmrHImreWTA3YgYXRm3zPO/ekJNA1UTT + KiWqheWQUjY0yOfmM/NaoWsMkawHKUGIxYVZCJNTKAMGN7PUwlLAsDwmJYiVo4bO+fyJQZpvr0AoS9hA + Edol02BMjXicYipgTyDfEbGulGoyqbHS5IvIc94+qugIjhIeI/duZGTAioX6tCAmL3qpgVzhb0/Vd29q + ioU8h2ozL+GnzzPCGP2NjDBVTfXCSJV2nnvdNe1oqqFBh0CT5QXYWiyN1RLNpXb8cUcdtmvHNtakEz6e + 8xFTU2PLy4uEbKJYIhDL/TU7M3X8sYdzNvRe8/zCrB5TesdZRd96DhqfxdagY07+Eb1HBhbcLoQGeydK + /QDhTKl/Dl7Y0DNe6hqReGGH1DltaCEuKOApPtLmNiJ60DVXreJIpRPzWPojfbLHsZHDIFw1NjYiHtHw + KItZ1OlgAMKhhq6xhp6pBo4woOBcg6VP1H2EI9rj56++gdp4YkJFO0H9wKjweDGN2CMWKv/AQUMul4To + lhZnqQ+efpq5Hu2xH4dZfCt708srxP/aW1q3rWw8dOeuwd6+R/BT9rgrnTnuudVU4bvXzgzS04Pzbmp0 + As7tkqlKX71c25TH27ZtkyW95Nlg+CsVPxMsTO8TDwHmLDMR8Oy/ckNyr+OI8wlp1G3CBNa5YEoKGRQo + EKV1tIuW8VQpDXEBsdtZfwmXRlNTaK6hUjoqaRJhzheDkikgJ8qYjX3MZDuxJqLCOUuoNYU6Y9CyZOJh + if6LoIsaI2EEj91xU9UuM/ob7cNvacO6djsKkT+AMOCHFjzDJGJ1RLXyWYABwRWTQItAAlAFadFhyXEr + 5XxOAVP0cl9MQgcNCF0j7Rzs76WtEsYcRuSER6YMkvWU5O7bsDQ7NTmK0FoPrTnIQH+VCBobNsXVCWWg + yMxiyQ9hZuApGS4UxyBrVm08LSAQA7EhlFgAQrOkFvJbmHNwDXDAlonor4ZLIsusz9UeEvAD82K3wgiE + mWWGC0kSPbULJqEMWP6GpTkmCqnyYYjIBvzi01PjXK7cEdFZKphEOiYvSa56Fk3IeWQ8Uqg8MKuAn64P + 92r4T+G+9sChjgwyARanaLmtu9Q9WOodKfUBh7Pl/vmmwbnGPuWFncOltr5SM60uAD/sLJWGppYGDCxg + oZbyDywlP+6sgYI+6AHDfPdVt6TAi1RQi7qoxQgtidAsM46F/asAoX7BvdT0atDITMiSKVEp08FrIJZ6 + 4fe2PkRrgAGfLZMiyevgQher1TnnnDk+HtIkOTbm0Ihee4STfdiAA7Pwr/88UCWtoL0Wt5MCBpoWuQ+f + WPsWPt2Gs/Vg/GrbpLMEe97f3bs0O8+ps0/kGpqaGKcyCy/R65hCB65/+nsd//JrCviXzh9TXijPgyNG + J5I+94w2mVS9iVqoVHq19Wkp0SYmTww6CSOMeRHaIDcVlyiaJT1vtcC/WxUc8HQAMkYYg4J5d5+lT4B5 + ZFYMDlBco5gRoT17vQBNHWuoU0C4o5k5822ShPMxzE2MD2tnhmD3cGuMBbdkHE+Kf5oJ0+mOwUZqsGQD + Po4uE7W8KlM7YzzPKV0B4eriokujDnUpR9Rm9zlGiDd1cmxkZX6e8Cdfs/DpTh9Zz9ffuLKwceM8TyJa + RyHXFd2itGtwq8pwZKXCDnu6aGo4Pze1uDDNepdVeYmfwOiysWp7KSk+4LkWuRRDz6Cw6jNxaeYn2LRx + 0cy0qqDK9MhtNR4mTEUFu6IcCLM/4xUY4ohSv1Q2c5+XK6K1YUIXRTOYtIC5Gj5jQD0VV7JAg91czgXt + ZvSJaUTBzO+W4KKbABQEzTsDHYThtXaWO3pL3UOl3kkIFhG4sZUd7aPzDV10exoutfeTUyjJ9ZI4IcAp + QEhaRT5Yo5AmQ5ONNj4wmhzFURPuNElPP72MCMwkZRUmx3DTEkVRqqlpTTUqq1FfxlMJxTgz3tA309A/ + u+a4rXC47qKdOWDjQJlJO1bZqV4/SLC9/KTRtqQzcco4hz2AkVzJTtrWv9vf35agYEdzO+7FtdBdcZ1r + Xdu37KF0gF1kezzgwjbCwuulJNqe5ErSI4yMULrvyn2TTcrsKqxPClMs1N8z4J9dlMma/IQyvlTXtJas + DCqohwYL7pgUGvOjAC28Ucak3YSOF02EjujExGCnrFrRLpSPyelRsVZkqLKdL58mIhU0lNE5Jk1naqeT + ALYxumDSWc2SpXWbvdMrnvCnBZ9ypsekGmccskOCHYchYqPk4QWGJEgWpUKXQJV+1aNWSdKeoEiEkATh + QiLExOjw4uw0YmBBDnX0yvTPEDiUAGEBCHkvDI+dFDb2fUr6R8ROOq6ZH0cPLCeBpjiXyrwpT41v0aBp + NzPmCX76CISCeUDgli00NZ2OE4sQQHXJNK3oZnRQXEuaa5gGfVNPDchKsSFUWSeLaYAwn00YBIZCvDCb + hLU0SzkAlUPjkvUFqxv/TqMDtWSx9q4J2+vkMk4xCyGJLH++IJNGdCzOdG0okJgFMkVbR7mlvdTSXm7p + KHX0S3Swd6ZpcL51aKbcMybqaAf20b5SS7fUHRX3SjPAWWlp7ZaaUGEYtHGs8K/+GYZB8U5CfancFjGS + 8Wd8bBSOxJy03jgpFEyMORBB8I+aoixgoWUTSvCSlZ2EMBswuPYneYS1+9LPzjWVLW6TjdQ1qR91D03J + 1h4H9z1uUJgv7HH739MGEtBWMyT7F/VboWGNzwLOJybGuO5xxhY6Au7nEVpgjwcheqbGPmOoMcKEz4kX + nE++HPn8WkzhMMNFAz+bDGpYUCAw3kaFu6U4zbS5qvPCPASG8jHpTV4ghavd/7FRgBjHbSrN8AQjlPY3 + 0iXAeGGhoVJoC8DoaQl8joJSiTHtIKF78OpoDnWMkpOjoyefcDSND4eH+ldBwcwXI9jQK2351BrqLWoz + sc6G6YSyZNzFGV5qCnWaFZ0mKZHKmz9NBTXwi4hYi3O2ht4LE2Mj+E18A7gaWGK6q6FXgQ7WBULfJsqn + QTVVxsmpyHaV8kX03hqBdM1opQYjU7yUt5sUHLMMOXLS/60nop3AwK3jtCNRUFNGqECoFl93+QaYZPbT + HmTtmhaSoXJboQlJIfEmRqaDlUYmUqEeaQ4CXeSwUDeTuXiFN8mxSaZErriuxxFzcfQorgiZylVocjEm + l8UUY/zZXDbettnEN8x5Jfm9abB3oLOrt9LaCRCWmtpInxDYgwJCtmCBtrQJHZRXpfRaUwldtJESvu2Y + IpkKxqEvM7Gng6ETRDH2WXphHOv4Aps3rew+aCe8wt/CIRFmzUgXWNjUFlDQKm5LuVGy6QcbWiGIOFp7 + yabYg2tUagDUjOyRgmQMVodMqRQgCfzRaxGeJM4U3kjQgFguv9PejvvKWvZMj/Z2t/uwPUcSMwHKY6PD + kxNj66/IwyVlfs59A/I9ngE2IMCg1XlyCBdJXu00Ri+tYlAwHGA9UTQmSXiNGRyhqvrY/VMIM6QU0J4z + alt4P40LFuxt+mdWRFjv6pAaVeuUgVssLs4hq2VuAh01+JMPwk7CzCACYYaFHgiUMU7aAedKaaf1tFJH + TIaCGhZaWVq49JLnn/fsc2ZmJsg+9REzTyMCFpqGyUgKaSN4BlvKS3Pq7YytGFLHY8aEPDoYRVHDgCIM + JLBHeoOlEyQumOA1daASu8qghCoN4TSrIeTO2zagIEgvtUB1AcayWKA8D6KovlSESUHW4f5tW5enp8eY + mth7VyOXUa2Vo/VdRYNMBoccYXoMrvEWEDSeN0G+mGcSTTc5e63pzxqCTUp1p/xPf9Awd8nnWihGavoE + kbyNy1LTwCPHduUkkyprT5GzJZvHSvs05eZqSXi7WBeJC5tbfGV5aXxsRK/5XH3B2pvFZ5N5FPQ21wJq + qTQaGWE2Yc3EnqD7BENcmA0TD2ruKBP/a+60f0stXUL+QD4WnrCwskm5IG0omtskuV4EPxFvMpyLzC+u + yQ1WdYc+Vkoyf1IQDXaB85+sjEzFlDChMkJNnGjoiNHBrnGtu03W/yiWmcpepU9ozQExUyj7COZCg0A9 + ag4MX6IsWmtcVNUAjfoyJ1TcwBqISr+lyZ57HOX3AbR+H2/R0NGgRWg5HdwJ6zxyG8T3+ZDST1ljSlAQ + Oet+XBqdjhjpqmdCBB31/MUkI8Jh0iJ6posmk8disrxctW0tJPoAXREyDQ0zUDQINGm0sABtLodqslP4 + kyGMfAadHWfhQJs+k7qI8cBiM+kisJeZYnIGUQve2JLPl8/ET9dFIRm7dm07YOdm1EgzTVgs0MbN/IiZ + tQ3C4bkwOwMQRv6XVc4sOP7TKJfmCHpEMIh7bm9JMcChkcObm5uamCBKl7GxHJnT9SiTY6Mk6AkQKsYo + HMZ/U9ACLKOeGbIpzCDDSt6evGpwGIjj+Pjw1q0btOBLeJduKbsKuJt5TU0dFTAGevF/JgkbZpCRRI5a + uA1f36KGBWdp4hvyqGp8khBETVPxGG1a385/x0L2fVp9Bi8Vc+INi3MSmQ6VZUIB0sK1FK8uscwwRcPZ + xP5RvDnsGLpOMl817TVe2IaIsoYLDNyFldqr2r6N2V5gh7X3TpyPxhh80uA63oC5KSzb4+IiC0tLxniT + JmeEeqt74QzaCkL1BAIFDiMWKhBSU0baMDWLp5QFSwdwyFKTGu4kL5mUp0ZIU0iLg5lUycjX9hrs79+5 + bQu1FQN/A4nInRDXqCZOiEdmTIKCvdOaMoGvdUqKq/XONlFulAc/D760tUVL5tgL87NQOsO8WBxHMI+q + w5s3b5yZnWlsIvjbSjFtkJ9USwmiYhASmAzMo3Zc5oQODZFkObpOONlnIHmk3mgerX04WgJO5NLtszK8 + V59YmFVFITSz/9gFl56TBOxMfJB/i0JoDRDm44LBTsYbDRgNHz3qoDet3L0GfvpSBntx6loHBVODzMjQ + 4KYNG0hxMYt5GiNJ59FBTYrt39LoSyEWaNN2s7xL1FC1UO8yoeOaF9bKaJ+Ng+bCMK9ErTW0FgsZsKxL + Qy4XInNwZDmCEfY0eVwrcxaSEBwFEwNLLu1dHKRSkTqvZCagKORPOZwKlRkQpuBnzxmvhwb6QNYgkOZZ + nQObh/0KOGp6bMYdFQjdZSpp+L3dmJIsxd625MilPmpytBzD2JhkSjhap69m3p/YBCOVjj31MHMYRcuM + Ty9i+NZLkmbx3aTqdy7om/pFRd6MoWK5YBJ1XY1XIfvCgdAam9hEzUqw1phIsz5NibAf66XEtEI+C0sX + knJ9XTQ3oZQ7saC+1Go23PLQrAO2bN21bTuSY94fHrDQxor4kvA8kT1ptxSoYUepRXmhekSVWtKSqUXh + sBIiKzq82COOTtlopGtyTpna8cqYVd1BLNkR6RPNIo0KKewK3ScAwh4FQlImLIOQKjOWPsHZJHAlfp56 + SGXrGLU4L1q1JAqhYqNB6KuMjo9fdtmLzzzrMdMzc6Pjk40t7ZUm0kRaZZEGHMBhYwEO+QaacErimhCK + uv6O5Puoy0OTTv6LP/htmKVlCnVyuBCTR7akeN2LwwAsPrI/arBQZlgcJzYTqx5XUFPli0gL6cAKY1ww + TAbDjRBEk1xokNtydnZKXd0ZBLosk8inAQJxu3sulCqiabHgUD5Nm83IZc9/mageuXv3hoWFCIQ2Ec4l + DkYUDO7QXIKEqqAxWVD7jCdtx72gTGSEoc+AeGHynXUN5FLqYCprgQ4mdWHi9lk96BAF9NhVIe0vwcLY + qyErB5OVaEmZVi4ylyRIhG0yqpdJlAY8GZ8LwmPQOQ0miYbiAgWKIoAF+FQw64IORkaYWWCIMvYqy1S+ + KOVmbHH6GNfIp5MoSbmcDAhTChtDgNTZOWT3jumpMYf2AsbncdGk1CioWsnTKCPzRuxU/GkAmU+u9wpt + TuJzTRxTXmgV0s0qBSl0d3FeSwiWY9fbXZbX6zCECQuiRUS+mPOTVCUt2GfYm/WRzhHB2InFQgyJOhqf + xwloXpIJM1f2SaU87FK8N+qiBoH+r5NCV0uZk1LSE0ZIA8LWMpmClP0kOwIVFAiguGhow5QLndmw40AY + 5+IBHe3PugN+wfpQdyR0mG1AHaUhomBhT6w1Oq0ZhHMhj1BAcXb9yGLHJG5ZVXv55s30eWpuY3LVMzxG + uvnkyPh0z8BIU2t3U5ssnBeRjxvbypwUKUCuSqk++KVQhzjj6/l4C1XaeSHpjY67q52g9extH7aRz+3r + hdKt/V424+qBmCP778OnpG9hV3qt1omMFq6PAu7VXhOR3tkkzmZRFhcMYjUT0ngJ2jbyenAqR1+MbZDa + ZPyusPXundm4srhj+2buTI+6J8GJ1BET5qfMwOw2jtPVLECY3tvc7ZhNrOER6jpBQR8R0DltZl0YI/I2 + vEb1zqTJ8tINoCCB1oqiJkOZoSZdHAiTqiUpKczxCQZcFEIS8bUedJom6KmBgQvmLDAxFugRvhjty0Z5 + G9zBoQnuv9EhSn2CVQ4JBcyw+JwiH+8K8TwBpwCEAbeM2MWIoECXGjsFBR3wCsCmTZQEBe29QCatzQEb + sA2Fc35uEt7s1NN2kh6bccpVcjMCTeQYyDaRfWZxyjohyXiuCq0tMnGY6YXM1Wbo/y61eCTvQj9df8es + 9Yf9GTy9mWoatvH0mBqTlMGh11XwNPwAkykKmmhva/RJbYq9J79618yQWWFI6cGCVDIpxhREShVnTYw7 + pPEIvQez8IShXuRsAfmylXkfTYgU+r0v7agxjooKqEExybLXpeg1MBTRuo96TDocZZjnY5GNh3lymOlY + a0BAHN+STUQj1cx6goWEBi2h3vDPcurXD4Q2EgokaR0BBNHGZnQeLEP9FUyoTThoAb++po7+5q7B5q6h + 5s7Bpo4Blsa2XqCxwjlSdgy3tK9dlzatjR9cM+PDI4N9kve2n0izV2/nUClDimF67c/lVY6QW2ofvpof + j30zLiWC91oUbb0mW7vAC0eYXhPsmeTuDRvmrRGjvRSv0iw0WM8jE1DQUDSFQ82HTW+JsgKSlOK1Rw0K + huzARJMJLNBmr4lTJjPIcCcfc9QhZ5x+0uAgAeZAGQMLVFMMWM444p46HDkY0h0Igx6V1PLwHK9EAjX9 + MxcaBHcZEAmzodQVWkkYEFpqmgZpFPns37jYSMo+lzfM33HbNZdfeiGowNCZWkPTTMGo4OV7+9UUZPHC + ZqnhRXwxuFoUJ5wjJiJnQD7TFdP1EZ9inC/JhYgAqdurfJrFAvkzaKryxpQUGhCalIo5enRkgDQDE2lt + D7Jen9DrmKqqhePB86yNojwMGeqx1RhtclXfinHQ1Eak5b8jHcycOOrFbcMlS5SXn9gSWjIVNP7p2Ydx + g0w7zVAQ5IsF1vNlFoKWbhM4m3Xlr726EJhzOCfsMBNLQ4wcn4om6UvDplhrsACEfJzOQmiHULgZY7Pr + AITyKrcSNSvYXRLvD5yvHh2MilAcAWzivvbDRgbGHm5X5q+cw7XfxLfjpO3zgJ8TWMvIpOTU05VwOMmm + V1647hJrMtzJ95Uegk0UcIP5NrZ0tLT2UDROoK59oNI20NQ53No73tY/2dY/3dY31drLMtnSM97SPdLc + CSJ2Q5+jTLpXSBSoqNWEXaNG2l7vdN1vsF933Zvv74Z8FnYwOnWtncSZ6OziR7UrLM6kgh00/RNT0szM + pBFxcEalaXnLGteuX6bZVDEmd9oajYjI1RzppmBqGh3MxeqjVpNXbDx6UadqjNyfrS1bNi9v27rCUJXe + 504BU6M5305yszHzEYYR8aqNFEPemE66I/5lZtEgcGURwTC1r02c8OGPAZ2KoIywCcnL9NLIMMTHc+AB + W7/w2fdefeVLYJa56GBIkM+1iXDTZq0FxkDOVb4U8HIumMTqYvwv1SHF3hIxzEHI8CkKpEoNVT+ExcIF + I4Z1Gy+0LEDbWLGtG+SLpDAYYYzzDQ31audCE0XlJWvAy5+Mzju2byLnLx5eUGgpaDagCYhpLDBmXGTS + q20g3zrv7nH9M0qjmQk2tc56sJCqbEtLlKzyDlaZd8lT7yMWZn0twjSIVsBi0o5SQR4Lbf0qDuQ0udD9 + WUGxlxB1NJcWKuKmufZc/BBkOgQwb/BgeV04DGJJY6N10fE7KM4pM6fMzPTE8oZFtk8UUfeUFqVRHW2C + wpQbHOJc2UaVFOfAXL0TZfyxSIcNWfkhKAvTcISaZOk2+DoBRWONZt1gZz7ygrKMA8mAqOXWzEFK+gRO + mRggXH+t0YCC5n9tbG4dGBrp7husNHc2tnQ3toKCQ10DU+PzWycWtneNLHWMLHWOrnSObuwcXukYWmkf + XGobWGjtn2npGWvu7G9q6yJwGEOGewcYeub3BY04TespV7Z3R/P72ZoviGJg7LuNNEWCvXt6GEY7TjsL + zCNizh0jQNvEVEssr/lHBoqrzdSSi95aOkv+gQGhX/pukMlH41NZJuN/zgVrDW917KP0miHrT4aEzFme + WkbTcAs3vua8k7YrmYKuREWFqk4fiaS9XDaQFfLlTRkTi8dgvyXFm/neR8wkgii8vreve3ZW5EEiYXSN + sMx694iiUlqBMfPF5Ps8ZOzQPJa1gTGjdA519ehgqH9moqJrnvaWCGZd/f2OhSZUSloFFFYBMsT2AMJI + /sIa+5P19pJtGe0zXX25P4U7hj2AiL087zFIzoRWxUsFuZCnYTAZd6tPtLEwC+hFJR2Tgu20ZOSyZrrg + r8pMQjP3bUoRfovoVypOU+SX8h/LUiyCuZTxua+rmw/P153J2jYFgAwyQ05siJYZ92S5LipYNTc9NTE2 + qnkB0tghaqdp58IAmRs3LO0+8ABK6jn+BbHUciowWse8I25D7gXi62CDayoxgmiBQgE8vh0fm5dzUkx0 + duizXr/pwyji40A6gY4jjMCVRjSF4cVRy8SpQDN8faaQSSWabARcjYxwe6u1J+hnPJE+ML09YY1AJXRQ + a62JOgoj1FqjLo3CCBkdeA+HWH+8tSHWIAjPCxG/jq5dB++enF4oN4OC/Y3tqKBj85sOfvJ5Fx516tl9 + 09u7J3f0TB/YM3VQ98RBXeMHdY3t6ho/oGtiW+fYcvfoQtfQJN2hxESzbtHPDoyR7zGnnfjEs8+01IW9 + egz094+Pjq76HSm5otdC7T7jD7RXn7aHjflZKbe3Gq/FFUc+QBAhydFPzpJD3RofUHebhCYaHMYQd0TQ + GjjMVqRCaIwHhKufQ12cnzUHkOkdgCKWfU+Q8HuoAId5CbSgiNYhhY55vBGMYZhIY4SuiMb5cqFCR66I + dt4OWsj0CtGdOJe3mX5uZSFMmKUMSp5ZwDbjgrGOF85AwUI1NbTRbsmAMKZGSOI/a8gWCPwvNohwwHPH + hyJcnahY4nbJBd7ykmMRbHLQ4oplJIWR7WVIaapmEil0nTMHhK6dJpQxwcUImWmuReSLRcHWiWzKPtMD + Q3Gdm5mEjHrs0xExz4+DLsp7ad0utQJ6xL/Dn2mBOpuXyI+YlLXzDdIf1+3BmnGRMMIkimxZNMoIa/T2 + vKE09ZFyATMTmoeXBSC0CGKW/2ONbVlsLihdpShMmu/BYjeX5JWj1NB7LBpH2QsbG1KmU8/olzHmpx7P + aPaOoY0s0TARSFOC6OESGwaKo4f/zelaWpwjfByJoMNh+qZgWTeEjLP5TOiSbvDSOjgHWDbUBK9pSeSu + HEFkFPXq21JlTdvzin10QjMopiSn3pp0O5Ymg2zIyraInnpk8L/yI3R29w23dPQ3tvU3tQ83d4239s0O + zW7fetgpU1uP6pvb3b94xMCGYwaWju+bP7F3Vpb+hRMGV44b2HBE/8KunqmNbf0TgoVA9JpiI4dkJgg7 + JH765z/36c96+jl1EWttbLDrZrVt+KACrfZPxJdRSFXZf0jkbIrJkVlFMtXhdwVRNElI2Evtp3D5alpP + xvUL2/isSi8gcfm61yaZb0n0kQJ93BKhBVMwzmRXZIEIOv8roCDvY+a6eeMGzYqVO4EdUon41Ecdx78G + jTW8UGYbPiGtC4fxvg0BwhQC5TlAqFQMilZ8KRZRS73mzg7ZXqq6hNx5nWWnPQVj7jMjl+JWLLIc+8zV + 2mQ8axCP//LC/MblRfiND5dQN+kZBCGKxWJ4iU702zdt1D6CXjtbzBqYcWxQNoKSWmOCEBpDXN05kROC + mNGglFelQmhIeEhYl6uUDipG4ITVBc9LZooR82eMDkbmZ+Jn2MbpoL1dSOTwgOxH32ixQHOKmvqqjDDn + rNEjzwRV5XyRF0bCKh8Xsg/DpzuQ1+B9Lmkyr69S3HWEujnsn0wMaymcFOvxUj7y60A3UYbzLR5D/4pC + rr2rBTGbIuSSmi4qV04OC4MPOcYLM100BBFpQCFlbL3UUcFEE5pL25zPbpbCjeBhAg3W5ypRpLde4k3L + AhM+YU1v3vzzYH/xOW6YBIe/sxm2DiMBFm3oYFwiSHHoQQcuzc8Z3KSiqMFeRL6c8d229MfY8DA8mHum + zlDMZuTrkaMgrX/9PQxNSTMmYYQDUmVNKo6SWahVZmggvBrPMOpgrh1Jk5csiGYIYaW5vdzc1diOKWak + pWeyrW+2Y2i5c2xr19SBQODQ5hNHdzx6/MCzxnaePbz1iUObnjS0+ZyxnU+eOOjJ47seP7r9tKGNR/VM + byeISHBRsy9WlTr5ReFGDoQka2hT+L2mg/sMXRJtkm4me2FXWefhiQk23w2KS5+cXMtkqPswEbweZ82t + E5RtbOSCA6X4N86nQrzQZjRddEFqqRVFdb6TVFCz6zKROCJNjVe73Ic6e3QtBTGHDzW6ZrdGPlgYgLCA + hZ4LmAmhUfZM7/N0M2eBlDwZHxkhVGMFqHJO0VAvxjsLymzIhxtJnMjnztv8XQqFJFW1as2issZz51tb + JkZGXnjeMy84/+nYLsw+A3pBVrBN4tD34s4ytvb3wgilcVJS2cTAT/Ev1n8pNPkTBS+tT5arc+aYF42X + Ka9Sh4uqiEwdXK7MP0npWpA3pZSM1iQL6BX4YmB+FuRzYOMJPh0WQbj+7snxkYXZaSAkFUjdI2MKaoqF + UU11TdXEz+DEMVHU0NRx1GOTjv0GpQn81ykIYGSRlkq4T3nOW1BHnZc7HHpcVkTskWGmGmkBNneWhhhh + V/v42DCd6NkzyoHPjQzJXE4wONR/M++o1+bO22eM/2VprCZgmCPGXTNy8cdKNBEFpcSMPVdNNcumKGBh + GmtQ2AvsMNVs9LYNbje/tYUpOvplqRTBKBfhMHPS5YeOQPjYrU76sKkH2pdwvmyMYtQCw4eHsEBnRn22 + 5AZmhCSZdGFurv5QyT4YI0nxa0R0E/1SIbC5oZFUwtiDgmZM5FFQay0s/VKGu7V7TZgIKIhKCw8FC6l6 + 2t7U2tXU3tfchS9mon1gtmN4uWt8e8/0QX0LRw5tPBkInDnqKfPHnzd37PNnjnrhzJEXzR59yfzxL5s/ + /qWzx7xo5qjzJ3efM7zllO6pA1t7pxupPgAWrtIg0E7uPsPYvr1xtWnBHvfGG1UGqdNTfo/vZQMjfHU/ + nVGSKmJm9azHAmXCZPMpe4Z9knt9fHwkJgiGeVa4GBO1wdcU/DJp6DuFw0QmzTSQpNCoTAIBR6nDC85o + U2WfTiaWGc9tyuXOp3dswQUXYC/gHBNdzaOXQq9Ns5NTOzZtBn1jmDDXbsmF0CQ6mKZMMFsXVyfnln5+ + tHXVcGdI/PJxLeJiLBYTuu9KXWZeIgvosIMP3LFtE6KWKaLc6dJjj1ow+Ux5zopLpiRPdtJgKHZaT4lg + kimvqGaWkCIWxopoWX6ek6qCCto5MTYsAJxwu8jnMhR05ROQA9VgS2DhCEaZGBRMAoEgmVRuYwODNP4N + QKigyEvpu0wsNfi0LRMcdXqXMsL0izibFOgVljaEGTW3QRpBNCxMo6QOlpxV547Gs7Pk+sDFrQwp85hY + mlVnJFHizqKDCN3uGV7ZsPCok46ZmaEIiwNh2pUppYOJRtqSPS/Mxry8Q8C/mFwRZ3iFYqS5GqRxphhA + scAXUzHGIDCCYkxqSuyjqZaTTmctBKiPMHjY8yQ0mL6U+QbWHHxk6ArDl27HOIZqRRaWtxtiDbLqti0b + KWlZFxQkjYFib3wVRp1mumFI4iA5/lpWRivLUG6bf/kzLNKwnoI4zb2jTVTcJqFi9YcyQkufL0vW/Ibl + le6+IdALC2hrz1j74EwXYb/JrT3Tu/rmjxzYcNLI1jOnD3/a4ikXbnjMy1bOvGrTY6/f9LibNz3+1o2P + vW359NdvOPXmpVOvWzj5FdNHPn94y5ndUwe39c81UqT1v0ymPD8ugtnaHSRWO12RTglyc9UKeV0t7Loe + YEy2wZGxsrJoVqs1cNoutbpgaW/0S83/NLJfcG2lQUH7UjYj8au/AIf+kk8qocVQNJyafitGj2hWSkZu + bLlxQ1Q/3dJgr7CGP5kUa8PaUFzbNkPGBAXNF+cWu+CLSeqo2Thig46xNObN/Et7CRvCqP1GgwKdy4dS + Mhb/E08EHf5iR7pUFvMiWzblV5AL2mZKI5LCabFZLpvlcwR9XC6kAaRjt6h80Q8S+V+wh7iZpTZExxpY + y9iImEriUkx4cMMLbMlQCsQC54DDwNgSR4yBGWmL4/TvUnpnjHBwoIe2guNjIFXMkbBMifBv4IIOmYlP + Nae1psfpGqwhqzZ3NFlVl+hEDexTSSErHQiDfKprZmfGN21cGA6VV+sUJQ+KdK5CWwaWxgWZ61i9G6+l + wGFM0kyxVyqlqfaeKQomiiaKgsycPLnC5lu+BKEiX9sh2mRU0oiMMJU9XBT1W4b5p5V509tHbiLfhiPR + Di3Sv9DuR78r87dnMM4kXNBAT3yeKXGUBnkdtAAKyFc7bmSQmEhNccDJkDEJzrhTT2zndqg+oPEn+bx1 + CzuzL2y2XS0dYKGoVC0dZYqIQvgoqyZNJ7rlOXFB+k4YHAKQipFtPUMzK9u7JjdKoTXN+lrVKaPDJNaW + lu07th96+GFEByutvc2dQ219k50jiz1TW/pmdw0sHTG0UVBwavfTlk++aPm0l6+c8eqt59y28xnvOOBZ + d+945ke2P+3jW8/5+JYnfnTLOR/ceu67Nz3+9oWTLh8/6Cn9S0e3Dy4IFj5Cbfz2EmJqCBasmvO4ly6e + 2g/llKKK7TMQFvDMujukn6Ib5DJk/C0ObL59ge0VQNGhzi9Mu+Id1yMK5iZ93F0qnjhAGvMLcUGeazxP + GCGngvs5u9OkBL5E8plqM25Y5L5uqIN3wc884GH3vwwHSQFG/ZS0B29aUzSHi6hSBMJ7egX2tFGRDBaC + XhH5NJBT20ephbFP6oKqdClt4qVBT6gpWpsyGBMBs05JSQgqCnHSXTaLBeZyJJJGCu4RdU7ja4JgqLG3 + zG+ZSIgOeBnzAyH6VGOMMqNF3RyoXLR0/6dLkZAwxFIBPCl7Ji2TeA5GKrcTyKS8Ac8prr20MEPOe0yl + cBU0eEodMj0YqY4Vt6HmQ4+xfmnEUbObuiTrQUpAvVjpNCaHBOJoHHFlZX7rlg3sLcmvCHBYiMsmpeyC + rTRmi7aieC9Ld2hrMJmVlTEUjDFCmT8VFHWuvUka+XZKI99a+4zPvRJcrM2vz65tm/MpwoXaSQEIKWGo + iYB8RIaR5p1pbpqfndmwOM9tFRXRlBSaROp5FPZc3mXp9pQToQomNeRcK0JtwrOKqcfQLg4F7iaNTyJ3 + DFiqM++CCyEZedwak4X3os619tDOPqRxn6GVUEAwjwa8XUQBR0okS0gb3glxxBAUZL1gpDRmqvSMtY0s + VgbmxC9DCWm011U+xyyjTB6a2juQDCQ1nqz55s6Rtr5p6GDv7I6BpcOGt5wwtuOMsQPPmTvy+ZsefeWG + U69dOeP1W5/8rl3P/eTuF335kBd955CLHjr0JX9wxGU/P/rKPzrqFT867JKv73reh1bOumHy0PP6549p + 7Zmll19dEykfziyKac1+Itzevl1/3b19U277fXs7Fx3zLC7cNXinvRQJXnCBugU5YXi2WY4LZtOwYKgh + lUfuqJppWnZx2mc5IQSH8EJQcpabJLHPZBKobemhQYNAacEojrVwv8mH6o3sEQv3ebu8Y2X/jOold35W + ejjwv6QqsbXbVa7ZyGiFf5UhiT8ZpBjCpibHgECdiWeF09JZeeZuSIvIaE1RBsfF+Rn2oCnzWUHtmlok + MhoKdUiayiaBqJggER0xhUzBQoJgtIOmyQ+a/xDzE8CAYLnUxD4P6bmTxeRQcgFJ1yOAlwbbEq7WZR6Z + FKicruF8OWD7luWl+X6UySCBhnCgSZ1aFBQpVdRUFv6UD+qTzke0BtTsiwwIYY1GHyNrTLlj5r6JIG0p + FgFQ6wMhdDPno4m5/yRX9Pfi2uGwJUTa1z06OqBVvK1Zh+Zi5smft6nyX8ER0QO9FEQlEpwywpgnoxUV + pMBeroWhw+HQIDrzkNSUlPortSXdIzXMku5DuZm8IppGCr0TdagjYbio0BiqzwQsjEAImBGcy4UMswJs + FqTIASG3CWdAZpp0O9q86dhjjqJHic6SxeEAKR4dGjKrQWEc0NdtzLDc8zCYsB+xAKm3rgB+df/MhKvI + GeuOigp+WjiG+tqEA8Udqp3owb/uSUmcxx0KBIZkCYqrTdMruKFD0LHcO908uNA8MFfiT05cgYJkn2cH + qOmDsEKqjJM4SO58S9dYW/9s1/imvvldAytHjW4/dWLXEyYPedbcMS/ZcNqrNzz6lo1nvmPbUz5+yIu/ + ddx1Pz/ltr857U3/dPo7fnv2R3537ud/96RP/seZ7/rnk275i+Nf+eAR531o+tAX9Mwe3UojDGA8jx58 + sopslODacy7dHlHLTMN73IwNqH5JixNOy3o23qttuDT4Rque7ZjkXruBrVnjjXbm0s3SNSkLTC8vO8MA + lV3NySP8wRkD9lDn7bpmU1JzcD+jsZhSqjPHMB8M4Bel0tQmg55JyMxKhqZLGro3GScVc+K01wvwp/d8 + 8AvYnZ/mHVuJGfRk1E4DQgYyuh/gp6jNnbCC2jBPn6rXdccwIuACxXKSl0bTcpSCf2AeYEl01qihDbUe + kcoTQS+TVkyQL+QABJNnrhyMJ6enMTYFQiV50ZyitKm3a/PGxa2bIUMOhEatgjVGgMoDeDHa5/ADHQQF + qfDJNo6UJm9a3TVbCRDaSvfCWGU1Nd0ESdNCj+6sSV0zno8fk/oza0w9qlpw68ifBvluiOVbC3+lGKNm + GRLDO/+8c0456Shst/6LKDU0j1LOaJr+ZDZT8eRCn/f4ZWAGYKODkSPG0kL5mnx6mcnC9E7aECsoqnxa + RyCNAcKQKSGB66wukkojUsjbYMUmf8Wc2vRWSpTPfEV7E2P0X/Zm00QPJapzVcRJSka39Qz2DQ5zNHbX + S5HpUCAm44KpraYQRlGsKqGjkq1P6mcBBy00UztG+Tw+mfrXD/2Qy6BSpwqeeGHouNQ+WOqeoDlwhdbz + kjJoxUVDoe1K/1zL8EK5f7bcN9c0sFAGI9eMEQYyIFlnxCGbyO1ub2rraekcau0Zbx+Y6xpHFz14cPnY + ke1nTOx+yuxRFy6c+MqVM1+37Zx37nj6Jw664JvHXvPHZ77rX572peqzvl191neqz3mw+oKfVS/4w+qz + v1t9+peqVz9Qff67/nHz2R+YPvLiwZWT2gdny81tjoWcLBSs3u4eLoF1AtgamMQwDvGFJdTdhp9tAOUo + dneUsFNPd0GN3CvA841NG/RdccMgXKzn66SYtxouptCYXkm+fR4X5fIroGBhauZ/ujTK7cScgJmBreE2 + Zl4Zuw8WdNHoHeUmSRoTph6ZGKIPwYkCCvqfliZl8OZ00KAu/snUWCobxsCJF9HOVRO1scOWQoGPGKGJ + aV7aHMB6Cqa586JxpSXTYpVtBkSNIEqCoI+SMEUG9COPOGjz5g3SJEFz5D3ml5K/tI9ESJDId0qyjHJP + lnAKaEIog7s/yQJmGjbDFYk1RhLVszIuYmCJ7hUDKldEPRFeMh8CpMHY8MIM9pFfwL/pGw3DIpKFfZpe + CtUzkLOdFNArgqVQxgJeRkjOlE/TXY3/FaA3L9uGb6H7lH6KiZs0l2LBGZ6bmzz3SacftGsbJiZzjcaf + Q+u0xXx8m7tYrr0RR0K5Sbg3K5jgiJim2LtYqteGLEYQbQnCe2vL9MTE5g0b+H3tmoyvZlMxt8/YVaq9 + nLN6gXZf8Lko9qCp3xE+HXRR1OeUcFCZBYbAYZ08XbbkYsafYmG53Gy1qbncSn9BaSVhSk8aO7QAoeFi + eB4xMC+Zqo2usRGKzjCr40wWDrRhJ45m6ZiUORhSP6DjojwhZNRcamhramhpbaDeNy0mqKDWMVTqGuub + WlrYvLNnciVUUIs1Rcv9c+MrO2e27KoMLGQvrVpiLZAzrXeN/AoQak21pvbelu4hEgHbhxa6xrf2zuzu + XzgO58vUYc9cPPmSjWe+5qCnv/OoF33+iMu+c8Jr//j0t//zU+6pXvjT6ov+W/XCn8ly8V9UL/3b6iX/ + s/rSv6xe+cvqkz9SPfpVf7PreV9YPuOqsZ2ntA9OSv22+GDcE+NwAiT7hkb2LnMV190DcyIUHAa9/dl/ + 3ffCN5itIlrYq+L40PJFa3+QUH0pUL6uw/HN4sUU5lbpmyNMpgJqg8mVXPW1cMjFLaE3tBJJt8isX6R1 + govcfokYksXPU0XU75YkIJEJLzalrQ+ETRWZiHR2cetHkcebSATyJ2kt7Z29Hd3a1ztXccNsBV6/OKnr + KFpTKoQm0ZqY+JyfwptZBoNDMv0P9beghkxsQSMLDnmBSkZPKNTs7AQRKUZtKKDRDhlV1YuYLFLfJCUf + KWTKc1IGNX3eDCBB7cxqwXRCtizJwd0lPEcFxbGChplqj2zA6D882C+apGT7BdQpqI4ZEA7IxpJoNyCA + 5AtvHx4mXgjyyUq+6dLiDBhjomgkhbUoGNBRW1b1DrAEz0ugpAmPFCJohlXNRMyA0AKTCRAGLTfzskYr + kOvDMkWItho+WjTbvq75KRg71RgiC1cumMwqut1rI37RmNli6S5O/vi5iRZL/wprp5U0IeHSFR2V6yJ2 + pgyW44iIXHWkhJHwo01fsox7y6wwd4xpp6mb1KrDh4mdXt5qzoISWq592tTXqWHQV7jLoADkuaLi1N5x + cW5qzpqizZtZPD32Ks2tlea2CopgBoRZKgXmQr4s6OuOgSgvKUb6EkaZLFiTQ7xkZHIimM7jfdKfA1He + RX5EZ0O5rzw8Pzo4NVMmNNjSiy5a7hjoG5sdnd/YMrzY0BuriWpN0eahxeHFbWKQsRKjgSbOrTramvar + 2C01ZaCfuHFIhG/pGaaaaMfwIkDYM7m7d/a4oU2PnTni/JUzXrnzGW84/MUfOeYVXz/ppp+e+a7/dc6n + q8/8VvWFf1R96f+oXvyr6iX/o3rFb6rXVqvXVauv/l31Ff9UffF/rz7re9UnfPS3J9z48Pan3Ti6/YTW + nhFNqJCetyhy64KC39tGgIQp2vv2CZLGKXAizYxysFQuAe9rwCFavbVAqv3chNWFF835WdjS1AbWGzmz + y4xPlKpNlIfXBzyPSSX3Rn6CFq5PJj4cpKX22iq7DXQPudxBuwF8qliYMMYJpkUHw2xUSx5KOfx0sTAh + N7aUFEij/YkjIJg/xT6Kf5QRI8PIXGeJgIW5AaXg01sjOuhTe3M9OBw64A0N9S/MTTO2RiAMFUlMImM9 + 7pJCXryTDAW/mDXvI3JkhLx3+9aN83PTPkDngDA2DgQttm5dBoQc8EwFDVplHjb4lSdHRiZHRg3YYmwv + QziHmSByqs7p1M2e8ImLi9OLC9OeHTE/N/W4Mx+168Btpnm67AkMm3DqBNE3KDDCFN4yxNWAJTBDgwhw + XY4kzzKDlpvDxZBuX4B/PSeiGJsbljPJqQAU2S2xzzTLgudkmGzcsEiJn3RGUig9E9l/O3C6deOycLJs + JiSKKGyS8mhMkvzKseunoLenqoOLEFno2lEwyqFeGjf4xbJG0/nE2SiZENdLDaVAIPVeuTZl2FFJ0+67 + 5CFrpFqFVugN96xvIHDYRq8hW1/ghRZ0j3QwU0pDjDAJuHjwRfcQzaYZHubGMB+UbG0KitlwRzJ2W6mB + zvMT7Su7twwvbGroHBVGKLywq6Td50u90+U+bTcYmy5VBuYrg/OCjt6GyeCw7ojM4MZMgOFYPCxWVgYg + bG5r7uhp7RmCunUMCyPsntrdN3fcyLbHzx7z/C1PuObgC952+GWfOuaq+06+5ZePfd//hQ6e973qRX9W + feW/CARe8a/VV1err6tW31CtvqlavaNavaVaveE/qq/839Vnfrt6wmt/vnLmq/uXjqRtBQO4XRZ7RKC9 + RSm2p174On2halCkxnedB2N2bfFSm/2slhbpe5FMu84uLua63449cMkyO1zjqxVesmvJ9sYx0/4XpFEC + Sq+rXk6jgSI/NKhmKf+ssdsgglyYuznmsQEixs4tW5m96nsLfjC5oYw1CgRG+6iLKnatK/KFLKWIgkWv + WsRCgUHuXmlQ3oNEE1oMJuqoYF5EPqmSqjNo54i5Kv42s5ZbNHTZzZVSi5KUuOGtiExhYArgF1Aw7TUv + 5E9onySMQ/giF/TqXPLEQkqSSqFYaIWhs1YJsqYG/8LgS5WZwb7du3YsLszkgDCU+rTYmBhkgA36OqmZ + M1bvDOl6QqoUPGToj7AnDK9A7wJkRhnTQSvDs0QIFSQb6pufn5qeHnPyR/oE0UfCh6yhuLa90e0wqY5q + z20bI4515VOPGvIEjXdleR67TR11NJh0Crn5IeledhLNpTFWqmVurF55Nz2Y+jeuLFBrW680r3TKb4qq + LD0XE1up1ToIv2lqAObcorJa5miUSaX3CNswSTKAdPCzfNNsdpX/M5mQ5ZraRzEjEMFU548Omjqdm2oT + KrLQuwxZTQwIoyNDcvu0NI8Nj/B1AyI2Vricdu7YTDS9kCaht7Hl3oebOtVOoyUgjA/56KBGFMM0OkM8 + DpIDiFNwX6/FPnvRezNlrmagc0FVre3UrG5raehuah3p7J6aIiJYkmjfaEM7pLCzgT6APaMdw7Mtg3Ml + r6/tTZdY069YaO15V2vDJByQ/4UugPoXLEWAsLu1Z7B9YKJzZKFrYkvv7O7BlRMmDnrC4kkv2PaU6w+5 + 6J1HXv65o674/vGv+fMz3/3vT723+pwHqhf9efWqf6u+6nfVq39XvaFavb1afVu1ene1+q5q9d3V6nur + 1Tur1Ut/XX38h6qHXvyThZOuRG6ll+EeIZANOCygeu3+DIX9mM5LXuR69l8w76RvQU8n6FiYQ6SAtMb+ + 2SwUXa+3ES9hQFs7lzF/feT+4kratLKBQsEKhDLF46rNrsHwrChQuCvaMM+AFfI3MTpGmRi1imWphHbp + g4LtWitDp4iZTTRCoOKf+msydVRzJ+zG8zmpPbEMehbGBY7Zw4GpF87vf1RTa7Em0lDs5RbIYgaNRX2p + QAEZEcB4JHFL/8qnfGkGYWc7452SvBQLWxk9TRbz6pRpIUrPGjRtzcTPrP9DZH7BoxHDUWED65EbfDHF + YtNe0iU1hjja1U3Xq43VBVyBriljS0mb/ZnjdgkWahRQXuW7B7CMThkQDpooOFcPCC186GAJHheAsBYU + 5dg0Z59kDPyu/EpxmxyC+huDA1Yh0LDfz5WuCXTQGjmJj2aAGGqUnfP1yr05sKbS55Lu7ZftogyCBg4T + MSC0HGE9+Iqpit89l2Oapdyo5biGI9Yo9mk/CqkakUn9NbJ/3lZazK8PaRVmQ6PgdXv7YQftOubIQ1CD + uHUmR8fo82G1R/mXitPMwGLDJpvHhsTfJNJhKwP8JUTQ1th82813joM5L55S0gwjXb6itNYBO7cyw8jp + ZzrF51OtFYE0PsIaQ+o5C63nIX+ARWdfuXcC2ieAJ4VDwcL+EkVA+ydbh+YaMYUqEFYwiI4slQT/TBSN + EGjUcA+PwCYkg6JCd5C2zpau/tbe0fah2a6xjT0zBw4sH0fttIWTLtj25GsBwiMu//xRr7z/uOv+4rQ7 + //2JnxBp9PI/r75RIfDmavXN1eo7FQU/oED4vmr149XqB5UmPv8Pq495a/WgC/9g5qjLuie3079wT0cm + zWO1UZGlvOx7z6o9flDtBkpfHnlb6dpHEvWBOlvZr2SMkEu8AMnZpCtLqPBOhBlKJtqFXdDhpdQe7SFx + 7p7WplYRfot11DLxJLmXwv3jEFjURfNFEfXVzEGadZy3QSGmxhdmzRZlsRHKnrtHJtNFVclhG2buUxPj + g/39AQhzFZNDcwnqbJHtmM+XiBUpO6RThGOhVmr2kl2happlH+aAMBQLDTZFt2mEdMAAmVkXBUsJt1Kc + QN346ODs9DjiXpIRWJNdEFMaagCmGL0z1TGlXAZamjgY4ColdrwaAA9gC6jZMzY6ODlO0XABwqEkWGiY + ahzRUFDf28caMg5pUoin9KgjDt6wYTYL/im7dVmVdx24Y8vpp564QdokZT6dWuA0RbQmnDkAZoNMVLAe + g2CagUiT7u0X8XRDz8X0qjRp4oRJ3PJTxjJABoTp7Mdb+KKs8olsbGYZniAgU7GIHRb8xsoXQ3d70yRS + P1f4Uy5mCQTmsLD4ZxBFLNFWHzkHqedL8IQbZ2J0dHR4KOcpTeam0dedg8DCXRwpYLjN84zQcwp96AgA + GXMqaubkcQXbIeFSx9/YRRzQZEzjqGTCClOk0ie95qU0DP+2iTWGfHm00PbBhm7ttSsL+YLjoaZ27wwQ + aChYHpgbWtwxtLSz3I8uGqODeEotRrhHIBT6IoOfdiynwh1kpb27qXOgpRvj6ELn6Nbe2cOHtzxm+ohn + Lp/xigOefechF33iyMu/d9y1//2kW/7v6W+vPuXz1Zt+XX2/EkFQ8CPV6qcU/D6s+PfpavWr1eo9Coqv + +tfqsx+qPvqt1d0v+vn8SZd2T28iSLt2dE5Gax2vSe087qgjiCztA6T9l3pLQQrwY6td72vS+GC6maNm + fGK+rPrBar88XQJNsylsrpcs6b2QcUGbP7KZfpCbaMJNZUYhC/4lIfo6DUULtrdUHTXXuHjoskoxocc3 + e8aRC2ag7VD1WwpZa8UZW6ITIQw37IRBio0VMgut52WEEjSNWdIxV8xXBqdocL4khUPTyjIppfBwVJoC + 77EoHX+zPkpZjnyonBKSJSA3jOlzM1MgRJojYciRBv9gXQ5mCTwk/C+Wg6kVMA0IgTT7N6qdImnaS4J5 + EfCAN0rJCBAOKxAqKVRTjNHHQDENAu2Q+HdmagxHD7Lq2WedumXzkmm5rB8fHQJI+C6RQfZtWJzduWPT + 5MRw7XGmdDCTedXFY0FBYa4DvVMTo0tzszMcIpl8g4NSB11zLim6PUVOSGivmLWCSnXRvLmpUGUmZE04 + BIbwodiMMxWUz9q5c/OWzRvod+HJFWnU0DT5IiNUqOMinJ2e5OdOCnAHN40TxOiU0QzCJF6e3kEujUYN + RnQaZ4o+H02Df+nKJJroMQ7HNhkWUoKYjh4uMvm4oYN1GmFJQVGGutT3F4eyAITopeB1SRsKUhdNciSo + EUPJGDIlSBmkakzncKlrpEQGfWgrMVnqIWViJi6zhAY7xpdbRpbyXBBEVBQEC9d+ECjCCW7JYkIKm1ob + W9qpskYPwuauyfZ+Co1Sa/v40e1nzxx5wYZHX7f9Ge8+9OKvHvOqXxz/2v9z6hurhAlf9w9CAW/U0OBH + q9XPV6tfqFY/V61+pVr9ni5frlY/pOzw7f9Rvei/VZ/0meqJN/3ZylmXdk8ugr5rHB6SFnSey2jbpo3b + Nm9aDUUeEagzKvOI7CpP/LO/GN3JMaptuFj4Xqshn+0ouZjsz9zVtsp8LNusHuAFucPgMKoipoDkRBJ7 + idjDHH3Hx0YtQ9HVFZU9JeUgl9KrXdOyMEbMIwx6aTK3NTiUrAlVRJMlFE6z/F8MVgAgC+4AmguoBy9n + Fg0RQQM/zetKgTB6HGwsS/yixb7zRgg0Qd4YgzsM+bOmcEwKhGnbhEgWC13jY/OjrCdD6H/rDpRMDIyU + LuVD0cYpsGSEz6HCFdG60AJ0GefDS0JNMpTJSOkCOIGCLBbqU5lUoXFY6o5mZFFf4o1jY4NzsyI/Gwqq + 4zRQQ7GGjvSzf0KP/RrRnJua2LayTM1u0Mt1VOKgo1h8CtHKwV5oaKKXivjpkm9BDR4e7COfBHwVB1N/ + L9E75dbdKK4EIJPkE1WktZtHbR6hp4QaF4x00HhhsA17XVmrb27XDystDSOWJ7Wcisw+Uw8IQ/Cb90xP + joPcIf9Hp4Ayb9P0wTwWSgWJBBSLjDDjiJgGens2L28YHx1JEc7u65ihlEUuEkR0RUfucdYTXAecohrk + CBemyC4o2Xza6GBBYYpjUTo1z2bqcTQLW8mf5SarGlqiKAz4JyjYSwWZEs0FrY+ENJRgGRFSKBBoZtFp + OF/j4AJAmHUftKCg8UJf1hjcgWMphd5M3ZlYYkYy61soBFNpAQuHW7pn2gc3dU8c0r9wyvCWc6cOu3j5 + Mbcc8OyPHXLR94+64m9OfUP1yZ+vvvRPqlf9bfWyv69e/7vqO5QOfka54Neq1Qer1Qf0yRer1V9Xq/+n + Ktzx6n+rXvzL6pl3/dnCSc9v6Rldw3sCbFC7yGVATrWVveZK4WGukEfkgeSwc8fW6cmJtc5VFBP3+Ily + JdVL7edTtGZ3bge1llX9vsUP8auqAH6ef5NcduFpXgi16zXM9WyLhPfJRcwxS7lr5Xz8yx2NaliorM2B + 0ffxyY9/3CEHHWgvsbn6ZeR9BTm0Vh0tqDrWUMJShk35IX9DioTimtGxwEx0Svg4dVk3iYL7PMmUyGcK + Wo5z3ayJBAhtsEtjQoKCsZVSTErT1DQvGZN0k9Bh1CKFWca3lcqM5C8HhJ4OkeVFJD2PjO44/1st2c58 + nsLPViF/DmbBvWLkL9A+4XlU5pyaGvWVBk6CeRYOTNROVqJ2GilMMXhpaUbKe8p6QUp7EvRShdJUlYUO + Cm+jwKkYcwwve/HjAIQxbBmOkJ1MT41C6VIdNcYdc/JvqDCQFSYNzYStrltItYxGXCfoAQujp8ndv1Ej + zbpOOihC6M1uyg+6skT7jUlTxUVXp8Kn5lqoxl60jyZZhrnSo5mkH/3PCpmiSZhHLJ9BG+4O5YX+XO4X + AvwAasr/JsfGDt11AMZW7kd2xes2s9TK/lJul3fZrZpGMfLumBK34PjIKPKLmwMSgTRzzTgc5gWnwmy8 + zmTdBjEdu+S/gj24Nekg0dxVAvxo1UBVTukg0U+NGGF+3RMliKAUVNPmSl1DDWQf9E6Z7Ekf3KUdh0ws + HyBYaNDIW4QvRlHUQHFvHvLVtB9TS7mxvdJCb/rRlu7Z9sEtXeOH9i+cOrrjGbPHXL7xrDduf/qnD73k + p6fc+tsnfFQcoc/9gaQS4hq9TQOEoB3/goXfViCEFP64Wv2PavX/Vqvf1ZfAS7DzlDf8fHzXOXwKp0OH + 1DqETIyR/f0LC/OHH37I4x9/5rOf/dTnPufp55331Kc+9UlnnXnarl07xsZGVy8gt96vDgDMzU6TZb8W + PW3FN09N2D0EDrnAkOlHhopGm/UeSrIdJ4QqtNh2oqqeVh+t5X41/LAePUzDgTaVizZoAe+YaSSGIwpu + SM8Ho31aDtXuFuaJ1F7q7urymycCnt5dhZSJJDRYE9uQCH+EQKWDpA/iVZACpME1LllZIqb1uv6Zqkzc + 5GJCC9VEPWHZ+84XIdDHKdNF0/RBV0eTNvTCCCV6R5kQXKAhBdszBWMdr3yrdC994iAX0TFrwpcCYa4U + mWRHdJEI6IN+mggRjCoJ/1N6lzNqpnYYL4qWQZeLnwDbiITxopgZYCkAYSR/zvMMBQ0jU1+MrYwoGJEy + gmU05gT5VGhrCCgGVhoEVeGdWQm3BL+z3Pyo3xb9qEkqYazFoxkmmgFi1DC0S+S5eWoEDuXXNJdT6I3l + eqm5n2y6k9ZVZwMO3laCecPDA9gvDzxgK+vBP6qMIgUbEHrD3pqEirSLb2Yf5S0WXwz4lzSjqIHDmFAY + p4+AJW+VPjBhTbihZCKptyH4DUVeXl649KUXHH7YwQtSKjZjioqFBZtotkYDHIU0qiQcqBzQUpBtSOED + rTRKIIiRKa6iUSVE0IQtGioZEBIXFLNME+ooWmjryBIWGPhfibigksKSlBIdVLGUEmvUlJntnd604YBD + +2c3Cy4SRBTIZCGmGLAQl03j4OI6R2AbZENymqUVlps6GinA3UHd0TkLFg5uPH3ioGfPH3/F5rPfuvuF + Xz3u2l89+s2/O/sj1Wd+s/rCX1Qv/ycRSN9erd6llhn8MvdWq/dVqz+qVv9KUfBfq9Wfq1KKdoqI+qq/ + rx75qge7p45tovmvaCa4ibKxnhM8Pj5+4oknvPCFz7v++ivuuOPGu+56w/vf/5YPfehtH/nI2z/84bfx + /E133nj55S8+++zTt23bjGq2zq+6V5s5HwUkmFsZJq3xYDOa/XJxr9ahfm3Smb5KZu7pjz7pqCN3c1HG + OVSoxWCbGXNMGHN4qi7QdCJmyRXGAlPw87hgGhUIkz+DtMw/FvMl5AzEQvW2gd11rqyuxgvT1ku1Af+s + jmhMomIbRpOpqXGM73hH84EWGVbQ9abGxiCRkkQRzQjFSh/Ry16bPp+6G9IiW52dQhBTd6iJaUYITArz + xAmpL5NUjTG/vg/BDMTSMtC6BtqTXFOFpP+tkJjQycGJVJqHF3Al7/NUILRYXaBT9oSs9oSZBbAMUqfq + nACYIhOYEcKN9kR6M/GqWWNUJg1rEsIX1g/JZiGsqB2dgnyqgmoMIkpRGIXw4M3x6KADqqivvn09U6vs + Sr81Hzc9OWqSqanBEkm1Vhje0bCXaQR8VzJPIiMU+wxS8OaNSwQU3TXqvNDW8IOyGR3ytAJ7KKpumRV2 + SmNdBYkR8rkHH7R9ZXnBVjJVYg9Z+kTkhbwKFMn0K+vcW4wXsityFgkPJ0CYJFRkTQq9JLeLKF6MNFNK + zYBmNdVMYuH2nJ+feeYznjQzPVGIWaiKY7wwK4URfQAGbzmveMFe4FNqG1VINqL+jzg/Ewj0Mcd86Uxn + OYZa7cr0KfGLNrZIi0EZ1BrotTQ0N7O4/WBJmRen6JgW1B5uaBsutQ43tA6V2qkmSg/6KWpqI42G3Hm2 + JNdQ1FQUVKWMvZJluH4gzEZgjiHNLCRe2NI9TIG0rvHNvXOHDm8+bXL3M5Ye9crtT33boS/5CvbR09/2 + u6fcK2VlXv6Pkk1P7iBJhAAhxhlE0e8rHfxzBUJI4d8pKP6tPgEjX/jT6vJZn+we3z0yNs744uP7+PjY + SScdf8klL7ztthvuuuuO973vzSDfxz9+16c+9e7Pfvbuz3/+fV/4wvvvuecD9977QZ587GPvuPXWVz/x + iWfSy8qwgYf9bP7nXoGfb4zsQNLeHsGvsHO5ttZX9bT2qHwCxUtwo6mpCc/i8DlCxD8HwgCKyeQrzGhc + HbWX7IQYYhUmbvEqTxExvROyEEK8fUJ00DUWhgwqX0sZ3xwpDHdpGiZ0FKyVRj1HIkhDin95OpglBQKB + kEL35hWwsJA76MGbgrtP/7RQkFfY0igRg2AGhzIyMtqOT0hMy+pbslhBk4CRESlj8TNvNhtIiVPDQiv2 + hBRKMEyMl5r5YHStYLMsuD3TuF1m4wxWlyzO56iD9Z+ImoEWuigZ9NSqtp1k/G9EsDCioAIhaxznYogR + qRNOaYxQNlAEVQOOOXFyImqkp8GPw5YTEyMT40PJ8bsYG2E7Qn4UTuWEEDvU85PVoMlSCbUbVLCkxnZO + JpBy5vmlwBvkTYM9YNIqsdmPYlSPkz87PcH6WEXdIsQdHOrs7CSfm68+0wZoqoM0LUOaS67H30BLB4kf + ujgfas1kddfYP4IH907iHQ19eq2CkuUXxmliKDpfO4+MbXuLHe3tZgScaiMXioGZQBo9bg6KMhS46uOg + WIinxCGFEiJiaa0168UhSAZkPsLHZJ+++1Te1vDlsTx1dLU39zZNb5kcXSZfXg0yFiaEDrYPl9oghcMl + AI+K2xIszAKBTcNLvbNbO8c3lHt5ScKH64oRrg4Pqt6i20q2IVbSjuau/rb+8c5RPuaAoY3HTR7yxKVT + L9721FsPuehTx1/3R2fc9W9P+7JUGSWnkIIyCKTYRD+mxhlbgMO/rlb/qVr992r2+Bd10Dzuk/+x8ay7 + u8e3WttCTsRBB+168YsvvOWW69/y1te/+91v/OAH3/qxj931yU++69Offs9nP/teUPCeL7z/3ns+8MV7 + P/ilL33oy1/+8Fe/8pGvfPnDH/rgW1784vO3btlo/ElcsPuKRn5aGCLJyNlbNOWaZn649qc7mfPPSq8M + uzikTkRSfSYehmyYv3rSvzLyF8HPWaABYc4AHZWNoG/k54BZEDENIdjzWuMZTk6tQkKpVS1jUZMvkdy9 + JMNkE1ubutq/WSpxbhTIeu16moSXcFyjqEeqhUoS2OhgqBWiumjREGhp8jE0GLLK3C+jMimwMTkpxVBs + DDVvpzxXF0YaJrS0v5j0FhovWIKgpsx77eysWBq0gIFeDCyIe4N9Wh5FqqbJEltAADBYVPC52EvBAhoF + 0qArRhCyOJwvMKqJ0SE6Fyp0DZxw/OHPPf/clWW6DkG2IhCOkJAwECBN/S8iokpjh34+l9rW/Gu+mEgc + wzaKlMFxqokWwWXq4caMAg5J5ZcD6La8aclwNCi0Ma/DkS+KqwHRs1T9aA7KcitjDr5MINRNGviioqBZ + eVNar7RSqsXi9vQYocnaZgZOsZD1zPDYrbtMjTJOT4xTZUZTKcK15HMslR/wLctmSWUZ6wtGWo6Co6Ij + teOpU8MTrxER8C/ky9bPqS/cPnJnxdlnYpyx7tZSFKP2lvQAod3OMFf0J9V18ne9Nl/LGegSJEw3ttGG + 2xhxl+1NWrTZdnwkyfJFl18mBNLEY/v2zd2DXRSUKQ+UGnohm10l88iIcVS8o/K8XddkTScC4A0s7Nh5 + zGlzO46UeCE9CGWJWLhvZEjpqY2wnAwyK5icd7R0D3QMTnZPLPcvHTx2wKNmjn76htNevvXcOw+7+GuP + uuOvz/5w9dzPVS/4qQikACFOUYKFJNSTSoFGinHmL6rV3yZAyNOHqcf2m+rjPvLbpdNua+mdQsI/5pij + Lr/8ZbfffuPb3nbre97zxg9+6K0f/eg7PvHxdzoQfu7zd99zz/sFBb/4oS9/6cNf+fKHAMKvfvUjX/vq + Rz73ubuvv/7lO3Zs5uzv87cuvJEvL0XI9mZ3/PRWM7rwprqAahTNEg/SDcgHP2DbFirUFJDS8TLCYRBL + 41zM0wfrOEUTFuiXc07oz+Ni1EjtPshqLwU51O4lv6PE1dlJIxEVZ/JAWFcIzXhhjAhayDAtq5ERRMuR + iBJoAfwsO94CLbXWGFvDGEcgBxWLEcqqR3pBNXti8/1UFLWEazeOqnrWEUlGkEkjHQyaZ5YaoVBnfC5G + qhIh1FRQ6xcoNbIjm1EVTowwqgQKQiRJ8RYUBCn5Iq58ukXF8CNjZjGlIYTiAiIG4AHPDjxwy3HHHWql + ZDL+p7FDQTXTRUcyIJycHF5YQIoWILTt7V/ji0YK42fpp8jxRDgMGfdmQO1jRoKlk2/hQBipYS7qmUQ3 + A780aFTaZ5XkrDC3nWe3zoZzGMu0xtwJq2YQC5rbL+UOGpO7O7WXJE8kH5H4X/RGSVhRrcJ+SXBVMPvR + 0jPaoSl6r7zEjE3CWq3ae7JQsIjSoFaSm22gg/ZcgFDlfS+3ZtAYi675fSElmfDITI6PkSpSjxqGKaa8 + XRuWyU0kkJird2juNnd9E2lUeKawqlRHNHZoj3D3xz/FSZdhoUFdkJhAwZWlxQO3bSN5V/qWa4K8o2CB + +TlSFgY0SaCibDc5hV3NDT2Vhs6mhjaAEFI40tAxqE6ZUWRS9c4AhCKNOudDAm0b3ziwsLNtTCpxg4V9 + s1v7ZrY0WvXt/Xp4uzv5xpJ0T6Jhc2dPW9/I2OK2A448Y37X6aM7n7Bw8kt3Pfcdx17z/VPf+HdP/kL1 + 5X9bfX21eqvWVyPLHlD8bLX6DQ0WIoqmDyRT8PLK/1V9zDv/adujrjjrsY991VUvv/XW1771ra9/73vu + /MAH3oIi+jEFwk998t2f+cx7AyOEDn5R6CBEEBT82lc/+rWvyfKNb3wcsnjZZRcuLMwm0cb9OgF6KayV + VmGXQi3muQiw2scbkvHDU7LJLr50SzwyU5PjXL7xAsoigjo/oexO+nA4TKdg2QaJgzSQQl7jyt+4vET6 + rQNkAoTZbRABL9NJ/P4humBY6PdVcr9Zmd+MGqY3rbR20yLpqV8mZYRJHZnC0JBlCubML6t49mSEiuWv + 3CCToGBARDHH54AwG/XSbDMPJsUBNIykGPdRybQ3Xs47yljM2M1L8ImcLyZ2dbc88QCESWmxaHvJ0vV0 + jemHmTPT2J4G58JLoAt8K7JAgMpT3XuHhkMuhDll+De6Y0LUMOV/rogaI7QFImWpFBo7DGkVvkF0nIZU + iiT6qKHEkIkRIDO6bAKgGtNFLFU0zWRV+7LpYhOF9bhq45QlkELFS/HLuKE3QUH1zsT+hYQSd27dTJI+ + 5UkxwohTht+xT2QAB8LYn8Sbk2TeqxQLDe1C0k4MVyPpB5iMXXyTXFijgAaBuUR7vzu4ZZglrywu4qqw + 4ELdJk0KhM20UUG79WbXKRz6bcueYccAMlYagqlYAnmvg50Dod31CQvMINDiheyQDm4QZayCxFqVF8qD + +SkqMaelEKnJMUWzj6rUJdn00nSeaqL0HWTpKXUMlqQBPV3p+5UI0oCQnPoxzbJXdTSm1UctVLhgz/Tm + w44/5bDjTsJNs99AWDuK28BfaRyfmDrggENGJzeQd9+3cPDUoWduPOOiA559x5Gv+Opj3vqrJ33235/y + 5eozv1O96FfVG38nTlES7dFIH6pW/3eChP9PtfpNxcJr/7b6ghs/f/WVl70eRfTNr0MRJS4IEKo15h0f + TxihSKP3vP9LX/zgl7/8oa985cPg39e//rFvfONj3/zGx1m+9Y1PfOIT7zjvvHOJ7a0fAGMHhkCBzTzp + b+dPa1BZd4esr0VKSy1d7S3pfrgKuS0kVhwf6buS52HmJP9RbAzulGTOpU8pVlQmh1wCA8kjiVpnSinz + ygN3bEtqjYbwoe3ZLno0m4mRMZL2HPyiNJoTSAvzzTV1UUmNYPopGYfRCx5zpLK+g1n6RBgXYnHRWFBG + S7p0+lw7jfzZyryXXcep0D0nRwexlwcimNFBhsXQZd5JQJp8xoBIAtz09Lg6PKUKjDR/GOYkefukLI/C + qkuTrqB9IXJiaUTBtEx2lhcYlc+MDPmaAlTE1AXBOcUqwZIE5AIyGVAZwpnaGcEsQJq/FF8NW5LkAEr5 + Ss+mGInC6djYwOjYgOZChKjhUNQ8VUcNB5NyR2OQKSOkpM7GDfOcKAf1wC8DiGbnIa0hkBiLlBcOhKzK + zC+qzI8/ycew+K4lerr1qZBWwQ/NZILy3CiWc5hzhgdZI92J+/FvCxBa/Bjj6IalOf6NiTcZEPqlyOxK + M19jEJHLUrMMTSy1arppCDytC5GlEuZKDAZeaAJSlmIRwwravDPXnkJvl/p9YJwRcoxzU9NMiKGDducK + W8y4YMYdE1nUhpEUF8NwJ74YVVNt+OHNuByWFue4W+uywDie6daSRNGsNbXJoOiVDAoSCgG/9oGSNJ2X + lWKEQRGVReFQSGHoyiultz1e2DfbOrJhZvOu2S0HtY1u+D0AYRyvTRVTmtjc2Nbd1jfaPbU8uHLYxEGP + nTv+JRsf+9adz/r20Vf+DZ7SF/5x9erfhGLc76lWvx6x8HfV6v+sVn+qKRZ3/uKfrrru9htveNWdd958 + 1ztuhw6+731vih7RdxRjhBEIUUS//nWI4Me++c2Pf/tbn/z2Nz/xrW994tvf/sR733PHyScfs85KNPxi + yBjEeqyoKRcOOQvOz7gshoco4Nu1HlSrC2brx2PbMg+EYY2v5PpToaPRcnBqH4RG4ZcOhAkXTIOFwQij + kJ95R7l89bYJCYJi9KIe6cgoljC7uJ39uV/UXWfmVUsXu6nq6qIeFEzk0KzXTOIR8AlyoYKM9KmRLhZR + dKpngZF+4hr2s6Y5hXyJIIS6X1TCQjFAaNW2XBmLpDB0uWNA3LF90wE7t5Dutrw0l9guionzFgvMHC4a + 6lP8yzS9WDzMM+SyYmOmheYcJVrb2uu8pDTLtEpfEtLWNwQ0BgInsT3ncNEFY2mCsoBkgmoKk4aUPJ+b + Q8YcCWtYGRHU1oxBFscGEU4PPnDbxpXFJKciaKdBRI2oOTqqzhp130QsDB+NMywNTwaYDPpqoIbGCGkU + FaKnITkyVtWJZzhNpbcwoYCZ1CANDX7rAqHnUQj1p7uWtvllISS7ODND6NEix1x7O7ZvfMEFT19ZWbAp + l9fmdo0U+QHpkiJ/aJ9p7NDQLmJhViy+toJEKo3G6vNZED0XR4jp9h5u15uuTpy+RiC1cD53mbQA1hs8 + a7tWcMq4WOoYWYOFNXKU6qiMw9yJDo3JkJUfwUCTptZSM613paYMKFjSjkslSqwJKPZSbk14IV3ps4Iy + OGW0Jb3V2vb6ovakR6qvSQG29ZRY29thuqgBSnk4A39ySahW2tHSNYjFtGdq1/DWMxZOvPTgF3z0Ubf/ + 8omf+s0z76te+EdipSGJkNAgXBD76B9rQsUn/+k/rrz9/dde/fLbb7/hbW97/TvvugNG+N73goVvxilD + soSoo59416exjH7mvZ//HIxQpFEYIaIodFCIoODfJ7/znU99R//92tc+cuONryRYuJ5vB6IwOaOQgrFA + u5j8jXw3xtta8XM9e17nNoHrZYzQMyICBzUUjPMv0l29xURdKMxW5hVR/ZFC+kTqHfVpXQnFEsiP2YSJ + ZywLJ2S58x4d5Ix1dnVw3/pt5hC4mjSaBQjjZNaiIxYjzEIj3nc3pE+IiVSbgMeeEjEomOBcGJgscDg+ + OkyDOosg+hKig7HpblpYMlLAWFDGM+i1pqhEj3q7ABvcE0K8BoWBuTUxrWlptGNlw/yunVtHUE2Tmp9J + 4DBwRPM62kidJqF72bPUHRrzHELxT0O+vKvTdUvXPJ38BWXSAM/toM7VkEzRJ6cmRmBmPFeDzNjM9Bhs + j0JoAL9pqrYAabYfNmODTSuLRP4849DppplrUroZgBboHcnIqBPZuH1WzkbdNzlGGKVjT6PMSqcWgrJG + 0z2nJbL2LBkmKUCaNex1mdR+dErfHXrAAZs3LEUsbKd6NSu8UZdhYbzAQsUi6CDmLK3eTnl30hDliZYJ + FCUjTQdyC1iaRBGL7opGWjdwng8l1GlkH62kIWy/SpjQCV8aNSyWlEo5Yr3AYeB/PrzoUBNih1YmOY5K + OfDTeX9cI0BIKqG2oW+R+jIlqa8mi7JDQLGPfrwAm1YTpdC21dSO/SW89aDn0XfPNrCYWWa17hOrjdHM + nrs61+uT5CtIQbYmKvEUy6XQy6IRdbp/rG9++8TBZ2x49GU7n/Who175h6e/6zcX/bL6Fk23RxQlg+Kj + v6le9a5vv/LlL7v5ple/6U2vwyNz1123v+udd7znPXfeffebNEz49o+qOkruxGc+/R4cMQQCFQg/DCP8 + BkD4TQFC8O+79336vvvk3+9999PA5Atf9GxMWetCo70yw6xrj8WNXAFYmzXaZeHUMOrmgoJiNRNDTZo+ + WLi8cpHCNEcif4HqrCWAYoaCPDOuaRd6DAmkt0RIOYpxQQFF3sFR4ai0xivBKZMU1K4bz+ce5uvAxgz5 + 8AtgTxARJxpHnRS6RhR1pCZ88IccshNVSuqr1RSOscJpFg5k6CE+NzI0IKTQ+unIaGVcMJcs4dnT0TQY + CzFrBqEzQp4jr2EcZWAN5ba7O8zBD5LFTPngzoAIHnPUoaeddCxJC1Zv0zMc0jphnhWXQmCkOyHyl1HA + RPN0FwyvYjeVsmSe+R5VUIOfENiLzwHvlPnlsU0UToAQnseTR51y9FlnnjRDkoXaZeGF+sZBxEMDM/vT + hFOPGvJ8gQ65UyPxc80gEwKN7HZiQkRUB1Q/POeORk89jhidpVk+YjSUamU4yZvMcu29MUVSXCbw70gH + M6NTmlaYaqRckPA5pOwIk52EDOemp1DCuVQIHBIIM9jzGmx5LAzrbRveAhCCgriHSMOfnhqPKFiEQy0Z + mAbFPX0iS6VIowY+a7S7TJwmIb+eGzOIMXUt3PlgofcvlCdWiSax0oShwMalxDvj/lLXSI0PBV6oJgnz + qad+BnXzVWjlShTHEDJioYhOLSWpNdrR0NZR6uhsaO8q0XpCyq1JuRkBws7RjtGljomNobNS6Djo7SYi + 5pE72DPX0DkbFuAQLGT3ayd38+VJEhCnULlMlHP9MiC75WzTxnAN2VB03+bW5s7ezpH5gQ3HTh/+/AOf + 94GzPvDzC37yH6/6q+r1f1l9+Yd+funLLr/u2ituv+2GN7/5Fmwy73jHbe985x3vftcb736vq6Nv//jH + 7vqUZFC8+3OfvZvcQVyjGiMUadQYIUAoKPhdUPAz3/veZ77/vc/effcdxx13eMGEkgJUgYqtDXB7xMo0 + 1WGfsNJU0Oxfny4ZHZRm7fmqcmEyZbYcedSxzKTRQSPuiaBRK/SHNY6CYfZnxWXigwtGDWmhVlNtRJDj + TPFP4xZp9ELChGAnk2UDQmNsiUc0uMYjCmatvRlBYGMbNswxGbfRJIQJIyImtE+lTo38ZYv44mJQsJgs + mJnmA/JldDArQWI1SmwA9Zpq1gZBjRixjqiWOJmZQVQck+igVoSx3HBLcrCBPqYJig3Stb4UMtUdo5XP + QuTPA36h+KfxJwjcxNiQBQhtz0F+DH7OLB0wkjkBMAcneQI6BoAUYGMz1M4Tjj/s6KMPBv8c7Qz5LBw4 + Ep7L9gCn80tpZLhpCR4ZjiTQxwCEvqssZBhlWINSV2Xt7QaHmbyc1kE1mpik4ac2Xa87E7MsrOia173L + woS1cEgBBMo4aAnvUJ7U0yp4Qt69eGc6xUrq3mMmWDrZSjvdy/M0Vs320iixm4qiuTBhxg6jNToqpQaE + mWvG54U1hblFLGHer9Wvgi6aE2Ys177eYre1zW55Czcm91QSBwlTYS0c350LHyYxwzR86MpTOvgwNgGx + ff09mGNLJBwCGixS4zq6GaTvUotU3G4B/7oaOjtZSu3wQtRR1UVbeivt/R1D0y1DWlY067KU4V+WONil + KNiRYCGHvjYQUi+P7A1NTKZKQmiTsc9D+RpvlEGYgat/bGDDoVOHn7/82FtPeP57L3zJVVde8bKbbryW + 2jEwwre85Za3R1KokcI3f/ADb1Xv6F2f+ISQQlFHxS/zAfXLiFkGUvitb4o0et99nwYIvw8Kfv+zD9z/ + OQDyFa940fR0/QqiDM0Eh1PNE6TB8FC3hCl4TwFWyY6p9+CHlzKAlf1q21R3MhFx0fwxGRdU/06zTKFI + vWik57QcW434kOUU1tNIDRELWChXZkIHJWZu08yCNRTfGqU7auOCgRGSvZREB1NXW6ETb5IpHOIfaTjE + hwCTjPLFZcxuEGpqGyIGe16Yqoc0+RwQBlCMZlEN+cQWS7lMCTeLKiMMbZVypMENouRrU/FZgn9S6CRJ + qA8tloyjJFlxEvYjnx0OF8pJaz6AIWVe9DPpLyvmGcJmw70SupudgFq5NJqYWWI+gwBMRrxS4GHj8XFB + L4nw+aJAyHoWB7zxiSFdMzSeAKdHGdFFfXsneaqpgsrpYQTrqemo/om1WJigYKbrKt3sT4rGZY2f3FBq + qnKszpOrZlDIKRQGnyRRaBqotG3SmY0+91lO1l0ya7xl4nlPVyfTIVU76wWbw8rgF03TJ3z2Fp8krhkm + drlWKllxXassHw2lkheRjxpaQKHZRCPzoPn0NH1SO2f1AIcBIf9aBpQBoZvmeHrWGac87SmP4yMM5/Im + UmeHYZ6dj8LI9gxgHZ3tI6PDbR2tpSYoFEDYSMdB+i6V6A8vumiL8L/2PgBPRNF2GCECqRpkTB21f6Ul + E2HCEBE0gTSzyaQZ9IaFvuwR0uTbaoksnJZ4pdagdwU6tcc9126QIklbW8/xx5988cUvuuaaV77uddfd + cccNb3zjTWAhpPDtbxdS+B6NFL7//RYpzLyjqKOQwnvv/QB5hKRPfP1rH1WzzCfuU3UUILz//s/df/9n + H3jgcx/72FvPPPNkLpHaI9FYYG49lpCp8XFLhDeA8Hdpev6qNb45YzLbWAUm65wE2TIQuKiCBi6YCqf5 + /Tnnk3ciXjBBkyu3VG7W3sUOg4p5omB4k+iCZdRYoUcc06lcwSpt1zpTXaRFBUKrry13iM1Y9bZpgtoR + Ri3cb4U/2VjLTUlL3rh41mAulZ5qah4d8XlxAoGZmpTl1Dsd1A5w7l8vTM+9hnIKjV5KTfMFvbZW7D6v + pZnDEodI54JJ1mCnJQWGAJWWgS7kS0TlM6idniOYEkG0uKXFmcMPPxBXamCQAGGUQ81pafFCwnVHHH7g + 5k2LxQicIV8sB2ORPNFCNfPBAUwBD4QLdlBHJgc2I3n8iSI6PT1qWxZIpFHD9CX5aPm4IhJHBTUB3Swl + I6tck+ZsuJWG/W/bury4MB0qseWrBBRaJKrMSwJA6NzriRZuFuVngudJ9l5WEp2uFElr5bg+THpibDg4 + p0I2oZuKlf9p7k16IWVO0VXKcEfXaJEXRuNoKDTvsUNLMXQsTJKLQrdCmVAmFUfdLJOSwjhJFYzUe7nY + PdvWKB7avNeSo2SE4MmWzcs7tm+GLDk6xjEkJYZhbp3AZOZL0AI30uYIjZLipEQEqSxawhcjccF2dcq0 + N7Rq3e22npaegfa+oXJbn4Ai/7b3SzMKjDMdI6W+mebhDQikZYE9aUkYlFJvQxi6T+CXmWswOOTfdT+E + 1nCghe0ZNzk/KXOycd8Mh+veuWzIW1Ifyvj46LnnnvPyl7/suuuuJGvittte+4Y33HjnnTe9+c0SKXzH + O25/17veQE79+zxSGEkhCYXBMqOVZUilF1Io6ugnHQhBwQcf+Dxi6U03XbG4uK6zYL+n6ODliiTW4CPd + 79o0qzHIiH8qaCbNlWq3t1Odyp6GeQa9NSww4CWQQ98+po7mLTX1NCJiEQW5aiXAIDVz5aU0Oug3TJRK + XCCVJwaEgm8KhH7XxeeZQAoqM8eiLUBtsmCKizbVzS9Zu8E8IzQ6WCeD3nMH8wnyuYyIFBRtji9AmNNC + Q/f5fOgoU0SzkTRUEE2ax8Ys79hHIjakjbmAudy4rHyopIovL8+BcN6cyAZ6U0cNYIwCShxuYQonSzR8 + yhqjdykLdMET7ZT8BAvyWYDQeJ4Bnof6JJlvQmJ48qrgnGS+a8MmWePoaIhoQGgbO0YaEHoEMcQjR2Vv + BqX+iakwmxhwMrAMztKRfsu+t8ptsgS9NPxp6ihFsSkOcPxxhx100NZozc1VYgt+GSTrPjHuioMmxUKv + BBu10+x3j/mFeIlj0Rl5UihI6y9558KCV7mm1INdulmZ3Az2ktq5BRUkCRZkDtKkDEUxp7BwVyrUCWRa + 9kW9SCFKDnPVFuueFt0AAoc2NKXjQzKfdiwMQ5O0kZEuTgkKJqOVxA0JqFFWW0iedlwS5RNQ7JRYYHt/ + Y/fw4pYdKzsObOkd1fRBMY42NJNcONDQNVkemO9f2D6+srPSK3kUJSul5lww2EejXopZxiwz+/lAdgMS + GOVSskJ8iKUuBWJcT1GzQCKdNnFqd+066IILnveKV1z2mutfBSN8/etfg2tUsfDmt7z5FnPNvPvdb3BS + KK6ZaB/9nNZagxRKWv1XPvz1r2kGxbc/gTpKgNDoIED40INfuOee9z3xiacXSCED/hol0Di2LnyQpPep + 4LifJ9Axb/37ST8T2xnZqQHfkuQK89HUAqGhXdBOA/7JZWpwGKtCZPFtu7L5FNIK7XKujZPbGhdPjBfW + xhuYR/msM51+eiTf7DDmy01ntdzetI/ZuLREECIwwgCHxfTBOFhkomjdUjKeRB+tMTZhj70jgL3QXsBy + JORV7zlQyKCvBcICI7QRFhsFY7TkQmjiNpAGBhAgZJhOm0gYz2NLQwgGdyN5QTjV/gwxX1CQL3XE1AbP + WKO8TUJ6CoQBkAIa6UfYsnl58dgjDoFuRoeLMMIIbxkQAlcRCAXeeE6kkEXRLqCmyZuW/+4b1/LFhGXK + xgaWAQ4TSdYzFHNsVYDTshJJ3ld9WI2jgf5qWDS4ZxUaTRelAtxjTjt+90HbY5WZHn4LEaW1FbB6Z6xJ + RXAzGRBq1NBfikHERBRNK6sll02YV2k9mtCiUmXSnE0m7XnJNZnXSD2nMLXMFKpyxz9jh07PuI0xQu3Z + KwH4rJF9zp6WL71md6Vm0HdbSkPCC617TGOTdLojodCyKYJLPDUNJFgYsrCsm62ZD2yc4SPYWw770j+k + vnZbSXpNiDXUQoCSI6ENeMmUb+yb6p/b0juzqdI7XeoACwcFCFuAw/GGDjpRzDUNzrcMTEu5NSk0E/II + V+GFSYk1jgE7DLMAH4s5Vv7MGE+pxISdhh21PRz4Zpy9Ahqk5sbC+C79kbW4ztrjPu6I448/4cUvfuGV + V17+mte86qabrqW46K23viYTSN8SBdL3vPHuu+98v+XXazaFOUgtWEjdbVwzZh81ywyW0fs1RvjQg5// + wUP3PPjg52+99VUpKeRbE8dH4F8/Mu3Plump0Ith1Z2laGeSBBuLhas52JHs7Qn4ZV5kjwIa8zOyXmCB + Qe/IZcKGjS05tzDd89sgzg0zjKzRVYp0MGeWyTfgLUqj0q27ZcfmzccdfjjuhJhBUb/vPCEKJtpKBLMS + M1lafdBFsx7i6uVLC6clcGg9d2JtydQgY07RkEyWNJdQUGTczPIFzY6P4GYkLyuWpi3UrVWCr/QkCsqk + HXXYwbsO2AIK0ioB3hbKhKoTxEb22dnxXQduQZkURui1rWNRGE8HhOTBhJyBFS0wxvZGB5YWZrZtWZ6Y + GHZaZmSOJSNqgeEJ8pnmads4EAYwk5WyAf/qS/w7wpPaj7aUxBBiDDuMNDSyw4CX0adjf2K04YDZoc0D + rBtGZi5Vcjw9NWY1dMxHIzOP4f6jDjnokAN3qrkGO5J4kYiwrqzMLy3NxiTCAITePzmI2LElpPfv9Wsg + sQ0nE6lEPPDapN6houAgjaHrKNpHAb+QRKF/BrHUntsGMvmLVlKphaapSu4XdWhMpph1OveGGzZWAJaN + 6xRdi6H9PBd0nTOFwzw0ZhDocJgJUfIsk6MAX4kLWid6iGCbBv/gfKGz0kSJYjHWQYmle67UPtPQPtHQ + MdbQPt7QNtPQNjsws+OAY04dXtwe0upDz3pqrUmJmZAsUfuEAZHh45CDd2IoSoFQ3BZR2+RQlzfMH3H4 + Qb29PbXj9GomkdV0vz2iIG+k5NTpp5/+kpe82IDwhhtfffNN14GFt932mtvvuEEE0jfd8ta3IJCqgxRe + GFPsLbNQOlF8UjpRfOHzmkqhJWa+IaTwk7hGEyD8wo9+eO8Xv/j+xz/+NC/myXBPighXQu3xC53dE4Tv + ByjWwUAHPxdI9bIpUYyE/p/OrWvRNEHEFB2zeVd0h9pMzTWKMHFLXpW5nDItUf8NCxNqaGFzX0LkwIIH + KSks6KJ1syZ0ZWgfk9zAjbBAavnPTU4xO0kYYVp6UaghvboOO/jAidERS5yoq4vGAGELKV/4S/H2BTuD + 5sing1qGdhER6yXRh9wyc1IIEAqNsKqVSia0xVKkGt4PSFiIFwNLkyUsiMggfu4Tzjj2mEOF2ZD8IOxq + OK0Xw+AOtCxvmJX+75hlikVhhCoZhTJAciCMKqUbUuBhAoRRzAxkzvicIxw5gqRMKEE0CjhiGMl6WSIp + ZAPeyKtIsraBwPDM6NLSNLCNQSbjhZl2KrQyKqgBXI0guqBqnh19b+CvGxZnVpbmhDEbEJqbNKZ/cDZm + psZ279y+YWHWAod2quWkjZP4McQTzgkiM//SzxIUZK6g9dUyK5Phn3Zx0qJrgSxqbaBYQj2XX5+0KrQ+ + zLIkEympPioWUwoXWpPnYq2ZutKFQZ01Dkz8pZZxn5WeCWaxluYNS/MHH7hDhJOkQn2URkPPXu/xadDo + eRTyvKYavqs4VhAxLmkEJNz7Ia0iGSJ8oDA66FPw5HlcT/cGqn/Ts7Cppb25HatfqQIWtkuyIPE/RUEK + isLwSj304J2RkB7hPTLiO+ca2mcBP4FAELFDkiJGlg48+MTTu6e3aE1tOjRpoRkpOqqdKNQ7U0p705tw + yoNhDoTzUbXuUM4pSKHRt6GcJEf/iOQGZPtsbJyanHzSk5508cUXXXXV5dddd9VrX3v1jTe++nU3I5B6 + sPBmsikkWPj22xQOkUmhhiRUCDXER/rRj9KSQgqQWlqhCKRf/yj2UeKC+GUiI/zCD39470MPfeHmm68A + 6dGt1/4ixLr6eigntlZx0f0AwuyttXMFW+Ocj3AaqSz2k6WYp2k3gVfmxIY457KVq1yXqUfUNpNaEvxr + wQMvrlaLfB459yc10mhyI8UcpgIc5rvJpCW2G4kpMO4hz7pBxo0DsQxVE8lbzOfoW+kO0nRwYQDCPs55 + s07fdM/Zvo1SWXMMc8YLeZFGPJkdVGM/bgqNXQZDpoRtFlvPF8wUyght9NQ6zjkgTMptFwqAuS+GYZ1h + enZ2wsJdpmp6e7+0Y0OaXV7IfEj/VElTWJrF7VKSFxPeQ3wuiJPIngHzRPYkAkc1MdtDBntBFx0hI1Ch + cdiQ0qmkbYmVRnFRGKGEFUU4zeDW9FV5bwg9ivu0eHgZEAZpV74CaZGaAWlnwIOIllOBcDo/S91p+g5m + qfRejgB0ZGIxP48xl5wWE6uzLh95E1NaEl1nNj7jSdRRnz+JbSppxRxKdatHlKuFQp0saOwxxTDr0JQm + UdQiIrSVlIxCU18z1Njt4IyQzegsyG2SN53lcpNWlUmt0lPEwpyPJl8WKhNFdb7LDUW53JmJCSJ/JifV + 0MF0qh1k0tzopEAoi9QhE3MfQ47wwhgmRBQNQNg1CeCVOmZLXXPE9uRfsJAsCIFGjfaxBoyM6fOCeWqZ + ob6MPvGu9LqNBwh5znFbv6t9G8G1OzkJGBgREZfXShks7r/GS8lZ5ZdF3BobGdm2deszn/kMgPCKKy57 + 9auvuP76V93w2mtuMiy85TVinCGb4k6wkISK1+Mjfdtbb5W0CnXQSNQwFJ2h4sw70UgxkX7pSx9EICVl + AlKIZQZSiCj6gx/cAyP88cNfuvfeu5/4xMdABMNBrkL7+IJcxmvPGFY7jXZ+at/rH5U8ccwLkJbSwZr9 + C0TqjyiVKRQvwzVWW2QtTMCS7id5Ohiv13g111JAZ4R5LMxcZBogzBKS0udc6Uw1uFvsZotLeB7np6FM + cLhdW2K8MNYaTtMkIiiG7vPoQqaLFrmglnDEvEdVQ+0voVnMHW0MlCyaSigzdGb6RhBTU0waAvTnBpDp + Qlb+vOZTU3bLc9FSFCx4RBmUd+3aeuThu9z2UkgTpMqatJjIp81lBdJirU7PpUuLsxh5MkYIDlECDRMp + lhaDQIEc97YYOFn+Q/g3RPtM8xSQE5QKUUAjeawMdFA3sMXoI5+1sjKnG4SXdH3yERHn7OMMBScns2ii + i66J+yYcpHtwjOAaEBZSLHx9mjjhcGhPrBOTOZVk0V4flET35IpsvQGkunwL/SiKLXyLCrnVHdXSo7F1 + CfhkjFCWfFW/vHEml+cj7VBqSsYX6s64fYzUCGaTaQ3CGmpoUUOdZSYhiQh7oe5abR5FYV5r97UNAtzR + ZE5SkjRYSJX/GQuU4SLoR2FinQxBXrUjjFchfGOZXpIv0S5hQrBQgoU9DR0D9JQodRIUVCLYNVvq1dSI + njmWpqHFjolN0l/X2yrxEiVmWNKEwtQpA/gJjqprFATlyHLhwH3CQ04BJTdJHVuP7GmfwBXB6eM38Q8k + HEOGEpec9D3YuPEZzwhAePXVr7z22isVC6+WYOHrrr/1ltfcrlioCRU3k1PxZpY33yIZ9295PRwRsVTZ + 4Vs+8uG3U30NLCSzUBykSgqJFAopfOBzcMEf/vCeHz/8xR/+4J5bbrlyfn6ag+GQGE3X/0XWecLME7v2 + bnmV5i1MU5mcFXbrjFDdmykltYIOFfQQjFgpQZT5Xeh1WTdlMBMrXLWwJ+yEJsYnnnC0Zstk1SJM68gb + RMOfwVad9ZooJudiuQao8LmPjY7ogeWqjEo7GFty6RN0L0vNb6GORop/hThKmoaVhQbVpF4w6eVrqmXJ + XolrJgd1Og6qKbRmyAM+mekDhMzco+fCOs6HHO2IghntoEf8MUcfctqpxxoQ2qidYGEoGGa9I1K6E1VQ + rz0WhUHtiBStLoE5gRywMWTJQAdVYDQPi2uPCoSZOGkIZ8CWIJxhoTA8X2mICNCyf/5V/jdEL9+NK5wJ + 2jLIlrpeKs7wxADYWKOJn0E7nZbPUriNhDIyy0AiVSYNuBiTNMT7Gs+MBQ7T3Awzy6TmWy/KGk6yoaCa + ZQz/EAO0tULSswkItB5YWaK9RX/13/xloEwx69ykKnpImUh6eFlAOoSlTYdY47L0kmzWXFpashDkzufa + R3dYyCn00GCaUF/MKazfkoIsQ0roW/Go7N6sxb8k5KFCUcyhQlFjuJDch6QHhfBFVXBTmTQZbQwscxpV + +AN1FJso0UFJn1DXDKQQaRQXaDfSqPQRLPXPlfpDagTJEoMLO1son+3JEuAfTQf7Y4m1aBzNiosCmZI7 + oZwSIHxEHnwhAo0pqq29W7Yn3kNZPWoz4NPhNMloXq6Q7WlBuIX5hac//ekveclFr3jFpVdd9Yqrr3nl + q199JfbRG2+45nU3XXvr666//dbXvuH2G954x01g4RvfeDNWUl/edKfkGqKXvvvdknH/oQ+JfYbkQkyk + CKTU4BZSiGXm/s9BCpFGAcI/+MmX7733fWeecbJMlpS6PSKnZf07EZxTVXOov396YqJuhJK9wagkqV+B + 0KHRRQZbibFLBf3G6UkM8WN8oaippjOv7BI0CdRmavFJw/Dw0DFHHTY6OhxXeoZszjVq/E8fWcelxD6a + g0NuCH5uK/ldDE6EmzNJe4qtB+P01stnhPrabhBNjAMhauIQiKBKa1X1atcAIeOR1lrzsSkpq52rqR1S + quNIZ+MgU/vICMPwx7C7hXKTizNuvpcuu3VSBkOLCTXLSPtcsNB8H14JzHMEPQsw1jkLhVRiubIQG0uJ + UcxbMIFREyHy+XxRikTnNKaV0zP5E+xcXJwCuhzJTOS0Ja4Mz+fmxjduRMUdj5JpiBpOqSjKxrOzYwfu + 2Lx10wa32ETAEyAk/2/D0oy4aSLvdKU0S9VPYNsdN5YEIhCoPhp5biZYawVV055JyHR+tuGhWZNMAUJz + 5+qf3ssp9EyO9lGrOxOUcJcEDBet3FpiIvUWvhkipkBozwtA6OW5CxhZm3RvxSLSzMKazKLaGhT5lNwQ + I5TiG5s2bjho13ZM1GugoN/XeclHoklw310HbKPuinC5rP4iYxEG+06rxuzF1XxIiQ6+IjXUVELqy9B3 + sLfU1m+NJjRZvp8evMILpaeEJUWEmqI0FyRrogFcDMuccEFZI4tQQ+OF1CANqqnKpIKFioL7249w/SN9 + vS05oVNT4/PzM2n6IBty0rZs2vzMZzzjxS9+0aWXXnLFFS8nUggvVCy8Cl4IFt72utfc8frXvuG2G954 + +40Ch29QRLR/33gTWRb8CzskxeK9730TYuntt1/7qle99HU3X/WBD9z51a9+WOyj3/vMgw987gc/+MKP + fnTvT37ypYd/dO/NN7+S7jn79532990GVr6Xgv9WO4flaGVaUEZPHU0rucFkUoIRgNRg1yIcL21GllyO + qZThan4q9AcbtCulqxlkrAFhXcsoYGS3WUIHXRTN9aA3ybSQUJgmSJk66mlVdUup2dxZ+n1rzdJCWRl3 + K5hI5ZN0nO4MZ1b+WEe0UFw74wFpblkODjsYmnfs2Dg7NymkMIQGk6z5XmUe/SEi5TndDLveJikwmNgw + QRMEQ9UYTx6w5LmoiGqLhpCfHoHBEvjy4Gf0y2OExu08mJdG9czkaQyP6jbT0/JcyJ86Pw0FbTFqCM6J + 9BrXKLcbmZ+b2LRxYWlxWjaYGdtOwvv8pAcCg9FG98Z7cyAafDcx3KiBw8hfA2B73oWfk9SPanqp112T + nIrB0I7D6/I4KRQiONxH2QEyKxQX6aaUVSUVvmicPsujyAqw+SWRdm6yiHIIJ2sSjruOIy8sksJCSdJY + zCEApNd/qAeEuVZNXlwpgcOQXCQ0MVdrpqC7CBASWZwYH1WxNKtB6qCY3tGKglY6Q6e/lQrhCLqNSV5g + UoI4xlxCMZZELHUHaZh2u6E9pYYyDCkpjFVjtJoorhlaD4KF3aMlzC8RCEN97f7Z0tBcw+Bsw8BcCQgM + y4I+WQjUsFB6Oy00s78j9/69n9k6jLAgGDJKz8/OnnPOOS984Qtf9rKLIYUZFl5LvPCq177m6ptuePXr + b74OLHzjrTfeeftNd75BFoAQCJTljhtJOmSBJsIOr7760tNOO+Hwww8+6aSjzz//yXfccd2997wf14xE + Ch/6vADhj7/0059+9Yv3vu/UU48zevqf8Fi3+prrMmEHlgfLjBPyDBRhqqj4Zz6aRBeNGxbkCL9qg54f + ZX2PCNoK7gcglpsqi5ZnRDDLHTSGmCIityJhfMozcpemU846ZpmmRsvtMwu4Sj2xE3eWO+ik0MuqBTd5 + NnAkNTty2VqxvlpaENkzKKAF2CgY44QdxjoysYJaGASzEKB6YcxnoYzBHYbBfJhUU9MolG7pORIpI5HA + Vcx+A5ampmi7F/oKuRkkTTCn1ZGM+EmNGGVFWV4gRDDN4TPvqCOKpzQ4/cpxvskRimIvLUyTpZAinCEf + JbZZHA5nZsQLE/6M8ULsrLsO2EqwkJcWFiZBOxM/LZvCPtQw1YXW9AAS+4xvHzTVNDc/pvmHDJA0cBjz + CHE/ibbMn150NHC+gZDNCUzyNXlvroJPDBwmddJDBmHIso9p9f8vd+8BH9d13fkPwAoSBAtIdAwGvVeC + YO+kRJHqvcuyJKsXq1jNsiV3S+69x457HDt2nGLHLXaKkzjFSVwTpztls+mb3WSzm83/e86597z73gzY + JDv5/OlnaDAYDAaD9+7vnnN+xUWHXg7GYApLtPeiMOjrHecWuZEz6TZ2jCFlgUFjU/BoQOO2MnYDpV9m + OqEoqGH0hSPbawYrGS7qwsCiMClMeHDBU8bWAQJWBit9dPZsIuit0bRHWrXCOE0964smO3VbtUxWvzp4 + p1ERio+MMkhJ3BUtBGWfHDRI65p7Sy2VutZKXUtv/ab+pa2D9ZsGBAI39tWBggKEVh3CkcmlEiqI6j3/ + Nf8xbDl69Oitt94KX+ahB+9/+OEHHn30Qa0LH4E7A48UTYW0SZ96yWu1NHzT6175ljc8yeFwiDcpQAit + 5qUvff4ll5w7Pz+zZcvs9m3zu3ZtvejCYy976UOf+tSP0CC1opDu6De+8fnf/I2fedET97W1t/wXfE+q + y8SkNSpd5byJe1r+hSJTz7jsfm+HWoGYQKB1+a0iDLWg3QO+YiLKFZWvCHPm9NXCCWOcGtvbL61q+YSN + 7ll6jpy5b9vWWa5zqwt98h+tFIOtolj0rsMBfnX1XNC9Y5KOaNIajf2opE8l+3TAz8DMpjuBMiOlYTYs + dMAzVj3LK7G6LLWpEYlzRBMftZgyH0ZQtgonmUrBIEbqv97erv6+cgqE3LayT7qdEu+XJQKmZmmp5NzY + oToaDNVhxKFM/Gecl1ifBcILgATOzU6Obp+fmRof6q10KOwFRkzZhoKKfIKIoCAVYaWDe7gdu6mAZTtF + IcViX18n9Rb9zxTnTIDhxWVKt7EvOV767NCg0ceEtiewQaNzUG0rEMrByCY1DlFUYWZRjg57sGYYDTLc + TWe0tmUppIVEC3W3TQ8zYB8NJk4LWYM0DgtzI8OIgjkD7tSV1KeD3jg1IHT8QyZbPR3PHAfzadX5GWHR + ccavxBhnb5qKzGjNr1m56iO508pBO7iqNetb/MVYhxhvcYWBvjZvKXyM7Sj7UjqsqUZEZf1h0YzXWnAT + FX9tGRY2deAXI2mCAoRSApY2VUqtlVJbL0d968Cy9uE6gHBjX6mlr66lv4QNNwefxmZpjGeK/NKnA4QS + l6Hr7w8CNigHZmdn4cvcdded99//XBqkDz8sdeFjjz30whc+8sQTzzf6jMkqntKpIXD4ZuDw9U++9Y1P + hQLxTU+ChXfffeuunds2z00vLMxu27p5+/b5nTu3nHPOGThuk1YPgxR/Ge2Ofu5b3/zCJz7xjsOHdj9N + gcTxTcxP5u2iBjTeSYJ2mdda2j7NaScSfUU1Ehbuyc0Ew3Qwk0/E3Vyaw+mDwJyjhLVDvQpMZumZj4wb + MqXloJPWTOdkXsCMjPfv2zE1NeKiYNnMUhQGc7Usg4bVpL2tBaJKsi/OeXMsRpDxfImqgU3ICjC+TCF9 + Ph0I0f3jWLe+kfVUvSslYqmwdCaiNEgZbjQabL1UOJELlLC+KJyOuKC7cWimEAAFuzpaerra+egMEdcI + Ojw4SEjlZxVYVL4bxjjnxRqe8QhoBzIN9HdPjQ1PT46AZAZyVghyo7envU+Rj8Nu9/V29Fb4VHExPAyG + Tnult4OPPZVQ9pnKorvbNRVeSrYavmY0HN7eZCrpuBgpMwEC0UjEAWeQRaaCCpubaiiHgJxyZ5K2p8oK + +fPRABjs7SHzIY1qSu25IxxmVb7RZ+zvW6CSut7GxTbWY49nVMHGL6sXMxRMOhZeCOaEE+jorRw0Jxr5 + lBGAlIxOJRVEDEVhCGZJ2yqpxN5uG9Tx6yAo6uxsc74Mu166OLrxtR5P0UomsAPCyCQojJlarGsUkVIe + AnMdUVuLcr3Q2guWtr7woFm+om5lo0bSr6tbjY9aq/vFKGWmt24jFWFvqb2v1NZfaumv42NrX12r3mjr + K7X3lzr6Sq39AQuta2oFYpgdnm5FyOsjaLBx+SrLba/+xy+JbAtrrpNZ92s+hsiySy655I477rjnnrvu + v/9esBDf0UcfDW1SnLjBQisNAxxKdQgcvuItr3vybW946m1vfOqtb37Vq1/1kmuuuYxacH7zzBaAcNvm + HTu20CPdtWuBkPrnPvemD3/4zdSF6Ci+/ts/961vfvFrX/upBx+8lazU037Z0rckjlj/yCfzJDUfJB1O + NXlPniF7vnAakVAC7MSfkm8syIP1nsxcJj35YhWYTQTzysJ8izQXQFiAxtAFLfRCvS+Kwgk9jG0wfTpo + cJgPnQgbVenrqjTKM3gzT/1sn2tZE1LkxYt/UVtR46knHAQt/iJ5zxYp36EnEBimg7aipdJp1j4b3WXq + wKhFy3fSsgGhK9WclAgKap0XOnKanBC4o1b/Vbo6B8s9nW2io7c0eSv4BsrliYGhSjf69I1WGkb8y8R5 + mclZlPqNjfVv2TJhUfKmc0gLMsNFGw1SycFe6evr2rowuXkWGkx7f29HH7UdB7DX0zZQaR/q6xzs7Rjs + bR/q7Rzu7xrul08H5B75aA+W7+rt5NulUrSWaSwrpb8q4CqHt1jlRmCZZr1TI69GGk50cQskUtd7hDQM + o8+4jMRqaPtLCRDKIW8yd4o3aXeb3S9oSh86MpWwJI08UhkQBrpvuGEqiyC3iCiYhRcmDgxaEUZzmYiF + Pi/MHItsgpjQSkMWZsqgqdEU1fRpgNBOfp4EUSy7sQKDNOprHQvTSIqQ0+uaQi5JMhFnZ8ZZtO3i5Usd + 7a1trZsSIHTJRFYOyq28cNA7qKEcDPqJdKkx6kxOXKifJg0rX87qSxbJVI+J/8o1BC3JmBC+zNpud9MW + IGzuq6MLugkUBAtBPj0Avy6Ofjm69R7BQu2UNvdry9QQ8Wm0Ri1rkC3CYqs9O4LRkcGTTb6thRhr1qw5 + cODALbfcQlF4771333ffc5kXPvTQ/ToyfPAFjz1Em/QJbZNSGor7zCtMaPhiEVe89hVUh29746te9YrH + r736UjqiCwtzW2M5uHv3tj17OLYePrznrrtu+MiH38KwkKLwd3/389/61hd+7KNv3blz/iRhrCbUGfqc + EAVrPmaxb7TnM081yiAqKAbzHMnZk2GeDRGzc6lKTR/LwUJTNPQrIte5SJwxAIvksUwvqB2SUC9GCAz8 + F1GvN2TRE4UkwqwtoztTlRJmXqNOAddyMFzPrBFsVBktV5NloulUqAshChHP64Itn8qggqenygLE2sEK + qOvUam6zkHlTVLMmwlqWSqTbWjb2dHVITI8k7tpcMKv2ErGg2ZGEldSAMD2kFulsgaPBAi0c0aigsNpF + gLCzow/Kb+tGkYe3yWKtK3tzuaMNdYJkxKs5pwIbgU05X2x3ZglaiK7W2dnRPbu3UN5lVVekvQjYKDKh + fIACOjjQPTLUMzHWd9Vlx/bsmAH2Rvo7R/s4OsY4ejvG+zqmBjrj0TU91D092D010MUxPVSeHOzmkSN9 + nSMAZF/nQF8H8EnFVUnGitZclWIxNlSt0WpFISybvbsXJsYH0pfqjFMrCgO7x8QYaliTsGqDhoT9gUwK + Y50dLWaaRoZ7zz66f37zuALh+o1qz2ZJkHllYSqxz4a7sWuasmYSmY1GkVQTR6s9ifKVou3GMllF6O1b + cJiLf6IZaZDJxsQJuSI2SORTriJMCGUFk3oHP1PupvrdyGUz3nm42KOnjE9AfO+b8ekUDFO+qO+kpSSw + 0tD6qD6RKcBeTRBUygwxFKAgobxg88oljAyZFEprtLJkQ+/S5t56UNCHhToUFCykHLQqEAgsD5Z6++t6 + gcOBEi3T1pG6TUOGhREINb/w6f/j1co7ujRXGvJbm4jt+M9vxVPNh3FnX1/fpZdeevvtt4OF2K3dd989 + D9x/74MPPmAjQ2fQ0CmFUAqJxuBQmqVPidwQicXrX/Oyh59317nnnEkVuGMHTVFqwa2g4L592/fv37Fv + 73boM/ffdzPzQoaFX//6Z7/97S/+2q99+rbbrsVp9+m/M6f0DAaBhl7+jemdxnyhVhLdZ/0SRumgA+Wn + AWREytotBt9/xbowbL6S87IaFLMT105lrHi72ttAYqWHGfJVXx7BkDDVJLleoiCcSN2e4mUZDGWKo8Hl + ZHPLlpZijo4orwRSQGyKptFL8uao6EpM1AhI9c21LzShf6VACJgBkOoFul6BMAuWK4x8zEobbOpsFzaN + DQWNHZq6ZsfiL1QPhO5GmkwmULMBlSnbotYtlIMGhD4UND2AOa14USjp8DoeAx6ie1nmCxOhQqzOIvkz + NB55fEr4VM8XwaT+vq6hwfLUxMBgf1d/pX2gtx0kmx7pmQTbBjrnhrrnhro2D3bND3ZuGezaMdqze6Jv + +0h5+3A3x46R8o7R8rbhbo6FoW4ewCN5/KwC5MRA12hvx1Bv+6AWlIKI2lyVsaIeInOM1SG3Ab99exZu + vfHq+blxebVBqq/iCrc2De6mwe/UnNsiEGqkVJQVyh6iYyOixtAgVWUhn05NyuxTELRN3UqjgtOUhb5f + MX1hqiyUe5REyh9dKdlrVVoaBKbqqZZOB8PtzHdGpYfxvPJgppB5WeCLVheF5hRfRR+Vs72wKaSnopnA + wjgzNin7UeT81JHKmslYo4VR/UloJ8Il7wNCVv6OttaB3opqJJxeXuSZs3zoizESX8qUSVVbhbVLiaOS + vrScMDlZbQhxJ81h1Zr6tS1LmnvWtPWv7xxc0dIPFjpxxggyMhpsUyzsHCr1jJb6hkt9g6WesbrOyVLH + RKltrNQyUto0GODQeDRP/x80v4mJkXJ37YRbfjne/8WmbpIcu2zFYmF+Nim85pprwMK7wcJ77oI7E9uk + wqB5/qMPMjWERKODQ/QVgUcDHHIwOySz4rWveekjDz/36qsvOXLkwN492wHCvQKEO4inP3hw14H9O887 + 78zXvOaFX/nKxxHXf/tbX/z93/vyBz7w+snJkaf/zhznGeRsiONVhzF7fAqFDm81MDJ5cNICdce1XGu0 + ejSd3sMJ2tS0BihKyF0ZTca5M9R2lGKJaD4wRb0vKs6Eeb5oSjyr5qRZgzQeyhHVjJciRyZLX5KrWpaD + qKAyLHQeQSaij9vnQE+PDVL16bCtd+b64SYguQyKUBEKG95VYmayZc6iBoeRPuMrpqykPMwVacliGpiK + CVNjLaMp132HFCEFQnNWM3Oy6JYScnTjCNCcX5QLGn3LgkGMOLkI9bQHYbtL4GPz00Z9gog61RseKs/P + jY4OlYd6qeSk7Jvs75jp75jr79gy2AnU7Rrt2TVS5tgx1HXG3PDD1198wzn7d49yTzcf94z17B2rcMPu + sUdy7Bzt2T5aXhjunh/smunvnOzr5JmHtX062NupjVM5wGAFRUaJoVMKSs3NjplIP+OURjk/mn1THNrg + 0AQh2bjUvLm1FrSD5x8d7QcdfYdhQnugEUPXcle7Kg6DGakrO4PXjBbx8e9of9Zgm8dteoZ8DAazUURY + 8B5K3WsL1rX5U06w0ICwqK9XHX2BMpMSZxLuaLYd5CKVULO1a4LQiCi0RumCcKXEAWEsBKOU0BGxqhAM + WUtWLMYrXfbFWFnRO6U9M9jfOzk2il7QeqT+0atCu2HPYFtqX3yONyYkj1cs1gigWLNkOeybhlXsBBoa + lq1dvrp9/fqeSlNHX2P74NKN/UKZMUGhDAul+SkEGaaDnYOl8lhdz2SpZ6LEx/J0Xdd0qWOq1DlT6tpc + 6phO4PCZAEJqZ1qgvNc1133ePfpQiwEhi/7xGTfQR3ft2nXDDTfceecdd915J3kUWhpKm/TByCalOszg + UOSGz3/xS6xAfFzgUKrDl7z0pY898MCdz7ru8mPHDh84sItakIoQIDx4YOcllxx797tf9eUvf4JgJoDw + T//kq7/+tU8/67qL2Gj5b2ScqJOBRn4jBCH47NiEj1+8pqGMbKkWGa+mPyX1XfNKMY+U4e64m8pZj9rm + K+2RxopQ/iuNB2YDa9dVmJm0tehpmrG8vI+RP7mlgrf9oBFEHQV9k+jdUR8NVkkm8rYySUaMQ2AeC1M1 + fRARhl1w4AtU2arlgyZsKQHS2MizbQcLQxc0cwCJcUuJxbYXhXinIXtnHbSVzlHQpBRSFCZ1IQ1PXGPm + 5sZkDa3qiPraKl/Vxl3gNGaJsiFLAfwz8V/mnJL3jjG3l2CZplWj6AW1YRi/FHgxQfCg7dBYhElxRv03 + PtQzNzYw0d812dcxO9C5MNi1dahrx3D3TiCQA7Qb69k92kPlx/1nbZ2444pzLzm0/dCWse1jla0jPdvG + KttHK9u4MUJdWN4+0r1zpMy37BmvgJGCiBSOQ10LWlPOaE9VysT+LgaNo0M92+amxkf6tVMq1aEJNgpq + RZdeZAwaJQG5aartDKC94LXdR+caX9YIhFZS57y5kzliIJTGxEe+fXJ0mErRSnz9A+W80QNBJhgGBaaM + 74dquvHxVXk22g2J1j6hzyiPxkzX4ty6ptdMFMKaR1KRFGaeEs4aAztFOxudSL0uTGkyQa2bH9U7TUa/ + KmTvvNd2RgjgYof/0dPdtXHDhrbmjew0Ik00AGFKLI+ImGMk2FKTNKj8drgv006saKpf0bRsZdNKSCmN + y5dsqF9bblrb3Vy/bqNPCtVTNAAhk0KAUMrBbqrA0YCCAoeTpe7JEljYPV8qby2VF0pdM6XO8VLrkAwO + fwj/TjwuO+6LgFGwd+9eGKS33XYr3BkQEaH9c+PUEDhkcAinlNmhIuLDUiA+/qgK8AO5FA0+cEioIbSa + Rx6599Zbn3355Rece+6Zhw/vBRTvu/fmL3zhI7+sqRTf+N3P/ckf//L3v/8r73rnKyqVbntdnEmVSpkd + 0PHfK049Ejzgbwz0VUaHBw0IEdl0d9V2iil0QfP4V9QOpp3PmF9fMJcp8mJqNkkTqJOvox0fHxzuaG2l + tZ1+KTl3szPb9nrWFI039NrQKhBLHjqWVJbOlHF2jFxXVbZqzpexijBJTcscMVwyUVNE70ORAqHApVdJ + 7qCYyLAYoRR0IDSSQhgHJqFLin/uuC1MGdYy4Mr4EdYj9YgJDavzcaA00yYnhp5717N3bJ/jttUTVCRY + fUqDjlqEEiTJ2jWOjNZ/snxnbqIJQcY9YhJqjAb+xThAL48EOGOYg8OGmbw4OUVUDZRiFWlXMs/bPNK7 + e3xo23Bl21CXgB8wZug13L2Vbudw95aR8vxImQbpDN3O4fLUUHnzRP+uzWOYB0wOlemgzgKEM8PzE33M + C2eGy3PDPVtGeraO9myjKKSDqs9mB88JWC7os02BiyO92zCdGemzAtEGh0mnVAaHxpepklhoRRjLQSHT + ioq/e6CvGyA0c5nWVhFOuCu3uRCI2kQPV9yn8kHulxqxhZ6noGD4M6nKxW1IXT6fqimkYeDGQ2GrFLoF + 7JAgNvV0dtBQPY7vDBH2MarQFfdG8gr3H58+k5nrZlH1nlOWKXEdCBPJRCaWSFEw1oURCt0lI0bK2D6Y + b2ZtFKbRug18ezoFrKoLM/l8XGcMB0ssm4SEUzzwaToSsuBCcRzFYkbs1igNV9evXlFH6sGGpXVNK+sa + mkqrNpXWMC8UTWGU1YuzmtSFdEc7GBAOlCrDioVTAoRycGOu1LNFj1nuqeseX9o1/kPAwafxI6gXsV9d + shTizPT0NCRSuDN33CEjQ4577rlbO6WhOnREtPGh14hmSaP8UtVaPPViDEtf+pLnP/rofffcfcudd9z0 + 6icf/8TH3/OlL/04QMiY8Hvf+4W//Zvf+rVf/eThQ7vspXMCQanipDj+bwIG4EzGmYGpF7uxCKLYPa9O + /8Yn/3YkJaBhXoC26jZp0lOVBxZKwKQLKpTWlCBKG5I6h91cbNwX+hnJPNzYYRkQZuWgXQC0LaBHYbPk + QFgtFgz7UGVs867SReAyKEwH80Vhjv+dzEKqE0qDpt7mKP5RVxNphybDwrABp55TloGl74bE+SRlIrsz + 3ex7BeBLYaCPCmtGSkNgb6APkbbE/eg6u47aBR4m6ywkl76ebsBYSo1YDoKODKuId0hqF2IIpRY05zBn + gUoyQ0YTlf6ntAoj59O16tHJOjNFM4ARFxitAmF7jlEC9nfODXZRye0erQB+1H+CVSMCVJuHyzODXWAV + 5BfQbnK4Z2yoe3Swe3ZyYHZycGyoZ3S4PDJUpqHKMTnet2vb9MzEAA8YG+we18dPDffAnZkZKjMsnNeK + EBQMxeJYz07GioqvYOf4ALzTroHeTpQYsHXgmmLwxg3jlBoEhhtJs9SNcmyAKlkZWiOmHqSGhcGCNTqx + CbNU3dRkQBt3JNzTslHs7qwQdOtXGxA6CkZJjPQA5K8f5RM5UMx5D8meqb11E+dCNYkm9SO1DZnBXkJj + DmznnBObVoR2MhOlwtP6LtBM1zyeSZT1kWKWV9O773YulSKhdgeOd2R3C0ObJSJtjdptmlrCLzWGSNgf + p4TSwmKSqbOsQWr/eHJY+rwbLFs8EyLagYFeNr7as1pet1SBUOMJJaFwZSN+bnV0HxuARpEVllZtFMe1 + dT0iK1R1vBiqMSmkO9rZV+rpq+sdruuZVsybqgtwOCVt0vKMgGJ5sq4y2TA8dfLL8mk+kvVbg2/ED/o0 + /onjT70gEPPC/v7+Q4cOXX311TfddJPBoWEhJBoGhzRLkVgIHNIyfQhCDQWiaC2EU/MYQ0SpEV9sxjQW + 6vSql0KoQXFPigWxFdhzf/YzH8Z37Ru/+/m//Iuv/dVf/tpjj93JQnnyr1mZUSeV0FSTUmqw5+Dn2Jbs + kuRmOlC0HinnlPKSHP6KlFFvh9LHqPR0J7PAnLgnad9nvX5DvrT7nzY9rC9qj+FagTjAkC8ZM1Amuocv + LeIsEVTRji0CAghRShgupmN8lIP6mKKJTIqFcViyaB59JBcsTzbXmVjCOmOFojAZ80SvLNvj53b6YUAY + 41tdZBaohrTCeHLoKpap6wbQ6P+6Otso7GYmR8dHBoJ2MESrp+XLesE/koZagoUmTwU26DhQRmK2+gff + aqBC9ekhCylat1hFaDZm4mQGKQbeivI/J/u75oeE3kILFAikk0nnc2FYSC6UfdR845A/B7pG5IBEWh4d + 7mGUOAT5ZbyfY2S4h2NYD+ids9MjszMjU5OD9hgePzYMUvYoTHaPDXRPCKZ2g4hA7HYmjmPSNZXG6Wh5 + 6zCgS3XYDTDz2gYQZgx0w9yB4FoAQtVXBGapc2eMOutqEG4bt9akFHY7c+QJ+opMU2HvP9Rckjn4qBn3 + oVmdjHiDGYJmEwYD7lQn414KiZFCKAez/VOORBN0FPBZXK6jzYkguk/k9pnsR07gaDFjZzUPAwjZtwU1 + YWY0E7KZXEefCOrz5mp5yqhFD3LR8fxcZbad5TZjLwaBdl3HSWHmoZFfDXLrhq0nunikEJh5d8TNdxjf + sLjBzPjS5z722MP3UEvIWgdb1CBQPuqNFU2l5U11y3DibvLYehKaSlFib75r4i+KlMIqwu5RaYGW5+p6 + QL6JEjmFZSsNw1HXO1o3MHjy6/xpPpL3bqC/ApVmMSPpk39e3lHGO+VyGQYNiAih9KabbqRfSrPUSDRg + 4QMP3GdwGAtEQcRHHnnw0UcFEWmcRlpNqBEZIoKIOLG9591v+OhH3vmzP/OhX/yFT/7BH/zi9//sVz/6 + 0TdNTg6f/Ms71UcWMC/9dh/g6clk+FcoBzPQJHeir7dsRuHV8kEDSL7E9m1qfGxh86zNLFPY8zNVrwRp + cfi/qhM9yCSqJoJhJ+gDwqq5YA4FI/IFl+28Wb57qrl83shvWSp9cJPR/a+5bGQ0mXzWBAyIltZmo6cb + HDKSickAq2hJOW0hTgSBPWmHOg8ildIbRTBxWQvOW06ZcQWFhN4pzyWI2JQCY+HyFC67t22Znhi1vqhw + ZPRjnGyF3l1cymVBHxzsQQvodtXusWLFn3U+3f8la4raUJAkJtQRlQ6EEBBBQTt6noDQntEeSjRKwK30 + KofLdDhnxvoo6UYGu4cHy0MD3YJJA93DQz0jIxWDPSBqaKjMp3IMV0ZHehe2TG3fOr1lfgIstMdwvz2A + b5TH82ygqRaLk/yUkZ55WqljlZ1QbBQReSVUh5uHukV6MdA1BHO1r1M6pTI1FORTdk+mOAzN0hgObM44 + VjgaccbftzZz5Y6xw/Il1dcbKck5Sm0tzSJTsfvjyNaqQxNLxIpQRn3eGk2F9i43jF/NzgrrpVs5mLVG + E4lhKl312KZkZBi6o9WDwwJ91MaEXgKagj6lXidFoY0hgpA3254qzvGNPJXfSecf3g0b1mTLm5EDtAq0 + fzmaTC3KTKoaNGjMPtrSxhoFw+vGZ1+5Y+s8sxRgUFmjEQKXrS5ZabgES87VpfrVpSWENDWJAemqjaU1 + 7RK9m9lwa/QERWHHkEwBIYt2TZUqY0sHx1aNbV7SG9ukgogTpd7hUv8PfkbIbyjStzVrvFtYAAy6w+3t + MqM6eSDhLVy5sqG1tXVkZGR+fp4J4rFjx84//7xLL73kmmuuvv76626++abbb7/1nntg1gjRVHQXUi8K + 0RRQFEQ0UHzBI1SKjBJf8YoXveH1r3zXO1//oQ++jVz7b37jC3/+fQFCiA8n/6qO/8jjCwurC0GADWYj + FwBnZ1IUprPD8E1U2+vWrgW8vIj02tL3XIZ8soHUPEUnbqW3+UHkM/MQQ8H0bK6GQ3fdtcsgnQsWbmct + lzgmdOmSXZzhitXrFoSTKlHpbYWrmvOHRqoYaOeTaGwJKGChLxyVCl6X3ZGPl6m1vAHlcTlusW3xqnJA + DRXkC/kSOaZoQhmlbcCq6sulLIvm4ByD0U0REQ0wRUdPTcOivFGX40gWzZLWw0ArFDcChMZ/seon80WL + xjFI4IEft/30iVq3oWBZVPCQNmcGED9U9o/3AYHAD0KILbRAKQGHgaiePVtn9mzfTKkH1A0N9SDMsGMY + wBvl6DU45AHcHhvt5c6xsd6JiYGJif6xsT7ulK+OcH84BBflebp5EoFDrRQnRiqTIz3MF+fh14wChz3C + rJFmaQ94PDvUNcEjwUJ1pbF5odwwYX5sllawcKt0JqZxQT0SMM/wDyZt9B8ngNfUF+5v7u+5+xVUTw2T + vmgTSgkkpKROGqE0RUcPctJ6MeQw26nC4/mugIUJWSbfJvVa0IgzmcTeTtFAe9bIzLxrbiBLeztUmiUR + /xwIq7IJQ1EYFYS5GSFUWFr6Piy0bXFK/E6LwgiNWS/UFo1aKGgrSqgLY4MqvTPgYrrQqdcoqYRE1SdF + 4bJGIBAglIMby3DlpjvavHRDuZE8QmzVzDvUikIEhWgHy8N1XWPUhUsHh0fPPnPu4gtXjNApHde6kGbp + ZKkyXur9wWoETgpEaNZt2TxDUEB1MzBWQsd7Ht5OldZx0nDysSTRMiLRom9kZHhqanJmZnrz5rn5edT0 + W/bs2XXgwL5Dhw4cOnTQPp5x+ODhwwePHDl87rnHLr74/Msuu/CKKy6+5ppLH3zwtieeuGf79tlQjp3U + 73FSDzpOFZj++rEilMaif0tyw3ukcp9r7W1fxf/1HJVv9H+xcRpKS6dsJV0LaW9yUZn6MzmbtZrU8WBh + A+iU0ZQ7Wo2IhdmDXIHFfAnzFM3qv+QyxjA4fAmhEtZNHJDigmpCEbGGdkKaSDJHAVPNuUNrwVziUrTz + WKVLTy53ScxF7RA4DMk7TTITSmTUsuTJp6Ddzp2bD+zfrl4zVj1IJaHIJ2MnnzkZFvpanFBjLB4hWKll + tI7IEXXWqCgIzSxNTav7ScDVwgi0MFPQVKKOCI97dCLYPtHXMTfQCepcvHvzpbvm9070A4GwWuiCjlHh + afNzdmp4Zmp4cmIAsTk4BxZyKLZV+HRcoY7bgoJjfePjAn7cyQ27rfgn0MidfMoNqxoVVuXgqUb5dp5t + pDKOSFFZNvPgnzRLhWUqiDjVv3tmiOHicF+HSyyC6FBQUOpC6/dK5KG65JhixGpB6xjnRqrx06H+ijFC + w/usRaGX4PH9z6VCGhDypSFM2Jj5ki+PYiLWiIncMJaMJq4I4YWrZVq8qRkxa0FTkVBmLOREXG29RZEM + C7MevnUyqvgyOVs1z2MJ10602E4RUa9NGaOkw4iMOLN8GUC4sXl9SvY+zgY3tknDZKS6KLSmaNJdSgvB + nK1MZC3YdCelOCh4Sl1ISC99UYIJ15SWNgKBpXr6pVSEa0rL1yxp3Dg4u3N237GV7SM6LBTijNjNEEbR + 2VdXVvpouX/Z8MjkeUfnLj5/1QRV4BAFojBlwMLumRLHf/o/3kiPbm9YvpIJNG0wt+tUI5OT0i2cqCDL + CcZ5WgopBlG2xPMCKFvZHcV52EmN+n4Ib500K5TJUoBJO118o+CfGmh1d6HQ6rF4SJ8dJlWg4GwsFn1f + ltu1eQnItdrR0QoepL1QM8+mj8+UwkYL9s/J1r6LtIsKfMXnxdPOEh19MXFJqsPMVlRme7gd0jNgq0sh + 2LhqlWQLxoowb0McrPrb2tAPtPrCgTGHSwlTknpi/xgsti1uwskyqaEM1PypiZGenk5vimovVICQhXU/ + JuEL05SAsVAI5PvUx5kuqPY/DQgzBmNtZmOYb+mIy4P3os10MAtVLqj5pSl9NEojpH6iqSgkTFAQaeB0 + P0L4zh3DXRReRxfGz1gY3yKEz24gMA7/BKWo/IArKry52VGQL/Q/FfmAOsq+8XFBOD7apzIvnOifnBwA + O+Wrin98Ve8f4IaVhqGO1Gap1pG9Bof86HGpDiszIz28nh2UhuOVMzYPH5obXoCbOtBFJ3h2fHB6fFC9 + TOXXCZSZGAhlpuFuIBBRMFjPmA2pqwzZMfSWOxm7hsBC1VdEgWawYUvYvIE1IxuajevImNy7Z+u2rTOg + Wl4VmvVOUzZpepIEjrGeKjVHhk7USvQ8hWGhTQez8MLQ/AiNULImpBC0YYHvJq3h7+Fl1nrBXwJuLTs/ + w8LUzsK3pzrRSFyC1UlqsSOhzoVa0Kcq2Q2tBb015R3RWBfmeqT2UH982McLnKIptHjCdSUoM9IjbRSL + GWLrV20ACFt7xzb2TtSvL9et7SqZH7cUhRXMuOvEWU2Prv7GyanOHTubJqcIvC1VBkpdI6Xu8VL3NNyZ + 3GKuLUcxS/0hLPE1fwTNAKYq8Cf8q/bWPOOvh9OCNiAfn/FnLjyh9SSrf4Wav1ThTn7t1pZNHLWKwrB1 + StqhupvCrXvpko4Olsh2bqRFYXIu+glmp2U4Fz1rwiDRXvZAf8/5555B7zoWmmoTKjOGZZCekeXVukiU + IKM0mThyb2DSYF5r+SMzVIszDNLRsupww/q1lZ4u4eDo6CLRS6TCwWxGCNRh/kJ7xxtKWWdJAhFDyoQL + J2op6DVuIrEYZQnrrXRtnp1Egq258yjDsr0/9Z/QQdtbIQdauSB6Ca0FrWjI5PNgoVUhMU0inQJGur9Q + Zpzr4SMuFvRKGTzotKXfuoLWAtW6jdpQCJbiFKMu2MKL6RV1PNI99H+iXhCdn3jEUG9NDCsESttTaS9a + +THwS8FPq7pwgHZTU4N8FPyb6IcXwzHJx6nBqekhPk4EOBzg/mnunBrUMjFrk8Y6Up5wVO7XdqvBIYXp + SM+clYbjvXsYH6okEYnFtqnh6dEgrkjSLUIIlJWD6dw0CijDnQaNNjV0jwL2NB7qq9kdEQWDH6ln84a/ + HX9fvndhYQpVTEFfn7oIuce67ZBCWpMG9na0t4yOIOrfUBAaprsujy1MR4bOmvFaMCGIyvnP6AS+JT9R + OqIrxYnCgJCHcW2yf9Vpn5pU8HHlcrKxzjqyn0A0oM64adW8bgNCv1+v30xEYe3QfIPUe0U5bZV3lbjB + 41XVKPYwushkfBkDvgQUM+wrrF1SF65kIkhI7xoBQmGQrjUgFNbMcvy4GRZuKilxhthexULimQQLJZ4C + KunGvvqOgWV9w0ugxvTBKSWVAm/u4VLX6JKB0Wzd5gePjQ7u2rnw9OGBRvHpoZestj8UGNY/T9Z1rIZD + 1nE1JZJd1un9LvacvJmcBKda1Dr0K295eboR0BcTMC8Wham/mpSAVtemZ1LciMl91G+kz2ax0Qlxxk9T + bhgusn8E7eJJ7LSxJQgD+RKiWk1gKe4Z04owYc1kSbxxT+qhMIJ/uZGhNkstCN4Y4W6o4W4yBfmgqSbc + XNQLwaQiDHaOBSD0XXlmsZ2PXoqSCRn84NCRV5WtoditdLH3QIgt/jLiCNrVRvVQBYTiaZk6qAVmf7QE + cwcZNwyTG20y8QL5JkYGx4cHdPUPCkKQjzoJEg3FnLmRUTNRPMG9NF4MGvbtw13oIpQUihBQJnBC5oz4 + F4gto4z6pLaz/qeUgLHnKRUeyDc1OD09ND0tWCgoODU4QwNT7hmamRmenRnmhoDi5AAoOKO3N8+N7twB + p23E0NSeR8tK76Nm1eHYCLNDHRzCo8GkRiX8tEn3zo1Mg9P9gutWEfphlJkYsiibgyxbMSQvhnIw3W1k + DFJ9z70cFynnpvVYnNP/9I1L3vogF+GUjg+tGe40mQCESRedaAu2UHxLCoQJd0aTC0NIRS7U3tQUcvYm + XDDjiNolQOdjy+bpjo4Wrh3aMwhwNm5Yb1cKF46IuNRfLXZZlqMBgwLKc7qdk7O1C4ho12z1de3UmNgX + VWONQJaxVafILWDB4cUMDfaBzfqIgIJp5eeTGkdE/2qyiNnIsKFuhegonEQKj9RCmoxEWiLRvrG1LuTX + wyDVzHoj0WBAIwwadeJGWbGR5MKBJa2DpY6Bpf1DGQSw7kxNjRJV/HSKJN4U+nJ9lTKkjKfzPM/U97LI + 8+4f/9kogtEpFupgShV+BQTiqABP+8XwV0SGT1ujGko5H0wWwj8td8Spz/5pfIX8z7/LJYTaCw2wF/ui + mUOpnzSp53auNaqP4AzftH4DL8vOtmSDFm7r+ZwJYC1vTKVCuU2fGn/LXqFQ/6VXUXKB1XaT8UIwp51Q + FNQ9rzdCQ/Mn0w67iZreYJWh86PCROuRZnKrWAhKqZfnyKTrjqkGhTLqcROmmkhttJrXryUxgjrVdv18 + ZDFl8sTq6daUNhTUZVTLwShNQ1DoWUvel0s18qmDjN8fo/g2ietKd5t1/EI7tDvyRYVdGQii/b3to/2d + +HyiVYARg/MZKAgnUyQKg10QOIW3opM/Gfhp55NmJngmhZ0ClYGW9DzjAc7Nzg5zGP6BfHNzI4Dc7NzI + 9oXpw7u37dg6PT0DKNrDRsBCwi7OOLRj28JU1kHVZ9OuqcEhs8ZYMtrgcLgHzs4sLFbsTMd7Ds0MHt48 + skAXd6CT6pZEC7fq5pd1FHTRpEdKmfWaDQ6jmiJz4vYaMSXOKLNXJCs21vUeqTNL9W8X7nf30RxNRhk0 + gUqakxI60yprjebpM1lUhROY01qQWYAw2BK9oO//2JMxm6DRAtQh29+5eUt3R4eMIWQTRhhFpKFFSpqz + YPSqtKLQWjKLlYZSC4pqXqkDSSFYoy5kdeAhtkpYVL0PCLmWwWDqV++LesvJO0+2EAUgzAWnpvt5lj5L + 611VCnBooLgmSCmCsrC5DhLpurJFLAWhvWfTqxnpsrahlrEtXXM7V5RHgzd30oSUte+0F337RjYpF5x/ + hEi59evXFZuEVY7Sp/GzeFeYGEGSPJmXymNaWjbyNzjOD+IJN/Ba19Z+TESmU36lgjGSHLK8rbWlJl0W + t+qmhsbOtnY0sSAleMmpI3NKeMOChCU2c/A8Cr9mWgIaaCb3RPCM02b+mOlJlO/Uu4IwnIreDvUbdipz + ZncTdbCplUsm4Y66m0y4PFKmmV8wxzEXjVvRRStCv4zVa9u1E5lemMs/ygQF81gRyJpgKUk5BTF6EIvU + BjbLzevWql6icERdl2rqU3F9CoSmmgACm+HErJP+5+hwn4h/+3uQz9uKCfm7r9JV3RSNlJmcrai5n7Rp + wefzLb9hDT0mf5vnxin4nAMiKKgMUu+OwoixJAdwArQY7m3HxgyBBD3GveMVHLGDMkFEERA45WAWKKQV + hSJlfhr+peBnJWBW9m3ePDo3xzHCwW075jeP7dmx+bwzD+7euRn88y9xwytF66DOTA/TRLXC0VqsOmsU + uk1olgqzRnT6E4KFPVuRVYhJm7RJtwx1T/R3Dil9RoT2ZjejuYYSDJn4zliZKCioHJlUO5G+w1oLyrA2 + +vi4aiLbqcTaPVNZpB408ieOrCjnkUaDoWA2a97crjKUpkJ+X5WSaKwVYbs0J4taOSjGoTBY1jb52Z42 + SI1oLYnZG9a2t7ZaFchTmRYwzZ1IdpzLzDSYBwgiFnqkWgumfBkAjCmS9oTEOHt4sJ/pg9ICgs+i5RSG + JqpVhxAYly2jQu3p7NTOk+zdqzfcjoJpdehLliw+qnQsNLcCm1SVFWFeuJwb8GhEWRhU9lYX6rDQTGdI + q5C6UD5K6FJz/+zRq66fOXSs3gMLT3mNP+430Caan5/q6+thb8DvgMSNXyY0CbWwOBkAOz5ubd0yt2Xz + 7AnrPCuY1LjkeMIMHmOztMV+qHEpq1+2Qd3xXirBGkrDSZ88vU0dce6xM7o6RaFhf2x3NOXVcDbi0QqU + +o9wVE7hLW+3HR6Sf0AmGZT7edFZHkrG3crv0eRbrNEhxmmyl22MhBh3GU3apLE1ml5ChWZLuveMt4OI + 0Dui4UbOYrsgH0yNM6QF5LDn7htywySDdijvnPUFIQSTv1REmPIUTESoA6ENbqWmCoqwkU99ZLif0IOz + jx7cvm1OlYJiosY90DiZ5HmaT8C/aF+SqQajrWgWKGECeT8iDZJyZ5AEwjKFYDMfsZCmKJQaSA1lAn9S + gRBbFnACV2sss/ELxSkNagwCic3wM3GBAfxUF2goKBNBI3+GpmWo1WILVLqggmShChyem0WkNMYR8G9+ + bAHGzZbxhS3jW7dO7tg+zW17ADc4BDWpC7VlSnVIBSlPpZ8mWGhwKJ1SKw2VZSpKfGmTjlSoBUVcQUWL + c/cQHjeS68SvaUAoh9oIBGPSkFOhFuTKkSlwR1Nj0hhbKMNa/gRepquUxVSGuY/i8kN8IXudaD1jex0V + yYR4QkmlYHu0YS17o96ezmyKnCMby+kUXPpySRRhB7ZYAAUVIfNn73YUJgLWI2EEGEAx8aCwHeSGdU2d + ba0gn80FAcuZsfHNE1MsL3aRavpZrij0cYaQ9USVIRUhCwIIOjFOvkJXbI0K7KWt0cgdraPhND40PDow + qItn2nnKdaF0RTKMjOVgdgM5gCwRRrFIDn0k9y5dXlIDNkaGICJ1YcRC4NAifDfVNXXCI/X03bp1qqxY + V1neMtg+urAGBYUk+mqc7zP7L67mgivsI8pd7AiCLkIdKU9BLFj9wgTYVq7EzxpPy+NAl0Egb9Qz8qtR + atDdNgam/wNKuBbYw9X8EfyaNFSPP+w0kz3KwVo7g9Dt5GSKQFhw4ctIpAnmpXETRZe19GH4xPd0dfMx + btM8SCy2Sa03qp41VhcqTAaetP4do+OoxzD5mNApZ9wTr67aegnr2MS+TfWA0La0NudwmkxsjS63YNLY + CA22au4gU5OG7qPBeEMSB9MkelCQjFMKO+g2yURnVeqy7W4yeMQwnjHujFtzuV4iLSC8w+Zrblxto3ZQ + pW9qFpOlrkfVvFjM8KW+3q7R4X7NozCaqAOhTApJxCUCcHpQzMzUMrR751jvns2jsyBN8IVRIbw2RcMg + MJaAPgIU0KLhqfgHknnlt1mQb2Lr1gk+AoF83LZtatvWyW3b5OD++KWJbXJ7UnBx85i1T6kj/XmkuRr7 + qzJTzKrDflcfmr6CupDpIE5v6P01y6K8ZZhQp078UYk2TPX1ftvLwWxLocmFoZmsZbTNBaVfqnajpux0 + faeLW+KX7Ksb2Nz0EL6FpaabxKoBaZWCQu5hHNjd2aZTwyClsBNG85vyifZSBYYIzFAL5t23nfks9GzK + SZHQSr6YsMbUREJm5/Dso79oJI5mPFKbDlJNckY7ENJnnRmbmBoa5RkpB2u1RmWhTvuoybAw3F+QTiX0 + 0eBCxbczpWC5DoPDbNqSzAg1mIgsLCQmeUpDfidvMCnL0BJf12yRr2O6tFSFhuFo1NIQFFxr1aGMDEVr + X9ZakIpQmqWKhT2ltQqQpBJKYMXTS5+wOmYxvDGy0fERq/b3LsK0ZAi0fdtmchKOj3C0GZnNPlOBgjbA + K/wWrPbr16y1Nmb1P6akuG6eBurzU4RWVSWWsB8R9YKOgu4jU6gA5VPny6QdUXucTBHWr6e1mOzUcrGZ + /Fl5jIrrpST1Gbg1QKJSQrqjXEerGd6rD6Ed+UhPM21ayhvIdZu0Q5eyhaXKlIFeAMJcGydp6YSyzymj + 2Y2VK6zmsyd3KQVYSOWHdSRb79AFZX1JcsCjl1WQDya5g2oos24NND+6rEZ8t8XO/UVzNlr6ALeS8WUx + 1Q4K8iWhu/KpFxwhISELVUf3bViYqOalxGkP91j2kPZFIwqqoq4VB1FqQaxB0aRbItLWoe7t04MHd22e + nhhwLuj01BAVmGsBkT0YBCr+ZeAHhknbE/DT8m7LljGwbdfOmR07prdvnxII3Da1Y4d8unPHzM7kfr7K + nRSIPB6wTGtEnko+1WdWgGTcOGy0Gtg3rr4Ig0MZXvaI+h6D7+Ge7cqdwaoU7g+xwGMD5bnJ4THpS+NB + 0xWBMMediW+gRTUJyXZibHB8bLC9w6aGEQWVwWv450wlE7dk0fZ0sPXTYmuUE0NnwAU/UosioQjbuEE8 + FuyE2bRhfRcOCrTL1lqASVDppPmX7jUK4AGQfBf3aMPD4nmPkzghrdHgtWS5g5JQmFGvM8+KuOnkuqO2 + o1kV+6VZRRgH/IuqJrwjyrUfDUhdOxH6pbpiCC9GJnpJHm+hNOSrGB0P9/ZjvmtQomQabVul/4Qjs6Ju + eUNpeUPdsuVYZIUvaieNxF5DweA7I4RSERdKUWj0mVXN5jtjbdLYIA1ObKK7t4Texf7x3gDXruerfhgb + FMDgZLKETrUy48/IHqFQhPEkUJ6g8/CXPv4TQnDBT4TW9qn+XB7PH0LsLxdBuPQJa+K/1YJAyGKhVDXL + XEM+gyi6++nuws8H/8bCPf69en8oCjm/NzY3K0knbKFi8yF0QK1iTtqhqZpHzkJo2eMTw80b1wNUinzZ + uZ6NB3Q8rmRP6ZtELLSgiZyhGltaZv52JxsLiYlpWLWGDqZwYm2kn3mKJp9KIcgqQFGeRNKH7ihPwpYW + pxxDQZYPaeCyCDSspAvKMM+k9JZxk4KfdETDmFAJMtHvKioIVUevhliMf4aHevv7uhMqYJo1kXMYcSDU + iAlxVgu90CxrSX1kYv9NPb1sCQ6CNp9pZXSYGLwn9EiZDsKNjCiojUFJey+3USchmSf5zzqi+HnO4nw9 + glCvV5qNUgIGOSBR9dBYTO3HrE5pn4KCPt4T/KPso+1J2ad4tmfP5isuO3b2sb27ds3u2gXyTQN+u3fP + 8Skf9+yZ27V7FpjcuWNaHzAr0Ch4Kd+7VerIUDVaN9X6qzJrpPSMdFNTIvKSpFVryn0qV6y9h8qYd+NB + YxEW5GOAhTtnxg5sm58aQ1/YiZW55TeZptDCp2x6Gtk0ZsfTQjHN37E1GrBZU7qFd940nVG4aQyatCI0 + MzaJjcwyQxIGab40dLl9a/MGtPt0Sq1hABBS9zBdtjaD7b2SSMLg6hCzJjiTpSGfF9FnU4Cw7ZPTXsS1 + NiM0IGT/11Pu4pldSlGQEho3W0eDJuHNdURlaJgfENrkr8Ag1Q3x0vVNa9lXgNHJ4hAbRXG5MDzU4LZs + 2pJOYegVgdoafVPPKoH1lSFirkBcuqxuxaq6lWQTcgB4DQJ+9ZRYNFWXhXgKxoQRC6VNqlRSBUIxYBMz + 0jVtdU1IDLUKpDq0YSE8UnXoFixcrCajrjoO85PXKnTI2PY8Dcg5zrdInaFOYKf6tHxLUoOeTmuUBX3j + +g0n/L34QXQ1CywYfU9WY97LmVN45XwJ/EZsUPilCoWmugfkBpYR9qwitH/hhtd88UuZ0SgnFj+Ly4Pn + S0fN4RzLjP4Kmp7QBeXMbhQkaLSZpTVIDQ7lwkjY0vJ6tTvKv5RsXeir+NXFhcfTwmrjojWaqF+o0v/M + eqGZQDh6x+SmgwXuKJ/S1Tx61v6FLdPeLI0KwkBAMCxM6z9fj/xOX6S4oVOfRuZD4FOSOCEB5bx+aBp8 + VCsZPWKjTKxE2zbhXel1YeagpshXaIo6fTSVUriVmi7ogQ/CbXGK6e3mo0wHFQglU7CnbaxXjGPMQZs4 + XJ0LAiQYm5WHzBomCOH7ZmZoeI4JKVTLQVDQIFDHezL5A7qs4ckh5d2O6f37t1x04RmHDm4D8/bu3cxH + vYGv4eZ9e+f56r5989ywe+wBwKGVj1SH9iRaSk4KLlJixnEjXVObI0qPdMrmlP1j9HITOzfqQmacc5Lf + ZEFO5R0T/fPjA9iwIZeERjQzPULT2N4oAqcg0Xicr2kuMzVhREFn5zo1twCE9mcKDW2NsLdtjXBHC3CY + b5A6EFL7KQpmvVAZDVZZb2MrU/DaNlNcm2qntC+N562RUJ8SZ7hNJUrRGV1m8m5N7mUY4z+lHFTTUWvV + 4FyxkY2v2IqoDlgRsaaOwtYBcXpas8Y6RulG2daluHtOa8RqS+5oJVOP+nmpbBO0DEhRUJekJYwDFQvJ + Y+Kg/xmgTrxmgiW3qewtp0JJpEacoRxkUrimpa4xSAw1s8mJM4grDAsTIOQlt/DXbmqKjbiEp1+FSKcD + MqcKa6f4eKtjiAEqoMspPg1FYW3ujDBHSMJQeGYVZ1QJ0ujtZRrCJ+NPwYNaag1a/Jdfev6hA3sW02gG + iIuvNe2CplhomMdHCp/hoX488zlXkbXjjJRrJuhjRF20ZjVYZl/yHqnetn+FIbZiXr3sAblGNDk4PcVz + J7f0JLJwstAUtUsrSZzIrqiIhaKqtDZp0il1BWGw1Y6bXN/thhs2F2EXnPZC7Tad8G3bZkdHByy21F0Z + nYnuLlZaAgY3UYnq3chKt95jmBBYIgGcGoMR0OFSikLiEg9AHJak82TjIpa/yLkIzTRzE/U6w/psoSOn + yvpYkWQ5CRA9IM64lZr1Pyn+BvvKY4PE2HYYTQZE7OtpG+ltJwJeouRHJO0PzGDABn6oUh6zGHgxFUpA + QT5tQpo0wlCQWhAUNIaLTv7AP2lvUtVxWM2nxd8M8AbmHVDY48bBgwsHD2614/ChbWce3nnGwe0HDiwc + 2L/AA/bu2SzfFZ9h585QJgocbgUO5WdZdShtUnqkKr1AgyhF6uTQ5qmx6fEhM6AR+zdSLwa74b7CgKXr + S3U4O0i0bydjUeg/uJuitTfTNVMZGqc0EVHI8LWgIHSmbipZCT1S64tK1zTawFalUqRtUjGV3UBc5Vr+ + ptFdyNoGIrDJU0NDsJdvvBwFk+ilnLOat0ZTyihjQlMuhjFhVhTKZZLuLFPWqDVavBfq2gm7DNmDqvpo + tfZsCKAQ1y3HwnSPm9JkbPsbUTAMTQoQmOykAxDGlSds0ROajNtdFRYz/dR8RxFOgHz4y4iUvlm8ZsDC + CIGGhfRFSzBIEReitacW1AMgFCxcQ2nYXpLSMM4LvTR0nOBdqnSXoRKdKnI8ncfzJh4Ht9haIAwVx7WT + MJfhMZbK/HReT675WSfA5jUcSypBWSbGcNwS9G2B2tcLMh3n59LAW9gyMzjQZ79I9a/j96SIaI/1xxuA + 2SOBm+5usl438isP9Pei/0hKxnAa2SlePYX2pqihY9ojtT4Gm1GEcFwHhnZV+7s6rqeRYVbkrrRnwvmD + IIQ/ViKfSIEwiWGiFgy5S5l8IumR0hENpPCAfMkIsECZSxQUwYC0hqdMxkEw4UTWDmXJmxgdhPaSip0p + Lvsq3aCj3ZlHQWNApEm8wVw0bY1iAUOBYoo0jk2bNH03GUcRjBC7cDEwT+sVWaATNYXE7Jm1pjBERCwP + CmogEffgGdaGj+hUf+dWmqIae4sbC5gBeAzDFDUgCR5pfQZ+zts0aSA1GWgkVeD2KQM/hn/AnvU8aYpK + 2UfBp+B36NDWw4e3HTq41W6cecb2M87YfuaZO+Tj4R1nHN7OcejQNqBx3/4tVh3a9yqaztJBTQaKNE6l + NDR+qckteEm8yC1z44f37NgyN2ENUvEp1fAKbFHRFx6YGjhjdnjHWC+0IAQVpGqEN4f3RBy6RU/pWntz + X5OKsJZAxWilKRCCnWwd+Gg7lVC+azko4YXa1o6lYdYdBfz402NYMzKMZnyTzQjdWcaanNJpUH1qOJIA + piyVMLbxcyJCrQ55jDFlfArAvJGFyL3mY9dE7ZZWrmANl8GAmrkYFgrsxalhoqOQ9aGKL1rPb9TXV2bk + 4OWg7W2r4dBQkI+y7AbjmFRqTNUos4+47S78N2OzGzT6P13KctIv3chzaCPUFPTiO6ruo+K4tspiC7Vr + ysrCpGR9PQZspFJYIbimVQ6BQznk9lrYpJFBY7ND/2eq7aeDIrwrcM+PDwnp8/Pbq6Pboj+UPxMaYkrm + p/OqTuN7TfYAxhDF5RUeZwOFVyFYkUdWukgW7U91Dsf5iY5kx39ViUDQgFAeTjlE4yT7e9k+aYnUqfEc + ypxFw6mT1IJeFOYrwnAOOiLyG3Fa87NMD5T2RcPWT1zOl1F74b1gl4ftAXl/+C6+FFgzeUK22CHqHjO5 + DrMAQrtWk81sMOBOGHFypekMNVBj0rIvNJGSQjDpi4ZGUxRp+WxGboj6qk0Wrwh40POiLaQECAQgzDRh + ygAM0XTaFDUCfcqUkQAmtigmzbZlNC6mrKcwYkaGxcTZYK/ge5KaR4uawiSD2IqqfZqJBS2WQZOV2sf7 + 2udx09ZkQdELDglmeFgSPUbTSPhE0ATvQuZU+DHBA4XgGYd3nHXWrt0GfnsEwEA+KQEPLIBtIN+hw9vO + OHPHkSM7jxzZAfjx4KNHd3McO7qb23r/zrP4eObOM8/YQY0o1eEBqRoPHNhy1ZVnP++Bm44c2QXE2hDR + OqVSF2ZtUrBQgHDn9tkLzz1jYcsEKC7BT5pxiBsccvu50cq+meFztk7vm+zfPNg5Tn4hysL4noT8Qp0O + ugVrZI06fTQ4kRb0mqg5W1o3YFPHSJhmeFAZBid0qwszJ7ZEZR/gUC1J10MhplUQIdD2TzHGxMJMZDoY + Qy6LY8LQI03tcP0cViAMlrkRDrOrIEVBmak3NFCaChtOhfZ23RlQ2SVmIor4sYCFiCUIIRedvlzHib+M + aYJrYiFPBa3OCKI2QzHE49HAt3XR4jLi2+7Ah/G+lK9OfPs6Ujw0sD5BR0KZ0EuEJAqRD2pOr0gmRClB + SCEEmcbSEnFxI+uMLs8SOqh8iapRBIVdaArFei0WiIKFTdzZE+eFldOAiUW/heJ6YX62o6215iNq8m6O + D718VWZSsGZ/iP/4oZwy4u1MpMXKlcffGvBnHhkYHB0cOpkYKSm2Vq3iN0rALNw84Q6EV6XiV/nHOZ2e + IrU3UNkGS0++SFr2BqlvzxT15RyXM40oTs5dbafauRvPYN/opcSZkEym1NAwWrBLRbr6yZiB95KiGW/7 + 2BENnr9yZSYKikiZsTymwKCxgQcXNYp4lJdpCQgpRnOlwhphQkAli+LN7XETWa/JVpkcSUFZM94XjQp6 + wUJTzdsgMA1iDVv+MB0MSrLgppZQJ7QcDIMlBooI7S3xjqV5eLAXeAMpCw261FnUVuroHJbWhQKEjMcG + +zrHcdNW+5idI92ozvGOoYsoekFLDZT4JPWImZDxm7iAqjoC6qbxOa0WFCHgjukLLyDd84gUc/vmaW+C + YWecsUMg7bDUfBwg3Nln7z33nH3Hju05+9iec87ee8458um55+7jfrvz7LO5fx+0GkCRMpFn4ABHb7zh + 4gcfuAm8DENEJdqAhdu3TRm/1KSHxp1R2f4oL5uOruVX2IEN29RIZct43y4OIgyHu2fVmBs/OQkvjJbc + nsUo4b2qKXSebT7NMfPjLu5IlDuTp8yECMMkxXBts5oHRcqonCGmnfe5oAEhEzvOBNtp1ZpPp2dj8HkI + WBiscS1EM0PBall94EvHbHouFjGjwdBNxPXMEVZubNrQsrYZq4mIgmHTaVioK4qxZpZwNQ0j0Sl3Kuzl + KG8JiaYGHBpGxn81ZoERHNOiMCPopXv0DRubx6en+JgrCqU3JYYyIZJJisImVQ2KdlD91UjrXY1ymx9A + Q4sqpm5pg3RKGRY2tgpHhhYoIgrAT1qjbSX0heszfaF89YSlycljEOyaDRvWWUKs/+NTVqfGFasK8nNp + TOuM7b/gv7Q/eaL3R6Qw1QRXngEzAQAgXwHn1BHHeeYCLvrroR5FGcLB2R9M2ORrVWpTKwRjOejVXlIL + ZmckKsneSpn9ojZCJewi7PvCeZ3ji3ozxKUUXAPj48NnHt7H0NTu5Bdn8G5Td2uqcHFiOQSDIGXNRMPD + nMVo1YQjeOozFyl3YiMsPsLWERLTDVUBei+US5+uJtClfNHMXzviX+iLRpv/QvSS0ESTXqiQZbq7GDiJ + JswYMRIZ3wowZq3RTFWdkCZSl23rpAFpYKG12mKDNKPsa+MumMs4NIo3ChzRTEohVY5mzUsUg7iJ9nXu + mRu57dKzLtu/ACoQKyipti6ZJ02XSeFor44GxQLUCKJUgUqKmVhQ8Z9ROgGte++5/oXPv/PKy48dkM7n + Nu45/9wD55+7/6wju44do+zbQ+V3wfkHOc47b//5HOcfuOACjoMXXHjofL/zvAN81cDy6FFKRjkoE3m2 + MFDUGhFwBRFdj+Fai6Dfp0Gq4RVuwMYUkCxD+XUgzgyJGff2EQkW3jbSPTPYhasqQGi5xDIgVG5ROCJ9 + 1NUmBN+LO0FMayoMDtPqPKOPZkGSuTjfoKlPndWC614gyCD844RkM8QpxJ/e0p5TymjkahWx0PPCCk3+ + mhDow/JIHBXhBMLByYGRgXKF5YIGaevaja3rNkqSvWTspCjog4mQ08tlOzjYSyB9oV8aPzVCXAaE1gry + nlCeMlOEw4Q4WqQmSD9JtMnSL6P4gC+rLD+rCINeUFxG1WJUpRHrgrmozALVUAZEXBrRBDZpFBfKsJCK + cH0PUYVLNvbjL6NVIO5rwWLGKkKxYbN//HKIxvjx6erMioabDquY1hyn0zXluxjAYrTTlNeecz89bjgm + J4OCvNm8kpPsPZ7ME/4QHmMWDCdUeqSvxN9hg6ukznOckzeT0SBEbPtL1bKVySrBPDsm3F8cCi6px2CO + w7leUgIuXaLqwBXJiR4qQpPS89Fn5lwkk+Mjx44eoh9gNSXW7Qf27VSeTs6uKUlBy12BJvsNvZoYz2uI + qDzSwCDVa14yewuqQQNF2zibX2iUTPgSIwxYAFL1FZmJWtyha3q49qzSSaFkDQoPQrbzHDRR0UrTN0vq + AAoC645qao+VgxZAqE1Ra416HrpTZuxGFqQeU9TNITN+zMpBU8VNjA2cfeTANGVRD6PBjomBrjO3jt9y + 4eELds/Nj5THNVmeLuIgA0JLk9C+KE1R58UYQVR7oRmfEy0gaHfPXdc++vAtl192lDkfheBZZ+2k5gPS + pAo8d5+B3wXnH7joosMXX3yGfbzkEjkuvfRMPl58MffIcaHg4gG+xQ6qRipF650Ch0wW5Ti0zQeH1iYF + C925xl1P3aSbKnbXrjnup0E6OlhmWLgwQpyv5BdSB1MWDyYVYRZKbO4z0XFGR61tsEyBTHYYmfWMDWX1 + TyCHhF7l+tWJlELGhLbL8UKQGxKwvFGiKNMkJpsrczrRSOfEYy9lgpykKFydmjnkXUYzOyQ1Qsq5BvrZ + XuCLWl1o7RNqQRCfFq9dPlw0yp1IW6PZ7jMdVdhj3AdD85jS+i/cNo6MKaYKQMhqgMgNyoKXgIaOsQXq + N3IDQq5rWy7ya6AvWRpJSAwT0UvCFw0+ahJGwZhwJbhIHsVKli1hoi9bUlq+pLRyZUkfLy3TletXtVRG + 5ndv7JuyKtACCwN31BmkrKe80PExMjlHbP31f/z1yN9h6enq6ujsaCt89YSlEu+99dnkN1TSR748Oh5N + Jn0kXNCLLzq7t9L9QwCwZ+pH8F5xSvGXtBlezbdO/841fiBoR2GdGtN4RWjEFodA26Ck/6qpMfGrstuS + /xcJMuIgE+/MNnGcUL7Riz4y2XmfHxXIQ300yJe4DrAUEDVmXlBoHZjUXBuoY7BPI4EbXMlmIhUgMISr + pcYZgTIatcMBEb01amuEs8/dPoanNWl8qo5I26F2fwEFZcAjM56QqiNGozIOzIUrmaFMai5qwfQ+HfQZ + YRJDr6PBTL4WOTJaFIqbl84FTQ9n6QrmI7Nz29wl5541OT7YW24lZZBAJct23zZWwZxzbFjwL0wHLVNe + fEQlOxAgpNiiC8r8jy6o+cIg+4uMmDlgiboN0KL/efSs3efQ8DxHMMzA78ILDl500SFADsC77LIjl19+ + 1uWXnXXFFUev5LjyGAe3r7j8LA6+BC4qHB4EETn49nPP3c8TWo1ocKiDQyWX7oVHMwsShx6pNUhnhy3I + yQ5e/4ED26675oKtC5NwRPkd4cRulvxCAUJK4emBTlJ8sRSwnKbUdCYwSFVZYQ1SifPt5Lbc6O7EQjcR + V4iUMMBh3KPkUpSpEc1LXTUSIYGE3Q8EGe4vAGEWw+Qj52xMmLFmUpO/1GjUtBOih+7phBeTBz9rk+b1 + 9TlzmSA0SrS5mVsF146Bbp5BGkaG1r9Jy8Ew71+UKVPEQmpQ+jaMGH2wkjZD4+2Agr5wGbIaWFoZYF/y + /0oeobqpSeUnjVAqQuBQZYUcK6DJsG6IUdey1UtLlFdr60urV8j9mtC0Ym1LW2W4sbVfdYTuL5MSRyuy + EPPzgHFWJG5b/BDvha/QvCDC5GDon1JRyIMBgILT5unBDG9updJtL++Z+qdv/Wm53ugrEEZJLQPS6pe3 + fu3awf4+NJfplxzYqh8PLElDAy183Dr46VLzGWrQqxJg5HcUf4DIpklOxHCeyfmq92ruUgBLe5jNve1j + futXCF3KzQy4aGmw8LEaBfV8CMN5Q0ReGmN2RhrcwKRx28IMvU1nzeiYMDVXU0+1JJLJNsViOhXGhDnr + URAxCf72QjDUfyns1bydusnYyFBpMtImDRNBNxFN8gpiX9TNmpUvo6I041xAKN0yP9nX110oCp0mE1KW + Qlsva/QhHh8erPRW4Mi0TWAoChCOkCwhenO085qspEO1GCtBzsOW+QmqQAXCETQMhw/vAPxMIKiUTtFC + iPJv9yzIRK0GUF126ZGbb7z04ovOAMMuvujQJRefceklZxr+XXHFWVdddfY1V59z9VVnX331Oddcc+61 + 15533XXnXXvNuddcc86115zDl8BFHizHpWcqKJ4RakRpmYZR4tGje/hZCDD279sCNsOgMaEhPFIFQtXa + q/WM8EgnBrixeW5sbLTPLOKI8yW/cMtIz87RHoI15gc7J4Q10847w6TQKEWp75o1SzsVDvvKnT3dBFl0 + zU2OjQ71w2myWSy4SKk9NFRJ6UupvwxmQ+WudgfCiIWZo0JWDtqwUGKYAt9YKTOpjqI4LMy7PdhIW/Zz + nL2kTG/bOjsy0u/UsOqK0GvByCzLYjtT9zVjkAKihDXp5KJoK1OLQYp11FLjuNWkyRTuZKGIw8JMduWL + SR4FbanJNF0pNcYRMVnJdEYINXQ5E8H1Io1gRriyEagTcaHoC1fVr2ioX7msbk1daX2pbn2p1ERdCMVU + ZfUCh2QZoqZol+ReC2mSjmgUFFbPCOkftbe21KJ+nE5r9JnCrWf8eXp7y0y2amr+TuZnoVvYujDHxueE + DxZj+PXMxk6cAOxMUXtOzgapp5MdSaz/5Ku2KSmUg+4s45spGhjMy8QhKDFrSPUShbPTsNAK2bxwIhHU + 59MH5dRXf1HbSHJZ8rYEY/tMLJjZWKR0NaexccUynNg8N8GSocNjdxktWin6jDDT1EeyjJeGRi6w6InG + RomeSBMnvBbUbXsmkEgNRYNkQh2TLXA8r5pgBTSiRKTR4zySd5BJP3UfZ8APPJubGwcOAcUa3dGEI5Pm + KlhxY25qo70ds8jn8RQlmYEw9+EywzMLVLJDbKxHewl82L9vgWLLODJ0RIMFGhr5fVvoeTILBP8uvPDw + 7bddBVyBgtRtAOGzrj3/kkuk4QmeSeV35bEIe+c+61nnP/vZF95559X33ffsW2657MYbL7rpxotvuOEi + 7nz2sy+4/voLrrv2vKuvBibPBiyvoli8/GisEQ+df94BuqbXXH3uZZeddeYRaDjbDmpdiE6DulBLVRFU + GI/UfEoNCG1YGEaGoizsGRsqEy9MzhQsIUQjKivsEgapHgqHGl6oYcWJvl5cCIBDKLvIMfsrJDiL0Tng + hyT/yJl7d+2cb2uXYApzIvWetmgEuUfGz9b9VqNt7Yqnh9mwGSIaU8YbpJmaUIwamsRpzaUUGjphVVoy + zBYU5AxHrnrdNRfNb55UOmigTGc3EgZ1QVZUBYGBhq2GkaLEzTqiwXc76noD2VvqBDqWUOKZcC6GgsYi + sF1y3DTLApIMC31L7ZtsFzHb2pPCYSwJa3e5ltXVA4SE1K9XFKQ0lHLQ4VDqPzQITctXbFq1fGND3Srp + jnoqRZDYr2JkuKa0ZkNpbUdQ1tuAsACEvACzyzrh+n5KD+D3Q1NRGECe0jM8sw8GMFisOaprXL4kcyjI + osediQJRNI1PBt4Kr7zWT0yVgtnDQS8Uij6gTb7R60m5r7oidHxMxoFSXkb8S3dhAQeTJr5wf6CB87Fw + QvswwM97vzxceFu4EcWCVgVmc0GdCLqOItxvQnuT/aZC4PSS9qZo6ixjJIKcDUeExsA7YKEJfNGoI1xD + sowkjxudz7UTBntRJhhv6D2WNpcsfKE5llaHLqW3PPT0CPcE8JMWHD06C8wzgkxiuh24/tYgtXXchBMi + mehtJ19i2xDyeWFOwhYZ03wlsVKTQF0JF9TpmjBFNfZBqivzjoEdAxaCOsAPckBwCG3D8+6/6WMfeROl + HloIpnogIr3Nyy87cuWVR6X+u+Ycar7rwb8bLrzh2RfeeOPFN9986UMP3vSaVz30xON33nH7lbfecvkt + N1/GnbfcfOlznnPJDTdcCBxe/6wLgMxrrz3XasTLLz8icHjRYcg1F114iIkjP4s2LFgIEoPK1KkAIVpG + tfAWHqmVhmI6E1MM+b0soWJoUKzXsCHFOgCJ/S6i7YfLkk3R39nf1ylSSwmlasNtwHYPJisMdaG1mpnF + QihVdUoYFnZshIjE440vauxQFb3YrFdHg9oGt3mwO8i4myhjwv7+boqtxIQoLQpDRcgp1N5KPaYGDtHb + L6kIQxKTF4WcmbwAi1XStn96nofbViymI0N3XKtyLlSKqLLPhVy6skHjPnUsWCOScAkvo6e7c524hYRS + L18aBqKA0wXMljmuD0FHwaf8graepJR1M/ZP7/HNeoqOyQ6eCeLKuiWNdctEQWgQGMpBKwr1qG9oXLF2 + /Yq16+r5qojrbVIohBqh1TSuWLJh2crWNUtICYQ76lLCE7JGnxEEkgbdqlVsGZ6RZ/uBPgl/sI62Npp1 + p/1T+POa/ODkn6EmOmpzkr99qP/iJknqQHtmvyfdP/FdRriyf3aDM51eqxOxwqAw8xqNZaGel0gnh/tg + pYq+M6kLU5e13AWQwmGsCzOOjPVbPBE7EQsGwLOdqbVADdKcIGOqCY+nd71UYfMbrWSsCrTVwZpLQTgh + 0xfBQo/hlSENTjRgXqEpGj1FI+DVQL7AIHXKTBROQJaRhdLdRJMog2CrnZQa66lLRkf6oG+kxMWcZCLy + RT1piPWdoCUcVaCKHJwZ3E2e+3A3HBlQUJR20ETVSi1aaQftPH1F0wtiH2pNUVBHNBLaCwXnqO1uvOGi + 887df955B0BBCkGmfZR0tD0Bs+uffQHgB8JR/916y2W33Xr5HXdcedddVz/66C2PPf+2595z3V13XUOB + qMdVt992BQ+7+TmXctx008WUiVIjau/UWqZgIRNHgJABJCNDVBkQZ1Ar0iDdvWtup0kM0VSoYffC5on5 + uTHTVADq/Gr6C1LpDs1ODyErnB4ubyPInszC0R6opOI1AxBSERoQapuUdzidFKZjV0NB34UkeRQFIBSl + RGIlIyhorBl2RXwJ7wUY0caaMfWOKChiI6FQFCL4EcPRvJQi0fOEMMJUTZiffMu5bd2OdDRuRZ6MFVVN + 5KwZ1yAJX1TBTybyq3GNkUS8DXT6V69l82nXYBRRFEN6vdlT3QiN5WCYlfDaGHRoJWUFooAdiyEkAONJ + 8AxGJrDJS6wIff1Rbb7yelKMjOsbaxnr4Yq6JZioZYVgHBPSBRUgjPQZlIXBdE09SJVlw6reVN/YtXpT + f/OyDY2lVetLjego1ID0hwOEtnIDh/ySx6+0Th48fkCPVK7/03qRnAWUNKf6a+ofO/xO6ffG6q/YCE2w + MOOUckLB14JbZOPPCIQlfEcRd3IKpvuvAn3UTkpOYotrsXMz5UPHfZ+joFuMFucHBe61oaDeGVjaek0W + 5fNcLYBTOvCQ60ocNeTCto5oWgiGAWGtcjDm8YZxi7RGc9bbrh30aU0UToTo1KwXqiVgkItBhXdejNJE + pTXqfBn12cpWTJNgW1GYtUBhJLaJTE3cRDvExdSPgIIxiSmo37QiBDVpikIWHah0ENe+c6xyYKqf6aBI + JoJwkJRBmRHSEaUcVJqo5CgZBAbV/NZJykE1S9usHmlbQaMnX/m8t77lRdBeZCLIOPDSM+mF0tUEvaj/ + ADNKvdtuu+L2268E58C/u+++9t7nPuu++65/4P4b7r//2Q/IccP99z2be+6991n33HMdD7vjDjluu/UK + vhcE5f6HH3rOs6+/4MorpDSk6QrcgoWIDmGTGneGolDcSgUOZzHsNmUhqffbF6Y3z44Sjjg50T89Pbyw + ZRIRJNAo/VKZFFa2jPbsUtbMAkUh6hHTFDIs1KRiN5pJuaP2xprQnjY12xFu+B5Fy8G0KWpK0MABlr9+ + 81pENYODFYW9Nfz5Rgb7O9uhhwTVhLVGJYBi/Vo+1pDVKzm50BqN/jKp20MmK0wyxcyDNJSAqaCCSwPT + any9eYBXhBEIg46e62t+y8zM3CQCAYCPx62SbadBYBEIFf8KbIBMUx+IoxlrVNYKwzmxZxOn/rh6RMxD + zgWHbt+e7bBpWOt8/YnLVFh/+PZUJ53ODnVFW1aSSaHRR7NCUOIpcHheZgQZmKIyRJS+KBBogYUcK1aW + Gpct3bBs6foVpVX0Uc2SG9MZ9IWVHxCg1Hhafj32C6eKEKf3+vg7GWnz9L79hN9Fq9FlkdwQCcxxQ3qP + 84TW3ozAJv+tfvFeF1ohmEfBXIPUwu5t0GcfKSBtC+LzPzvzsm1YcivhOofz2B7pp3WkkoYNn+soArss + sa6vliLF6WAiHMwymGwWqHP+oJeQTa4YSwVGTLDSKFgPF+aCiaFMpqPP90XDPMaEFtoUldUqERGuliRx + Jft56ITs/cUpTe1DfS5YZIeyXIZF0xy5vFMa4TBHEC1AICLFqJ0IGnDzlDFzbQNCDNVm1FwbFR0TMqaD + FjpvWbvRTS3ESoRCUHMEqQVBQU2NkL4o2AMCIRCkYrvzjquo1SgEocNQt9HMfNZ159PhpKrjS2AYOHfP + Pdfed+/1gnwP3PDggzc99PDNDz988yOP3PL8R2+hNOQ2D3vooZue98ANPIzjuc+97u67r6F2BETvv+96 + WqkUndSFQCw/hZ9Fj9Sw8AhFoRuzYcZmbt2J0B7YE2e4qaEDe7ce2r8dW4CtW6cO7N86hdZQs+y3KxAS + QTyrSkorCtWLTrkz0iBVfaE2SJU+2gI112rBsdF+xm/cDuV7kAwqFia6l3R/wwlAT7tcbreK0GQzFsPL + HHH7wtz05Ih8Sj5XTRSM3FGR68QwJmMs56ExS6tPbLgDX9RO8uJQMBqwpdeRO1RwJ1cfA3j08kND/Ww6 + ZW+aUbjdXyZ4cPvFW6scTHSEiYzKqkDWHzq/PH8sCCPVQBcZSJdoExDOJUuOL0TOafdKMW11RQap0Eep + CM1WBiwUOBT807VuCQ7JzA4tfQmtIUIL+qIxpEn19Q0YdJXIilD1IezT0sqNpVWdpdXlE675z9gDfnCw + VHiJ/CD+EuDBSf7EYIF+0r8oQLRi6fJVy4JFgIHiSf6s4/8QexLOWS2di4/1iaDCYU2+TFZTcrbyPNKa + 0KmAF4iLMGUCNDpx1JCPiwc0iuCnm76YMuFbwkLDZBEpbigKQ480NEtTW7XQKRWaTBUXvKoXWmMoaIzz + fC2oPjJeDq7W9KXITWBCg7SLPlVHW0vrpmbJrw/DwpQ+41gYmqWxI5rTSEQHNUE+VtUpbKNnxnrKHS6Z + iKVhZitqrjGWPmi3TeVtWOh5hMFoVP21+3vax/o6sBaTEAaMp5HQYUhNt3C0FxRU4aC0Rt1NjYoQ4gkj + N4NAddCehSOKcbbYZJ+5AyCEMoNGAmoojFDaodddey7QCPmFYo4q8J67r33e824E/PgI1IF8jz5662OP + 3fbCF97B8ZKXPPctb3niySefZ5++4LHbFRSfwyMffN6NoCZwSOP09tuupF96002X0Cm99rrzmDtqXQgr + 9aBK73cfPUt6pDB3TFxoyRVmwCb1H2oKzbUnPYoyl3r3skuPXXrJUUlrGsZrpseKwl1oCofLaCsx3LHu + qBWFmQ13DGbSt10cDNy7gNouWJ9nab2FolCTmHxMmDCHfV4INQaZ6WUXnXto307OB7eo5Ruhm9BBNeKo + MUjDxquGAVvgNjtxxnukhRG49Utz10VMYrLWondH48Q9xJzpV3OaenOqssu2UBemo0GbDjoJwNYEnw6q + wkoqQp5Kkw6TijCj3aVDwbQ16vvyjDgTy8QcFoYeF/RRpBR0RxULS9jNkE2hCazsblAMLlnXSfSSHs2l + hvXBdCbNLFRvNgXCDaUVG0srWqQu/P/TP+s+W1FlN07wr64ERX9twxoadSePZAKES5Y3LFtJxtaJfkA1 + mJ2gSLWXIeeB2qIZ5nEOWnmXlIOhjoxnSkgilAGi3mUja8I9STAlKMFPqNiXz5k7xH591g61KrC3XJ4a + HYUZpJ/mdIQFIEyn6DWx0MnZka4W2jVJQn30F42XcUqTSa/5dFFIVIPKEVWCaKIgDP2ljJuQTx+Evkdi + EuSFahFhRiLNU0YhOliz1PWCZpZmXbWxsf7rr73o5mddOTM5qiYyMiAkcTBLn9Dou2iurctxmwRNhNB5 + JIMmIozRu11WDmro4MxgN3YqACFC8gmokkM9czMj9AkFDsdgyvRL0KC2RpHiASFGkAFXQBezwMY+DeNQ + ykHakuedu0/Ff0ep0qjVnnXdec+58RIhv9xy2e23X0EXlIanQODDz3n+8299wQtuf/zxO1/0xN3g38te + eu/LXnbfU08++La3veQ1r3nkZS+796UvvfclL37uE0/c9fgL7+RgfPjIwzfzvcCh9UulU/qcS8FCsBYs + pAZFm5jVhUcgzkh4hck5aJPymm1SuFkc18SS2+LsOQBIPhU/cZJ7MSAdCZrC7SM908xK1WgmTgoFCK0v + Gv3VIjtGgbBgJRPJorW6o8Ka0d1P7QBC2Sfx1W4sFzpaLBrCWFfMKdAC0lT37kKQGLoZd6SP5pIo1Pkv + UGZUTOUuaz4RT7EwGRlYWyVTUHhR6Ndd4YbZnyo6FqeDciFDEY95TAp7NXQUrrCKguOidsLnLLEQTJEv + 1H/epqoJgb74WfuL0q8kDmraI8U7ho9LV9SzkreW15XH6zf0opFYtr6zfi1tzxZyKqQLamlN3iaVspKi + sLm0YpMcoOZ/7j9+KSKKmGxBwuzv6zlt+xiep1zumpwcZW9z8r8RqAGeNa/esJptxQ+sj+qvJ/0Rx/9p + PNJmynxvd0f7mQf2dba3e/u0VjkYuDNs+Ay3DDSRq3d3dHBPbMrbpiz9x04qLQfDlNv2dzhDlzs7NXJM + Nlx2p0FsoRD0i6RAHM2BYvA2zBmNOlmG+jV4BIfuaFAQBsJ3znp/Y1vLJts1u6eMhW4FRQAA//RJREFU + S6+KSokc8gXL42oFfcIdtZ17VgvqilaUT5iSzOCQXT+Jr0aT2bJ54smXP/zGVz9BggIcQsHI6FRiN/wj + CzEL9NaFaSpIrQJD6K71QgNHhhuIxDV9F17Mzol+mqI7Rshq7x5TQ7VhdaYeQVAPZVSzdm1ASEfRWqPo + 0AsEGbHMVqXEhRcdoviDEQMyIXugHXrH7VfdfaeQX0AvMOyhhwQCqfZe/KK7Qb6Xv/z+V77yAfDv1a96 + +DWvfuS1r330ta955LWvefSNb3jhu97xsre86YmnXvngy192H6DI44HD5z//NrqmPA9jQuaLDA4pEKGY + wiZlEincGe2RUhcG4oySSEFojE9BRIsFlrSmzaKmsDh7fkEMVC1nWDQVDEphjY5V9oxXoI9uHhE26VB/ + F61RKwfdgDu6bwcg9NAJ7LZTZ9GwX/HYSP2bBqugJInQuaOhQ8CZoGWibZ7ysooAigmb1JKfi+7bajQT + XQCTToad2NUVYZVeQoijbrSWEEcDE80QMb8NFe9Dc7FQgncAQiGR+qHXu5eD6VUft8LBcNjlE/npoCkr + 0h12WH9k2Uny4Jw7s2gtGPby2gmTBy0pWTY9g0Cp7fBaW1da0wHzZUlz38a+ia6R6dWtvXUaOlFavdGw + ENZMyO9FWSFWpdSLfGkTmYUnjxo/kEfyPiESKHd3vvRFDz30vDvhNp3ej+FPhdHX0FDfcQouFlg27s3r + N7Cr8Z/Cn2nN8tUAIUv96f3ok/wuTgbOruO8vAISW7N1+ZJl8+PTF5x1FPuK9AcZziWHfCpd+OZNODrZ + hFkQKxSA4SSqRZARaExHg7RKjOUVqV9hf2f4Z7NBb4ykiOhF4SIVYSF6SeUTwQtfrbcDfSbYRMVJYTY7 + tCuf65b4p8G+CqMI6rl0Rhj8RRPVoHEQUtcYc1Pz+o/1C6kWK52DX0p/j/jngoo0kj7I6l0+weIIFk5O + Dt17zw3Pf+TObQvTtEarlIJJR651A4T766+75MgZu5XKnwNCMUlRAQCMD50OdqKcQycgQe3YqZi/tgwI + Q/SuaCdi6Lxo0jeHZAnz1Gb2Rr4EXVAMz0AdM07D/4VaELUf0zuoMcKLuf1KKQTv1UJQUPA2ijyw7c1v + evxNb3wh4Pe61z3/9W94wRvf+MI3v/nxt7zlRRxve+uLP/3Jd37jdz7zhc994K1vefGrX/3wq5566JWv + eAA4fNGL7gZEFRFvvU+pNBBtbr35MsQVTCIFCy89gpqCV6Uk0t1YuzG8PPNMAWnqQkJ9tUFqsYUe4TtA + 71eEkhpkD2UGM4F5uqPjld2jYrKzfW5kemIAIPS5YHDnUXZMaiWzmKFaDCNc39bS3NG6CflgFFHEolBF + FM4jjbThrFjUHVLQ20RNYT6JIgwIc/GEUUoYuM2uoLDuqFkmxZTNvK1MElKWDQjVmMl7Kn5xJfvONIbC + bIHD8L5qQFikzDgcRvALjIE8FqbUUG+E+vwv7MhtgVLpsBg6Ogo6791bWYUbCK3r6hkNrsRcW+1mZC5Y + t4rEwY6mruHR+R1do3PLN/WLubaGEdIjFbyUkAr82NR6zWaEHCK0P2kgXMwn7CRh4DgPk07jyhXbFubw + kn46z3b8ko76ATh5/9ve8MTD9w/0VPzBoIlVRE/nR5/M90p3sVaMRuFlFyrFZfVLmxrWIBOy88C6pjGk + MFSBdqcAIeRitcy2B8splpw+sSla6EWkBaJl7aJ1ESF/QhkN2onkAggjgeKAUDsnuQspfipXYK0w3oLj + WqIjDJp6v5jNU4YVYWZmbHp6zDwYI3c0sxvVJSMTTrhIK42hT4FQI5Pw/3ErtdDU8pQJCV2KWRMZiVQW + O5OUZWsiiyPL6+zMGHUhyy64GDuioR2qc6lmISuO9sPsp+0JaxEn6GCuTfqgqtzo4yWqCbHYnhyuzI/0 + WvouwzCRzTEPE5oM00EPHRQFoTVF0eFZ0K4OCKf37J5Dz474HeABZsAebihB5gjlIEUhBFGILXffdQ0o + CB0GFgww9tKXPBcUfN1rHn3H214K5r3pTY+/9a0vfvvbX/LOd77s3e96xXve/UqOd7/7lZ/52ff+2Z/8 + 8ld/+ePvftfL3/TGx9/whhdQJj71lFSHL3/5fW98wwte8pJ7QFbqQopCmxc+5zmXMoDk5/IaTFmoxJmd + FmdI5xZeq9uQhmwKkxVqUShB9moaQIMUoxmhzICFI2U+biXpfqS3v7czZYrSbRbhoKkG2zJbNecryZhQ + Te+svy1/NQKzcFxr3ciNRawSlEoKJSpWilFcWA2BjUygU0JWFswrCfUyt05Yo5mCIu8pnwXWkyoh0RJJ + QqG3RvN0s7CndDWh6pRESGG4WCCvVe9fq2aExb5oOh/xBmnVuhHKQdtwJ91RJRzoXerrZkz1RYEvbv3D + QqhSClbFVXX1NDxJooAmqhyZhg3L1nWuau1f2txHdVi3uqPU0FK3iingRp0XYs9tXjNGltHvMiw84T/7 + yUpp/YGjRZx0nfBFnfIDervK737Dq//jP/7hFz77yemR8eOjZvrs/NbwjE/jdzc1gm1zCi/XUS12O7MH + BACr9VYHeItWfBH/cqdOmC8mOsKYQRFOsqQozEGgnaDexLDbSVHomz6HQLkq7Eqo2TmpFlGEaXyWheZX + Y2TNhLqQC7hgrhYIpTYX6e3twnrKL/5YFCoWmqdMQUSY1Yiy4hT8taMhVtoLTSu/XNyg9ULTj4nCLDPa + 1hpibWQesraGRdYKRICQUSItUJZm1mLKlBiYIB3RifHBhS1TlUoHt/kIUjILHB/oXhjuofsHKwRPNRqA + pO/iLCp9UffX1sQlBUI1114QKxmmg1i34KaGcQxiQUIkKAdpSGKcpgSZc7QpehGjQfqWVGwPPngjnJcX + v/iet771RfQ8X/Wqh97w+he85c1PvP1tL3nXu17+nvc8+b73vur9P/qaD3zgtR/84Os/9MHXf+ADr/vw + h9/w6U+986MfeeOPvOfJd73z5SDlm9/8xOtf/xjVIVQasPDxx+969JFbIN2gO4SJeuutl9N0fflL72dq + iHIfLMRxhqJQ1BSHt1//rAsffN5z8AGXoGBnzeiwUHzXRGI/iF0A5a8l9/LmEEmxBXH9iNTKU/0dDA6n + JwepldPWqKkmKMF58zHdXjR3IiCiJtQrHNoNE8O4Q1BSDkIZjfp6TSVMfUfdX8bEFZm/jCIf6IjugsMa + 9d7Spx/DCcyPGBokJbhVdnW6t9PzXE5yng2EtpZmcuQ8mFaEaOvAkXHks9aLhvQWgbD2jDAOCAvXuHeG + Ehq590jTdaO4qlTDYUEymGJhTWg02oSG66ALWFmqW1VCZU8Mk5BFjS+KKIJIXtIHO0orW/SgIoxAqFal + wXctuyHB5ov+o6NM7MPJJO3ZU/C6T/7BNX8qdFy0KyePUiePh12t7ffdcssnP/gj9z3n5vb1rfWlkwV1 + 3oFKubuQLVX9c6XAV0tP/xJEFXQz2GdbJ9YQ7oQvmMeYEKeAng53YASrvfJUC8TRzGUmO5n0ceZk62Vi + xNpMRGH4Z/cnPf0U/Ox2uEf179LKSCvCeKlkuJhiYTaBCEETaQBFQVYo+9a8caJe8EnuREFQaGuE4F+1 + 6XZk0IRs+sTaKiHIRLGEjAZDRZgqCF0+H1dAZ8oI4FVXDMmimakJKTgMCJ21SEfUg5YMC1m7jx3Zf93V + F1HqBSAcrkyN9UONgSCzmwEh4vGRHpQDYIAccEZ0YGY0GcudDxWhKuhJO0I4aPm6pANC0WQmh6odL9Cr + rjpGTXaDmsUIQfSBG8AqUJB+JhNBkIxi7g2vf4xa8J3vfPmP/MiT7//RV4N8H/nIGz/6Y2/68R9/68c/ + /jY5fvxtH/vYWz76kTcBhx/84OvASB75rne+jNqRDipUmle84oGXvPieF77gdugzPP+991xHXXj3XdfC + JkWtiIQRSM6KwiM7r7vu/Fuecxl1ofhxazaFpNhLboaYrpEkBRCCgqavl5wNxqWDXZLNBJl2qGu2v2N2 + tPfo4d1bt0wFyYQyj9htUDofOXMP90dDGUmu1wbpBka8GjqR0Wf8jxVCerEEatlQ6enAns0ilwvu2yKl + WN+EATet1DBUZlioYYQDAz0QR9OQXqsI6SWMDPQPVHrAyEYpDVMsbODHYTFKu8Jboz4FkEeqcL4wJnQN + rghwFSZVjGQXlyFiLv6z4IAfiaM+IMwiCe0yF+JM1REHJVkcTVoRFrbXus7Y/ruwC4+7e/9vrpXlVWC6 + 6VcsZBmvEw9S4cJog1QSmjSegiKvDmnEik11K1rqKApXUxQqiVRKQCkEtRbMSsNFV2Z+JlQL2E4nCUvU + D5hqUrOfcK1f7AEs7KAgW5DTfobjfCMI3d3aMdk/QjQXcFszJbjmtyPnhhBceBPEl2FdQDgFufqNpEKv + w+o1/OMPjR2SBTfbX0+pX6s4A6qqw9wdPFJmcQlk+o+252GkTf8/aSFUO44q7iWPsD2Xg7F9atjHjxK5 + 3moJkubaYsPozYvkhA4Tb7uHi4FLF/VuSqE2OlnKsa49KVwmJuAEboOj1plxZb2RZbIrNqoJM+6o7H9N + Wa9+iW69GB23nVOQBlBEBmlmrpZLX6qdOxEttpOOaA2j7aAUzAy1raumH91NBuRTTb2gYLbOWkXiVjKC + iFqysHbPTI9unhunFlS3zFbKvjn4L7ioDAsQbhsp46iCx5gUQ2olAypI+q5G74IZ27eLDk8SBxfEUA27 + FgNC+o2Cgufu1zSJw3BV0Eugc6dLiVKCWg11PIXaC14guggqude89lFGg1R4lIA/CgR+6A0f/eibPvHx + t3/yk+/8yZ9890//9Hs/+5n3/+zP/ig3fuqnfuQnP/WuT/7EO8HFH/uxN3/oQ6//0fe9mpYpReSb3hSw + 8BUvvf8VL3nghc+/g5/CGBISKYY1SDWwtsGPlKKQV8XYUiaFZzIpXBC7GTILRfIxd87Z+w8f2s6vZjbc + CoQyIJT8ekakjEsHZGi6laJwuGt+oHNmuGfnwvTYSG/UDobAeoBw9655uLWmUfGQ+ugvI/RdJ9F4m9Ql + oWx34H/293Vzj7cEEvmETAGtO2qUUXCRdCayI0i952lTWrIPra1STFqjqSmuiAstWTM4JcXz3E9+x0LL + JjO+KOIFfmi5u4Mz3wyb8p6FGV8maY1Go9FaxFFKkyC5l81sTdZoGAc6KBboBd5qSvbZGRzaHj0uO2Ht + 4lPrOOX6XfJJUTZGKr3SR01NYZM/P6j8FA5XMyaEMkNdCC5yoJoQvAz0GaGPHtc12qy60nWalbBJFvca + DmS8akxJWP7s8RubN8ACZYzDG8/vc5LYZvwP3u1NGwkfOX2fM1v0M6V6/PEnj3/Hf8GWKQHIhVIYnNPA + qeN8l/XBF90E6Pss87mGBn+7UgjU3yiq6f2GPF04OVLwMxTko6IFJFIBV7mcuK2EFzU6kkh6Tjhtkixn + E0O2AVl+Rrqpbo3GHohMtun1QbnWxmi2SUwVFOmkMF8XEjG4QixFE6aMD/B9QGhXb+IUFZCvWkRhcBhJ + BIFfF4kGrqMIVjLaFM0xFHxJMr5fwhcVTbSRZZwEmNaFqXxCW6BIsEG7ZhgWsZjQIVPiHZNX0AcUpE0n + TJkAhKKdkKgEyV1qHRjoxjgbj2kKAyqenaNlQpe2jlYmgcBYDobQQemIDtE2RDsIKeaKy88m4chpMvvQ + Dh4UIKT3CNhQfuEgQykGexOODEM7mqIoJUDBxx67/UVP3PWKl98PL4aJIChICQj+UfBR+X3qU+8C9gC/ + n/vsB7785R//5V/65M9/6ce+8IWPfP7zH/7sZz/wmc+8/2d++r08BjikaqR3+p73CBZSVr7m1Q+/7lXP + f8OTj73k8Xv4Kffeez3EVPHshrN6HZzVY5SnvKqLLjx89VXnQhnVbIqtEEepCLnx1CsffuTh25gUYjED + g1SSKCgHR4Uui5MAWDgy0M3QdGFYhCWEckz0dfSVW3uQnehOQuCwW6T0DGVhHnlsrwkqJDO5q2Wgv0yp + Z2rCCIH6N5XAEBURxnTJQiShkYcxIx0Z6du+bY6tjLv0ib9MPrC+4OcX2qFrhMxVmBGadiI2+WtTRmtV + hOGSYZNKQRIh0CaFYYupY8KoXEq6ozUHGVk7VJJiGuTbFomhsP2r88lT1owuJTnVoCX0xrrQdVwOjbrd + X76caCuvIqrg0FRiWhSK18zKAISqtdfkXkvr1WPl+jo6pas3LlnT1rC2d8mySmlJR2lZc2kZrJloOrMs + lw606DJe7urYvWMbBQ17lK1Tc5WOruPjBK9xeKB/88wUqnYOR8eThEOMtXp7JDP9ZB6vq3ERaJs3rO8r + lx2oTuZ5jv8YjY5sZKcTkE+F6idZK5/8TwckKDTTNmyCheFpDA6FPlxjshxmrPG8qed6AP/4Tv4KZx3e + Pz87bV1Q3W1ZgyI0SAFgDKjFpzAo6FN/taLXmokCzQs0uTZq6ZAiD9u2n3BRdVIY8s/sskwo3eGiTRWE + yW3b9magWOCUu5TC+DLkTlg5yEfmMT0dnV0d7aKaCtm8hQzCQGfIPGUiECY23BbDm3dWozUaAngzINTB + UiafT221ExG98RjhxbT1KbnD12jTvZ15xu7n3vnsmUnSgdrnBrsQTkgU7WjPJBUhuUvETZh8cDz4i5qt + GlmD+/cvEPIX5IN7NouI/sAW6YselaxBHM6sHLz++vOfc9MlwpG5+xr6os9/9FZkgmgkXvWqhyG8oBGk + yQkQ/vjH3vITP/GOT3/6PUAdsAf4feXLH/+lX/rkV3/5U7+sxy/+wie+8uUf//kvfewLn/8Ij+GRn/jE + 2z/y0Te+//2vefe7XgmtlGcDC598xfNAWVqvuLJhVYNhNy1ZDaw499prziPjECfSa646B1IPL9WAkIoQ + LLzg/EPnnnOAipBy0ASFShlFRyitUfFZHUBVCYeomziO7cNdJBQSXEwqkyUUuqbe32HjkRqDVNzPu1rH + SXmsdDqzKUZPJLJ6+RPnmKKuKZSJXdvGyy8799abr2akhy2RnTDJ7NnUOJGrHH1kCm4yioVuh+u+SBnz + Kzvbo8u2neeGiKklr7NjChvKpPtSY0DoXLYEFKUdKhe4ckq9HNTUwlAasoywGFC3oIJLiOVGL4/Dwrix + NvBLKDO5JciHhdYVU+J6oSLMpj85wjwkRJJ7ATMDQnEWpTQkoSKWhlBGG9ZvRF/aO7ti+WCp1FNa0io6 + QgNCFPq1aIw11u3xkeF9O3eo3mRFW/MmprknXNx5dyz9x4oWW3dP+F32gAD3VY92VOCpDIf4ET2dXfhE + p5jE7cH+3smxEV7tSf7E4z+MH0cN1NpKHMnxar5Fqz2vRxWgrLar+c/OgBT8DNKs7osQKN9Oa5A5hZSY + ARe9QWrDyGwLZU1RSGbzc9Ptbbj8pdsx74OGExT74Pb2ljgmTE7leE57XcgNhqAklXLVLYlOS1oIZqxR + v6LcblQn/zIBTRlr3rqJ29WooMjqwoB/BopeF9oSkMIhnyaGxdkigtACIOxoba1OqDc1RSE0IMbwiggM + 00i4CVR7eaPtxGVUgTB6qonyLMmdKMKhRf+k9jETE4PbYMf0dHjukq3dmzeP79oxh1XKaF/H/FA3/qJ7 + JvvmCF3SDPpoqBYU9AzPPGUCf226o0qTEQgE/LBxoS8KMxN+pvRFLwcIz0HeTlkGewU+Jy5oWMNAE4Ud + w3SQCR+80A+8/7Wf+ol3fv4zH/zMz77/537ug1/60o+BeV/96k/+2q/99K//+s/+5m985rd+87N8/NrX + fvZXf/WnwMVf+IVP8Jif+7kP/PRP/cgnPvEO6sgfFSx8BVNGdBe0WxkWIsynKKQARVkIawaezm23XH7f + 3c9CwoGcg4IVrxkBwgMLWI/u2jnLL5KmMoGC9IHBfnYAMiOU/nDvDK3jsd7NaEtG5RAD7oEuDMqR1UON + 0VgJysHgUeAQaCiYHbFxndqNWjloR8qKSi1n7ayAhtPb2y3NgyildziUU0tPsHx3NHEcbVyFLhYL9mZK + yExKH5r5Nc1l7LRf17imuWkdfbh0g5hGTyTyiYw1E7mjWfyLsdiyq5JPEylh1t2J7R/aObZd9uEIdULi + JmOznbSrFG5bnymMZuINYbHmDSCrF724oOVWuYiF9vD6krivNZhkXrPs0RcKFtpRv3Jt04aONU19dXWV + Un2XVISmpkCYX1+Dz1h7gQYAnmb1k67v6c84ed0CqyLzF3rmfLsBITfosbW3tLLK8/KW6lbDmp+2BD8j + KGhPYnXPyT/h8d8uvsoTptG+i0Gjo6bDIZDEr88OgCuLUzFDvHirwMIyXJSzT/E03i50J8LwjwqSczpy + R3NAqBTRYLRt2z32Ohrhko0Nsuow1eRG4hm16ejIIJa76YWXNmp8J2t9Uf2Y2mTkKDOFSYmy6ZrYmNpY + xbqj6bISzGVUX2/J4E1NdmSyQncZpd+FJwg2ImzkaZFNTgwNDvRYjzQHh82BNRNcZmInLZIMtS700jB2 + St1KTeCwY9PAQHlwoGx0f8laqnTGaFnxlCFmD+cwYhYOTg/sGu/VMPqeYTUXtb6oKeglk2F2ZF5UEzFl + AjeZPXNUgY8+dNvdd157jmgH9yOipxxEyQcC0Zm8RcmiDzzwbAq1Fz1+FwxP6C1vftMTNEWZC0IE/fRP + vucLn/vwF7/wEemFfvVTX/vazwB+v/M7X/jGN770rW99+dvf/sq3vvnlb37j53/7tz//m7/52a/92k9T + IH755z/2uZ/7IINDqQs/8sb3ve9V73jHy2i00m5FUKFF4a2wZigK4cswoaQqvfH6C1E0ChCquP7wGaKs + p5AVu7XtWMxMRgWFpPUqFgprVOrCkQqyQsByC4qR0R7syKmbCeUYw1+mpx3p/fzmCd5bt6wLsnpxs2Mi + GNKvMosZ+qIhhkn5ovrXjFiYUYIDbRjxDMGEOhQUCc2GtchsmAtypGn1riOUzVaViCIWhQ1tmzZWOruw + zE7PWAuyyHqkMXHCAss44WmBEtEktJggJUwieeMVFC+lLN0sbDdzOWgSzBRI3bkrN3PZjjQZyxwNfaNU + T8yCwFPQisuVhlnKRAaNSVNUbup1biFN9TSZy+VOrv246Q+YGLAummvFqiDVj+ltyB9LV9rIMArnpTQM + mId8cMnaUv2muqW4yUTi6BKsVECKExh+nfzKfzqPZCJFbokv5cd/CmbG0J7xGyo8zCFHEOIHLwc8nd+z + 6nv4q3d3dyD/56Q0qHOc88cagOmn4R2SHYDyifhNk+owrRTDI+OM0JmiepJkXtsBDqOnTCqo9y+lfhCB + LBrIMovbjWZkmURNKLQYvcy4fjZu3AAIJd3R3LjCmTJpa1SdZTKOjFWEoRYMKwJmOoJ8GFxx5FN5ZVsN + ure0EJnaaOJ6O6K1R4aCulSFLpYMeGRFgywmRiHtGlBgPNKUTWqGW2YuY/RRk0wQSZ8pCNP0iViCsBAr + ZSNED7JAWzk4NICPdgWmjAQQVtqpachRnxrswlyUAeH2sZ4ZBUIJox8OZNHZGRFLAISS5I5qQsii5q89 + h1cZKvVLL5HMBzAGlQK0lKuvOue2W67A4cVoMujcEfmheadco2iDJkozU5qiH3r9xz/+9p/69Hs++9kP + gm0Ugr/xG58BAr/5zZ//7nd/6fd//6t/8Ae/+od/8Kt/8Ae/8vu//8vf/e4vgoi//fXPg5Rg4c///MeY + I9IjZbIIlZRhIY3W17/+BU8++SBFpxWFlKEUo9YdNdM1erbCl4mRFGY9yi/CryO+oyqrDyGFqAkNC0VB + gdtq38RIRfhEGtW7GfM5xoQ97VI3D+MS2GaudZifGRDC7QwxhPHPkXmtGcspSgmTitDs1EN3NN8bkBOg + p6dzbnZ8z+4tpAGvlaLQ4nkLzYbkZEvG1cEUMIh8VrlNoA0Oo9Ea0iCXEkr6RNoOyVeEeoE0CMUvZcqY + JCk1l0m91vySzMGhXsVmXqqJokWVcEoiZXEAAycnRkkzdZ6dTwdjkynw0iMWypRGD1mc6MD2lLv6+nqU + Mx/aWvn5T01iYOyWyUrJErlErEe1TepYCKHUPWVKS4FDZPXaNV3aVKqH3cnwaBH2hr6yHzRI1rHphzfB + 64evKFWdwvL69euwTvXyy/GAOujkSTc8MmvMPiPY9Yw+Cb9UUxNThGIysBX7Sr6SXrJrNx0m41bIm6Vp + 1zQ7S5LhX4TGXEc0jAYBQn6Q9TRsRya9i9gu9bM5tv5D+zRPFnWyTDY2CGRr3VpyFYFDevnpBJGTPfO8 + FzJ3OiCMPdIcTaZGUZjJp5w+qmFskmK6noFN9CwOdSGVImUoa5NttzM5c3RfS6InQhfLuDMxm95YMwKN + dlSzZmIDTbFQyoigPAt80fy80CmjjoVmNAoQWq6stEY1Ua+v0kG00HQGhJV5/Da1EnLJhFaE0heNcRO5 + 3EGGbSgILRSXkguazFVXnQNZFHH9rbeKgp5wCYzQRDLx0nuZDlK6oZenHIT/+ZOfejfUULqdYBso+Lu/ + +8XvfOcXvve9X/njP/71P/uz3/rz73/9L/78t//8z3/7T//0N//4j7/2vd//KgUiSAkWMkHkuz7zsz8K + xRSuDc+GAANxIcpCZpB4liKloDsKEALGACGUGYSM115zDlBt8UxmPUpRaFgoPNgt457WC0U26AjJ6TW+ + zGD31BBSSzViHewc7+voZ0aI0ai+q0wBjYLkBBmjjKpDbPA6ECw09+1I+rU/YkzoDd1Rl8+n3VFOCR7Z + 31/GV4jn9IqQB6Om2LBOQgpDMKE1SHVMGI3WREdRqXQBz26xZu1Qy51QXZDlazprJo3kzYkoZAfZsAK2 + fyut3KZ11IppumeirA9U0mRIEVLSCqwZ27/iSt/fU8bJqSZZxrbJLBeQSDZsWB97pKGflE5frDVqfHW9 + HwiEykdNhlAbRj38Oz4VXOSjSuZ1Bx/ze2PJlINDLxTsRpgMiTF3aJPm0ifomiLAr+Mj9qRrFAVpMa4W + MWL1PxYyfh8WoGd08V/0yXj16ocinUzevOEhHPQZ7wlThvdjfHxoYnz45CHQfgzrLq1zvv2H8ys8/Z/i + uw7eByQrGugslJZYFFrVGPY+hSLS0TFpk1osSdhV8TxsDrVzn1Gz7AS1DWDa0w8nazy5feLNEIBcQy6t + vJYoh39+FflcIQwkYvJntHEKMwlnygSFU+S2WY5aznQ7+AhnCmKQjxWE9SUWiLCZVnHyDAxUct3RRE1f + GBBazVfg8sU1y+1GU1mhtkbBQh0LFQQVwZHS6sLQVXOvbeEiWtkBldT4MjF9wvPoBQt9TMgiDhDC+Bju + 6yCGHhrI3one7eN9WyiG4EyGvqjk0SMnUPmgiui3jFsMvQ0IESEgH0RET9YgY0JomRRelF8kztOQRM9H + QISWg7fhI4PgD/vQt7z5Re9+9yso4yjmGPXBjvnFX/wJsO13fvsL3/3OL/7hH/7q9//st/7yL3/3r//6 + W3/zN9/5Wz3+23/75l/+xe/82Z/9JtUhWEiblCHiL3zl45/73IdokPI8MG4oClHov+61z8d9Dds2giwA + YLEeveVyRpUAM6G+wCHcURkTBhFF4MuQUGgG3FYOGgoyI2Q3IGQZMxYQ4qh4kQOE6CgmCOk1IIwJ9Z0C + hFYRZsH0fHVsbIDWtFeEzhr1SWFeJJoFE1o2obkLWZ9Az6VVFkbIWQQEooSZGh9p2chpKrkTAQu18WBn + nXXpaWMcOrBzYnwoldXbZo6PsvHS2aE1/JOJeLgWpDRMNIWs2xDkQEG6pmbG5PRRb5P6MD4StmW1hCgX + J/dhRsjjuZePXZ1tm2cmaHume9xamkLdSUcjxoQvk1ms+diFnigTnvr6xvwhQKiLFEsfa6CouXwdS9a3 + Gm2wSKVQBgYYymhsmbZJw9RwlY4DMaMB9gT85EZAQfgytVgv/Gyq6lPFnqcPBop8wn/xaFx+pa5OcsW6 + TunFsDZrLfWDqmgjcmcjQwodOV90ZnbCn1pdaus98le2dyDFv6wxGmlHfjY4HNo9xuPKnysBCznFuVIM + BsMeK9mneeUXz9FwNsdzWk5ifjWsec7ad2B2YsKiDQuXgZR6kVqtNwJB1NspxhT1DoyYg4uWMGGNZlG9 + gepd4I5KgzRq6s10lGYXa4TzZVCxEnjG+uK8c9lKZ2EUojJ2qjrTRATLLHx2T6qdSImjNqfRcjDRUSRF + YWiNJtmE1hp1W5mkRyqhExw93R29PZ3ue8mY0Lgzmj4oFYwEEKZAOCBAeGBqYNtYL9qJ8ZFeaQlGEWF0 + k7G+qMRNGBAqWXQBBd6RI7uwVTvv/P3UhYzikO6BPfQkAUKsZFQ7eDuFGm6isFre8faXvu99r0Ydz4QP + Cigc0V/56k9+/bd+7tvf+jK9UApBYO/v/va7//AP3/sf/+OP/vl//PE//eMf/sPffw9Q/Ku/+gal4fe+ + 99VvffPnmSPCnQlF4U+8g0nhe9/7FN1RKDPYdmPJTSf2ec9jTHgdvVkgGWCGvHPZZZLZq2pCsZjhxYPl + 2hrNIpnoALvFGsRRU1BgIoOs3oCQGeG+6cHNIz0AIU7l0XE0MHI9g4I3nz8EApWjZ+2dnhr28OQECC02 + RCKU1Tw9Kw1T1oxTiDN/Ge2fc85QI/ZBgOlq4zF5KlbRbo1Ti4hEmhkJcVQAUgss/GV6u7va7TROS8Oc + E3fskaSaCrekSOHQpBTQa5gvSp8myu2FcCPFo0VnhyQKLlAz9+ASg26tfIDMSaoaCP0eJxM4t86rRoNJ + QG7JEmJT19ixZAkfQUTuWV4P9S4ILFjNGBZyFHXVSb80KspydELyekRnX1pWL1GFxibFkhRvUumC0nqM + EGg36leXlp6Y/vmMAFwy6fqBd1xLnR3tA/29Yjvwg/lnMkdOHX96zihWds3qW5RVtAj+FV+i451/wb/R + QC6933sFnCkURyr8D30D20nZv8Diik0GBcFQGnKmcnVxits91riIDf2wuaPrzgUyPjR87YUXb5udS+hh + AQ5TCMwPEnIMUu/D8HatAaFUv+92wEHqlJoFyxBdwC8li6Zq+sSGWBpHtqE2TnlNu1Hvi9pGu4KDVWdr + IUA1Q8EkdCKfJ+B8GYnqBYyzgILIMPRIXnQUpq/3zpvw9TslHtYF3ZFBqulLFsar0Ut0R3sZdFEREsY7 + UsZfbZ4w3pHe2clhVIPClNE8ek+coDUqAYSqo8+A8PA2WqP0G+k6UheiXn/29RfCVcEFG94m/Unri6Jw + +MD7XwMKQpNB9vDTP/We3/yNn/nKV378K1/5OBSY3/2dL/ze7/3Sn/zJb/zVX/3u3/7td//xn/7wX/7l + z/793/+G43//65//z//5p//4j3/wt3/zXSpFeqS/991fpEFKUcj3wjVFWSjd0fe9+h3veCmaQlipCPZl + TPjgTdSjACE2pxjckAkcvNbOFq81aY2iqQcId4m5DHwZ4456HpNp6pU4KnXhyGB5ckhcWHePVQ7ODc2P + VgZJJUzkE0GaosKJ2CMVEwOmsBSL3il1Qb3ViChbRob6xkYGurDfjtyZwuCw4L5tBWIoEzMGqfUVQrPd + uw7ejYjsrWI8rwQ5bYJDg7Vo2NI5Flb1S6uieiO/OjFpCpfSuqY169c22SQiFoVZOKgzui3KNG2HFjjh + CfIVQmlk6eAbtTqoziaE5UC7zmpBwM9vUyBqORhaWfxXogq0TVrHYGMcwnS5M9nuywPFfVs/WhkoB43A + JSUYMHXL6uuWIzFsFL6MNEXpwSZVYCwH65boQPGH848Ss6urg2lNNR484y9AJNvqXMKi+ow/udRhjFY1 + IDB78ip0P3m4r35kCnj2dvGBv7bsxjKaTHiUgaNUhNb6jJ/al50jmtw2FIwTwSWSpcm5xT2Of2kt6PUi + Q9yezk68cmxzV5iTg5/SDo0Ea7tguId9ZgUValtrLAeDcELr/mBy4fImw8JU/OQQmF7M1bL6VEGRKJGr + gwkp/sKMkMnl4GBlamrEsuKc3Z4CoYujDQhVXJ+MCdc34YDFQokjCQtf5MsEKQX6elk6zbJSZYU6LxSV + veURmgG31oVmtK38fvmoGUxazfT2tI30dQoQDnWBhSgEJoZ6JsgdVIMxGROO9UUgHFIfsrGdO2fRzuMv + yiEV4WEqwgCEGsB7lHLQTGQQttOfpEtJr/LJVz5PVBNveRE+2mjhv/j5D33n2z9PU5RpH9NBiDC0Pb// + /a+Dgv/6r3/5b//2V//n3/7yP/7jb//jP8DCv/63f/vL/wUW/sMf0C/9s+//1h9876twSn/9az+LmuLz + n/sQlBk82ABXxoQUnWRTCF/msdsffN5NVhHeeNMlFgV1aeTLWGv0kEoJ92C0Jo6j8GVkRliNhRpMWJGQ + 3uGehZEepJbYsdJMtmBCi+cNgsIYbmU59eLEHUJ6s2BkC+w1Hqn5IfBIMpZRvCQJTWlgYVTOeGxv0jaP + 7CojWGVYmERS5KrD2C8VqaupXUNHNLqvpSa6+TZpyKxnK+xXRxyuG/h5j9TSzRAsBBSsos+EsUU6LLQB + R77lk60AvhrEpqjUfCxVukRk3v3WhNK2E/+3pigQuKx+CVVgA2hUT6agrHCsRGQNcCfAJsseRSE4Bx31 + 0MHd83NTvBBdEvkSxWJDiaN+pcRQqAd3qX4F305/DAuuEoYnK9DXq6yQ5qejICUgn/JRykFaplSEyYyw + rbVl946t7Hyepl9oTexZv34teN7cHEzITh4nVIB4yrUdf7S56cmRoYHTwF3bhxR+C14F78ym5maBnAIK + 6kNhvsDxOaUWbvUb5a+WbRQ/jMXa77HTJ63zYtc01dbUZFUFRHQsdBR0RMxYXpnXdsoaDeof+VNkCoqs + O8rv3tHewkUInur1I7tAvWyESLZ9YXO5S/ZxQTWRxNMnTJmM3l1TDhxNpHIWM+m8xG8XFos0ntDtRkUd + uKHJwCkPgTmanzRFY2s0oqB8I5hnA0JqQfpmLjJL50lWQDjzgiW1r1c0bWGRzVusZY6juKwpEFoMk80I + EdGfsXlk93gvCrnxoW60Exo6IfIJAcKJmEEoQDhKFQUQkrskM0JpjYaK8AKrCDGUueZchBMQVe65+xrC + ArHDBghtQAgQGl/0kz/xDhxk6G1qX/Rz3/n2L/7xH/7aX/zl7/zbv/3Nf8i/f/73f/9vCoR/x8f/+3// + +l//9c//xz/9EQ3SP//zr9NBRVmBvhAQZcTImBBjUgFCsine9DhZhrByqEHJ+xW+zJ1XaWDvBddeew5t + 20suPnzVFceuuvxsVB+H8JeJIgpz36YonJ8X4qhlE6qgUIijYiwwUpkeqWC7AxDuxI51qHukHylhJ2+g + UXBDWr1hoXJnPKpQW9PZ1DbDQo0qDGmFkGhUWRFlFbLLoQFerS+Eo+Lz47htiruoUCAG4oxzSgtm3JqU + G1DQp4YpfaZmLWjnf7JHzI3YBfzcbjRJJRSEC+MJlxJaMGGW08sq1NHeyqs6Ti808uliB1SXqnxjyVFQ + GlRK0YMaI0EOAn5LgUP9KLeX1y9fxSF4JnwZJoV0NbldD9GBjbXu9i16wmgvtD1hvjTWYb3NgUYCjii+ + oytWc0gtaLlLoJ1ioaZVgI5N4R7uN36p/eO5t23Z/Nzbn4Ps2vRtNTODTqPA4tfW7lzGgeRJjIp7wmej + bKEQOaWsXXtO3maYuGwiTvgjCg/gVfV2l4d7Bwp2aODxKG7w5W5+nXXr1lYziQADemRpmah+14tC+PER + mpfR2dnGviFWhFbg+T8tEKWMA7BDRZhX3ng5WLjh5WDKYw6d0rQizBeFUmym53rc7oWBAf2K2Zlx7Kp5 + mI0TfP8o8j5twvgGMyVt006u0hFmebyRLxMMZcxHMS0HlSa+AqZAwWLGVw1XZdnmmnJQe1ApVaEhjSf0 + uAAWqUgZ9UIwhDFhGcoaWpBUN4OOmaxeWqZ2GBGfG7RDyWYaGelNykExfXZ9vUvsE75MKxqAkd6O/fOj + lxzYsicHhEFHCBAaX0bCeNERxtYoozVR0+/fIkB4plaE5+3X1uhZ4qx2w4XIJ2iN3v/ADVIRPl4Ewp/4 + xNsBQlQQv/Irn/761z8HTeZP/vjXmQL+y7/8xb//+z9SBf7H/wMR/54sFz7+v3//7//7f//FP//zn/zd + 3/7eX/zF7/zRH/3at7/1FcaEcE2/+MWP4ruG6ZqIKN79Coij6BQDcfSRm5UvI15riBolrRcgvOSMK684 + duXlxygKeeWRODorgfVbJ2j8psRRcdKZGw3FMRXhSM/CqFSEAOFsAMJQEapBAXsLtVuLEKgVYQECM69R + wT91XLPYeg+gcHpwtb7ew+vTRnquIyqCimDjV7AeDaNrxtV5cxk5gZUvqk4U4TwPN6KIKIoIk0sjU99K + IZhMH7IAJu5nk4qcSXtnweypijIqm1edI8iKZ3vZ48FhYrsBYjFfLOywY0WIipqNL08o40BFSIXDZcvr + liwtifhhdf3y1fVL8YNcaf3MOrAQgSBuarKoCjpakxNUA95C7jzYiStng1pv46xm0YPiuKbpg+Y4g3ZC + kU9sZeQerQXNj8b/0a2iScS+QV4V/3smNHn8jkxeqxf9mkVVTdCytf9U8ey0H89JMTk8OlTpr67tLDLe + K0IBh8VfGG8gIYKnUVv7LxtBz7YpYbNi3FH+MaHsbG0zbq09sopkbHdmRjMJZTTAoegu9Z9uDGX3E89U + LwetC5oxwfQysNZHdqBwwsJNm5/SaAWWjJbGxcM9cobHKtBu+Kc51qjO7WMLNJgFJx3RKgisgX+6Ulhs + TXBZ0+5oPoYpbzdaMForWMwI/Y+1j+YYYMY0kcBVWwoDZVSV1L4mipSwmTDeZss4DK1RxUIAj+WYjwaE + QsFQBj99UVmObXCVsEYtkrev0k5rlPV932Qfnim0Rsc1gEkdVcRxGxS01qjbyghZZse0zwjFYvTILkKO + qAiBGasIAZ5bbr0c7QRuZ9YafcUr7peKEAXhe5788IfeEIDQKsLf/vx3v/sLSCYYAf7d3/3e//znP6YX + +v8CEIKFfxeB8I9pnBoQSkX4m5+1ihDqKRUh7VZSnKwiJLNXKkKVEorRmioolCxz5KKLDp173n7MZY7E + 1miQT2wvyic0eZG6cMj8ZSDLEE01j7mMuKx100we6oORJMTRlC8TzdWSkN4qc5lomB562h69VLSYiX/6 + qhiKzHc7dBTUX00hUMU5buBQ5XybWqxlyno5mcPMu7DhK2wKk6ZoIkCCGiOXgFDT0nk8V1bzBsIU15u0 + yfmihoXqLBMG/LYDrkLBgIgZb06tLg3XeE6KELUjThtLTlkX4GOaj64EZLZlR5uZK5euXN20fuOqpmZ1 + 0JbyjiJP5oigndxD8Qc00gWlFmyU8k5LQJ0Crqpbvbx+3ZIla1fWY5jcsLZu1QaNm9hQRzw9XqM4jqrR + msgHsV7jSxwSyWQphs2yUArNTvV88V8Nu+rThpYfJoyd9ovMfnMazxoRefynMjis7qDad1EbtbVuEubq + 6VaE6U9PodHu5x72fNDK4lAwFIUpFnLbtm9WkXsXNN6200/OQK6BTvpB69fngVDO6cgjtdvhHkPBFAtN + cmuXih9cfk1rGtOQs7jxdK/RVETordHgBZVCYEKWWdR9uyp6AluZ4DWadEczx2034M725oHg7sKJ4BjJ + CgipD7RTD5EwJky1E6Yt46O1QxXqsGQLK6m210LuhM0FXU3vxA0tU8QGDI4M+GcHKzhAODbQtVkdt3eN + VRbGe6fEYxN/tV6zlTEUTOUT24ik3w4QSkUorVEly2ArI2p6bY1eY0CIudqdV9MafeSRm5944s4AhLRG + HQh/Rlqj6Oh/67d+7jvf/gXgDY0ENR8t0H/91+//+/+lNUpR+LeUhv/3//w37vmnf/pDbY3+Nip7RPdM + FgUIP/9hgBAFhQEhwUwAIWQZ3L2J/7UZIYpGJcucDU4jdrRgwsNnbA990Z0zLp/ASTU6yzAl1TxC0xGy + MwAIB7vljVIgnO4Xu1FljWa9UHm3Qwm4Ea9zDekVf5lQo2sXNDRCswBCbYEGtwQdB+rfujp9IjotaNsg + CurNkMGFE6nLmnXaM7vRMAXMvEbDSZswRf0Md08l6YWkkYQhg6IQTLi8r6c8NTYK48b2nVGtK0HZ3p4J + +Ld8GfvI9RvWUc/V5MVU08VtQyyrAUuEQmaKmt5YCotNEBGKMAwrFfaTtGy1L8qSuwTxXGtr66GDe4ZH + R5fQ3nQsBOoU7QQIhf/ZKCpAgFCanHrgI7NqRd3apQ0tKxtbG5euW11qbC6taS01tpbWtNWvK7f0TvQM + Tzc0d0kABbjIR77U2E54vWTTr24vNXQL72O4DxuirhSxKBXEvuQ/13jm6cPaM/EMJ1+SWsnFz6SlPjo6 + iHL8VH++42bWA43I551Px0KvBXMt08gV5XRkR0YgIlpy6ViqSEjpWIp+4YYAJBcGgzI+eh8jfyPDv4iF + xViylFqWa4FKRzSgY9oRzY0GYxivM2Vc+RSH/N4aLdpt24rAZtcUFDGPMIunNyWW65Q9gKmWrZop6INS + QmBv3RqkYCTvUCKYs5oWf55EKGti1EgEBX2OF+OqwRjuY13QLHpJJRMpFrpworcHQ5keWqk7tk6NDXbP + DgpTBtbolrHKxDCLfpgRAocWQwgcOhaKxdrWSWmN7p47sH/hzMM7qAhja/RwbI0Gc7UIhJI4Qaz8W97y + BII/ZH80MwEwnNUAM6Z93/rGz//B94Qs89//+tv/63+Bgn/zb//2F//3//zVv//fvwYFhTj6z3+CiAJl + xZ+hoPj9r37jd7/461/7GcgyVIRf+sJHII46WcYqQsKeHnroJsQbVIQmnyCDgmBCB8JUPgFrlF9KBoSb + kRKKxRqjQTqioiN0+QS+27pj2DHcvW2oa6q/c1B1hFYO2lBQysHgLJOE1JvjaGI06hVh9FfzhPqw3cnT + RIOOMO6QnBRj5jJqvR28RoOUkKuSU4uBMcqKFAiTAIosmND7onZ650WEorVPi0Kk9AkvRvam0hdduXzj + hvUM6TF4cwhMne4TjqjsYrFsW7e+SXs5UhQazom56OLRE3Fb7Nb8vmKkZv2+86bfuHzJspWyHZZnX2ET + QcXCeirU0ZEByBgyI6Q7algoobtNEfOsUgQO9VB0FH/tNeuWbFizctOqFRtXQaAvrWkpNbXXre0sre1e + vmlgYmHfwu4z1nUNGTQKBDZ0lRrKpUagkQj7cmlFRcoLMauLiUJacUBElcWQm/xOruo71WX9/weP50+l + 3psndhkFqFRzYz4AYp1+eqVwtXzCy/TCEyb4F24aadTrQk5xktzxm+YM4zwWk5c1YiWasEa9UpRvpHRM + Wxm+m0vxz8vBUCMqMUxbnWEKKAJBLj6VDOYKxIYG8km7O9uNpZY0RXMh2omUPjPazrWAIimARQGBPz7a + EMEV4VabGYcftrJ4I1ScHps0VkmXp2QcqLd1fmNqaJbL3t4usRtt2dBb6WLOZzp6OZQjY0uhsGb0hlms + AYpSMUSSPaDI8trZ3sJHpk3GQvQBoYcRmu9olBKqgqKrFZXh1NjQuccO7N09P1zpmB7oIHKWJX7zsJJl + yFsIXqMVICGVT8iMMNERoqZnQEiBpan0gSyDjtDSl6gIEVFAWtEk3nuxfVFbGZFPwPP89E++G8tQJBAI + IVDT/953f4kxIUXh//7Xv/yP//c//uV//em//K8/+9d/+T4f//mf/xhZ4d/89+9gNPNHf/S173znF9HU + Y8NtpqP4y3zsx94sjqNvfynE1KeefPDFL77nseff9uDzbryfPKY7ro6t0bNJq6c1ii24sEaTAAoBwq0T + sGFxjCOnXhPqxXc7RBJKAIUI6i27WAT1Q12TeUF9BoQaOmGHe41m/mqhIpShoE95NWCr6LsdK0IR1KcK + QgM/I4hGynGOGmM7ME4kmud8b8HkKG1duP7HwM8+rVLTF6T0VgtmInr9NPg3RQ5atctagSaTu2yNCs6i + gVtNf3/P/Pw0BvR5xngAy6ptdGiTuhwrtJeo/4C9FY31yxvql66MtxuFMqqP0JVoWYhVEs6LGmevaAIU + +a6AglYX0hdl4MdjVreW1pbr1nfUrV9fwrNzzca6po66dV2ldT2ldZUlzf1rOkdXd4wsae7Te3pKTT2l + 1ZXSykrdqkpdY29pVaXUUDkBWrG4k7pwwlbhDwfzfnijwvD7SP9Ttfkn5VCjQ8NTfo1VFWdBKVgghS7G + C61tO5SICUkGXkl1yI4vPywMJaJPB6vxzzDPpoMpTcauBxBPkGhNo8GeyP5EGpEDQnaUdEImRoe7O9vi + QCLthYbRoFomCrHbpfSFKYjN7TWeW0rAjRvWdbS2kAuBKwftR+MUBOfGpBA0gowBoaXH5TzVov2VoSP7 + d54KAZkVhSaOlqUtCOrNZFmIo6gmWCVzA8Ikrd7lg55E4e7b5KHnswljHmEUUVDH9Pd1DQ32IACgxUeu + EO0+pOJbRsqSwaRhhGFGONEvFmvuLDM/Jq1RmRHOkN4gebwunxCyzGHSjiR3QvN4RVB/77NoUSJmoF35 + 1FMPoiZ8+9tf+t73vuojH34j0UtGHJXu6G9+lrEfYnkKvr/+b9/8h7///b//+99HSs/xj//4h3//d7/3 + 3//7t5kOIjTEd/Qb3/yS9UWJqvidr//cl774EUJ9TVD/+tc99spXEsZ0t/lux4Tei4iqv+pKqQgR1J93 + HgEUe0Q+cWjrfuQTe+Z27BT5BAcJixCCMtNtb426oF4t1rYOdhWcZQIQdoXRoAcwaZtaprbSu45aTypC + U39uNIu1WgEUkRfq5aALJBwIs4ow7LryARTenDCOaHU5mHdZM75MVhEqFUWzqZPWqE8T+F7MdQHaxFYm + i7yu6s0oENposFYwb+yaLh0Z7j/ryP7+vjL3pJMR3yg7FlqNaEiYAaR8QjlICbiazmc9h2Kb3ODjMu2R + kqYkgUoNPEYrwtVLVq5Z0rBOsLBhHQkS9eAiVaB1R+WAGgr4dQJygnNruyj46jjWlkvre+rWV+o39NVt + 6AUO5VhfqVvP7d5SU29pda+AHx+bKnKsOREQiqDxJOidzywQ2jtYeE5ARpSZi1B4Ct9ykqzUZ/Zln/DZ + tJMuxWVNvLTmp3c+dQwpv1bWHFXM1G9PYS/9NBjTaJ/TR4MB6qy41zdKCkHboOmZ6prCXCvD8U+b/oE1 + mmwGw7RcwA/0S2aEmgsq3Jmg1WXwQCr96tVM7MOUQr8URvfh9nLgqqVVbEITykxRSs96AYyp376QRYU+ + 17CCjiXSeE1etL1zZNnlZPVh+sKkBMvEGgPCJIMCAsvoSD+CEJgvyAGjgjA4blvVWO5u37mwmdLNC8Sc + 9XZqsWYOzma9bc6WeR2hl4MyKYy2MqjpmW/hNYoebmawm9bo7nHkAT3Tarqdeo1OqsWaOG7PjVIRhmB6 + YY3OicXawa1UV6gRcGyRJEK8Rq889qzrzmMyRxLhPXdfCyDh84LbC54vYrH2liewWGOkJ93Rn34vQz46 + nBSFFHnYp6Em/NM/+Q0GgTBIUQ2Cf3z8u7/9zj/94/e+/+e/JbYy3/oyNjSUgyQUcnz9tz5DRSghve9+ + JbY1dF/RacDNQbPxgFms3XwZukbLqScfCmorXVyGmuY1Kr7bRBKqdkK8RtV3O2jqMd2WVMLe4RGyOHpG + h8p4jW6FLGPZvP2dwWs064uKUjOabiet0cx3W3xHrS9K7V7p7qCaDxbqtSrCgu92dFkrAKGXg4uTRRO3 + o6SN7yYymcuou8kb/uXFEqFHatN67JbQjhHsxSPpzkSLNTevSPoxyzGskIs3ynxrw6Fd9YAlEJuPIK0u + B60vGj7q+uL+olryiUYQnDP8MyxcU7+ySQ6r+VYqOkr/cxWN09WNayDQaF0IHOrB7TAmVMvQ5WtXbexu + H55t6h6lEBQg5OM6gLAXaOwYnhue29nQPgQQCgrKUakDC0E+isK1oKPBZO8JV+8f9gNYpYXPW9WNFGNx + tQirfkF4EeEwiT+qfQnkJkHHAmlP6R9/Nf7ep/QtJ/9gnpxhFuPqmt8SAC5vHGPjPBdI+DemQCgzaq1E + HUf5xZUVLSZz1in1iWDClAngVwWKaX8/d3sx2rRuDzNNoYwZxLhQLEl9bM61BvjYJeQVocGkBUfwatka + 4zLFrF5mG6p5co4M+CdOiGL4JA/OyAK6HZZN8Uqhquohxvw5ymjeYg1HZAT0vg13KUU6NaQXKqPBTYwG + 3UYyLHBWLJpxTB9Gya0ipUc7ERqkUUGR990ORqPeGqUpl7PbNil9lyaq60EYkxyVdirCYTXdFiAc6yGM + KaRPoCLXVF5hjaqOcHbGBPWjAAawQVEIhAAkmG4DKkQ6CHE0dkdVQRGIo6KpF3MZDSN86iE075huv/9H + X4Pp9qc++S5c1r70xY9S3jHzEyz81leo+SDOUPxht4bvKDXiX/3l7/7D33/3T//k1+HIoLXAiQYlPvPF + n/2Z92G6TXFpSUxvfOMLRET4skAZlUjCO6+++RYFwqvPoVQFCNVfjb7odgvmhTLKLxIs1tRZZnZmmJx6 + c1mz7ihGa2wLxoflndmOfGK0vDCkXqPiLCP25SaZUL6o5fGGYHojy4TSXLvWPuItd7VPjgz39XRbXzSE + 1DfjYy1W1vylJsYH+ZjXC5oDn2cwJQNCNRqtjqdPisLQwy+wRlMTmTAj1KIwegrmBoQeQGGXEohuIfVR + PpiF1KcDQi482JuROOpNUTeUybijLpxIY9es7HPqXKE7mjaZ4s7bXLYblywVqItw2FjfsKa+YW29VH5N + dQ1goUgARVCoZshLltIpXQUE6gMMC9fWLVkj2gnGhMvI3d7U1F5ZvqFMaVha017X1C5AuK6XcrAysTA6 + v2tFy6AAIWgXsdBqRIVGqRTlsH8sMwyQnnEYOI1W4WIF03Eghy0+ZTt5DvYYqR2F+VmEzBPSXgwwTh7b + TumR9uTHf0NiwSfgF588vGpwDmRpb21Z29QUa0QxJac40nlk1kHl1ARgvN/uI0OD1aoBYaCGWr9UoGsJ + 5GntfXjAdHTRrVUXZsSZeKmEy4mLEAo1zG8Fv2VaNBpRTT41Z1RusHvdpLDNl81NzSpF745y5Zt9qPd5 + juMsY/O/xJWxODWMbSjLIyxqJ1jpqAKbZGQYEsat/vM8AcJXZyZHaIpGrVg+j1BLBx0vycewsMYBoc8F + bS02mkyaSm9kGbHbVqNRiWGqdBDMO0keIeZhowqEBPNqa9SAUBQUAGHw3Y4xTEIcrXJZw26UVN6LD19x + xVkoKFAsWAzTc++5DrczhnbEMDHAe8PrYzY9MUw//lZ8YT772RBAQRgvWAjakUHx+7/3y9R/8GI4GB9+ + 9zu/8M1vfgl+KbUjqPnFL/0YsRVwZJgOUg5SYiLVD0ajms1LRSjaCWKYUNNff4EA4eUChOedux8gTBPq + t28HCCdCHqGg4NDkRDYjNO0E78b4cHluhDxC0RGSQQFxZqCvE/s0kdJHLIxwmAChZ/PmyDLr+fvCZLGu + KfsePnXiKOCHJHQKP7duMRGNjtuhNeoORIsZqjlx1KbanFf4kQ7094jWIGvmuyNSVE3EvqgpCKPLfB4I + ow2vzQgTk6bUqiI3j2DpYMMq1SAXfJaV7XCYhWwvVdYMj9J27MqMKZpL5BbRhW1/a7LtdP1hXcJNRi1G + 0UUss3IQIBQsrGtoUkRE/NAodwqDRvNWGRnKwyIK2g1yd7EPjZ7aIpxfzWiw3SrCOgaB0hftXd4ysHRj + v/VFpeyz7ijN0g29tEzDbUNH/vHamd/s3LrAX2ORekUcvPg1Tx7YeKRUBg0rTwktFvvpvMLjPI+u4Ceo + 5HgMkoaC5v2E0Fj9Q61Gq/06tUlpX5JaZ9Uq0fFV/UvQbtHfqeaokbN2bmqy3N2ZdlD5u9hvYViowkHd + DSTloH05jgZDpzT5NHRKFQWXSDbW8pWMDBIgzEkJ7f60QJQpggKb00f59Q8f2H3PnTf19/Xw4ByVdLmM + XalZaYSaX4zFW3sAhV3GDoSpU5R6GW+wolBWhCShnnva2zaddXj/YH9FqKRVDVKzlcG8OK8jlGBC262z + SA0NVWDH6O3VqadMJEFgJSMxT6YjTKaDAf/UdiR2QSMdX7J+DAujfD6mTzhl1DgyLXigEHRuwokQSdjT + zoI+3t9JlQMQUvHMjoSEegGAEMZU5MvQHaWK0kjCWcrBc8/ef/bRvYjzkBLi23LlFUcx9mQsZyIK1ITP + e+BGhnaM7pC6E58bkpje92rMsmmQgoU/91mJp/+lX/wJcI75329//XO4j+KjZgfOokAgnmq/+iufpo+K + iB4UtDDCD3/o9e/9kaeYO5pwAk8ZxPuQZQBdKKO33XoFHVoZEF51TESEDAjPRUS4x5kyVIQAIfSf+S3j + 0hTNDGWi0agyZYYGu+HWzg2XqZuRT2geYScJ9dFfLWcrEyOZtE2qCb0+r43yiUCWYTrIYzADonC0JELP + Iww5lJrKayNk996zDrndn5mLFhLqmQs2yVaMIfeW2amZqVHPCPPuaOKXK63+kCyWAGFqJSPXSMzsTC+c + gklTxlPTvSa7S9bn4siwKphXr+5gncGj1WktzxvXotAU9NFTLZsOxvmLoSMVIWS9aLe9pHHJ8lVLBAW1 + KKQ7iv5vJYp4LRCl8qNBqvPCgIIWNx8bpMIshVO6RsQVyC0QDjZuqmtqgyma1XkCgV72GfL1ydHcX2Km + yAFMbtSP42yoyl24SAMS1Q1JW6p5K8R+fe2Gky+YWHl5a07GPsbRIDT48ujA81AL5GWO2SNA2o42+Be1 + +43pM/HK4VkUIgDF4OAkvtefhwdLuaF5ygUQk99XTBqCHJNzjPNsMRQ84f3eKU0Hh7yZsf6L2JdAYIJ2 + ha86BHo71ErDtEDUTwPCWavDRfQB9rwHElzWks2gUstyQMg7gUXRju3zFHwuUbLSkI98dWKC8mWKi5lP + E3lTzgUjuaSlXmQHPTk5zDdygy95gzSuCMtRrWxfmIMoqxFugWgX1PSqo0DfaUwZ249LURhR0LBQl7CQ + FVAdOpEkEbqhqNd/6ygR0N0XxoEWXwC8DQ72sOzGolA4GhYPG6tDaY2SooB3GhA40I9qvlfX8TZmXaP9 + HSzuLPEs9Cz3aOotfsiAUIvCqKBQsxUJY1qYQE3ImPDMM3ZecPbBc87aS3eUhPrLLzsKJwV+5tVXn00p + xohO1IQSSSgZFHRHn3rqIXqYKOvf/a5X4JRNY5MYConn/cz76XZCIv3lX/okdjMgItlM1Ih8/LVf/SkI + NcAkNFFmigwFf/In3001SYQFz/DOd7zszW96nOkjdqYhoZ4B4QM3irnazZfdeONFvAxjyqCd0IR6KsKk + NYrj9lYS6nPTQcmmN8ftoZ7BwW6AkFYltmoQa6HXziAixFnNHLe75TCzHodAMxoNwhXJ6Q0jQ++Upm1S + 4c5Evky1vzatcnZOYrYQuVTc5k4LCMt7imbd0bQbQTsEEinnIUwuzkkBwhhGaLQvYUevbSwzSW5eb0Nx + 547mtBPGFw0KiqJhbxROeAxhsPk1FLQLs5rpXSB+Vw1HbBYYWqMhtzcuHdZeisNCbzvJPRELVy9Z2rB6 + zdpVTeuWNKyubwhTQMVCEHGdsWO05lsVuKMCgREIww0xkVHjGArKdXXoAtd2wZFxakxsfmotSAmo4Ffn + KMiNTX2l1r5SS39paKAPl9HjZzWwA4APjKGr/BIkND3T/UPendnpifnZmZqQdpyOIu1cCPSnBLcpCPHj + gKsTVpPhW1RED9rxQyOHJXsyXiRf4o2yu9LS+ZTK6LRI1W80dkwOd63+s/tP+M9nhClS2jYt/nPiTERH + pc9Ut0Z5o7jYqPN1U1hUE/p1Yj1SnVyWrEyUjmhEQWnDLF/GAEMVvkFKkXeBygaEToTjkSwKsF67utrE + ws2BMFkX8kKrCISJoIJibnCgh3Unyio0E64ppKRmggoLCoh59CktgqWQJ7GiMM0dZPnjTpZU54haJC/3 + 95Tbzz128IxDu1mOY11oQChHAELli9qAUON5McnsNHMZ3DJH+tpnB0Q+IeWO+G6TQysqcgupBxWYlkXH + USaFlko4CcdEQuoZEx5YCJQZmRRCmTlI+SXc0WeH7qiH1ENjoShE5EABhx2aYOGPvgY8s7qQmR9yCOAQ + 6zUQkeLPDkgx3MP9n/3sB37mZ95HRxQrGWpBRoPvetcr4MjQFH3ySUFBwggJPsTymzLUysFbnnPZA3ff + cMctV191xdkiIiR64sguBUJlymQzwgwIZToYgZB9g1SEop2QDKYgIuzrMBGhKQiDrVpuRhgUFLEojECY + FIheHbqOQmxFrS4M4hm5vXl6/MJjZ40M9oUSMJaGMaG+UdIr49Yq9RRN8gile58AoRghJZRRJcs0NhBq + uGFtUxJSX8yayEAxyieUfR16odZlSQjbmZeF02ScMlrgjnqnx8eE1fKJBPCqW6NhJQmdqKBgZv63Yumy + FZCIoL0JZZTpoE4BY1FIRagoKDED+M6skMqvCggxheFOcYdRNk1JdBQIJJQLqkQYAT8aoc2V0sZeMK+O + yi+g4EBp02CJ2WF7f6m9r9TWt2h3ruYXoBngsXGyyHHSz71h3bqbrrv6nDMOnxJDlZVdUiCehhUcu5hV + /BkSXLcB28lD1wl/xeM/lX/VbtiHWvViBq4J8mVAGEExGKoV+qLyqTmfxjlloRy0gaI3MWJ1WKwLeRj1 + VHtLi6nvC8hnF0zhsslzstO0s+jBLVtRLwRrJxG6sp5SjyWDZQKNMPzwhDgQmOXan5GZIqgWdRQ2JhQ+ + AvDGcsaXrDvqHVFTTcQYeu90ZSYyxpGhOAAULVk3b6smi2OCi1Ffr51Sio+Z6RFoqG63nZUghoVRSqg1 + isYwqQDc5oUAIcv6tIwJBQhJGmI+ZUCYYqGkEibxvAsLk+gNjDJjwYToKBAUQpkR7qjE8wp3lIKMaHjY + m1BXyKPA8EUTeu9/3WsepYxD8MB470ffJ2oKKryf+Il34qANHMKgARHJ3SVcggP8owoEAikEEV2gQcSk + DRSEdAMKMnQkeunlL78PlBX5oKQvPQvLb7EYffaFSOnvuOUqsPA5N15CXOLRY7vPPLIDl1H4rjjj7MJW + BrKMVIQWT28zQoJ5+0bHoq0M8fQD3VODksdrIsIJj6fXKhC/nprx9PL29rSDhc6XkbiJ2NDOxIWRSho8 + 83QD1MyhdgrDA71z0xPkBSrghcTKtCkK9ZSOfWbsnpCTtSeR5S4txpSxsMxG+GJ6bqczwpQ46j0S3zum + iRM2MqR/xuUDZGruYBIFGmeEBQWFXssiFLYr3fX1eSAMOOd3RlDMdUd1V23ba2Mw0CMFCzV3l9sYZFsJ + KHQYajsZE0IfXYpL5TKhzAgcAopZOWilIeVguKFOabipddStVVKMAqGUhoKFlbpNlbq23joAj8pPsJBe + 6FCpZbLUOlvqGC91DAgcntI/dvAFN+pT+vbFHkxX4ODO3RNDw6f0bLy3TasaF+Nh+lOx+vN3tIXekt8L + zdf0U630T2EU6vXfaWNnVQlocogU+XI14QlLQH+A/sapZN4MZWp2Sin0g01aT7mzr1IGnJKiMPRAbNpH + 4btYRWiXSqGjkndZ8z5MRh/VvWpo2tgVG0wxZEurykKlgCfmwitbN21E3KCY18hW2WiixqxjQaE7CmhF + /Mts1UytJTDJepSXDyKoj+uXU2OyJF7oEuVyu3bAPFtAAsrNazsKJ8KkkPW0o20T/PtuRI66jLr1mi2v + BRGh2Y1KAIWHMWXxvK34hNEdhQaJKsDi19EJjGo/ECAcJaTX+DJqtDYzQ1S9UGbyOgqJqsdrTbmj+yi8 + zH0b0YJSZi6BMoOOwhqkSCle/rL73//eV3/gfa+xqF6s0YjqxTVbRoY//lY6pXBBf/JT70JxT5nIwW3S + Kj7x8bcBgTzmA+9/LXNBcg2lFnz9Y4qC9yPPAAVh5cCRoRl7662XE0N4/fXk8Z7NK7n6qrPpjmICd9aR + nQC2l4M4plIUWu6EUEYVCKeUMspv7S6jvBszGMrIRqF7ngFhb0cfHnVKOMKyzimjJEcqR0l2GOw5aEEz + /+OempgXgybcblu4o8ogVa29B0+qr4K5DsmNPBaKOdHG9Vh6xi1XjjuazqpV6hqIXa6FtbjN1taNk5Mj + PD/szui7HbqjVa1RV9NnoUvxgpJw3Uqla252gmYsl6Ten1qM2iYVdwxImoEv4/gXZ/9Fx+10N5y0SbNm + UrqGsPIAHxMTI+Njw8sZ79VRgUCHQTW4Soq/IBME/1ZFvkzTstXrlzE+lGCKlWYfKkc2L5RaMCsT8Q5t + REGoA0JjhNrHjZVSW6XU0VvXSRe0X4rCjQP1rWMru3au6DxY17qz1DZT1zF5StDzg3owa2ulsxtZ9in9 + AJZ13n1DoOO0T4Hujes38JH2AM63z2w5y8+lCwhpowpfT+lXKT44rRStERo/FkSE1iS1BxQ7pama3vui + 0WQt1xvlPTHGCqd+VycxeN1muJqwv5KOh3pwy0WS745qORgqwmo4tDlE2p9xz/vUC9ivW5tqpNvbILdP + QuqZl6j+oZF9LjBmdHOr/HQQWODF2DIUC0GFQ08fFENkg0bri4YCMfhGRn6gQGMqps45bmtRCF8GY9JK + uXNqZKi/0p1Mm1RHmDBI00hCiwHK2a1ZKqEUhagJ28f6OuYHO3cOS11ItALcEMxlRFYfWqP9YINNCmGU + gBm4kVFFmY6CSSEWM8zeqAglqv68/VYUAj9GmWFWd8ftV9Egvf++66nYYM289U0vevMbH0dNgQQePGPO + h/UaA78PfuB1hDR99CNvQlwBI/THP/bWj33srT/20TeBf9wvEPjepygiMZGhoKQjysSRjigoiGafBGCw + 9u67rkW/CPqimkDFAW3n0kvR0R8879x9x47uwQeHl+qhE3RH9+3bQpuXnEV+KUFB0pcm5Tc1izVhzw5J + rxjPHWHK8OaQRNjb0VtuHx7sGRvtp73scUvWhZZSu9zmIgqhMpnEU7MmdNcS4wYj2oUZYbbjCd1RNxgq + zA6NOCOtdQ3qoliUijBRUMQZYSGGN6SjBF5MtJJhsA0Wwik1E4mgo4+loVwgcNt0pyibxSq70XRP2dXV + PjTQy6melzDZhWnPgDYX3+ksK8bpb97sKZSD+ULQ0ND+pXPBIPHip8D12yRkFAoSzeOFRCpAiI6QvAii + JJZSINataFDKjKCjcmF0Rti4sW5NSx10mFUb63DQtqao1ogKh3pDiKP4yyClV16M6SKapRwsdfaWOrQi + bOHj4PLOzZtGjmwcOntJy+FS675S505ZglliiMzlV31ai/d/3jdThNOz5a9Y8yXwN2EnIsXQcXORTvXl + s+xXerp538ADDBlO25eVF9a0upELJ+ReZZAW2qSxwnOoC4AX26Hh64vAXq6ATDgyWS/UAC9+lCzGRQjQ + NhW3jqjq6/N8Gb0/1xpNS0MuM1i7Gzasc/wrCArtanTw87rQasHsUjcrjSx6QtqerZSHG9YFizWFw8Rl + dJX4YJHJre1Qo8lUCyeMKZr6rmmnNFSH3vVSFHQszOzWUgYp6yZFYRn+vVrPiDuJatFCTn3AwlAX0hc1 + 4kYKhCGk16LqNZ53uJcxYaeMCcVfpsf9ZSR4IUgp+iYmB2gn7t0zj/2KpNULEE4Jd3TXHGXW2UfFrgUs + FGX9BQc18Ogok8Lrrjv/RmZ1t1xOXXi3JhSqrPAOeqS4wACEb3j9Y/BIaZPivkaU0o/8yFO0PZkdojUE + +Ti4gRkNQYbMFIFAlBKUkq977aNY1dAR5Xkee+w2ak2U+0g17rjjyptvvpQcqGuvFTcZ8JjylFpQvLaP + EEy/zctBXrmJCGNfNAIhGYQ6IzQgREwyLZG84sUqdtsDXUO9wpTp7+vGnUcGhNptNjV9HMoGx23P3VU4 + NB2hAGG0WJP6j20Nf03hi+qA0MEvddpzHYU6jrozu3YU4imUcmeqAgjNWcYsRi2MN6sOrf+Zt5URsWy0 + j5AHe7PE2yemR0rMRUOXJXhcxGB6uxh5GLwHlL4E2sxPTtPIKDR10umg39bmWVgTvDQsEGSUGuNriyue + aUpxP+MVSCd0nmg0SQZhnbBTpXFav8wngi6Z0HIQFBQsbCmtbpYoiWxkCIg2yZgQIIQskxMIqlJiU78w + Ylr5aDcG69pmV3TvW95xuNRysNR1sNS3X3j2LE8tLeIgd6pg8F/k8TIspCv3TFN4jv/b0c2Dpsju6TTe + BDs57BsB1P5yZaBcsVKVT9mU2VcT7migzDiJNEVHvlF+/SCrzyEfL5I/LmjNLiE/Fwyj63inN1HrIQ+j + pYFeaxpYO7PTJCaXT/iVYHajXgUaIsZryQaHS7lu21o2oahxiprICt19RvncLqL3XmjUV8hlz042Cicy + 4tyq1SshA/dXyjDRmaJI5EXTanbQ/NZxNVmFTp+lKkQSRiOPlLnnyTgeFJCGEUZ+fHCWSbgzWRBBmk6X + j+cVTSFNOdp0oeaI3VHrkYqvaaWTZTqs0cGGWyFQGI9hTEioELL67cjqR8tbR8RFZWSwe3BAuqMGhBzT + 08Pnn3/o8KHtWMyIsl5EFFO0Fs85tu/C8w9RacWQ3r3nn3cAV0+ImpbKRINU6kLrkd5z3fMeuIGMJDqZ + 8Dzf+uYXQfjEhtQZNBBKkUO84x0vZQRI/5PGKfXi2976YvAPVxpYNvL4Vz0MiIpY4gntiD70HPD1nnuu + RTh46y0wRU0ycbai4GFEHaaawFBGbNX2b8EcDou4MB2UMN4xz50QKf14HwJK+ZVVQTg2VJ4d6dkx1rMH + wwEGqANdg31I6YV2ZDRRHxB2dqrFaKQpWUWObp7C0epCP0wJapJQ/kD8pdxUNgXCnKA+WIyGDF7XEfq8 + sJBKnyZRGHvZFa6OiLafc7MkJ4taXUghCHRNDg/395R9WJiSy4QsE10p7OLSf5m/TJIGY5feCs7RsYEh + No0pEOavawe/FAWzEtBXjPz2Otd/sjUHzEOsywZAsFJsjpc3rG6s9HZvaN5Qhw0pbmomn3cR/ar1gnON + AoQCh6s31RGxpKVhqAgZExK3hMuaFoKmEaxr5tC5IIVgW18dh2DhSKl9utS5UGrfXWrfX+o6UKoclPLC + NvKnsaD/p3yL+NXFjuh/ygs4/g+tHhZaVzP9BzR42jAnxZpVq13FwTnFtK6qNWrf7wzS1GgNMwSsVYTK + W2iQ8nhRrGPI2Y4MP1iM5lujgSYa923yaXtby8zkONRQ7Tyn3FFrd4SPSXUY5oJxouCj9ZwtBVcdTR76 + rlznVgtaR9QLwWogzOaCDSvo1u7YOs9ri6qJDAsF/JRBI7vm1StZesrlDsAvpd75vFCHMcUjF0aRsN6T + olDduhO7UR8WFgJa03mhISKFyNGj+848skeAEHKpMDKq3bc1oVfctzeayp4RV3+lixgKELSvtx1ZPWNC + MZUeKdMdxXSNwRju2xllBneV8T5aiDt3zG5dmJTWKDEU2yYvvfjIO9/88tc99YKzj+3FrgWwwdKaSeF5 + 5x2AnHLZpUekLrzq7GdRF95w0a23ipoCLIQ7Qw33+AvvBMzwgmHI9+STDwJvxOpqjfgCAI+DSlGON74Q + mHzda5//2tc+wkQQq7aXvew+lIKPP34nHVFinkBBak2rBXU0KAp6MJhYKJFM0BRVFEQ+SHf03HP279+3 + hXJQQycm+EWy6eCUeMrwa/qAUKT00hctS0zVCHmE3eMqpTcVZmIrE9rODoQ+poWXZFDn/mqSpawOeZY+ + HxWEEjbicFjlrxZCm914gTNKQifUeju2GbwPH24UvGa0SyEHpy6uRiqlkBzBxGs7Nd0Wf4nm9esm2RF0 + dYpeOzRObKaezgi9LnQUdO1EZrdtyKdOv5Y7kR3567o4JoxFYQ4LfarifSblu+Q23ywmoDzKXp4R3zX0 + go3rNlb6+1atkXYoIkJVUGzQEEE+Mh1sDhUhKKh1oeAid3pp2LB+CYkT2hfFXE3IokIZFcmgVIRt/aUO + JYi2DJXaxhUI50rd20rlvaXy/lL54H9BKAkvibetmsAJAhSzMn6Qv0Eq4zuZn8PCThvvhMSZ+IDFpPkK + elVf9CrQXomXfgZXySgxVxRaucz56vcmpWF6aoYORjyj/dOiHsgMdRUIiwqKpC4sUmYoWdHwYWBvQBjn + grYVDbVg2g71WlDtZlZ0tLWMDQ/S/3R0tAap8wWsWaSsGRkTZvZUxTyKJJIwCAoz+qjRTdPDGTQundY4 + Uxn8mKtIIZgwXw6ymK6lLtm1a358nHAZBBXNPZ3tMAkDZUZdvnQWKD4mFkNhfFEzWrPVXEQUPW1E1dMd + DTEUuIgNdu/aNnNo//axsX7J6R0lkkmGZ5rbTmt0lLpw+9bp22648ouf/tCPvv3V5569TwLriSc8c6c7 + rmHmAhohK6Q+IxSQ0R00Fq0Lr0XkQCX36CM3oy9kaojEkKgm9A8IIeh5Mj587asffe2rH6FYBPyASb7E + AwBOJoIGgc9HpP+iuwj+ZS7Ic2pH9CJ+CiSdOBqUrImzj+2RAMLD2wHCG6+75O6brzvj0A5QELKo+ItK + 9BIxhDodVL6oaydkRDpUpi+6daQHR3L6xjMDXcN9HRi0AoT+7qmIQlujsTuaieijoUyaRKhAKA1t9DA4 + 7fEldVYr9kXpt0dbmWyH5PWfNiFESpiEERZ1hGl/PtJHpS6EPAVL2dukMaE3yIFkHC77vgCKtFgkc1dc + BuXQeWE2R4gN0tBu8a1nKqKPHRrZmi9WCC4yIKyuDhMmQTImBOqUKZoj0bC+yHRFVxHkE0jjg/u21YJy + aAm4prUeeOOjgR8f+ZRBoJhr68iQx2jcbmvXwI5dh/rGtza0DTWVx5dtGtCKEMkE4KflIGSZ9oFS61ip + bbLUpkDYOV8qby9Vdpd6953M8v7MP0arjcBzqfnsPMCq9WpQkbq6pvPKM/8yS1jtKIUngNIJcVE3Uqcz + ai38Runvx3Pi+sWWzx6TNEXtZoFHkwFkYWrogsK8xUwOC9PSUHdzuTPbpoMpVSzdLVaTReP1Fgiihm1p + cyahxkSyaNbMcTVh7sJOmXLqL6N2o8FlNA1sy5IovEeq8kFh0BhVvXpLLstWwELYN84jNWWFjn/Wr0Uz + zxDFaDL0YFkxI28wiSq0PCZ3XNMbpizsgk/fKsp6AJJicWpy+NiRAyNIBdtDLWgLt022jC9jOgpEFFP9 + HUQriK80wzAMSLdMAoTgH0Dosnrs1mZnhCyzeW5s65bJs8/cd8v1V1xx2TGyCeGeHDigWEhdeGwP9tZU + Y9Rk2JvBWwGiYo/0UmICrS5ksEdpiO/M4y+8Q7qdL5OZH1EVL3vpfa996tHXPvXIK14m4Ef9B1jiGvPC + F9xBL5QpIwTRB593U0zfveLm51wmKHjdeUITveIsCDLWFLUYXhMOwpG54NxDF513mDEnQAhHRsmi4rIt + qgmpBcN0MExGh3BWw2oHwx3tGIuzWuegWIwGy9YQRqhvYEKZyTluh+iJzGjUBoTyx+JPs3VhxqQyVh2G + wwiiwhF1izUqwiyYno3OcH9f66ZmCDKGhUrFCkDoPfng6uAtCj0nrWOBWML7GcgK7Vt0e4eIWZ4nhlEU + 7UaD42i+IlS70YCFrppIHUf1ys0E9U7zNslEgoIZFS4tBCNfRlYGHow7gCX3mSiLZRwuRVdXh+2b+QV5 + kfmJDFyDBrNbE1KM9kKlIly1oV6cYloxi6lvAvZa5eCGOKh1i32MAqSE60KfWb2ps39qz/5j/RPbsVVb + 3jJYDwSajwx9Udqh1ILt/XXto3XtU5SDdR2zpc7NCoTbSpVddX17n3n0kFL3ROM6HgAL6jhC+BNCDq9b + SLUEHJ/oZz2d31C8YqL1DLzK7m4M3U/Ny3sRzD5eLWho5x9ZbLfPzne3d7rpQQJ+XubVoIzm1IRivVZw + k7G5YPgXITArBL2/4Vu5mlWg08bSMaFuMwtH6mGRRWMrWLojsA8wCjn1mXyiCgjdgziPgoUYikhDCGuN + rT5qc5Xri1bJKuKwJzhmsfa1bmzm4AYQ2N2NpkLEhXnHtSSeUGkywXc0uI8KQVH0GF3tXR2t05PD27fO + Iro3EaFxOljBcdTEaEamXDGPAkkA3NHNg0KZMe7ouHFHRygH8R0VWb3EE1IUTksSBWNCU9bTIAVXkCJA + pQELGRYCPBBnqAvBQnqkTOzoWwJUcGekRyrcmcuo4TDFNjh83vNulKnhY7cBcvLxsdtf8NhtL3r87he/ + SPqfAn6P3fboo7fQBYUaCgTSC0UsiCQDveBtt17utSA9WMQSl1x6Bm5qoGBoip5J1sQ2qlVeHqpHRoNS + Dm6bFGe1AIShHOR3lOngqPiL4ikDX3RySKKpoMnQFyWVd5TQCfEXDUBoewiVEgZbGZsXqo4+yAedL2r8 + XqeMcptv5M/Bn8/b3QKEugFKpoMSVBkN1YLdGhFIhPZxp/dFc1uujKsVmhOyPwMCg3zCIDDUf3K7sUGJ + NrRKxXo+tD0yslgmLoyUGU+iCFTSFdJxsRkhvo8rqSGpFGs4q8UMphQIExGh5fRmrdHYFgp6YltA+Ckt + 7ACaJJTNgJAfxNUi6W86WNGENhOz+SG+a4QL1i+X6MF6a3U2rK9fvVGqQMW/eoFANIJdZO3Kx/WkDzIF + xGW7Q+EQ1UTnso39K1uHMNp2Q+0IhH11kEWFI0NTdEIKwa4tdV3zdd0LUg6Wd5R6dpb6numKkHeZNOTG + xtUp/NRc9QsAdhpFHvsVOgTGMfkh/KN9QQVwHPA+mdfAnx9ORy4GORZ5i1XGtNFbmzfRBaQuTdubOhRM + gbBYC8avS2WnJ5/8UzjMqQnj3q0AgbnOp/VLq2rB3A6xZl/FEdG2nPkjTgqTAb6xRgusGRPUJzrCcDuW + g7mKMC4iWRiTWHVER2OTElpRqCgYSKQFrzXrkSbxqpm4MJaGiXpMF8dUYu9Lp4vPbJE1aqIBYZfK2to7 + mA4GoxmxvhQ2RzNL+ezs2MBAWeij1iZF9NbTJtmE/Z0ksO8Y6YYnSVdwbFhEFEaWGYt2a5JQqGEUACFj + NlJtQx7FbhHXS10o8UzbBAuPisT+kkvOpDVKg5TSkOnd9c+6AKE9bVLgEHoLcnuBw+c+6757pUCkyLMD + wKN3Sr0IRvIpXwL/QE2UgjIRvB0IvBK1/k03iVKCWtCctflZFreEiQxVKeVg6ixqKKieaiGSnt9CKsKp + IdMOurPa8GB5dLCMBfk2JRBFvmgHeR35pmiWTa8yTR8WJkajNEgDazTRToB/wV80DAsdBZ0v4+Ekdo/D + YaG7HotCrQgNBfWs85NQTsV4frqIsLHRsdCTxXKC+tRrVGilqzTpTBaXIhCmDFI4Y+zcmCnGNmkm55VL + NRsNZr7Bdl2nqokCWdSWBVsfWF/gXe7YvkVdnVPLqlzcjS9BcXe+vH4JAYSMBt1BLcNCRUHi5kFBGKHd + TAFLWhHWrStLacg9oh3EZRuL7cGGtmEJJkzMtcVKFCBsG5TRIIVgzw4pAXuYDm6T2xy9e0r9B05m9T6F + x/B3wLojFd3z9tSSsWfPyfJOy43y/TSw0DqoLK+n8BJrPfQ4BZoUryHh4QRl3Mm8Bs4ouP509r3gK3xX + gReqw8DwEH1/AmvGZs/HmQsmkFkHNxomPzOAPAoKHHLhsIPTP1CaUBjbomEWmIURVs8FU1JZWhSarVrN + fmlsxWRAmPRLU853zmjGdISh+aPtUNtoL9YXtXlhykRPzDsyKUXaqiqwZkJULwx43ZJ7g9TC51Q9nc0I + vSiUMSEpFpZZH1XYMnlSCBSyjLpvtyV2zzq1Egg0lxmTu3k2Bbpv3EpFElBpH+/vQFnPSIykhfnRHrdb + szGhBDNN9E8rEDJaM2U9jtUWUihpvXvnwUKO/fRINb8eM24qM2Z19EjRVCBpYIZHjUibFPrMLTdfalND + lA/YZFPkPfe513HYDTCPA4C897nXkbJ7111X33XnNZiIohQkVgIHNZ4BWKXvipGNdERD9K6gIBh85pki + nw9M0b2bjSBDIWh6CePIgILutR2AcLgiljpD4rkqNBkx2hYd/ViMXrLBKoRb74iqQKUqg0npozyGVOe+ + 3q5sTBhmhMaXCaayIVSEBqn3RUP0hGhpenu7+vvLfMk2T8R8wQtLaaKpiNBGg9lRW0qfyyNM+aJxEFC0 + WINSrQkWDAxdVpibKfj+Uog1MeNFrjvZnioc6oywOpu3GgIXu8eKQspBOmesmdZSih0n7z3lDD1E1CZb + c7CUtHoNoCeMPljMSHdUpoC0QykEbS7IxxA6yO32EvcLBApHFHZMc99Mz8S21R2jShw1fzVao311zAtb + R0sdM3XdW+oE+XbX9e5iNFgHBFILgoLPOBBWg4GtqccFuTr+BjD+jl/bgZfVYYTyvq+hJX06GgZ/qQ7V + vEjZ+eRLTKy6Otpan+aP8J/FH93s208GNeOblgGwm87Eb9chYS3TUS8XORe5PNatEb1jKAi1MrSD7v3o + 8KBodxKLtXwvNGehVBMI7cLg6hIXUM1w4v+SCVrFQIvawbytTFQ1uVm+M0ijrNAu6eyjKqsamptlPudL + g68Xgn9CnAmejckuO+i0Uu5otQOklYM8sxH/BAJTIAxEeZsautFMIY8pXUDDdLCtLdjKdHa0cBRcZsyq + VCpC1X2brNAmW2YGxpgQZT3dPxGP0wwcFfGc6Sjw24x8mWA6qlg4DJAgPKBNurBAj3QCZf2NN16C77Z4 + kO7Fg3QrPVJR2R/dTY+UKk14pJcdgc9JgUgBx9SQYs6qw9tuuxI4BOFuv03khpKs+8ANjBIpGSGa0lkF + L7EPBQhvxUQ0VoEAKrCq4RLUgmcg5Ee5cc7Ze+jKUo9CkMEHFY4oRSqvLQTwLlALBhQ0Bf3k1IAMCCfQ + OZA+aF7bEsExPSRKEpqiNIpVPtiBHV2SQZh1RA0FLQDZ4+nV8a4ZyBwfG6A1bTzSqCYMmnpLXxKD2VbK + dFyNsza4bIY0fQLtoPint+H6RxhhAMKIgpF7lXNWK1gdRfmg9iqc52UTQZsUngAIE4uJhC+atlXosgRv + iir37WrT0RxlplAOWrdTxA/5AApdFgKlQNtOosqzZcQnLFXUhHRSwzOqlNCwMJhuG1lG2TFeDnoGvSbR + m8W2H8s2DTZ0jJC7FAX1yOrFYrtu02Bd61hd2xRYWOpaKDERBPkGDmZHAQgFCXB1q2V3eTIL92k/Bqc0 + OurWLOVNlCJvWbHICwYq+Z9hlfVp/1z7Rp7BGC4KhPKnS59QJlinklCRYF6NhAq+CrkL8K75smtORgMl + JumgxmqvMBeUT/WMlC6oPcbO2sRJNN2XyWmqQX9ZOeg7uHgGG1kmfCxIJuLFENom/M24aPnbSY24lBI/ + xF57UVglpdeK0BLqo/Nh3mVmOeMN00LZ/d4j5QYvXChzqxefEarvmh+2ygQ1YWyNpqajjoheCJoHqU1o + Cvp6ZU9IfeATI7uhXTIpB6OIXtqhgnnqWmLgx6Jpa26KhdYgtWU6iutDUQh3Rruj7f19neT0Tg10ia/m + SDeyQgujoDxKW6PmuGama1YXUmNtmR+j3rrs0rPOP+8gtdee3Zpfb/NCIuwR2ov7mmgqqNsgszDMAw5R + GdLVpDoUHo2A4sU33XgJQPiOt78EyTzQSPOTCAvqP77E8ZybLjFq6HVSBZ6NNgNYDXrBCw5Sd6LcAHf5 + idSjlr4LBALMmXx+fowXrO1Q+RXUWVSaohS78EVFOEHtO4ylQA/loEwHR3tQlUg56IkTEItonI72BVuZ + pBa0PGR9q0P6UuavVsUgteGuYSG3QU1JYJY/sYRwKRB6Eq/uimLuUlILZkoJ16q6q4N3RzknsT2DgGUu + uAaBGfM5Nw70oUAwHZUGSQhgUtVE4jLj20q/fIQgU+UymrJmzBm/uih0OOSrlJ28cgdCnxTGhSKl1+Wm + LXHpqc69kTVK7l2KlF5ClzSwVyOZqAjXIKJvrZfKT4aCS9Z1N7X3NnUMSI9U6KNgZKdOCjuEPkMMoeYu + WQCFRdJrUUjKBBbbo6X2mVLPLuGI9gcUrOs/WAciGhDyGkjjhgYCBOKMWtWsM/79KTtwnjw+scqx1hkA + A4ED9IDaWk7YKXWEOPkf9MN/ZPVvQZ1Ep74AhEnbM2eWZjuDdBYY1YROFs2+qA47TZuaN2pUb4TCiImx + CxFQ0jZo1ly1c9S2e3Efl53QvqezL0nJXNBOJDoKY2MXiDPWPs27WmQ+h6KmMDjMvDBy8bzcbyRPQW1V + U4g8v3UjxLxEPgEiWkJ9JBQkkYQFA24byRQEhYW+qEsppBx0xzVlQIBVu3fNz2+e4DUIUT5pkFozzVN5 + 5UYMKYR8IaH2bZJQAS7KoZ1S/RiMZiIcRvdRnREaaxQglMx6CaNQHYW6zFAUzgz3TJDHpJFMIqIQ1oyk + t1uPlEh3sFC8ZjaP0CY1+gwJTXBnpEG6b4vOC7fSI0XGABZSFwKHYOGVVx5lpAeS0SyF6kmBeI0wSwFF + ysQLHn7wOY+/4K7nP3wbBy1QvLNNF8HDeDCkGL4d/KMKhB2KeP+C89ELimoexIWzCgrCEQ2FoGjnrSk6 + KcJBtRWFLIr2A+KryufFVhQG0ML8JL8aKGhk0W2j5TM3Dx9ZmJgZ6qYcpHXMbFWyO3o7jx3df+TMPXRH + RY4CEFotKDQZo4xqa9ri6bFQpxbXP4rc2WrK+uAy09ISsbB5LfdTOA4N9lDNO2uUfEphEG9Y6yZEYc+U + z2CyU8uZWVUuowAhAlMJmHCzeNnAhZaGqGO9KNQTPumLJrPzpCmq8wVpogS3JuOjsQUXrUWRKSPzCwW/ + aslTOtqQBYF40UcfvvOuO56NOpl1I60L80AYts6ydESnKl1jQqyNrzZ+p61ApExI+qCF12vWoHBnoIYy + DgQI13avQG00OL6xMrYEmSDloFBpWoQ4ymEdVMHCHpHVc6xDU1jRGF7qQnQUmGtPNYwe7Np92ZqZs0NH + 1FCQj/xj3cIemHGR9c4KaMHvRFoh0s7TQBGB+VOUE/AS6LDzx17sx0ndpk481AOn+uSn8StYQ/E0vtEw + rOa/mncnDw4Nz7S4TLHQ/0bJnVb/iTYfonWhInTMix3RXF3on3gfI73Hy0Hvl4Y9YCGcM34KzJNPAmT5 + RYLzS6XSjdyJ6w0M44aOdc3bSbyAbccaYdJaOml8DK75KyfHh7bMT2GRYzwa9qSdHW08cyIrTFAQh6pQ + C2aUmaRBWgMFfZGK9Z/MfmJpSFEYc1YNCNugA8zNTI+KoNCY9HpEO5IspD7KCteiF5ydGYMLauxE+WjW + o20CgUFWqLPDmEehrdHuVnp9faoQt5Am1np0FCaupxjaST00Wpka6RlLsNAMSDWPQopC4BDTGemRRjPu + bUoixcaTotBympIe6V7oM2AYgz2ILSDZpZce4VNAUVumx4A6Sr3rrj3v2ddfeDt0mJsv57YNAnkAD5Pj + siPUlJBimDuef/5+wBWIFdW8UGMYCkq4hKFgyJcABSH1KEHGUiaQfxzat33HthkJmtB2qORMTQ6qdlA9 + 1bQW3DvRu51KcaCLnTN7BdNL0EYmQR5aqXRE1coc/EOpSWYTs0CDQINDudHajKBFBA9DWPOMgJdhHGgU + 37iP4UlGR/r4i5MrGRqkaijKmUAQNG1tbxhwGrA38uglUU1gNGqt0Sonh7yzWmiZJm0MOXuNJhqBUPOo + Ix0mlIOZgt4m6HZBZZGE0k3RjgtONO2tm2AMFDhrrP+st83ryTskWTdw4vLct9D1GRzofeGj9z7nxqu5 + Eq1B6rMSpcwEMkGyVmQ77KQiLBaFcc8u/jLiLGoNUkPEFWuXb+haLQ1PqsCe+vXllS19yzf1128gX6JT + GqemL3THGRsiNgq/prRW4FPUhOs1g1eO/srWMw5cdVvrwnkyI/QBYWiN1pVYPcf6Bocr/dURuLxK1q3T + MDDjG9lBVHq6Tg9FFvsu/gDsavjLwcQ9bYiq+eQMeAHX9Es8v5i2/CCJqfr2ojYNU0Mr0RIIdClFIZVC + HmZ1ZMFQJp5VBo25w1KYkma9b9DCnbE1Gogz6QlttLBwncgts17TQ2tEu80lx/XGH8eBkCyIocE+tlls + ObW9KY1vrRqXATAD/T30mqLEPiBi1BcGEQUXf19vN49U8bBYj2pTNFgs2ozQy0GeDScd11o5Gd1bo2rz + H9wd09aoYSHfrtJA6Xka3y/PHW3kq/hYDvSVLafe2qEawxTUZu4/EqtDaZNS/7HUDg6UfQoVm3JFFEwF + hRSRk5NDZ525l5XdhfYS1dvXSQ4tKLh7DHexytxoZULsp8V3NLMeVRtuc+JWHqmUhq6pwIAUVucDD9xE + caaaCuaFO6gLyX8wP1L8PzlwJWWwB6SJ9P6SM0BEDkCO4/LLBPD4FHU8ogs+Wv2HdyglIN9lrjFMHzmg + 5FAIml7wyJm7jp61h3pUfNRUKUEhmBBklCNDU3dmhB5vGAoqQUYCN8jgHdIw+rHKgan+3RO904PSLqZQ + diAMcRORI2pVIGXi3PTYxOjgzOTo7ORYF0L5uAWRZnX7xunJkYnxQf46wm+K/mphH7NpHQY0w8O9FJcF + cxn+9HwL54x5ijIytPOHT20XlbYZIi1L7GMEFMNJaO16UU3Edqj384PFWvWMMKGGBvqYbjGxm2/iwU66 + zl9Hop3g2uRKtP6nwyGYR51DdwMeDd8L2Ucy1fNkUevx8HPXrcWvMbu645qQeWvYQlEYEPpK4ptsUVPo + GmH3MNVBagExsa5+dd1SAULlzqyGR7q+o79jeA51oJSABNDTDl0nBV/Q1EtFuEmy6RUUQ3Uo0nuyCa1A + VMc1DaZnXtjQOdpQnqnrnEFHWNezPcwLfUZI+MPFZxzbNbPQsGzRUuxU8YxfHp9lY0jm0EXkJtVxSOnq + XyyJqp+h0Fo81de2GBByKgReJviky/UP4gelP51rYGx0EEioXTvqq4mVX7jt9yRf8uIwe7DzZQwRq3Cx + UBdm4Mfl1N7e6gyaZEyY8aSdQl2tI5R7Er5ohL2MkGa9Uy5FfhB2aKwLfk1Wma5FA9LEj5stLQsSu1er + JqGC27pg4d1o3mk05bfVmYtxNHIMq48hItnfaOTRROedZcKAJwuj0KUNC9DLLj57z66FVDuY82LeEOIJ + zaCrEOFr9FHrjoaiMLqPxumgEGRcAD40XEHWTUfOWTMyKezvxFRzYbgMEO4eq2wd7ZkikklxIkRSKIPU + symopTSkSbDQNBX0IUGyZz/7Iu2OLpxxcPvhg9vokRqV1Bk0jPQoEM87T3T3HIZwhEVwCOYJQB6ifcpc + EEQEOJkCUv/hHQoE8o1EXoB/R87cATXmjDPk+ZkLXn/1hc+66gL4q+apDZGH+aUWguIgw0EhK56ioPh4 + /9TE4PhoH+WdASHMIPhBC0Pdh2eHbjhv/7E9c+KpJjQZkQ9aGG949xKCjO0tyt3t/b3dZ+zddWj3Dio8 + fNSsO+o7Ep3aNmMMa4nKMWspxGyZoDAnrlcGab4pGjoHQUFh5gyRKZPa29oskJ+4eW5ycKBinyZwaGwv + G3IbHEZPQbOPSLujevLbBpFHpuqjgum2XHdRwmROpLYflatPOd6gEtnXR87chxRSiJxxd+vyCfDNlpGo + l0jxL1htJFPDDBFtFy3waKwFRUGWAAVCZY3WwzJdXVdHN6tRsBBZ4TKpCCGRLlndvFRk9aoXtBJQRoNU + fvKpoCCCepNYNLaW9B64piXuMd9RGxZKPK8G827gIJWXeeGUEGcqe0q9sEYPilOluDU2rql0dDc3rac6 + PSVQqW6lnvDbeftxHzhOmWWWPDYM429Z7upAknHCp31mH8CphYadUItn9mmrn42TDMJxTR6plYbxY2Fz + EN74Qne0qllqk0EHwtCmj7iY7c9is15OcUb3zGhdepjyZey2t0Sq94Pp2CB0V2okFAbGtl20rp1IRRSJ + O1SQ24cRSIPQZFgyZHu7ds3G5vXsrAMQWgcprhG6dtg6ItQDdW7MWKOWAGcVIUDY3dFOgCoCefgvtotP + 1zLjxNv4Bx/ImalRmmxJJFPOaC0ul46CWWYvi2+07wqOo07W0CSEwBQNou+kpnGXmb7eTqFNAgkDXczG + MFXZRVEIa0ZN17Ack0wGHqCloU0NzXRG6DMkNM3KpNA6kJZZSI8ULDy0f6uxNwEqyJyUbgAYcAiSoXNg + akhFKCoLEO68ffQ5tWTcb8h38UWH8Cy1BAn6n+JZwyzwKGXfLupLGqHgHxUnz0xHlOPokT2YqKlYYlpq + QX0xphdUjqigoBwTA7OTIwszk9Pj9DkrgoKaRA9plvnooZnBC/Zv2bl5dIhyMABhcKSzYHqRwyc0UWuE + cs9gf89gf3nXzs17d28hY5IdCToWGp5IILiN0J7wLKaAFiFpm5hoKGN/5ZxmNFKl0qAJZVcp/klFmGuN + 5pJ4Ucp3d7bt3rkwNNSrzqJI3dNaMPRFj1sOhpBOA0I/3KpQmBc2dw9S3aCjZ0q4pmG1hLnqkMK7oFy8 + vBLSmkAE63MKOmgFWVNKGOFw0Y5owrlbQVodFRCSZk3lNV2F9UgBV+oihUAFwnC7fjVYKHYzJi5UxzUB + OYpC1dSXmmiNtkKoKcmXAD9SKRQCQ5u0VRg068pWEZrdmsTTMyncOFS3aVhIpN1b63r2lioHSn0HSxs2 + rF+37nRghvemo61tTWPjqUKFltjH6zfa8iwYUKqbHBu54uILODdP9ac8zcezxLO+/hBmkEkXtJplGr6Y + 9kvzjVMDvgKhJkW+Qi2YAWHVvDC0KLynYedo0uII+zuNIaxhtGYQ6BdMgS/jo3gvB11K4RaIsiFrarSI + 4NR31LBN9rzOFNdBCPG8fWViLCV0O4eF1IVSlq33yUrsi1ppWJspw2hHgLAZOZYDoWQz+fhHTLc3NHV2 + kAvRYaWAEehNRKEmanTJgvlI1Ncr51A1hZZpwEcKFHSBTLB0WBhkhSYfjKxR444G+qjZrQXT0UpHf38X + RSE23FAlwT9hzYx0bx2hYdgzOSJ+K1o88VGE9pjOqA2pjQyFRErjUWQVZBbOj23VwEKJatpNBC7WM3P7 + dWQIbuH2AhzK7PCIiO4V5HZzCDSetVsVF3sBPDm4Qf9TwG83xd+RI9JipdHKEQUSxArKQTs0I4huxTsm + i1gyH7XMUFRccvomxgcmxwcZzlERgv046cAUFekIv++QSCaIHqQpyhgVGpEoTFRBSJrH2GA/vWu16fHE + icAU3dSybmiw8uADt9x5x3X0S/mL8FZzT6UH7zyp1Bn7aUUYUNAVFBHzMlsZ+6NDlmHzpGeCVofrQ56l + AKEYFeXCeF1EaK0IG0ibfVp6ilohaGkqKU3GBoTeAqmlnQ/XTgKKKQctE0twkZFgkXZrDBFt9hFoouzR + G1evX9ukxWJ2aSdzwSyGyduhhdZo3GtL23PJErImVmsSoWiMYQLwkWxeasEM/+oyOKQurFumbVKBQ8PC + Zqn8VDsoDBpuk8drUb0goqOg0WfojgKWdEdVVigHQChYCIN0TBikmMuIpn5vqedAKRAHTx03gMD+SgU7 + g1P9VhhHuM/VrIEKT8WKDp0VkwLW2FP9Kf91Hu9Fc0CtRV5Z4av2XYvSbRIPNm+c2rdw0mJzwTnudFOf + FOpAW7mhQccawE8RL60ObXYYUDD29/1Tu5GbCsRCUK+lWvSzuPHMyNn5ib1colR4nBvRGjFgYXdX+9aF + acq1VFPYoJRxBhtiXbhKEidYj8zGkIP1ZQomZU8XqwlEBvh4ubowCX6L3NGgcc4TRyXs1w4xDeFY18gN + fhDLH0OgJIxCgNDkEJmIItFix+5oUKcBftQc1pQL7JgkHigzmlGiR0BB4YBI5DoHi36v1kD4ao6b6dpI + N3XhtpEenFZGB7songZDMIVhYVIUQpyZovcoQfZWEYJGMDbR8Aki7poBC5EY7t+PK+mCkGgObycRAkiL + xmyGcCgupGS0nqfWjjttBIhhDZWfHzRaORT/ZplK4qDGXJDnpy8KO8bsY7QWFEaPtUMlXEKzBtPSFnQn + i5jfbvtIz+6RMs7j8GZHxV87jAaNSWQHBd/s1Kg0k6Nlnb3J3gjlzZ+bG2fsyh9CZS3FAKa4ZRHVhOkI + /c+amqtxZ0+5g/NTXdb8cB1FjTFhQU2fSHpiDGEmnMjJB701GifiOZfRCHseOpEpjtxcLe27cNueJxsW + RuFETjuxVDiJ0jZdhBmni4BEI4h2OPPUDspjX1Xi2uKAByIup1/T1LBmBS6jltAbK8K6Ohqk3GOd0tX1 + HPUNdUs1m5fS0ArENe3wZRraB+tpkK6mNUoGxQZSeUtrpBy0Q6MqEN13lZp66tZFcb0AIWoKBUJcZspb + zWimVHkaXqO2Vp5Ga5RNS8Fj7CRAi1kq09RTkwxasXQST/6f9hBxCUhki46Fjn/JPdYazeAyKQRzQ0S6 + HbRkZOtQzKwXLT//DBeTkWGhQRqqRk5uyrI8CgYstG1jioW5jmgMI/QaMXWscDWh3ZlOBxNBfZBP8NX2 + 9hbmKJRr3E6dZQzzxHe/YYXy9zY5EFLS0d21IJve3m6GQxDQozYryJZ9WBi8jwumo0E7KCjojlnRNETg + cHKCtXtkgxhrSVQvBUFzc2yQJt0zdZmJ4notB01Q4QrCdIEObEZT1kc1oUy8uikHxWjNXDSNFVImkkL0 + 9TRIVVc+Kg3S+aHuSW0hDnFoUSienLivSXfUYEZajmrMLUAo+sItYsAm3p5aHYJVYKEE/KoBDWWc9TM5 + pGuq4j8ILzJNPLxN2p5aO1L5SfGnzU8tKIM6gnsOHFywcEEBWnVQoyPKjzPVvI0GpRZ0FIw+arzsoWEx + CkA+j1ZS3NRGK3tHeykH5wc72QEMyLYgMEXFprxLEhwpB+la8xGeLUGDAwPd6iwKCtoROtK2NcnL561e + 12NjyFK2ctC7oxuahRgVcyfgxYjQnhZCYUxoOyRrpKczQkXBaCvj/tqZC66SZYKOXsrBtCmazQgT1mjB + etBaKelMQfofyi/zpovTs41cGtszmYjedBQ+418MAm0F4CNcUyKoadVIpGBx65yxEPRLUhQa4C2pb1iO + UTQi+voYVR+AUIpFM0UWTXsdtwkbWCWlIUAICi5ZXiLVfu2G8fltlYm5JWvb61YHyqiAn5JlMtaMiCtQ + GQoQWndUPLi9KMR3tHtLqaJA+Ix7jVZDSk0h/KkijyRWLVl2SkDIW0kywQre67p6OIbQsk71h/6gHw9O + qR3ucgPrdEsRy8HcXDA//0vboUXHbUW5wrgwFHnWmlcU9DZpUBDaaSvbjaAmlHl2ypTxTZ9fBoVhYUC+ + fE5vysOWhoiYOQWtoYsL0+owMb/IZRbmt72BHZBSyW2Ta0uGc2esFnSTjmRYGPT1BoReCwJsnZ30XNd7 + XEAGhGI0I7gImC1smZ6dHUc+EXMKs0gmIdFELIyZdkFfb/pCF0ukwom8uF4jmdRZxgMoVBvQBu90z875 + zbPjfNrf27ljfmrn3AQG3FuHJJUCjxUbFg7jtGKOMxEISWui0grG3JNCIlUcknmhVWaQVgjyVbiaQdWg + zdI5MExaprvnCMs1OLQmJ9ILSsb96gvDDTskU3fvZq0RdykpVNqtfDRqqNl/S7hSFAsqO0ZM1CRcAuE8 + enn3jhmGHSMEGVBQs5bKEIL2jfcdmhiQ9N3+jiHK4sRcW9zJYwMZOOR9q/R28CtXKp1BO6gOdhk7JlMK + mtd29gdKm6JZAFOQ0stfFiC0ZngCeKFzkHnymcWMAqF5MjgiRhGhj6s9jD4Uhe4mU7CV0dM7ZK2EXaAQ + ZMxxKQwO7BoJvZOGFRDHGHwZ4EUamnVHU9d71RGmhoh5sps1RatnhLYPxtxp04bmWBEqGyYKBwsiCpR0 + mGsrFkp3lLmgMEU1qh5uvt7TAEMxLE+6eulKJRPEgIVLeYAIBRqwX+7saWjuMNWEg1/KGtW6sL3UFGeE + mtYr+vqgo8CJe0iSKLq3LB3cv3ry6A96tS9B8GtraXmaldli3y7v0yJVqQAh4YBsQ+rqEbDTbD/VX1X4 + /U1NP7gxIS8eK4W0IrRXqOdA9mITskyWSpGUjFk5WHNYGM+nzGvGUDDBQgNFuYcze2xsaPeurWxI7QGp + fDA9sx0LbSSQ3zmGiUIKgX5bt5zR3jB3QebcnrKBfwiRyRwUpS8abbgTHWFgjWZGa+o1GvT1iaO/GXkQ + cGhGHpmCUDkytLl6K11kSuDHnZBIlTujS5tS5GmaibubLYUiqLcjCgodCE1ZsYmqImZQODsmcEdbN4j1 + dvtGGxZaUWjqb0ZckD4cCLkBNE5NDD37mksP7N1ODUR3dHK0f3K0j2HhzEAnWGjBFIKFwXqt29QUTArd + mFsSKpREapNCgUONqrBOqWIVRZsgonzUGwwRJbxiN5Ui0EiTU4xpxBFGDgpHcFE+6ldneLAeswAqyv1I + DRWlPLwYA92sEFT7GBkNjg+Agk7zAQLp7qqzttS4JO7iHrB3rIJiZGaQ0WA7WRxSGXcLTZR3SW5oWITx + jMSsPGbTm19d7I4KLzT8CdTrR0IiW5sZEHZ3tUUfmRjJKw5BNakx1gWV2bBUfpn3kNkPBfwz5Iu7KCXO + 2NQw7zXqnYkczzmeun4Cu798hMDQCynQZAp8Gf2qBp/l/O5Fv2tw6DvR6ks1HfkXUDBWfomYKlJMCw3S + RKmlK4nK6zHyUoJMGMcItsmdGLYUN+/67axv3C9gqQdWIezTl5WWrSKDsGRzQS8ErSMa0JHWKHYzIp9Q + ixkDQupC0VHUb+xf0TGyrJ0G6cwPAwhZz9lanwah5iRBi5WaP1ION+J3alFUn9p02lp/ks/MwyARtbW2 + 8lc/+W95hh4ZpoOFGtFLPH4Kryr9xQ07izVg/Nx1FElTNGCf14WcprarmN88fXD/LthMPKFt8PLyCQ1i + 0R5IbJA6zZqGSjSniN1RuaeKNRouP8HDDPwSTX3qMlOdRJER5GqVg4njmhaCokdWMl7KR+juhElfNp5C + Uem1JqxZeRTUMArMlNc1UiWgQqPUM1DUYWEGgdWaCvNai9ET5rUWGqRmYpISRw0INSfBRRTGgZRPWeUB + Pzp+fX1dwIAZkPaUW/tJaOptnx3oIpgC4sy2oe7ZQerCLkmxBwilupIeo9FnKLwMe8SYWwsyc+ieFyc2 + qQsXaJZuldmhHgKNhotWKUqTk5ki0GhopxhplV90zZbvsiglmUFGpbzHBYO73J7O5oJBKcEs08iuioLl + wQHp8YKC5CvhrG0RE7P8Un0d/b051SAoONhbhu3JWxRhj1gPYR6ZxSgftQUtrdFkIxJqQe4cHe6HLyMi + Qm2ZZkzRGCqS2ibE2XAAQk6GsdEBRBeuNzX5qcEep4c5M9jplJxspmR1GU/mMhqZMjkpfex2SMNDTnut + AjNQrEEZlfGTjduz6aD6FKbdl5pbVae5LdoXtc1vVSM0FQs650BXKmm9RlAMDafRkQFGHqwA7Pzzw5p6 + iTdf3mAVTrKsAYEsSmDhypKMDNeWVq4Vvqhp59ViRhmkmmWvN0p0TZsIrDCyjMOhNUj7lmwarN+kwUxM + CtM8Qha445M501Xe3oTqdV8EmU87C+LpwwkQSFM0lYJIi1r4I6cAhDIjXhwFpaRfupye7dN/tTWfwco7 + LxFj7zRUizowMzqMF5F+0uTc13wcaKVhAoreGg0VoWGjWpVm+vrsjNc9B2YuQIsPDr01qtdMktUi0WXF + JJdcj1QH7IXWaIqF0VxUdr4ZNTzG9to9KRBm1htVOb2Fvqiz9RLXx2DqEXywYqc0rlxZZj2jSsZC1Iux + JrBEVjNfzhtwQynU6aCmvErxEePu7J7Mes3g0FMprKDJgDAmJ1hUofVLR4Z7x0bESxMXMbEh1dhe0grn + JMK+mx4pZqSozieHxZyaukr1hRWqyZmpYQuyN5W9W5ICh5t1YmelIYio40OOMQxftFKUMlGM0AC2hfHt + 8VOFSSn7PEEJUsyO7TNGwwEpjRq6ZX7coiTE8k2hNxSCGq40RlGrqsfhRDgfxBJKi2UuyMc5jZiAImSq + wVAra/e4t6ezUu6gO+rMW5+z2psm9NE8ZcZpMhpGLwCZxE1IHZ9yZNxRlhqxr68bI1PqSPESatkwPj54 + 8MBOcDTxIcoAj3PDUincYs07ECGSSZT1DbQoBhn5tm6KwkHbwOUiNgueMlbt6VUgF0JBPgFSYjIl5LHM + trBmDtpSwJIHZ0ExGsbrF2+qrMgu9nwHqBYi+gZabJyZU4IKvueWTtiypQvz0zPTYygpYg8sDGtYRFrR + cDZtYEVJldBaF1LzkEbXWLdkTd1yiDNrlUdKRagJvTGqnkpRmTVNpZXr61Zt0vxCURN6TqHSR4PRTEmw + UBqk2SJcqXTt3rVQiBJcbJVnK18NEizKvPV86QeEDSf/tKzkyGDSmaJVR4s9A+9+Vye9keZFaZpV38k+ + AKwVj/JTAdfj/Ar+PMmN3OCQrRMnB44HnKhp8ZeETyxaFMYGafi+eFKmLjOGg9oy1TNV7bNzZDDuNKe0 + WA6GpmihNSoXj6Ji9eXk3NHIlMlhYbpd5TaqCXbxpESlZhlOECgAoYCiO1EpFlaXg2ox6jvxbEaYhFFk + hpCuJkxV9oTLw8pJDbh9RmhGzMqk+P+6e5Nn2dYku+v2fd+evj/n3nP7/vVNvuxfZpZSpcoqyaqEBIWQ + kCETJgYyYeIPwABjwgAzzBhhGBOYMWCgAQP+B8wYMmXAn8DPffnnn3874jT3vptZKU5Gnhc3zo4dOyL2 + /pb78uXLYw31rolQipYqVEhmnJRDNXp3wS0u2wymyGCa73ZMotB4JqEg4Lf/YHP/wZaax/ltPQNYr20u + mojUsfCrR2tfPdl6+2jjKRypa2ce729/+/m7Lz995WVC6yyMmzGl1lmhdvtkSqesqZmUmgsaQAjhaWMO + le054KkEaBu8e/zt128+//Q5gApY/uS7T0HQtzb74ilAaODXABjxKqhMy7y8Y4y/5bcDIZ0SxojuWcug + CWKbTBSk39mkNNg6JdqgJT4ZpDGvXjzmMxELWjGvGaqFBEmGom50l9MHkcbktBC/g516GTCZo5f4fnnW + s2dMrn9GxyGkKFvyPVrfoTME3g5h6WAmfySFRiTQpj36q2kGoSzW2M/66vKLJ49omE5zmVEpExbbng6G + xVrEgma0PRGLmkOh/dVb5ou5TAJhFAi5BrlqqIfDb7DbGqdmLjhbGhxj38wL6Zaf1ZmrXmiwGouLLzBB + MtmDQ2iutYnFhTIW72nevFXVC63v3uQzDPI1LLxhyR+JIB0UlibeOGEoePXE+Ssnzl89cfH2CfQyNzcY + 2MtsilPoZVpbYcfCO3sn7j/uK/P16/RILbDGHQdvPtbqf5zXKtvMwRw+L3NJ9dTtgx3XWN9fvnyCIdzh + 7wvBDrx6B6oZSSqHYQ0AF87nMVv44204Hvi859ttyZ6eyw3c5SQH43UMM1zoJBccZlBo48z2/H4mhfWO + UZ3qZDBrvVEVXXQ0rUIwSqvzyql3IvmbjifsM+sLgdML+6wFNv/9JpZOrf4fpcEIgcUR9SZC+cs0vcyc + 0ROdIw3tqOgprUe+MLn9VfNHTpesIhz1OpBrSkMZWNlR50h9cv0Ca7GBX5tE4dWmpsiInkISEWsoBMbM + 91nTJ1r7oDKbZhJti7i1UjjsNd+ZQEElRo6Fi2ZDali4guPMT17u4UAGrwi7uL9Dr/36q+cPqQ7GOHuf + aG/ZWLPnNmRyplQm3Q0ahY77mH9ahe/NI2qB6GJicK735ktoowwS9Q0be6uiSo+P5OvGg+YX82SHl9PQ + xJfPH7589pD09CGJ4EOjbcXiIo2hU+LZ7spbQ0GbsmSMqDVLLOZ8CSeEQy+qRBkg/OztSwxpxYJ2T+3m + 44qnqB7Xn3L6oORLZdCEU6MVBcs8epWBOSd5FkiJJRs30FGhkpzZxYvy23ZyC7OifjpZLujOavJUi3Pv + yiUaXhfu3bljGzPzrXKkg9e2UDCo0Tabs+WCfULZOMts2kQ4oUZZqVDTmKDGx6d5XjhIY+YCofTbbJlF + EzUWZ2qYsGcE6dCXlRWZvnTxEO+LFVjVmRmRX6oCdQcshB29LCe2Ez7U3vCv3bz7nhaLyyfPXz5x4Qqd + FSeurZy+vb3y5NONF1+cubttltytp7AJZ7yz8I/h5ziwyjbUGtECTw4YjAEIWbUxtMTr+cPejr4MDWM6 + 6IdtcKlkkTzEdpWDuXnjep0hhTXf21cvzBDgABg8/L038jO2EmNeIDDOkoaUOr1smoRPPYzEsaV5vWui + ImLJDuME5oz0CoSZHih8y876SoPIe2K+cLSMtD5YMlOlay1c9TKG8sUMZivtMycRHLvpmzdVncE0CEdR + qDeXGbsTKFgC9rGbMKo7QxNFn8rkZcLoITN2VOaTNGyopzBNuVKI73ds5VU3Peu4TbNra7RSmVzHsepu + 8pk7rUzoehCX0uS0QgEhxULLC92SG/e1b55uf/14AxShpwJbMjoQwJiHD9dJvGyWveszHRQNlmiosJtP + blJje7KmJqsJianV9mQKqtzRMc9+i1NNmzTtJGfqmuu3twkyU/DrL1//e//wdz/58WdgsOYrSSATAlGf + r/Tywdq7QEHqndYyaLmgy0RdIGNvVr8jLHBz7dY16B+gJku0W075SL3uRLJUfWREaHfPvNYVY+m+1DFW + Wr7EeMJ//Z/+R//qX/7TlZUFThhvs4kgSengbVNsGkbqpr6IlIzqjmAPjtQm6ppfUnU+ClOkDOwSAntF + oFUKU1BdXEY9F2yGMgX/ejqoYiFPaZqawWJGl21LDeOO0jtYQ1Y5Z4Y6Fha9aOdFCyJW8ikjcukSTuHN + iisBMGxheonuGzXam8YcCKkUXj7BRPvwYCP5A/wCC+2OpYMBhHCnVAqx6r6+/vTKymNTzTSOtLVSyG7m + jwAIHYTM9fxwDOPzAecqxvDlMFcWPQtPZL7B40cPfn8KT2GPF33ngKWYwLnHjzHmowe71SKuIt9sv2BN + JTMRnIBlYqGOqv5OIBSG5UnV77aoSzRoJogN8LJeGHfGjFDnfTcV1IWhn7ml9VpjyPvZvVTq9sO0eoJu + N2C83CqFMVa0ImIqBbJTAj6F6ahryzQ4X5clR1YHawdF084oMA8gVIROSN5EfdgixxKmAQKK9DWSSfLR + 4jgTvROVT6PFsApnGvmWdmtdJuNQVwYD5QreTGdY2VnlpRoNAUgzYwssRFzq+lLggR5zTKjBwle7y6ad + AVEerIKLrx6uM6QCmwHNqRD8qN0e+QwUZTp0y95MdUTdSOYsyZMFWrPwzs6HTCLZRsMu9CxBKbuym7cJ + gru/+dWP/uv/4j/79a9+lA5wPmjXDHGMDn2w9poU0Lxj1qzSubeCGnZ/s+WCnvtmTpx6WpMRNV1oiyH6 + lKWqRSJ3zHRQBKmGgai/s5qLNlu18JGJblEPetRaSsjyi59/8+PvPgc1LQUMnsAh8NaNJw/3UGOZRrSd + RfTd031fnWWSBS3tg3Uwfb9f69+JgooI+7TqPrYzu+llSZFzXTo1qtq8HPBlsekZXiCf41+iYC/85zWu + p+e1n6K5CXvkGZ7U6YMKoUbeWqDYktes65XWsYKJeZdl9sIJkkL0MgaEl0+cvXziHCyopYaWF9pvLxAa + NcpvJ0sv3T13Z+Pe7svLy/tBjcprxjoLvaEC37XjZGN9daZMxUC6QxUikZUcOzVj+5SxcJ+yKl/LcY4K + dvtPvv/5ztamFc/8czz2a37MDfmqaWQFIufu1L/QI344pUgc+RDmbddxLsnVBn42Brplh2JR59cIB71M + 8R01WW0fRhHcfeVLdWYHpz9ypO3sn+KfGcsUQ6bZdDDL8mpmkqJMYm5dtPxzfX2ZQjqLiICwzpTppZG2 + EFQgRLqCVeTK0gIg2vsoRlCUo2MVkWZSaMMFb+Ev23oqEguvdSBsnWExqjc0MsaDqad+sOAqfRRWTGIV + VvIxKxbNFrds+s7iFqv89tYKg9RZ+mW9JlfSqqkJIDSDMVoLjCPd31x6ub30bncZRNGQCgY2McYPG7ZH + D2zIe861t+TMOFJzdfFZhroZOj6WrAYs9NGGEKTq+VPuiC+o7sgsOw1iTI+jMuRTw1fJc2yU4P4mBOy7 + t095OXJTKw3ChSJktekZTJy3Ngno0K9xEmfUopmoLT3cXGLaBrMGlf85CrqPaFfVSk/rMplMpr1lMBNB + GYp++smLr758y2Y+ZVeTIKNYKAPY+ZLR9oV2eVT0TqhfvjuzJ5EOH/6jrz5jalj25xA8/fJnP+LGU3Ti + 9dETeTY2WzXpnPO3Oustkmsl8Bks7C6jrZs+Ouhl5JtNhJO4M6+4rpSJK3dqlDiJcQvgpUpgoEa9U8J+ + TFVgY2c0YoLftM/TSkhHuHGmyUvpTv3nnAjeFjdfa89dvXDhyik6689cAAUjLzxHFug0KbAnRPQpTp4g + 2j+v3l198PqzG+uPraFC2pnopggR6QmkScdYq/sSreSVfzMIh7Li5Lm8Z2echyKZb3OS1k9rHj/0hy2B + BLxP6275NtHgzNb/eJBBiXwwk13yXCrKROSEO0dh0Ef+O9827/FISOb0TLAXkzkZ9jQbTNh5dKYLc9hg + ZRmyaFXF0XkQGPXCUZqc0VmXj/r5Z9FY0TfbP4sAunYTxhmffYSVHZ1cMIcjYsO/bO/VeF6DQ+Bkd3cL + WMrm+uaOEde81gKZLnY1nffRA4GsWXLlLljYjfzrvJucx6TUsKn7pv6QYaDc2sLSd60qRSWW0a09rqRQ + Y+uvs/iyCk9aJmIkYc9OfGCviUhtTiGwx/Sfzz59STsBbimhBPHGuAELW8ehe7AZf4iOdHt98eHm4puH + Gz9+tf/Nk60vsed+vPHpo/XXpIYP1lGT2lx7xyF5c8uJjVvOrBB1Gcqax9tIQP/qL/8Wv+VT40leZHtJ + pTr/GQPlbaY8yNp2qD1TC9zZWbEeQa8IPnqw/urZ7nefv/ji+S5KV6QxOKhxqFCjz2Ql6uN2baxEnyyh + fkHwL0IB/bPqRSspqpyPR5gmSEkvU0A5G0RSGHMHWwehU6OTLzfbRlsfvUZ0hfGQQFHFQlom6KYAWTlt + YEe9ofAKhn/ra8tuK1rlWtPpS43GCDJ/VjJTLSMkHJvoRTN2jGundSi1xzUEJuagyeapRKsBgSkcnaV5 + JJTLOHieZLT5NZ4+hYiIRIUii5NPgJ+3xtsNOCTbSfftng0ehIhCBA78m68+//t/78/u379H20VgIRmh + W5Ka9YxoUtLEU2dOWLvhZeWFAOTpK3dOMcVeuWBKZlpeeILV48PQgDcJDk3SHQ8BLiV/yPu7dvUqSMZL + sGodCYRspvyjMoTkW7TEzPdKG1+ef1kYcuYsBAZV8+O83Ie994OeBRWBQOyQpgs9kbQHXfNs/NFSvaEK + yPac7utrK4zsyPyPt7lwH0ZoUZ+VmIR2pzMK4kYr/6m/jWTFQN+3LBAg7OzobFJYgTCvjQMbj0orodvK + RC7YQtTB54IHAcLNjVWIynb1tmFMrWuiVgpnq4ZJJfkgm+ypj6qh/dVH2xSnRx9D0YR8LmoI1UxrglZz + dIb/WRfM3mpZjw4NhUmNSnwRXRNl/RUKammO5kLvsjAgbEN6GYzw8uUjEj5LYoxBVcd98+N2azFXk3rl + zG94jOFDbf2FG0vvnj340dunn2LAtr9OyZCZTdx589DSrydYlwFFjSkFlrL1fv/hJipTuhoEk8oRqQV+ + 9dVriFBlkMoaVeozHlUWbg1KW/9+7+WPyYL4xbgV6sNde3XY2k+e7vz47aNvn2+TBdImQRMkbRLPsNje + WdvdXO5tEk0l1FJhNUW4yDamTETjfK8OZu+8A55pl4rLnQQy9qU037tMCpPilgY4q4OqEWr0oN0oCnaZ + aFeKoive2bZxleCfJvRyRomlT+3o6AIvgcx88CsdhMNI3tpN0RHRB9PXlonqNVo7CGcgsMKhu6yNhjKl + CJINxCkZTZlMLxlqxUACwxg+k9I4vsEWbawylfPRuXM3zEfUXGbMUWSo4VjiGM31Y/uELXHs8+mTh3/6 + 2+9BHx/KcJFi4YkznvyBeQaHV+03NmQiCIFDssaQ0tw4cZkhhWutuZ4Z98yyX2dI4bX1px8OBDr8w59v + /XzeQfLhL/M+z+Tj5jQwnYinM+/z1I+zrURSx93XAR9e4phSPX6gF27futmkp/F3wV7bJnLIjoHlXg2y + UrI8g4U1KQzTtQOSwl4pFATOFggVJ+pamm2iSC5UopgcQ1F9R7OSH0LwCH7DWa3ZSsWQti4cJaxrZoys + FGSH1AuVHWa9kPWLB4G6hoVNyD4K3EfJjDVHSyyK+3ZmftWVO1UzWi67y4y6Cb2Pok8i9N5BI0ijv/AG + Oc3+/jYi0tpTyJrOzEJxqrUNQGpSKEEaBjBda00U992VdBEedWNtkXohcPgAvej2yqfP9/76d7/4xadP + aLf/irn2D7EnXQUOYUqtcPhg4zEj4D3/U9+9S1fqmN9NiFNAUYZtljJ6+hh5pFcZDRcNBS2zpAtC+1EZ + UjvkQaNDvTvCewRXsA9l0Pzn+zZV8ZtH63jHvN1bYaYELfMPt1efPdh5uLMBruebtYKopgw2BxnvDpS8 + Vn0mg9QI5pNPjw0e7Gzubq1DnCodV0UwidA2GIQZTHDO91zl1Nsn7Hs0mUx6rKePaFiJNqVoZIRmTnTr + OgIoqUlne1UlGa2GMlksrK30GcwJCDlb6cabbSVslfKhlXAcQzihRtWw1K+7uVq2CQrOpUZTHDBbGsy4 + uYXdgXW81tPHD9+9fXPxIlQiQMhN/YWpZoD0oj2a29g90YCGF9XK4K1x1kpxAgUpWMhcewNCA8XTZy9e + 4yq9Dq146gQMqrGmUT48eeHmiUv3mOJk2tFbGwv77x598dMbm8+3X3x73EX7D7CdJXPeIVdfyz9T2L+j + ENfZRXJB8+T5o/9RKHXIYSY1mnmeNq6UaaaPZRt7rCGg3RGSJSZKPlqwUPcnP63Rp+meR9Wooj8Npqdc + HFOmq16GnG9p8T5NUZyv/Yqa9k5EBDqrl4lHWmmw2Semm3CviEC5LNOEfOfWxGgtg2iWG7R8dZYN0PXm + 2TNut24gqHGdnsfpVT7q6aD5q+Ute6XTVaQpZUI10yxm+nKZxUL5sTWZvvXRN3O123VRXl9bfPv26c7O + WncibQlNWpKmuFQ2bHs768+fPAT2rGzW2yqixcJNum1OxdbG0ievH/3F3/rJF0yc2FvBg43Ey5jSR+uf + WeFwHTh89WT709ePntHMoBFOGl5htt1mSUOCmPmczF+i7a/1/0mG2p1CDfnWoXMd/zRT1+5AhD5BF0rx + z/1iPgWVH61/93SLKbtfPtp4vbfydHsZOpSi4OY69jHLOJ89f/7gH/31X/zq+29lrCMWVLRwgl9Kbdvn + 08ft8lHvbK599urluxfPabqnTcX9EMJc1BVMdhN9rU+Vp1SXbQU08b3TM+ORkAKgFBJP2mwmXkVDB+GI + ggUCg7qv1KjDXvAZ1nTh/fG1X6iKZXpPvbcPZikhQTHZFwGh/W61+QkWHsTrVOKnJYheKHH1uNcFPf61 + lG4aSecS40+0nM+Lhdyia77AoSQ2dd2yBcz6Cy9fYgLa69fP7t8jHXTftRPnMWy25sJTZ09ayfASZOnZ + 8xcYEHPpylVLB1HTWO3QmgsdEemyN+3MiUv3H7z95n/7P/7Nf/Xf/beXVx5fXHj4xwIaLOAWppzmvVVb + tJO8eeaYH0k28rFRmExOlQ+JduwD5Cd/iLes73XuKwEO2+vrG6urs/l0YliDvekOfIMBEfVIAb9eLwTk + oJS5AMSFtujM/ls5h4NoUg/0OihO4r68WjId9A3sQuDa++TNq88/fcOL52ZcwG62MDAwE8PD9IJqjROh + lNHFXLoJoy7CMkHw7iMMrVgShcNYPtpEb68UJkHKxvu7OzuMD2tsVdpcaU5va67vWNi6pAn5be3LDEC0 + GL+TK8vBTGo40zRzTTNoLmuei/hsdKYFsabnhCZVELsrdCtfRRGxSUmzswLwe/PiyeOHO5KNGDxE4TDb + KhbWQZSNJbBwd3t1d3uFufaPt5ef7yy/2V1BkwIIQZaCQMDhu/2N1/sbLwAqV28yCJ68DUsaNDXcpGrR + mPhI9UgNI+0LX++ExuaRhuW37cEmKHlrIHt+8dAqlG8frgPGSHjAY+jQ717ufvvqAS0TjzAKL5OV0MWQ + 4f3851/9X//n//5f/uf/SkKhtExLpxh9IM4YN7PW0jVBwr22svh0f29/d2vJUdCBMHzUmkzUtDOkj9ni + 4g2g3VmmjljSTInGBPT2+WLRHvFTmLk7xx7Eu59dV7qzWoi2suG16WJi7kTWv9nglo/JrI0TEzeZUik0 + IWgjSNVHWD1levtEUXH39sGxa2KQwrXwN/jPrBSSgVy/TP2L5TfiYefFkjcahOhar3x1NLtRrUUCvboo + iejSg0ZwnjpFtYvJj1RMMGZDhqK8oLZSnz13/iK9bWfMPswD/NMnzl4M4ei5a1ZNPHnGfoOF9FRcurP1 + 7N0//k/+xasf/VIE6cdEBTuCJqWZ3e/sul+30WI+eRaPuJPCsUSk9bl8CTD0tbH98PfJq1NAPhJuj/9h + UdcEwmex0EKbM2eWqPjcuWOZ+/v8qKcwYU8JYk0TJ5IZF7xEE8UE+dr5l+VDR8exdjgrGU3Go2FeO/Fb + 8dwCQ+cu7qChvHqlk6L0el68cOUi3S+TUkToRZMITQhUh1Ov/HtPvYzlslkqNHKj11pfLKK5vgBhsd6e + CEcFhxP7j+opI8lDsVGOBurso2hJQ4hl0qykD/dpRSkbAETTvTX+hLmlXGZqo/espiZLX2keRrei8iQp + KuXNRmv51tZydBba8MIlbj6/cJFJ7iRbpFxPdlYw5mZ4E/VCg0NUmshK99d5hMm3lA/pwX+8t/ri8dYL + WuAtI7Q+d7BQ7YY+Jtdw0aBRaMc25Ub9D0r2ISSnd0QwO+IFitCHzFFa/8Jf66uHAKE5o8KFYgUHTfpw + e3kHFNy0Kbu9QXDlHjYuf/Z3fvHppy8A/maWFixoJILAm4lFe9egPhN9mPoYaSvUrF18QTfXlvnwnaw2 + T23iFcZp/cO//7svPnutf3r4In+ZMForSaGP3m3zlfpYiSaTmbGuHUbSOxyGn1EVLRcgnNiqtTkqRHJO + 7ysjtLqAycSKWNRSwLHFqMeOaS7T4TBc7w8YHTp6QgUWCgV1naY+QNc/sHv94lViUcXBvuSQ5+HFYYW6 + LK9MeSdfbVTD8p8WzDuPxephAskSvnP1q6mDW4v+W2+2gwdL7qVLV3ldcNP+AOahmgECSQTPXDphDYhs + dzqwkEZ7TGfO0WW46MIZWg8+3o8PS5pjgc0UJGQ1h7erH3QUR/YefJTD5yNmTtNHBEI7F7yfPQ+PR2xA + 3mVo8ffDv5YdRt6nUEg/ZXbTpMvev/S2VbvjcVK3G+3/5EGiDS4wx84hghvOYz93hYKjWGbaRKHrIdPB + uXUIPdizwDIpJmJYZ0erCk6lQdUUR8ncnKlMs4q7nPo9Y8PdzT6yd4L17h7dFCZ2GOySKyGmtkJz33bS + rKpGswQVOV9zc9YKq7U1U0bWa3CRZTqGxDb61P5JsuLG3NkPAB5YTyGdc9TGXCbz8OEmxUWAwaqG+3Qm + uA2pXLl9kK/DoZzJFmg0JDva3zFByitvMaRKB00KPsGXotskXXvrnQyfPNl++3gLGKOO+NSUNWvP6L4n + O8SqxtvzDR3dDo0/oXyB9nzClvw2axj4zxXmQ721OYLrn9EXuG99Edx4FV4CK7hn29YpT9cjx7O9tQxa + +0Fy5NEsKLfx5kIe0pip5w7poFLAprNFK8R7z7ghjWNsGP2C1RSVCOo33wITtf7pf/D3X754xFzJWtkt + kpnQQLUpgyJFrWacpGjGTGklEyfSkA4GCg5BmLdPqICtM3a0GBUWdplMnPajuahzodVEZrhq5rqsCQtB + Vi6xennqmlVpv9645MHg+/fuwtC2FaBVSZztdKmAMj0eBwVtuK7PIORm4yba4sN9G8DEz+ri8uPdByyJ + 6qJvYHiCYsbW+hoqyzJRdWjzK6tfT5/kRGqSVONLfTyFqUm9cMhhnMYH4BIL8KlzPH7VCFJMShnVdG05 + vGY+CpBoJ7yduVKR+3dp8Vn4AAAQ4flhCPpe78sjl9+XfbaOhNODsgKBXX4OOm8c1qYHmwiaYZJtNvOW + MiPs2OgnRg+uxs7CoprpURjPvX7j2uNHexhq63RMslT5pDblTIefcZq699R7jTAqBMeRjBY2pndNlOlo + wdsI/GC2S4J4ZmHh7ssXT+i1hx5ZXrqfbhqqlGgwW00HoZI42logVG9WoOCMcDSTQq1lABuUZp1QYf3R + bYxALIVhL5mD7APeamd9KUR1D1LcKb0W1V25ra3NsxaJGFNZUzsOJTE1JjAM2NRfj0BmwR1qrMTlyLek + jFCzfAWHTVNqChpSw52t5b3tZeCQ7PDFriEf3QvY0Hz+wOZXQFryW6D46T6zADfgM0kiATbgjZSRDA+p + C4Y13OdmVUbRnvt+Y3ygD4Sil59dfY3xKUDoxtmf0DKP0421yS9hjurlQOdvE6qR+ZDgtoEbcgyQj4z8 + BGqh1D6KSoQ6w8kG+g0i4nUXeWE2SOScZIUmNiTL5KPW8em3qXm6c6QIQbnxV1nr0R3ByAuNlahYOL86 + KKbBNclVqHzlipWoJy7bde6ScLF1CqXFqM+jnnZNNKYkA0cunh5Z9s76dmVZty4XyM72BhdUMDfjGNFS + +/DL3zK/c0hAvZW+h8K1YuIQ6FBoftngn02Z1/TBaB+0B90plMD7/OUX+0/fvXgJ4PX1ilG8p88t3Ly7 + vrhKYNAyvwA+rWx1retJwglWb7deO8HcWfI/s55BOGM3U9BcPH2OMsot1FOn8Sa1LnvY0duGhVcXAgsP + TMWwNLvK1zztFHwvgAmAdKw/8om54HYY4OM0u8vfL0QdeWAfa4PKG/MesYVDUpFvlrfP6TkPFGcp0I6A + 9eQY4bCgYePfBboN6gLz2A5J6otnj+7du92AUF9F/cH04Ozeg+219ZWxWBhxYM3/Jog4SQeLRtT6mST1 + HoXd3QujBLNncN/GRY+i4CfvXu7tbs66zFQU5L5TnZcvWaDd64Wzc3prH4XL/LLGUyR/Pptwop3xNjI3 + HW1S0tkZTJOsQv+E7vvyizcICwHCFNHktKbIVywpDGbPKlhlWhP/RDwJtsWYPUcCdyK1PgrdyK6Qq4CI + DoR2a5ak96WgAXiMKd1aIhuDlny0vfJ0x8qHr3eX3yGosZkPK6apsflHSuNMa2q4CDoCaeb/svZpPLL2 + OZpPtnlEe4Yzn94I8aUVAhmRuPLZQzxiVpmMAf6Bu1kLpE1eI+YNvJuVtjBb9jF6L7xZm7aB+JUpS2FB + F8ahEx+1dIrhDhZoO54l69PL0R8phEnys1kiaOhub4CJYZM2ReQGc7uWF+/xV75xzsBHjxgjvOueMn0y + SRptS2nVh9GHm1oFQpNouela75poHvFSxwwV7npiIw3b3l73ungvEzTHiTlJ4aSbvnqtUbu5ffsmhcl2 + hU4H8CovBAWIQTnUsVbSCoKNDh0QMaJnkj+w0EbS+w1EbPdPXj5zGh3sDVwzeaIvVZZGsTwR0D7ZfvjF + izcUjyZVw7K+5V2tjeSCNsjeIDBupiY1LFRGePbyqfNXzl+5cfbyjWbGRt89qhlGNd0xLERHetAPb5AZ + rVtb6x+QyR0TOUi+ifsZlkRSQZRD9GMznA6waDnmPv9t2YzvT0SfMI1z7uHDnc3NtcTFDHZUF6yJY2MG + 4kGeC+XK9zU3gEo8JLeGcKB6p0cyOyTTfPnsyX/8z/797e0N9tjQTxSo3bgc3O/lDOQpBxwKsW60Zsak + ChXnJoWTy2xs4LUj5zY2UWRDxSCW8WvY2u0tIu7zmHp0PJsU1h6sRjpdRHzX8sLoJszS4Oz6pUUtpwe4 + n2TKBd1q2VOE7CBUI7ZUiNVlxrsd7psH921McdfpM/NEJCZRdCn/3Rtwd6gljcErWChQzAbw/Ydbr149 + TsMwZ1ZBuCXpKgGMzc1lOFLGFkIzOtPI0HZ+m6C0kaVGmVI4VO1wx/Kzpb3NRVoXsGeDtMTb7PXuCvYu + YjVBQdI7FC66Sedize8Oll87WAoFYT4t86P+t2s2b+yHJPIp+Le9sucvxI1X9E5HAzxSK45Q4xXdMTVM + ZNIvhje1tQlxulys1LyZZJoLtu5455OZTU9GKAjMpFB9LPou+EhHSzzP5sFCeYqmUtQdErK/ntr3vbsW + iGCYzvcuYkDNpiMQysB9qDqX6YN9GH1yoWkcU4BwYDikjuF8Ix9102WjQAoE9otF9fV5wWUryYedU1du + Z7Q64UV5/NnT/V/98ic4g0tzICuoVMapLuhZYPxOGsnvFCw8feXUGRxhuF09ZUnhlRPWWU/oz3bazMbW + k3xSkVhfXjHKNPK/XNQzNYy0qi1u8GpgIe5r/GYZ5M7Zk+bEdunEqZYUBiI23zVvqDA1qQtnGGcY663n + bEPShu3/L37+LdHHkdDCE7UKH7ll3YDX40QiclLdymqhAKK9s/faze9940MOKB1ipwfRUvjjHJz2T+i1 + iR3Iwr1J2JEo6BAVjrSZZ3sGaeU9CWvbaTFLjdozgMBf/vTHa6sW+yQK6ikb66tv3zyXKGnkRa3SeeXC + pRuXrnEZcmxcfpr1oSsBMgQVzMO9ndfPn8EczQLhnD7C2lxvwGZXbKsXDtqZ0lbYOVKPjm3q5SiTO9eG + 0UzXDiOXZkLsTpC6oUy9pWQm77TW6asQbg/2NrF/K34iKg0OwwhZbWnmA8w0o0BpItDFyDqSicw/0I42 + mSKijNAxsmR//u71n/36+4d7GOv42MK4xYIuhST7BzCUD4EQ9BiQ/HEfaMwJFdlfXwdWCAjrDUByZtJL + iVQQ1xegKwFFpsALFK3Ut2sTcTG/prDH7a0B5ApJHr+5j+AFIxhqjaoswqDSC8gQDOp/WNs82FgE/6gg + PiRD9czPa5bB1jbLtCA/45hL73yO4BDG1yR4Yh/T8uaSSYtq1hhk/xhJwUHBLz5/892PPifU0FfT64KD + m5pbJdxIdYwFQDzCMeB1RzU39cN8++yfoMfWsjTnK2PoY9aE2ap1Yz8xExg7NLp+fhY4bRwUIzpO5Szj + JvplYlFjNCAZWGbvRIShg5vMYC6jLbNGyF08cShGsA8ud6CXTnYaGu3St4kTqY6J+wqjM3dUUYWROZYO + goLnuF0NODxlWOhpoiDQ/ulFPuf/wlBNwBbCUSlIPSUQTgxSwUwV2l/ZDwZnjoUlNfQE0cZW5MAKo0kv + 37b9+ic1NSpbuH/3s89e379/98jVXEB45GaTDSxaONP6/9/3yX+Q7fmoeV82eXGevAVNCcqg2XSZT4PT + FcLvA45xFnTzEWY5oTQlm2m7PQmtsbxM5TVTvh4u6TyxCE40qP9Q5YZXAauEdg3zjCCNfXrq6Y678Tw2 + 45K5euEyQIhak0cVbPo14DHgafjzyy+ePnr36iVACy5msX0SY84gYptl38fz9kTQXgXziet46Vxpaprw + yxCTmQXCsB51ZzVWnAk7mg0V3Wsm/DuGYYQT13/6KNqgHF/anBfd39v+yXdfvnr5mPKeL4Jmr6XFUeZq + TVtIxnATX7SnTx/s7m6wcDtMXqUESAqSGhlJFiWWyQkVph1duP3s8YOvPnmDdkb1wrKOewHMgZBFX7oP + 7rx8uf/999/Cdi4sWAOGF9X6hKbahG7FNq8aJkaGmoZUzLIxjbAIhzZKdyAiMx/2tpbRs6A1xfYTYMMC + +xHA5hj5ZGuZO3ajMYMZERQdt5chWs312zU1m272Bspiq8YRxkt42bJKQ/OA80FlinwI6SBqFdDWO6hc + 0BtLphPnM3RQs2C7RfuKPlILUzaW85OfuKllD0yzUlO/RLRMkAjiYEC90IUzxovytW5vr9mEek3f9bOl + p4PGz5uzqM6oVp82RtTmTtjcpZg7Af2IW3dyGHPP5JkZvIaL0VzUBvCm+ow7dMSyjMPWSJWWEaeaCHvB + vtlt83bgpSjZSA2XcKhckB/WNS5JB8WAwEgEPSrOH18c0qORFYZ/nzvl/KRhIb8xf3EgtJvzpQJFHzco + hOO/NELIjO0M/he0THBIDQUDEPXPstIKGvWgUabOlHrTvYqFXi8067XT59VoH0wphUPPD472iPmAZf3/ + B09h9C5tP3PJ4RZ3TN8lG5M8gZFz374HDVEwbfePlQKTeDGyLHljngsakJylhCaPR0kkN/gLArqClAqm + Ip5qIi6dvfZsrqk7NwiCr7kTfOhL7RQ+AwqHWU+hRASE1DVPc5pi1VKUZl1y1tqS+kgXf8SmYE+EM35x + doU3IS0WMLCmyv/Sa62WBut9LShVL6NoOn+nJM/WIENTKRfS4yOFDN16rWaKrMvPn+6zDooEM6WoN1b3 + ddPKS4GLIJZ7nsFv3lS+uLx8H+hKpahQsEFgIOJUaNr0HZbQ3DUbmuwydGIQAZo1CSjJk4SkOHEbERpl + tvAmtX+yMTTjm5ePnz7ZCyrSpaRpaR1DjprQRsSp3XwKEjccvbkPQMJwgpRkkDyyDbO6tcxvxJ9S4rx6 + uf/s6R65pu/Q09Dmmp1gnIOFNVgDdjeBEHuBB5sbGMtIBOQ38l05yMyZLCHyM4bO9xGDoQ6ViU+Dxp6m + u0+6ffhJYldn7bQN6l2D19NWxnXCN+004LmY4hpNqipyY0THlsE4zVKuzEkI7G2srjCGkIogT9zd3gC0 + 7IydOOi2KWMZ86VSRrlgNBS1GbytE8lmMLFogFsutI4rS4g4KdtzbctTjetiZWXJTdHmC0cT/9rImUqK + ZnZokDgmhTT1ESOfQ7EpIMQRzbAQmhQUNAgUCpIamtJejt0CQpDs9JkLRmS7lK+kg30pSygsJSRBKSE+ + jeleODSalHb7S+Y147tp7fYynXEg/OP88ahkgBPLSEgi37P97oe8O2HJD9nD5LkMnOIK0Tfqheg5PRvK + sIW+Ge9kqFIjIM4WWhLpyq5Q3TLEqPbVhLGmjwl1ds457EHNP97ZY9paaygspjN+alov4KVLEkrrRFfL + kXH8Pu36oDLhRJM9I5/pMyha6BrZIVemebj7lVyEM4PdvmxlnLO9wKSbpaX7AX4uOnfdQUgPxEdp+oRl + lqWt0KCxoKNNFXeLyOY76h1gqhdq5k6kg2qZ6HBotiOeK1SMBP8mww3qIPvMCLOD7baL+0s2Y3kh4Np6 + 48KbTcMTdHOcGOZRCAXDfsV5xVUB4dbK11+8ffPqSU71syKiD3ISUuak35CxGGVqMKZinpDStS0LO1sr + NBSCdusbC2p+8LqjKXR4Fal16t7svr+EUlLDP1OEsp9VkM9GTTWxKK+yuQaI1owwBDI8C9rZpaHx3tOs + NeRFJYCQ8sgB8pZ9pLWJxbsG+SKoCxJnmCj0Nrai3RtI32DroDc7BaWG1XJWj+isSC2V3NuhwXlucywa + jG05Cak6Y4qEK5ImEfqoQvP8c1/ASyz6vNwMLxq66Ij/GgSOZcLaONEHX7fSQ4fD7MmrF2P2RJWgdj4i + aku/Wnt2yHWK7M5G7EZuGDqDkiqeOXX24qlzl4FDcweFLI1ckIzQgJCSIZe6mUWFoyTrPzmijwDOda12 + 0Y9JRAJhWSTZArLT80KDQ8YwlO41mu5JENVN8Xv94fhpPbl186ZzdSfMW2T+sKE5R+FfRgdCzg2uXzxB + PoCGnd27Jd4Y1r1/S58zulbL/LDPTbFSZmZza6s8SI411w2glgzZCVtuMuF8eVlZZo2YoPcIneWoXrFw + goutImiYR0zJF+S41iEwIzs65RlQBAGpR7jxAW5vYQl2p10SGss4fzBhp0yR3jSrw3YRmgqmlAm9uXCY + GhqXdzZUVN+1zAsBvK3N1dXVxckKEryoxeDX93Y2WfIiO2wGpDGntwGkZjmhDqgt9swWj16xMnCgrpvu + LxMTCXJAgTSlWUSUX0krSvWkUBxp9uCry00GKAaH97A+MRQsJUMfZyi3Um+ocJ/MMB5bcaVlq6iFFadS + LsFSMpOGajnhbxxsVFryjTVVMS9QzRDRRuNSLfv8ExS869y3nM8rf4Bf5JcNXMXW6rm6nwkoRwUEvn76 + +MmDHY2XalxuWKl5UVA+q9Ep+OTR7utXENRGCyOKmZRRY7Jga0HxT3WYr9TS7m4cw9fhnPMdJE58U5wk + lGybc6ywMOyEiq1oh8MqHG1YiMzyzuPHu7DoHl0N7YMWjTkpSoRXe3ta0Hbh9s0bm2uriHou2kj6fhPb + 0dNBN6BPf20m+1QBdlWHejrYfe3Fi0poMwlJx4v3sGvZg+DT1As31lbhpQR13AEIOUgqJpUprTG3lQzP + XvBioWWEzouqocKx8ARx9gXk1LBf7G11dZmuTxmP+MIFNcr9yAtbntD/2dbVYW127QzLIEDIb2v4uklJ + 9/ZtPhanyPAjPW92M7/XH3itLz9/h5iCj4lIgT6w5aWFY75iTX24//rZs7/63Z9ubw7indms8Zg7Z9IT + 8djxMZUDYIW3r8Jbao75KodudiCUGqvpE7zmPt07Yc1GSDS4Iytlvyna3b1+a3tlgwtn8iclX8YahO+o + eNFOkCY0JuDlnZoLCgjv37vNJe1XRbQW6VpSjSFvqjuKb+FZzmFOL8Ks52tGjAtEJ22FSgpRjfdGeyvG + Wmgsxw1LDSsKZk+9j3M7v3DvzrvXL+hBzEpMmdxrwbj7jhLaX2G8OL9VLEwFRC55rLabmyuA0Gi1ZVkg + dCgFQiCq+HFHc2GV5kcu0qafZ1IYy3T4dAcQKtXz+QlVO9N1pOog1CiGmNDkdmtpwqkHU0ej5rwoGapp + DxRMIPQ7RlQavHk9DwDrXqYJh5aZgYKGfKHBiV6Iof4Xu+1AaLlpGbFrbjhryxuWytu70GGIAm2NgyEQ + FeQDnNY64s5qrcNEH8swYrem4DkVuchEY+JSi0ssOlG8srRwl9nOd2zoREsHNY253mZ6aQh3UjUKHPI9 + IqjxcWAx2ERUvPol6CC0OxoT5oMGaxM9LT9gIfykUFBndbtj98VnZPxXxDIhFs06wigc7eM/kY9xFXDA + SYG2Eoa3xseVO6enXviXiSMHyShsrj5VTHrm59SmVxbjTo2tkdmcPANYWjdFg0BlhEaTnqTp8Ayr1mly + 4q++fLe7s9W4MVY5hBc2vElMWSFCUz4ztydb9twkhdbXv7a6/Yuf/fbrr390h9FJbRcn4Ut/rz+8B8hA + sYuP9/f++T/766++/EQ1z/f6YT8QgIuL94hjnEPgXdmbv8kZegWof78f3r7Z+l087vwpXgj+wkxhPigR + rIj+fgc6zJeI7zixvx5LyfP8nMBZ4bR16SWdIOCE26QOwW8/jbq/XwPDdFzT6duJfjvR2z9bmdDp0Xa6 + 18ujAWG/kAg9+dK4YnXhcQ27VDQcDi1cZS7VhQt26Q+y7+47I5FOKxY2l7VRPpdLQ8bR1aqDtQNtLRd/ + LRbaGsSZYMTUJebV/eS7Lyi8iaqKJSwTwTak3rxI3j3//pffgnlqJcyWang2NDIvXuyThWQdsePfOJVi + rolJWFxGdmhpIku8aMBkSk0+47lga6jQYKYcwhCgqLqaZlY0EU3gnzoToDEZGbG1vVKdrHPUn1BT8hZl + cjs7q/CfQtBM74SvrbLochuvOEr/ohdSL6Boz2wN9J0E5qVpHPAG/vEnCpngq6WDPno+BKIDFWyFQ5sv + 0SZYqZJKAz3WdSYQ7fMlegm29kvkfTjR+3dukQgqCyQdvA9L6r3zLhju7rJJijYuVKTolbXlpdXFBYll + BIcKnsq0yz53sE1cMkQUEGa4psYJO3vHkG5SF28Mqsm1BJDjpRHxYksEXRfThdlWILR+p6uXJ1PpGx1K + ED5AYAa1rRpShxEa4mWgLCBUgc/vDh5VWivsx+5YmYtlVX0UPSMkO6R2yOCkMxdOnfFL3oYXabEHRFix + WflhUHluFIsqEzZ3dfXl1yhWfuPC9url5//w3/kPf/X9r0hetb39GXvuP8wPCy9O09//7Lvdnc1Ydt+/ + 44JD5dt99GgXRa/QhW+VD7e+hUNQR99C3ZgjOY5tDc9i4Z4kgjwo5f9H/AA944zq4GS3c7/vxL+qJG5h + jn/HJVPkhDYDjRtIwqZK03bWZu+ED5AOn4hhQm8577tsTMFgRouz7CgIhwZHFcRZsYxkMuR2YKFROkUy + k6VBOcBVOMzrf7JMtNg51pemPgjhzLDoaOq3r0QsW99+8+mf/u1fYLRhqWFYj5YmehtSj7PMZRbQvT0G + Ell7Qy0O8deupDfU7IxotGabsrR1HDoo0kHBqNhvv/kEfWltxk9Bo1oJZ9xKVTLUjHVNLoz6mZoN1GNQ + vUkjTQxYCnAin2NAhDm2CERbM35V3KiYZzC2ukAHCEZuQrLCcxq2+T+ZnXuf8bmTdvgcFuE7MVGMgLmN + mLe9CQhba+At7LyJM+gJsS1z6Hx4hzY2uFdMQ1jrQHiDfI55JGmr7YFFcM6GfBQFNSfZOyWirfDencV7 + 8KK9QJhV3iwQTkhRNQ6KCKWcvAnsU+0bJ5ZcayYMMxOXYu6gwSQ60j4+epDJSDLT6FCrf4ORwYt6/Ie2 + E9j2q6ATJKodjImgIV9OH8w77UqMkkT+02qHCYThpGjXd6pjWhzc8C8WiioijRh6yAKb+C716o5krN7Z + OIHRGgOVHAWjgogS0OYOtTXb5TNhHwMcuqdo/IRYVCtewNs0aWFXBOIXl5c23r55t721UfMxlrqPuIzP + 35Uv7rbyQp7BeImGgx9H/X8Q+3fIMfEd3bxl3PrcbQinqIrNxUIehDwjNqpPpKOAuteHZWwwBCyEmjn8 + sX704Rx+PAK//MpLfVhxU2+1iX83tDRJy5mz+i78heK3S2P0Sz/OabTQLh9tzEdqwzIStNSw9h7NAmH+ + NWsSk+swrlUNiAmFW1Y1kOFcYGoSX1ajTCMEDr2cF0vyxspihjJFMlq1o8YsFUdHZ6jC6VHd8eKvlA52 + NxkP82vfdDTam0TCMsIoH4b5cnOcic6KGOVadPmGgizc21urX37++s9/9/3z5/vezR0ixmRK1TvRTWdy + ruy9W7QWoAwKRWXDQmVUiStpv9kcZ/owP8a7g0wOSDWbDGa1UZQOb2HyEtxppHQiV9uYeGhANTz0ZLEV + KdPsJnLHtUWMdZ7iRuqg2BQ9aZxmOlg6Iz/55Pmjh9u4ipulagP1FAdJIFrUQzKlC3nRRHybAl31yDeZ + 6DWD9v1tXi67CZ0LtW26XrR5yc51kJk1VFMuqN+gFEfu7GgXJKeTA4JoJMWYp8CA9uCsVAST1RA1yoHB + N2T+5w9aaKipLGJKcwZv+qjpelEL/MTIYiocbd0UtcyPLCCZHuWF7UfXfl8Kal5ozxJbNGaEyuHqj68t + sFYQVF4mhCnlpim7diM7vARpyXrEFb14/56PZ2d7c1CjXz6HFsxwYx0Lx/WQxZ+GfczBy4wjXy+paf6g + NVyfzGQXvDkyzVisT5xkQgcaoIp5/AmaUfTmx/1xlf8BfQvu9llnPPHSP2R+r0BrDid97LcEiB7uwV0R + cRYdKyI2aIzHpidc+3dAo6KzBofj+TrLZtgJ3VAw7pTyoQErV/KzZ/srKwvtaul223O1M3Ph0CHQLlpn + SofOelJBm0rqfRTAmMokvYOqja33tePcvdu3NlZWZL1RtQYjAZV8VKBgFmmK4+hoq1asQ+oKWO/beArN + ZmptFbWIKNVMwiGpHjmZOcKsLcLpZeu9Vur7d9HC2OS8qXCmyUBcIIMBZgwhCgo0Og0iHWz5Yoyzb5VC + IzwDgfpU20BQjTcaa4pm8F0HwSeApTxHZT97O634J6lOMcgOiCVf/Prrt99884kUob5ZdEdQW0VgwoFx + 2GDhb7//6Tefv+MNKt9titnsl+8+O6qeQkenwijs00IjGrqYzc3V58/2TYdPLfC2tcZvrFs3Ye0BbdKY + FIsOg7eyCtjLgW7IN/FkEBaaVPgOw3njr4quoiZ96QIVnYVb0LdoLMMCsPL5WRTMdiA20ximGvOJEfXp + 0zd86pxm8GZSWMPKmZaJ3kc432W7Xrm1NNjwr9FAzoQme0Stam97i9qhlscmk9HdXnkpsbgibqvhhV6G + vBAstLzQb2fAQrr4cddbMKGlzR28RO7orjSwnTGqdoKFWuhmVmJxpAhHLZs0nPK5CHxsC3fDWeaIxZs3 + TexRwYwnQKQ/2N5GVDB5Muh6jgEc7TgscHEjMUCIB222wQdV2o6NLye8F/s6q+3xn/I3siUtPpMQ4aDD + KJiXd23bynym30Ki3gQOJ4lg+2emfDpXkx3tJ7GCuzjXC1+aZz/BKVQh5pmqok+UMgdhYU0KW7ga8tFe + 3nC1m8zVWAuwv3n39oWrWuzCVzg8em2fAwL5YHPJqFiYwryqGvWKYKxQZRhTziMMOETRbh7c2VPhCeKE + DbMp9q2tIse3tnZs6ztsWsTQZdTWi+pyAqGHrmfhnk/Ii6GGkpWGKxucKiiyu71OKiaOVEDY5jCUtgoX + lJYZ7n28O/nc9uZK9CDq6Y2KzLKip4OhwUlgM1/TPiPe0Q7x5/qimbptLtMR4a6nhnA1Q402xyWGRoXa + pe0w4Fy2cAAhWMWA4t/88ru3r56I4LU5St4sEYoYT5Sjd9AfH6UxYdMzqQg+ffLgmy8/AVmpAooIVTNo + +xZiAK++QTVL0CdTckGr/yUjau2k1yzi8TabjoX02AgXeRxsZoNWLxQQ9qYdzuGqGrVzsg0OK+mgkG/q + sp2qaXMcdDVpCGQCC2cmLrkqm/3worM6NQtMm+P23Ku1JoJsed6dZ/JBrSBaJYADHPGJWAsEzomtcy1q + /JQJYVw+KgWNDZ03LPReQ2Dv9Cl4vjMnya/OXgQdsdK2DSyPNO2M7y2zwOkiWv/qbCooCKGI0pWujDNU + CEGo9bWDvUbr/jzuMIlRPsinsIIh4r17kyIZr7q8iEHt4mymaBmoNQJ2oxY1Pf4QEGKH9qF3PtCKiDtb + G69ePOPt/ZA9/16fm+9aR062g4fKQcklqRALsKKQ2RxxNheMtK/DoCRV9bf9ezxTY+uCir3cPbIcdsYr + Gyt5oZDSawmjZLSCoqrx+XsuOSMmp2WEzX3bL29WDby2GVFdKoWxRsSQtiBIbSppenAcnBSavjQhUKH6 + BAi1wLVSEIvmtdoxPQChsaNKByFCDeeuS2fhEpvaml11+ZmLDMIZ1a48F8yO+9le+88+ffknv/wp2aTS + PgFh+K2ou7z1F9q0ppDSGCICUZsbyxTzgKsHu5vct6e3KmPrXu8CzpBuaidq248dlhnxS3eATNuts6Oy + /55MiojSYBs+3Brkh4omx0yHIijIHrR94UWja9Ah8DYe3Gwm552mF42GE31WHQUb4WwcKS7nd26aFmZs + GRzaYFq/hDL7DoTXXAXjvRBXgycPVhw3ma6OcZkx29Cls7uznsLRohoNmcxk3NIkYnPJTEhGJ0A400Sf + NUKkJYoaa7+Ehp3ZjVOULlsOSZeeygfZMph3JljYLuGgQ7mIrap+7kLjP0MfkFjIUtNywZ4p5iMpmena + mbb2NCsZKUgd6gLtcCW1LsMTpy9Alsoghh5EjNM8j6SUSGoIZWqdFblCToClrJxsZrobe6LdsRU4WimO + XPSHNMS35pG5UMcbprNkfWWFj2fubiET9TgrM4k+tyNf/ZANOIYKhLyogcoVAjcmNPYDUK5z/BeKstmc + wUfH38dxt+SwOGY40rlP4FOCE7DS7kyCW75ygzkliJM0MT/rRMci3Aos9C9Xn1DvomindSBjS/7szF5d + WXz35gUhc6aJDf8GaXUGjL2Jog05GyCwDdtUHTGLGfViVk+haW3cjyYNNRL/mvVohs8CyIEarZXCSpMW + CIzSYIbwjfLqHpL1kZEU9UZ7a6O+Ti8jbWStatjGUyQckoJUP5riU5oKjmEdd6Y0uwwlA2HpBwnIn9Jp + zLHQO+sX7uxtb2xv0t+pRvvCeZonyx3IWPr/aHhvg20j5VJCGaKVxo6qJT/RMe8Ymm7a+N+WR8bUixTa + NNSMFsCKrw6Q5UV5XTeLUYYHlCLhUbtIOOn4+8qM0MYKLt5B4stbaLxx08tkL2Zz7QmBjGZKFNUu5Vie + q5YJ+eQZFup7iRn0Q78EtD+EB98vfDXVWcp1fiaIFcBNJgSi9mDzKtJuywDebi4z1AVVzL44Jx1UqifJ + TG2iL40THQIbceLsaAPCKpPRhaPyuS60FKAdXuDPZokge/Dd5pq1OqCywCoaGPgkBa/8LiiYSvXo2cpw + XWyUe3D7NCVmR5Aanr6CU6j/09Qx1kd4+mzHQuAQE1GjSb1Z3qqG3AwURZlW4YzDcxjF+R+kQeVGgmh0 + 1/HX62MjyZiLzl/fXUEDm31QSe+4h1W2U4QyA3gnFxdx04gZGhN2d+6rsNguONfyh5ASHfU+eVPLi+jB + 70Ckz2xbkr6xa34ChxYuXECF3GUyM+GYNM0JjcK/xmmkUQQ0xJnT21sMT9jgQqpAWMgT3a0EaW8iFCiO + NcL4Z+rZ8urlQuVCGhsq0l8mB1BEW0WtnSiUTsXd2E2RA2663YxWK+ndFbmzisFrscylfBRdIcMjDgRC + 66Ow7IEy1draklkwey7IqoqOEZKzD7IXd1qm+CpHVFIoIpTEZWBKbaK9lwytN9w2AIQe72+DZJn5JZAA + dU8e7O3vbjtlKk2p6oghSLH+BC/gpay060vbPAcQUR36iYLstmlwwEtDU3CI5K8inAlEnSbVHf/TdF5S + T/L88JKPzaSWnRvmNaOAkubmxPnIAsNwwOliywupnpax8pOaa50EYl/ubRvS6wXC8MkLpWhk8EriAwu5 + j0uDt2rc+t2f/uof/OWfcZ+m+O461OjQ4thXKFA/u5JvSMfRCS9aM8LaO9io0Yjtejoo/qM5q6VAZiYj + 7G4VTbA9KEUVYs6mg7UuWLCwXejhqqFK4dBnlVQThwroak3O9URclCLvXGEyEPc/aKaSKoXmPsONMb/g + b/Ba9Px5Xgh36qmhY6EbivLbENTgLQqBJT0w5T+8JkflC6k1FzbHGdUaD/7hYE2TAKQzHeI0qAUJeWzk + PGqJn80yj3rGYX+nm/DBntnFTjZiDWakgx7Xx2+fAbJVk57OV+ugRqbogHHS3DfLc9VA+kOO9vjPVebd + Ur2e1DrVqfyvsgEBjRUIOVERj2ytrytHbyeiTsdsw7ehyvVPhSPNU9bP5jZ7M8/+CQTWOb1Gqoyd9ZV1 + maVG85p0LDwLIYw2vSlFAwJL11TWCJvdYteO9tRwhnHqbVtp/Diabhu1hSnzgwdbrIBNQXqZHmdrcx5H + VYSUtExnJe0gY2bF9ATRpvuuLC0g6M88o82yT5/SdGgLIExZozueGFSwN8xEuQGHrge5zhSn1y+foDep + s5nut446lQznAGGBQwMYT7PYGNBiV6BXRUSUOAmElXoN6GraVPBSstKmfOm6U6GgK2hs55vry4a+RflS + ej/MNYa/fvLu+aefvuRZmOmkaY6OMwuE6idRuVQZoX6nwraWBq1ZAhO14iYqHZNwsTKiilTYOZQmfyr9 + Er01kC/3m68++dHXn1ETInaZnAyla9A9bL0E2DQyfQx9a6s3sejAjh4gGZ2oY1p10NuNTH8haUxaL0VB + vXRQhLmohlHkRafEUZa/IloOqg4W4WinfNrlH0Co5aJJ6hwXvTPN/5yAVymoYbUZ80Jb806eumC+oC6Z + OXeBNPsaB6slim5A6Wg0gN6bDjMvdESUm5phobLDvlZzRC0XyqRQ28O7nj6Nzb/ZN8/88PmSjiA84S80 + P5AOvwe9ePzF/tAteevAuA3+OHUabR19rnOPgXMCwKPtfbKzmQTR/s5bZlVhr3NfWaKeyRP5J6eO0+XG + MMzd7Ud6x0fvprx6ZUQTE/O8sg357hfu3EU/whnAwZe88JRdFp5H2wd80aYsZVI4AqE9ztsnerBRTe2k + bxLq4EaKorp7yggm515jk3phlXeL5zGVqLXeixfNruHaONWs92sHhXdZtW7C4JTGSqF1UKSnjFCwBexh + JUM3If1naY5VCK5On2KvXBsqBIqslQwiUEO9VQev46RlrdlRKQy/ymDhmrg0tDODAZuL77/5+pNnTx9Y + +nLvDhmhql8d/JrFmkjFNtre6otePAtqMZPCJjy5AxplNZHnAoQ7W2sMoEgGMjSornaZTRwrLnpjvpUG + pTVVXbDdMSC0eqHvf39vSy7htZbJK1rqGenpnefPHzJnkW3SOE1Q3YBQAhm3z66uoZZG24jjbB9sWDhn + 1u76xhIjRDjCHChRlKJXmLH16OGOf32DVUJ2ynOHuurXn7xbX1lKXUybVdIZBUe76JoodejJJN42lVeT + 6Nsw+jE1rGx/Bny9cTD96CvyKY60W+uaIHZnusXSwj2uXzEuPs/henpczK0LNmqnNkv0iz2RL7UCkeG5 + agZCF1cDkLqAXFScZukoCUrHH3jMc7CgeJOeYwLpWStJel/XOW+riFESBodKDV0+46VEoWAiotmqifzE + TYzLMIHQHWoAy7YxL0CX9VwgtIzwIg6NN+mu+pta+lmsYQY5q/hkH23vrS0u60hqJnQ0dMxscWyeN57J + R0HS+XuCwOO/F+Vw9d2U1DBFpLFNnlhKEGlFgiXmi9bjgCIj1LhaAMHtjXWskmZQUHM4I6yj0r6+tsw1 + L0Y0Y8B6tUyM1hrU2R7qlcaLsjcWiLnCGT5k9CY+6bc7y3TXKHdZs1uLgrNk2CqFQ1uheiqs3HLBuFAN + qWjmMs19uw2Ky/idzSBCnTZIUssh0LlTfrc+QvUXRrlIWOiMmYkG662pZtRcYZRp6kstL2mD0VNWCqAC + AMyIAGOy196xzRJEb7TXtMJgEatDt5zYeo3NCdL8ZxTeimO18k727HgTqWRynrPPdUrToLQwrtbUr7qg + tKCJdmwDCu7tbMgd1DoOV+7bPt0Zh12tLt1fowJnr94t0wLaW79gSQflMDDHPhTwE/ZrDGTNAlvyZ9Oy + qI++ffvM7fFifkhtcSFTdGtk+Yu6TNRlUFkPRiazsrz4YHuTNRMgTAgsvHpONQmX0ewdHCvTU8nMhLpo + wZwBoajLsTTYsBC088uhAaF535tqOiZOBAvKg1hKYQsM3CopFDHrF+DUSiaJ0HInuwaz8OH5X1sIxgXB + gJAj4hU8A+uJYFfKTFBvzj/d+srmvdFUdQ5tDrHu2XNm2C3ws1tBxHgE+YyXDKPK6DY0ygjv3bvNeF3M + WHz99MzS6FApSIWah/7wTh7sYfC5am/ogC3ZqyZUfQAgHfkUy2M8EyUjJGZKI5jjg8eRL3HMDf7Ar1gB + r760HvehDzGdy4VPQxbYQoVUihobfPPm9fX1Fa5qoWkmiFxnlP7dyihep3H3BpbEHzYwmYzQzV9EhZTz + frgwFBs67tnjXpDvsrTEQi5aKctTIFNpUtXYeWICoS7yKhC3i78DoZooZEM6ZzCF5Ab8RinA9cDrsq7V + OD1LOLlmsa7du2tUaCntJBBa1thXxqmfSDBpDQWNIC3VprRvHoBQMxDqDKA23dB4PJF75II+L9B412I6 + Gu6jTplGSkQ6WPvNE8mK/ET1tuQb1ZYgBjLdakK0qWxszAvhDzuyCo/ZAPwz7aiPkm9AaGBJX7yB3z0f + o2gdGpYXqgpoj1B99G7IBD/15ts/G6Lnn4qhWveLkbaIpBDGGKGmgFBurpMeQfMx8I2zNCimulmpmdA3 + vRHSUK1OlshYp/KiaUjbaM86dEnKZL/Jz69byWgqbxKkE4vtYDWkcOGYvUdCSWG7Fhr+tQKhIRz03vLC + fTIH5YV5ZWmbST3CL8k5pGgSOVUZLlyc3JI6Sj1deyRkB1pTSpA9JH/+eMwJr81guZzxgrzLiwzevnDl + zIXrJ89fs157VQdbXlhLhjaDN+QzjfOEzTx5ChfvjfW1S5d4MPIoB0IywqRSj2ImvY/5HHnpQUmhJY4X + KIr+XoAwj46vC6vIDxt4e0yo+4DNFATw9o9TPWVjOF4CpdrX74A056OrkqdyYPYt8n3QSECGl4+PSNkr + fxUe+YK4knxyRvxwTiT46SHIFHYu+nSWHbVccOBFJ0XyfpHUoDLxT3mhskARoRPtTBe5nbP4F8x2OBzk + 4Bn86k5bFDr+TdUETXrXgPAWee3Dne2Fe3eFhVe8caLc+vJU+FLlhSEOnO2hLgrSGFLh3RQxnUdd9kOC + 2KSJpV41jHPyx0NBk1MMhRY5V68Poe0thsGd3rs/9JtXalFMo5AvsfA+2/PPho6W6s1wmEmcJjSCatwH + t5i4BELDi8qSzTNCXsVu7YWC1czKX8O2yGjzCHlTsgvPORLJ8doj3VnUmwWLOpT7Nsh3kdEFw2QJTwdF + PpMy4jEIU10bWvTV9BET+tZaLtg99mroI3WoskBHxBok5bnU6XelX/mb585qmPWIWhpE7AvzOOy//nf/ + 7r/+V/8MQ4DRdD7qAhkm+h7CaKK5yUQfxWw9fn5RcGRuRPaoejIXAgspqqpKhsiGFj3/a6tM8p+6M0OH + xjJWVi0tZTbw+zT5H0B4gfGB16gOAoc+ZZcRgxfouLdpSqoX8iBY6DRpATkyP9mNcpM3m+VWhRr9SO4u + B2Hke0GL1t+DnsIifvvmTdbO99pn7pA7Vy5eohj0vqTo4S/HV085afm+maoceWCQq88e7a/cXaqOPtS7 + 4Z+PfG5lg8nhyGxyoFVDQWMs2RUXxpw+ij6kqSePA2vhe6GdUdXEkSaNc5orwouKVmjMa0CYZ1PE7uEX + hbgrKgpOkw4GpBOCNHnRqiPN2gZUOIU6FhqJZRIjyQUd/4a4eAb8EheHGiGMK22IiCo/e/F6Y2lZUoUy + gML/2YL0zA4LX6oKYjcTGeY0NW/Joa2iZxhhOuOFwz7lzlOWmHs36WabBcKsgclXU/KQxhNaSpQd9wFa + Pee7eX/h1uOHO6+ePYacbO13vQmvYWrmhZbzOe4akgVKtfZEHtnaXPn5T796/eoJWPjJu2e/+zu/hMWl + f6PLbXxqktI+8bet4S/yy8p2JsSC3xxbNE2Gn5zNlBdz296vct/eZ5nqGH1iyp5bUqgGCWNBecQ9CmyI + bjMRHUYs1WAlZVD122wBkLfTtLEkfn8yaClNZFqM1XQxnEtU5vjSE/BGSXOgYGIhp/q9e3f+/l/+6T/+ + R3+JGjkjP0msJ4JqziuEWrT5CwXbJaORFP7PMpW+AGHNCON+SkarUsa50IC6CQSOcfOQ/+lPKkZmaqgl + q8Dh4A2SYb3d8ZURKDwJ1JEOOhDKgE3j5n02k0/ZPX0hU0NTnNKDn7QnI3m5AY2t0aKBYq0mHmcNdi7u + 6pWrR+IQx31IbhQ6lHn9eaySlIVyAvvxDuqIrZxWDZkQGEvjEC7zHwWz9cK8U04w4jYCuLl2ObwW7ytf + kfORY7h8jm+o4/1B8D/vOIfHCsbrZDFLHc3xGs4kP5vqmZcB1xCROZXvFcFB7pw0qYOfKM9WIfRcVp31 + YPze7pYqiK18aFseIJMZ2ZhhWn23RrSI2MdUlGlqrWrYSiOtWCgdeeBfuUOdvQfaHB6x/+rC4s7aBlXI + Vim01YpzLx2QCwQOyWLOo8ju6QaE1kymByfrZuHZekbYWymarcmk4773TkRbRVCjXgiMIlmBwEiM1Gvo + 8wuDL3Ucih47EsGvPn3z65//BF8x9RuIX5WyhpiDW+SIal1Qe77rVgyolD7GqKMbz588/Ms//+3bN89A + Ssy4UXuury8FCiaP2tLBSP4cvWoamhltvSOztGogIOO00MiE82rqYjz5cwloIh93lDSrd9CszvxZhEH2 + Obexyen4M6nmHpQL6stNRrQIZKJyLEXVwC4MYZYnhV6lFvM/e9ME6dR5tbyQ+fWWs2qCoDOll7jMOeUm + QEgQDEvETtyqMHwKqXMj+6ocadIw7c4ci7V65aYIju1NqnFeQ5fsKvffLmGxe9kj0ZsleJBnUZQhStbw + uGlSGA6kQ2knF6iI/n1xMyykoZ5EsIlFT+Ayg4nZmWilP8E4CxeaOkCSWgCQdGLQce8JIspSsaZdR1Oz + xqNqhAk1lJF21jdJ8Q8BHwjn+zfv4KrRlDnTbdng4tmLc2de8BS+vI+IUvoQjdFtR6Fv6qNAbOckPceW + c+fsnlnvOXv1p8Pz3eMfFYkWfSzum9oVQ7wEtnZ2pTQnvDEpnG8uw1ED4Zcv2FzNMUCb8KL5z1RCz2FB + Jatx2tOU2VFmOFgyquuQi9kL+1HVn3A4ShCbCq4PF61lkpIdphl3JIIL9+8wiZfVQYuOkA/Mm3Q024No + /EzvHgliM52papp0DwkRBITYRECf/5QBzaS5otSc0o90WJotO/Qbzmk762sqZaVSRthAW/cqJaA2lam6 + qDQgdKVMm9OUgAeQwBySyUlOIkxtKBigqI2zh88reQFdDmA9g9zZXH31/DGVP0BXe0sCs1cimyOanqst + qxw0M7yWLCbGh0dag8MYR5UNEtk7ka0miYJ8XMvL91F+Qs9KIwPM42LKe29ZYHz4XSMzQ1xPohkpfmWl + xtfaTWTcQWa4DRx7iEIz3mrVQRdtcbJ5vTDhcHQKHFrpdXXIU5vNULw/fbqPCrQAYVwavbjgyR8bMF8a + HJ1XGhzaeWcD1kKKKva1PjwkdSbg79GwcUi/+fVPX79+1rBwQEFWIabNf/XFO4AQnKYZFwSprGli3rw7 + fVHs0OgN9SEcdRTkE7FVnYzQ2VGlifyTKunq2hLeKjaVHhSMP5EaRl5oshpDR88UTVZzvB/vf7fqUceA + maWfVZXSAGHTBBMc5NxfwAZvWOnyeK/5R7GVAp+5IJd0aOb5k80yM2MnBItuINATxLlvLwHV+ITxAxe0 + oyS+euEyrSzRSOh74du5ZEoR93RtKaBvP1WQ1hOO7wMUZLqLgFBYKEyMfwVHmkypkr346YGhfUYRIRK6 + PtzbXrh7J3nRg/JCXZwEWLStz61hdDo0kkI5RYVGrk+faUwpehl1Gaq+wiqzvb62u72pANyXoZ4d1jWo + 6BfY4DyCQBrFWO9EnPZEsIwRaCMFaq3IHEY8NRxsSCW1qNoZlQxFhObqDAqStBmnd+v67sbG1tqKO6GY + 4kNd9roZ5BQ6tPfMNcFIA5tBUNPyyJYyCgWbc2lVnAqoDMzUtKBehcwdW65pyR8JXwE2k4AGm9oJUlU0 + Q+HSIFPoqzQxj0FvKqFRoC4JTHnvGsTBrEH7EDg2UaBCwdTFQA9iHcdmyS2TtrKNmlVGOBzH7RYr0YqF + PAW9ZXXQDgIgzodxuERn10cgLKcfUddNBFvWFNaLgrU0ONNQb8IZ3iAXF6c35CeVEc8Iu1g0S+m6avKC + qnRo1iBqbf4AzmburInUkEcczCrBkPo/+zu/YoKuh+BWzWs/kfyZ8/ONa/hfUJXfWV+/fumqgWpZpmbu + R9Qua5hsEfC0UHpPMO8Co32vXLu+ubO9uLzMu7Up8x0FbWDFzt7mV9+8I9I0ylRAqHyR31ZB5Hemj8oU + 3/+HtwpzbXYnY4KVkxfrLtnm7p3bGxsrfIXv/1LW8wd+HKcC9wE7P/IpHDwhD+frZEuyFGzkOJH1OK0A + CDIJ8Q7aIV+fay/tFDjyRbUBkMk5NEk0HauMokyI1caN+0zYqylgnE8FAucQEVnZHiGwp4BZDC+S0UTE + 08i6Lp+/BDxzfTMtEpwQo6JKe/5OlVoRs4U6nHzS2nub41q7niMdjKkUYR81dA13RBzm9FpMbZnfxQi6 + J1WZEQh7vsjjXLfwhCltaO32MWHc/hnCmcGSrZrOsE30UbSZFak8jP5CyzACHb2zwrSLvqCbywxcllBQ + Ko/aIR5w2Ow0I190YhA88w68SN3EBwZwWpfh9PHizOIJYlq0qCuj9CamVrPkl0MSmdiW7YlNBRpT47Oc + mcOSYp+MjOgTlBpkWqe8IDBkLyr7WVKLex1dsXeug22ui3H+0yZYuUxUKXURGelBgd/N0MhEB0v7IjoW + Jvh5y8Qgk9EevE/GYp3WOy/9VE8KOWcEt+JIi0BGHTsWZum0FCcxsqNzCtulI/YCBKPoUDkOjqRI2qoJ + Ai13tNZg04kOXMtEnlZRMAPWyQXbUsNOAumyr+uAe4y4ntz/lCF1LnjcQcYjCXoJuGtYnhF8X53qUtmg + U9G9vdStO7efPH++srEBFwa8NaXMee8DP2F+sFg0w5HKnjRZU2869FsBQv55yA8fNx/l7AYCQvqsJsv0 + 3F3xAQGZJMh8PsfEgNyM94PIi4ZdAv33fe5H2d6+P7o5Z3w+Wa85KzMOYAwK7o5zP6uPchjDTjzhqx+R + A53D4eg1o+2KKHmQyUxSwxEIg9/IPcSp7yd5XgblSjh9+fzF6xevEonqsoEGMXa0a2oCDqtS1OPTKCLO + zQgzsA0n7uY4miXDqiAdmwhjxves3ahSQ2JqOK6MwXNJKqlhVAfnFH5ink516I42fGGhTCb7SloKh7n4 + OtppBnoR0XiLYazani/ayHU8sWlpbPLIaBXwVEmZkGGA/1X+nykrBYpssoTBhiqLVVnT88usNWauKWY1 + Oxa0gROb0aExKell5bIpP6s1aOdgi9KnmaLRcd3SXKV62pXSQc2IyJyPO9v46bx+wu9SQRwEohY3jH4x + 2YXS0sGwQZ/V8U5Lg2K2505ZajKZAofRKQ9I//i7z5mRwt6q8GqkHCb4lyyojCCsUjDTBRR2o6oRtmaJ + 9JpIWXUnSEFBfMvv3UJSF/YxeYk18AMgrXdiZh59t49J4Zuo0HorWGiLhFogcnFILBwwr+WBkzLhCIae + 8rl7Cdym6/6GH6WFLVmkNnmGMmFKRq002CcLsiqedllpA7zScVFaL0gWfYODfjgaWlIOMoN+r/X9OHh5 + 0A6JI1zq+d4g+l5H+AM3tnPrGKrRw18l36PSvgZCKgX2p/Ja9lenQ+sfZllQnS/+M6SAVSMze7+FdPY0 + oy6vWZVeh1R+Qio9Xh5xtXDlwfpQsScywHXYLkSb3Nv7JUoc6l1Mbf5n6khD80Yw6+q4ppfpNUKPiGu7 + fWdE05sxPYtr3K1KDPo6gmt1aCwv3XeJQSaO6UHaCoTTwo89XvQyHRFBTUDrm68+ffJoL4tJVUGT6y8v + Sh1r9OZ2HX/HQksEN9aWX+zvr68sVjFkrYdl9nP7jqWDXv8L7zG8QHGlQW/ZpKQ3GH9ngNqSLcEJmLey + dH9rfYUmceVYoY5pfRpssLay2PZsKEUvf6CjvxbeMUyu7/rS0e8mjycLe3qkEbwN9twmLbC28cBdDur5 + rgYWUvyzIx9stYMabbLbtNKmwuo+rgBkczAYZ0p406e465ICTkRPTQkViWDpnZcnkSeFnuEtLtz76su3 + T58+FK8+3FqJuo2enzrCq9u1dU1MRk/Xx8vEwbnD6E0yCpl0lh5Y0FglduBO19SEHZ3wopn8uTY8/BGL + NCYucNYBVfelrWt6mTSgqaqZQR1jWx6ja4I98lFgKCZhfFv9YilrwX0AokjR5jtqQMgrnD/Pl3Xj3Hk6 + KwImgzhVOnj6YqsaApMtO5xbAHO2zWjJWQRS5fQHIoeergX/o+zq4+6Edz2XjE2w+SgvdxC6+3nWJhvP + RAA8i+Dg9dNnj/cejJblDfRayFSPdhJYTaBxzA5TOHNibXX5t3/y86VFm1qZp7uzIjKXiSGFM3AY+d/d + 27coj3PNcHmjGue3rrQKhDNJYa/hN+Vbi3M7KLbxTL2VYtpHb3oEn83brLejN4vukrbi2OKyvHj/+eP9 + VNPwJ0Lpaovc+qBTPhp3gFJUiMmM+eJoiLi8eI+JiXR2CwhFpk1UM/yTdIf58vxOJ7Zq8az0hVQP30sy + QvLCo4Ewxha2VO8OZU668e42W86QWZK0MUgBjjGyLucbt9dXH+/u7m1tWpHyrkGOsFB1RDbgTekpSbdm + HknqtrGxtLu74UCYE5H8jqqAGhzfHEEzmWuGcNEFwUcRklfZhxac86zXEmgpTnua2OYrYSjamgWDTO79 + 8jI0b+XYMRG8DATyCDukqQb7sVlGdL4YqnUQdragTdz1crLhpdLBBEL8XGo5kHOD8ye0o6XPtcVwHfYS + F7P4rUKAOQ52giQyQkGdO4hGK33in9cdSuduiz6TofHihWns405cpNVQphqt2ePWk+GWjeJDqRPRSGYd + 1cW+X1F1SxAZAGiXfhMgzKxJJWr3RaajT4vmuy7Cw3vrq2BUb5fJkNudvoCa8Aqjl28jJoImJV09Gzmf + FRFhUC9eunrz7MXrAYHWWeFYOLd0x3HwGc1FQWz4+K4no94/ABh4n3inMV/uw2qHx3xFPndOgPdNKGH2 + sB8zrrxJNJVduVMfLq4/9IdzbnVl6fbtmx+2oxvXrv3062+ePtzPrDGDpiQNgj7o5cM87Y4gSH276KDg + C2JwB19QSQi7KiypUT9r7XJQXdAD2wvmSgPsGNBZ8EhTx1gpnG9pMUkKk89hn1SacfuTO0ZxX+t2o40d + tXWEtQagMlTzUkkuMZpTmDeWLVgPpYPUb9j21rXriBKEhSWi74PspY9XliANfRYRhXkyNAmpvfIMuZKm + N7enIDOa0lHN6ECI5mjBh+eldjRTwJCYtnqY4GFyywfFjm5trHz7xaefvX3V4MRkOKCU2ZsZzsmxU85t + g27Fnt4zts5hBrwJ6qoExrUwdG40GA5f7Cp+yWJhHPPM8Uc6GJbZE28BO/L8WFIpk42YqYtpE68CIGun + INuQKfItIMR99+o59lkkhdkDM2mWmDQONiui6iAT/IGfS9E7P00KqRHalMFzqLHWl5dhI4Rz2T5f5w76 + yRyTVbprRGkQEk3aNDISV9uF9mh/95e/+HZleUGlh7iCBGwORB5fzoybKBBYq/sTOnT8Z1kKTp26fpWA + w/q8CxAKAX1BcThUa3F39JgDhaK/BHMhjmmrt/23Bfc16Oe+yWdKze8iVUPequCzAyF1xDMXnjx59Od/ + /tt7i0umJvVJ9yYZ5Q7HN7scg6Wk/LP4YWDAV/cxwICP7BGtzW/esGh+GB7ks7zHkbnB0157jlaEHFty + GrC4ze2DFONXj8HjHZO5Xjhz/ur5K3QmeEp03LkTR0YJ7HxzYxXm+ZhkaUugI3s2sIEZDIs15db6CZFV + R8Guu5ojkGknaD1Zp81AvqtaAOitFLMXiZ3rp0/p4lRoWSvtY7A5tBiOvM2QFOpPQBQxE8lRBrxNLxAe + 3DV2bosL57Cld2rAanUXEVBDGSabK3iV63TLNjlfLGTqux97wiQlFeBVuQT/RF6I6BShObsKgvQa/Yth + vTZtty+WpNnZZuv4LYDw2t3bIJCZoWSfXFNIxrD7To3WqqFnV5nz6Q7g92R/96vP3m5vWWOGYVJmXeME + 4KwI9j3Yxh1la5JXoTdFpIGmXd0a1T5tnIRnsqaIg0oRNBE9/ULllxY3jRK0g9fHIplMKQ3WpsxsnJeJ + q7ogNBUEf2382OzzxN+ccMNHDJZOwd4y6AazahYMGlwBECuknWC03Dg1mu2nI/7ZSciZwOCSVC9zBxRk + s1ILNEfcelrWXtg2aykEMnKc6e67XjvQ0HjCzV99/x3d95yByYJmcJkoaC+FM8WMuZrXAiMpnBQF85+K + epXqNV603k/leZYMc3npCNgAMhYlnm9DZK9edR5O69jAFCaDVda6EEDE2niKUYXBkboHNx0UNnQ3MFJV + wNMA5PnHjx988skrrn8f59vaCg0O5/3MYsMPxKrZp3OMLDjMMpmF2/d9LT4+EvO5iN6mFdnw2/u3784l + PGkGn/Uc194MKg72lpt7nJSurp2/CoIeAocf/JYD7toLz/wzxaL90BztzBGiIWWcZw07+3/HemEQpAo8 + 9SedFSkfzUuipoaTgoGyQMWYNdKsBGnlZyaqtp4RnifJw3HNfHNYL7SIZKTcFAQDQVqWErlVDeA3Ua7X + xYuGkvZPn2KfKHjpgqd3MV5HupgkRfkTSKYHIYQxMIlcsKWD9Z8lI7Tq1MR9zdoHVdnSnVEGWQxo+jhZ + AQmDIBjYSzY2D1dueEfEbZtMNAHCcfavVQ0X7xuBim7F8bL1b/AS4dtS5Sq63wWlpREioTReUT0e8XIB + eHmoVRCkJzrq6zZ8CL12WB63jyUKgaELTS2SHNRkMSP+k98UaGGn2VXL3YPELkmheSwY5pmDmn5XIBxG + LKlM2FyKxuqgdw2y0HMi9a7BxkxM6FD7p05UN87NE7s0y2aaqAFM/cbFAmTSXwjTe1DvYFxf84y2O2HT + sTCv3Lij6z+rhk0dY5iXxcLWJpjaUXtAMfck8u4P4ml1xX56CulAGMvNTJGwhfeRA0TcD03aRhVGNyHQ + aO5rTSxziln2pIkurbAZv4xe8oxQHfcf9sO++NznYs9BO5ys2h/2uh/8LP965pc2xXTXPRMrsdB+AFzx + lMvnLt2+dPOiWRsc+MM5gdtgGohPtsvXnXsAhzyoP9m37HvU+QMdcfU8gx7UNV9FpPGFJBJWcl8Pcvob + c8jopUZuVCzM7TNalF7U6NAOfpEXJgrqUlSlfRYOJyX9BEJyNRI1e9I5Y1wJr1lTcgxb82CsC4e6j6uI + ZhhSqEJOdjH3cg6zwpvMfQjtL9tUNLjKmwCXOZT2qRTKO5m+RPmt4aIbUY5eM2JTp83aQkH73bopYmCe + xqYPAFBcuSMjdBdpeMjbiGVAjq++evujbz8DwJJKrcJLpU2zwFMRCLaTouT+xvaDtU03JOvSTfYvX7SO + fJaZGQqitdnd2shGCOGiSnpF9tl7IewVm5N4zRHrkSj3tWMeRnNommBgeSsN2iP6cMZ0cLB4bXJc67jn + wJKaLvrekgX2WbvZIzGMlajmtOnDoAdrFFUFybNWMnb62a0rRe2kDWlojhvrStGJ3faYFHpe6PV45mOg + 0h9I0ebxWwPNevXNi1ZrUdCu4hEFh7C46EUT8NSPrLh5IplJl+1cgiKCrwkfixX5CYjOcZYVcioejIww + l7woGaKCISk859ZrZIreO2jNgprK5OmjANKMSQ9VjR4OOVYBUkv/oT+xwckTLHqsDB9xHv0HI+Jxnqjs + 5zhbzm5jOhKUSzYBC6bi0ly0s9FXt2+mWehRL6Qcbs5WFTIbCkbqFn86eQJvnUvnLpKnIksKzqGKSEuq + p7OyMvge6OkSiN0WIOw60hYhnqSwir5GJ0a7tLrjqHJDSoYEx1T7RJ+KrrHfB8tHVfzPikjXCxSCqMGe + KKPp8EIWlwKKMYxi1uYxi4XtjmqHCvB96AT8VgT+vb/CH4m5S61eGC2G6S9TOLc5Tmzi65QXjmWtKRD2 + 6pcv+qDFq1dPNFeI+xo9X2uKPXlyRUkKTwJmqvay5YXKCJfoeSqMJU9cXrr3l3/vt7/9k5+pPZ8REyld + AQhRlkpN43VBMzlD5PnlZ2+ePNwzYM4XKhjWIdlBUYfEizJ5sbbDqxewdVXG7MYGk0ZsRsRgzKdl5ErN + u/iIj9RVo/qQNzdWmPJI6jxGJB6gNNeYqpERB565YIin5giJ7QxRRjghG+I08w7CuM0RyAzugOUcrhPH + rCLoWeBgseSmo71HgvtWCwjJzBk3k4AF5fqyC8310gYtM7fs+p1cuRHIJv0zZoRtPehLRCwLETqX5aQS + TrHU9LUmAveWLEVwrny3JIRZI4zFcF5W4L6jZy6cZmYTriOWD5g3W3pwY7p24qSrRg0I1WLo7fYf9qMV + 8/DnckqgI6KIamucT9P4gBzrww7vj+FZEDLPnuzPKmK8L+W6OYK+51Ee/ullYgcsccXwW/jpSeL8AqEV + /4ygvszsWM73nhoOaBiiLwUH+aMMb3J5cAVCAGV1cEZNKid7K7VqXMnkaswccTYvrBd/pYNKN31CoDUX + l9jZIutSQazCmeijr6G6xA6IGuzWOVJb4ODoyOouxbSKdOu2P02stpQO5lKbC2uTkk6NSRMIY1RhI/FY + voseMo1RfK6v04D8lTYJuhcAISV8NVsKpJk0mPe62rTMpvRxUsnTTtgz+e4/+Ks/+9lPvjK4Iuebsb1O + IGR72jZ+8fOv/+W/+Cd/8oufgKxzjmqeAsg3MwqXnStrzKTQ35ryYBeCDqRopIPAJ/rVtbXFiSjG98ZY + VgNCGFFKg3JmmV8R9FxQPYJ84w8ebIHofNRSRfFNybRsNKQdZ82X0fMZSA09PG2+RJHJWCKYJcPCiPaT + uZ726SPT3LfP+qimm25Snx30JnTQJE4POmG5zq8uLSIim1x6EaCWKUvAKO+QS0HhbMa1fvknEZqLQV0Z + EginorxZIMwFZ3Jn0jBWwv22nvkTlD7OW0RZ064u3LvfGrvZhnph9dd2lzXDP7Gm3mtYf4xl9qaxyd55 + xPRHp5gLeNzVm6fw8aMvxVHvg7Or90SKP67N+TDBwtm0D3Pin3779d27dz7W4U6+LyFWQ8AU0ijm6kKs + rD9zupsBYKMv7Kkt/9OektyPKM/TRNNkXrZvNiPELBJ0/Iu8MAAvMkL/j3E4hR2d1POzzp9zJ5QUWkQ8 + z1ZDjYZuwN3hUElk3oxx6kxpdNzP9bVK7UylRgn2Wf5cHD9VkMqGbRYL04k7FtZoxJ4z2UeQWWg9K2ih + dxCEcOvGmDEzCCC01vtKnyaXOFtTnDwyW3KLZLElhVJ7RmbZ0jVgRscjuK3saxYd1Qso9SnN73/x579+ + /uxhbtxS0hgWqH/mC9WjEnGqAwhC2LE/+c92DIbQuvEh08z+P/0P/81Pvvvc3dXdMsaZZ3168U//qFUp + DLJ6TASrkRB4+flnr16+fMT2YgLwWnvx7BEubh4PiRW4YPfHfgk/c8JBO9nRycnmki4JZDAgi6FLBQtz + xErUAlsf/dRWTZcGzlYvnj2+eeN61ciYyuzyJY6Z3wo6hYgZgFZE9KvS6g5atzeXVgmuPIWpRUFvnHAF + ol/mqYipFKgtH6mSq9TohCYVnE0gLR9s2WFP/oRLBRfngxEbcPzV8MTnLiGNqVjYSoNZQczlmLcCZ8W3 + MneBRnl77vS54wPhx1rl/wD7+QO/Kdz5tjc3atNI/cqPSrP75zGeQHFO1Kfn/XZu1bwwZTWtrOgb1TJh + oUMLy9/iQRMPu7C2BYwRNvqkT4WRIlWGH12BPG4J1s3ryY7mldmSQrO9kPhbHcETOkgygeosgxMxGgET + 0xQsLGqamhRGc6EaCrOtcNJZkWuZLWQuc2DdZBQOC7etcVoHfcicJho2SX1vtw+phXNrc2+VONX83tB3 + XLu8ubny/S++e/H80dbmKgiUQFj6DufkRpE/leIiZtPMiGBYYEPNYczhRIljDRuMyfUefAMhY1NNq9LL + dV5ipIN+EQJ2HslZs0lrRlyI3g+h5gB1pf+hAd78d2QuPJ4aJi2sTyM65VtpEGDDQOCv/u5v93Y2rCsm + RDGXzWorbjl0N4jo0MWkj7YLnawKTPuM53/SAKdlmtSeJgm+c9Mp0AiJyDVtYL1XnWdvk9JgV4q6drOI + mRt732h85YUR//Ux9IOtREaKSNBJVQ3EYmbZWRhRqvtoZ/ALzAtN42Pscmt8jHK+hEn2w/vimsNRjreo + 6Davce5wRMiGGBmvXnrHQqFgEp0nSMW21te319ep69cwumR+NKmbvFzEVS6ADRcTIHNZ0yOxguUieNBq + mQjZUHOSFDZEJC+kj1A0admpveHmYTMFIIH3HwCW3vcl+AIITz446Yz86W/urXG6M1Sl9nXUkIeTdCY7 + r19ZhksZK5WTajhN+vlW0sKUL0f5ehSO1lzQcc7nitnp69sVzVhcCVyDXN30O1RSNOlQs5txKwpFpgfp + ZWpIa6tADJQZsLBQQyYcB88YW7qysljkA0LEKjTo606BwOjiKnA4zMeJYqGRpZb2MdSGxXGSKbaqYcdC + rbC13X4Ewmm/mnKUaJ+4brkLvfBGyu1tMTXJMSAwsg6VzcwsAKYRhvn4zZtX3r55+he/+w3QxWLdxai3 + gnGdpIYg7v7DbdwAMhecZGnsAZj8za9/8ubNU8vDZvLCCoRzUz3boR8nLgGicxv12lsg8kW1AduzlBu3 + 2d1h5B0awplsnxfV6RRopIPsHK+fwfEuMsJAx3SNUSGQ3pJPP3klp1l9fTmuUpmi4x8dES0XNEXoBVAQ + EHJzmcG0di4vyoOgaXN7iJYJnaghEx3k0GkxX+eRDVioMFHGFBk4gojmp3/BZq2wZ8e5sJUhO+RkDiws + 5QlFrIpEQxrjl6qu08RCXscP8FxTz3QgzNWDKx0gxFjTK3zxM1KjpghVJF3QcbJGzfKSB3GhBz7edmHt + hD6SF7HMAXlhTuybRSCOkY8k1+X3hagjt58kv0duP3cDog8itPT55Htcc1mYWDsW0j9yhQ6L+Pb2+sL9 + u7Ofs3VzXpp2c46JYOcNRBqMsZViqCkjWrecnIWzEmedqfrNoS4vLRAzZnEgo0WlhnzUqHJ6jbDM74Vx + IX8qnEy35K78THKkqRetSWFYbzeatCSLtqBk7CwGdVSch4i0qdV7z9ZQvCkqBq1iQZOalLSbd3OftUzm + IE0xGESZtBU+spy5TtZ8lgUnlZ1mb0LBAMKAw6s3XDuTiv/aX5GQaXCCRoZJe45JadJd0QtApWbWCcas + scXQ9vBkCZby7g0ySNzUqOzPsqlKy6wf8dGu2eLcuYFAZm15EXlLbqwqY9QmrQfffEonu6JFUlM1kmUt + GaE3hCCFvXsTPQtHoopgymWzL1DDjbNkKCyspVZ9YvsPdt69eU6bYM8Lx/FYhp1hpW2wh06HT8CBqhtq + 8xVztPsPtvET9upgH+askEiPpEamcqFVOKPkj3MGPyOAcygQttRwtNKeuIkOzRI6+Y+8TbgWC7tv27zr + iYpbeWH7HeV/nsv1vrOzwbsoutCIeusjWiKST1IcfADC2cNsCvS7UKDnkTN54VQaU4o787HiKKjSSHoN + XeJOIqI31CO0ndtmzodCkx/H+mH4dOSzEC+tLC+xemnLg0CRw8BR5Ma16wftkA1AQc9l7QfN3LdffL62 + smwfN6ZzAOHxhtpzWsEi0NVw5JHPbsAx3Lx54/BB82aL1N5s3QPnxLOn+0+ePJhNav0tVHJg0mQ67Tmd + YOHsBzuempYFTxoqJvFZKxDGKc61Z9ajmrfSf7rRmuGiMsfmMlOuLksjxZrmgzPSNV3YYX7Bd4HmraFd + Dt3ud1QadHQc7GYaO5om/dl0P2tnPPh6zNX1tbi+B/useowC4MJJiaATpGqo6IngbOFQj0ywcAS5khqG + 72hvfcstlReqFyLbDZXwJXIol3LZyGV7sBXYKnhkibHd6R0OE0GKoFSQph3u723/8rtvP3nxnFW9Vg0j + jfOcb3tjFYs4JY7RBRH9kYltdgeWVaCYNxpCmPTLrkYIBOqiFzAqfx4rtIzw2p1bTO0wK/P8oMinkcaw + n2Shs2s+K4X8Keyzr6op/nyWCZPxBtG/ePcaNz5PCmeNY1JaHAGTxFZ5OvESd28bmyoq3tJQThfzeRia + fEroNmkEmkJgQ8FuPSHi5CBc1IVWK/G6EtsFmCWMKAcq/+Ov9+7ephlDU04Fb+3HrnRWb6neGgTGQuHr + TJJMI8ixgCUAABxFSURBVCL6v2xMzSVaoExkUCt/BQtrTH8EEzmLfwcgIvsBbkA0ftvY3gKHl4zPnfs0 + PjWC4NnV+SCcsLYPC5yPCyTkOpDxov6EWKxps++YJY6ricjwSHySxgOwYQEth31cOhcYe/po/86tW0e+ + 0OwGYC2dA5ydBz2XdXp3Z4tYbHYDZVqT52YSNm/7iBvqn2o5MB/P3LHemdzXKTsvdovCgB9JC/iaZ26S + oq1CEEFirRfqyhkRMVSjugKzMlGD1rySWRRuuZlfPtJgL652/bPdsmRorJHpYqZzagZJnjcsT8ozhpGT + MmFVzbT759Vur1yQZZFcgZU3/9n4tOwy7GN6yA6vWwO+mboBEkR3WpQ7EJb7lvoExdc2GP4aApAGewUC + hzxpQBd1Eegp+IpZc31LEPWgyoEp1wzkU8XRUVCP2AZ3bjx9tPd3//Zv3rx4ikBmBMKoKQIeMkoVVvlr + 9bQ172e+2IGwiYBilERIZFsBtWTPSpoFhLzO6v3FZRxOiZr7R9d1MZMOltrTObHKExBm14TiGxJi/6Jb + OqhcMIqCw5xLywIbCsaeGc903adDR+bnARnzmJxrTUnzBAhrdbD0zts5z4oha8AZ5BtcmRL86p3Gdsr7 + KX8GE6gMVf36zeBVWNiDYI4AP0KW6FIl8b82tcHswiLIZDcaS+erjyirjnxjXtTRiXsoY5eXF5XbzBYI + 5yHiZAUlX7LyHz9UdCl3YJXWcsR5izfHxXfOdKHjDFVgFZfWVFz5AWjcX4Z9YucAXAkFreXu1GlihIP6 + MY4DZewKffRhnXla8g/+4W+cGccHfu2JTwkLjiMNSHnLXAkHddBPDkpwXuW7Bx25zh2dNy3/q//qmJjZ + Yckas/g8Bwi5CJeXF0CihoGDPKyd37Jem6BgXCe63rzgkJ25ygXjkjM9WilRZO9E1ggVH8wGuRURZ2dT + 8CROcLdV62PbiiqhNxSm9UwzXcv+wu4AORCkTQoBpIkKA9UcCBHQRjpYVPV9ur28uNgSWy/Vq2SclkDY + spOxsz69SYvcw9sNpS9N1WgkUoUqrKlh7zFPzADVmNkEDVifIjCrWs1GqAJ++pM6NGyAMNMzYC/XVhZA + 0wQwQVruITG1ZXWd4Yyn3Aj9i54oPLND0ltrihieHhqiNkq+dUcUCwI3Dr2HrwBrlhVZhX99rGDxixnY + aeloGhBG1MKXxSuiiEmxqEqDXh28KPArntpJFehOZ9TZZun+/ft3Gc4uXWj6qNnJyWr55PEetW0TakZH + rPxFh1srh+esJbsiUDUiDePESzfR1jUxTfsyF8zrS128HI8i0RaVEpsmNRrXaWF9+l2PbkM9x32D00IO + NQ6pdtDXNDHC7lysShSeq9C0mpMrGjtivgdEt4DjsMX8KMzgU/32m89//cuf3rqJep8E8YAxf3w+Tx4+ + fPn06ZHUKAznz3/6zf7DHQ5LH8jhh8hfUaFvra1trePQf/XIjY+5Aa/LCXIIYAC9sCbH12Qe83VZS7Y3 + NshAjrN94tbcjTkTOav0Dc6a3czFN941PqhGTPBlmqwk3FYLQNrpJYddsaAFCAe96CQvBILu3r0tMPaf + UMfEP06ddBQxRrqwIm0up8vMuLwJTfhdhTN+7VlKNzcpnFsgFBBWBc0EGo0UKqMKSxOFLShyYqt+bK2z + fra5sKtJSQ2Fcyx8ky5D0244zTVKZqSU6ZL6NJ8UHaq1FWzQdAInSMNoRvpGx0Kt7D0FrE3f+lOR1TRK + MJK8yBElpxwFli19bGKTRMTcLJK27uGSFGugLETlg71N1SOtEHj7hgOVErKed6YdmuWO+LF5ijmmer7D + ciTayQCE3SAmGODaF6gS6UzRNGqE+hh9rERpU7GPeuoaI/CjQKjGFTXG5JfFg7wXfrfIxtskphXBGUbU + uybqCUNJ0a3VhpknOgM5kfZ2N9DyVIK02kFUhl9neMqnebr1ybuMZXLz68vEaBrDVKoPppYxno+GNnfA + 163EqZ0XzWu28To13lUfIYhrBlJuHtMWiSags6e3vLD/raSJHDcrjDLCDOXzbq51dT3X2uVL3Uf4Yc9k + li+fP+E7dn3oAbvlzaFAuXPr9pHAhgPkZ5++QqR7/KPj4wNfOfUm6SafLOvmka94/BfKLdknPBsl8IOe + yxKOOyjFqffdOR/okeGJ9skxcOYeVLBkP1BIdFbUb3oW15X++Yni++TV3c0dVpnVT4lpObHsvuXK1685 + pLU/acCztQ0Ncy+V3pUTNzWl07YKtmJ6BrdWM5hcJxYPcUmzAnBI2YfExhzJ9uY6MWnNBSdBa1zkkQv2 + CPdQHU3abeTwwrkWMxFra4mZ6bIPslQKUlbAxXt3OWmcMo3VzdCR1XMUyte1svRUtLaKobPC2NRk3khT + NAYvh+FpfW986dBxWPAy4aHlhYU8bORnwGQDDGVaEweyloE58CS96WKW6Q0qFYagYl7VsDi29f5Cck0m + WmBMqgQxM8sbZbdd9tLQNFtEclhxhfMJ8pVPSTqjFMuYmpRkS5MldGtymI6FzS/GskO2h79lJ7Wmq+qg + Ipiuh2qUwMCIhvdQTwRbv2BO3E1o1AlmvCiW19k7WJt8ajpYwzv5riUQzq0FtmDRBKI81/XNAXhNC9o7 + eisKFo50YitjF/JYGrQVgkeAUvJRiUK99n8Ghk8qULu0+V9bScqKEusJG9Ai+2BzG3KyxeWx7k6Ufbka + d8YLHvMS1wueAEdnXO+7mP/g7T8GSPNWN5iL9uhBymd+8GG9xw7cKfvKRZyy5+WMfLukR9S332OP46Z+ + utgpclDOyua8cZBSG+hcOU5lVK9j3PKZs6zPaNom9UJ2qPxSGSEnEMOV7t+9h6QAOgo6RIFYcho6s2ei + vI6RyvsBM0UtjR2FJLGGXPEks9VB8TAQV0w3lPHNqJSJJl+uWLGRdqk3wXeyOoUIsjYpZ06zZBiqmbFq + mA31vT2Z/bP2sQIWarT1NZfJqGymaauTjND/2a3XUl4/Gk5aanjlSugJ23paXZsvYt4dyzRSUk9K0CtC + +7Aiwzdy01o/sSetlqQVS8ZxhgYGPEJOY7JS78DLRKrNuEhQDFjNpLBTlBM47NXHngUWkjYeJAsECHnd + Jq7xjLCpe8Y+kOwJiTRR4Br7bPCWHSOzqqIaQNhmHkbA2jJecW0J4+keSTg12kQxfXKWFf/UdN86XoZ+ + UIU4Kgnn76FTsEqLx1NFotA8eQSBapMQ2eCnVnD4wj+dzNI8g5QK19wp4pyGX0oaZtscQxoTQ5fOMKHQ + rhN+k7RwDBOFmgqAwYtG728Hv46CrTSoS9s8pK5c5ki0UPAKS3cXSP61ICRvpMVk/DE4ZO24cxM3VLNP + q5G3VrN5CUDXDMIjQn/rZSbM2c72xrdff85fP3ihPtYT7YX9Yzhka3vnuIB/0A+KRFbJHzKVicZjElkO + sb4+B3zGPHEO+/Hqrplxzt0Iiu/Xv/rJ3t7W5K86jz/ovU6fxId2BkP09sOpiQENXO7BO59zqJSuoD3q + UwR+7q4UqTbX4oO9nZXFRa5TbuNpaqfgCIFxWus/eY6Xcz2AkCvt5pXrsEdFVzaHaXGglHa0A2GSn5X/ + zPJ+lbrlllzZLCMJhM4apXami0XTv9+D6+i1Z53d2V6nV0yrz1g+ND8qHtFip4WsLmcpn0kpaUrnM29o + Upo+l6ekjDG+IOFNd0BKjorJXCReS0v38Q6liTBQMDi9YYQhK37VRgohDAai3TDSI9Dowe6mwFW6EjUz + lHlPQ3tiE5oKIzvXalKUuzdpmVBrfyKlF9JsVGHU9pr5mYlc1PA+Fv8y5zPruJuhd9UL2aTilcX1FcbP + W2Wu62PHbK9mzIlzkR02ILx/9/bOxjpyxzEd7KXBKoQJmjo6W5LfzkQwgXBSF8zwaGALCuzVenOYNhgK + ct5eRHJ8DSdXM0VD2HP1qjQyrCRYwPDtW75YqH5VwZMIzVN9hhEdR+9GQcFrCh5QgsJ0waqc4VgYBcIJ + NZopYKt6pFLUFn9f/0MukBv4mn+SC4WrsELgBAAVcOu38K6tJyGWmYuC2kmuafWfAsIk5Lj/4x999df/ + 4O9RAf0oa/KBOzFEOT1nWm99Ah+6iz8/JEnk/ZIxUHQ8ztuwMMTXSG3MsbEsbq6urS4uT4CQLYlmjrPP + g7ZhaeO6mmAeVCvQSJD1Q/acz4WV5YSffG6TyOhwlVSyCpPziRNXnRuKYDx8s6vOvHfPninx2BzJTI3v + BIQ1BWy5oLiR01cukMdZqld/SoFw0J5NwtLZf3YitOSFg3ameyqqoXjacc/6SAGG726ivmPts/bnK2SE + fcBbhUPWqcePd2H7azg/mxdKFpGlo0wUUl6fbdcVCMW5BRCWpDCX9dXVBV6dvvXWZTGbFBZH6bFalmbT + ShChBxG2kBcKP2QKk0hz44Z72TSkyWqfEZgzJCoZKl6jrpysAHmF6w2AbAgX4JcM6gwQBn5LiuKmLYHK + i/fv7hIILBn72lHQ30XCZxZQa6pX4XD+Bt04prcGVruDxoIWD4RinJYK4TpxXt+793LgwzJwBmMKKBO1 + uHHWff7pm5fPHpsHjcfQPvnSPLEFda9ePvnss9csKfILrHAYp3dLGUE1WTslHGYQmZeSt9gH0VKvr5YC + RnWwlQm7kG32ErYU8Oz5Gxev8Vuxcr0ZU3rxIvn2LB2am1VRDKsQx337Jov9DckaJvKF2RU11p0DJB6t + fIguAXq29+PN7mc21/zw1Vs530FQpzz4g/eudfaQpyPA43oB8/iGTYepqpjziia94ss/hlrngw+vPpHr + h2ayw/Pjj/JCB+1kBiaHz62w7akOtdNXe+Pg8VE0bU78VMnWXF70JOnvtWtYp06k0vPQER8mGdA0jWiJ + OpOHGSSjh+DikAXaqpF0aGmiUh+FNxQGoXT2LKJBMKCaVFX1weDl4SF5MqWspza99s4NPZJJYaaGFfNy + HUyH7qqq0IrZmiuip2JWwTihQL1eVcWNkzH32XExDDKMvLAMXlD1sWpwrFznNKmaJXrm53hTRTQdU6/j + 5nzdjHuW7yfgJTgJ6jLFbMVFe5VWEYyhiYbN3hPSeNrgZsXZ8qDvp7cAJqoJC5X2TW6TpsDMFzvnPDhr + D3Y/WQVs3ni9AbRIf6f98v7VG5fCs169ePKzH3/NdcTJU+Mk/qoyc3FvsMuB0s/f+tXPnuzvzRQFY7Im + ZCNfiodu06iusaYe8J09y1dHfz/rT6+vO+hVXJx/TWXnUtChk+4Ig8NJUqiL9/L5i9cvXgWdbZktY+iV + lpHF37hqPhsTSqkmhTVAZ3lAbE872VyBxSQL5InEHE+f7uOn+je43g7rMBDIpD1ulf8UXAvnDxKD8HgW + wA5a2Y0e9MEZB25w6uTW1vqb18+tg/7UaUIxIqT++f4AAP6BiKVsyWvU53yA1mHv4r1ea25UUd/oQffb + q3RBFCcfPgNqieGL0inY+IoIyuqJm6GfpdSnT8G8UyjN8vgQFXZfCTsT2DmhLqvAeFF1OlTkjP/4ndLb + KxHNKKUJyagnslZiqQzqsEAMnYVpUjq4NQqhqzavW1uN9v8tkJ9So+qJ7oWiej/FFJcv0mzAOhXamRjt + OwBhFKUsKWxzKnzVhn60BnCvDk5uDmxJG3Y4bOKaRpAOipupwaZwZWdrnWbzmnvR5+cKz45GDk4mEFVm + yZ2GjpU49fS09f4nEFonlStWAlydtk1Iy4Jll8hG5lfkoM0aeywNBhyWYCKGSAj8EgsbRtog5ZyvVNok + XLLUpimlLsYa+0IgE6rg2Yw/fdSIyN+9fUGW3MlzwM+59Lk3ckpTkPpfyxnYBVxZIxxzwamVBNcu+1lc + uA9g57UA65qXxpF0S2kgVC9TNjgNDfVCxCR+uIvRDEpLAuK2OESqxp+K7eJkFbE1jP9zeIqk9VwrYbpm + gsi2tYrFYpVAaK/u1jOECMhHtrfWj1wP32t1/fCNEeszeNbct5PoPXnSRlxdpjPxkD68YOcOTxZBQaNV + D04IebqKvXoDhEW3btAR8eEJ6Id/EDPPJExT5Ztz9Jg60vd69QPOgP6w7vHSiH3T1kAqGD4x7tjJ9ODB + ztYmp/Lq6pI+RpESLS1MyUwCZOdAJEVrtH7Vl+pSydTQLy2vJvjttHF0t1C0NpdRlwMIBQPwhImtajii + YOjcah1xFghbgXCiHa2T2zTRsIxqGru1cmGq+Jf9hUoKJ/LRyAXLqKaSKV5kTi/kKqtq09xPnUgD5Czz + E+bZbz6rp0/2mNhARjXXki3TOy36hRisaWLIUG2D1KD2fnwT5tCFBm9cpDdXoGRpcwS6KvDAXkJacjB6 + uZKxSX3TELG1NKTclA6ThTtE/G7/5lOlMsXMzLW8kO9cO8kh8kXzWREuAS9jBSKJxMWD6oKNC+3DdVvr + Z0pDmwdCqHxj3mTtk7EAyM327kDqYbFUtDBNKaqTZLArSlCsnn/eL2jQxY+CM93mYaG6JvpfLd1ozqK+ + PXNPLfASLmaOOBcO47rryNcvwxn+JlPDWATYYHV1ERssqiqJdSmsm8jrRjC0pY6sbm1thQ+wxd+2XrGq + kBli0qQm8rqWs16R9vBXLV96oRK7/40u+xyMdY6UEiCH4/q9wzQjs6nue2HA7MZ8LnCk1vF97aN1Iv7A + Q/oDP53zlxanbORPPOSCWVy8n92fik64dIU6iM22Ntd+8uOvYLoItXoy3X1K51QKZ9NEPVKZkEwQMwtU + rMg/QcGlpQUvUlpUuL+7+2hvjzCw5YVBzrREsItoJohYqoaDfUbo6LyPkkDk7q1bt2/CalYUdL60rTV1 + PSrQ2F2PC6PVo/uqmpmVkg5KQs8LlXxwhxxL89BdR0p1MPQytYmiZn7gE1658mVuUsa20EefeDCECWOB + DcV6ZkIhOiLmQIbo0BjyyBtXaXhgypIs2XqmKPArlcgiT43sbbbJLxoZoyN+0sihZ/WDCf7WMl2rWU7o + Tdb3laWFqqBRuMCwEcqWB+XNAYfF6DU/4dIsmIMkE/O6YSyble90MI4hqYMduW4KzCE2anSoeNHslIj7 + SbwL/9pJGKQoGtFWKTQpqcNeNAJNRDHGi0gGWjoIeYprSkXJzQ7d7SxLiz6rkC3C0MaIRrEwK/21ZMh9 + XoWXUA0rUbAtCLkmZMDc6yy+/2It6qsPD3huA4UWa1hiIUCICpQclDd10Or6w5MgQzRXzn+cBdw/oJBj + TPbY9bEfpKCZe3zEY198/vb162ekXwe9gZWVpZcvnmb6+HHe5x/NXhzewponD0q53WhPajIizr/8orkC + +fS46hIFJ7Fb/WdRh8bD7fLITDG4kSKcSZlZZIReuogUEIR+tLe7u7mpBFE3Xbr1fr2Y517bdRXIuTM8 + SNF++f4CPnkCwgylW8QdGoTSrdXHUzSJabeemRBctQ4U8lHvo0gpqQByAooIQcm0WLtTlNGKUhp9PqgZ + W1d+tyQVdmqK7Cy8QWYCVAXSDhx2WJ+bzeYzmDdHjDphJmeb2Wc3sAJhM0KTxLTC23C/859hsppprgBv + f3fnuy8+31pfGdtI6DC5w8SoWfZ4Un+NaMPdtHHD8XBkSAFL90v0C6bodza4se+3SGPEcJZcsJKiQ4Ew + TqQoRXc7+F7SduQj+nn0cBcCkBdKzr+e3mAQGRVMGM3ychYVOzJoYUCpclm1i0ujl+YIue3Ca10TjQuN + ELZSo40jjQi4rANo8k/Rfobcr6PfHIu17G/ubJPgJ6UuqcRsj1sPtK9dvXeiZpM/fDHmgC+do/Z57fzp + kNj80H1yuG7MWnSuDfbMRxTK832G+h55NKzm0C6H+5qCgj/98dcfsVx35FEdZwN322Im5HG2nbPNMSOX + ZDvbLvL1hhe2umY4/nV2FJZ7a3WNIlVBxJ4mViZkJEPmEKSzZEu7YiV77ijoj3u5sBtezJlfnwTpCIQ9 + OraFybu1AvlG05kkoBwmVSyc32gI+SOTNg/kh7xwgMMYZzjV0Nc1tDaoKR2h2PbyxROMBRwI3YM7Otus + akVs15ru0/HSwHIKhFcvIbwEZYEcOUpXgJmz/RwclZQmiojSv3jyd5mUmsTavcpitm2mcRU77X6t5NVh + UlER7O0ZjdIMz5cEvFmCt77TtZWl/d1tPjHVR5sKJocoTZPm/EiVLMYnefUSLfNgp7w9RwOE/s+J7nci + E40op1hpk/gS4vD56wwpApluY1sSwVlaPs5SO80cCFH/vXj6eG9niwwvZKIzFoNsTI8UJ3ktFiQWcl5D + Q3iFPtskBgcZSRny6pu9QusjLUdshcAmCHc2SCG3/Z+AE0Hp1fOXlVq1n2kvlj/eUVAQqAd5AeprdZSu + Hm/Buv1Xu/3AdfOAp4FNACFHDlU8f5O0D/2AFyZSuXGFduWLAewnThoKfuz3cOSB/T4+uCNf9PANWPh/ + 9M3nP/vpt7PwrBLjkZ9S3WCy8eT95j/b+deoBz9E/RUUYGVQIKbvh1P9webOb376s+2NNWPAxx+lfdVu + jSuKU8WDSrs2MmzM0HK80uxKgvGAmCXFySKi+BaWJ0l4jBEtkplGkEbY2wnSwVzKWF+LnVHS9Bb7wZWb + tYN1MJu0mmpmgEP377AYn6IFLa3aPm+DMrDUh7SwTlLDzA4x2WKcLzye5SKuyyc1+erzdw92t7JwxaoN + CPFPtvGhslYglJpD2FmBLdMgapB0LygjnL3VstnhuCjpSqUlad++jRCw1BcdaHmViovpDGeunp1NVevF + 7HT4Yns24T9LpXMqDc13ASwDzzqkLK9aPq3bVeaw32bgVOtoNFsZgWIIZMp4yGYWE82CNl+3t8G0mm74 + qndHhcqHc0rwlr/88u2Pf/wF4QjnUuSFVAdL2FR1WHTZZR1aRH2hJYK35xGuDnK+HEMtOJywo+ZcUXLB + ioJrC0u//f4X//yf/PXPvvuGdroaVnKVETCuLi7tb+/y3bYR88GLThBRVzoPgqw0gLT2QQW7/rvp41gh + uKpJdc6fMT05PxO+tC4hvkFSUbEQkRWwR+sG8RaAXJ1yURJe/sC1d+7TTZxzuCaFtjkusw96eeusvH3t + Jt/77+PQ/63eJ2fM7vYmYyjK6RDueXbNnP/wT4xlmAieE/fw0KmCpc5gO8X7qWpam7Wl5Yd7OwSVejii + wbZNKQwYv8/k2K++fIc8sl0ATqo0Zxk9V9dY0iz0d7948ZjlXsCZeSEXfP1nIGIbKFolALkuVGnAJEdU + vaSngADtJaJWs/Mokjz1WtThvUFbbawuf/PFZ0uLC9llMaoh0j3rHGkTkHYPfmKkSZMj5VJ69/YljdJh + 2WxTzg3q2jJtMwuZGshMSiSaLIPWYHf3ZvzV5x5Uui8FkGIOZ1HQN66K02hDTCycgGJ4vDW1y4RBHSnN + yDvnkbRduSNYNUdWDLBdeiOUHfY8D7nrBmnEmqh/8/o1PuqWEQb4ZWs8m1FY3dkxn4StrbXlpXuzibjS + wXT5meSFpJs+YNK6I1LflDnihBVn0WYK9OvXT3m5WjxO8qBAYHdsmBDytZknqfvCiIbLdjxy6IglYSEn + 90+//frf/K//8//7//zf/8v/+N+/fvFUV6IEMlxu9G3+6c++/8vf/OnexpZMt/XXMfNr16wvDiRMDKN3 + 61BDOMXrcnVO2BNiTQ1kxoHyLlY4g4EP1HLN85QXZuo3izj1EW2Yi9gHwdOBAPL/AbYzCLUOCazNAAAA + AElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/Step03.csproj b/Source Code updated 08-12-05/Spacewar3D/Step03/Step03.csproj new file mode 100644 index 0000000..86aaae5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/Step03.csproj @@ -0,0 +1,271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/Step03.sln b/Source Code updated 08-12-05/Spacewar3D/Step03/Step03.sln new file mode 100644 index 0000000..f339e83 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/Step03.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Step03", "Step03.csproj", "{DE8FEF2E-6E28-4456-9712-68437802A747}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.ActiveCfg = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.Build.0 = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.ActiveCfg = Release|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/d3dapp.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/d3dapp.cs new file mode 100644 index 0000000..9384434 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/d3dapp.cs @@ -0,0 +1,1517 @@ +//----------------------------------------------------------------------------- +// File: D3DApp.cs +// +// Desc: Application class for the Direct3D samples framework library. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + +/// +/// The base class for all the graphics (D3D) samples, it derives from windows forms +/// +public class GraphicsSample : System.Windows.Forms.Form { + #region Menu Information + // The menu items that *all* samples will need + protected System.Windows.Forms.MainMenu mnuMain; + protected System.Windows.Forms.MenuItem mnuFile; + private System.Windows.Forms.MenuItem mnuGo; + private System.Windows.Forms.MenuItem mnuSingle; + private System.Windows.Forms.MenuItem mnuBreak1; + private System.Windows.Forms.MenuItem mnuChange; + private System.Windows.Forms.MenuItem mnuBreak2; + protected System.Windows.Forms.MenuItem mnuExit; + #endregion + + // The window we will render too + private System.Windows.Forms.Control ourRenderTarget; + // Should we use the default windows + protected bool isUsingMenus = true; + + // We need to keep track of our enumeration settings + protected D3DEnumeration enumerationSettings = new D3DEnumeration(); + protected D3DSettings graphicsSettings = new D3DSettings(); + private bool isMaximized = false; // Are we maximized? + private bool isHandlingSizeChanges = true; // Are we handling size changes? + private bool isClosing = false; // Are we closing? + private bool isChangingFormStyle = false; // Are we changing the forms style? + private bool isWindowActive = true; // Are we waiting for got focus? + + private float lastTime = 0.0f; // The last time + private int frames = 0; // Number of frames since our last update + private int appPausedCount = 0; // How many times has the app been paused (and when can it resume)? + + // Internal variables for the state of the app + protected bool windowed; + protected bool active; + protected bool ready; + protected bool hasFocus; + protected bool isMultiThreaded = false; + + // Internal variables used for timing + protected bool frameMoving; + protected bool singleStep; + // Main objects used for creating and rendering the 3D scene + protected PresentParameters presentParams = new PresentParameters(); // Parameters for CreateDevice/Reset + protected Device device; // The rendering device + protected RenderStateManager renderState; + protected SamplerStateManagerCollection sampleState; + protected TextureStateManagerCollection textureStates; + private Caps graphicsCaps; // Caps for the device + protected Caps Caps { get { return graphicsCaps; } } + private CreateFlags behavior; // Indicate sw or hw vertex processing + protected BehaviorFlags BehaviorFlags { get { return new BehaviorFlags(behavior); } } + protected System.Windows.Forms.Control RenderTarget { get { return ourRenderTarget; } set { ourRenderTarget = value; } } + + // Variables for timing + protected float appTime; // Current time in seconds + protected float elapsedTime; // Time elapsed since last frame + protected float framePerSecond; // Instanteous frame rate + protected string deviceStats;// String to hold D3D device stats + protected string frameStats; // String to hold frame stats + + private bool deviceLost = false; + + // Overridable variables for the app + private int minDepthBits; // Minimum number of bits needed in depth buffer + protected int MinDepthBits { get { return minDepthBits; } set { minDepthBits = value; enumerationSettings.AppMinDepthBits = value;} } + private int minStencilBits; // Minimum number of bits needed in stencil buffer + protected int MinStencilBits { get { return minStencilBits; } set { minStencilBits = value; enumerationSettings.AppMinStencilBits = value;} } + protected bool showCursorWhenFullscreen; // Whether to show cursor when fullscreen + protected bool clipCursorWhenFullscreen; // Whether to limit cursor pos when fullscreen + protected bool startFullscreen; // Whether to start up the app in fullscreen mode + + private System.Drawing.Size storedSize; + private System.Drawing.Point storedLocation; + + // Overridable functions for the 3D scene created by the app + protected virtual bool ConfirmDevice(Caps caps, VertexProcessingType vertexProcessingType, + Format adapterFormat, Format backBufferFormat) { return true; } + protected virtual void OneTimeSceneInitialization() { /* Do Nothing */ } + protected virtual void InitializeDeviceObjects() { /* Do Nothing */ } + protected virtual void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void FrameMove() { /* Do Nothing */ } + protected virtual void Render() { /* Do Nothing */ } + protected virtual void InvalidateDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void DeleteDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + + + + + /// + /// Constructor + /// + public GraphicsSample() { + device = null; + active = false; + ready = false; + hasFocus = false; + behavior = 0; + + ourRenderTarget = this; + frameMoving = true; + singleStep = false; + framePerSecond = 0.0f; + deviceStats = null; + frameStats = null; + + this.Text = "D3D9 Sample"; + this.ClientSize = new System.Drawing.Size(400,300); + this.KeyPreview = true; + + minDepthBits = 16; + minStencilBits = 0; + showCursorWhenFullscreen = false; + startFullscreen = false; + + // When clipCursorWhenFullscreen is TRUE, the cursor is limited to + // the device window when the app goes fullscreen. This prevents users + // from accidentally clicking outside the app window on a multimon system. + // This flag is turned off by default for debug builds, since it makes + // multimon debugging difficult. +#if (DEBUG) + clipCursorWhenFullscreen = false; +#else + clipCursorWhenFullscreen = true; +#endif + InitializeComponent(); + } + + + + + /// + /// Picks the best graphics device, and initializes it + /// + /// true if a good device was found, false otherwise + public bool CreateGraphicsSample() { + enumerationSettings.ConfirmDeviceCallback = new D3DEnumeration.ConfirmDeviceCallbackType(this.ConfirmDevice); + enumerationSettings.Enumerate(); + + if (ourRenderTarget.Cursor == null) { + // Set up a default cursor + ourRenderTarget.Cursor = System.Windows.Forms.Cursors.Default; + } + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + + try { + ChooseInitialSettings(); + + // Initialize the application timer + DXUtil.Timer(DirectXTimer.Start); + // Initialize the app's custom scene stuff + OneTimeSceneInitialization(); + // Initialize the 3D environment for the app + InitializeEnvironment(); + } + catch (SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + return false; + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + return false; + } + + // The app is ready to go + ready = true; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available windowed mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestWindowedMode(bool doesRequireHardware, bool doesRequireReference) { + // Get display mode of primary adapter (which is assumed to be where the window + // will appear) + DisplayMode primaryDesktopDisplayMode = Manager.Adapters[0].CurrentDisplayMode; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + if (!deviceCombo.IsWindowed) + continue; + if (deviceCombo.AdapterFormat != primaryDesktopDisplayMode.Format) + continue; + + // If we haven't found a compatible DeviceCombo yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + deviceCombo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + // This windowed device combo looks great -- take it + goto EndWindowedDeviceComboSearch; + } + // Otherwise keep looking for a better windowed device combo + } + } + } + } + + EndWindowedDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + graphicsSettings.WindowedAdapterInfo = bestAdapterInfo; + graphicsSettings.WindowedDeviceInfo = bestDeviceInfo; + graphicsSettings.WindowedDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = true; + graphicsSettings.WindowedDisplayMode = primaryDesktopDisplayMode; + graphicsSettings.WindowedWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + graphicsSettings.WindowedHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.WindowedDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.WindowedMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.WindowedMultisampleQuality = 0; + graphicsSettings.WindowedVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.WindowedPresentInterval = (PresentInterval)bestDeviceCombo.PresentIntervalList[0]; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available fullscreen mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestFullscreenMode(bool doesRequireHardware, bool doesRequireReference) { + // For fullscreen, default to first HAL DeviceCombo that supports the current desktop + // display mode, or any display mode if HAL is not compatible with the desktop mode, or + // non-HAL if no HAL is available + DisplayMode adapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestAdapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestDisplayMode = new DisplayMode(); + bestAdapterDesktopDisplayMode.Width = 0; + bestAdapterDesktopDisplayMode.Height = 0; + bestAdapterDesktopDisplayMode.Format = 0; + bestAdapterDesktopDisplayMode.RefreshRate = 0; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + adapterDesktopDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + bool adapterMatchesDesktop = (deviceCombo.AdapterFormat == adapterDesktopDisplayMode.Format); + if (deviceCombo.IsWindowed) + continue; + + // If we haven't found a compatible set yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + bestDeviceCombo.DevType == DeviceType.Hardware && bestDeviceCombo.AdapterFormat != adapterDesktopDisplayMode.Format && adapterMatchesDesktop || + bestDeviceCombo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + bestAdapterDesktopDisplayMode = adapterDesktopDisplayMode; + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + // This fullscreen device combo looks great -- take it + goto EndFullscreenDeviceComboSearch; + } + // Otherwise keep looking for a better fullscreen device combo + } + } + } + } + + EndFullscreenDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + // Need to find a display mode on the best adapter that uses pBestDeviceCombo->AdapterFormat + // and is as close to bestAdapterDesktopDisplayMode's res as possible + bestDisplayMode.Width = 0; + bestDisplayMode.Height = 0; + bestDisplayMode.Format = 0; + bestDisplayMode.RefreshRate = 0; + foreach (DisplayMode displayMode in bestAdapterInfo.DisplayModeList) { + if (displayMode.Format != bestDeviceCombo.AdapterFormat) + continue; + if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate == bestAdapterDesktopDisplayMode.RefreshRate) { + // found a perfect match, so stop + bestDisplayMode = displayMode; + break; + } + else if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate > bestDisplayMode.RefreshRate) { + // refresh rate doesn't match, but width/height match, so keep this + // and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == bestAdapterDesktopDisplayMode.Width) { + // width matches, so keep this and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == 0) { + // we don't have anything better yet, so keep this and keep looking + bestDisplayMode = displayMode; + } + } + + graphicsSettings.FullscreenAdapterInfo = bestAdapterInfo; + graphicsSettings.FullscreenDeviceInfo = bestDeviceInfo; + graphicsSettings.FullscreenDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = false; + graphicsSettings.FullscreenDisplayMode = bestDisplayMode; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.FullscreenDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.FullscreenMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.FullscreenMultisampleQuality = 0; + graphicsSettings.FullscreenVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.FullscreenPresentInterval = PresentInterval.Default; + + return true; + } + + + + + /// + /// Choose the initial settings for the application + /// + /// true if the settings were initialized + public bool ChooseInitialSettings() { + bool foundFullscreenMode = FindBestFullscreenMode(false, false); + bool foundWindowedMode = FindBestWindowedMode(false, false); + if (startFullscreen && foundFullscreenMode) + graphicsSettings.IsWindowed = false; + + if (!foundFullscreenMode && !foundWindowedMode) + throw new NoCompatibleDevicesException(); + + return (foundFullscreenMode || foundWindowedMode); + } + + + + + /// + /// Build presentation parameters from the current settings + /// + public void BuildPresentParamsFromSettings() { + presentParams.Windowed = graphicsSettings.IsWindowed; + presentParams.BackBufferCount = 1; + presentParams.MultiSample = graphicsSettings.MultisampleType; + presentParams.MultiSampleQuality = graphicsSettings.MultisampleQuality; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.EnableAutoDepthStencil = enumerationSettings.AppUsesDepthBuffer; + presentParams.AutoDepthStencilFormat = graphicsSettings.DepthStencilBufferFormat; + presentParams.PresentFlag = PresentFlag.None; + + if (windowed) { + presentParams.BackBufferWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + presentParams.BackBufferHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = 0; + presentParams.PresentationInterval = PresentInterval.Immediate; + presentParams.DeviceWindow = ourRenderTarget; + } + else { + presentParams.BackBufferWidth = graphicsSettings.DisplayMode.Width; + presentParams.BackBufferHeight = graphicsSettings.DisplayMode.Height; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = graphicsSettings.DisplayMode.RefreshRate; + presentParams.PresentationInterval = graphicsSettings.PresentInterval; + presentParams.DeviceWindow = this; + } + } + + + + + /// + /// Initialize the graphics environment + /// + public void InitializeEnvironment() { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + GraphicsDeviceInfo deviceInfo = graphicsSettings.DeviceInfo; + + windowed = graphicsSettings.IsWindowed; + + // Set up the presentation parameters + BuildPresentParamsFromSettings(); + + if (deviceInfo.Caps.PrimitiveMiscCaps.IsNullReference) { + // Warn user about null ref device that can't render anything + HandleSampleException(new NullReferenceDeviceException(), ApplicationMessage.None); + } + + CreateFlags createFlags = new CreateFlags(); + if (graphicsSettings.VertexProcessingType == VertexProcessingType.Software) + createFlags = CreateFlags.SoftwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Mixed) + createFlags = CreateFlags.MixedVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Hardware) + createFlags = CreateFlags.HardwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.PureHardware) { + createFlags = CreateFlags.HardwareVertexProcessing; + } + else + throw new ApplicationException(); +#if (DX9) +#else + // Make sure to allow multithreaded apps if we need them + presentParams.ForceNoMultiThreadedFlag = !isMultiThreaded; +#endif + try { + // Create the device + device = new Device(graphicsSettings.AdapterOrdinal, graphicsSettings.DevType, + windowed ? ourRenderTarget : this , createFlags, presentParams); + + // Cache our local objects + renderState = device.RenderState; + sampleState = device.SamplerState; + textureStates = device.TextureState; + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after recreating the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + if (windowed) { + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + } + + // Store device Caps + graphicsCaps = device.DeviceCaps; + behavior = createFlags; + + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + // Store device description + if (deviceInfo.DevType == DeviceType.Reference) + sb.Append("REF"); + else if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append("HAL"); + else if (deviceInfo.DevType == DeviceType.Software) + sb.Append("SW"); + + BehaviorFlags behaviorFlags = new BehaviorFlags(createFlags); + if ((behaviorFlags.HardwareVertexProcessing) && + (behaviorFlags.PureDevice)) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (pure hw vp)"); + else + sb.Append(" (simulated pure hw vp)"); + } + else if (behaviorFlags.HardwareVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (hw vp)"); + else + sb.Append(" (simulated hw vp)"); + } + else if (behaviorFlags.MixedVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (mixed vp)"); + else + sb.Append(" (simulated mixed vp)"); + } + else if (behaviorFlags.SoftwareVertexProcessing) { + sb.Append(" (sw vp)"); + } + + if (deviceInfo.DevType == DeviceType.Hardware) { + sb.Append(": "); + sb.Append(adapterInfo.AdapterDetails.Description); + } + + // Set device stats string + deviceStats = sb.ToString(); + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // Confine cursor to fullscreen window + if (clipCursorWhenFullscreen) { + if (!windowed) { + System.Drawing.Rectangle rcWindow = this.ClientRectangle; + } + } + + // Setup the event handlers for our device + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + device.Disposing += new System.EventHandler(this.DeleteDeviceObjects); + device.DeviceResizing += new System.ComponentModel.CancelEventHandler(this.EnvironmentResized); + + // Initialize the app's device-dependent objects + try { + InitializeDeviceObjects(); + RestoreDeviceObjects(null, null); + active = true; + return; + } + catch { + // Cleanup before we try again + InvalidateDeviceObjects(null, null); + DeleteDeviceObjects(null, null); + device.Dispose(); + device = null; + if (this.Disposing) + return; + } + } + catch { + // If that failed, fall back to the reference rasterizer + if (deviceInfo.DevType == DeviceType.Hardware) { + if (FindBestWindowedMode(false, true)) { + windowed = true; + + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + + // Let the user know we are switching from HAL to the reference rasterizer + HandleSampleException(null, ApplicationMessage.WarnSwitchToRef); + + InitializeEnvironment(); + } + } + } + } + + + + + /// + /// Displays sample exceptions to the user + /// + /// The exception that was thrown + /// Extra information on how to handle the exception + public void HandleSampleException(SampleException e, ApplicationMessage Type) { + // Build a message to display to the user + string strMsg = string.Empty; + if (e != null) + strMsg = e.Message; + + if (ApplicationMessage.ApplicationMustExit == Type) { + strMsg += "\n\nThis sample will now exit."; + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + + // Close the window, which shuts down the app + if (this.IsHandleCreated) + this.Close(); + } + else { + if (ApplicationMessage.WarnSwitchToRef == Type) + strMsg = "\n\nSwitching to the reference rasterizer,\n"; + strMsg += "a software device that implements the entire\n"; + strMsg += "Direct3D feature set, but runs very slowly."; + + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + } + } + + + + + /// + /// Fired when our environment was resized + /// + /// the device that's resizing our environment + /// Set the cancel member to true to turn off automatic device reset + public void EnvironmentResized(object sender, System.ComponentModel.CancelEventArgs e) { + // Check to see if we're closing or changing the form style + if ((isClosing) || (isChangingFormStyle)) { + // We are, cancel our reset, and exit + e.Cancel = true; + return; + } + + // Check to see if we're minimizing and our rendering object + // is not the form, if so, cancel the resize + if ((ourRenderTarget != this) && (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)) + e.Cancel = true; + + if (!isWindowActive) + e.Cancel = true; + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + } + + + + + /// + /// Called when user toggles between fullscreen mode and windowed mode + /// + public void ToggleFullscreen() { + int AdapterOrdinalOld = graphicsSettings.AdapterOrdinal; + DeviceType DevTypeOld = graphicsSettings.DevType; + + isHandlingSizeChanges = false; + isChangingFormStyle = true; + ready = false; + + // Toggle the windowed state + windowed = !windowed; + + // Save our maximized settings.. + if (!windowed && isMaximized) + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + + graphicsSettings.IsWindowed = windowed; + + // If AdapterOrdinal and DevType are the same, we can just do a Reset(). + // If they've changed, we need to do a complete device teardown/rebuild. + if (graphicsSettings.AdapterOrdinal == AdapterOrdinalOld && + graphicsSettings.DevType == DevTypeOld) { + BuildPresentParamsFromSettings(); + // Resize the 3D device + RETRY: + try { + device.Reset(presentParams); + } + catch { + if (windowed) + ForceWindowed(); + else { + // Sit in a loop until the device passes Reset() + try { + device.TestCooperativeLevel(); + } + catch(DeviceNotResetException) { + // Device still needs to be Reset. Try again. + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + goto RETRY; + } + } + } + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + else { + device.Dispose(); + device = null; + InitializeEnvironment(); + } + + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after resetting the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + + if (windowed) { + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; + isChangingFormStyle = false; + + // We were maximized, restore that state + if (isMaximized) { + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + } + this.SendToBack(); + this.BringToFront(); + this.ClientSize = storedSize; + this.Location = storedLocation; + } + else { + if (this.Menu != null) + this.Menu = null; + + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + isChangingFormStyle = false; + } + isHandlingSizeChanges = true; + ready = true; + } + + + + + /// + /// Switch to a windowed mode, even if that means picking a new device and/or adapter + /// + public void ForceWindowed() { + if (windowed) + return; + + if (!FindBestWindowedMode(false, false)) { + return; + } + windowed = true; + + // Now destroy the current 3D device objects, then reinitialize + + ready = false; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Create the new device + try { + InitializeEnvironment(); + } + catch (SampleException e) { + HandleSampleException(e,ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(),ApplicationMessage.ApplicationMustExit); + } + ready = true; + } + + + + + /// + /// Called when our sample has nothing else to do, and it's time to render + /// + private void FullRender() { + // Render a frame during idle time (no messages are waiting) + if (active && ready) { + try { + if ((deviceLost) || (System.Windows.Forms.Form.ActiveForm != this)) { + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + } + // Render a frame during idle time + if (active) { + Render3DEnvironment(); + } + } + catch (Exception ee) { + System.Windows.Forms.MessageBox.Show("An exception has occurred. This sample must exit.\r\n\r\n" + ee.ToString(), "Exception", + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + this.Close(); + } + } + } + + + + + /// + /// Run the simulation + /// + public void Run() { + // Now we're ready to recieve and process Windows messages. + System.Windows.Forms.Control mainWindow = this; + + // If the render target is a form and *not* this form, use that form instead, + // otherwise, use the main form. + if ((ourRenderTarget is System.Windows.Forms.Form) && (ourRenderTarget != this)) + mainWindow = ourRenderTarget; + + mainWindow.Show(); + while (mainWindow.Created) { + FullRender(); + System.Windows.Forms.Application.DoEvents(); + } + } + + + + + /// + /// Draws the scene + /// + public void Render3DEnvironment() { + if (deviceLost) { + try { + // Test the cooperative level to see if it's okay to render + device.TestCooperativeLevel(); + } + catch (DeviceLostException) { + // If the device was lost, do not render until we get it back + isHandlingSizeChanges = false; + isWindowActive = false; + return; + } + catch (DeviceNotResetException) { + // Check if the device needs to be resized. + + // If we are windowed, read the desktop mode and use the same format for + // the back buffer + if (windowed) { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + graphicsSettings.WindowedDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + presentParams.BackBufferFormat = graphicsSettings.WindowedDisplayMode.Format; + } + + // Reset the device and resize it + device.Reset(device.PresentationParameters); + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + deviceLost = false; + } + + // Get the app's time, in seconds. Skip rendering if no time elapsed + float fAppTime = DXUtil.Timer(DirectXTimer.GetApplicationTime); + float fElapsedAppTime = DXUtil.Timer(DirectXTimer.GetElapsedTime); + if ((0.0f == fElapsedAppTime) && frameMoving) + return; + + // FrameMove (animate) the scene + if (frameMoving || singleStep) { + // Store the time for the app + appTime = fAppTime; + elapsedTime = fElapsedAppTime; + + // Frame move the scene + FrameMove(); + + singleStep = false; + } + + // Render the scene as normal + Render(); + + UpdateStats(); + + try { + // Show the frame on the primary surface. + device.Present(); + } + catch(DeviceLostException) { + deviceLost = true; + } + } + + + + + /// + /// Update the various statistics the simulation keeps track of + /// + public void UpdateStats() { + // Keep track of the frame count + float time = DXUtil.Timer(DirectXTimer.GetAbsoluteTime); + ++frames; + + // Update the scene stats once per second + if (time - lastTime > 1.0f) { + framePerSecond = frames / (time - lastTime); + lastTime = time; + frames = 0; + + string strFmt; + Format fmtAdapter = graphicsSettings.DisplayMode.Format; + if (fmtAdapter == device.PresentationParameters.BackBufferFormat) { + strFmt = fmtAdapter.ToString(); + } + else { + strFmt = String.Format("backbuf {0}, adapter {1}", + device.PresentationParameters.BackBufferFormat.ToString(), fmtAdapter.ToString()); + } + + string strDepthFmt; + if (enumerationSettings.AppUsesDepthBuffer) { + strDepthFmt = String.Format(" ({0})", + graphicsSettings.DepthStencilBufferFormat.ToString()); + } + else { + // No depth buffer + strDepthFmt = ""; + } + + string strMultiSample; + switch (graphicsSettings.MultisampleType) { + case Direct3D.MultiSampleType.NonMaskable: strMultiSample = " (NonMaskable Multisample)"; break; + case Direct3D.MultiSampleType.TwoSamples: strMultiSample = " (2x Multisample)"; break; + case Direct3D.MultiSampleType.ThreeSamples: strMultiSample = " (3x Multisample)"; break; + case Direct3D.MultiSampleType.FourSamples: strMultiSample = " (4x Multisample)"; break; + case Direct3D.MultiSampleType.FiveSamples: strMultiSample = " (5x Multisample)"; break; + case Direct3D.MultiSampleType.SixSamples: strMultiSample = " (6x Multisample)"; break; + case Direct3D.MultiSampleType.SevenSamples: strMultiSample = " (7x Multisample)"; break; + case Direct3D.MultiSampleType.EightSamples: strMultiSample = " (8x Multisample)"; break; + case Direct3D.MultiSampleType.NineSamples: strMultiSample = " (9x Multisample)"; break; + case Direct3D.MultiSampleType.TenSamples: strMultiSample = " (10x Multisample)"; break; + case Direct3D.MultiSampleType.ElevenSamples: strMultiSample = " (11x Multisample)"; break; + case Direct3D.MultiSampleType.TwelveSamples: strMultiSample = " (12x Multisample)"; break; + case Direct3D.MultiSampleType.ThirteenSamples: strMultiSample = " (13x Multisample)"; break; + case Direct3D.MultiSampleType.FourteenSamples: strMultiSample = " (14x Multisample)"; break; + case Direct3D.MultiSampleType.FifteenSamples: strMultiSample = " (15x Multisample)"; break; + case Direct3D.MultiSampleType.SixteenSamples: strMultiSample = " (16x Multisample)"; break; + default: strMultiSample = string.Empty; break; + } + frameStats = String.Format("{0} fps ({1}x{2}), {3}{4}{5}", framePerSecond.ToString("f2"), + device.PresentationParameters.BackBufferWidth, device.PresentationParameters.BackBufferHeight, + strFmt, strDepthFmt, strMultiSample); + } + } + + + + + /// + /// Called in to toggle the pause state of the app. + /// + /// true if the simulation should pause + public void Pause(bool pause) { + appPausedCount += (int)(pause ? +1 : -1); + ready = ((appPausedCount > 0) ? false : true); + + // Handle the first pause request (of many, nestable pause requests) + if (pause && (1 == appPausedCount)) { + // Stop the scene from animating + if (frameMoving) + DXUtil.Timer(DirectXTimer.Stop); + } + + if (0 == appPausedCount) { + // Restart the timers + if (frameMoving) + DXUtil.Timer(DirectXTimer.Start); + } + } + + + + + /// + /// Set our variables to not active and not ready + /// + public void CleanupEnvironment() { + active = false; + ready = false; + if (device != null) + device.Dispose(); + + device = null; + } + #region Menu EventHandlers + + + + + /// + /// Prepares the simulation for a new device being selected + /// + public void UserSelectNewDevice(object sender, EventArgs e) { + // Prompt the user to select a new device or mode + if (active && ready) { + Pause(true); + DoSelectNewDevice(); + Pause(false); + } + } + + + + + /// + /// Displays a dialog so the user can select a new adapter, device, or + /// display mode, and then recreates the 3D environment if needed + /// + private void DoSelectNewDevice() { + isHandlingSizeChanges = false; + // Can't display dialogs in fullscreen mode + if (windowed == false) { + try { + ToggleFullscreen(); + isHandlingSizeChanges = false; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + return; + } + } + + // Make sure the main form is in the background + this.SendToBack(); + D3DSettingsForm settingsForm = new D3DSettingsForm(enumerationSettings, graphicsSettings); + System.Windows.Forms.DialogResult result = settingsForm.ShowDialog(null); + if (result != System.Windows.Forms.DialogResult.OK) { + isHandlingSizeChanges = true; + return; + } + graphicsSettings = settingsForm.settings; + + windowed = graphicsSettings.IsWindowed; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Inform the display class of the change. It will internally + // re-create valid surfaces, a d3ddevice, etc. + try { + InitializeEnvironment(); + } + catch(SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + isHandlingSizeChanges = true; + } + + + + + /// + /// Will start (or stop) simulation + /// + private void ToggleStart(object sender, EventArgs e) { + //Toggle frame movement + frameMoving = !frameMoving; + DXUtil.Timer(frameMoving ? DirectXTimer.Start : DirectXTimer.Stop); + } + + + + + /// + /// Will single step the simulation + /// + private void SingleStep(object sender, EventArgs e) { + // Single-step frame movement + if (false == frameMoving) + DXUtil.Timer(DirectXTimer.Advance); + else + DXUtil.Timer(DirectXTimer.Stop); + frameMoving = false; + singleStep = true; + } + + + + + /// + /// Will end the simulation + /// + private void ExitSample(object sender, EventArgs e) { + this.Close(); + } + #endregion + + + + + #region WinForms Overrides + /// + /// Clean up any resources + /// + protected override void Dispose(bool disposing) { + CleanupEnvironment(); + mnuMain.Dispose(); + base.Dispose(disposing); + } + + + + + /// + /// Handle any key presses + /// + protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) { + // Check for our shortcut keys (Return to start or stop) + if (e.KeyChar == '\r') { + mnuGo.PerformClick(); + e.Handled = true; + } + + // Check for our shortcut keys (Escape to quit) + if ((byte)e.KeyChar == (byte)(int)System.Windows.Forms.Keys.Escape) { + mnuExit.PerformClick(); + e.Handled = true; + } + + // Allow the control to handle the keystroke now + base.OnKeyPress(e); + } + + + + + /// + /// Handle system keystrokes (ie, alt-enter) + /// + protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e) { + if ((e.Alt) && (e.KeyCode == System.Windows.Forms.Keys.Return)) { + // Toggle the fullscreen/window mode + if (active && ready) { + Pause(true); + + try { + ToggleFullscreen(); + Pause(false); + return; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + } + finally { + e.Handled = true; + } + } + } + // Allow the control to handle the keystroke now + base.OnKeyDown(e); + } + + + + + /// + /// Winforms generated code for initializing the form + /// + private void InitializeComponent() { + // + // GraphicsSample + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.MinimumSize = new System.Drawing.Size(100, 100); + #region MenuCreation/etc + this.mnuMain = new System.Windows.Forms.MainMenu(); + this.mnuFile = new System.Windows.Forms.MenuItem(); + this.mnuGo = new System.Windows.Forms.MenuItem(); + this.mnuSingle = new System.Windows.Forms.MenuItem(); + this.mnuBreak1 = new System.Windows.Forms.MenuItem(); + this.mnuChange = new System.Windows.Forms.MenuItem(); + this.mnuBreak2 = new System.Windows.Forms.MenuItem(); + this.mnuExit = new System.Windows.Forms.MenuItem(); + // + // mainMenu1 + // + this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuFile}); + // + // mnuFile + // + this.mnuFile.Index = 0; + this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuGo, + this.mnuSingle, + this.mnuBreak1, + this.mnuChange, + this.mnuBreak2, + this.mnuExit}); + this.mnuFile.Text = "&File"; + // + // mnuGo + // + this.mnuGo.Index = 0; + this.mnuGo.Text = "&Go/stop\tEnter"; + this.mnuGo.Click += new System.EventHandler(this.ToggleStart); + // + // mnuSingle + // + this.mnuSingle.Index = 1; + this.mnuSingle.Text = "&Single step\tSpace"; + this.mnuSingle.Click += new System.EventHandler(this.SingleStep); + // + // mnuBreak1 + // + this.mnuBreak1.Index = 2; + this.mnuBreak1.Text = "-"; + // + // mnuChange + // + this.mnuChange.Index = 3; + this.mnuChange.Shortcut = System.Windows.Forms.Shortcut.F2; + this.mnuChange.ShowShortcut = true; + this.mnuChange.Text = "&Change Device..."; + this.mnuChange.Click += new System.EventHandler(this.UserSelectNewDevice); + // + // mnuBreak2 + // + this.mnuBreak2.Index = 4; + this.mnuBreak2.Text = "-"; + // + // mnuExit + // + this.mnuExit.Index = 5; + this.mnuExit.Text = "E&xit\tESC"; + this.mnuExit.Click += new System.EventHandler(this.ExitSample); + #endregion + } + + + + + /// + /// When the menu is starting pause our simulation + /// + protected override void OnMenuStart(System.EventArgs e) { + Pause(true); // Pause the simulation while the menu starts + } + + + + + /// + /// When the menu is complete our simulation can continue + /// + protected override void OnMenuComplete(System.EventArgs e) { + Pause(false); // Unpause the simulation + } + + + + + /// + /// Make sure our graphics cursor (if available) moves with the cursor + /// + protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e) { + if ((device != null) && (!device.Disposed)) { + // Move the D3D cursor + device.SetCursorPosition(e.X, e.Y, false); + } + // Let the control handle the mouse now + base.OnMouseMove(e); + } + + + + + /// + /// Handle size changed events + /// + protected override void OnSizeChanged(System.EventArgs e) { + this.OnResize(e); + base.OnSizeChanged(e); + } + + + + + /// + /// Handle resize events + /// + protected override void OnResize(System.EventArgs e) { + if (isHandlingSizeChanges) { + // Are we maximized? + isMaximized = (this.WindowState == System.Windows.Forms.FormWindowState.Maximized); + if (!isMaximized) { + storedSize = this.ClientSize; + storedLocation = this.Location; + } + } + active = !(this.WindowState == System.Windows.Forms.FormWindowState.Minimized || this.Visible == false); + base.OnResize(e); + } + + + + + /// + /// Once the form has focus again, we can continue to handle our resize + /// and resets.. + /// + protected override void OnGotFocus(System.EventArgs e) { + isHandlingSizeChanges = true; + isWindowActive = true; + base.OnGotFocus (e); + } + + + + + /// + /// Handle move events + /// + protected override void OnMove(System.EventArgs e) { + if (isHandlingSizeChanges) { + storedLocation = this.Location; + } + base.OnMove(e); + } + + + + + /// + /// Handle closing event + /// + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { + isClosing = true; + base.OnClosing(e); + } + #endregion + + +} + +#region Enums for D3D Applications +/// +/// Messages that can be used when displaying an error +/// +public enum ApplicationMessage { + None, + ApplicationMustExit, + WarnSwitchToRef +}; +#endregion + + + + +#region Various SampleExceptions +/// +/// The default sample exception type +/// +public class SampleException : System.ApplicationException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + + strMsg = "Generic application error. Enable\n"; + strMsg += "debug output for detailed information."; + + return strMsg; + } + } +} + + + + +/// +/// Exception informing user no compatible devices were found +/// +public class NoCompatibleDevicesException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "This sample cannot run in a desktop\n"; + strMsg += "window with the current display settings.\n"; + strMsg += "Please change your desktop settings to a\n"; + strMsg += "16- or 32-bit display mode and re-run this\n"; + strMsg += "sample."; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when the ReferenceDevice is null +/// +public class NullReferenceDeviceException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Warning: Nothing will be rendered.\n"; + strMsg += "The reference rendering device was selected, but your\n"; + strMsg += "computer only has a reduced-functionality reference device\n"; + strMsg += "installed. Install the DirectX SDK to get the full\n"; + strMsg += "reference device.\n"; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when reset fails +/// +public class ResetFailedException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not reset the Direct3D device."; + + return strMsg; + } + } +} + + + + +/// +/// The exception thrown when media couldn't be found +/// +public class MediaNotFoundException : SampleException { + private string mediaFile; + public MediaNotFoundException(string filename) : base() { + mediaFile = filename; + } + public MediaNotFoundException() : base() { + mediaFile = string.Empty; + } + + + + + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not load required media."; + if (mediaFile.Length > 0) + strMsg += string.Format("\r\nFile: {0}", mediaFile); + + return strMsg; + } + } +} +#endregion + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/d3dapp.resx b/Source Code updated 08-12-05/Spacewar3D/Step03/d3dapp.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/d3dapp.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/d3denumeration.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/d3denumeration.cs new file mode 100644 index 0000000..ff21321 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/d3denumeration.cs @@ -0,0 +1,494 @@ +//----------------------------------------------------------------------------- +// File: D3DEnumeration.cs +// +// Desc: Enumerates D3D adapters, devices, modes, etc. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + + + +/// +/// Enumeration of all possible D3D vertex processing types +/// +public enum VertexProcessingType +{ + Software, + Mixed, + Hardware, + PureHardware +} + + + + +/// +/// Info about a display adapter +/// +public class GraphicsAdapterInfo +{ + public int AdapterOrdinal; + public AdapterDetails AdapterDetails; + public ArrayList DisplayModeList = new ArrayList(); // List of D3DDISPLAYMODEs + public ArrayList DeviceInfoList = new ArrayList(); // List of D3DDeviceInfos + public override string ToString() { return AdapterDetails.Description; } +} + + + + +/// +/// Info about a D3D device, including a list of DeviceCombos (see below) +/// that work with the device +/// +public class GraphicsDeviceInfo +{ + public int AdapterOrdinal; + public DeviceType DevType; + public Caps Caps; + public ArrayList DeviceComboList = new ArrayList(); // List of D3DDeviceCombos + public override string ToString() { return DevType.ToString(); } +} + + + + +/// +/// Info about a depth/stencil buffer format that is incompatible with a +/// multisample type +/// +public class DepthStencilMultiSampleConflict +{ + public DepthFormat DepthStencilFormat; + public MultiSampleType MultiSampleType; +} + + + + +/// +/// A combination of adapter format, back buffer format, and windowed/fullscreen +/// that is compatible with a particular D3D device (and the app) +/// +public class DeviceCombo +{ + public int AdapterOrdinal; + public DeviceType DevType; + public Format AdapterFormat; + public Format BackBufferFormat; + public bool IsWindowed; + public ArrayList DepthStencilFormatList = new ArrayList(); // List of D3DFORMATs + public ArrayList MultiSampleTypeList = new ArrayList(); // List of D3DMULTISAMPLE_TYPEs + public ArrayList MultiSampleQualityList = new ArrayList(); // List of ints (maxQuality per multisample type) + public ArrayList DepthStencilMultiSampleConflictList = new ArrayList(); // List of DepthStencilMultiSampleConflicts + public ArrayList VertexProcessingTypeList = new ArrayList(); // List of VertexProcessingTypes + public ArrayList PresentIntervalList = new ArrayList(); // List of D3DPRESENT_INTERVALs +} + + + + +/// +/// Used to sort Displaymodes +/// +class DisplayModeComparer : System.Collections.IComparer +{ + /// + /// Compare two display modes + /// + public int Compare(object x, object y) + { + DisplayMode dx = (DisplayMode)x; + DisplayMode dy = (DisplayMode)y; + + if (dx.Width > dy.Width) + return 1; + if (dx.Width < dy.Width) + return -1; + if (dx.Height > dy.Height) + return 1; + if (dx.Height < dy.Height) + return -1; + if (dx.Format > dy.Format) + return 1; + if (dx.Format < dy.Format) + return -1; + if (dx.RefreshRate > dy.RefreshRate) + return 1; + if (dx.RefreshRate < dy.RefreshRate) + return -1; + return 0; + } +} + + + + +/// +/// Enumerates available adapters, devices, modes, etc. +/// +public class D3DEnumeration +{ + /// + /// The confirm device delegate which is used to determine if a device + /// meets the needs of the simulation + /// + public delegate bool ConfirmDeviceCallbackType(Caps caps, + VertexProcessingType vertexProcessingType, Format adapterFormat, + Format backBufferFormat); + + public ConfirmDeviceCallbackType ConfirmDeviceCallback; + public ArrayList AdapterInfoList = new ArrayList(); // List of D3DAdapterInfos + + // The following variables can be used to limit what modes, formats, + // etc. are enumerated. Set them to the values you want before calling + // Enumerate(). + public int AppMinFullscreenWidth = 640; + public int AppMinFullscreenHeight = 480; + public int AppMinColorChannelBits = 5; // min color bits per channel in adapter format + public int AppMinAlphaChannelBits = 0; // min alpha bits per pixel in back buffer format + public int AppMinDepthBits = 15; + public int AppMinStencilBits = 0; + public bool AppUsesDepthBuffer = true; + public bool AppUsesMixedVP = false; // whether app can take advantage of mixed vp mode + public bool AppRequiresWindowed = false; + public bool AppRequiresFullscreen = false; + + + + + /// + /// Enumerates available D3D adapters, devices, modes, etc. + /// + public void Enumerate() + { + foreach (AdapterInformation ai in Manager.Adapters) + { + ArrayList adapterFormatList = new ArrayList(); + GraphicsAdapterInfo adapterInfo = new GraphicsAdapterInfo(); + adapterInfo.AdapterOrdinal = ai.Adapter; + adapterInfo.AdapterDetails = ai.Information; + + // Get list of all display modes on this adapter. + // Also build a temporary list of all display adapter formats. + foreach (DisplayMode displayMode in ai.SupportedDisplayModes) + { + if (displayMode.Width < AppMinFullscreenWidth) + continue; + if (displayMode.Height < AppMinFullscreenHeight) + continue; + if (GraphicsUtility.GetColorChannelBits(displayMode.Format) < AppMinColorChannelBits) + continue; + adapterInfo.DisplayModeList.Add(displayMode); + if (!adapterFormatList.Contains(displayMode.Format)) + adapterFormatList.Add(displayMode.Format); + } + + // Sort displaymode list + DisplayModeComparer dmc = new DisplayModeComparer(); + adapterInfo.DisplayModeList.Sort(dmc); + + // Get info for each device on this adapter + EnumerateDevices(adapterInfo, adapterFormatList); + + // If at least one device on this adapter is available and compatible + // with the app, add the adapterInfo to the list + if (adapterInfo.DeviceInfoList.Count == 0) + continue; + AdapterInfoList.Add(adapterInfo); + } + } + + + + + /// + /// Enumerates D3D devices for a particular adapter + /// + protected void EnumerateDevices(GraphicsAdapterInfo adapterInfo, ArrayList adapterFormatList) + { + DeviceType[] devTypeArray = new DeviceType[] + { DeviceType.Hardware, DeviceType.Software, DeviceType.Reference }; + + foreach (DeviceType devType in devTypeArray) + { + GraphicsDeviceInfo deviceInfo = new GraphicsDeviceInfo(); + deviceInfo.AdapterOrdinal = adapterInfo.AdapterOrdinal; + deviceInfo.DevType = devType; + try + { + deviceInfo.Caps = Manager.GetDeviceCaps(adapterInfo.AdapterOrdinal, devType); + } + catch (DirectXException) + { + continue; + } + + // Get info for each devicecombo on this device + EnumerateDeviceCombos(deviceInfo, adapterFormatList); + + // If at least one devicecombo for this device is found, + // add the deviceInfo to the list + if (deviceInfo.DeviceComboList.Count == 0) + continue; + adapterInfo.DeviceInfoList.Add(deviceInfo); + } + } + + + + + /// + /// Enumerates DeviceCombos for a particular device + /// + protected void EnumerateDeviceCombos(GraphicsDeviceInfo deviceInfo, ArrayList adapterFormatList) + { + Format[] backBufferFormatArray = new Format[] + { Format.A8R8G8B8, Format.X8R8G8B8, Format.A2R10G10B10, + Format.R5G6B5, Format.A1R5G5B5, Format.X1R5G5B5, + }; + bool[] isWindowedArray = new bool[] { false, true }; + + // See which adapter formats are supported by this device + foreach (Format adapterFormat in adapterFormatList) + { + foreach (Format backBufferFormat in backBufferFormatArray) + { + if (GraphicsUtility.GetAlphaChannelBits(backBufferFormat) < AppMinAlphaChannelBits) + continue; + foreach (bool isWindowed in isWindowedArray) + { + if (!isWindowed && AppRequiresWindowed) + continue; + if (isWindowed && AppRequiresFullscreen) + continue; + if (!Manager.CheckDeviceType(deviceInfo.AdapterOrdinal, deviceInfo.DevType, adapterFormat, backBufferFormat, isWindowed)) + { + continue; + } + + // At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed + // DeviceCombo that is supported by the system. We still need to confirm that it's + // compatible with the app, and find one or more suitable depth/stencil buffer format, + // multisample type, vertex processing type, and present interval. + DeviceCombo deviceCombo = new DeviceCombo(); + deviceCombo.AdapterOrdinal = deviceInfo.AdapterOrdinal; + deviceCombo.DevType = deviceInfo.DevType; + deviceCombo.AdapterFormat = adapterFormat; + deviceCombo.BackBufferFormat = backBufferFormat; + deviceCombo.IsWindowed = isWindowed; + if (AppUsesDepthBuffer) + { + BuildDepthStencilFormatList(deviceCombo); + if (deviceCombo.DepthStencilFormatList.Count == 0) + continue; + } + BuildMultiSampleTypeList(deviceCombo); + if (deviceCombo.MultiSampleTypeList.Count == 0) + continue; + BuildDepthStencilMultiSampleConflictList(deviceCombo); + BuildVertexProcessingTypeList(deviceInfo, deviceCombo); + if (deviceCombo.VertexProcessingTypeList.Count == 0) + continue; + BuildPresentIntervalList(deviceInfo, deviceCombo); + if (deviceCombo.PresentIntervalList.Count == 0) + continue; + + deviceInfo.DeviceComboList.Add(deviceCombo); + } + } + } + } + + + + + /// + /// Adds all depth/stencil formats that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildDepthStencilFormatList(DeviceCombo deviceCombo) + { + DepthFormat[] depthStencilFormatArray = + { + DepthFormat.D16, + DepthFormat.D15S1, + DepthFormat.D24X8, + DepthFormat.D24S8, + DepthFormat.D24X4S4, + DepthFormat.D32, + }; + + foreach (DepthFormat depthStencilFmt in depthStencilFormatArray) + { + if (GraphicsUtility.GetDepthBits(depthStencilFmt) < AppMinDepthBits) + continue; + if (GraphicsUtility.GetStencilBits(depthStencilFmt) < AppMinStencilBits) + continue; + if (Manager.CheckDeviceFormat(deviceCombo.AdapterOrdinal, deviceCombo.DevType, deviceCombo.AdapterFormat, + Usage.DepthStencil, ResourceType.Surface, depthStencilFmt)) + { + if (Manager.CheckDepthStencilMatch(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat, depthStencilFmt)) + { + deviceCombo.DepthStencilFormatList.Add(depthStencilFmt); + } + } + } + } + + + + + /// + /// Adds all multisample types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildMultiSampleTypeList(DeviceCombo deviceCombo) + { + MultiSampleType[] msTypeArray = { + MultiSampleType.None, + MultiSampleType.NonMaskable, + MultiSampleType.TwoSamples, + MultiSampleType.ThreeSamples, + MultiSampleType.FourSamples, + MultiSampleType.FiveSamples, + MultiSampleType.SixSamples, + MultiSampleType.SevenSamples, + MultiSampleType.EightSamples, + MultiSampleType.NineSamples, + MultiSampleType.TenSamples, + MultiSampleType.ElevenSamples, + MultiSampleType.TwelveSamples, + MultiSampleType.ThirteenSamples, + MultiSampleType.FourteenSamples, + MultiSampleType.FifteenSamples, + MultiSampleType.SixteenSamples, + }; + + foreach (MultiSampleType msType in msTypeArray) + { + int result; + int qualityLevels = 0; + if (Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.BackBufferFormat, deviceCombo.IsWindowed, msType, out result, out qualityLevels)) + { + deviceCombo.MultiSampleTypeList.Add(msType); + deviceCombo.MultiSampleQualityList.Add(qualityLevels); + } + } + } + + + + + /// + /// Finds any depthstencil formats that are incompatible with multisample types and + /// builds a list of them. + /// + public void BuildDepthStencilMultiSampleConflictList(DeviceCombo deviceCombo) + { + DepthStencilMultiSampleConflict DSMSConflict; + + foreach (DepthFormat dsFmt in deviceCombo.DepthStencilFormatList) + { + foreach (MultiSampleType msType in deviceCombo.MultiSampleTypeList) + { + if (!Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, + deviceCombo.DevType, (Format)dsFmt, deviceCombo.IsWindowed, msType)) + { + DSMSConflict = new DepthStencilMultiSampleConflict(); + DSMSConflict.DepthStencilFormat = dsFmt; + DSMSConflict.MultiSampleType = msType; + deviceCombo.DepthStencilMultiSampleConflictList.Add(DSMSConflict); + } + } + } + } + + + + + /// + /// Adds all vertex processing types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildVertexProcessingTypeList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) + { + if (deviceInfo.Caps.DeviceCaps.SupportsHardwareTransformAndLight) + { + if (deviceInfo.Caps.DeviceCaps.SupportsPureDevice) + { + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.PureHardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) + { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.PureHardware); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Hardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) + { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Hardware); + } + if (AppUsesMixedVP && (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Mixed, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat))) + { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Mixed); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Software, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) + { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Software); + } + } + + + + + /// + /// Adds all present intervals that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildPresentIntervalList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) + { + PresentInterval[] piArray = { + PresentInterval.Immediate, + PresentInterval.Default, + PresentInterval.One, + PresentInterval.Two, + PresentInterval.Three, + PresentInterval.Four, + }; + + foreach (PresentInterval pi in piArray) + { + if (deviceCombo.IsWindowed) + { + if (pi == PresentInterval.Two || + pi == PresentInterval.Three || + pi == PresentInterval.Four) + { + // These intervals are not supported in windowed mode. + continue; + } + } + // Note that PresentInterval.Default is zero, so you + // can't do a caps check for it -- it is always available. + if (pi == PresentInterval.Default || + (deviceInfo.Caps.PresentationIntervals & pi) != (PresentInterval)0) + { + deviceCombo.PresentIntervalList.Add(pi); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/d3dfont.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/d3dfont.cs new file mode 100644 index 0000000..2b374eb --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/d3dfont.cs @@ -0,0 +1,666 @@ +//----------------------------------------------------------------------------- +// File: D3DFont.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// A generic font class +/// +public class GraphicsFont { + public const int MaxNumfontVertices = 50*6; + + // Font rendering flags + [System.Flags] + public enum RenderFlags { + Centered = 0x0001, + TwoSided = 0x0002, + Filtered = 0x0004, + } + private System.Drawing.Font systemFont; + + private bool isZEnable = false; + public bool ZBufferEnable { get { return isZEnable; } set { isZEnable = value; } } + string ourFontName; // Font properties + int ourFontHeight; + + private Direct3D.Device device; + private TextureStateManager textureState0; + private TextureStateManager textureState1; + private SamplerStateManager samplerState0; + private RenderStateManager renderState; + private Direct3D.Texture fontTexture; + private Direct3D.VertexBuffer vertexBuffer; + private CustomVertex.TransformedColoredTextured[] fontVertices = new CustomVertex.TransformedColoredTextured[MaxNumfontVertices]; + + private int textureWidth; // Texture dimensions + private int textureHeight; + private float textureScale; + private int spacingPerChar; + private float[,] textureCoords = new float[128-32,4]; + + // Stateblocks for setting and restoring render states + private StateBlock savedStateBlock; + private StateBlock drawTextStateBlock; + + + + + /// + /// Create a new font object + /// + /// The font to use + public GraphicsFont(System.Drawing.Font f) { + ourFontName = f.Name; + ourFontHeight = (int)f.Size; + systemFont = f; + } + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName) : this(fontName, FontStyle.Regular, 12) { + } + + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName, FontStyle style) : this(fontName, style, 12) { + } + + + + + /// + /// Create a new font object + /// + /// The name of the font + /// The style + /// Size of the font + public GraphicsFont(string fontName, FontStyle style, int size) { + ourFontName = fontName; + ourFontHeight = size; + systemFont = new System.Drawing.Font(fontName, ourFontHeight, style); + } + + + + + /// + /// Attempt to draw the systemFont alphabet onto the provided texture + /// graphics. + /// + /// Graphics object on which to draw and measure the letters + /// If set, the method will test to see if the alphabet will fit without actually drawing + public void PaintAlphabet(Graphics g, bool measureOnly) { + string str; + float x = 0; + float y = 0; + Point p = new Point(0, 0); + Size size = new Size(0,0); + + // Calculate the spacing between characters based on line height + size = g.MeasureString(" ", systemFont).ToSize(); + x = spacingPerChar = (int) Math.Ceiling(size.Height * 0.3); + + for (char c = (char)32; c < (char)127; c++) { + str = c.ToString(); + // We need to do some things here to get the right sizes. The default implemententation of MeasureString + // will return a resolution independant size. For our height, this is what we want. However, for our width, we + // want a resolution dependant size. + Size resSize = g.MeasureString(str, systemFont).ToSize(); + size.Height = resSize.Height + 1; + + // Now the Resolution independent width + if (c != ' ') { // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + resSize = g.MeasureString(str, systemFont, p, StringFormat.GenericTypographic).ToSize(); + size.Width = resSize.Width; + } + else + size.Width = resSize.Width; + + if ((x + size.Width + spacingPerChar) > textureWidth) { + x = spacingPerChar; + y += size.Height; + } + + // Make sure we have room for the current character + if ((y + size.Height) > textureHeight) + throw new System.InvalidOperationException("Texture too small for alphabet"); + + if (!measureOnly) { + if (c != ' ') // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y), StringFormat.GenericTypographic); + else + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y)); + textureCoords[c-32,0] = ((float) (x + 0 - spacingPerChar)) / textureWidth; + textureCoords[c-32,1] = ((float) (y + 0 + 0)) / textureHeight; + textureCoords[c-32,2] = ((float) (x + size.Width + spacingPerChar)) / textureWidth; + textureCoords[c-32,3] = ((float) (y + size.Height + 0)) / textureHeight; + } + + x += size.Width + (2 * spacingPerChar); + } + + } + + + + + /// + /// Initialize the device objects + /// + /// The grpahics device used to initialize + public void InitializeDeviceObjects(Device dev) { + if (dev != null) { + // Set up our events + dev.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Keep a local copy of the device + device = dev; + textureState0 = device.TextureState[0]; + textureState1 = device.TextureState[1]; + samplerState0 = device.SamplerState[0]; + renderState = device.RenderState; + + // Create a bitmap on which to measure the alphabet + Bitmap bmp = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Graphics g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Establish the font and texture size + textureScale = 1.0f; // Draw fonts into texture without scaling + + // Calculate the dimensions for the smallest power-of-two texture which + // can hold all the printable characters + textureWidth = textureHeight = 128; + for (;;) { + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // Scale up the texture size and try again + textureWidth *= 2; + textureHeight *= 2; + continue; + } + + break; + } + + // If requested texture is too big, use a smaller texture and smaller font, + // and scale up when rendering. + Direct3D.Caps d3dCaps = device.DeviceCaps; + + // If the needed texture is too large for the video card... + if (textureWidth > d3dCaps.MaxTextureWidth) { + // Scale the font size down to fit on the largest possible texture + textureScale = (float)d3dCaps.MaxTextureWidth / (float)textureWidth; + textureWidth = textureHeight = d3dCaps.MaxTextureWidth; + + for(;;) { + // Create a new, smaller font + ourFontHeight = (int) Math.Floor(ourFontHeight * textureScale); + systemFont = new System.Drawing.Font(systemFont.Name, ourFontHeight, systemFont.Style); + + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // If that still doesn't fit, scale down again and continue + textureScale *= 0.9F; + continue; + } + + break; + } + } + + // Release the bitmap used for measuring and create one for drawing + bmp.Dispose(); + bmp = new Bitmap(textureWidth, textureHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Draw the alphabet + PaintAlphabet(g, false); + + // Create a new texture for the font from the bitmap we just created + fontTexture = Texture.FromBitmap(device, bmp, 0, Pool.Managed); + RestoreDeviceObjects(null, null); + } + + + + + /// + /// Restore the font after a device has been reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColoredTextured), MaxNumfontVertices, + device, Usage.WriteOnly | Usage.Dynamic, 0, Pool.Default); + + Surface surf = device.GetRenderTarget( 0 ); + bool bSupportsAlphaBlend = Manager.CheckDeviceFormat(device.DeviceCaps.AdapterOrdinal, + device.DeviceCaps.DeviceType, device.DisplayMode.Format, + Usage.RenderTarget | Usage.QueryPostPixelShaderBlending, ResourceType.Surface, + surf.Description.Format ); + + // Create the state blocks for rendering text + for (int which=0; which < 2; which++) { + device.BeginStateBlock(); + device.SetTexture(0, fontTexture); + + if (isZEnable) + renderState.ZBufferEnable = true; + else + renderState.ZBufferEnable = false; + + if( bSupportsAlphaBlend ) { + renderState.AlphaBlendEnable = true; + renderState.SourceBlend = Blend.SourceAlpha; + renderState.DestinationBlend = Blend.InvSourceAlpha; + } + else { + renderState.AlphaBlendEnable = false; + } + renderState.AlphaTestEnable = true; + renderState.ReferenceAlpha = 0x08; + renderState.AlphaFunction = Compare.GreaterEqual; + renderState.FillMode = FillMode.Solid; + renderState.CullMode = Cull.CounterClockwise; + renderState.StencilEnable = false; + renderState.Clipping = true; + device.ClipPlanes.DisableAll(); + renderState.VertexBlend = VertexBlend.Disable; + renderState.IndexedVertexBlendEnable = false; + renderState.FogEnable = false; + renderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; + textureState0.ColorOperation = TextureOperation.Modulate; + textureState0.ColorArgument1 = TextureArgument.TextureColor; + textureState0.ColorArgument2 = TextureArgument.Diffuse; + textureState0.AlphaOperation = TextureOperation.Modulate; + textureState0.AlphaArgument1 = TextureArgument.TextureColor; + textureState0.AlphaArgument2 = TextureArgument.Diffuse; + textureState0.TextureCoordinateIndex = 0; + textureState0.TextureTransform = TextureTransform.Disable; // REVIEW + textureState1.ColorOperation = TextureOperation.Disable; + textureState1.AlphaOperation = TextureOperation.Disable; + samplerState0.MinFilter = TextureFilter.Point; + samplerState0.MagFilter = TextureFilter.Point; + samplerState0.MipFilter = TextureFilter.None; + + if (which==0) + savedStateBlock = device.EndStateBlock(); + else + drawTextStateBlock = device.EndStateBlock(); + } + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text) { + DrawText(xpos, ypos, color, text, RenderFlags.Filtered); + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text, RenderFlags flags) { + if (text == null) + return; + + // Setup renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.SetTexture(0, fontTexture); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Adjust for character spacing + xpos -= spacingPerChar; + float fStartX = xpos; + + // Fill vertex buffer + int iv = 0; + int dwNumTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / textureScale; + float h = (ty2-ty1) * textureHeight / textureScale; + + int intColor = color.ToArgb(); + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + dwNumTriangles += 2; + + if (dwNumTriangles*3 > (MaxNumfontVertices-6)) { + // Set the data for the vertexbuffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + dwNumTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar); + } + + // Set the data for the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (dwNumTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + Viewport vp = device.Viewport; + float xpos = (x+1.0f)*vp.Width/2; + float ypos = (y+1.0f)*vp.Height/2; + float sz = z; + float rhw = 1.0f; + float fLineHeight = (textureCoords[0,3] - textureCoords[0,1]) * textureHeight; + + // Adjust for character spacing + xpos -= spacingPerChar * (fXScale*vp.Height)/fLineHeight; + float fStartX = xpos; + + // Fill vertex buffer + int numTriangles = 0; + int realColor = color.ToArgb(); + int iv = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += fYScale*vp.Height; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1)*textureWidth; + float h = (ty2-ty1)*textureHeight; + + w *= (fXScale*vp.Height)/fLineHeight; + h *= (fYScale*vp.Height)/fLineHeight; + + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + numTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar) * (fXScale*vp.Height)/fLineHeight; + } + + // Unlock and render the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text) { + this.DrawTextScaled(x,y,z,fXScale, fYScale, color, text, 0); + } + + + + + /// + /// Renders 3D text + /// + public void Render3DText(string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.PositionNormalTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0, VertexInformation.GetFormatSize(CustomVertex.PositionNormalTextured.Format)); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Position for each text element + float x = 0.0f; + float y = 0.0f; + + // Center the text block at the origin + if ((flags & RenderFlags.Centered) != 0) { + System.Drawing.SizeF sz = GetTextExtent(text); + x = -(((float)sz.Width)/10.0f)/2.0f; + y = -(((float)sz.Height)/10.0f)/2.0f; + } + + // Turn off culling for two-sided text + if ((flags & RenderFlags.TwoSided) != 0) + renderState.CullMode = Cull.None; + + // Adjust for character spacing + x -= spacingPerChar / 10.0f; + float fStartX = x; + + // Fill vertex buffer + GraphicsStream strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + int numTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + x = fStartX; + y -= (textureCoords[0,3]-textureCoords[0,1])*textureHeight/10.0f; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / (10.0f * textureScale); + float h = (ty2-ty1) * textureHeight / (10.0f * textureScale); + + if (c != ' ') { + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+0,0), new Vector3(0,0,-1), tx1, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+h,0), new Vector3(0,0,-1), tx2, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.Unlock(); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + numTriangles = 0; + } + } + + x += w - (2 * spacingPerChar) / 10.0f; + } + + // Unlock and render the vertex buffer + vertexBuffer.Unlock(); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Get the dimensions of a text string + /// + private System.Drawing.SizeF GetTextExtent(string text) { + if (null == text || text == string.Empty) + throw new System.ArgumentNullException(); + + float fRowWidth = 0.0f; + float fRowHeight = (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + float fWidth = 0.0f; + float fHeight = fRowHeight; + + foreach (char c in text) { + if (c == '\n') { + fRowWidth = 0.0f; + fHeight += fRowHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float tx2 = textureCoords[c-32,2]; + + fRowWidth += (tx2-tx1)*textureWidth - 2*spacingPerChar; + + if (fRowWidth > fWidth) + fWidth = fRowWidth; + } + + return new System.Drawing.SizeF(fWidth, fHeight); + } + + + + + /// + /// Cleanup any resources being used + /// + public void Dispose(object sender, EventArgs e) { + if (systemFont != null) + systemFont.Dispose(); + + systemFont = null; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/d3dutil.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/d3dutil.cs new file mode 100644 index 0000000..ea2d5a3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/d3dutil.cs @@ -0,0 +1,928 @@ +//----------------------------------------------------------------------------- +// File: D3DUtil.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Windows.Forms; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// Various helper functions for graphics samples +/// +public class GraphicsUtility { + /// + /// Private Constructor + /// + private GraphicsUtility() { + } + + + + /// + /// Initializes a Material structure, setting the diffuse and ambient + /// colors. It does not set emissive or specular colors. + /// + /// The ambient and diffuse color + /// A defined material + public static Direct3D.Material InitMaterial(System.Drawing.Color c) { + Material mtrl = new Material(); + mtrl.Ambient = mtrl.Diffuse = c; + return mtrl; + } + + + + + /// + /// Initializes a light, setting the light position. The + /// diffuse color is set to white; specular and ambient are left as black. + /// + /// Which light to initialize + /// The type + public static void InitLight(Light light, LightType ltType, float x, float y, float z) { + light.Type = ltType; + light.Diffuse = System.Drawing.Color.White; + light.Position = new Vector3(x,y,z); + light.Direction = Vector3.Normalize(light.Position); + light.Range = 1000.0f; + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename, Format format) { + // Get the path to the texture + string path = DXUtil.FindMediaFile(null, textureFilename); + + // Create the texture using D3DX + return TextureLoader.FromFile(device, path, D3DX.Default, D3DX.Default, D3DX.Default, 0, format, + Pool.Managed, Filter.Triangle|Filter.Mirror, + Filter.Triangle|Filter.Mirror, 0); + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename) { + return GraphicsUtility.CreateTexture(device, textureFilename, Format.Unknown); + } + + + + + + /// + /// Returns a view matrix for rendering to a face of a cubemap. + /// + public static Matrix GetCubeMapViewMatrix(CubeMapFace face) { + Vector3 vEyePt = new Vector3(0.0f, 0.0f, 0.0f); + Vector3 vLookDir = new Vector3(); + Vector3 vUpDir = new Vector3(); + + switch (face) { + case CubeMapFace.PositiveX: + vLookDir = new Vector3(1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeX: + vLookDir = new Vector3(-1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.PositiveY: + vLookDir = new Vector3(0.0f, 1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f,-1.0f); + break; + case CubeMapFace.NegativeY: + vLookDir = new Vector3(0.0f,-1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f, 1.0f); + break; + case CubeMapFace.PositiveZ: + vLookDir = new Vector3(0.0f, 0.0f, 1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeZ: + vLookDir = new Vector3(0.0f, 0.0f,-1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + } + + // Set the view transform for this cubemap surface + Matrix matView = Matrix.LookAtLH(vEyePt, vLookDir, vUpDir); + return matView; + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control, float fTrackBallRadius) { + System.Drawing.Point pt = System.Windows.Forms.Cursor.Position; + System.Drawing.Rectangle rc = control.ClientRectangle; + pt = control.PointToClient(pt); + float xpos = (((2.0f * pt.X) / (rc.Right-rc.Left)) - 1); + float ypos = (((2.0f * pt.Y) / (rc.Bottom-rc.Top)) - 1); + float sz; + + if (xpos == 0.0f && ypos == 0.0f) + return new Quaternion(0.0f, 0.0f, 0.0f, 1.0f); + + float d2 = (float)Math.Sqrt(xpos*xpos + ypos*ypos); + + if (d2 < fTrackBallRadius * 0.70710678118654752440) // Inside sphere + sz = (float)Math.Sqrt(fTrackBallRadius*fTrackBallRadius - d2*d2); + else // On hyperbola + sz = (fTrackBallRadius*fTrackBallRadius) / (2.0f*d2); + + // Get two points on trackball's sphere + Vector3 p1 = new Vector3(xpos, ypos, sz); + Vector3 p2 = new Vector3(0.0f, 0.0f, fTrackBallRadius); + + // Get axis of rotation, which is cross product of p1 and p2 + Vector3 axis = Vector3.Cross(p1,p2); + + // Calculate angle for the rotation about that axis + float t = Vector3.Length(Vector3.Subtract(p2,p1)) / (2.0f*fTrackBallRadius); + if (t > +1.0f) t = +1.0f; + if (t < -1.0f) t = -1.0f; + float fAngle = (float)(2.0f * Math.Asin(t)); + + // Convert axis to quaternion + return Quaternion.RotationAxis(axis, fAngle); + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control) { + return GetRotationFromCursor(control, 1.0f); + } + + + + + /// + /// Axis to axis quaternion double angle (no normalization) + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by 2*THETA. + /// + public static Quaternion D3DXQuaternionUnitAxisToUnitAxis2(Vector3 fromVector, Vector3 toVector) { + Vector3 axis = Vector3.Cross(fromVector, toVector); // proportional to sin(theta) + return new Quaternion(axis.X, axis.Y, axis.Z, Vector3.Dot(fromVector, toVector)); + } + + + + + /// + /// Axis to axis quaternion + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by theta. + /// + public static Quaternion D3DXQuaternionAxisToAxis(Vector3 fromVector, Vector3 toVector) { + Vector3 vA = Vector3.Normalize(fromVector), vB = Vector3.Normalize(toVector); + Vector3 vHalf = Vector3.Add(vA,vB); + vHalf = Vector3.Normalize(vHalf); + return GraphicsUtility.D3DXQuaternionUnitAxisToUnitAxis2(vA, vHalf); + } + + + + + /// + /// Gets the number of ColorChanelBits from a format + /// + static public int GetColorChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 8; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 8; + case Format.R5G6B5: + return 5; + case Format.X1R5G5B5: + return 5; + case Format.A1R5G5B5: + return 5; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 2; + case Format.A8R3G3B2: + return 2; + case Format.X4R4G4B4: + return 4; + case Format.A2B10G10R10: + return 10; + case Format.A2R10G10B10: + return 10; + default: + return 0; + } + } + + + + + /// + /// Gets the number of alpha channel bits + /// + static public int GetAlphaChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 0; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 0; + case Format.R5G6B5: + return 0; + case Format.X1R5G5B5: + return 0; + case Format.A1R5G5B5: + return 1; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 0; + case Format.A8R3G3B2: + return 8; + case Format.X4R4G4B4: + return 0; + case Format.A2B10G10R10: + return 2; + case Format.A2R10G10B10: + return 2; + default: + return 0; + } + } + + + + + /// + /// Gets the number of depth bits + /// + static public int GetDepthBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 16; + case DepthFormat.D15S1: + return 15; + case DepthFormat.D24X8: + return 24; + case DepthFormat.D24S8: + return 24; + case DepthFormat.D24X4S4: + return 24; + case DepthFormat.D32: + return 32; + default: + return 0; + } + } + + + + + /// + /// Gets the number of stencil bits + /// + static public int GetStencilBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 0; + case DepthFormat.D15S1: + return 1; + case DepthFormat.D24X8: + return 0; + case DepthFormat.D24S8: + return 8; + case DepthFormat.D24X4S4: + return 4; + case DepthFormat.D32: + return 0; + default: + return 0; + } + } + + + + + /// + /// Assembles and creates a file-based vertex shader + /// + public static VertexShader CreateVertexShader(Device device, string filename) { + GraphicsStream code = null; + string path = null; + + // Get the path to the vertex shader file + path = DXUtil.FindMediaFile(null, filename); + + // Assemble the vertex shader file + code = ShaderLoader.FromFile(path, null, 0); + + // Create the vertex shader + return new VertexShader(device, code); + } + +} + + + + +/// +/// An arc ball class +/// +public class GraphicsArcBall { + private int internalWidth; // ArcBall's window width + private int internalHeight; // ArcBall's window height + private float internalradius; // ArcBall's radius in screen coords + private float internalradiusTranslation; // ArcBall's radius for translating the target + + private Quaternion internaldownQuat; // Quaternion before button down + private Quaternion internalnowQuat; // Composite quaternion for current drag + private Matrix internalrotationMatrix; // Matrix for arcball's orientation + private Matrix internalrotationDelta; // Matrix for arcball's orientation + private Matrix internaltranslationMatrix; // Matrix for arcball's position + private Matrix internaltranslationDelta; // Matrix for arcball's position + private bool internaldragging; // Whether user is dragging arcball + private bool internaluseRightHanded; // Whether to use RH coordinate system + private int saveMouseX = 0; // Saved mouse position + private int saveMouseY = 0; + private Vector3 internalvectorDown; // Button down vector + System.Windows.Forms.Control parent; // parent + + + + + /// + /// Constructor + /// + public GraphicsArcBall(System.Windows.Forms.Control p) { + internaldownQuat = Quaternion.Identity; + internalnowQuat = Quaternion.Identity; + internalrotationMatrix = Matrix.Identity; + internalrotationDelta = Matrix.Identity; + internaltranslationMatrix = Matrix.Identity; + internaltranslationDelta = Matrix.Identity; + internaldragging = false; + internalradiusTranslation = 1.0f; + internaluseRightHanded = false; + + parent = p; + // Hook the events + p.MouseDown += new MouseEventHandler(this.OnContainerMouseDown); + p.MouseUp += new MouseEventHandler(this.OnContainerMouseUp); + p.MouseMove += new MouseEventHandler(this.OnContainerMouseMove); + } + + + + + /// + /// Set the window dimensions + /// + public void SetWindow(int width, int height, float radius) { + // Set ArcBall info + internalWidth = width; + internalHeight = height; + internalradius = radius; + } + + + + + /// + /// Screen coords to a vector + /// + private Vector3 ScreenToVector(int xpos, int ypos) { + // Scale to screen + float x = -(xpos - internalWidth/2) / (internalradius*internalWidth/2); + float y = (ypos - internalHeight/2) / (internalradius*internalHeight/2); + + if (internaluseRightHanded) { + x = -x; + y = -y; + } + + float z = 0.0f; + float mag = x*x + y*y; + + if (mag > 1.0f) { + float scale = 1.0f/(float)Math.Sqrt(mag); + x *= scale; + y *= scale; + } + else + z = (float)Math.Sqrt(1.0f - mag); + + // Return vector + return new Vector3(x, y, z); + } + + + + + /// + /// Fired when the containers mouse button is down + /// + private void OnContainerMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { + // Store off the position of the cursor when the button is pressed + saveMouseX = e.X; + saveMouseY = e.Y; + + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // Start drag mode + internaldragging = true; + internalvectorDown = ScreenToVector(e.X, e.Y); + internaldownQuat = internalnowQuat; + } + } + + + + + /// + /// Fired when the containers mouse button has been released + /// + private void OnContainerMouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // End drag mode + internaldragging = false; + } + } + + + + + /// + /// Fired when the containers mouse is moving + /// + private void OnContainerMouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + if (internaldragging) { + // recompute nowQuat + Vector3 vCur = ScreenToVector(e.X, e.Y); + Quaternion qAxisToAxis = GraphicsUtility.D3DXQuaternionAxisToAxis(internalvectorDown, vCur); + internalnowQuat = internaldownQuat; + internalnowQuat = Quaternion.Multiply(internalnowQuat,qAxisToAxis); + internalrotationDelta = Matrix.RotationQuaternion(qAxisToAxis); + } + else + internalrotationDelta = Matrix.Identity; + + internalrotationMatrix = Matrix.RotationQuaternion(internalnowQuat); + internaldragging = true; + } + + if ((e.Button == System.Windows.Forms.MouseButtons.Right) || (e.Button == System.Windows.Forms.MouseButtons.Middle)) { + // Normalize based on size of window and bounding sphere radius + float fDeltaX = (saveMouseX-e.X) * internalradiusTranslation / internalWidth; + float fDeltaY = (saveMouseY-e.Y) * internalradiusTranslation / internalHeight; + + if (e.Button == System.Windows.Forms.MouseButtons.Right) { + internaltranslationDelta = Matrix.Translation(-2 * fDeltaX, 2 * fDeltaY, 0.0f); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + if (e.Button == System.Windows.Forms.MouseButtons.Middle) { + internaltranslationDelta = Matrix.Translation(0.0f, 0.0f, 5 * fDeltaY); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + + // Store mouse coordinate + saveMouseX = e.X; + saveMouseY = e.Y; + } + } + + #region Various properties of the class + public float Radius { + set { + internalradiusTranslation = value; } + } + public bool RightHanded { + get { return internaluseRightHanded; } + set { internaluseRightHanded = value; } + } + public Matrix RotationMatrix { + get { return internalrotationMatrix; } + } + public Matrix RotationDeltaMatrix { + get { return internalrotationDelta; } + } + public Matrix TranslationMatrix { + get { return internaltranslationMatrix; } + } + public Matrix TranslationDeltaMatrix { + get { return internaltranslationDelta; } + } + public bool IsBeingDragged { + get { return internaldragging; } + } + #endregion +} + + + + +/// +/// Handles our meshes +/// +public class GraphicsMesh : IDisposable { + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + + + + + /// + /// Constructor + /// + /// The initial filename + public GraphicsMesh(string filename) { + fileName = filename; + } + public GraphicsMesh() : this ("CD3DFile_Mesh") {} + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + string strPath = null; + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Find the path for the file, and convert it to ANSI (for the D3DX API) + strPath = DXUtil.FindMediaFile(null, filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(strPath, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + } + + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. Note: because we are passing in + // no flags, the default behavior is to clone into local memory. + localMemoryMesh = systemMemoryMesh.Clone(0, systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(Device device, bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render(Device device) { + Render(device, true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/dinput.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/dinput.cs new file mode 100644 index 0000000..b6c0e6b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/dinput.cs @@ -0,0 +1,112 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + +/// +/// This class is where the DirectInput routines +/// for the application resides. +/// +public class InputClass +{ + + private const byte msgUp = 0; + private const byte msgDown = 1; + private const byte msgLeft = 2; + private const byte msgRight = 3; + private const byte msgCancelUp = 4; + private const byte msgCancelDown = 5; + private const byte msgCancelLeft = 6; + private const byte msgCancelRight = 7; + private bool pressedUp = false; + private bool pressedDown = false; + private bool pressedLeft = false; + private bool pressedRight = false; + + private Control owner = null; + private Device localDevice = null; + private PlayClass play = null; + + public InputClass(Control owner, PlayClass play) + { + this.owner = owner; + this.play = play; + + localDevice = new Device(SystemGuid.Keyboard); + localDevice.SetDataFormat(DeviceDataFormat.Keyboard); + localDevice.SetCooperativeLevel(owner, CooperativeLevelFlags.Foreground | CooperativeLevelFlags.NonExclusive); + } + + public Point GetInputState() + { + KeyboardState state = null; + Point p = new Point(0); + + try + { + state = localDevice.GetCurrentKeyboardState(); + } + catch(InputException) + { + do + { + Application.DoEvents(); + try{ localDevice.Acquire(); } + catch (InputLostException) + { continue; } + catch(OtherApplicationHasPriorityException) + { continue; } + + break; + + }while( true ); + } + + if(null == state) + return p; + + if(state[Key.Down]) + { + pressedDown = true; + play.WriteMessage(msgDown); + } + else if (pressedDown == true) + { + pressedDown = false; + play.WriteMessage(msgCancelDown); + } + if(state[Key.Up]) + { + pressedUp = true; + play.WriteMessage(msgUp); + } + else if (pressedUp == true) + { + pressedUp = false; + play.WriteMessage(msgCancelUp); + } + if(state[Key.Left]) + { + pressedLeft = true; + play.WriteMessage(msgLeft); + } + else if (pressedLeft == true) + { + pressedLeft = false; + play.WriteMessage(msgCancelLeft); + } + if(state[Key.Right]) + { + pressedRight = true; + play.WriteMessage(msgRight); + } + else if (pressedRight == true) + { + pressedRight = false; + play.WriteMessage(msgCancelRight); + } + + return p; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/dplay.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/dplay.cs new file mode 100644 index 0000000..2592495 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/dplay.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + +/// +/// The class that houses DirectPlay code for the application. +/// +public class PlayClass : IDisposable +{ + private MessageDelegate message = null; + + private GameClass parent = null; + + public Peer peerObject = null; + private ConnectWizard Connect = null; + private ArrayList PlayerList = new ArrayList(); + private int LocalPlayerID = 0; + public Guid AppGuid = new Guid(0x876a3036, 0xffd7, 0x46bc, 0x92, 0x9, 0xb4, 0x2f, 0x61, 0x7b, 0x9b, 0xF1); + + public struct Players + { + public int dpnID; + public string Name; + public Players(int id, string n) + { dpnID = id; Name = n; } + } + + public void Dispose() + { + peerObject.Dispose(); + } + + public PlayClass(GameClass parent) + { + this.parent = parent; + this.peerObject = peerObject; + this.message = new MessageDelegate(parent.MessageArrived); + + peerObject = new Peer(); + // First set up our event handlers (We only need events for the ones we care about) + peerObject.PlayerCreated += new PlayerCreatedEventHandler(this.PlayerCreated); + peerObject.PlayerDestroyed += new PlayerDestroyedEventHandler(this.PlayerDestroyed); + peerObject.HostMigrated += new HostMigratedEventHandler(this.HostMigrated); + peerObject.Receive += new ReceiveEventHandler(this.DataReceived); + peerObject.SessionTerminated += new SessionTerminatedEventHandler(this.SessionTerminated); + + Connect = new ConnectWizard(peerObject, AppGuid, "Step2"); + if (!Connect.StartWizard()) + { + MessageBox.Show("DirectPlay initialization was incomplete. Application will terminate."); + throw new DirectXException(); + } + } + + public void WriteMessage(byte msg) + { + NetworkPacket packet = new NetworkPacket(); + + packet.Write(msg); + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.Guaranteed); + } + + #region DirectPlayEvents + /// + // These are the events the app will handle + // when DPlay fires them. + /// + private void PlayerCreated(object sender, PlayerCreatedEventArgs dpMessage) + { + // Get the PlayerInformation and store it + PlayerInformation dpPeer = peerObject.GetPeerInformation(dpMessage.Message.PlayerID); + Players oPlayer = new Players(dpMessage.Message.PlayerID,dpPeer.Name); + // We lock the data here since it is shared across multiple threads. + lock (PlayerList) + { + PlayerList.Add(oPlayer); + } + // Save this player id if it's ourselves + if (dpPeer.Local) + LocalPlayerID = dpMessage.Message.PlayerID; + + } + private void PlayerDestroyed(object sender, PlayerDestroyedEventArgs dpMessage) + { + // Remove this player from our list + // We lock the data here since it is shared across multiple threads. + lock (PlayerList) + { + foreach (Players player in PlayerList) + { + if (dpMessage.Message.PlayerID == player.dpnID) + { + PlayerList.Remove(player); + break; + } + } + } + } + private void HostMigrated(object sender, HostMigratedEventArgs dpMessage) + { + if (LocalPlayerID == dpMessage.Message.NewHostID) + { + // This application instance is the new host, update the UI + parent.Text += " (HOST)"; + } + } + private void DataReceived(object sender, ReceiveEventArgs dpMessage) + { + lock(this) + { + byte data = (byte)dpMessage.Message.ReceiveData.Read(typeof(byte)); + message(data); + } + } + private void SessionTerminated(object sender, SessionTerminatedEventArgs dpMessage) + { + // This session is being terminated, let the user know + if (dpMessage.Message.ResultCode == ResultCode.HostTerminatedSession) + MessageBox.Show("The Host has terminated this session. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + else + MessageBox.Show("The session has been lost. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + + // This will post a message on the main thread to shut down our form + parent.BeginInvoke(new PeerCloseCallback(parent.PeerClose)); + } + #endregion +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step03/main.cs b/Source Code updated 08-12-05/Spacewar3D/Step03/main.cs new file mode 100644 index 0000000..041c211 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step03/main.cs @@ -0,0 +1,50 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Container = System.ComponentModel.Container; + + + /// + /// The main windows form for the application. + /// +public class MainClass +{ + + private GameClass game = null; + private SplashScreen splash = null; + private bool enableNetwork = false; + public bool EnableNetwork { get { return enableNetwork; } set { enableNetwork = value; } } + + private Size gameFormSize; + public Size GameFormSize { get { return gameFormSize; } set { gameFormSize = value; } } + + private bool fullScreen = false; + public bool FullScreen { get { return fullScreen; } set { fullScreen = value; } } + + /// + // Main entry point of the application. + /// + public static void Main() + { + MainClass m = new MainClass(); + } + + public MainClass() + { + + //display the splash screen and determine network status + splash = new SplashScreen(this); + splash.ShowDialog(); + + try + { + game = new GameClass(fullScreen, gameFormSize, enableNetwork); + } + catch(DirectXException) + { + return; + } + if( game.CreateGraphicsSample() ) + game.Run(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/App.config b/Source Code updated 08-12-05/Spacewar3D/Step04/App.config new file mode 100644 index 0000000..5bbb96b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/D3DSettingsForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/D3DSettingsForm.cs new file mode 100644 index 0000000..889162a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/D3DSettingsForm.cs @@ -0,0 +1,1037 @@ +//----------------------------------------------------------------------------- +// File: D3DSettingsForm.cs +// +// Desc: Application form for setting up user defined display settings +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + + + + + +/// +/// A form to allow the user to change the current D3D settings. +/// +public class D3DSettingsForm : System.Windows.Forms.Form { + private D3DEnumeration enumeration; + public D3DSettings settings; // Potential new D3D settings + + private System.Windows.Forms.GroupBox adapterDeviceGroupBox; + private System.Windows.Forms.Label displayAdapterLabel; + private System.Windows.Forms.ComboBox adapterComboBox; + private System.Windows.Forms.Label deviceLabel; + private System.Windows.Forms.ComboBox deviceComboBox; + private System.Windows.Forms.GroupBox modeSettingsGroupBox; + private System.Windows.Forms.RadioButton windowedRadioButton; + private System.Windows.Forms.RadioButton fullscreenRadioButton; + private System.Windows.Forms.Label adapterFormatLabel; + private System.Windows.Forms.ComboBox adapterFormatComboBox; + private System.Windows.Forms.Label resolutionLabel; + private System.Windows.Forms.ComboBox resolutionComboBox; + private System.Windows.Forms.Label refreshRateLabel; + private System.Windows.Forms.ComboBox refreshRateComboBox; + private System.Windows.Forms.GroupBox otherSettingsGroupBox; + private System.Windows.Forms.Label backBufferFormatLabel; + private System.Windows.Forms.ComboBox backBufferFormatComboBox; + private System.Windows.Forms.Label depthStencilBufferLabel; + private System.Windows.Forms.ComboBox depthStencilBufferComboBox; + private System.Windows.Forms.Label multisampleLabel; + private System.Windows.Forms.ComboBox multisampleComboBox; + private System.Windows.Forms.Label vertexProcLabel; + private System.Windows.Forms.ComboBox vertexProcComboBox; + private System.Windows.Forms.Label presentIntervalLabel; + private System.Windows.Forms.ComboBox presentIntervalComboBox; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.ComboBox multisampleQualityComboBox; + private System.Windows.Forms.Label multisampleQualityLabel; + + + + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + + /// + /// Constructor. Pass in an enumeration and the current D3D settings. + /// + public D3DSettingsForm(D3DEnumeration enumerationParam, D3DSettings settingsParam) { + enumeration = enumerationParam; + settings = settingsParam.Clone(); + + // Required for Windows Form Designer support + InitializeComponent(); + + // Fill adapter combo box. Updating the selected adapter will trigger + // updates of the rest of the dialog. + foreach (GraphicsAdapterInfo adapterInfo in enumeration.AdapterInfoList) { + adapterComboBox.Items.Add(adapterInfo); + if (adapterInfo.AdapterOrdinal == settings.AdapterOrdinal) + adapterComboBox.SelectedItem = adapterInfo; + } + if (adapterComboBox.SelectedItem == null && adapterComboBox.Items.Count > 0) + adapterComboBox.SelectedIndex = 0; + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + if (components != null) + components.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.adapterDeviceGroupBox = new System.Windows.Forms.GroupBox(); + this.deviceComboBox = new System.Windows.Forms.ComboBox(); + this.deviceLabel = new System.Windows.Forms.Label(); + this.adapterComboBox = new System.Windows.Forms.ComboBox(); + this.displayAdapterLabel = new System.Windows.Forms.Label(); + this.fullscreenRadioButton = new System.Windows.Forms.RadioButton(); + this.cancelButton = new System.Windows.Forms.Button(); + this.otherSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.multisampleQualityComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleQualityLabel = new System.Windows.Forms.Label(); + this.multisampleComboBox = new System.Windows.Forms.ComboBox(); + this.backBufferFormatComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferLabel = new System.Windows.Forms.Label(); + this.backBufferFormatLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcLabel = new System.Windows.Forms.Label(); + this.presentIntervalComboBox = new System.Windows.Forms.ComboBox(); + this.presentIntervalLabel = new System.Windows.Forms.Label(); + this.resolutionComboBox = new System.Windows.Forms.ComboBox(); + this.windowedRadioButton = new System.Windows.Forms.RadioButton(); + this.resolutionLabel = new System.Windows.Forms.Label(); + this.refreshRateComboBox = new System.Windows.Forms.ComboBox(); + this.adapterFormatLabel = new System.Windows.Forms.Label(); + this.refreshRateLabel = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.modeSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.adapterFormatComboBox = new System.Windows.Forms.ComboBox(); + this.adapterDeviceGroupBox.SuspendLayout(); + this.otherSettingsGroupBox.SuspendLayout(); + this.modeSettingsGroupBox.SuspendLayout(); + this.SuspendLayout(); + // + // adapterDeviceGroupBox + // + this.adapterDeviceGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.deviceComboBox, + this.deviceLabel, + this.adapterComboBox, + this.displayAdapterLabel}); + this.adapterDeviceGroupBox.Location = new System.Drawing.Point(16, 8); + this.adapterDeviceGroupBox.Name = "adapterDeviceGroupBox"; + this.adapterDeviceGroupBox.Size = new System.Drawing.Size(400, 80); + this.adapterDeviceGroupBox.TabIndex = 0; + this.adapterDeviceGroupBox.TabStop = false; + this.adapterDeviceGroupBox.Text = "Adapter and device"; + // + // deviceComboBox + // + this.deviceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.deviceComboBox.DropDownWidth = 121; + this.deviceComboBox.Location = new System.Drawing.Point(160, 48); + this.deviceComboBox.Name = "deviceComboBox"; + this.deviceComboBox.Size = new System.Drawing.Size(232, 21); + this.deviceComboBox.TabIndex = 3; + this.deviceComboBox.SelectedIndexChanged += new System.EventHandler(this.DeviceChanged); + // + // deviceLabel + // + this.deviceLabel.Location = new System.Drawing.Point(8, 48); + this.deviceLabel.Name = "deviceLabel"; + this.deviceLabel.Size = new System.Drawing.Size(152, 23); + this.deviceLabel.TabIndex = 2; + this.deviceLabel.Text = "Render &Device:"; + // + // adapterComboBox + // + this.adapterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterComboBox.DropDownWidth = 121; + this.adapterComboBox.Location = new System.Drawing.Point(160, 24); + this.adapterComboBox.Name = "adapterComboBox"; + this.adapterComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterComboBox.TabIndex = 1; + this.adapterComboBox.SelectedIndexChanged += new System.EventHandler(this.AdapterChanged); + // + // displayAdapterLabel + // + this.displayAdapterLabel.Location = new System.Drawing.Point(8, 24); + this.displayAdapterLabel.Name = "displayAdapterLabel"; + this.displayAdapterLabel.Size = new System.Drawing.Size(152, 23); + this.displayAdapterLabel.TabIndex = 0; + this.displayAdapterLabel.Text = "Display &Adapter:"; + // + // fullscreenRadioButton + // + this.fullscreenRadioButton.Location = new System.Drawing.Point(9, 38); + this.fullscreenRadioButton.Name = "fullscreenRadioButton"; + this.fullscreenRadioButton.Size = new System.Drawing.Size(152, 24); + this.fullscreenRadioButton.TabIndex = 1; + this.fullscreenRadioButton.Text = "&Fullscreen"; + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(248, 464); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.TabIndex = 4; + this.cancelButton.Text = "Cancel"; + // + // otherSettingsGroupBox + // + this.otherSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.multisampleQualityComboBox, + this.multisampleQualityLabel, + this.multisampleComboBox, + this.backBufferFormatComboBox, + this.multisampleLabel, + this.depthStencilBufferLabel, + this.backBufferFormatLabel, + this.depthStencilBufferComboBox, + this.vertexProcComboBox, + this.vertexProcLabel, + this.presentIntervalComboBox, + this.presentIntervalLabel}); + this.otherSettingsGroupBox.Location = new System.Drawing.Point(16, 264); + this.otherSettingsGroupBox.Name = "otherSettingsGroupBox"; + this.otherSettingsGroupBox.Size = new System.Drawing.Size(400, 176); + this.otherSettingsGroupBox.TabIndex = 2; + this.otherSettingsGroupBox.TabStop = false; + this.otherSettingsGroupBox.Text = "Device settings"; + // + // multisampleQualityComboBox + // + this.multisampleQualityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleQualityComboBox.DropDownWidth = 144; + this.multisampleQualityComboBox.Location = new System.Drawing.Point(160, 96); + this.multisampleQualityComboBox.Name = "multisampleQualityComboBox"; + this.multisampleQualityComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleQualityComboBox.TabIndex = 7; + this.multisampleQualityComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleQualityChanged); + // + // multisampleQualityLabel + // + this.multisampleQualityLabel.Location = new System.Drawing.Point(8, 96); + this.multisampleQualityLabel.Name = "multisampleQualityLabel"; + this.multisampleQualityLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleQualityLabel.TabIndex = 6; + this.multisampleQualityLabel.Text = "Multisample &Quality:"; + // + // multisampleComboBox + // + this.multisampleComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleComboBox.DropDownWidth = 144; + this.multisampleComboBox.Location = new System.Drawing.Point(160, 72); + this.multisampleComboBox.Name = "multisampleComboBox"; + this.multisampleComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleComboBox.TabIndex = 5; + this.multisampleComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleTypeChanged); + // + // backBufferFormatComboBox + // + this.backBufferFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.backBufferFormatComboBox.DropDownWidth = 144; + this.backBufferFormatComboBox.Location = new System.Drawing.Point(160, 24); + this.backBufferFormatComboBox.Name = "backBufferFormatComboBox"; + this.backBufferFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.backBufferFormatComboBox.TabIndex = 1; + this.backBufferFormatComboBox.SelectedIndexChanged += new System.EventHandler(this.BackBufferFormatChanged); + // + // multisampleLabel + // + this.multisampleLabel.Location = new System.Drawing.Point(8, 72); + this.multisampleLabel.Name = "multisampleLabel"; + this.multisampleLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleLabel.TabIndex = 4; + this.multisampleLabel.Text = "&Multisample Type:"; + // + // depthStencilBufferLabel + // + this.depthStencilBufferLabel.Location = new System.Drawing.Point(8, 48); + this.depthStencilBufferLabel.Name = "depthStencilBufferLabel"; + this.depthStencilBufferLabel.Size = new System.Drawing.Size(152, 23); + this.depthStencilBufferLabel.TabIndex = 2; + this.depthStencilBufferLabel.Text = "De&pth/Stencil Buffer Format:"; + // + // backBufferFormatLabel + // + this.backBufferFormatLabel.Location = new System.Drawing.Point(8, 24); + this.backBufferFormatLabel.Name = "backBufferFormatLabel"; + this.backBufferFormatLabel.Size = new System.Drawing.Size(152, 23); + this.backBufferFormatLabel.TabIndex = 0; + this.backBufferFormatLabel.Text = "&Back Buffer Format:"; + // + // depthStencilBufferComboBox + // + this.depthStencilBufferComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.depthStencilBufferComboBox.DropDownWidth = 144; + this.depthStencilBufferComboBox.Location = new System.Drawing.Point(160, 48); + this.depthStencilBufferComboBox.Name = "depthStencilBufferComboBox"; + this.depthStencilBufferComboBox.Size = new System.Drawing.Size(232, 21); + this.depthStencilBufferComboBox.TabIndex = 3; + this.depthStencilBufferComboBox.SelectedIndexChanged += new System.EventHandler(this.DepthStencilBufferFormatChanged); + // + // vertexProcComboBox + // + this.vertexProcComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.vertexProcComboBox.DropDownWidth = 121; + this.vertexProcComboBox.Location = new System.Drawing.Point(160, 120); + this.vertexProcComboBox.Name = "vertexProcComboBox"; + this.vertexProcComboBox.Size = new System.Drawing.Size(232, 21); + this.vertexProcComboBox.TabIndex = 9; + this.vertexProcComboBox.SelectedIndexChanged += new System.EventHandler(this.VertexProcessingChanged); + // + // vertexProcLabel + // + this.vertexProcLabel.Location = new System.Drawing.Point(8, 120); + this.vertexProcLabel.Name = "vertexProcLabel"; + this.vertexProcLabel.Size = new System.Drawing.Size(152, 23); + this.vertexProcLabel.TabIndex = 8; + this.vertexProcLabel.Text = "&Vertex Processing:"; + // + // presentIntervalComboBox + // + this.presentIntervalComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.presentIntervalComboBox.DropDownWidth = 121; + this.presentIntervalComboBox.Location = new System.Drawing.Point(160, 144); + this.presentIntervalComboBox.Name = "presentIntervalComboBox"; + this.presentIntervalComboBox.Size = new System.Drawing.Size(232, 21); + this.presentIntervalComboBox.TabIndex = 11; + this.presentIntervalComboBox.SelectedValueChanged += new System.EventHandler(this.PresentIntervalChanged); + // + // presentIntervalLabel + // + this.presentIntervalLabel.Location = new System.Drawing.Point(8, 144); + this.presentIntervalLabel.Name = "presentIntervalLabel"; + this.presentIntervalLabel.Size = new System.Drawing.Size(152, 23); + this.presentIntervalLabel.TabIndex = 10; + this.presentIntervalLabel.Text = "Present &Interval:"; + // + // resolutionComboBox + // + this.resolutionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.resolutionComboBox.DropDownWidth = 144; + this.resolutionComboBox.Location = new System.Drawing.Point(161, 94); + this.resolutionComboBox.MaxDropDownItems = 14; + this.resolutionComboBox.Name = "resolutionComboBox"; + this.resolutionComboBox.Size = new System.Drawing.Size(232, 21); + this.resolutionComboBox.TabIndex = 5; + this.resolutionComboBox.SelectedIndexChanged += new System.EventHandler(this.ResolutionChanged); + // + // windowedRadioButton + // + this.windowedRadioButton.Location = new System.Drawing.Point(9, 14); + this.windowedRadioButton.Name = "windowedRadioButton"; + this.windowedRadioButton.Size = new System.Drawing.Size(152, 24); + this.windowedRadioButton.TabIndex = 0; + this.windowedRadioButton.Text = "&Windowed"; + this.windowedRadioButton.CheckedChanged += new System.EventHandler(this.WindowedFullscreenChanged); + // + // resolutionLabel + // + this.resolutionLabel.Location = new System.Drawing.Point(8, 94); + this.resolutionLabel.Name = "resolutionLabel"; + this.resolutionLabel.Size = new System.Drawing.Size(152, 23); + this.resolutionLabel.TabIndex = 4; + this.resolutionLabel.Text = "&Resolution:"; + // + // refreshRateComboBox + // + this.refreshRateComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.refreshRateComboBox.DropDownWidth = 144; + this.refreshRateComboBox.Location = new System.Drawing.Point(161, 118); + this.refreshRateComboBox.MaxDropDownItems = 14; + this.refreshRateComboBox.Name = "refreshRateComboBox"; + this.refreshRateComboBox.Size = new System.Drawing.Size(232, 21); + this.refreshRateComboBox.TabIndex = 7; + this.refreshRateComboBox.SelectedIndexChanged += new System.EventHandler(this.RefreshRateChanged); + // + // adapterFormatLabel + // + this.adapterFormatLabel.Location = new System.Drawing.Point(8, 72); + this.adapterFormatLabel.Name = "adapterFormatLabel"; + this.adapterFormatLabel.Size = new System.Drawing.Size(152, 23); + this.adapterFormatLabel.TabIndex = 2; + this.adapterFormatLabel.Text = "Adapter F&ormat:"; + // + // refreshRateLabel + // + this.refreshRateLabel.Location = new System.Drawing.Point(8, 118); + this.refreshRateLabel.Name = "refreshRateLabel"; + this.refreshRateLabel.Size = new System.Drawing.Size(152, 23); + this.refreshRateLabel.TabIndex = 6; + this.refreshRateLabel.Text = "R&efresh Rate:"; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(112, 464); + this.okButton.Name = "okButton"; + this.okButton.TabIndex = 3; + this.okButton.Text = "OK"; + // + // modeSettingsGroupBox + // + this.modeSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.adapterFormatLabel, + this.refreshRateLabel, + this.resolutionComboBox, + this.adapterFormatComboBox, + this.resolutionLabel, + this.refreshRateComboBox, + this.windowedRadioButton, + this.fullscreenRadioButton}); + this.modeSettingsGroupBox.Location = new System.Drawing.Point(16, 96); + this.modeSettingsGroupBox.Name = "modeSettingsGroupBox"; + this.modeSettingsGroupBox.Size = new System.Drawing.Size(400, 160); + this.modeSettingsGroupBox.TabIndex = 1; + this.modeSettingsGroupBox.TabStop = false; + this.modeSettingsGroupBox.Text = "Display mode settings"; + // + // adapterFormatComboBox + // + this.adapterFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterFormatComboBox.DropDownWidth = 121; + this.adapterFormatComboBox.Location = new System.Drawing.Point(161, 70); + this.adapterFormatComboBox.MaxDropDownItems = 14; + this.adapterFormatComboBox.Name = "adapterFormatComboBox"; + this.adapterFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterFormatComboBox.TabIndex = 3; + this.adapterFormatComboBox.SelectedValueChanged += new System.EventHandler(this.AdapterFormatChanged); + // + // D3DSettingsForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(438, 512); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.cancelButton, + this.okButton, + this.adapterDeviceGroupBox, + this.modeSettingsGroupBox, + this.otherSettingsGroupBox}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.Name = "D3DSettingsForm"; + this.Text = "Direct3D Settings"; + this.adapterDeviceGroupBox.ResumeLayout(false); + this.otherSettingsGroupBox.ResumeLayout(false); + this.modeSettingsGroupBox.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// Respond to a change of selected adapter by rebuilding the device + /// list. Updating the selected device will trigger updates of the + /// rest of the dialog. + /// + private void AdapterChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + settings.AdapterInfo = adapterInfo; + + // Update device combo box + deviceComboBox.Items.Clear(); + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + deviceComboBox.Items.Add(deviceInfo); + if (deviceInfo.DevType == settings.DevType) + deviceComboBox.SelectedItem = deviceInfo; + } + if (deviceComboBox.SelectedItem == null && deviceComboBox.Items.Count > 0) + deviceComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected device by resetting the + /// fullscreen/windowed radio buttons. Updating these buttons + /// will trigger updates of the rest of the dialog. + /// + private void DeviceChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + settings.DeviceInfo = deviceInfo; + + // Update fullscreen/windowed radio buttons + bool HasWindowedDeviceCombo = false; + bool HasFullscreenDeviceCombo = false; + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + HasWindowedDeviceCombo = true; + else + HasFullscreenDeviceCombo = true; + } + windowedRadioButton.Enabled = HasWindowedDeviceCombo; + fullscreenRadioButton.Enabled = HasFullscreenDeviceCombo; + if (settings.IsWindowed && HasWindowedDeviceCombo) { + windowedRadioButton.Checked = true; + } + else { + fullscreenRadioButton.Checked = true; + } + WindowedFullscreenChanged(null, null); + } + + + + + /// + /// Respond to a change of windowed/fullscreen state by rebuilding the + /// adapter format list, resolution list, and refresh rate list. + /// Updating the selected adapter format will trigger updates of the + /// rest of the dialog. + /// + private void WindowedFullscreenChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + if (windowedRadioButton.Checked) { + settings.IsWindowed = true; + settings.WindowedAdapterInfo = adapterInfo; + settings.WindowedDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + adapterFormatComboBox.Items.Add(settings.WindowedDisplayMode.Format); + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = false; + + // Update resolution combo box + resolutionComboBox.Items.Clear(); + resolutionComboBox.Items.Add(FormatResolution(settings.WindowedDisplayMode.Width, + settings.WindowedDisplayMode.Height)); + resolutionComboBox.SelectedIndex = 0; + resolutionComboBox.Enabled = false; + + // Update refresh rate combo box + refreshRateComboBox.Items.Clear(); + refreshRateComboBox.Items.Add(FormatRefreshRate(settings.WindowedDisplayMode.RefreshRate)); + refreshRateComboBox.SelectedIndex = 0; + refreshRateComboBox.Enabled = false; + } + else { + settings.IsWindowed = false; + settings.FullscreenAdapterInfo = adapterInfo; + settings.FullscreenDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + continue; + if (!adapterFormatComboBox.Items.Contains(deviceCombo.AdapterFormat)) { + adapterFormatComboBox.Items.Add(deviceCombo.AdapterFormat); + if (deviceCombo.AdapterFormat == (settings.IsWindowed ? + settings.WindowedDisplayMode.Format : settings.FullscreenDisplayMode.Format)) { + adapterFormatComboBox.SelectedItem = deviceCombo.AdapterFormat; + } + } + } + if (adapterFormatComboBox.SelectedItem == null && adapterFormatComboBox.Items.Count > 0) + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = true; + + // Update resolution combo box + resolutionComboBox.Enabled = true; + + // Update refresh rate combo box + refreshRateComboBox.Enabled = true; + } + } + + + + + /// + /// Converts the given width and height into a formatted string + /// + private string FormatResolution(int width, int height) { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} by {1}", width, height); + return sb.ToString(); + } + + + + + /// + /// Converts the given refresh rate into a formatted string + /// + private string FormatRefreshRate(int refreshRate) { + if (refreshRate == 0) { + return "Default Rate"; + } + else { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} Hz", refreshRate); + return sb.ToString(); + } + } + + + + + /// + /// Respond to a change of selected adapter format by rebuilding the + /// resolution list and back buffer format list. Updating the selected + /// resolution and back buffer format will trigger updates of the rest + /// of the dialog. + /// + private void AdapterFormatChanged(object sender, System.EventArgs e) { + if (!windowedRadioButton.Checked) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + settings.FullscreenDisplayMode.Format = adapterFormat; + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + + resolutionComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat) { + string resolutionString = FormatResolution(displayMode.Width, displayMode.Height); + if (!resolutionComboBox.Items.Contains(resolutionString)) { + resolutionComboBox.Items.Add(resolutionString); + if (settings.FullscreenDisplayMode.Width == displayMode.Width && + settings.FullscreenDisplayMode.Height == displayMode.Height) { + resolutionComboBox.SelectedItem = resolutionString; + } + } + } + } + if (resolutionComboBox.SelectedItem == null && resolutionComboBox.Items.Count > 0) + resolutionComboBox.SelectedIndex = 0; + } + + // Update backbuffer format combo box + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + backBufferFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == settings.DisplayMode.Format) { + if (!backBufferFormatComboBox.Items.Contains(deviceCombo.BackBufferFormat)) { + backBufferFormatComboBox.Items.Add(deviceCombo.BackBufferFormat); + if (deviceCombo.BackBufferFormat == settings.BackBufferFormat) + backBufferFormatComboBox.SelectedItem = deviceCombo.BackBufferFormat; + } + } + } + if (backBufferFormatComboBox.SelectedItem == null && backBufferFormatComboBox.Items.Count > 0) + backBufferFormatComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected resolution by rebuilding the + /// refresh rate list. + /// + private void ResolutionChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + + // Update settings with new resolution + string resolution = (string)resolutionComboBox.SelectedItem; + string[] resolutionSplitStringArray = resolution.Split(); + int width = int.Parse(resolutionSplitStringArray[0]); + int height = int.Parse(resolutionSplitStringArray[2]); + settings.FullscreenDisplayMode.Width = width; + settings.FullscreenDisplayMode.Height = height; + + // Update refresh rate list based on new resolution + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + refreshRateComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat && + displayMode.Width == width && + displayMode.Height == height) { + string refreshRateString = FormatRefreshRate(displayMode.RefreshRate); + if (!refreshRateComboBox.Items.Contains(refreshRateString)) { + refreshRateComboBox.Items.Add(refreshRateString); + if (settings.FullscreenDisplayMode.RefreshRate == displayMode.RefreshRate) + refreshRateComboBox.SelectedItem = refreshRateString; + } + } + } + if (refreshRateComboBox.SelectedItem == null && refreshRateComboBox.Items.Count > 0) + refreshRateComboBox.SelectedIndex = refreshRateComboBox.Items.Count - 1; + } + + + + + /// + /// Respond to a change of selected refresh rate. + /// + private void RefreshRateChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + // Update settings with new refresh rate + string refreshRateString = (string)refreshRateComboBox.SelectedItem; + int refreshRate = 0; + if (refreshRateString != "Default Rate") { + string[] refreshRateSplitStringArray = refreshRateString.Split(); + refreshRate = int.Parse(refreshRateSplitStringArray[0]); + } + settings.FullscreenDisplayMode.RefreshRate = refreshRate; + } + + + + + /// + /// Respond to a change of selected back buffer format by rebuilding + /// the depth/stencil format list, multisample type list, and vertex + /// processing type list. + /// + private void BackBufferFormatChanged(object sender, System.EventArgs e) { + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + Format backBufferFormat = (Format)backBufferFormatComboBox.SelectedItem; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == adapterFormat && + deviceCombo.BackBufferFormat == backBufferFormat) { + deviceCombo.BackBufferFormat = backBufferFormat; + settings.DeviceCombo = deviceCombo; + + depthStencilBufferComboBox.Items.Clear(); + if (enumeration.AppUsesDepthBuffer) { + foreach (DepthFormat format in deviceCombo.DepthStencilFormatList) { + depthStencilBufferComboBox.Items.Add(format); + if (format == settings.DepthStencilBufferFormat) + depthStencilBufferComboBox.SelectedItem = format; + } + if (depthStencilBufferComboBox.SelectedItem == null && depthStencilBufferComboBox.Items.Count > 0) + depthStencilBufferComboBox.SelectedIndex = 0; + } + else { + depthStencilBufferComboBox.Enabled = false; + depthStencilBufferComboBox.Items.Add("(not used)"); + depthStencilBufferComboBox.SelectedIndex = 0; + } + + vertexProcComboBox.Items.Clear(); + foreach (VertexProcessingType vpt in deviceCombo.VertexProcessingTypeList) { + vertexProcComboBox.Items.Add(vpt); + if (vpt == settings.VertexProcessingType) + vertexProcComboBox.SelectedItem = vpt; + } + if (vertexProcComboBox.SelectedItem == null && vertexProcComboBox.Items.Count > 0) + vertexProcComboBox.SelectedIndex = 0; + + presentIntervalComboBox.Items.Clear(); + foreach (PresentInterval pi in deviceCombo.PresentIntervalList) { + presentIntervalComboBox.Items.Add(pi); + if (pi == settings.PresentInterval) + presentIntervalComboBox.SelectedItem = pi; + } + if (presentIntervalComboBox.SelectedItem == null && presentIntervalComboBox.Items.Count > 0) + presentIntervalComboBox.SelectedIndex = 0; + + break; + } + } + } + + + + + /// + /// Respond to a change of selected depth/stencil buffer format. + /// + private void DepthStencilBufferFormatChanged(object sender, System.EventArgs e) { + if (enumeration.AppUsesDepthBuffer) + settings.DepthStencilBufferFormat = (DepthFormat)depthStencilBufferComboBox.SelectedItem; + + multisampleComboBox.Items.Clear(); + foreach (MultiSampleType msType in settings.DeviceCombo.MultiSampleTypeList) { + // Check for DS/MS conflict + bool conflictFound = false; + foreach (DepthStencilMultiSampleConflict DSMSConflict in settings.DeviceCombo.DepthStencilMultiSampleConflictList) { + if (DSMSConflict.DepthStencilFormat == settings.DepthStencilBufferFormat && + DSMSConflict.MultiSampleType == msType) { + conflictFound = true; + break; + } + } + if (!conflictFound) { + multisampleComboBox.Items.Add(msType); + if (msType == settings.MultisampleType) + multisampleComboBox.SelectedItem = msType; + } + } + if (multisampleComboBox.SelectedItem == null && multisampleComboBox.Items.Count > 0) + multisampleComboBox.SelectedIndex = 0; + + } + + + + + /// + /// Respond to a change of selected multisample type. + /// + private void MultisampleTypeChanged(object sender, System.EventArgs e) { + settings.MultisampleType = (MultiSampleType)multisampleComboBox.SelectedItem; + + // Find current max multisample quality + int maxQuality = 0; + DeviceCombo deviceCombo = settings.DeviceCombo; + for (int i = 0; i < deviceCombo.MultiSampleQualityList.Count; i++) { + if ((MultiSampleType)deviceCombo.MultiSampleTypeList[i] == settings.MultisampleType) { + maxQuality = (int)deviceCombo.MultiSampleQualityList[i]; + break; + } + } + + // Update multisample quality list based on new type + multisampleQualityComboBox.Items.Clear(); + for (int iLevel = 0; iLevel < maxQuality; iLevel++) { + multisampleQualityComboBox.Items.Add(iLevel); + if (settings.MultisampleQuality == iLevel) + multisampleQualityComboBox.SelectedItem = iLevel; + } + if (multisampleQualityComboBox.SelectedItem == null && multisampleQualityComboBox.Items.Count > 0) + multisampleQualityComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected multisample quality. + /// + private void MultisampleQualityChanged(object sender, System.EventArgs e) { + settings.MultisampleQuality = (int)multisampleQualityComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void VertexProcessingChanged(object sender, System.EventArgs e) { + settings.VertexProcessingType = (VertexProcessingType)vertexProcComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void PresentIntervalChanged(object sender, System.EventArgs e) { + settings.PresentInterval = (PresentInterval)presentIntervalComboBox.SelectedItem; + } +} + + +/// +/// Current D3D settings: adapter, device, mode, formats, etc. +/// +public class D3DSettings { + public bool IsWindowed; + + public GraphicsAdapterInfo WindowedAdapterInfo; + public GraphicsDeviceInfo WindowedDeviceInfo; + public DeviceCombo WindowedDeviceCombo; + public DisplayMode WindowedDisplayMode; // not changable by the user + public DepthFormat WindowedDepthStencilBufferFormat; + public MultiSampleType WindowedMultisampleType; + public int WindowedMultisampleQuality; + public VertexProcessingType WindowedVertexProcessingType; + public PresentInterval WindowedPresentInterval; + public int WindowedWidth; + public int WindowedHeight; + + public GraphicsAdapterInfo FullscreenAdapterInfo; + public GraphicsDeviceInfo FullscreenDeviceInfo; + public DeviceCombo FullscreenDeviceCombo; + public DisplayMode FullscreenDisplayMode; // changable by the user + public DepthFormat FullscreenDepthStencilBufferFormat; + public MultiSampleType FullscreenMultisampleType; + public int FullscreenMultisampleQuality; + public VertexProcessingType FullscreenVertexProcessingType; + public PresentInterval FullscreenPresentInterval; + + + + + /// + /// The adapter information + /// + public GraphicsAdapterInfo AdapterInfo { + get { return IsWindowed ? WindowedAdapterInfo : FullscreenAdapterInfo; } + set { if (IsWindowed) WindowedAdapterInfo = value; else FullscreenAdapterInfo = value; } + } + + + + + /// + /// The device information + /// + public GraphicsDeviceInfo DeviceInfo { + get { return IsWindowed ? WindowedDeviceInfo : FullscreenDeviceInfo; } + set { if (IsWindowed) WindowedDeviceInfo = value; else FullscreenDeviceInfo = value; } + } + + + + + /// + /// The device combo + /// + public DeviceCombo DeviceCombo { + get { return IsWindowed ? WindowedDeviceCombo : FullscreenDeviceCombo; } + set { if (IsWindowed) WindowedDeviceCombo = value; else FullscreenDeviceCombo = value; } + } + + + + + /// + /// The adapters ordinal + /// + public int AdapterOrdinal { + get { return DeviceCombo.AdapterOrdinal; } + } + + + + + /// + /// The type of device this is + /// + public DeviceType DevType { + get { return DeviceCombo.DevType; } + } + + + + + /// + /// The back buffers format + /// + public Format BackBufferFormat { + get { return DeviceCombo.BackBufferFormat; } + } + + + + + /// + /// The display mode + /// + public DisplayMode DisplayMode { + get { return IsWindowed ? WindowedDisplayMode : FullscreenDisplayMode; } + set { if (IsWindowed) WindowedDisplayMode = value; else FullscreenDisplayMode = value; } + } + + + + + /// + /// The Depth stencils format + /// + public DepthFormat DepthStencilBufferFormat { + get { return IsWindowed ? WindowedDepthStencilBufferFormat : FullscreenDepthStencilBufferFormat; } + set { if (IsWindowed) WindowedDepthStencilBufferFormat = value; else FullscreenDepthStencilBufferFormat = value; } + } + + + + + /// + /// The multisample type + /// + public MultiSampleType MultisampleType { + get { return IsWindowed ? WindowedMultisampleType : FullscreenMultisampleType; } + set { if (IsWindowed) WindowedMultisampleType = value; else FullscreenMultisampleType = value; } + } + + + + + /// + /// The multisample quality + /// + public int MultisampleQuality { + get { return IsWindowed ? WindowedMultisampleQuality : FullscreenMultisampleQuality; } + set { if (IsWindowed) WindowedMultisampleQuality = value; else FullscreenMultisampleQuality = value; } + } + + + + + /// + /// The vertex processing type + /// + public VertexProcessingType VertexProcessingType { + get { return IsWindowed ? WindowedVertexProcessingType : FullscreenVertexProcessingType; } + set { if (IsWindowed) WindowedVertexProcessingType = value; else FullscreenVertexProcessingType = value; } + } + + + + + /// + /// The presentation interval + /// + public PresentInterval PresentInterval { + get { return IsWindowed ? WindowedPresentInterval : FullscreenPresentInterval; } + set { if (IsWindowed) WindowedPresentInterval = value; else FullscreenPresentInterval = value; } + } + + + + + /// + /// Clone the d3d settings class + /// + public D3DSettings Clone() { + return (D3DSettings)MemberwiseClone(); + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/D3DSettingsForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step04/D3DSettingsForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/D3DSettingsForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect.cs new file mode 100644 index 0000000..e0e11ae --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect.cs @@ -0,0 +1,254 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; +using System.Runtime.InteropServices; + + + + +/// +/// The connection wizard will allow our users to pick a service provider, +/// and then connect to an existing application, or create a new one as the host. +/// +public class ConnectWizard { + private Peer peerObject; + private Address deviceAddress; + + private ChooseServiceProviderForm serviceProviderForm; + private CreateJoinForm createJoinForm; + + private Guid serviceProviderGuid; + private string username; + private string samplename; + private bool isInSession = false; + private bool isHost = false; + private int port = 0; + + private Guid applicationGuid; + + + + + /// + /// Constructor + /// + /// + /// + /// + public ConnectWizard(Peer peer, Guid application, string sampleName) { + peerObject = peer; + applicationGuid = application; + samplename = sampleName; + } + + + + + /// + /// The guid for the current service provider + /// + public Guid ServiceProvider { + get { + return serviceProviderGuid; } + set { + serviceProviderGuid = value; } + } + + + + + /// + /// The game's default port number + /// + public int DefaultPort { + get { + return port; } + set { + port = value; } + } + + + + + /// + /// Am I the host + /// + public bool IsHost { + get { + return isHost; } + set { + isHost = value; } + } + + + + + /// + /// The username + /// + public string Username { + get { + return username; } + set { + username = value; } + } + + + + + /// + /// The sample name + /// + public string SampleName { + get { + return samplename; } + } + + + + + /// + /// The applications guid + /// + public Guid ApplicationGuid { + get { + return applicationGuid; } + } + + + + + /// + /// Are we in a session + /// + public bool InSession { + get { return isInSession; } + set { isInSession = value; } + } + + + + + /// + /// Returns true if the given provider requires a port component + /// + /// ServiceProvider Guid + /// + static public bool ProviderRequiresPort(Guid provider) { + return (provider != Address.ServiceProviderSerial && + provider != Address.ServiceProviderModem && + provider != Address.ServiceProviderBlueTooth); + } + + + + + /// + /// Handler for when our form is disposed + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createJoinForm) + createJoinForm = null; + + if (sender == serviceProviderForm) + serviceProviderForm = null; + } + + + + + /// + /// Set the user information + /// + public void SetUserInfo() { + //Before we call host, let's actually call SetPeerInformation + PlayerInformation myinformation = new PlayerInformation(); + myinformation.Name = username; + + peerObject.SetPeerInformation(myinformation, SyncFlags.PeerInformation); + } + + + + + /// + /// Show the service providers form + /// + /// True if a service provider was picked, false otherwise + public bool DoShowServiceProviders() { + if (serviceProviderForm == null) { + username = null; + serviceProviderForm = new ChooseServiceProviderForm(peerObject,this); + serviceProviderForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (serviceProviderForm.ShowDialog() == DialogResult.OK) + return true; + + // The didn't hit ok + return false; + } + + + + + /// + /// Show the create or join screen + /// + /// True if we will be in a session, false otherwise + public bool DoCreateJoinGame() { + if (deviceAddress != null) + deviceAddress.Dispose(); + + deviceAddress = new Address(); + + if (createJoinForm != null) + createJoinForm.Dispose(); + + createJoinForm = new CreateJoinForm(peerObject, deviceAddress, this); + createJoinForm.Disposed += new System.EventHandler(this.FormDisposed); + + //Set the address's service provider (this will be the device address) + deviceAddress.ServiceProvider = serviceProviderGuid; + DialogResult drCreateJoin = createJoinForm.ShowDialog(); + if (drCreateJoin == DialogResult.Cancel) + return false; + + this.isHost = (drCreateJoin == DialogResult.Yes); + return true; + + } + + + + + /// + /// Start the wizard + /// + /// True if we are in a session, false otherwise + public bool StartWizard() { + isInSession = false; + + while (this.DoShowServiceProviders()) { + //Now let's create a game or join a session + if (this.DoCreateJoinGame()) { + // A game has been created or joined now, set our flag + isInSession = true; + break; + } + } + return isInSession; + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_AddressForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_AddressForm.cs new file mode 100644 index 0000000..181fc48 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_AddressForm.cs @@ -0,0 +1,207 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_AddressForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// Summary description for AddressForm. +/// +public class AddressForm : System.Windows.Forms.Form { + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox hostnameTextBox; + private System.Windows.Forms.TextBox portTextBox; + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + /// + /// Constructor + /// + public AddressForm( int defaultPort ) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // Set default port value + Port = defaultPort; + } + + + + + /// + /// The remote port on which to connect + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(portTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + portTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Remote hostname + /// + public string Hostname { + get { + return hostnameTextBox.Text; } + set { + hostnameTextBox.Text = value; } + } + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.label1 = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.hostnameTextBox = new System.Windows.Forms.TextBox(); + this.portTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(248, 48); + this.label1.TabIndex = 0; + this.label1.Text = "Please enter the optional components of the remote session address. If set blank," + + " DirectPlay will attempt to search the local network."; + // + // okButton + // + this.okButton.Location = new System.Drawing.Point(104, 144); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(72, 24); + this.okButton.TabIndex = 1; + this.okButton.Text = "&OK"; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(184, 144); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(72, 24); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "&Cancel"; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(32, 80); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(100, 16); + this.label2.TabIndex = 3; + this.label2.Text = "Hostname"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(160, 80); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 16); + this.label3.TabIndex = 4; + this.label3.Text = "Port"; + // + // hostnameTextBox + // + this.hostnameTextBox.Location = new System.Drawing.Point(32, 96); + this.hostnameTextBox.Name = "hostnameTextBox"; + this.hostnameTextBox.Size = new System.Drawing.Size(120, 20); + this.hostnameTextBox.TabIndex = 5; + this.hostnameTextBox.Text = ""; + // + // portTextBox + // + this.portTextBox.Location = new System.Drawing.Point(160, 96); + this.portTextBox.Name = "portTextBox"; + this.portTextBox.Size = new System.Drawing.Size(56, 20); + this.portTextBox.TabIndex = 6; + this.portTextBox.Text = ""; + // + // AddressForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(264, 176); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.portTextBox, + this.hostnameTextBox, + this.label3, + this.label2, + this.cancelButton, + this.okButton, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AddressForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Remote Address"; + this.ResumeLayout(false); + + } + #endregion + + private void okButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.OK; + } + + private void cancelButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.Cancel; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_AddressForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_AddressForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_AddressForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_CreateForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_CreateForm.cs new file mode 100644 index 0000000..c321e80 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_CreateForm.cs @@ -0,0 +1,346 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_CreateForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will allow you to create a new session, and set certain properties +/// of the session. +/// +public class CreateSessionForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.TextBox txtSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton notSignedRadio; + private System.Windows.Forms.RadioButton fullSignedRadio; + private System.Windows.Forms.RadioButton fastSignedRadio; + private System.Windows.Forms.CheckBox migrateHostCheckBox; + private System.Windows.Forms.CheckBox useDPNSVRCheckBox; + private System.Windows.Forms.TextBox localPortTextBox; + private System.Windows.Forms.Label localPortLabel; + private System.Windows.Forms.Button btnCancel; + + + + /// + /// Constructor + /// + public CreateSessionForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + peer = peerObject; + this.connectionWizard = connectionWizard; + deviceAddress = addressObject; + txtSession.Text = null; + this.Text = connectionWizard.SampleName + " - " + this.Text; + //Get the default session from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + // Get session name + txtSession.Text = (string)regKey.GetValue("DirectPlaySessionName", null); + + // Get host migration option + if (regKey.GetValue("DirectPlayMigrateHost",null) != null) { + migrateHostCheckBox.Checked = ((int)regKey.GetValue("DirectPlayMigrateHost",1)==1); + } + + + // Get session signing option + if (regKey.GetValue("DirectPlaySessionSigning",null) != null) { + if ("Full" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fullSignedRadio.Checked = true; + else if ("Fast" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fastSignedRadio.Checked = true; + else + notSignedRadio.Checked = true; + } + + regKey.Close(); + } + + // Set default port value and hide port UI if provider doesn't use them + Port = connectionWizard.DefaultPort; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + localPortTextBox.Hide(); + localPortLabel.Hide(); + } + } + + + + /// + /// The port on which to host + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(localPortTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + localPortTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.txtSession = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.fullSignedRadio = new System.Windows.Forms.RadioButton(); + this.fastSignedRadio = new System.Windows.Forms.RadioButton(); + this.notSignedRadio = new System.Windows.Forms.RadioButton(); + this.migrateHostCheckBox = new System.Windows.Forms.CheckBox(); + this.useDPNSVRCheckBox = new System.Windows.Forms.CheckBox(); + this.localPortLabel = new System.Windows.Forms.Label(); + this.localPortTextBox = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // txtSession + // + this.txtSession.Location = new System.Drawing.Point(96, 24); + this.txtSession.Name = "txtSession"; + this.txtSession.Size = new System.Drawing.Size(176, 20); + this.txtSession.TabIndex = 3; + this.txtSession.Text = ""; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(288, 12); + this.label1.TabIndex = 2; + this.label1.Text = "Session Name:"; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(128, 168); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(208, 168); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + // + // groupBox1 + // + this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] { + this.fullSignedRadio, + this.fastSignedRadio, + this.notSignedRadio}); + this.groupBox1.Location = new System.Drawing.Point(16, 64); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(112, 88); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Session Signing"; + // + // fullSignedRadio + // + this.fullSignedRadio.Location = new System.Drawing.Point(18, 22); + this.fullSignedRadio.Name = "fullSignedRadio"; + this.fullSignedRadio.Size = new System.Drawing.Size(80, 16); + this.fullSignedRadio.TabIndex = 9; + this.fullSignedRadio.Text = "Full signed"; + // + // fastSignedRadio + // + this.fastSignedRadio.Checked = true; + this.fastSignedRadio.Location = new System.Drawing.Point(18, 41); + this.fastSignedRadio.Name = "fastSignedRadio"; + this.fastSignedRadio.Size = new System.Drawing.Size(88, 16); + this.fastSignedRadio.TabIndex = 8; + this.fastSignedRadio.TabStop = true; + this.fastSignedRadio.Text = "Fast signed"; + // + // notSignedRadio + // + this.notSignedRadio.Location = new System.Drawing.Point(18, 55); + this.notSignedRadio.Name = "notSignedRadio"; + this.notSignedRadio.Size = new System.Drawing.Size(72, 24); + this.notSignedRadio.TabIndex = 10; + this.notSignedRadio.Text = "Disabled"; + // + // migrateHostCheckBox + // + this.migrateHostCheckBox.Checked = true; + this.migrateHostCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.migrateHostCheckBox.Location = new System.Drawing.Point(144, 64); + this.migrateHostCheckBox.Name = "migrateHostCheckBox"; + this.migrateHostCheckBox.Size = new System.Drawing.Size(136, 24); + this.migrateHostCheckBox.TabIndex = 11; + this.migrateHostCheckBox.Text = "Enable Host Migration"; + // + // useDPNSVRCheckBox + // + this.useDPNSVRCheckBox.Location = new System.Drawing.Point(144, 84); + this.useDPNSVRCheckBox.Name = "useDPNSVRCheckBox"; + this.useDPNSVRCheckBox.Size = new System.Drawing.Size(136, 24); + this.useDPNSVRCheckBox.TabIndex = 12; + this.useDPNSVRCheckBox.Text = "Use DPNSVR"; + // + // localPortLabel + // + this.localPortLabel.Location = new System.Drawing.Point(152, 122); + this.localPortLabel.Name = "localPortLabel"; + this.localPortLabel.Size = new System.Drawing.Size(64, 17); + this.localPortLabel.TabIndex = 13; + this.localPortLabel.Text = "Local Port:"; + // + // localPortTextBox + // + this.localPortTextBox.Location = new System.Drawing.Point(216, 120); + this.localPortTextBox.Name = "localPortTextBox"; + this.localPortTextBox.Size = new System.Drawing.Size(56, 20); + this.localPortTextBox.TabIndex = 14; + this.localPortTextBox.Text = ""; + // + // CreateSessionForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(290, 200); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.localPortTextBox, + this.localPortLabel, + this.useDPNSVRCheckBox, + this.migrateHostCheckBox, + this.txtSession, + this.label1, + this.groupBox1, + this.btnOK, + this.btnCancel}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.HelpButton = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateSessionForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Create a Session"; + this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.CreateSessionForm_HelpRequested); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// We are ready to create a session. Ensure the data is valid + /// then create the session + /// + private void btnOK_Click(object sender, System.EventArgs e) { + ApplicationDescription dpApp; + if ((txtSession.Text == null) || (txtSession.Text == "")) { + MessageBox.Show(this,"Please enter a session name before clicking OK.","No sessionname",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlaySessionName", txtSession.Text); + if (migrateHostCheckBox.Checked) + regKey.SetValue("DirectPlayMigrateHost",1); + else + regKey.SetValue("DirectPlayMigrateHost",0); + + if (fastSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Fast"); + else if (fullSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Full"); + else + regKey.SetValue("DirectPlaySessionSigning","Disabled"); + regKey.Close(); + } + + dpApp = new ApplicationDescription(); + dpApp.GuidApplication = connectionWizard.ApplicationGuid; + dpApp.SessionName = txtSession.Text; + dpApp.Flags = 0; + + if (migrateHostCheckBox.Checked) + dpApp.Flags |= SessionFlags.MigrateHost; + + if (!useDPNSVRCheckBox.Checked) + dpApp.Flags |= SessionFlags.NoDpnServer; + + if (fastSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FastSigned; + else if (fullSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FullSigned; + + // Specify the port number if available + if (ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + if (Port > 0) + deviceAddress.AddComponent(Address.KeyPort, Port); + } + + connectionWizard.SetUserInfo(); + // Host a game on deviceAddress as described by dpApp + // HostFlags.OkToQueryForAddressing allows DirectPlay to prompt the user + // using a dialog box for any device address information that is missing + peer.Host(dpApp,deviceAddress,HostFlags.OkToQueryForAddressing); + this.DialogResult = DialogResult.OK; + } + + private void CreateSessionForm_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent) { + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_CreateForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_CreateForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_CreateForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_JoinForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_JoinForm.cs new file mode 100644 index 0000000..a86efa7 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_JoinForm.cs @@ -0,0 +1,481 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_JoinForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will search for existing running samples and allow you to join them or will +/// allow you to create your own session as a host +/// +public class CreateJoinForm : System.Windows.Forms.Form { + private const int EnumExpireThreshold = 2000; + private bool amJoining = false; + + + + + /// + /// Hold our information of hosts we found + /// + private struct FindHostsResponseInformation { + public int LastFoundTime; + public ApplicationDescription ApplicationDesc; + public int RoundTripLatencyMs; + public Address sender; + public Address device; + public override string ToString() { + if (ApplicationDesc.MaxPlayers > 0) + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + "/" + ApplicationDesc.MaxPlayers + ") (" + RoundTripLatencyMs + "ms)"; + else + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + ") (" + RoundTripLatencyMs + "ms)"; + } + }; + + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + private Address hostAddress = null; + private bool isSearching = false; + private int findHostHandle = 0; + private CreateSessionForm createSessionForm = null; + private ResultCode resultCode; + private ArrayList foundHosts = new ArrayList(); + private bool isConnected = false; + private ManualResetEvent connectEvent = null; + private System.Timers.Timer updateListTimer = null; + private System.Timers.Timer connectTimer = null; + + private System.Windows.Forms.ListBox lstSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnSearch; + private System.Windows.Forms.Button btnJoin; + private System.Windows.Forms.Button btnCreate; + + + + + /// + /// Constructor + /// + public CreateJoinForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + deviceAddress = addressObject; + + //Set up the event handlers + peer.FindHostResponse += new FindHostResponseEventHandler(FindHostResponseMessage); + peer.ConnectComplete += new ConnectCompleteEventHandler(ConnectResult); + peer.AsyncOperationComplete += new AsyncOperationCompleteEventHandler(CancelAsync); + + //Set up our timer + updateListTimer = new System.Timers.Timer(300); // A 300 ms interval + updateListTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.UpdateTimer); + updateListTimer.SynchronizingObject = this; + updateListTimer.Start(); + //Set up our connect timer + connectTimer = new System.Timers.Timer(100); // A 100ms interval + connectTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.ConnectTimer); + connectTimer.SynchronizingObject = this; + // Set up our connect event + connectEvent = new ManualResetEvent(false); + + } + + + + + /// + /// An asynchronous operation was cancelled + /// + private void CancelAsync(object sender, AsyncOperationCompleteEventArgs e) { + if (e.Message.AsyncOperationHandle == findHostHandle) { + findHostHandle = 0; + btnSearch.Text = "Start Search"; + isSearching = false; + btnCreate.Enabled = true; + btnSearch.Enabled = true; + } + } + + + + + /// + /// A host was found and responded to our query + /// + private void FindHostResponseMessage(object sender, FindHostResponseEventArgs dpMessage) { + // Now we need to add this to our list of available sessions + SessionAdd(dpMessage.Message); + } + + + + + /// + /// Add this session to our list + /// + /// + private void SessionAdd(FindHostsResponseMessage dpMessage) { + FindHostsResponseInformation dpInfo = new FindHostsResponseInformation(); + + dpInfo.ApplicationDesc = dpMessage.ApplicationDescription; + dpInfo.device = dpMessage.AddressDevice; + dpInfo.sender = dpMessage.AddressSender; + dpInfo.RoundTripLatencyMs = dpMessage.RoundTripLatencyMs; + dpInfo.LastFoundTime = Environment.TickCount; + + // Let's check the items first and see if this one already exists + bool isFound = false; + + lock (foundHosts) { + for (int i = 0; i < lstSession.Items.Count; i++) { + if (dpInfo.ApplicationDesc.GuidInstance == ((FindHostsResponseInformation)lstSession.Items[i]).ApplicationDesc.GuidInstance) { + foundHosts[i] = dpInfo; + lstSession.Items[i] = dpInfo; + isFound = true; + } + } + if (!isFound) { + lstSession.Items.Add(dpInfo); + foundHosts.Add(dpInfo); + } + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + + if (isSearching) { + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + isSearching = !isSearching; + } + if (connectTimer != null) + connectTimer.Dispose(); + + if (updateListTimer != null) + updateListTimer.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.btnJoin = new System.Windows.Forms.Button(); + this.lstSession = new System.Windows.Forms.ListBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnCreate = new System.Windows.Forms.Button(); + this.btnSearch = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnJoin + // + this.btnJoin.Enabled = false; + this.btnJoin.Location = new System.Drawing.Point(7, 227); + this.btnJoin.Name = "btnJoin"; + this.btnJoin.Size = new System.Drawing.Size(74, 27); + this.btnJoin.TabIndex = 2; + this.btnJoin.Text = "Join"; + this.btnJoin.Click += new System.EventHandler(this.btnJoin_Click); + // + // lstSession + // + this.lstSession.Location = new System.Drawing.Point(5, 37); + this.lstSession.Name = "lstSession"; + this.lstSession.Size = new System.Drawing.Size(400, 186); + this.lstSession.TabIndex = 1; + this.lstSession.DoubleClick += new System.EventHandler(this.btnJoin_Click); + this.lstSession.SelectedValueChanged += new System.EventHandler(this.SelectedChange); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(5, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(312, 16); + this.label1.TabIndex = 0; + this.label1.Text = "Select session to join, or click Create to start a new session."; + // + // btnCreate + // + this.btnCreate.DialogResult = System.Windows.Forms.DialogResult.Yes; + this.btnCreate.Location = new System.Drawing.Point(84, 227); + this.btnCreate.Name = "btnCreate"; + this.btnCreate.Size = new System.Drawing.Size(74, 27); + this.btnCreate.TabIndex = 2; + this.btnCreate.Text = "Create"; + this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click); + // + // btnSearch + // + this.btnSearch.Location = new System.Drawing.Point(319, 7); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(86, 27); + this.btnSearch.TabIndex = 2; + this.btnSearch.Text = "Start Search"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(333, 227); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + // + // CreateJoinForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(411, 264); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.btnCreate, + this.btnJoin, + this.btnSearch, + this.btnCancel, + this.lstSession, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateJoinForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Join or create a session"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// The selected session was changed. + /// + private void SelectedChange(object sender, System.EventArgs e) { + if (amJoining) + return; // Do nothing if we are already joining a session + + btnJoin.Enabled = (lstSession.SelectedItem != null); + } + + + + + /// + /// We either want to start or stop searching + /// + private void btnSearch_Click(object sender, System.EventArgs e) { + if (!isSearching) { + if( hostAddress != null ) + hostAddress.Dispose(); + + hostAddress = new Address(); + hostAddress.ServiceProvider = deviceAddress.ServiceProvider; + + // See if we should prompt the user for the remote address + if (ConnectWizard.ProviderRequiresPort(hostAddress.ServiceProvider)) { + AddressForm addressDialog = new AddressForm(connectionWizard.DefaultPort); + addressDialog.ShowDialog(this); + + // If the user cancelled the address form, abort the search + if (addressDialog.DialogResult != DialogResult.OK) + return; + + // If a port was specified, add the component + if (addressDialog.Hostname != "") + hostAddress.AddComponent(Address.KeyHostname, addressDialog.Hostname); + + // If a hostname was specified, add the component + if (addressDialog.Port > 0) + hostAddress.AddComponent(Address.KeyPort, addressDialog.Port); + } + + //Time to enum our hosts + ApplicationDescription desc = new ApplicationDescription(); + desc.GuidApplication = connectionWizard.ApplicationGuid; + + // If the user was not already asked for address information, DirectPlay + // should prompt with native UI + FindHostsFlags flags = 0; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + flags = FindHostsFlags.OkToQueryForAddressing; + + peer.FindHosts(desc,hostAddress,deviceAddress,null,Timeout.Infinite,0,Timeout.Infinite, flags, out findHostHandle); + isSearching = true; + btnCreate.Enabled = false; + btnSearch.Text = "Stop Search"; + } + else { + btnSearch.Text = "Stopping..."; + btnSearch.Enabled = false; + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + } + } + + + + + /// + /// A form was disposed + /// + /// + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createSessionForm) + createSessionForm = null; + } + + + + + /// + /// We should create a new session. Display a dialog allowing the user to set + /// certain options + /// + private void btnCreate_Click(object sender, System.EventArgs e) { + this.DialogResult = DialogResult.None; + ((Button)sender).DialogResult = DialogResult.None; + if (createSessionForm == null) { + createSessionForm = new CreateSessionForm(peer,deviceAddress,connectionWizard); + createSessionForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (createSessionForm.ShowDialog(this) != DialogResult.Cancel) { + ((Button)sender).DialogResult = DialogResult.Yes; + this.DialogResult = DialogResult.Yes; + } + } + + + + + /// + /// Determine if we need to expire any of our currently listed servers + /// + private void UpdateTimer(object sender, System.Timers.ElapsedEventArgs e) { + lock (foundHosts) { + for (int i = 0; i< foundHosts.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)foundHosts[i]).LastFoundTime > EnumExpireThreshold) { + foundHosts.RemoveAt(i); + break; + } + } + for (int i = 0; i< lstSession.Items.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)lstSession.Items[i]).LastFoundTime > EnumExpireThreshold) { + lstSession.Items.RemoveAt(i); + break; + } + } + } + } + + + + + /// + /// Wait for a connect to complete + /// + private void ConnectTimer(object sender, System.Timers.ElapsedEventArgs e) { + if (connectEvent.WaitOne(0,false)) { // Wait for the Connect event to be fired + if (isConnected) { // Are we connected? + // Get rid of the timer + if (updateListTimer != null) + updateListTimer.Stop(); + + if (connectTimer != null) + connectTimer.Stop(); + + this.DialogResult = DialogResult.OK; + this.Close(); + return; + } + else { + MessageBox.Show(this,"Failed to connect. The error code was: \n" + resultCode.ToString() ,"Failed to connect",MessageBoxButtons.OK,MessageBoxIcon.Information); + // Restart our timer + updateListTimer.Start(); + } + } + } + + + + + /// + /// Fired when a connect complete message is received from DirectPlay. Fire + /// our event to notify the sample we've connected + /// + private void ConnectResult(object sender, ConnectCompleteEventArgs e) { + if (e.Message.ResultCode == 0) { + isConnected = true; + } + else + isConnected = false; + + resultCode = e.Message.ResultCode; + // Notify the timer that we've connected. + connectEvent.Set(); + } + + + + + /// + /// Join an existing session + /// + private void btnJoin_Click(object sender, System.EventArgs e) { + FindHostsResponseInformation dpInfo; + if (lstSession.SelectedItem == null) { + MessageBox.Show(this,"Please select a session before clicking join.","No session",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + // Turn off all buttons + btnCreate.Enabled = false; + btnCancel.Enabled = false; + btnJoin.Enabled = false; + btnSearch.Enabled = false; + amJoining = true; + // Stop our secondary timer + updateListTimer.Stop(); + dpInfo = ((FindHostsResponseInformation)lstSession.SelectedItem); + connectionWizard.SetUserInfo(); + peer.Connect(dpInfo.ApplicationDesc,dpInfo.sender, dpInfo.device,null,ConnectFlags.OkToQueryForAddressing); + // Now start our 'Connect' timer + connectTimer.Start(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_JoinForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_JoinForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_JoinForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_ServiceProviderForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_ServiceProviderForm.cs new file mode 100644 index 0000000..4884d84 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_ServiceProviderForm.cs @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_ServiceProviderForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +/// +/// This form allows you to choose a service provider and username for your +/// sample +/// +public class ChooseServiceProviderForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListBox lstSP; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtUser; + private System.Windows.Forms.Button btnCancel; + + + + + /// + /// Constructor + /// + public ChooseServiceProviderForm(Peer peerObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + // Fill up our listbox with the service providers + ServiceProviderInformation[] serviceProviders = peer.GetServiceProviders(false); + foreach (ServiceProviderInformation info in serviceProviders) + lstSP.Items.Add(info); + + txtUser.Text = null; + //Get the default username from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + try { + txtUser.Text = (string)regKey.GetValue("DirectPlayUserName", null); + lstSP.SelectedIndex = (int)regKey.GetValue("DirectPlaySPIndex", 0); + regKey.Close(); + } + catch { + txtUser.Text = null; + lstSP.SelectedIndex = 0; + } + } + else + lstSP.SelectedIndex = 0; + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + txtUser.Text = SystemInformation.UserName; + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.lstSP = new System.Windows.Forms.ListBox(); + this.txtUser = new System.Windows.Forms.TextBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lstSP + // + this.lstSP.Location = new System.Drawing.Point(12, 63); + this.lstSP.Name = "lstSP"; + this.lstSP.Size = new System.Drawing.Size(324, 147); + this.lstSP.TabIndex = 1; + this.lstSP.DoubleClick += new System.EventHandler(this.lstSP_DoubleClick); + // + // txtUser + // + this.txtUser.Location = new System.Drawing.Point(13, 20); + this.txtUser.MaxLength = 30; + this.txtUser.Name = "txtUser"; + this.txtUser.Size = new System.Drawing.Size(326, 20); + this.txtUser.TabIndex = 5; + this.txtUser.Text = ""; + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(181, 215); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 2; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(260, 215); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(11, 44); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(376, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Please pick your service provider:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(10, 5); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(327, 12); + this.label2.TabIndex = 4; + this.label2.Text = "User Name:"; + // + // ChooseServiceProviderForm + // + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(343, 246); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.txtUser, + this.label2, + this.btnCancel, + this.btnOK, + this.lstSP, + this.label1}); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChooseServiceProviderForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Choose Service Provider"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// They don't want to run this sample + /// + private void btnCancel_Click(object sender, System.EventArgs e) { + this.Dispose(); + } + + + + + /// + /// Same as clicking ok + /// + private void lstSP_DoubleClick(object sender, System.EventArgs e) { + // Call the ok button click handler + object[] parameters = new object[] { sender, e }; + this.BeginInvoke(new System.EventHandler(btnOK_Click), parameters); + } + + + + + /// + /// Select this username and service provider if valid, then continue the wizard + /// + private void btnOK_Click(object sender, System.EventArgs e) { + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + MessageBox.Show(this,"Please enter a username before clicking OK.","No Username",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + try { + connectionWizard.ServiceProvider = ((ServiceProviderInformation)lstSP.SelectedItem).Guid; + connectionWizard.Username = txtUser.Text; + } + catch { // We assume if we got here there was no selected item. + MessageBox.Show(this,"Please select a service provider before clicking OK.","No Service Provider",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlayUserName", txtUser.Text); + regKey.SetValue("DirectPlaySPIndex", lstSP.SelectedIndex); + regKey.Close(); + } + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_ServiceProviderForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_ServiceProviderForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/DPlayConnect_ServiceProviderForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/DXUtil.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/DXUtil.cs new file mode 100644 index 0000000..5d0f0e5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/DXUtil.cs @@ -0,0 +1,285 @@ +//----------------------------------------------------------------------------- +// File: DXUtil.cs +// +// Desc: Shortcut macros and functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.IO; +using System.Runtime.InteropServices; + + + + +/// +/// Enumeration for various actions our timer can perform +/// +public enum DirectXTimer { + Reset, + Start, + Stop, + Advance, + GetAbsoluteTime, + GetApplicationTime, + GetElapsedTime +}; + + + + +/// +/// Generic utility functions for our samples +/// +public class DXUtil { + #region Timer Internal Stuff + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceCounter(ref long PerformanceCount); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("winmm.dll")] + public static extern int timeGetTime(); + private static bool isTimerInitialized = false; + private static bool m_bUsingQPF = false; + private static bool m_bTimerStopped = true; + private static long m_llQPFTicksPerSec = 0; + private static long m_llStopTime = 0; + private static long m_llLastElapsedTime = 0; + private static long m_llBaseTime = 0; + private static double m_fLastElapsedTime = 0.0; + private static double m_fBaseTime = 0.0; + private static double m_fStopTime = 0.0; + #endregion + + // Constants for SDK Path registry keys + private const string sdkPath = "Software\\Microsoft\\DirectX SDK"; + private const string sdkKey = "DX9J3SDK Samples Path"; + + private DXUtil() { /* Private Constructor */ } + + + + + /// + /// Returns the DirectX SDK media path + /// + public static string SdkMediaPath { + get { + Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sdkPath); + string sReg = string.Empty; + if (rKey != null) { + sReg = (string)rKey.GetValue(sdkKey); + rKey.Close(); + } + if (sReg != null) + sReg += @"\Media\"; + else + return string.Empty; + + return sReg; + } + } + + + + + /// + /// Performs timer opertations. Use the following commands: + /// + /// DirectXTimer.Reset - to reset the timer + /// DirectXTimer.Start - to start the timer + /// DirectXTimer.Stop - to stop (or pause) the timer + /// DirectXTimer.Advance - to advance the timer by 0.1 seconds + /// DirectXTimer.GetAbsoluteTime - to get the absolute system time + /// DirectXTimer.GetApplicationTime - to get the current time + /// DirectXTimer.GetElapsedTime - to get the time that elapsed between TIMER_GETELAPSEDTIME calls + /// + /// + public static float Timer(DirectXTimer command) { + if (!isTimerInitialized) { + isTimerInitialized = true; + + // Use QueryPerformanceFrequency() to get frequency of timer. If QPF is + // not supported, we will timeGetTime() which returns milliseconds. + long qwTicksPerSec = 0; + m_bUsingQPF = QueryPerformanceFrequency(ref qwTicksPerSec); + if (m_bUsingQPF) + m_llQPFTicksPerSec = qwTicksPerSec; + } + if (m_bUsingQPF) { + double time; + double fElapsedTime; + long qwTime = 0; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_llStopTime != 0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + qwTime = m_llStopTime; + else + QueryPerformanceCounter(ref qwTime); + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (qwTime - m_llLastElapsedTime) / (double) m_llQPFTicksPerSec; + m_llLastElapsedTime = qwTime; + return (float)fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + double fAppTime = (double) (qwTime - m_llBaseTime) / (double) m_llQPFTicksPerSec; + return (float)fAppTime; + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_llBaseTime = qwTime; + m_llLastElapsedTime = qwTime; + m_llStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_llBaseTime += qwTime - m_llStopTime; + m_llStopTime = 0; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_llStopTime = qwTime; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_llStopTime += m_llQPFTicksPerSec/10; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + time = qwTime / (double) m_llQPFTicksPerSec; + return (float)time; + } + + return -1.0f; // Invalid command specified + } + else { + // Get the time using timeGetTime() + double time; + double fElapsedTime; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_fStopTime != 0.0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + time = m_fStopTime; + else + time = timeGetTime() * 0.001; + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (time - m_fLastElapsedTime); + m_fLastElapsedTime = time; + return (float) fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + return (float) (time - m_fBaseTime); + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_fBaseTime = time; + m_fLastElapsedTime = time; + m_fStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_fBaseTime += time - m_fStopTime; + m_fStopTime = 0.0f; + m_fLastElapsedTime = time; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_fStopTime = time; + m_fLastElapsedTime = time; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_fStopTime += 0.1f; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + return (float) time; + } + + return -1.0f; // Invalid command specified + } + } + + + + + /// + /// Returns a valid path to a DXSDK media file + /// + /// Initial path to search + /// Filename we're searching for + /// Full path to the file + public static string FindMediaFile(string path, string filename) { + // First try to load the file in the full path + if (path != null) { + if (File.Exists(AppendDirectorySeparator(path) + filename)) + return AppendDirectorySeparator(path) + filename; + } + + // if not try to find the filename in the current folder. + if (File.Exists(filename)) + return AppendDirectorySeparator(Directory.GetCurrentDirectory()) + filename; + + // last, check if the file exists in the media directory + if (File.Exists(AppendDirectorySeparator(SdkMediaPath) + filename)) + return AppendDirectorySeparator(SdkMediaPath) + filename; + + throw new FileNotFoundException("Could not find this file.", filename); + } + + + + + /// + /// Returns a valid string with a directory separator at the end. + /// + private static string AppendDirectorySeparator(string filename) { + if (!filename.EndsWith(@"\")) + return filename + @"\"; + + return filename; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/GameClass.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/GameClass.cs new file mode 100644 index 0000000..684b604 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/GameClass.cs @@ -0,0 +1,143 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public delegate void MessageDelegate(byte message); // Delegate for messages arriving via DirectPlay. +public delegate void AudioDelegate(); // Delegate to handle audio playback. +public delegate void PeerCloseCallback(); // This delegate will be called when the session terminated event is fired. + +public class GameClass : GraphicsSample { + private GraphicsFont drawingFont = null; + private Point destination = new Point(0, 0); + private InputClass input = null; + + private PlayClass play = null; + + private const byte msgUp = 0; + private const byte msgDown = 1; + private const byte msgLeft = 2; + private const byte msgRight = 3; + private const byte msgCancelUp = 4; + private const byte msgCancelDown = 5; + private const byte msgCancelLeft = 6; + private const byte msgCancelRight = 7; + + private bool networkEnabled; + private PlayClass peer = null; + private PositionedMesh spaceSphere = null; + + #region GameClass Constructor + public GameClass(bool startFullScreen, Size size, bool enableNetwork) { + this.startFullscreen = startFullScreen; + this.Size = size; + this.networkEnabled = enableNetwork; + this.Text = "SpaceWar3D-Step04"; + + drawingFont = new GraphicsFont( "Verdana", System.Drawing.FontStyle.Regular); + + input = new InputClass(this, play); + + if (networkEnabled) { + peer = new PlayClass(this); + } + + } + + #endregion //GameClass Constructor + + protected override void FrameMove() { + //rotate space very slowly for that nice twinkly star effect + spaceSphere.Position.RotateRel(-.001f * elapsedTime,-0.0001f * elapsedTime, 0); + } + + /// + /// Called once per frame, the call is the entry point for 3d rendering. This + /// function sets up render states, clears the viewport, and renders the scene. + /// + protected override void Render() { + + input.GetInputState(); + + //Clear the backbuffer to a Blue color + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + //Begin the scene + device.BeginScene(); + device.Transform.World = spaceSphere.Position.WorldMatrix; + spaceSphere.Render(); + drawingFont.DrawText(5, 5, Color.White, "X: " + destination.X + " Y: " + destination.Y); + device.EndScene(); + } + + /// + /// Initialize scene objects. + /// + protected override void InitializeDeviceObjects() { + drawingFont.InitializeDeviceObjects(device); + spaceSphere = new PositionedMesh(device, "SpaceSphere.x"); + } + + /// + /// Called when a device needs to be restored. + /// + protected override void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { + device.RenderState.FillMode = FillMode.Solid; + device.RenderState.Lighting = false; + device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, + (presentParams.BackBufferWidth/presentParams.BackBufferHeight), + 1.5f, 20000.0f ); + + + device.Transform.View = Matrix.LookAtLH(new Vector3(0,0,-5), new Vector3(0,0,0), new Vector3(0,1,0)); + device.RenderState.FillMode = FillMode.Solid; + + + + } + protected override void Dispose(bool disposing) { + if (networkEnabled) + play.Dispose(); + base.Dispose(disposing); + } + public void MessageArrived(byte message) { + switch (message) { + case msgUp: { + destination.X = 1; + break; + } + case msgDown: { + destination.X = -1; + break; + } + case msgLeft: { + destination.Y = 1; + break; + } + case msgRight: { + destination.Y = -1; + break; + } + case msgCancelUp: + case msgCancelDown: { + destination.X = 0; + break; + } + case msgCancelLeft: + case msgCancelRight: { + destination.Y = 0; + break; + } + } + } + + /// + // When the peer closes, the code here is executed. + /// + public void PeerClose() { + // The session was terminated, go ahead and shut down + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/GameClass.resx b/Source Code updated 08-12-05/Spacewar3D/Step04/GameClass.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/GameClass.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/HelpScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/HelpScreen.cs new file mode 100644 index 0000000..7d54363 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/HelpScreen.cs @@ -0,0 +1,113 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.IO; + + + /// + /// Summary description for HelpScreen. + /// +public class HelpScreen : System.Windows.Forms.Form { + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.TextBox helpText; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public HelpScreen() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + string helpFile = MediaUtilities.FindFile("Help.txt"); + if (File.Exists(helpFile)) { + StreamReader sr; + try { + sr = new StreamReader(helpFile); + helpText.Text = sr.ReadToEnd(); + sr.Close(); + } + catch ( Exception e ) { + helpText.Text = e.ToString(); + } + + } + else { + helpText.Text = "Unable to locate " + helpFile.ToString(); + } + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.closeButton = new System.Windows.Forms.Button(); + this.helpText = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // closeButton + // + this.closeButton.BackColor = System.Drawing.Color.Black; + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.Dock = System.Windows.Forms.DockStyle.Bottom; + this.closeButton.ForeColor = System.Drawing.Color.Red; + this.closeButton.Location = new System.Drawing.Point(0, 615); + this.closeButton.Name = "closeButton"; + this.closeButton.Size = new System.Drawing.Size(616, 23); + this.closeButton.TabIndex = 0; + this.closeButton.Text = "Close"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // helpText + // + this.helpText.BackColor = System.Drawing.Color.Black; + this.helpText.Dock = System.Windows.Forms.DockStyle.Fill; + this.helpText.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.helpText.ForeColor = System.Drawing.Color.Red; + this.helpText.Location = new System.Drawing.Point(0, 0); + this.helpText.Multiline = true; + this.helpText.Name = "helpText"; + this.helpText.ReadOnly = true; + this.helpText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.helpText.Size = new System.Drawing.Size(616, 615); + this.helpText.TabIndex = 1; + this.helpText.TabStop = false; + this.helpText.Text = ""; + // + // HelpScreen + // + this.AcceptButton = this.closeButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(616, 638); + this.Controls.Add(this.helpText); + this.Controls.Add(this.closeButton); + this.Name = "HelpScreen"; + this.Text = "SpaceWar! Help"; + this.ResumeLayout(false); + + } + #endregion + + private void closeButton_Click(object sender, System.EventArgs e) { + this.Close(); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/HelpScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step04/HelpScreen.resx new file mode 100644 index 0000000..a4f535a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/HelpScreen.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + HelpScreen + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/MediaUtilities.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/MediaUtilities.cs new file mode 100644 index 0000000..685a63d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/MediaUtilities.cs @@ -0,0 +1,35 @@ +using System; +using System.IO; +using System.Configuration; + + + /// + /// Summary description for MediaUtilities. + /// +public class MediaUtilities { + // private static string defaultPath = @"..\..\media\"; + private static string mediaPath = ConfigurationSettings.AppSettings.Get("MediaPath"); + + public MediaUtilities() { + } + + public static string FindFile(string filename) { + return FindFile(mediaPath, filename); + } + + public static string FindFile(string path, string filename) { + // First try to load the file in the full path + string fullName = AppendDirectorySeparator(path) + filename; + if (File.Exists(fullName)) + return fullName; + else + throw new FileNotFoundException("Could not find this file.", filename); + } + + private static string AppendDirectorySeparator(string pathname) { + if (!pathname.EndsWith(@"\")) + return pathname + @"\"; + else + return pathname; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/PositionedMesh.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/PositionedMesh.cs new file mode 100644 index 0000000..fa6a288 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/PositionedMesh.cs @@ -0,0 +1,387 @@ +using System; +using System.Drawing; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + +public class PositionedMesh : IDisposable { + private Device device = null; + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + private Sphere boundingSphere; + + private WorldPosition worldPosition; + public WorldPosition Position { + get { return worldPosition; } + set { worldPosition = value; } + } + + + + private float velocity; + public float Velocity { + get { return velocity; } + set { velocity = value; } + } + + + /// + /// Constructor + /// + /// The initial filename + public PositionedMesh(string filename) { + fileName = filename; + } + public PositionedMesh() : this ("PositionedMesh") {} + + public PositionedMesh(Device device, string filename) { + Create(device, filename); + } + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + /// + ///The bounding sphere + /// + public Sphere BoundingSphere { + get { return boundingSphere; } + } + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + worldPosition = new WorldPosition(); + + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + this.device = device; + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + filename = MediaUtilities.FindFile(filename); + // Load the mesh + systemMemoryMesh = Mesh.FromFile(filename, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + Mesh tempMesh = null; + string errorString; + tempMesh = Mesh.Clean(CleanType.Optimization, systemMemoryMesh, adjacencyBuffer, adjacencyBuffer, out errorString); + if (tempMesh != systemMemoryMesh) { + systemMemoryMesh.Dispose(); + systemMemoryMesh = tempMesh; + } + + // Optimize the mesh for performance + MeshFlags flags = MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache; + systemMemoryMesh.OptimizeInPlace(flags, adjacencyBuffer); + adjacencyBuffer.Close(); + adjacencyBuffer = null; + // Setup bounding volumes + VertexBuffer vb = systemMemoryMesh.VertexBuffer; + GraphicsStream vertexData = vb.Lock(0, 0, LockFlags.ReadOnly); + boundingSphere.Radius = Geometry.ComputeBoundingSphere(vertexData,systemMemoryMesh.NumberVertices,systemMemoryMesh.VertexFormat, out boundingSphere.CenterPoint); + vb.Unlock(); + vb.Dispose(); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + + + } + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. + localMemoryMesh = systemMemoryMesh.Clone(MeshFlags.VbWriteOnly | MeshFlags.IbWriteOnly, + systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + // Set the world transform + device.Transform.World = worldPosition.WorldMatrix; + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render() { + Render(true, true); + } + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/SphereStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/SphereStruct.cs new file mode 100644 index 0000000..90d9d6f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/SphereStruct.cs @@ -0,0 +1,6 @@ +using Microsoft.DirectX; + +public struct Sphere { + public Vector3 CenterPoint; + public float Radius; +}; \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/SplashScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/SplashScreen.cs new file mode 100644 index 0000000..9ffea2c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/SplashScreen.cs @@ -0,0 +1,237 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + + + /// + /// Spacewar Splashscreen + /// +public class SplashScreen : System.Windows.Forms.Form { + private MainClass mainClass; + private System.Windows.Forms.Button helpButton; + private System.Windows.Forms.Button startButton; + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.Button soloButton; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.CheckBox checkBox1; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + public SplashScreen(MainClass main) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + this.mainClass = main; + radioButton3.Checked = true; + checkBox1.Checked = true; + mainClass.GameFormSize = new Size(1024,768); + mainClass.FullScreen = true; + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(SplashScreen)); + this.helpButton = new System.Windows.Forms.Button(); + this.startButton = new System.Windows.Forms.Button(); + this.closeButton = new System.Windows.Forms.Button(); + this.soloButton = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // helpButton + // + this.helpButton.ForeColor = System.Drawing.Color.White; + this.helpButton.Location = new System.Drawing.Point(440, 280); + this.helpButton.Name = "helpButton"; + this.helpButton.Size = new System.Drawing.Size(136, 32); + this.helpButton.TabIndex = 5; + this.helpButton.Text = "Show Help"; + this.helpButton.Click += new System.EventHandler(this.helpButton_Click); + // + // startButton + // + this.startButton.ForeColor = System.Drawing.Color.White; + this.startButton.Location = new System.Drawing.Point(440, 364); + this.startButton.Name = "startButton"; + this.startButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.startButton.Size = new System.Drawing.Size(136, 32); + this.startButton.TabIndex = 7; + this.startButton.Text = "Network Play"; + this.startButton.Click += new System.EventHandler(this.startButton_Click); + // + // closeButton + // + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.ForeColor = System.Drawing.Color.White; + this.closeButton.Location = new System.Drawing.Point(440, 406); + this.closeButton.Name = "closeButton"; + this.closeButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.closeButton.Size = new System.Drawing.Size(136, 32); + this.closeButton.TabIndex = 8; + this.closeButton.Text = "Exit"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // soloButton + // + this.soloButton.ForeColor = System.Drawing.Color.White; + this.soloButton.Location = new System.Drawing.Point(440, 322); + this.soloButton.Name = "soloButton"; + this.soloButton.Size = new System.Drawing.Size(136, 32); + this.soloButton.TabIndex = 6; + this.soloButton.Text = "Solo Play"; + this.soloButton.Click += new System.EventHandler(this.soloButton_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.radioButton3); + this.groupBox1.Controls.Add(this.radioButton2); + this.groupBox1.Controls.Add(this.radioButton1); + this.groupBox1.ForeColor = System.Drawing.Color.White; + this.groupBox1.Location = new System.Drawing.Point(16, 320); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(128, 128); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Screen Resolution"; + // + // checkBox1 + // + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(16, 96); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.TabIndex = 3; + this.checkBox1.Text = "Full Screen"; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // radioButton3 + // + this.radioButton3.Checked = true; + this.radioButton3.ForeColor = System.Drawing.Color.White; + this.radioButton3.Location = new System.Drawing.Point(16, 72); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(80, 24); + this.radioButton3.TabIndex = 2; + this.radioButton3.TabStop = true; + this.radioButton3.Text = "1024 x 768"; + this.radioButton3.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton2 + // + this.radioButton2.ForeColor = System.Drawing.Color.White; + this.radioButton2.Location = new System.Drawing.Point(16, 48); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(72, 24); + this.radioButton2.TabIndex = 1; + this.radioButton2.Text = "800 x 600"; + this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton1 + // + this.radioButton1.ForeColor = System.Drawing.Color.White; + this.radioButton1.Location = new System.Drawing.Point(16, 24); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(72, 24); + this.radioButton1.TabIndex = 0; + this.radioButton1.Text = "640 x 480"; + this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // SplashScreen + // + this.AcceptButton = this.soloButton; + this.AutoScale = false; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.Black; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(594, 454); + this.ControlBox = false; + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.soloButton); + this.Controls.Add(this.closeButton); + this.Controls.Add(this.startButton); + this.Controls.Add(this.helpButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(600, 460); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(600, 460); + this.Name = "SplashScreen"; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + private void helpButton_Click(object sender, System.EventArgs e) { + HelpScreen helpScreen = new HelpScreen(); + helpScreen.ShowDialog(); + } + + private void startButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = true; + this.Close(); + } + + private void closeButton_Click(object sender, System.EventArgs e) { + Environment.Exit(0); + } + + private void soloButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = false; + this.Close(); + } + + private void radioButton_CheckedChanged(object sender, System.EventArgs e) { + RadioButton btn = (RadioButton)sender; + Console.WriteLine(btn.ToString()); + if (btn.Checked) { + if (btn == radioButton1) + mainClass.GameFormSize = new Size(640,480); + if (btn == radioButton2) + mainClass.GameFormSize = new Size(800, 600); + if (btn == radioButton3) + mainClass.GameFormSize = new Size(1024, 768); + } + } + + private void checkBox1_CheckedChanged(object sender, System.EventArgs e) { + mainClass.FullScreen = checkBox1.Checked; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/SplashScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step04/SplashScreen.resx new file mode 100644 index 0000000..18fad73 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/SplashScreen.resx @@ -0,0 +1,4715 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + False + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + False + + + 80 + + + True + + + Private + + + SplashScreen + + + + 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 + AElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/Step04.csproj b/Source Code updated 08-12-05/Spacewar3D/Step04/Step04.csproj new file mode 100644 index 0000000..6e1ada4 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/Step04.csproj @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/Step04.sln b/Source Code updated 08-12-05/Spacewar3D/Step04/Step04.sln new file mode 100644 index 0000000..b0beaa4 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/Step04.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Step04", "Step04.csproj", "{DE8FEF2E-6E28-4456-9712-68437802A747}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.ActiveCfg = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.Build.0 = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.ActiveCfg = Release|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/WorldPosition.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/WorldPosition.cs new file mode 100644 index 0000000..891292a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/WorldPosition.cs @@ -0,0 +1,240 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + +[Serializable] +public class WorldPosition { + public float XPos { + get { return xPos; } + set { xPos = value; } + } + + public float YPos { + get { return yPos; } + set { yPos = value; } + } + + public float ZPos { + get { return zPos; } + set { zPos = value; } + } + + + public float XRotation { + get { return xRotation; } + set { xRotation = value; } + } + + public float YRotation { + get { return yRotation; } + set { yRotation = value; } + } + + public float ZRotation { + get { return zRotation; } + set { zRotation = value; } + } + + + public float XScale { + get { return xScale; } + set { xScale = value; } + } + + public float YScale { + get { return yScale; } + set { yScale = value; } + } + + public float ZScale { + get { return zScale; } + set { zScale = value; } + } + + + public Matrix WorldMatrix { + get { Update(); return worldMatrix; } + set { + worldMatrix = value; + Location = Vector3.TransformCoordinate(new Vector3(0,0,0), worldMatrix); + Point(Location, Location+Direction); + Roll(Location, Location+Up); + } + } + + public Vector3 Direction { + get { + Vector3 directionVector= new Vector3(0,0,1); + return Vector3.TransformNormal(directionVector, worldMatrix); + } + } + + public Vector3 Up { + get { + Vector3 upVector = new Vector3(0,1,0); + return Vector3.TransformNormal(upVector,worldMatrix); + } + } + public Vector3 Right { + get { + Vector3 rightVector = new Vector3(1,0,0); + return Vector3.TransformNormal(rightVector,worldMatrix); + } + } + + public Vector3 Location { + get { + return new Vector3( xPos, yPos, zPos ); + } + set { + Move(value); + } + } + + public Vector3 Rotation { + get { + return new Vector3( xRotation, yRotation, zRotation); + } + set { + Rotate(value); + } + } + + + private float xPos, yPos, zPos = 0.0f; + private float xRotation, yRotation, zRotation = 0.0f; + private float xScale, yScale, zScale = 0.0f; + + private Matrix worldMatrix, scaleMatrix, rotationMatrix = Matrix.Identity; + private Matrix translationMatrix = Matrix.Identity; + private Matrix combineMatrix1, combineMatrix2; + + public Matrix CombineMatrix1 { + get { return combineMatrix1; } + set { combineMatrix1 = value; } + } + + public Matrix CombineMatrix2 { + get { return combineMatrix2; } + set { combineMatrix2 = value; } + } + + + public WorldPosition() { + + Move(0.0f, 0.0f, 0.0f); + Rotate(0.0f, 0.0f, 0.0f); + Scale(1.0f, 1.0f, 1.0f); + combineMatrix1 = combineMatrix2 = Matrix.Zero; + + Update(); + } + + public Vector3 CombinedLocation { + get { + Update(); + return new Vector3(worldMatrix.M41,worldMatrix.M42,worldMatrix.M43); + } + } + + public void Move( Vector3 newPosition ) { + Move( newPosition.X, newPosition.Y, newPosition.Z ); + } + + public void Move( float x, float y, float z ) { + xPos = x; + yPos = y; + zPos = z; + + translationMatrix = Matrix.Translation( xPos, yPos, zPos ); + } + + public void MoveRel( float x, float y, float z ) { + Move(xPos + x, yPos + y, zPos + z ); + } + + public void Rotate( Vector3 newDirection ) { + Rotate(newDirection.X, newDirection.Y, newDirection.Z); + } + + public void Point(Vector3 pointAtLocation) { + Point(xPos, yPos, zPos, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(Vector3 currentLocation, Vector3 pointAtLocation) { + Point(currentLocation.X, currentLocation.Y, currentLocation.Z, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } + + public void Roll(Vector3 Location, Vector3 UpVector) { + float xDiff, yDiff; + xDiff = Location.X - UpVector.X; + yDiff = Location.Y - UpVector.Y; + zRotation = (float) Math.Atan2(xDiff, yDiff); + } + + public void Rotate( float x, float y, float z ) { + xRotation = x; + yRotation = y; + zRotation = z; + + rotationMatrix = Matrix.RotationYawPitchRoll( yRotation, xRotation, zRotation ); + } + + public void RotateRel( float x, float y, float z ) { + Rotate( xRotation + x, yRotation + y, zRotation + z ); + } + + //YawPitchRoll rotates an object relative to its own orthonormal basis vectors + public void YawPitchRoll( float yaw, float pitch, float roll) { + + Matrix yawMatrix = Matrix.RotationAxis(this.Up, yaw); + Matrix pitchMatrix = Matrix.RotationAxis(this.Right, pitch); + Matrix rollMatrix = Matrix.RotationAxis(this.Direction, roll); + + Matrix ypr = yawMatrix * pitchMatrix * rollMatrix; + rotationMatrix *= ypr; + } + + public void Scale( float x, float y, float z ) { + xScale = x; + yScale = y; + zScale = z; + + scaleMatrix = Matrix.Scaling( xScale, yScale, zScale ); + } + + public void ScaleRel( float x, float y, float z ) { + Scale( xScale + x, yScale + y, zScale + z ); + } + + + public void Update() { + Matrix m; + m = scaleMatrix; + m *= rotationMatrix; + m *= translationMatrix; + if (combineMatrix1 != Matrix.Zero) + m *= combineMatrix1; + if (combineMatrix2 != Matrix.Zero) + m *= combineMatrix2; + worldMatrix = m; + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/d3dapp.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/d3dapp.cs new file mode 100644 index 0000000..9384434 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/d3dapp.cs @@ -0,0 +1,1517 @@ +//----------------------------------------------------------------------------- +// File: D3DApp.cs +// +// Desc: Application class for the Direct3D samples framework library. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + +/// +/// The base class for all the graphics (D3D) samples, it derives from windows forms +/// +public class GraphicsSample : System.Windows.Forms.Form { + #region Menu Information + // The menu items that *all* samples will need + protected System.Windows.Forms.MainMenu mnuMain; + protected System.Windows.Forms.MenuItem mnuFile; + private System.Windows.Forms.MenuItem mnuGo; + private System.Windows.Forms.MenuItem mnuSingle; + private System.Windows.Forms.MenuItem mnuBreak1; + private System.Windows.Forms.MenuItem mnuChange; + private System.Windows.Forms.MenuItem mnuBreak2; + protected System.Windows.Forms.MenuItem mnuExit; + #endregion + + // The window we will render too + private System.Windows.Forms.Control ourRenderTarget; + // Should we use the default windows + protected bool isUsingMenus = true; + + // We need to keep track of our enumeration settings + protected D3DEnumeration enumerationSettings = new D3DEnumeration(); + protected D3DSettings graphicsSettings = new D3DSettings(); + private bool isMaximized = false; // Are we maximized? + private bool isHandlingSizeChanges = true; // Are we handling size changes? + private bool isClosing = false; // Are we closing? + private bool isChangingFormStyle = false; // Are we changing the forms style? + private bool isWindowActive = true; // Are we waiting for got focus? + + private float lastTime = 0.0f; // The last time + private int frames = 0; // Number of frames since our last update + private int appPausedCount = 0; // How many times has the app been paused (and when can it resume)? + + // Internal variables for the state of the app + protected bool windowed; + protected bool active; + protected bool ready; + protected bool hasFocus; + protected bool isMultiThreaded = false; + + // Internal variables used for timing + protected bool frameMoving; + protected bool singleStep; + // Main objects used for creating and rendering the 3D scene + protected PresentParameters presentParams = new PresentParameters(); // Parameters for CreateDevice/Reset + protected Device device; // The rendering device + protected RenderStateManager renderState; + protected SamplerStateManagerCollection sampleState; + protected TextureStateManagerCollection textureStates; + private Caps graphicsCaps; // Caps for the device + protected Caps Caps { get { return graphicsCaps; } } + private CreateFlags behavior; // Indicate sw or hw vertex processing + protected BehaviorFlags BehaviorFlags { get { return new BehaviorFlags(behavior); } } + protected System.Windows.Forms.Control RenderTarget { get { return ourRenderTarget; } set { ourRenderTarget = value; } } + + // Variables for timing + protected float appTime; // Current time in seconds + protected float elapsedTime; // Time elapsed since last frame + protected float framePerSecond; // Instanteous frame rate + protected string deviceStats;// String to hold D3D device stats + protected string frameStats; // String to hold frame stats + + private bool deviceLost = false; + + // Overridable variables for the app + private int minDepthBits; // Minimum number of bits needed in depth buffer + protected int MinDepthBits { get { return minDepthBits; } set { minDepthBits = value; enumerationSettings.AppMinDepthBits = value;} } + private int minStencilBits; // Minimum number of bits needed in stencil buffer + protected int MinStencilBits { get { return minStencilBits; } set { minStencilBits = value; enumerationSettings.AppMinStencilBits = value;} } + protected bool showCursorWhenFullscreen; // Whether to show cursor when fullscreen + protected bool clipCursorWhenFullscreen; // Whether to limit cursor pos when fullscreen + protected bool startFullscreen; // Whether to start up the app in fullscreen mode + + private System.Drawing.Size storedSize; + private System.Drawing.Point storedLocation; + + // Overridable functions for the 3D scene created by the app + protected virtual bool ConfirmDevice(Caps caps, VertexProcessingType vertexProcessingType, + Format adapterFormat, Format backBufferFormat) { return true; } + protected virtual void OneTimeSceneInitialization() { /* Do Nothing */ } + protected virtual void InitializeDeviceObjects() { /* Do Nothing */ } + protected virtual void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void FrameMove() { /* Do Nothing */ } + protected virtual void Render() { /* Do Nothing */ } + protected virtual void InvalidateDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void DeleteDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + + + + + /// + /// Constructor + /// + public GraphicsSample() { + device = null; + active = false; + ready = false; + hasFocus = false; + behavior = 0; + + ourRenderTarget = this; + frameMoving = true; + singleStep = false; + framePerSecond = 0.0f; + deviceStats = null; + frameStats = null; + + this.Text = "D3D9 Sample"; + this.ClientSize = new System.Drawing.Size(400,300); + this.KeyPreview = true; + + minDepthBits = 16; + minStencilBits = 0; + showCursorWhenFullscreen = false; + startFullscreen = false; + + // When clipCursorWhenFullscreen is TRUE, the cursor is limited to + // the device window when the app goes fullscreen. This prevents users + // from accidentally clicking outside the app window on a multimon system. + // This flag is turned off by default for debug builds, since it makes + // multimon debugging difficult. +#if (DEBUG) + clipCursorWhenFullscreen = false; +#else + clipCursorWhenFullscreen = true; +#endif + InitializeComponent(); + } + + + + + /// + /// Picks the best graphics device, and initializes it + /// + /// true if a good device was found, false otherwise + public bool CreateGraphicsSample() { + enumerationSettings.ConfirmDeviceCallback = new D3DEnumeration.ConfirmDeviceCallbackType(this.ConfirmDevice); + enumerationSettings.Enumerate(); + + if (ourRenderTarget.Cursor == null) { + // Set up a default cursor + ourRenderTarget.Cursor = System.Windows.Forms.Cursors.Default; + } + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + + try { + ChooseInitialSettings(); + + // Initialize the application timer + DXUtil.Timer(DirectXTimer.Start); + // Initialize the app's custom scene stuff + OneTimeSceneInitialization(); + // Initialize the 3D environment for the app + InitializeEnvironment(); + } + catch (SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + return false; + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + return false; + } + + // The app is ready to go + ready = true; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available windowed mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestWindowedMode(bool doesRequireHardware, bool doesRequireReference) { + // Get display mode of primary adapter (which is assumed to be where the window + // will appear) + DisplayMode primaryDesktopDisplayMode = Manager.Adapters[0].CurrentDisplayMode; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + if (!deviceCombo.IsWindowed) + continue; + if (deviceCombo.AdapterFormat != primaryDesktopDisplayMode.Format) + continue; + + // If we haven't found a compatible DeviceCombo yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + deviceCombo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + // This windowed device combo looks great -- take it + goto EndWindowedDeviceComboSearch; + } + // Otherwise keep looking for a better windowed device combo + } + } + } + } + + EndWindowedDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + graphicsSettings.WindowedAdapterInfo = bestAdapterInfo; + graphicsSettings.WindowedDeviceInfo = bestDeviceInfo; + graphicsSettings.WindowedDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = true; + graphicsSettings.WindowedDisplayMode = primaryDesktopDisplayMode; + graphicsSettings.WindowedWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + graphicsSettings.WindowedHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.WindowedDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.WindowedMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.WindowedMultisampleQuality = 0; + graphicsSettings.WindowedVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.WindowedPresentInterval = (PresentInterval)bestDeviceCombo.PresentIntervalList[0]; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available fullscreen mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestFullscreenMode(bool doesRequireHardware, bool doesRequireReference) { + // For fullscreen, default to first HAL DeviceCombo that supports the current desktop + // display mode, or any display mode if HAL is not compatible with the desktop mode, or + // non-HAL if no HAL is available + DisplayMode adapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestAdapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestDisplayMode = new DisplayMode(); + bestAdapterDesktopDisplayMode.Width = 0; + bestAdapterDesktopDisplayMode.Height = 0; + bestAdapterDesktopDisplayMode.Format = 0; + bestAdapterDesktopDisplayMode.RefreshRate = 0; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + adapterDesktopDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + bool adapterMatchesDesktop = (deviceCombo.AdapterFormat == adapterDesktopDisplayMode.Format); + if (deviceCombo.IsWindowed) + continue; + + // If we haven't found a compatible set yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + bestDeviceCombo.DevType == DeviceType.Hardware && bestDeviceCombo.AdapterFormat != adapterDesktopDisplayMode.Format && adapterMatchesDesktop || + bestDeviceCombo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + bestAdapterDesktopDisplayMode = adapterDesktopDisplayMode; + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + // This fullscreen device combo looks great -- take it + goto EndFullscreenDeviceComboSearch; + } + // Otherwise keep looking for a better fullscreen device combo + } + } + } + } + + EndFullscreenDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + // Need to find a display mode on the best adapter that uses pBestDeviceCombo->AdapterFormat + // and is as close to bestAdapterDesktopDisplayMode's res as possible + bestDisplayMode.Width = 0; + bestDisplayMode.Height = 0; + bestDisplayMode.Format = 0; + bestDisplayMode.RefreshRate = 0; + foreach (DisplayMode displayMode in bestAdapterInfo.DisplayModeList) { + if (displayMode.Format != bestDeviceCombo.AdapterFormat) + continue; + if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate == bestAdapterDesktopDisplayMode.RefreshRate) { + // found a perfect match, so stop + bestDisplayMode = displayMode; + break; + } + else if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate > bestDisplayMode.RefreshRate) { + // refresh rate doesn't match, but width/height match, so keep this + // and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == bestAdapterDesktopDisplayMode.Width) { + // width matches, so keep this and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == 0) { + // we don't have anything better yet, so keep this and keep looking + bestDisplayMode = displayMode; + } + } + + graphicsSettings.FullscreenAdapterInfo = bestAdapterInfo; + graphicsSettings.FullscreenDeviceInfo = bestDeviceInfo; + graphicsSettings.FullscreenDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = false; + graphicsSettings.FullscreenDisplayMode = bestDisplayMode; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.FullscreenDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.FullscreenMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.FullscreenMultisampleQuality = 0; + graphicsSettings.FullscreenVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.FullscreenPresentInterval = PresentInterval.Default; + + return true; + } + + + + + /// + /// Choose the initial settings for the application + /// + /// true if the settings were initialized + public bool ChooseInitialSettings() { + bool foundFullscreenMode = FindBestFullscreenMode(false, false); + bool foundWindowedMode = FindBestWindowedMode(false, false); + if (startFullscreen && foundFullscreenMode) + graphicsSettings.IsWindowed = false; + + if (!foundFullscreenMode && !foundWindowedMode) + throw new NoCompatibleDevicesException(); + + return (foundFullscreenMode || foundWindowedMode); + } + + + + + /// + /// Build presentation parameters from the current settings + /// + public void BuildPresentParamsFromSettings() { + presentParams.Windowed = graphicsSettings.IsWindowed; + presentParams.BackBufferCount = 1; + presentParams.MultiSample = graphicsSettings.MultisampleType; + presentParams.MultiSampleQuality = graphicsSettings.MultisampleQuality; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.EnableAutoDepthStencil = enumerationSettings.AppUsesDepthBuffer; + presentParams.AutoDepthStencilFormat = graphicsSettings.DepthStencilBufferFormat; + presentParams.PresentFlag = PresentFlag.None; + + if (windowed) { + presentParams.BackBufferWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + presentParams.BackBufferHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = 0; + presentParams.PresentationInterval = PresentInterval.Immediate; + presentParams.DeviceWindow = ourRenderTarget; + } + else { + presentParams.BackBufferWidth = graphicsSettings.DisplayMode.Width; + presentParams.BackBufferHeight = graphicsSettings.DisplayMode.Height; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = graphicsSettings.DisplayMode.RefreshRate; + presentParams.PresentationInterval = graphicsSettings.PresentInterval; + presentParams.DeviceWindow = this; + } + } + + + + + /// + /// Initialize the graphics environment + /// + public void InitializeEnvironment() { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + GraphicsDeviceInfo deviceInfo = graphicsSettings.DeviceInfo; + + windowed = graphicsSettings.IsWindowed; + + // Set up the presentation parameters + BuildPresentParamsFromSettings(); + + if (deviceInfo.Caps.PrimitiveMiscCaps.IsNullReference) { + // Warn user about null ref device that can't render anything + HandleSampleException(new NullReferenceDeviceException(), ApplicationMessage.None); + } + + CreateFlags createFlags = new CreateFlags(); + if (graphicsSettings.VertexProcessingType == VertexProcessingType.Software) + createFlags = CreateFlags.SoftwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Mixed) + createFlags = CreateFlags.MixedVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Hardware) + createFlags = CreateFlags.HardwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.PureHardware) { + createFlags = CreateFlags.HardwareVertexProcessing; + } + else + throw new ApplicationException(); +#if (DX9) +#else + // Make sure to allow multithreaded apps if we need them + presentParams.ForceNoMultiThreadedFlag = !isMultiThreaded; +#endif + try { + // Create the device + device = new Device(graphicsSettings.AdapterOrdinal, graphicsSettings.DevType, + windowed ? ourRenderTarget : this , createFlags, presentParams); + + // Cache our local objects + renderState = device.RenderState; + sampleState = device.SamplerState; + textureStates = device.TextureState; + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after recreating the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + if (windowed) { + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + } + + // Store device Caps + graphicsCaps = device.DeviceCaps; + behavior = createFlags; + + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + // Store device description + if (deviceInfo.DevType == DeviceType.Reference) + sb.Append("REF"); + else if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append("HAL"); + else if (deviceInfo.DevType == DeviceType.Software) + sb.Append("SW"); + + BehaviorFlags behaviorFlags = new BehaviorFlags(createFlags); + if ((behaviorFlags.HardwareVertexProcessing) && + (behaviorFlags.PureDevice)) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (pure hw vp)"); + else + sb.Append(" (simulated pure hw vp)"); + } + else if (behaviorFlags.HardwareVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (hw vp)"); + else + sb.Append(" (simulated hw vp)"); + } + else if (behaviorFlags.MixedVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (mixed vp)"); + else + sb.Append(" (simulated mixed vp)"); + } + else if (behaviorFlags.SoftwareVertexProcessing) { + sb.Append(" (sw vp)"); + } + + if (deviceInfo.DevType == DeviceType.Hardware) { + sb.Append(": "); + sb.Append(adapterInfo.AdapterDetails.Description); + } + + // Set device stats string + deviceStats = sb.ToString(); + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // Confine cursor to fullscreen window + if (clipCursorWhenFullscreen) { + if (!windowed) { + System.Drawing.Rectangle rcWindow = this.ClientRectangle; + } + } + + // Setup the event handlers for our device + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + device.Disposing += new System.EventHandler(this.DeleteDeviceObjects); + device.DeviceResizing += new System.ComponentModel.CancelEventHandler(this.EnvironmentResized); + + // Initialize the app's device-dependent objects + try { + InitializeDeviceObjects(); + RestoreDeviceObjects(null, null); + active = true; + return; + } + catch { + // Cleanup before we try again + InvalidateDeviceObjects(null, null); + DeleteDeviceObjects(null, null); + device.Dispose(); + device = null; + if (this.Disposing) + return; + } + } + catch { + // If that failed, fall back to the reference rasterizer + if (deviceInfo.DevType == DeviceType.Hardware) { + if (FindBestWindowedMode(false, true)) { + windowed = true; + + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + + // Let the user know we are switching from HAL to the reference rasterizer + HandleSampleException(null, ApplicationMessage.WarnSwitchToRef); + + InitializeEnvironment(); + } + } + } + } + + + + + /// + /// Displays sample exceptions to the user + /// + /// The exception that was thrown + /// Extra information on how to handle the exception + public void HandleSampleException(SampleException e, ApplicationMessage Type) { + // Build a message to display to the user + string strMsg = string.Empty; + if (e != null) + strMsg = e.Message; + + if (ApplicationMessage.ApplicationMustExit == Type) { + strMsg += "\n\nThis sample will now exit."; + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + + // Close the window, which shuts down the app + if (this.IsHandleCreated) + this.Close(); + } + else { + if (ApplicationMessage.WarnSwitchToRef == Type) + strMsg = "\n\nSwitching to the reference rasterizer,\n"; + strMsg += "a software device that implements the entire\n"; + strMsg += "Direct3D feature set, but runs very slowly."; + + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + } + } + + + + + /// + /// Fired when our environment was resized + /// + /// the device that's resizing our environment + /// Set the cancel member to true to turn off automatic device reset + public void EnvironmentResized(object sender, System.ComponentModel.CancelEventArgs e) { + // Check to see if we're closing or changing the form style + if ((isClosing) || (isChangingFormStyle)) { + // We are, cancel our reset, and exit + e.Cancel = true; + return; + } + + // Check to see if we're minimizing and our rendering object + // is not the form, if so, cancel the resize + if ((ourRenderTarget != this) && (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)) + e.Cancel = true; + + if (!isWindowActive) + e.Cancel = true; + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + } + + + + + /// + /// Called when user toggles between fullscreen mode and windowed mode + /// + public void ToggleFullscreen() { + int AdapterOrdinalOld = graphicsSettings.AdapterOrdinal; + DeviceType DevTypeOld = graphicsSettings.DevType; + + isHandlingSizeChanges = false; + isChangingFormStyle = true; + ready = false; + + // Toggle the windowed state + windowed = !windowed; + + // Save our maximized settings.. + if (!windowed && isMaximized) + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + + graphicsSettings.IsWindowed = windowed; + + // If AdapterOrdinal and DevType are the same, we can just do a Reset(). + // If they've changed, we need to do a complete device teardown/rebuild. + if (graphicsSettings.AdapterOrdinal == AdapterOrdinalOld && + graphicsSettings.DevType == DevTypeOld) { + BuildPresentParamsFromSettings(); + // Resize the 3D device + RETRY: + try { + device.Reset(presentParams); + } + catch { + if (windowed) + ForceWindowed(); + else { + // Sit in a loop until the device passes Reset() + try { + device.TestCooperativeLevel(); + } + catch(DeviceNotResetException) { + // Device still needs to be Reset. Try again. + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + goto RETRY; + } + } + } + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + else { + device.Dispose(); + device = null; + InitializeEnvironment(); + } + + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after resetting the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + + if (windowed) { + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; + isChangingFormStyle = false; + + // We were maximized, restore that state + if (isMaximized) { + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + } + this.SendToBack(); + this.BringToFront(); + this.ClientSize = storedSize; + this.Location = storedLocation; + } + else { + if (this.Menu != null) + this.Menu = null; + + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + isChangingFormStyle = false; + } + isHandlingSizeChanges = true; + ready = true; + } + + + + + /// + /// Switch to a windowed mode, even if that means picking a new device and/or adapter + /// + public void ForceWindowed() { + if (windowed) + return; + + if (!FindBestWindowedMode(false, false)) { + return; + } + windowed = true; + + // Now destroy the current 3D device objects, then reinitialize + + ready = false; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Create the new device + try { + InitializeEnvironment(); + } + catch (SampleException e) { + HandleSampleException(e,ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(),ApplicationMessage.ApplicationMustExit); + } + ready = true; + } + + + + + /// + /// Called when our sample has nothing else to do, and it's time to render + /// + private void FullRender() { + // Render a frame during idle time (no messages are waiting) + if (active && ready) { + try { + if ((deviceLost) || (System.Windows.Forms.Form.ActiveForm != this)) { + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + } + // Render a frame during idle time + if (active) { + Render3DEnvironment(); + } + } + catch (Exception ee) { + System.Windows.Forms.MessageBox.Show("An exception has occurred. This sample must exit.\r\n\r\n" + ee.ToString(), "Exception", + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + this.Close(); + } + } + } + + + + + /// + /// Run the simulation + /// + public void Run() { + // Now we're ready to recieve and process Windows messages. + System.Windows.Forms.Control mainWindow = this; + + // If the render target is a form and *not* this form, use that form instead, + // otherwise, use the main form. + if ((ourRenderTarget is System.Windows.Forms.Form) && (ourRenderTarget != this)) + mainWindow = ourRenderTarget; + + mainWindow.Show(); + while (mainWindow.Created) { + FullRender(); + System.Windows.Forms.Application.DoEvents(); + } + } + + + + + /// + /// Draws the scene + /// + public void Render3DEnvironment() { + if (deviceLost) { + try { + // Test the cooperative level to see if it's okay to render + device.TestCooperativeLevel(); + } + catch (DeviceLostException) { + // If the device was lost, do not render until we get it back + isHandlingSizeChanges = false; + isWindowActive = false; + return; + } + catch (DeviceNotResetException) { + // Check if the device needs to be resized. + + // If we are windowed, read the desktop mode and use the same format for + // the back buffer + if (windowed) { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + graphicsSettings.WindowedDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + presentParams.BackBufferFormat = graphicsSettings.WindowedDisplayMode.Format; + } + + // Reset the device and resize it + device.Reset(device.PresentationParameters); + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + deviceLost = false; + } + + // Get the app's time, in seconds. Skip rendering if no time elapsed + float fAppTime = DXUtil.Timer(DirectXTimer.GetApplicationTime); + float fElapsedAppTime = DXUtil.Timer(DirectXTimer.GetElapsedTime); + if ((0.0f == fElapsedAppTime) && frameMoving) + return; + + // FrameMove (animate) the scene + if (frameMoving || singleStep) { + // Store the time for the app + appTime = fAppTime; + elapsedTime = fElapsedAppTime; + + // Frame move the scene + FrameMove(); + + singleStep = false; + } + + // Render the scene as normal + Render(); + + UpdateStats(); + + try { + // Show the frame on the primary surface. + device.Present(); + } + catch(DeviceLostException) { + deviceLost = true; + } + } + + + + + /// + /// Update the various statistics the simulation keeps track of + /// + public void UpdateStats() { + // Keep track of the frame count + float time = DXUtil.Timer(DirectXTimer.GetAbsoluteTime); + ++frames; + + // Update the scene stats once per second + if (time - lastTime > 1.0f) { + framePerSecond = frames / (time - lastTime); + lastTime = time; + frames = 0; + + string strFmt; + Format fmtAdapter = graphicsSettings.DisplayMode.Format; + if (fmtAdapter == device.PresentationParameters.BackBufferFormat) { + strFmt = fmtAdapter.ToString(); + } + else { + strFmt = String.Format("backbuf {0}, adapter {1}", + device.PresentationParameters.BackBufferFormat.ToString(), fmtAdapter.ToString()); + } + + string strDepthFmt; + if (enumerationSettings.AppUsesDepthBuffer) { + strDepthFmt = String.Format(" ({0})", + graphicsSettings.DepthStencilBufferFormat.ToString()); + } + else { + // No depth buffer + strDepthFmt = ""; + } + + string strMultiSample; + switch (graphicsSettings.MultisampleType) { + case Direct3D.MultiSampleType.NonMaskable: strMultiSample = " (NonMaskable Multisample)"; break; + case Direct3D.MultiSampleType.TwoSamples: strMultiSample = " (2x Multisample)"; break; + case Direct3D.MultiSampleType.ThreeSamples: strMultiSample = " (3x Multisample)"; break; + case Direct3D.MultiSampleType.FourSamples: strMultiSample = " (4x Multisample)"; break; + case Direct3D.MultiSampleType.FiveSamples: strMultiSample = " (5x Multisample)"; break; + case Direct3D.MultiSampleType.SixSamples: strMultiSample = " (6x Multisample)"; break; + case Direct3D.MultiSampleType.SevenSamples: strMultiSample = " (7x Multisample)"; break; + case Direct3D.MultiSampleType.EightSamples: strMultiSample = " (8x Multisample)"; break; + case Direct3D.MultiSampleType.NineSamples: strMultiSample = " (9x Multisample)"; break; + case Direct3D.MultiSampleType.TenSamples: strMultiSample = " (10x Multisample)"; break; + case Direct3D.MultiSampleType.ElevenSamples: strMultiSample = " (11x Multisample)"; break; + case Direct3D.MultiSampleType.TwelveSamples: strMultiSample = " (12x Multisample)"; break; + case Direct3D.MultiSampleType.ThirteenSamples: strMultiSample = " (13x Multisample)"; break; + case Direct3D.MultiSampleType.FourteenSamples: strMultiSample = " (14x Multisample)"; break; + case Direct3D.MultiSampleType.FifteenSamples: strMultiSample = " (15x Multisample)"; break; + case Direct3D.MultiSampleType.SixteenSamples: strMultiSample = " (16x Multisample)"; break; + default: strMultiSample = string.Empty; break; + } + frameStats = String.Format("{0} fps ({1}x{2}), {3}{4}{5}", framePerSecond.ToString("f2"), + device.PresentationParameters.BackBufferWidth, device.PresentationParameters.BackBufferHeight, + strFmt, strDepthFmt, strMultiSample); + } + } + + + + + /// + /// Called in to toggle the pause state of the app. + /// + /// true if the simulation should pause + public void Pause(bool pause) { + appPausedCount += (int)(pause ? +1 : -1); + ready = ((appPausedCount > 0) ? false : true); + + // Handle the first pause request (of many, nestable pause requests) + if (pause && (1 == appPausedCount)) { + // Stop the scene from animating + if (frameMoving) + DXUtil.Timer(DirectXTimer.Stop); + } + + if (0 == appPausedCount) { + // Restart the timers + if (frameMoving) + DXUtil.Timer(DirectXTimer.Start); + } + } + + + + + /// + /// Set our variables to not active and not ready + /// + public void CleanupEnvironment() { + active = false; + ready = false; + if (device != null) + device.Dispose(); + + device = null; + } + #region Menu EventHandlers + + + + + /// + /// Prepares the simulation for a new device being selected + /// + public void UserSelectNewDevice(object sender, EventArgs e) { + // Prompt the user to select a new device or mode + if (active && ready) { + Pause(true); + DoSelectNewDevice(); + Pause(false); + } + } + + + + + /// + /// Displays a dialog so the user can select a new adapter, device, or + /// display mode, and then recreates the 3D environment if needed + /// + private void DoSelectNewDevice() { + isHandlingSizeChanges = false; + // Can't display dialogs in fullscreen mode + if (windowed == false) { + try { + ToggleFullscreen(); + isHandlingSizeChanges = false; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + return; + } + } + + // Make sure the main form is in the background + this.SendToBack(); + D3DSettingsForm settingsForm = new D3DSettingsForm(enumerationSettings, graphicsSettings); + System.Windows.Forms.DialogResult result = settingsForm.ShowDialog(null); + if (result != System.Windows.Forms.DialogResult.OK) { + isHandlingSizeChanges = true; + return; + } + graphicsSettings = settingsForm.settings; + + windowed = graphicsSettings.IsWindowed; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Inform the display class of the change. It will internally + // re-create valid surfaces, a d3ddevice, etc. + try { + InitializeEnvironment(); + } + catch(SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + isHandlingSizeChanges = true; + } + + + + + /// + /// Will start (or stop) simulation + /// + private void ToggleStart(object sender, EventArgs e) { + //Toggle frame movement + frameMoving = !frameMoving; + DXUtil.Timer(frameMoving ? DirectXTimer.Start : DirectXTimer.Stop); + } + + + + + /// + /// Will single step the simulation + /// + private void SingleStep(object sender, EventArgs e) { + // Single-step frame movement + if (false == frameMoving) + DXUtil.Timer(DirectXTimer.Advance); + else + DXUtil.Timer(DirectXTimer.Stop); + frameMoving = false; + singleStep = true; + } + + + + + /// + /// Will end the simulation + /// + private void ExitSample(object sender, EventArgs e) { + this.Close(); + } + #endregion + + + + + #region WinForms Overrides + /// + /// Clean up any resources + /// + protected override void Dispose(bool disposing) { + CleanupEnvironment(); + mnuMain.Dispose(); + base.Dispose(disposing); + } + + + + + /// + /// Handle any key presses + /// + protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) { + // Check for our shortcut keys (Return to start or stop) + if (e.KeyChar == '\r') { + mnuGo.PerformClick(); + e.Handled = true; + } + + // Check for our shortcut keys (Escape to quit) + if ((byte)e.KeyChar == (byte)(int)System.Windows.Forms.Keys.Escape) { + mnuExit.PerformClick(); + e.Handled = true; + } + + // Allow the control to handle the keystroke now + base.OnKeyPress(e); + } + + + + + /// + /// Handle system keystrokes (ie, alt-enter) + /// + protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e) { + if ((e.Alt) && (e.KeyCode == System.Windows.Forms.Keys.Return)) { + // Toggle the fullscreen/window mode + if (active && ready) { + Pause(true); + + try { + ToggleFullscreen(); + Pause(false); + return; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + } + finally { + e.Handled = true; + } + } + } + // Allow the control to handle the keystroke now + base.OnKeyDown(e); + } + + + + + /// + /// Winforms generated code for initializing the form + /// + private void InitializeComponent() { + // + // GraphicsSample + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.MinimumSize = new System.Drawing.Size(100, 100); + #region MenuCreation/etc + this.mnuMain = new System.Windows.Forms.MainMenu(); + this.mnuFile = new System.Windows.Forms.MenuItem(); + this.mnuGo = new System.Windows.Forms.MenuItem(); + this.mnuSingle = new System.Windows.Forms.MenuItem(); + this.mnuBreak1 = new System.Windows.Forms.MenuItem(); + this.mnuChange = new System.Windows.Forms.MenuItem(); + this.mnuBreak2 = new System.Windows.Forms.MenuItem(); + this.mnuExit = new System.Windows.Forms.MenuItem(); + // + // mainMenu1 + // + this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuFile}); + // + // mnuFile + // + this.mnuFile.Index = 0; + this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuGo, + this.mnuSingle, + this.mnuBreak1, + this.mnuChange, + this.mnuBreak2, + this.mnuExit}); + this.mnuFile.Text = "&File"; + // + // mnuGo + // + this.mnuGo.Index = 0; + this.mnuGo.Text = "&Go/stop\tEnter"; + this.mnuGo.Click += new System.EventHandler(this.ToggleStart); + // + // mnuSingle + // + this.mnuSingle.Index = 1; + this.mnuSingle.Text = "&Single step\tSpace"; + this.mnuSingle.Click += new System.EventHandler(this.SingleStep); + // + // mnuBreak1 + // + this.mnuBreak1.Index = 2; + this.mnuBreak1.Text = "-"; + // + // mnuChange + // + this.mnuChange.Index = 3; + this.mnuChange.Shortcut = System.Windows.Forms.Shortcut.F2; + this.mnuChange.ShowShortcut = true; + this.mnuChange.Text = "&Change Device..."; + this.mnuChange.Click += new System.EventHandler(this.UserSelectNewDevice); + // + // mnuBreak2 + // + this.mnuBreak2.Index = 4; + this.mnuBreak2.Text = "-"; + // + // mnuExit + // + this.mnuExit.Index = 5; + this.mnuExit.Text = "E&xit\tESC"; + this.mnuExit.Click += new System.EventHandler(this.ExitSample); + #endregion + } + + + + + /// + /// When the menu is starting pause our simulation + /// + protected override void OnMenuStart(System.EventArgs e) { + Pause(true); // Pause the simulation while the menu starts + } + + + + + /// + /// When the menu is complete our simulation can continue + /// + protected override void OnMenuComplete(System.EventArgs e) { + Pause(false); // Unpause the simulation + } + + + + + /// + /// Make sure our graphics cursor (if available) moves with the cursor + /// + protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e) { + if ((device != null) && (!device.Disposed)) { + // Move the D3D cursor + device.SetCursorPosition(e.X, e.Y, false); + } + // Let the control handle the mouse now + base.OnMouseMove(e); + } + + + + + /// + /// Handle size changed events + /// + protected override void OnSizeChanged(System.EventArgs e) { + this.OnResize(e); + base.OnSizeChanged(e); + } + + + + + /// + /// Handle resize events + /// + protected override void OnResize(System.EventArgs e) { + if (isHandlingSizeChanges) { + // Are we maximized? + isMaximized = (this.WindowState == System.Windows.Forms.FormWindowState.Maximized); + if (!isMaximized) { + storedSize = this.ClientSize; + storedLocation = this.Location; + } + } + active = !(this.WindowState == System.Windows.Forms.FormWindowState.Minimized || this.Visible == false); + base.OnResize(e); + } + + + + + /// + /// Once the form has focus again, we can continue to handle our resize + /// and resets.. + /// + protected override void OnGotFocus(System.EventArgs e) { + isHandlingSizeChanges = true; + isWindowActive = true; + base.OnGotFocus (e); + } + + + + + /// + /// Handle move events + /// + protected override void OnMove(System.EventArgs e) { + if (isHandlingSizeChanges) { + storedLocation = this.Location; + } + base.OnMove(e); + } + + + + + /// + /// Handle closing event + /// + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { + isClosing = true; + base.OnClosing(e); + } + #endregion + + +} + +#region Enums for D3D Applications +/// +/// Messages that can be used when displaying an error +/// +public enum ApplicationMessage { + None, + ApplicationMustExit, + WarnSwitchToRef +}; +#endregion + + + + +#region Various SampleExceptions +/// +/// The default sample exception type +/// +public class SampleException : System.ApplicationException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + + strMsg = "Generic application error. Enable\n"; + strMsg += "debug output for detailed information."; + + return strMsg; + } + } +} + + + + +/// +/// Exception informing user no compatible devices were found +/// +public class NoCompatibleDevicesException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "This sample cannot run in a desktop\n"; + strMsg += "window with the current display settings.\n"; + strMsg += "Please change your desktop settings to a\n"; + strMsg += "16- or 32-bit display mode and re-run this\n"; + strMsg += "sample."; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when the ReferenceDevice is null +/// +public class NullReferenceDeviceException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Warning: Nothing will be rendered.\n"; + strMsg += "The reference rendering device was selected, but your\n"; + strMsg += "computer only has a reduced-functionality reference device\n"; + strMsg += "installed. Install the DirectX SDK to get the full\n"; + strMsg += "reference device.\n"; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when reset fails +/// +public class ResetFailedException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not reset the Direct3D device."; + + return strMsg; + } + } +} + + + + +/// +/// The exception thrown when media couldn't be found +/// +public class MediaNotFoundException : SampleException { + private string mediaFile; + public MediaNotFoundException(string filename) : base() { + mediaFile = filename; + } + public MediaNotFoundException() : base() { + mediaFile = string.Empty; + } + + + + + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not load required media."; + if (mediaFile.Length > 0) + strMsg += string.Format("\r\nFile: {0}", mediaFile); + + return strMsg; + } + } +} +#endregion + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/d3dapp.resx b/Source Code updated 08-12-05/Spacewar3D/Step04/d3dapp.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/d3dapp.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/d3denumeration.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/d3denumeration.cs new file mode 100644 index 0000000..72e931c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/d3denumeration.cs @@ -0,0 +1,428 @@ +//----------------------------------------------------------------------------- +// File: D3DEnumeration.cs +// +// Desc: Enumerates D3D adapters, devices, modes, etc. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + + + +/// +/// Enumeration of all possible D3D vertex processing types +/// +public enum VertexProcessingType { + Software, + Mixed, + Hardware, + PureHardware +} + + + + +/// +/// Info about a display adapter +/// +public class GraphicsAdapterInfo { + public int AdapterOrdinal; + public AdapterDetails AdapterDetails; + public ArrayList DisplayModeList = new ArrayList(); // List of D3DDISPLAYMODEs + public ArrayList DeviceInfoList = new ArrayList(); // List of D3DDeviceInfos + public override string ToString() { return AdapterDetails.Description; } +} + + + + +/// +/// Info about a D3D device, including a list of DeviceCombos (see below) +/// that work with the device +/// +public class GraphicsDeviceInfo { + public int AdapterOrdinal; + public DeviceType DevType; + public Caps Caps; + public ArrayList DeviceComboList = new ArrayList(); // List of D3DDeviceCombos + public override string ToString() { return DevType.ToString(); } +} + + + + +/// +/// Info about a depth/stencil buffer format that is incompatible with a +/// multisample type +/// +public class DepthStencilMultiSampleConflict { + public DepthFormat DepthStencilFormat; + public MultiSampleType MultiSampleType; +} + + + + +/// +/// A combination of adapter format, back buffer format, and windowed/fullscreen +/// that is compatible with a particular D3D device (and the app) +/// +public class DeviceCombo { + public int AdapterOrdinal; + public DeviceType DevType; + public Format AdapterFormat; + public Format BackBufferFormat; + public bool IsWindowed; + public ArrayList DepthStencilFormatList = new ArrayList(); // List of D3DFORMATs + public ArrayList MultiSampleTypeList = new ArrayList(); // List of D3DMULTISAMPLE_TYPEs + public ArrayList MultiSampleQualityList = new ArrayList(); // List of ints (maxQuality per multisample type) + public ArrayList DepthStencilMultiSampleConflictList = new ArrayList(); // List of DepthStencilMultiSampleConflicts + public ArrayList VertexProcessingTypeList = new ArrayList(); // List of VertexProcessingTypes + public ArrayList PresentIntervalList = new ArrayList(); // List of D3DPRESENT_INTERVALs +} + + + + +/// +/// Used to sort Displaymodes +/// +class DisplayModeComparer : System.Collections.IComparer { + /// + /// Compare two display modes + /// + public int Compare(object x, object y) { + DisplayMode dx = (DisplayMode)x; + DisplayMode dy = (DisplayMode)y; + + if (dx.Width > dy.Width) + return 1; + if (dx.Width < dy.Width) + return -1; + if (dx.Height > dy.Height) + return 1; + if (dx.Height < dy.Height) + return -1; + if (dx.Format > dy.Format) + return 1; + if (dx.Format < dy.Format) + return -1; + if (dx.RefreshRate > dy.RefreshRate) + return 1; + if (dx.RefreshRate < dy.RefreshRate) + return -1; + return 0; + } +} + + + + +/// +/// Enumerates available adapters, devices, modes, etc. +/// +public class D3DEnumeration { + /// + /// The confirm device delegate which is used to determine if a device + /// meets the needs of the simulation + /// + public delegate bool ConfirmDeviceCallbackType(Caps caps, + VertexProcessingType vertexProcessingType, Format adapterFormat, + Format backBufferFormat); + + public ConfirmDeviceCallbackType ConfirmDeviceCallback; + public ArrayList AdapterInfoList = new ArrayList(); // List of D3DAdapterInfos + + // The following variables can be used to limit what modes, formats, + // etc. are enumerated. Set them to the values you want before calling + // Enumerate(). + public int AppMinFullscreenWidth = 640; + public int AppMinFullscreenHeight = 480; + public int AppMinColorChannelBits = 5; // min color bits per channel in adapter format + public int AppMinAlphaChannelBits = 0; // min alpha bits per pixel in back buffer format + public int AppMinDepthBits = 15; + public int AppMinStencilBits = 0; + public bool AppUsesDepthBuffer = true; + public bool AppUsesMixedVP = false; // whether app can take advantage of mixed vp mode + public bool AppRequiresWindowed = false; + public bool AppRequiresFullscreen = false; + + /// + /// Enumerates available D3D adapters, devices, modes, etc. + /// + public void Enumerate() { + foreach (AdapterInformation ai in Manager.Adapters) { + ArrayList adapterFormatList = new ArrayList(); + GraphicsAdapterInfo adapterInfo = new GraphicsAdapterInfo(); + adapterInfo.AdapterOrdinal = ai.Adapter; + adapterInfo.AdapterDetails = ai.Information; + + // Get list of all display modes on this adapter. + // Also build a temporary list of all display adapter formats. + foreach (DisplayMode displayMode in ai.SupportedDisplayModes) { + if (displayMode.Width < AppMinFullscreenWidth) + continue; + if (displayMode.Height < AppMinFullscreenHeight) + continue; + if (GraphicsUtility.GetColorChannelBits(displayMode.Format) < AppMinColorChannelBits) + continue; + adapterInfo.DisplayModeList.Add(displayMode); + if (!adapterFormatList.Contains(displayMode.Format)) + adapterFormatList.Add(displayMode.Format); + } + + // Sort displaymode list + DisplayModeComparer dmc = new DisplayModeComparer(); + adapterInfo.DisplayModeList.Sort(dmc); + + // Get info for each device on this adapter + EnumerateDevices(adapterInfo, adapterFormatList); + + // If at least one device on this adapter is available and compatible + // with the app, add the adapterInfo to the list + if (adapterInfo.DeviceInfoList.Count == 0) + continue; + AdapterInfoList.Add(adapterInfo); + } + } + + /// + /// Enumerates D3D devices for a particular adapter + /// + protected void EnumerateDevices(GraphicsAdapterInfo adapterInfo, ArrayList adapterFormatList) { + DeviceType[] devTypeArray = new DeviceType[] { + DeviceType.Hardware, DeviceType.Software, DeviceType.Reference }; + + foreach (DeviceType devType in devTypeArray) { + GraphicsDeviceInfo deviceInfo = new GraphicsDeviceInfo(); + deviceInfo.AdapterOrdinal = adapterInfo.AdapterOrdinal; + deviceInfo.DevType = devType; + try { + deviceInfo.Caps = Manager.GetDeviceCaps(adapterInfo.AdapterOrdinal, devType); + } + catch (DirectXException) { + continue; + } + + // Get info for each devicecombo on this device + EnumerateDeviceCombos(deviceInfo, adapterFormatList); + + // If at least one devicecombo for this device is found, + // add the deviceInfo to the list + if (deviceInfo.DeviceComboList.Count == 0) + continue; + adapterInfo.DeviceInfoList.Add(deviceInfo); + } + } + + /// + /// Enumerates DeviceCombos for a particular device + /// + protected void EnumerateDeviceCombos(GraphicsDeviceInfo deviceInfo, ArrayList adapterFormatList) { + Format[] backBufferFormatArray = new Format[] { + Format.A8R8G8B8, Format.X8R8G8B8, Format.A2R10G10B10, + Format.R5G6B5, Format.A1R5G5B5, Format.X1R5G5B5, + }; + bool[] isWindowedArray = new bool[] { false, true }; + + // See which adapter formats are supported by this device + foreach (Format adapterFormat in adapterFormatList) { + foreach (Format backBufferFormat in backBufferFormatArray) { + if (GraphicsUtility.GetAlphaChannelBits(backBufferFormat) < AppMinAlphaChannelBits) + continue; + foreach (bool isWindowed in isWindowedArray) { + if (!isWindowed && AppRequiresWindowed) + continue; + if (isWindowed && AppRequiresFullscreen) + continue; + if (!Manager.CheckDeviceType(deviceInfo.AdapterOrdinal, deviceInfo.DevType, adapterFormat, backBufferFormat, isWindowed)) { + continue; + } + + // At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed + // DeviceCombo that is supported by the system. We still need to confirm that it's + // compatible with the app, and find one or more suitable depth/stencil buffer format, + // multisample type, vertex processing type, and present interval. + DeviceCombo deviceCombo = new DeviceCombo(); + deviceCombo.AdapterOrdinal = deviceInfo.AdapterOrdinal; + deviceCombo.DevType = deviceInfo.DevType; + deviceCombo.AdapterFormat = adapterFormat; + deviceCombo.BackBufferFormat = backBufferFormat; + deviceCombo.IsWindowed = isWindowed; + if (AppUsesDepthBuffer) { + BuildDepthStencilFormatList(deviceCombo); + if (deviceCombo.DepthStencilFormatList.Count == 0) + continue; + } + BuildMultiSampleTypeList(deviceCombo); + if (deviceCombo.MultiSampleTypeList.Count == 0) + continue; + BuildDepthStencilMultiSampleConflictList(deviceCombo); + BuildVertexProcessingTypeList(deviceInfo, deviceCombo); + if (deviceCombo.VertexProcessingTypeList.Count == 0) + continue; + BuildPresentIntervalList(deviceInfo, deviceCombo); + if (deviceCombo.PresentIntervalList.Count == 0) + continue; + + deviceInfo.DeviceComboList.Add(deviceCombo); + } + } + } + } + + /// + /// Adds all depth/stencil formats that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildDepthStencilFormatList(DeviceCombo deviceCombo) { + DepthFormat[] depthStencilFormatArray = { + DepthFormat.D16, + DepthFormat.D15S1, + DepthFormat.D24X8, + DepthFormat.D24S8, + DepthFormat.D24X4S4, + DepthFormat.D32, + }; + + foreach (DepthFormat depthStencilFmt in depthStencilFormatArray) { + if (GraphicsUtility.GetDepthBits(depthStencilFmt) < AppMinDepthBits) + continue; + if (GraphicsUtility.GetStencilBits(depthStencilFmt) < AppMinStencilBits) + continue; + if (Manager.CheckDeviceFormat(deviceCombo.AdapterOrdinal, deviceCombo.DevType, deviceCombo.AdapterFormat, + Usage.DepthStencil, ResourceType.Surface, depthStencilFmt)) { + if (Manager.CheckDepthStencilMatch(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat, depthStencilFmt)) { + deviceCombo.DepthStencilFormatList.Add(depthStencilFmt); + } + } + } + } + + /// + /// Adds all multisample types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildMultiSampleTypeList(DeviceCombo deviceCombo) { + MultiSampleType[] msTypeArray = { + MultiSampleType.None, + MultiSampleType.NonMaskable, + MultiSampleType.TwoSamples, + MultiSampleType.ThreeSamples, + MultiSampleType.FourSamples, + MultiSampleType.FiveSamples, + MultiSampleType.SixSamples, + MultiSampleType.SevenSamples, + MultiSampleType.EightSamples, + MultiSampleType.NineSamples, + MultiSampleType.TenSamples, + MultiSampleType.ElevenSamples, + MultiSampleType.TwelveSamples, + MultiSampleType.ThirteenSamples, + MultiSampleType.FourteenSamples, + MultiSampleType.FifteenSamples, + MultiSampleType.SixteenSamples, + }; + + foreach (MultiSampleType msType in msTypeArray) { + int result; + int qualityLevels = 0; + if (Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.BackBufferFormat, deviceCombo.IsWindowed, msType, out result, out qualityLevels)) { + deviceCombo.MultiSampleTypeList.Add(msType); + deviceCombo.MultiSampleQualityList.Add(qualityLevels); + } + } + } + + /// + /// Finds any depthstencil formats that are incompatible with multisample types and + /// builds a list of them. + /// + public void BuildDepthStencilMultiSampleConflictList(DeviceCombo deviceCombo) { + DepthStencilMultiSampleConflict DSMSConflict; + + foreach (DepthFormat dsFmt in deviceCombo.DepthStencilFormatList) { + foreach (MultiSampleType msType in deviceCombo.MultiSampleTypeList) { + if (!Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, + deviceCombo.DevType, (Format)dsFmt, deviceCombo.IsWindowed, msType)) { + DSMSConflict = new DepthStencilMultiSampleConflict(); + DSMSConflict.DepthStencilFormat = dsFmt; + DSMSConflict.MultiSampleType = msType; + deviceCombo.DepthStencilMultiSampleConflictList.Add(DSMSConflict); + } + } + } + } + + /// + /// Adds all vertex processing types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildVertexProcessingTypeList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + if (deviceInfo.Caps.DeviceCaps.SupportsHardwareTransformAndLight) { + if (deviceInfo.Caps.DeviceCaps.SupportsPureDevice) { + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.PureHardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.PureHardware); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Hardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Hardware); + } + if (AppUsesMixedVP && (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Mixed, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat))) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Mixed); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Software, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Software); + } + } + + + + + /// + /// Adds all present intervals that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildPresentIntervalList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + PresentInterval[] piArray = { + PresentInterval.Immediate, + PresentInterval.Default, + PresentInterval.One, + PresentInterval.Two, + PresentInterval.Three, + PresentInterval.Four, + }; + + foreach (PresentInterval pi in piArray) { + if (deviceCombo.IsWindowed) { + if (pi == PresentInterval.Two || + pi == PresentInterval.Three || + pi == PresentInterval.Four) { + // These intervals are not supported in windowed mode. + continue; + } + } + // Note that PresentInterval.Default is zero, so you + // can't do a caps check for it -- it is always available. + if (pi == PresentInterval.Default || + (deviceInfo.Caps.PresentationIntervals & pi) != (PresentInterval)0) { + deviceCombo.PresentIntervalList.Add(pi); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/d3dfont.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/d3dfont.cs new file mode 100644 index 0000000..ad52b21 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/d3dfont.cs @@ -0,0 +1,648 @@ +//----------------------------------------------------------------------------- +// File: D3DFont.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// A generic font class +/// +public class GraphicsFont { + public const int MaxNumfontVertices = 50*6; + + // Font rendering flags + [System.Flags] + public enum RenderFlags { + Centered = 0x0001, + TwoSided = 0x0002, + Filtered = 0x0004, + } + private System.Drawing.Font systemFont; + + private bool isZEnable = false; + public bool ZBufferEnable { get { return isZEnable; } set { isZEnable = value; } } + string ourFontName; // Font properties + int ourFontHeight; + + private Direct3D.Device device; + private TextureStateManager textureState0; + private TextureStateManager textureState1; + private SamplerStateManager samplerState0; + private RenderStateManager renderState; + private Direct3D.Texture fontTexture; + private Direct3D.VertexBuffer vertexBuffer; + private CustomVertex.TransformedColoredTextured[] fontVertices = new CustomVertex.TransformedColoredTextured[MaxNumfontVertices]; + + private int textureWidth; // Texture dimensions + private int textureHeight; + private float textureScale; + private int spacingPerChar; + private float[,] textureCoords = new float[128-32,4]; + + // Stateblocks for setting and restoring render states + private StateBlock savedStateBlock; + private StateBlock drawTextStateBlock; + + + + + /// + /// Create a new font object + /// + /// The font to use + public GraphicsFont(System.Drawing.Font f) { + ourFontName = f.Name; + ourFontHeight = (int)f.Size; + systemFont = f; + } + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName) : this(fontName, FontStyle.Regular, 12) { + } + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName, FontStyle style) : this(fontName, style, 12) { + } + + /// + /// Create a new font object + /// + /// The name of the font + /// The style + /// Size of the font + public GraphicsFont(string fontName, FontStyle style, int size) { + ourFontName = fontName; + ourFontHeight = size; + systemFont = new System.Drawing.Font(fontName, ourFontHeight, style); + } + + + + + /// + /// Attempt to draw the systemFont alphabet onto the provided texture + /// graphics. + /// + /// Graphics object on which to draw and measure the letters + /// If set, the method will test to see if the alphabet will fit without actually drawing + public void PaintAlphabet(Graphics g, bool measureOnly) { + string str; + float x = 0; + float y = 0; + Point p = new Point(0, 0); + Size size = new Size(0,0); + + // Calculate the spacing between characters based on line height + size = g.MeasureString(" ", systemFont).ToSize(); + x = spacingPerChar = (int) Math.Ceiling(size.Height * 0.3); + + for (char c = (char)32; c < (char)127; c++) { + str = c.ToString(); + // We need to do some things here to get the right sizes. The default implemententation of MeasureString + // will return a resolution independant size. For our height, this is what we want. However, for our width, we + // want a resolution dependant size. + Size resSize = g.MeasureString(str, systemFont).ToSize(); + size.Height = resSize.Height + 1; + + // Now the Resolution independent width + if (c != ' ') { // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + resSize = g.MeasureString(str, systemFont, p, StringFormat.GenericTypographic).ToSize(); + size.Width = resSize.Width; + } + else + size.Width = resSize.Width; + + if ((x + size.Width + spacingPerChar) > textureWidth) { + x = spacingPerChar; + y += size.Height; + } + + // Make sure we have room for the current character + if ((y + size.Height) > textureHeight) + throw new System.InvalidOperationException("Texture too small for alphabet"); + + if (!measureOnly) { + if (c != ' ') // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y), StringFormat.GenericTypographic); + else + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y)); + textureCoords[c-32,0] = ((float) (x + 0 - spacingPerChar)) / textureWidth; + textureCoords[c-32,1] = ((float) (y + 0 + 0)) / textureHeight; + textureCoords[c-32,2] = ((float) (x + size.Width + spacingPerChar)) / textureWidth; + textureCoords[c-32,3] = ((float) (y + size.Height + 0)) / textureHeight; + } + + x += size.Width + (2 * spacingPerChar); + } + + } + + /// + /// Initialize the device objects + /// + /// The grpahics device used to initialize + public void InitializeDeviceObjects(Device dev) { + if (dev != null) { + // Set up our events + dev.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Keep a local copy of the device + device = dev; + textureState0 = device.TextureState[0]; + textureState1 = device.TextureState[1]; + samplerState0 = device.SamplerState[0]; + renderState = device.RenderState; + + // Create a bitmap on which to measure the alphabet + Bitmap bmp = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Graphics g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Establish the font and texture size + textureScale = 1.0f; // Draw fonts into texture without scaling + + // Calculate the dimensions for the smallest power-of-two texture which + // can hold all the printable characters + textureWidth = textureHeight = 128; + for (;;) { + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // Scale up the texture size and try again + textureWidth *= 2; + textureHeight *= 2; + continue; + } + + break; + } + + // If requested texture is too big, use a smaller texture and smaller font, + // and scale up when rendering. + Direct3D.Caps d3dCaps = device.DeviceCaps; + + // If the needed texture is too large for the video card... + if (textureWidth > d3dCaps.MaxTextureWidth) { + // Scale the font size down to fit on the largest possible texture + textureScale = (float)d3dCaps.MaxTextureWidth / (float)textureWidth; + textureWidth = textureHeight = d3dCaps.MaxTextureWidth; + + for(;;) { + // Create a new, smaller font + ourFontHeight = (int) Math.Floor(ourFontHeight * textureScale); + systemFont = new System.Drawing.Font(systemFont.Name, ourFontHeight, systemFont.Style); + + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // If that still doesn't fit, scale down again and continue + textureScale *= 0.9F; + continue; + } + + break; + } + } + + // Release the bitmap used for measuring and create one for drawing + bmp.Dispose(); + bmp = new Bitmap(textureWidth, textureHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Draw the alphabet + PaintAlphabet(g, false); + + // Create a new texture for the font from the bitmap we just created + fontTexture = Texture.FromBitmap(device, bmp, 0, Pool.Managed); + RestoreDeviceObjects(null, null); + } + + /// + /// Restore the font after a device has been reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColoredTextured), MaxNumfontVertices, + device, Usage.WriteOnly | Usage.Dynamic, 0, Pool.Default); + + Surface surf = device.GetRenderTarget( 0 ); + bool bSupportsAlphaBlend = Manager.CheckDeviceFormat(device.DeviceCaps.AdapterOrdinal, + device.DeviceCaps.DeviceType, device.DisplayMode.Format, + Usage.RenderTarget | Usage.QueryPostPixelShaderBlending, ResourceType.Surface, + surf.Description.Format ); + + // Create the state blocks for rendering text + for (int which=0; which < 2; which++) { + device.BeginStateBlock(); + device.SetTexture(0, fontTexture); + + if (isZEnable) + renderState.ZBufferEnable = true; + else + renderState.ZBufferEnable = false; + + if( bSupportsAlphaBlend ) { + renderState.AlphaBlendEnable = true; + renderState.SourceBlend = Blend.SourceAlpha; + renderState.DestinationBlend = Blend.InvSourceAlpha; + } + else { + renderState.AlphaBlendEnable = false; + } + renderState.AlphaTestEnable = true; + renderState.ReferenceAlpha = 0x08; + renderState.AlphaFunction = Compare.GreaterEqual; + renderState.FillMode = FillMode.Solid; + renderState.CullMode = Cull.CounterClockwise; + renderState.StencilEnable = false; + renderState.Clipping = true; + device.ClipPlanes.DisableAll(); + renderState.VertexBlend = VertexBlend.Disable; + renderState.IndexedVertexBlendEnable = false; + renderState.FogEnable = false; + renderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; + textureState0.ColorOperation = TextureOperation.Modulate; + textureState0.ColorArgument1 = TextureArgument.TextureColor; + textureState0.ColorArgument2 = TextureArgument.Diffuse; + textureState0.AlphaOperation = TextureOperation.Modulate; + textureState0.AlphaArgument1 = TextureArgument.TextureColor; + textureState0.AlphaArgument2 = TextureArgument.Diffuse; + textureState0.TextureCoordinateIndex = 0; + textureState0.TextureTransform = TextureTransform.Disable; // REVIEW + textureState1.ColorOperation = TextureOperation.Disable; + textureState1.AlphaOperation = TextureOperation.Disable; + samplerState0.MinFilter = TextureFilter.Point; + samplerState0.MagFilter = TextureFilter.Point; + samplerState0.MipFilter = TextureFilter.None; + + if (which==0) + savedStateBlock = device.EndStateBlock(); + else + drawTextStateBlock = device.EndStateBlock(); + } + } + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text) { + DrawText(xpos, ypos, color, text, RenderFlags.Filtered); + } + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text, RenderFlags flags) { + if (text == null) + return; + + // Setup renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.SetTexture(0, fontTexture); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Adjust for character spacing + xpos -= spacingPerChar; + float fStartX = xpos; + + // Fill vertex buffer + int iv = 0; + int dwNumTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / textureScale; + float h = (ty2-ty1) * textureHeight / textureScale; + + int intColor = color.ToArgb(); + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + dwNumTriangles += 2; + + if (dwNumTriangles*3 > (MaxNumfontVertices-6)) { + // Set the data for the vertexbuffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + dwNumTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar); + } + + // Set the data for the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (dwNumTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + Viewport vp = device.Viewport; + float xpos = (x+1.0f)*vp.Width/2; + float ypos = (y+1.0f)*vp.Height/2; + float sz = z; + float rhw = 1.0f; + float fLineHeight = (textureCoords[0,3] - textureCoords[0,1]) * textureHeight; + + // Adjust for character spacing + xpos -= spacingPerChar * (fXScale*vp.Height)/fLineHeight; + float fStartX = xpos; + + // Fill vertex buffer + int numTriangles = 0; + int realColor = color.ToArgb(); + int iv = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += fYScale*vp.Height; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1)*textureWidth; + float h = (ty2-ty1)*textureHeight; + + w *= (fXScale*vp.Height)/fLineHeight; + h *= (fYScale*vp.Height)/fLineHeight; + + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + numTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar) * (fXScale*vp.Height)/fLineHeight; + } + + // Unlock and render the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text) { + this.DrawTextScaled(x,y,z,fXScale, fYScale, color, text, 0); + } + + + + + /// + /// Renders 3D text + /// + public void Render3DText(string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.PositionNormalTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0, VertexInformation.GetFormatSize(CustomVertex.PositionNormalTextured.Format)); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Position for each text element + float x = 0.0f; + float y = 0.0f; + + // Center the text block at the origin + if ((flags & RenderFlags.Centered) != 0) { + System.Drawing.SizeF sz = GetTextExtent(text); + x = -(((float)sz.Width)/10.0f)/2.0f; + y = -(((float)sz.Height)/10.0f)/2.0f; + } + + // Turn off culling for two-sided text + if ((flags & RenderFlags.TwoSided) != 0) + renderState.CullMode = Cull.None; + + // Adjust for character spacing + x -= spacingPerChar / 10.0f; + float fStartX = x; + + // Fill vertex buffer + GraphicsStream strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + int numTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + x = fStartX; + y -= (textureCoords[0,3]-textureCoords[0,1])*textureHeight/10.0f; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / (10.0f * textureScale); + float h = (ty2-ty1) * textureHeight / (10.0f * textureScale); + + if (c != ' ') { + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+0,0), new Vector3(0,0,-1), tx1, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+h,0), new Vector3(0,0,-1), tx2, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.Unlock(); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + numTriangles = 0; + } + } + + x += w - (2 * spacingPerChar) / 10.0f; + } + + // Unlock and render the vertex buffer + vertexBuffer.Unlock(); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Get the dimensions of a text string + /// + private System.Drawing.SizeF GetTextExtent(string text) { + if (null == text || text == string.Empty) + throw new System.ArgumentNullException(); + + float fRowWidth = 0.0f; + float fRowHeight = (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + float fWidth = 0.0f; + float fHeight = fRowHeight; + + foreach (char c in text) { + if (c == '\n') { + fRowWidth = 0.0f; + fHeight += fRowHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float tx2 = textureCoords[c-32,2]; + + fRowWidth += (tx2-tx1)*textureWidth - 2*spacingPerChar; + + if (fRowWidth > fWidth) + fWidth = fRowWidth; + } + + return new System.Drawing.SizeF(fWidth, fHeight); + } + + + + + /// + /// Cleanup any resources being used + /// + public void Dispose(object sender, EventArgs e) { + if (systemFont != null) + systemFont.Dispose(); + + systemFont = null; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/d3dutil.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/d3dutil.cs new file mode 100644 index 0000000..ea2d5a3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/d3dutil.cs @@ -0,0 +1,928 @@ +//----------------------------------------------------------------------------- +// File: D3DUtil.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Windows.Forms; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// Various helper functions for graphics samples +/// +public class GraphicsUtility { + /// + /// Private Constructor + /// + private GraphicsUtility() { + } + + + + /// + /// Initializes a Material structure, setting the diffuse and ambient + /// colors. It does not set emissive or specular colors. + /// + /// The ambient and diffuse color + /// A defined material + public static Direct3D.Material InitMaterial(System.Drawing.Color c) { + Material mtrl = new Material(); + mtrl.Ambient = mtrl.Diffuse = c; + return mtrl; + } + + + + + /// + /// Initializes a light, setting the light position. The + /// diffuse color is set to white; specular and ambient are left as black. + /// + /// Which light to initialize + /// The type + public static void InitLight(Light light, LightType ltType, float x, float y, float z) { + light.Type = ltType; + light.Diffuse = System.Drawing.Color.White; + light.Position = new Vector3(x,y,z); + light.Direction = Vector3.Normalize(light.Position); + light.Range = 1000.0f; + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename, Format format) { + // Get the path to the texture + string path = DXUtil.FindMediaFile(null, textureFilename); + + // Create the texture using D3DX + return TextureLoader.FromFile(device, path, D3DX.Default, D3DX.Default, D3DX.Default, 0, format, + Pool.Managed, Filter.Triangle|Filter.Mirror, + Filter.Triangle|Filter.Mirror, 0); + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename) { + return GraphicsUtility.CreateTexture(device, textureFilename, Format.Unknown); + } + + + + + + /// + /// Returns a view matrix for rendering to a face of a cubemap. + /// + public static Matrix GetCubeMapViewMatrix(CubeMapFace face) { + Vector3 vEyePt = new Vector3(0.0f, 0.0f, 0.0f); + Vector3 vLookDir = new Vector3(); + Vector3 vUpDir = new Vector3(); + + switch (face) { + case CubeMapFace.PositiveX: + vLookDir = new Vector3(1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeX: + vLookDir = new Vector3(-1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.PositiveY: + vLookDir = new Vector3(0.0f, 1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f,-1.0f); + break; + case CubeMapFace.NegativeY: + vLookDir = new Vector3(0.0f,-1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f, 1.0f); + break; + case CubeMapFace.PositiveZ: + vLookDir = new Vector3(0.0f, 0.0f, 1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeZ: + vLookDir = new Vector3(0.0f, 0.0f,-1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + } + + // Set the view transform for this cubemap surface + Matrix matView = Matrix.LookAtLH(vEyePt, vLookDir, vUpDir); + return matView; + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control, float fTrackBallRadius) { + System.Drawing.Point pt = System.Windows.Forms.Cursor.Position; + System.Drawing.Rectangle rc = control.ClientRectangle; + pt = control.PointToClient(pt); + float xpos = (((2.0f * pt.X) / (rc.Right-rc.Left)) - 1); + float ypos = (((2.0f * pt.Y) / (rc.Bottom-rc.Top)) - 1); + float sz; + + if (xpos == 0.0f && ypos == 0.0f) + return new Quaternion(0.0f, 0.0f, 0.0f, 1.0f); + + float d2 = (float)Math.Sqrt(xpos*xpos + ypos*ypos); + + if (d2 < fTrackBallRadius * 0.70710678118654752440) // Inside sphere + sz = (float)Math.Sqrt(fTrackBallRadius*fTrackBallRadius - d2*d2); + else // On hyperbola + sz = (fTrackBallRadius*fTrackBallRadius) / (2.0f*d2); + + // Get two points on trackball's sphere + Vector3 p1 = new Vector3(xpos, ypos, sz); + Vector3 p2 = new Vector3(0.0f, 0.0f, fTrackBallRadius); + + // Get axis of rotation, which is cross product of p1 and p2 + Vector3 axis = Vector3.Cross(p1,p2); + + // Calculate angle for the rotation about that axis + float t = Vector3.Length(Vector3.Subtract(p2,p1)) / (2.0f*fTrackBallRadius); + if (t > +1.0f) t = +1.0f; + if (t < -1.0f) t = -1.0f; + float fAngle = (float)(2.0f * Math.Asin(t)); + + // Convert axis to quaternion + return Quaternion.RotationAxis(axis, fAngle); + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control) { + return GetRotationFromCursor(control, 1.0f); + } + + + + + /// + /// Axis to axis quaternion double angle (no normalization) + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by 2*THETA. + /// + public static Quaternion D3DXQuaternionUnitAxisToUnitAxis2(Vector3 fromVector, Vector3 toVector) { + Vector3 axis = Vector3.Cross(fromVector, toVector); // proportional to sin(theta) + return new Quaternion(axis.X, axis.Y, axis.Z, Vector3.Dot(fromVector, toVector)); + } + + + + + /// + /// Axis to axis quaternion + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by theta. + /// + public static Quaternion D3DXQuaternionAxisToAxis(Vector3 fromVector, Vector3 toVector) { + Vector3 vA = Vector3.Normalize(fromVector), vB = Vector3.Normalize(toVector); + Vector3 vHalf = Vector3.Add(vA,vB); + vHalf = Vector3.Normalize(vHalf); + return GraphicsUtility.D3DXQuaternionUnitAxisToUnitAxis2(vA, vHalf); + } + + + + + /// + /// Gets the number of ColorChanelBits from a format + /// + static public int GetColorChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 8; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 8; + case Format.R5G6B5: + return 5; + case Format.X1R5G5B5: + return 5; + case Format.A1R5G5B5: + return 5; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 2; + case Format.A8R3G3B2: + return 2; + case Format.X4R4G4B4: + return 4; + case Format.A2B10G10R10: + return 10; + case Format.A2R10G10B10: + return 10; + default: + return 0; + } + } + + + + + /// + /// Gets the number of alpha channel bits + /// + static public int GetAlphaChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 0; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 0; + case Format.R5G6B5: + return 0; + case Format.X1R5G5B5: + return 0; + case Format.A1R5G5B5: + return 1; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 0; + case Format.A8R3G3B2: + return 8; + case Format.X4R4G4B4: + return 0; + case Format.A2B10G10R10: + return 2; + case Format.A2R10G10B10: + return 2; + default: + return 0; + } + } + + + + + /// + /// Gets the number of depth bits + /// + static public int GetDepthBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 16; + case DepthFormat.D15S1: + return 15; + case DepthFormat.D24X8: + return 24; + case DepthFormat.D24S8: + return 24; + case DepthFormat.D24X4S4: + return 24; + case DepthFormat.D32: + return 32; + default: + return 0; + } + } + + + + + /// + /// Gets the number of stencil bits + /// + static public int GetStencilBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 0; + case DepthFormat.D15S1: + return 1; + case DepthFormat.D24X8: + return 0; + case DepthFormat.D24S8: + return 8; + case DepthFormat.D24X4S4: + return 4; + case DepthFormat.D32: + return 0; + default: + return 0; + } + } + + + + + /// + /// Assembles and creates a file-based vertex shader + /// + public static VertexShader CreateVertexShader(Device device, string filename) { + GraphicsStream code = null; + string path = null; + + // Get the path to the vertex shader file + path = DXUtil.FindMediaFile(null, filename); + + // Assemble the vertex shader file + code = ShaderLoader.FromFile(path, null, 0); + + // Create the vertex shader + return new VertexShader(device, code); + } + +} + + + + +/// +/// An arc ball class +/// +public class GraphicsArcBall { + private int internalWidth; // ArcBall's window width + private int internalHeight; // ArcBall's window height + private float internalradius; // ArcBall's radius in screen coords + private float internalradiusTranslation; // ArcBall's radius for translating the target + + private Quaternion internaldownQuat; // Quaternion before button down + private Quaternion internalnowQuat; // Composite quaternion for current drag + private Matrix internalrotationMatrix; // Matrix for arcball's orientation + private Matrix internalrotationDelta; // Matrix for arcball's orientation + private Matrix internaltranslationMatrix; // Matrix for arcball's position + private Matrix internaltranslationDelta; // Matrix for arcball's position + private bool internaldragging; // Whether user is dragging arcball + private bool internaluseRightHanded; // Whether to use RH coordinate system + private int saveMouseX = 0; // Saved mouse position + private int saveMouseY = 0; + private Vector3 internalvectorDown; // Button down vector + System.Windows.Forms.Control parent; // parent + + + + + /// + /// Constructor + /// + public GraphicsArcBall(System.Windows.Forms.Control p) { + internaldownQuat = Quaternion.Identity; + internalnowQuat = Quaternion.Identity; + internalrotationMatrix = Matrix.Identity; + internalrotationDelta = Matrix.Identity; + internaltranslationMatrix = Matrix.Identity; + internaltranslationDelta = Matrix.Identity; + internaldragging = false; + internalradiusTranslation = 1.0f; + internaluseRightHanded = false; + + parent = p; + // Hook the events + p.MouseDown += new MouseEventHandler(this.OnContainerMouseDown); + p.MouseUp += new MouseEventHandler(this.OnContainerMouseUp); + p.MouseMove += new MouseEventHandler(this.OnContainerMouseMove); + } + + + + + /// + /// Set the window dimensions + /// + public void SetWindow(int width, int height, float radius) { + // Set ArcBall info + internalWidth = width; + internalHeight = height; + internalradius = radius; + } + + + + + /// + /// Screen coords to a vector + /// + private Vector3 ScreenToVector(int xpos, int ypos) { + // Scale to screen + float x = -(xpos - internalWidth/2) / (internalradius*internalWidth/2); + float y = (ypos - internalHeight/2) / (internalradius*internalHeight/2); + + if (internaluseRightHanded) { + x = -x; + y = -y; + } + + float z = 0.0f; + float mag = x*x + y*y; + + if (mag > 1.0f) { + float scale = 1.0f/(float)Math.Sqrt(mag); + x *= scale; + y *= scale; + } + else + z = (float)Math.Sqrt(1.0f - mag); + + // Return vector + return new Vector3(x, y, z); + } + + + + + /// + /// Fired when the containers mouse button is down + /// + private void OnContainerMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { + // Store off the position of the cursor when the button is pressed + saveMouseX = e.X; + saveMouseY = e.Y; + + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // Start drag mode + internaldragging = true; + internalvectorDown = ScreenToVector(e.X, e.Y); + internaldownQuat = internalnowQuat; + } + } + + + + + /// + /// Fired when the containers mouse button has been released + /// + private void OnContainerMouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // End drag mode + internaldragging = false; + } + } + + + + + /// + /// Fired when the containers mouse is moving + /// + private void OnContainerMouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + if (internaldragging) { + // recompute nowQuat + Vector3 vCur = ScreenToVector(e.X, e.Y); + Quaternion qAxisToAxis = GraphicsUtility.D3DXQuaternionAxisToAxis(internalvectorDown, vCur); + internalnowQuat = internaldownQuat; + internalnowQuat = Quaternion.Multiply(internalnowQuat,qAxisToAxis); + internalrotationDelta = Matrix.RotationQuaternion(qAxisToAxis); + } + else + internalrotationDelta = Matrix.Identity; + + internalrotationMatrix = Matrix.RotationQuaternion(internalnowQuat); + internaldragging = true; + } + + if ((e.Button == System.Windows.Forms.MouseButtons.Right) || (e.Button == System.Windows.Forms.MouseButtons.Middle)) { + // Normalize based on size of window and bounding sphere radius + float fDeltaX = (saveMouseX-e.X) * internalradiusTranslation / internalWidth; + float fDeltaY = (saveMouseY-e.Y) * internalradiusTranslation / internalHeight; + + if (e.Button == System.Windows.Forms.MouseButtons.Right) { + internaltranslationDelta = Matrix.Translation(-2 * fDeltaX, 2 * fDeltaY, 0.0f); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + if (e.Button == System.Windows.Forms.MouseButtons.Middle) { + internaltranslationDelta = Matrix.Translation(0.0f, 0.0f, 5 * fDeltaY); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + + // Store mouse coordinate + saveMouseX = e.X; + saveMouseY = e.Y; + } + } + + #region Various properties of the class + public float Radius { + set { + internalradiusTranslation = value; } + } + public bool RightHanded { + get { return internaluseRightHanded; } + set { internaluseRightHanded = value; } + } + public Matrix RotationMatrix { + get { return internalrotationMatrix; } + } + public Matrix RotationDeltaMatrix { + get { return internalrotationDelta; } + } + public Matrix TranslationMatrix { + get { return internaltranslationMatrix; } + } + public Matrix TranslationDeltaMatrix { + get { return internaltranslationDelta; } + } + public bool IsBeingDragged { + get { return internaldragging; } + } + #endregion +} + + + + +/// +/// Handles our meshes +/// +public class GraphicsMesh : IDisposable { + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + + + + + /// + /// Constructor + /// + /// The initial filename + public GraphicsMesh(string filename) { + fileName = filename; + } + public GraphicsMesh() : this ("CD3DFile_Mesh") {} + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + string strPath = null; + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Find the path for the file, and convert it to ANSI (for the D3DX API) + strPath = DXUtil.FindMediaFile(null, filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(strPath, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + } + + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. Note: because we are passing in + // no flags, the default behavior is to clone into local memory. + localMemoryMesh = systemMemoryMesh.Clone(0, systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(Device device, bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render(Device device) { + Render(device, true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/dinput.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/dinput.cs new file mode 100644 index 0000000..6cbc599 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/dinput.cs @@ -0,0 +1,98 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + +/// +/// This class is where the DirectInput routines +/// for the application resides. +/// +public class InputClass { + + private const byte msgUp = 0; + private const byte msgDown = 1; + private const byte msgLeft = 2; + private const byte msgRight = 3; + private const byte msgCancelUp = 4; + private const byte msgCancelDown = 5; + private const byte msgCancelLeft = 6; + private const byte msgCancelRight = 7; + private bool pressedUp = false; + private bool pressedDown = false; + private bool pressedLeft = false; + private bool pressedRight = false; + + private Control owner = null; + private Device localDevice = null; + private PlayClass play = null; + + public InputClass(Control owner, PlayClass play) { + this.owner = owner; + this.play = play; + + localDevice = new Device(SystemGuid.Keyboard); + localDevice.SetDataFormat(DeviceDataFormat.Keyboard); + localDevice.SetCooperativeLevel(owner, CooperativeLevelFlags.Foreground | CooperativeLevelFlags.NonExclusive); + } + + public Point GetInputState() { + KeyboardState state = null; + Point p = new Point(0); + + try { + state = localDevice.GetCurrentKeyboardState(); + } + catch(InputException) { + do { + Application.DoEvents(); + try{ localDevice.Acquire(); } + catch (InputLostException) { + continue; } + catch(OtherApplicationHasPriorityException) { + continue; } + + break; + + }while( true ); + } + + if(null == state) + return p; + + if(state[Key.Down]) { + pressedDown = true; + play.WriteMessage(msgDown); + } + else if (pressedDown == true) { + pressedDown = false; + play.WriteMessage(msgCancelDown); + } + if(state[Key.Up]) { + pressedUp = true; + play.WriteMessage(msgUp); + } + else if (pressedUp == true) { + pressedUp = false; + play.WriteMessage(msgCancelUp); + } + if(state[Key.Left]) { + pressedLeft = true; + play.WriteMessage(msgLeft); + } + else if (pressedLeft == true) { + pressedLeft = false; + play.WriteMessage(msgCancelLeft); + } + if(state[Key.Right]) { + pressedRight = true; + play.WriteMessage(msgRight); + } + else if (pressedRight == true) { + pressedRight = false; + play.WriteMessage(msgCancelRight); + } + + return p; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/dplay.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/dplay.cs new file mode 100644 index 0000000..be86825 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/dplay.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + +/// +/// The class that houses DirectPlay code for the application. +/// +public class PlayClass : IDisposable { + private MessageDelegate message = null; + + private GameClass parent = null; + + public Peer peerObject = null; + private ConnectWizard Connect = null; + private ArrayList PlayerList = new ArrayList(); + private int LocalPlayerID = 0; + public Guid AppGuid = new Guid(0x876a3036, 0xffd7, 0x46bc, 0x92, 0x9, 0xb4, 0x2f, 0x61, 0x7b, 0x9b, 0xF1); + + public struct Players { + public int dpnID; + public string Name; + public Players(int id, string n) { + dpnID = id; Name = n; } + } + + public void Dispose() { + peerObject.Dispose(); + } + + public PlayClass(GameClass parent) { + this.parent = parent; + this.peerObject = peerObject; + this.message = new MessageDelegate(parent.MessageArrived); + + peerObject = new Peer(); + // First set up our event handlers (We only need events for the ones we care about) + peerObject.PlayerCreated += new PlayerCreatedEventHandler(this.PlayerCreated); + peerObject.PlayerDestroyed += new PlayerDestroyedEventHandler(this.PlayerDestroyed); + peerObject.HostMigrated += new HostMigratedEventHandler(this.HostMigrated); + peerObject.Receive += new ReceiveEventHandler(this.DataReceived); + peerObject.SessionTerminated += new SessionTerminatedEventHandler(this.SessionTerminated); + + Connect = new ConnectWizard(peerObject, AppGuid, "Step2"); + if (!Connect.StartWizard()) { + MessageBox.Show("DirectPlay initialization was incomplete. Application will terminate."); + throw new DirectXException(); + } + } + + public void WriteMessage(byte msg) { + NetworkPacket packet = new NetworkPacket(); + + packet.Write(msg); + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.Guaranteed); + } + + #region DirectPlayEvents + /// + // These are the events the app will handle + // when DPlay fires them. + /// + private void PlayerCreated(object sender, PlayerCreatedEventArgs dpMessage) { + // Get the PlayerInformation and store it + PlayerInformation dpPeer = peerObject.GetPeerInformation(dpMessage.Message.PlayerID); + Players oPlayer = new Players(dpMessage.Message.PlayerID,dpPeer.Name); + // We lock the data here since it is shared across multiple threads. + lock (PlayerList) { + PlayerList.Add(oPlayer); + } + // Save this player id if it's ourselves + if (dpPeer.Local) + LocalPlayerID = dpMessage.Message.PlayerID; + + } + private void PlayerDestroyed(object sender, PlayerDestroyedEventArgs dpMessage) { + // Remove this player from our list + // We lock the data here since it is shared across multiple threads. + lock (PlayerList) { + foreach (Players player in PlayerList) { + if (dpMessage.Message.PlayerID == player.dpnID) { + PlayerList.Remove(player); + break; + } + } + } + } + private void HostMigrated(object sender, HostMigratedEventArgs dpMessage) { + if (LocalPlayerID == dpMessage.Message.NewHostID) { + // This application instance is the new host, update the UI + parent.Text += " (HOST)"; + } + } + private void DataReceived(object sender, ReceiveEventArgs dpMessage) { + lock(this) { + byte data = (byte)dpMessage.Message.ReceiveData.Read(typeof(byte)); + message(data); + } + } + private void SessionTerminated(object sender, SessionTerminatedEventArgs dpMessage) { + // This session is being terminated, let the user know + if (dpMessage.Message.ResultCode == ResultCode.HostTerminatedSession) + MessageBox.Show("The Host has terminated this session. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + else + MessageBox.Show("The session has been lost. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + + // This will post a message on the main thread to shut down our form + parent.BeginInvoke(new PeerCloseCallback(parent.PeerClose)); + } + #endregion +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step04/main.cs b/Source Code updated 08-12-05/Spacewar3D/Step04/main.cs new file mode 100644 index 0000000..1ed0210 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step04/main.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Container = System.ComponentModel.Container; + + + /// + /// The main windows form for the application. + /// +public class MainClass { + + private GameClass game = null; + private SplashScreen splash = null; + private bool enableNetwork = false; + public bool EnableNetwork { get { return enableNetwork; } set { enableNetwork = value; } } + + private Size gameFormSize; + public Size GameFormSize { get { return gameFormSize; } set { gameFormSize = value; } } + + private bool fullScreen = false; + public bool FullScreen { get { return fullScreen; } set { fullScreen = value; } } + + /// + // Main entry point of the application. + /// + public static void Main() { + MainClass m = new MainClass(); + } + + public MainClass() { + + //display the splash screen and determine network status + splash = new SplashScreen(this); + splash.ShowDialog(); + + try { + game = new GameClass(fullScreen, gameFormSize, enableNetwork); + } + catch(DirectXException) { + return; + } + if( game.CreateGraphicsSample() ) + game.Run(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/App.config b/Source Code updated 08-12-05/Spacewar3D/Step05/App.config new file mode 100644 index 0000000..5bbb96b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/Camera.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/Camera.cs new file mode 100644 index 0000000..71fd37e --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/Camera.cs @@ -0,0 +1,131 @@ +using System; +using Microsoft.DirectX; + + + /// + /// Summary description for Camera. + /// +public class Camera { + + protected float velocity; + + + protected float xPos, yPos, zPos; + protected float xRot, yRot, zRot; + + protected float startXPos, startYPos, startZPos; + protected float startXRot, startYRot, startZRot; + + protected float endXPos, endYPos, endZPos; + protected float endXRot, endYRot, endZRot; + + protected Matrix viewMatrix; + protected Matrix translationMatrix; + protected Matrix rotationMatrix; + + public float XPosition { + get { return xPos; } + } + public float YPosition { + get { return yPos; } + } + public float ZPosition { + get { return zPos; } + } + + public float XRotation { + get { return xRot; } + } + public float YRotation { + get { return yRot; } + } + public float ZRotation { + get { return zRot; } + } + + + public Vector3 Loc { + get { + return new Vector3(xPos,yPos,zPos); + } + set { + Vector3 loc = value; + xPos = loc.X; + yPos = loc.Y; + zPos = loc.Z; + } + + } + + public Matrix ViewMatrix { + get { + Update(); + return viewMatrix; + } + set { + viewMatrix = value; + } + + } + + + public Camera() { + Move(0.0f,0.0f,0.0f); + Rotate(0.0f,0.0f,0.0f); + Update(); + } + + + public void Update() { // Update transformation matrix + viewMatrix = translationMatrix * rotationMatrix; + } + + public void Move(float XPos, float YPos, float ZPos) { + xPos = XPos; + yPos = YPos; + zPos = ZPos; + translationMatrix = Matrix.Translation( -xPos, -yPos, -zPos ); + } + + public void MoveRel(float XAdd, float YAdd, float ZAdd) { + Move (xPos + XAdd, yPos + YAdd, zPos + ZAdd); + + } + + public void Rotate(float XRot, float YRot, float ZRot) { + Matrix xRotation, yRotation, zRotation; + + xRot = XRot; + yRot = YRot; + zRot = ZRot; + + xRotation = Matrix.RotationX( - xRot ); + yRotation = Matrix.RotationY( - yRot ); + zRotation = Matrix.RotationZ( - zRot ); + + rotationMatrix = zRotation; + rotationMatrix *= yRotation; + rotationMatrix *= xRotation; + + } + + public void RotateRel(float XAdd, float YAdd, float ZAdd) { + Rotate (xRot + XAdd, yRot + YAdd, zRot + ZAdd); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/D3DSettingsForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/D3DSettingsForm.cs new file mode 100644 index 0000000..889162a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/D3DSettingsForm.cs @@ -0,0 +1,1037 @@ +//----------------------------------------------------------------------------- +// File: D3DSettingsForm.cs +// +// Desc: Application form for setting up user defined display settings +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + + + + + +/// +/// A form to allow the user to change the current D3D settings. +/// +public class D3DSettingsForm : System.Windows.Forms.Form { + private D3DEnumeration enumeration; + public D3DSettings settings; // Potential new D3D settings + + private System.Windows.Forms.GroupBox adapterDeviceGroupBox; + private System.Windows.Forms.Label displayAdapterLabel; + private System.Windows.Forms.ComboBox adapterComboBox; + private System.Windows.Forms.Label deviceLabel; + private System.Windows.Forms.ComboBox deviceComboBox; + private System.Windows.Forms.GroupBox modeSettingsGroupBox; + private System.Windows.Forms.RadioButton windowedRadioButton; + private System.Windows.Forms.RadioButton fullscreenRadioButton; + private System.Windows.Forms.Label adapterFormatLabel; + private System.Windows.Forms.ComboBox adapterFormatComboBox; + private System.Windows.Forms.Label resolutionLabel; + private System.Windows.Forms.ComboBox resolutionComboBox; + private System.Windows.Forms.Label refreshRateLabel; + private System.Windows.Forms.ComboBox refreshRateComboBox; + private System.Windows.Forms.GroupBox otherSettingsGroupBox; + private System.Windows.Forms.Label backBufferFormatLabel; + private System.Windows.Forms.ComboBox backBufferFormatComboBox; + private System.Windows.Forms.Label depthStencilBufferLabel; + private System.Windows.Forms.ComboBox depthStencilBufferComboBox; + private System.Windows.Forms.Label multisampleLabel; + private System.Windows.Forms.ComboBox multisampleComboBox; + private System.Windows.Forms.Label vertexProcLabel; + private System.Windows.Forms.ComboBox vertexProcComboBox; + private System.Windows.Forms.Label presentIntervalLabel; + private System.Windows.Forms.ComboBox presentIntervalComboBox; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.ComboBox multisampleQualityComboBox; + private System.Windows.Forms.Label multisampleQualityLabel; + + + + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + + /// + /// Constructor. Pass in an enumeration and the current D3D settings. + /// + public D3DSettingsForm(D3DEnumeration enumerationParam, D3DSettings settingsParam) { + enumeration = enumerationParam; + settings = settingsParam.Clone(); + + // Required for Windows Form Designer support + InitializeComponent(); + + // Fill adapter combo box. Updating the selected adapter will trigger + // updates of the rest of the dialog. + foreach (GraphicsAdapterInfo adapterInfo in enumeration.AdapterInfoList) { + adapterComboBox.Items.Add(adapterInfo); + if (adapterInfo.AdapterOrdinal == settings.AdapterOrdinal) + adapterComboBox.SelectedItem = adapterInfo; + } + if (adapterComboBox.SelectedItem == null && adapterComboBox.Items.Count > 0) + adapterComboBox.SelectedIndex = 0; + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + if (components != null) + components.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.adapterDeviceGroupBox = new System.Windows.Forms.GroupBox(); + this.deviceComboBox = new System.Windows.Forms.ComboBox(); + this.deviceLabel = new System.Windows.Forms.Label(); + this.adapterComboBox = new System.Windows.Forms.ComboBox(); + this.displayAdapterLabel = new System.Windows.Forms.Label(); + this.fullscreenRadioButton = new System.Windows.Forms.RadioButton(); + this.cancelButton = new System.Windows.Forms.Button(); + this.otherSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.multisampleQualityComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleQualityLabel = new System.Windows.Forms.Label(); + this.multisampleComboBox = new System.Windows.Forms.ComboBox(); + this.backBufferFormatComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferLabel = new System.Windows.Forms.Label(); + this.backBufferFormatLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcLabel = new System.Windows.Forms.Label(); + this.presentIntervalComboBox = new System.Windows.Forms.ComboBox(); + this.presentIntervalLabel = new System.Windows.Forms.Label(); + this.resolutionComboBox = new System.Windows.Forms.ComboBox(); + this.windowedRadioButton = new System.Windows.Forms.RadioButton(); + this.resolutionLabel = new System.Windows.Forms.Label(); + this.refreshRateComboBox = new System.Windows.Forms.ComboBox(); + this.adapterFormatLabel = new System.Windows.Forms.Label(); + this.refreshRateLabel = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.modeSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.adapterFormatComboBox = new System.Windows.Forms.ComboBox(); + this.adapterDeviceGroupBox.SuspendLayout(); + this.otherSettingsGroupBox.SuspendLayout(); + this.modeSettingsGroupBox.SuspendLayout(); + this.SuspendLayout(); + // + // adapterDeviceGroupBox + // + this.adapterDeviceGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.deviceComboBox, + this.deviceLabel, + this.adapterComboBox, + this.displayAdapterLabel}); + this.adapterDeviceGroupBox.Location = new System.Drawing.Point(16, 8); + this.adapterDeviceGroupBox.Name = "adapterDeviceGroupBox"; + this.adapterDeviceGroupBox.Size = new System.Drawing.Size(400, 80); + this.adapterDeviceGroupBox.TabIndex = 0; + this.adapterDeviceGroupBox.TabStop = false; + this.adapterDeviceGroupBox.Text = "Adapter and device"; + // + // deviceComboBox + // + this.deviceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.deviceComboBox.DropDownWidth = 121; + this.deviceComboBox.Location = new System.Drawing.Point(160, 48); + this.deviceComboBox.Name = "deviceComboBox"; + this.deviceComboBox.Size = new System.Drawing.Size(232, 21); + this.deviceComboBox.TabIndex = 3; + this.deviceComboBox.SelectedIndexChanged += new System.EventHandler(this.DeviceChanged); + // + // deviceLabel + // + this.deviceLabel.Location = new System.Drawing.Point(8, 48); + this.deviceLabel.Name = "deviceLabel"; + this.deviceLabel.Size = new System.Drawing.Size(152, 23); + this.deviceLabel.TabIndex = 2; + this.deviceLabel.Text = "Render &Device:"; + // + // adapterComboBox + // + this.adapterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterComboBox.DropDownWidth = 121; + this.adapterComboBox.Location = new System.Drawing.Point(160, 24); + this.adapterComboBox.Name = "adapterComboBox"; + this.adapterComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterComboBox.TabIndex = 1; + this.adapterComboBox.SelectedIndexChanged += new System.EventHandler(this.AdapterChanged); + // + // displayAdapterLabel + // + this.displayAdapterLabel.Location = new System.Drawing.Point(8, 24); + this.displayAdapterLabel.Name = "displayAdapterLabel"; + this.displayAdapterLabel.Size = new System.Drawing.Size(152, 23); + this.displayAdapterLabel.TabIndex = 0; + this.displayAdapterLabel.Text = "Display &Adapter:"; + // + // fullscreenRadioButton + // + this.fullscreenRadioButton.Location = new System.Drawing.Point(9, 38); + this.fullscreenRadioButton.Name = "fullscreenRadioButton"; + this.fullscreenRadioButton.Size = new System.Drawing.Size(152, 24); + this.fullscreenRadioButton.TabIndex = 1; + this.fullscreenRadioButton.Text = "&Fullscreen"; + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(248, 464); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.TabIndex = 4; + this.cancelButton.Text = "Cancel"; + // + // otherSettingsGroupBox + // + this.otherSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.multisampleQualityComboBox, + this.multisampleQualityLabel, + this.multisampleComboBox, + this.backBufferFormatComboBox, + this.multisampleLabel, + this.depthStencilBufferLabel, + this.backBufferFormatLabel, + this.depthStencilBufferComboBox, + this.vertexProcComboBox, + this.vertexProcLabel, + this.presentIntervalComboBox, + this.presentIntervalLabel}); + this.otherSettingsGroupBox.Location = new System.Drawing.Point(16, 264); + this.otherSettingsGroupBox.Name = "otherSettingsGroupBox"; + this.otherSettingsGroupBox.Size = new System.Drawing.Size(400, 176); + this.otherSettingsGroupBox.TabIndex = 2; + this.otherSettingsGroupBox.TabStop = false; + this.otherSettingsGroupBox.Text = "Device settings"; + // + // multisampleQualityComboBox + // + this.multisampleQualityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleQualityComboBox.DropDownWidth = 144; + this.multisampleQualityComboBox.Location = new System.Drawing.Point(160, 96); + this.multisampleQualityComboBox.Name = "multisampleQualityComboBox"; + this.multisampleQualityComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleQualityComboBox.TabIndex = 7; + this.multisampleQualityComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleQualityChanged); + // + // multisampleQualityLabel + // + this.multisampleQualityLabel.Location = new System.Drawing.Point(8, 96); + this.multisampleQualityLabel.Name = "multisampleQualityLabel"; + this.multisampleQualityLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleQualityLabel.TabIndex = 6; + this.multisampleQualityLabel.Text = "Multisample &Quality:"; + // + // multisampleComboBox + // + this.multisampleComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleComboBox.DropDownWidth = 144; + this.multisampleComboBox.Location = new System.Drawing.Point(160, 72); + this.multisampleComboBox.Name = "multisampleComboBox"; + this.multisampleComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleComboBox.TabIndex = 5; + this.multisampleComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleTypeChanged); + // + // backBufferFormatComboBox + // + this.backBufferFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.backBufferFormatComboBox.DropDownWidth = 144; + this.backBufferFormatComboBox.Location = new System.Drawing.Point(160, 24); + this.backBufferFormatComboBox.Name = "backBufferFormatComboBox"; + this.backBufferFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.backBufferFormatComboBox.TabIndex = 1; + this.backBufferFormatComboBox.SelectedIndexChanged += new System.EventHandler(this.BackBufferFormatChanged); + // + // multisampleLabel + // + this.multisampleLabel.Location = new System.Drawing.Point(8, 72); + this.multisampleLabel.Name = "multisampleLabel"; + this.multisampleLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleLabel.TabIndex = 4; + this.multisampleLabel.Text = "&Multisample Type:"; + // + // depthStencilBufferLabel + // + this.depthStencilBufferLabel.Location = new System.Drawing.Point(8, 48); + this.depthStencilBufferLabel.Name = "depthStencilBufferLabel"; + this.depthStencilBufferLabel.Size = new System.Drawing.Size(152, 23); + this.depthStencilBufferLabel.TabIndex = 2; + this.depthStencilBufferLabel.Text = "De&pth/Stencil Buffer Format:"; + // + // backBufferFormatLabel + // + this.backBufferFormatLabel.Location = new System.Drawing.Point(8, 24); + this.backBufferFormatLabel.Name = "backBufferFormatLabel"; + this.backBufferFormatLabel.Size = new System.Drawing.Size(152, 23); + this.backBufferFormatLabel.TabIndex = 0; + this.backBufferFormatLabel.Text = "&Back Buffer Format:"; + // + // depthStencilBufferComboBox + // + this.depthStencilBufferComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.depthStencilBufferComboBox.DropDownWidth = 144; + this.depthStencilBufferComboBox.Location = new System.Drawing.Point(160, 48); + this.depthStencilBufferComboBox.Name = "depthStencilBufferComboBox"; + this.depthStencilBufferComboBox.Size = new System.Drawing.Size(232, 21); + this.depthStencilBufferComboBox.TabIndex = 3; + this.depthStencilBufferComboBox.SelectedIndexChanged += new System.EventHandler(this.DepthStencilBufferFormatChanged); + // + // vertexProcComboBox + // + this.vertexProcComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.vertexProcComboBox.DropDownWidth = 121; + this.vertexProcComboBox.Location = new System.Drawing.Point(160, 120); + this.vertexProcComboBox.Name = "vertexProcComboBox"; + this.vertexProcComboBox.Size = new System.Drawing.Size(232, 21); + this.vertexProcComboBox.TabIndex = 9; + this.vertexProcComboBox.SelectedIndexChanged += new System.EventHandler(this.VertexProcessingChanged); + // + // vertexProcLabel + // + this.vertexProcLabel.Location = new System.Drawing.Point(8, 120); + this.vertexProcLabel.Name = "vertexProcLabel"; + this.vertexProcLabel.Size = new System.Drawing.Size(152, 23); + this.vertexProcLabel.TabIndex = 8; + this.vertexProcLabel.Text = "&Vertex Processing:"; + // + // presentIntervalComboBox + // + this.presentIntervalComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.presentIntervalComboBox.DropDownWidth = 121; + this.presentIntervalComboBox.Location = new System.Drawing.Point(160, 144); + this.presentIntervalComboBox.Name = "presentIntervalComboBox"; + this.presentIntervalComboBox.Size = new System.Drawing.Size(232, 21); + this.presentIntervalComboBox.TabIndex = 11; + this.presentIntervalComboBox.SelectedValueChanged += new System.EventHandler(this.PresentIntervalChanged); + // + // presentIntervalLabel + // + this.presentIntervalLabel.Location = new System.Drawing.Point(8, 144); + this.presentIntervalLabel.Name = "presentIntervalLabel"; + this.presentIntervalLabel.Size = new System.Drawing.Size(152, 23); + this.presentIntervalLabel.TabIndex = 10; + this.presentIntervalLabel.Text = "Present &Interval:"; + // + // resolutionComboBox + // + this.resolutionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.resolutionComboBox.DropDownWidth = 144; + this.resolutionComboBox.Location = new System.Drawing.Point(161, 94); + this.resolutionComboBox.MaxDropDownItems = 14; + this.resolutionComboBox.Name = "resolutionComboBox"; + this.resolutionComboBox.Size = new System.Drawing.Size(232, 21); + this.resolutionComboBox.TabIndex = 5; + this.resolutionComboBox.SelectedIndexChanged += new System.EventHandler(this.ResolutionChanged); + // + // windowedRadioButton + // + this.windowedRadioButton.Location = new System.Drawing.Point(9, 14); + this.windowedRadioButton.Name = "windowedRadioButton"; + this.windowedRadioButton.Size = new System.Drawing.Size(152, 24); + this.windowedRadioButton.TabIndex = 0; + this.windowedRadioButton.Text = "&Windowed"; + this.windowedRadioButton.CheckedChanged += new System.EventHandler(this.WindowedFullscreenChanged); + // + // resolutionLabel + // + this.resolutionLabel.Location = new System.Drawing.Point(8, 94); + this.resolutionLabel.Name = "resolutionLabel"; + this.resolutionLabel.Size = new System.Drawing.Size(152, 23); + this.resolutionLabel.TabIndex = 4; + this.resolutionLabel.Text = "&Resolution:"; + // + // refreshRateComboBox + // + this.refreshRateComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.refreshRateComboBox.DropDownWidth = 144; + this.refreshRateComboBox.Location = new System.Drawing.Point(161, 118); + this.refreshRateComboBox.MaxDropDownItems = 14; + this.refreshRateComboBox.Name = "refreshRateComboBox"; + this.refreshRateComboBox.Size = new System.Drawing.Size(232, 21); + this.refreshRateComboBox.TabIndex = 7; + this.refreshRateComboBox.SelectedIndexChanged += new System.EventHandler(this.RefreshRateChanged); + // + // adapterFormatLabel + // + this.adapterFormatLabel.Location = new System.Drawing.Point(8, 72); + this.adapterFormatLabel.Name = "adapterFormatLabel"; + this.adapterFormatLabel.Size = new System.Drawing.Size(152, 23); + this.adapterFormatLabel.TabIndex = 2; + this.adapterFormatLabel.Text = "Adapter F&ormat:"; + // + // refreshRateLabel + // + this.refreshRateLabel.Location = new System.Drawing.Point(8, 118); + this.refreshRateLabel.Name = "refreshRateLabel"; + this.refreshRateLabel.Size = new System.Drawing.Size(152, 23); + this.refreshRateLabel.TabIndex = 6; + this.refreshRateLabel.Text = "R&efresh Rate:"; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(112, 464); + this.okButton.Name = "okButton"; + this.okButton.TabIndex = 3; + this.okButton.Text = "OK"; + // + // modeSettingsGroupBox + // + this.modeSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.adapterFormatLabel, + this.refreshRateLabel, + this.resolutionComboBox, + this.adapterFormatComboBox, + this.resolutionLabel, + this.refreshRateComboBox, + this.windowedRadioButton, + this.fullscreenRadioButton}); + this.modeSettingsGroupBox.Location = new System.Drawing.Point(16, 96); + this.modeSettingsGroupBox.Name = "modeSettingsGroupBox"; + this.modeSettingsGroupBox.Size = new System.Drawing.Size(400, 160); + this.modeSettingsGroupBox.TabIndex = 1; + this.modeSettingsGroupBox.TabStop = false; + this.modeSettingsGroupBox.Text = "Display mode settings"; + // + // adapterFormatComboBox + // + this.adapterFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterFormatComboBox.DropDownWidth = 121; + this.adapterFormatComboBox.Location = new System.Drawing.Point(161, 70); + this.adapterFormatComboBox.MaxDropDownItems = 14; + this.adapterFormatComboBox.Name = "adapterFormatComboBox"; + this.adapterFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterFormatComboBox.TabIndex = 3; + this.adapterFormatComboBox.SelectedValueChanged += new System.EventHandler(this.AdapterFormatChanged); + // + // D3DSettingsForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(438, 512); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.cancelButton, + this.okButton, + this.adapterDeviceGroupBox, + this.modeSettingsGroupBox, + this.otherSettingsGroupBox}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.Name = "D3DSettingsForm"; + this.Text = "Direct3D Settings"; + this.adapterDeviceGroupBox.ResumeLayout(false); + this.otherSettingsGroupBox.ResumeLayout(false); + this.modeSettingsGroupBox.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// Respond to a change of selected adapter by rebuilding the device + /// list. Updating the selected device will trigger updates of the + /// rest of the dialog. + /// + private void AdapterChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + settings.AdapterInfo = adapterInfo; + + // Update device combo box + deviceComboBox.Items.Clear(); + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + deviceComboBox.Items.Add(deviceInfo); + if (deviceInfo.DevType == settings.DevType) + deviceComboBox.SelectedItem = deviceInfo; + } + if (deviceComboBox.SelectedItem == null && deviceComboBox.Items.Count > 0) + deviceComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected device by resetting the + /// fullscreen/windowed radio buttons. Updating these buttons + /// will trigger updates of the rest of the dialog. + /// + private void DeviceChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + settings.DeviceInfo = deviceInfo; + + // Update fullscreen/windowed radio buttons + bool HasWindowedDeviceCombo = false; + bool HasFullscreenDeviceCombo = false; + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + HasWindowedDeviceCombo = true; + else + HasFullscreenDeviceCombo = true; + } + windowedRadioButton.Enabled = HasWindowedDeviceCombo; + fullscreenRadioButton.Enabled = HasFullscreenDeviceCombo; + if (settings.IsWindowed && HasWindowedDeviceCombo) { + windowedRadioButton.Checked = true; + } + else { + fullscreenRadioButton.Checked = true; + } + WindowedFullscreenChanged(null, null); + } + + + + + /// + /// Respond to a change of windowed/fullscreen state by rebuilding the + /// adapter format list, resolution list, and refresh rate list. + /// Updating the selected adapter format will trigger updates of the + /// rest of the dialog. + /// + private void WindowedFullscreenChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + if (windowedRadioButton.Checked) { + settings.IsWindowed = true; + settings.WindowedAdapterInfo = adapterInfo; + settings.WindowedDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + adapterFormatComboBox.Items.Add(settings.WindowedDisplayMode.Format); + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = false; + + // Update resolution combo box + resolutionComboBox.Items.Clear(); + resolutionComboBox.Items.Add(FormatResolution(settings.WindowedDisplayMode.Width, + settings.WindowedDisplayMode.Height)); + resolutionComboBox.SelectedIndex = 0; + resolutionComboBox.Enabled = false; + + // Update refresh rate combo box + refreshRateComboBox.Items.Clear(); + refreshRateComboBox.Items.Add(FormatRefreshRate(settings.WindowedDisplayMode.RefreshRate)); + refreshRateComboBox.SelectedIndex = 0; + refreshRateComboBox.Enabled = false; + } + else { + settings.IsWindowed = false; + settings.FullscreenAdapterInfo = adapterInfo; + settings.FullscreenDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + continue; + if (!adapterFormatComboBox.Items.Contains(deviceCombo.AdapterFormat)) { + adapterFormatComboBox.Items.Add(deviceCombo.AdapterFormat); + if (deviceCombo.AdapterFormat == (settings.IsWindowed ? + settings.WindowedDisplayMode.Format : settings.FullscreenDisplayMode.Format)) { + adapterFormatComboBox.SelectedItem = deviceCombo.AdapterFormat; + } + } + } + if (adapterFormatComboBox.SelectedItem == null && adapterFormatComboBox.Items.Count > 0) + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = true; + + // Update resolution combo box + resolutionComboBox.Enabled = true; + + // Update refresh rate combo box + refreshRateComboBox.Enabled = true; + } + } + + + + + /// + /// Converts the given width and height into a formatted string + /// + private string FormatResolution(int width, int height) { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} by {1}", width, height); + return sb.ToString(); + } + + + + + /// + /// Converts the given refresh rate into a formatted string + /// + private string FormatRefreshRate(int refreshRate) { + if (refreshRate == 0) { + return "Default Rate"; + } + else { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} Hz", refreshRate); + return sb.ToString(); + } + } + + + + + /// + /// Respond to a change of selected adapter format by rebuilding the + /// resolution list and back buffer format list. Updating the selected + /// resolution and back buffer format will trigger updates of the rest + /// of the dialog. + /// + private void AdapterFormatChanged(object sender, System.EventArgs e) { + if (!windowedRadioButton.Checked) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + settings.FullscreenDisplayMode.Format = adapterFormat; + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + + resolutionComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat) { + string resolutionString = FormatResolution(displayMode.Width, displayMode.Height); + if (!resolutionComboBox.Items.Contains(resolutionString)) { + resolutionComboBox.Items.Add(resolutionString); + if (settings.FullscreenDisplayMode.Width == displayMode.Width && + settings.FullscreenDisplayMode.Height == displayMode.Height) { + resolutionComboBox.SelectedItem = resolutionString; + } + } + } + } + if (resolutionComboBox.SelectedItem == null && resolutionComboBox.Items.Count > 0) + resolutionComboBox.SelectedIndex = 0; + } + + // Update backbuffer format combo box + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + backBufferFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == settings.DisplayMode.Format) { + if (!backBufferFormatComboBox.Items.Contains(deviceCombo.BackBufferFormat)) { + backBufferFormatComboBox.Items.Add(deviceCombo.BackBufferFormat); + if (deviceCombo.BackBufferFormat == settings.BackBufferFormat) + backBufferFormatComboBox.SelectedItem = deviceCombo.BackBufferFormat; + } + } + } + if (backBufferFormatComboBox.SelectedItem == null && backBufferFormatComboBox.Items.Count > 0) + backBufferFormatComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected resolution by rebuilding the + /// refresh rate list. + /// + private void ResolutionChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + + // Update settings with new resolution + string resolution = (string)resolutionComboBox.SelectedItem; + string[] resolutionSplitStringArray = resolution.Split(); + int width = int.Parse(resolutionSplitStringArray[0]); + int height = int.Parse(resolutionSplitStringArray[2]); + settings.FullscreenDisplayMode.Width = width; + settings.FullscreenDisplayMode.Height = height; + + // Update refresh rate list based on new resolution + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + refreshRateComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat && + displayMode.Width == width && + displayMode.Height == height) { + string refreshRateString = FormatRefreshRate(displayMode.RefreshRate); + if (!refreshRateComboBox.Items.Contains(refreshRateString)) { + refreshRateComboBox.Items.Add(refreshRateString); + if (settings.FullscreenDisplayMode.RefreshRate == displayMode.RefreshRate) + refreshRateComboBox.SelectedItem = refreshRateString; + } + } + } + if (refreshRateComboBox.SelectedItem == null && refreshRateComboBox.Items.Count > 0) + refreshRateComboBox.SelectedIndex = refreshRateComboBox.Items.Count - 1; + } + + + + + /// + /// Respond to a change of selected refresh rate. + /// + private void RefreshRateChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + // Update settings with new refresh rate + string refreshRateString = (string)refreshRateComboBox.SelectedItem; + int refreshRate = 0; + if (refreshRateString != "Default Rate") { + string[] refreshRateSplitStringArray = refreshRateString.Split(); + refreshRate = int.Parse(refreshRateSplitStringArray[0]); + } + settings.FullscreenDisplayMode.RefreshRate = refreshRate; + } + + + + + /// + /// Respond to a change of selected back buffer format by rebuilding + /// the depth/stencil format list, multisample type list, and vertex + /// processing type list. + /// + private void BackBufferFormatChanged(object sender, System.EventArgs e) { + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + Format backBufferFormat = (Format)backBufferFormatComboBox.SelectedItem; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == adapterFormat && + deviceCombo.BackBufferFormat == backBufferFormat) { + deviceCombo.BackBufferFormat = backBufferFormat; + settings.DeviceCombo = deviceCombo; + + depthStencilBufferComboBox.Items.Clear(); + if (enumeration.AppUsesDepthBuffer) { + foreach (DepthFormat format in deviceCombo.DepthStencilFormatList) { + depthStencilBufferComboBox.Items.Add(format); + if (format == settings.DepthStencilBufferFormat) + depthStencilBufferComboBox.SelectedItem = format; + } + if (depthStencilBufferComboBox.SelectedItem == null && depthStencilBufferComboBox.Items.Count > 0) + depthStencilBufferComboBox.SelectedIndex = 0; + } + else { + depthStencilBufferComboBox.Enabled = false; + depthStencilBufferComboBox.Items.Add("(not used)"); + depthStencilBufferComboBox.SelectedIndex = 0; + } + + vertexProcComboBox.Items.Clear(); + foreach (VertexProcessingType vpt in deviceCombo.VertexProcessingTypeList) { + vertexProcComboBox.Items.Add(vpt); + if (vpt == settings.VertexProcessingType) + vertexProcComboBox.SelectedItem = vpt; + } + if (vertexProcComboBox.SelectedItem == null && vertexProcComboBox.Items.Count > 0) + vertexProcComboBox.SelectedIndex = 0; + + presentIntervalComboBox.Items.Clear(); + foreach (PresentInterval pi in deviceCombo.PresentIntervalList) { + presentIntervalComboBox.Items.Add(pi); + if (pi == settings.PresentInterval) + presentIntervalComboBox.SelectedItem = pi; + } + if (presentIntervalComboBox.SelectedItem == null && presentIntervalComboBox.Items.Count > 0) + presentIntervalComboBox.SelectedIndex = 0; + + break; + } + } + } + + + + + /// + /// Respond to a change of selected depth/stencil buffer format. + /// + private void DepthStencilBufferFormatChanged(object sender, System.EventArgs e) { + if (enumeration.AppUsesDepthBuffer) + settings.DepthStencilBufferFormat = (DepthFormat)depthStencilBufferComboBox.SelectedItem; + + multisampleComboBox.Items.Clear(); + foreach (MultiSampleType msType in settings.DeviceCombo.MultiSampleTypeList) { + // Check for DS/MS conflict + bool conflictFound = false; + foreach (DepthStencilMultiSampleConflict DSMSConflict in settings.DeviceCombo.DepthStencilMultiSampleConflictList) { + if (DSMSConflict.DepthStencilFormat == settings.DepthStencilBufferFormat && + DSMSConflict.MultiSampleType == msType) { + conflictFound = true; + break; + } + } + if (!conflictFound) { + multisampleComboBox.Items.Add(msType); + if (msType == settings.MultisampleType) + multisampleComboBox.SelectedItem = msType; + } + } + if (multisampleComboBox.SelectedItem == null && multisampleComboBox.Items.Count > 0) + multisampleComboBox.SelectedIndex = 0; + + } + + + + + /// + /// Respond to a change of selected multisample type. + /// + private void MultisampleTypeChanged(object sender, System.EventArgs e) { + settings.MultisampleType = (MultiSampleType)multisampleComboBox.SelectedItem; + + // Find current max multisample quality + int maxQuality = 0; + DeviceCombo deviceCombo = settings.DeviceCombo; + for (int i = 0; i < deviceCombo.MultiSampleQualityList.Count; i++) { + if ((MultiSampleType)deviceCombo.MultiSampleTypeList[i] == settings.MultisampleType) { + maxQuality = (int)deviceCombo.MultiSampleQualityList[i]; + break; + } + } + + // Update multisample quality list based on new type + multisampleQualityComboBox.Items.Clear(); + for (int iLevel = 0; iLevel < maxQuality; iLevel++) { + multisampleQualityComboBox.Items.Add(iLevel); + if (settings.MultisampleQuality == iLevel) + multisampleQualityComboBox.SelectedItem = iLevel; + } + if (multisampleQualityComboBox.SelectedItem == null && multisampleQualityComboBox.Items.Count > 0) + multisampleQualityComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected multisample quality. + /// + private void MultisampleQualityChanged(object sender, System.EventArgs e) { + settings.MultisampleQuality = (int)multisampleQualityComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void VertexProcessingChanged(object sender, System.EventArgs e) { + settings.VertexProcessingType = (VertexProcessingType)vertexProcComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void PresentIntervalChanged(object sender, System.EventArgs e) { + settings.PresentInterval = (PresentInterval)presentIntervalComboBox.SelectedItem; + } +} + + +/// +/// Current D3D settings: adapter, device, mode, formats, etc. +/// +public class D3DSettings { + public bool IsWindowed; + + public GraphicsAdapterInfo WindowedAdapterInfo; + public GraphicsDeviceInfo WindowedDeviceInfo; + public DeviceCombo WindowedDeviceCombo; + public DisplayMode WindowedDisplayMode; // not changable by the user + public DepthFormat WindowedDepthStencilBufferFormat; + public MultiSampleType WindowedMultisampleType; + public int WindowedMultisampleQuality; + public VertexProcessingType WindowedVertexProcessingType; + public PresentInterval WindowedPresentInterval; + public int WindowedWidth; + public int WindowedHeight; + + public GraphicsAdapterInfo FullscreenAdapterInfo; + public GraphicsDeviceInfo FullscreenDeviceInfo; + public DeviceCombo FullscreenDeviceCombo; + public DisplayMode FullscreenDisplayMode; // changable by the user + public DepthFormat FullscreenDepthStencilBufferFormat; + public MultiSampleType FullscreenMultisampleType; + public int FullscreenMultisampleQuality; + public VertexProcessingType FullscreenVertexProcessingType; + public PresentInterval FullscreenPresentInterval; + + + + + /// + /// The adapter information + /// + public GraphicsAdapterInfo AdapterInfo { + get { return IsWindowed ? WindowedAdapterInfo : FullscreenAdapterInfo; } + set { if (IsWindowed) WindowedAdapterInfo = value; else FullscreenAdapterInfo = value; } + } + + + + + /// + /// The device information + /// + public GraphicsDeviceInfo DeviceInfo { + get { return IsWindowed ? WindowedDeviceInfo : FullscreenDeviceInfo; } + set { if (IsWindowed) WindowedDeviceInfo = value; else FullscreenDeviceInfo = value; } + } + + + + + /// + /// The device combo + /// + public DeviceCombo DeviceCombo { + get { return IsWindowed ? WindowedDeviceCombo : FullscreenDeviceCombo; } + set { if (IsWindowed) WindowedDeviceCombo = value; else FullscreenDeviceCombo = value; } + } + + + + + /// + /// The adapters ordinal + /// + public int AdapterOrdinal { + get { return DeviceCombo.AdapterOrdinal; } + } + + + + + /// + /// The type of device this is + /// + public DeviceType DevType { + get { return DeviceCombo.DevType; } + } + + + + + /// + /// The back buffers format + /// + public Format BackBufferFormat { + get { return DeviceCombo.BackBufferFormat; } + } + + + + + /// + /// The display mode + /// + public DisplayMode DisplayMode { + get { return IsWindowed ? WindowedDisplayMode : FullscreenDisplayMode; } + set { if (IsWindowed) WindowedDisplayMode = value; else FullscreenDisplayMode = value; } + } + + + + + /// + /// The Depth stencils format + /// + public DepthFormat DepthStencilBufferFormat { + get { return IsWindowed ? WindowedDepthStencilBufferFormat : FullscreenDepthStencilBufferFormat; } + set { if (IsWindowed) WindowedDepthStencilBufferFormat = value; else FullscreenDepthStencilBufferFormat = value; } + } + + + + + /// + /// The multisample type + /// + public MultiSampleType MultisampleType { + get { return IsWindowed ? WindowedMultisampleType : FullscreenMultisampleType; } + set { if (IsWindowed) WindowedMultisampleType = value; else FullscreenMultisampleType = value; } + } + + + + + /// + /// The multisample quality + /// + public int MultisampleQuality { + get { return IsWindowed ? WindowedMultisampleQuality : FullscreenMultisampleQuality; } + set { if (IsWindowed) WindowedMultisampleQuality = value; else FullscreenMultisampleQuality = value; } + } + + + + + /// + /// The vertex processing type + /// + public VertexProcessingType VertexProcessingType { + get { return IsWindowed ? WindowedVertexProcessingType : FullscreenVertexProcessingType; } + set { if (IsWindowed) WindowedVertexProcessingType = value; else FullscreenVertexProcessingType = value; } + } + + + + + /// + /// The presentation interval + /// + public PresentInterval PresentInterval { + get { return IsWindowed ? WindowedPresentInterval : FullscreenPresentInterval; } + set { if (IsWindowed) WindowedPresentInterval = value; else FullscreenPresentInterval = value; } + } + + + + + /// + /// Clone the d3d settings class + /// + public D3DSettings Clone() { + return (D3DSettings)MemberwiseClone(); + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/D3DSettingsForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step05/D3DSettingsForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/D3DSettingsForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect.cs new file mode 100644 index 0000000..e0e11ae --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect.cs @@ -0,0 +1,254 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; +using System.Runtime.InteropServices; + + + + +/// +/// The connection wizard will allow our users to pick a service provider, +/// and then connect to an existing application, or create a new one as the host. +/// +public class ConnectWizard { + private Peer peerObject; + private Address deviceAddress; + + private ChooseServiceProviderForm serviceProviderForm; + private CreateJoinForm createJoinForm; + + private Guid serviceProviderGuid; + private string username; + private string samplename; + private bool isInSession = false; + private bool isHost = false; + private int port = 0; + + private Guid applicationGuid; + + + + + /// + /// Constructor + /// + /// + /// + /// + public ConnectWizard(Peer peer, Guid application, string sampleName) { + peerObject = peer; + applicationGuid = application; + samplename = sampleName; + } + + + + + /// + /// The guid for the current service provider + /// + public Guid ServiceProvider { + get { + return serviceProviderGuid; } + set { + serviceProviderGuid = value; } + } + + + + + /// + /// The game's default port number + /// + public int DefaultPort { + get { + return port; } + set { + port = value; } + } + + + + + /// + /// Am I the host + /// + public bool IsHost { + get { + return isHost; } + set { + isHost = value; } + } + + + + + /// + /// The username + /// + public string Username { + get { + return username; } + set { + username = value; } + } + + + + + /// + /// The sample name + /// + public string SampleName { + get { + return samplename; } + } + + + + + /// + /// The applications guid + /// + public Guid ApplicationGuid { + get { + return applicationGuid; } + } + + + + + /// + /// Are we in a session + /// + public bool InSession { + get { return isInSession; } + set { isInSession = value; } + } + + + + + /// + /// Returns true if the given provider requires a port component + /// + /// ServiceProvider Guid + /// + static public bool ProviderRequiresPort(Guid provider) { + return (provider != Address.ServiceProviderSerial && + provider != Address.ServiceProviderModem && + provider != Address.ServiceProviderBlueTooth); + } + + + + + /// + /// Handler for when our form is disposed + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createJoinForm) + createJoinForm = null; + + if (sender == serviceProviderForm) + serviceProviderForm = null; + } + + + + + /// + /// Set the user information + /// + public void SetUserInfo() { + //Before we call host, let's actually call SetPeerInformation + PlayerInformation myinformation = new PlayerInformation(); + myinformation.Name = username; + + peerObject.SetPeerInformation(myinformation, SyncFlags.PeerInformation); + } + + + + + /// + /// Show the service providers form + /// + /// True if a service provider was picked, false otherwise + public bool DoShowServiceProviders() { + if (serviceProviderForm == null) { + username = null; + serviceProviderForm = new ChooseServiceProviderForm(peerObject,this); + serviceProviderForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (serviceProviderForm.ShowDialog() == DialogResult.OK) + return true; + + // The didn't hit ok + return false; + } + + + + + /// + /// Show the create or join screen + /// + /// True if we will be in a session, false otherwise + public bool DoCreateJoinGame() { + if (deviceAddress != null) + deviceAddress.Dispose(); + + deviceAddress = new Address(); + + if (createJoinForm != null) + createJoinForm.Dispose(); + + createJoinForm = new CreateJoinForm(peerObject, deviceAddress, this); + createJoinForm.Disposed += new System.EventHandler(this.FormDisposed); + + //Set the address's service provider (this will be the device address) + deviceAddress.ServiceProvider = serviceProviderGuid; + DialogResult drCreateJoin = createJoinForm.ShowDialog(); + if (drCreateJoin == DialogResult.Cancel) + return false; + + this.isHost = (drCreateJoin == DialogResult.Yes); + return true; + + } + + + + + /// + /// Start the wizard + /// + /// True if we are in a session, false otherwise + public bool StartWizard() { + isInSession = false; + + while (this.DoShowServiceProviders()) { + //Now let's create a game or join a session + if (this.DoCreateJoinGame()) { + // A game has been created or joined now, set our flag + isInSession = true; + break; + } + } + return isInSession; + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_AddressForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_AddressForm.cs new file mode 100644 index 0000000..181fc48 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_AddressForm.cs @@ -0,0 +1,207 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_AddressForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// Summary description for AddressForm. +/// +public class AddressForm : System.Windows.Forms.Form { + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox hostnameTextBox; + private System.Windows.Forms.TextBox portTextBox; + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + /// + /// Constructor + /// + public AddressForm( int defaultPort ) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // Set default port value + Port = defaultPort; + } + + + + + /// + /// The remote port on which to connect + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(portTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + portTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Remote hostname + /// + public string Hostname { + get { + return hostnameTextBox.Text; } + set { + hostnameTextBox.Text = value; } + } + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.label1 = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.hostnameTextBox = new System.Windows.Forms.TextBox(); + this.portTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(248, 48); + this.label1.TabIndex = 0; + this.label1.Text = "Please enter the optional components of the remote session address. If set blank," + + " DirectPlay will attempt to search the local network."; + // + // okButton + // + this.okButton.Location = new System.Drawing.Point(104, 144); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(72, 24); + this.okButton.TabIndex = 1; + this.okButton.Text = "&OK"; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(184, 144); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(72, 24); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "&Cancel"; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(32, 80); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(100, 16); + this.label2.TabIndex = 3; + this.label2.Text = "Hostname"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(160, 80); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 16); + this.label3.TabIndex = 4; + this.label3.Text = "Port"; + // + // hostnameTextBox + // + this.hostnameTextBox.Location = new System.Drawing.Point(32, 96); + this.hostnameTextBox.Name = "hostnameTextBox"; + this.hostnameTextBox.Size = new System.Drawing.Size(120, 20); + this.hostnameTextBox.TabIndex = 5; + this.hostnameTextBox.Text = ""; + // + // portTextBox + // + this.portTextBox.Location = new System.Drawing.Point(160, 96); + this.portTextBox.Name = "portTextBox"; + this.portTextBox.Size = new System.Drawing.Size(56, 20); + this.portTextBox.TabIndex = 6; + this.portTextBox.Text = ""; + // + // AddressForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(264, 176); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.portTextBox, + this.hostnameTextBox, + this.label3, + this.label2, + this.cancelButton, + this.okButton, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AddressForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Remote Address"; + this.ResumeLayout(false); + + } + #endregion + + private void okButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.OK; + } + + private void cancelButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.Cancel; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_AddressForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_AddressForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_AddressForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_CreateForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_CreateForm.cs new file mode 100644 index 0000000..c321e80 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_CreateForm.cs @@ -0,0 +1,346 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_CreateForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will allow you to create a new session, and set certain properties +/// of the session. +/// +public class CreateSessionForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.TextBox txtSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton notSignedRadio; + private System.Windows.Forms.RadioButton fullSignedRadio; + private System.Windows.Forms.RadioButton fastSignedRadio; + private System.Windows.Forms.CheckBox migrateHostCheckBox; + private System.Windows.Forms.CheckBox useDPNSVRCheckBox; + private System.Windows.Forms.TextBox localPortTextBox; + private System.Windows.Forms.Label localPortLabel; + private System.Windows.Forms.Button btnCancel; + + + + /// + /// Constructor + /// + public CreateSessionForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + peer = peerObject; + this.connectionWizard = connectionWizard; + deviceAddress = addressObject; + txtSession.Text = null; + this.Text = connectionWizard.SampleName + " - " + this.Text; + //Get the default session from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + // Get session name + txtSession.Text = (string)regKey.GetValue("DirectPlaySessionName", null); + + // Get host migration option + if (regKey.GetValue("DirectPlayMigrateHost",null) != null) { + migrateHostCheckBox.Checked = ((int)regKey.GetValue("DirectPlayMigrateHost",1)==1); + } + + + // Get session signing option + if (regKey.GetValue("DirectPlaySessionSigning",null) != null) { + if ("Full" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fullSignedRadio.Checked = true; + else if ("Fast" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fastSignedRadio.Checked = true; + else + notSignedRadio.Checked = true; + } + + regKey.Close(); + } + + // Set default port value and hide port UI if provider doesn't use them + Port = connectionWizard.DefaultPort; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + localPortTextBox.Hide(); + localPortLabel.Hide(); + } + } + + + + /// + /// The port on which to host + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(localPortTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + localPortTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.txtSession = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.fullSignedRadio = new System.Windows.Forms.RadioButton(); + this.fastSignedRadio = new System.Windows.Forms.RadioButton(); + this.notSignedRadio = new System.Windows.Forms.RadioButton(); + this.migrateHostCheckBox = new System.Windows.Forms.CheckBox(); + this.useDPNSVRCheckBox = new System.Windows.Forms.CheckBox(); + this.localPortLabel = new System.Windows.Forms.Label(); + this.localPortTextBox = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // txtSession + // + this.txtSession.Location = new System.Drawing.Point(96, 24); + this.txtSession.Name = "txtSession"; + this.txtSession.Size = new System.Drawing.Size(176, 20); + this.txtSession.TabIndex = 3; + this.txtSession.Text = ""; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(288, 12); + this.label1.TabIndex = 2; + this.label1.Text = "Session Name:"; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(128, 168); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(208, 168); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + // + // groupBox1 + // + this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] { + this.fullSignedRadio, + this.fastSignedRadio, + this.notSignedRadio}); + this.groupBox1.Location = new System.Drawing.Point(16, 64); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(112, 88); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Session Signing"; + // + // fullSignedRadio + // + this.fullSignedRadio.Location = new System.Drawing.Point(18, 22); + this.fullSignedRadio.Name = "fullSignedRadio"; + this.fullSignedRadio.Size = new System.Drawing.Size(80, 16); + this.fullSignedRadio.TabIndex = 9; + this.fullSignedRadio.Text = "Full signed"; + // + // fastSignedRadio + // + this.fastSignedRadio.Checked = true; + this.fastSignedRadio.Location = new System.Drawing.Point(18, 41); + this.fastSignedRadio.Name = "fastSignedRadio"; + this.fastSignedRadio.Size = new System.Drawing.Size(88, 16); + this.fastSignedRadio.TabIndex = 8; + this.fastSignedRadio.TabStop = true; + this.fastSignedRadio.Text = "Fast signed"; + // + // notSignedRadio + // + this.notSignedRadio.Location = new System.Drawing.Point(18, 55); + this.notSignedRadio.Name = "notSignedRadio"; + this.notSignedRadio.Size = new System.Drawing.Size(72, 24); + this.notSignedRadio.TabIndex = 10; + this.notSignedRadio.Text = "Disabled"; + // + // migrateHostCheckBox + // + this.migrateHostCheckBox.Checked = true; + this.migrateHostCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.migrateHostCheckBox.Location = new System.Drawing.Point(144, 64); + this.migrateHostCheckBox.Name = "migrateHostCheckBox"; + this.migrateHostCheckBox.Size = new System.Drawing.Size(136, 24); + this.migrateHostCheckBox.TabIndex = 11; + this.migrateHostCheckBox.Text = "Enable Host Migration"; + // + // useDPNSVRCheckBox + // + this.useDPNSVRCheckBox.Location = new System.Drawing.Point(144, 84); + this.useDPNSVRCheckBox.Name = "useDPNSVRCheckBox"; + this.useDPNSVRCheckBox.Size = new System.Drawing.Size(136, 24); + this.useDPNSVRCheckBox.TabIndex = 12; + this.useDPNSVRCheckBox.Text = "Use DPNSVR"; + // + // localPortLabel + // + this.localPortLabel.Location = new System.Drawing.Point(152, 122); + this.localPortLabel.Name = "localPortLabel"; + this.localPortLabel.Size = new System.Drawing.Size(64, 17); + this.localPortLabel.TabIndex = 13; + this.localPortLabel.Text = "Local Port:"; + // + // localPortTextBox + // + this.localPortTextBox.Location = new System.Drawing.Point(216, 120); + this.localPortTextBox.Name = "localPortTextBox"; + this.localPortTextBox.Size = new System.Drawing.Size(56, 20); + this.localPortTextBox.TabIndex = 14; + this.localPortTextBox.Text = ""; + // + // CreateSessionForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(290, 200); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.localPortTextBox, + this.localPortLabel, + this.useDPNSVRCheckBox, + this.migrateHostCheckBox, + this.txtSession, + this.label1, + this.groupBox1, + this.btnOK, + this.btnCancel}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.HelpButton = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateSessionForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Create a Session"; + this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.CreateSessionForm_HelpRequested); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// We are ready to create a session. Ensure the data is valid + /// then create the session + /// + private void btnOK_Click(object sender, System.EventArgs e) { + ApplicationDescription dpApp; + if ((txtSession.Text == null) || (txtSession.Text == "")) { + MessageBox.Show(this,"Please enter a session name before clicking OK.","No sessionname",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlaySessionName", txtSession.Text); + if (migrateHostCheckBox.Checked) + regKey.SetValue("DirectPlayMigrateHost",1); + else + regKey.SetValue("DirectPlayMigrateHost",0); + + if (fastSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Fast"); + else if (fullSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Full"); + else + regKey.SetValue("DirectPlaySessionSigning","Disabled"); + regKey.Close(); + } + + dpApp = new ApplicationDescription(); + dpApp.GuidApplication = connectionWizard.ApplicationGuid; + dpApp.SessionName = txtSession.Text; + dpApp.Flags = 0; + + if (migrateHostCheckBox.Checked) + dpApp.Flags |= SessionFlags.MigrateHost; + + if (!useDPNSVRCheckBox.Checked) + dpApp.Flags |= SessionFlags.NoDpnServer; + + if (fastSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FastSigned; + else if (fullSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FullSigned; + + // Specify the port number if available + if (ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + if (Port > 0) + deviceAddress.AddComponent(Address.KeyPort, Port); + } + + connectionWizard.SetUserInfo(); + // Host a game on deviceAddress as described by dpApp + // HostFlags.OkToQueryForAddressing allows DirectPlay to prompt the user + // using a dialog box for any device address information that is missing + peer.Host(dpApp,deviceAddress,HostFlags.OkToQueryForAddressing); + this.DialogResult = DialogResult.OK; + } + + private void CreateSessionForm_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent) { + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_CreateForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_CreateForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_CreateForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_JoinForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_JoinForm.cs new file mode 100644 index 0000000..a86efa7 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_JoinForm.cs @@ -0,0 +1,481 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_JoinForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will search for existing running samples and allow you to join them or will +/// allow you to create your own session as a host +/// +public class CreateJoinForm : System.Windows.Forms.Form { + private const int EnumExpireThreshold = 2000; + private bool amJoining = false; + + + + + /// + /// Hold our information of hosts we found + /// + private struct FindHostsResponseInformation { + public int LastFoundTime; + public ApplicationDescription ApplicationDesc; + public int RoundTripLatencyMs; + public Address sender; + public Address device; + public override string ToString() { + if (ApplicationDesc.MaxPlayers > 0) + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + "/" + ApplicationDesc.MaxPlayers + ") (" + RoundTripLatencyMs + "ms)"; + else + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + ") (" + RoundTripLatencyMs + "ms)"; + } + }; + + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + private Address hostAddress = null; + private bool isSearching = false; + private int findHostHandle = 0; + private CreateSessionForm createSessionForm = null; + private ResultCode resultCode; + private ArrayList foundHosts = new ArrayList(); + private bool isConnected = false; + private ManualResetEvent connectEvent = null; + private System.Timers.Timer updateListTimer = null; + private System.Timers.Timer connectTimer = null; + + private System.Windows.Forms.ListBox lstSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnSearch; + private System.Windows.Forms.Button btnJoin; + private System.Windows.Forms.Button btnCreate; + + + + + /// + /// Constructor + /// + public CreateJoinForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + deviceAddress = addressObject; + + //Set up the event handlers + peer.FindHostResponse += new FindHostResponseEventHandler(FindHostResponseMessage); + peer.ConnectComplete += new ConnectCompleteEventHandler(ConnectResult); + peer.AsyncOperationComplete += new AsyncOperationCompleteEventHandler(CancelAsync); + + //Set up our timer + updateListTimer = new System.Timers.Timer(300); // A 300 ms interval + updateListTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.UpdateTimer); + updateListTimer.SynchronizingObject = this; + updateListTimer.Start(); + //Set up our connect timer + connectTimer = new System.Timers.Timer(100); // A 100ms interval + connectTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.ConnectTimer); + connectTimer.SynchronizingObject = this; + // Set up our connect event + connectEvent = new ManualResetEvent(false); + + } + + + + + /// + /// An asynchronous operation was cancelled + /// + private void CancelAsync(object sender, AsyncOperationCompleteEventArgs e) { + if (e.Message.AsyncOperationHandle == findHostHandle) { + findHostHandle = 0; + btnSearch.Text = "Start Search"; + isSearching = false; + btnCreate.Enabled = true; + btnSearch.Enabled = true; + } + } + + + + + /// + /// A host was found and responded to our query + /// + private void FindHostResponseMessage(object sender, FindHostResponseEventArgs dpMessage) { + // Now we need to add this to our list of available sessions + SessionAdd(dpMessage.Message); + } + + + + + /// + /// Add this session to our list + /// + /// + private void SessionAdd(FindHostsResponseMessage dpMessage) { + FindHostsResponseInformation dpInfo = new FindHostsResponseInformation(); + + dpInfo.ApplicationDesc = dpMessage.ApplicationDescription; + dpInfo.device = dpMessage.AddressDevice; + dpInfo.sender = dpMessage.AddressSender; + dpInfo.RoundTripLatencyMs = dpMessage.RoundTripLatencyMs; + dpInfo.LastFoundTime = Environment.TickCount; + + // Let's check the items first and see if this one already exists + bool isFound = false; + + lock (foundHosts) { + for (int i = 0; i < lstSession.Items.Count; i++) { + if (dpInfo.ApplicationDesc.GuidInstance == ((FindHostsResponseInformation)lstSession.Items[i]).ApplicationDesc.GuidInstance) { + foundHosts[i] = dpInfo; + lstSession.Items[i] = dpInfo; + isFound = true; + } + } + if (!isFound) { + lstSession.Items.Add(dpInfo); + foundHosts.Add(dpInfo); + } + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + + if (isSearching) { + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + isSearching = !isSearching; + } + if (connectTimer != null) + connectTimer.Dispose(); + + if (updateListTimer != null) + updateListTimer.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.btnJoin = new System.Windows.Forms.Button(); + this.lstSession = new System.Windows.Forms.ListBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnCreate = new System.Windows.Forms.Button(); + this.btnSearch = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnJoin + // + this.btnJoin.Enabled = false; + this.btnJoin.Location = new System.Drawing.Point(7, 227); + this.btnJoin.Name = "btnJoin"; + this.btnJoin.Size = new System.Drawing.Size(74, 27); + this.btnJoin.TabIndex = 2; + this.btnJoin.Text = "Join"; + this.btnJoin.Click += new System.EventHandler(this.btnJoin_Click); + // + // lstSession + // + this.lstSession.Location = new System.Drawing.Point(5, 37); + this.lstSession.Name = "lstSession"; + this.lstSession.Size = new System.Drawing.Size(400, 186); + this.lstSession.TabIndex = 1; + this.lstSession.DoubleClick += new System.EventHandler(this.btnJoin_Click); + this.lstSession.SelectedValueChanged += new System.EventHandler(this.SelectedChange); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(5, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(312, 16); + this.label1.TabIndex = 0; + this.label1.Text = "Select session to join, or click Create to start a new session."; + // + // btnCreate + // + this.btnCreate.DialogResult = System.Windows.Forms.DialogResult.Yes; + this.btnCreate.Location = new System.Drawing.Point(84, 227); + this.btnCreate.Name = "btnCreate"; + this.btnCreate.Size = new System.Drawing.Size(74, 27); + this.btnCreate.TabIndex = 2; + this.btnCreate.Text = "Create"; + this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click); + // + // btnSearch + // + this.btnSearch.Location = new System.Drawing.Point(319, 7); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(86, 27); + this.btnSearch.TabIndex = 2; + this.btnSearch.Text = "Start Search"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(333, 227); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + // + // CreateJoinForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(411, 264); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.btnCreate, + this.btnJoin, + this.btnSearch, + this.btnCancel, + this.lstSession, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateJoinForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Join or create a session"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// The selected session was changed. + /// + private void SelectedChange(object sender, System.EventArgs e) { + if (amJoining) + return; // Do nothing if we are already joining a session + + btnJoin.Enabled = (lstSession.SelectedItem != null); + } + + + + + /// + /// We either want to start or stop searching + /// + private void btnSearch_Click(object sender, System.EventArgs e) { + if (!isSearching) { + if( hostAddress != null ) + hostAddress.Dispose(); + + hostAddress = new Address(); + hostAddress.ServiceProvider = deviceAddress.ServiceProvider; + + // See if we should prompt the user for the remote address + if (ConnectWizard.ProviderRequiresPort(hostAddress.ServiceProvider)) { + AddressForm addressDialog = new AddressForm(connectionWizard.DefaultPort); + addressDialog.ShowDialog(this); + + // If the user cancelled the address form, abort the search + if (addressDialog.DialogResult != DialogResult.OK) + return; + + // If a port was specified, add the component + if (addressDialog.Hostname != "") + hostAddress.AddComponent(Address.KeyHostname, addressDialog.Hostname); + + // If a hostname was specified, add the component + if (addressDialog.Port > 0) + hostAddress.AddComponent(Address.KeyPort, addressDialog.Port); + } + + //Time to enum our hosts + ApplicationDescription desc = new ApplicationDescription(); + desc.GuidApplication = connectionWizard.ApplicationGuid; + + // If the user was not already asked for address information, DirectPlay + // should prompt with native UI + FindHostsFlags flags = 0; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + flags = FindHostsFlags.OkToQueryForAddressing; + + peer.FindHosts(desc,hostAddress,deviceAddress,null,Timeout.Infinite,0,Timeout.Infinite, flags, out findHostHandle); + isSearching = true; + btnCreate.Enabled = false; + btnSearch.Text = "Stop Search"; + } + else { + btnSearch.Text = "Stopping..."; + btnSearch.Enabled = false; + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + } + } + + + + + /// + /// A form was disposed + /// + /// + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createSessionForm) + createSessionForm = null; + } + + + + + /// + /// We should create a new session. Display a dialog allowing the user to set + /// certain options + /// + private void btnCreate_Click(object sender, System.EventArgs e) { + this.DialogResult = DialogResult.None; + ((Button)sender).DialogResult = DialogResult.None; + if (createSessionForm == null) { + createSessionForm = new CreateSessionForm(peer,deviceAddress,connectionWizard); + createSessionForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (createSessionForm.ShowDialog(this) != DialogResult.Cancel) { + ((Button)sender).DialogResult = DialogResult.Yes; + this.DialogResult = DialogResult.Yes; + } + } + + + + + /// + /// Determine if we need to expire any of our currently listed servers + /// + private void UpdateTimer(object sender, System.Timers.ElapsedEventArgs e) { + lock (foundHosts) { + for (int i = 0; i< foundHosts.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)foundHosts[i]).LastFoundTime > EnumExpireThreshold) { + foundHosts.RemoveAt(i); + break; + } + } + for (int i = 0; i< lstSession.Items.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)lstSession.Items[i]).LastFoundTime > EnumExpireThreshold) { + lstSession.Items.RemoveAt(i); + break; + } + } + } + } + + + + + /// + /// Wait for a connect to complete + /// + private void ConnectTimer(object sender, System.Timers.ElapsedEventArgs e) { + if (connectEvent.WaitOne(0,false)) { // Wait for the Connect event to be fired + if (isConnected) { // Are we connected? + // Get rid of the timer + if (updateListTimer != null) + updateListTimer.Stop(); + + if (connectTimer != null) + connectTimer.Stop(); + + this.DialogResult = DialogResult.OK; + this.Close(); + return; + } + else { + MessageBox.Show(this,"Failed to connect. The error code was: \n" + resultCode.ToString() ,"Failed to connect",MessageBoxButtons.OK,MessageBoxIcon.Information); + // Restart our timer + updateListTimer.Start(); + } + } + } + + + + + /// + /// Fired when a connect complete message is received from DirectPlay. Fire + /// our event to notify the sample we've connected + /// + private void ConnectResult(object sender, ConnectCompleteEventArgs e) { + if (e.Message.ResultCode == 0) { + isConnected = true; + } + else + isConnected = false; + + resultCode = e.Message.ResultCode; + // Notify the timer that we've connected. + connectEvent.Set(); + } + + + + + /// + /// Join an existing session + /// + private void btnJoin_Click(object sender, System.EventArgs e) { + FindHostsResponseInformation dpInfo; + if (lstSession.SelectedItem == null) { + MessageBox.Show(this,"Please select a session before clicking join.","No session",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + // Turn off all buttons + btnCreate.Enabled = false; + btnCancel.Enabled = false; + btnJoin.Enabled = false; + btnSearch.Enabled = false; + amJoining = true; + // Stop our secondary timer + updateListTimer.Stop(); + dpInfo = ((FindHostsResponseInformation)lstSession.SelectedItem); + connectionWizard.SetUserInfo(); + peer.Connect(dpInfo.ApplicationDesc,dpInfo.sender, dpInfo.device,null,ConnectFlags.OkToQueryForAddressing); + // Now start our 'Connect' timer + connectTimer.Start(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_JoinForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_JoinForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_JoinForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_ServiceProviderForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_ServiceProviderForm.cs new file mode 100644 index 0000000..4884d84 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_ServiceProviderForm.cs @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_ServiceProviderForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +/// +/// This form allows you to choose a service provider and username for your +/// sample +/// +public class ChooseServiceProviderForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListBox lstSP; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtUser; + private System.Windows.Forms.Button btnCancel; + + + + + /// + /// Constructor + /// + public ChooseServiceProviderForm(Peer peerObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + // Fill up our listbox with the service providers + ServiceProviderInformation[] serviceProviders = peer.GetServiceProviders(false); + foreach (ServiceProviderInformation info in serviceProviders) + lstSP.Items.Add(info); + + txtUser.Text = null; + //Get the default username from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + try { + txtUser.Text = (string)regKey.GetValue("DirectPlayUserName", null); + lstSP.SelectedIndex = (int)regKey.GetValue("DirectPlaySPIndex", 0); + regKey.Close(); + } + catch { + txtUser.Text = null; + lstSP.SelectedIndex = 0; + } + } + else + lstSP.SelectedIndex = 0; + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + txtUser.Text = SystemInformation.UserName; + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.lstSP = new System.Windows.Forms.ListBox(); + this.txtUser = new System.Windows.Forms.TextBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lstSP + // + this.lstSP.Location = new System.Drawing.Point(12, 63); + this.lstSP.Name = "lstSP"; + this.lstSP.Size = new System.Drawing.Size(324, 147); + this.lstSP.TabIndex = 1; + this.lstSP.DoubleClick += new System.EventHandler(this.lstSP_DoubleClick); + // + // txtUser + // + this.txtUser.Location = new System.Drawing.Point(13, 20); + this.txtUser.MaxLength = 30; + this.txtUser.Name = "txtUser"; + this.txtUser.Size = new System.Drawing.Size(326, 20); + this.txtUser.TabIndex = 5; + this.txtUser.Text = ""; + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(181, 215); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 2; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(260, 215); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(11, 44); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(376, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Please pick your service provider:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(10, 5); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(327, 12); + this.label2.TabIndex = 4; + this.label2.Text = "User Name:"; + // + // ChooseServiceProviderForm + // + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(343, 246); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.txtUser, + this.label2, + this.btnCancel, + this.btnOK, + this.lstSP, + this.label1}); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChooseServiceProviderForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Choose Service Provider"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// They don't want to run this sample + /// + private void btnCancel_Click(object sender, System.EventArgs e) { + this.Dispose(); + } + + + + + /// + /// Same as clicking ok + /// + private void lstSP_DoubleClick(object sender, System.EventArgs e) { + // Call the ok button click handler + object[] parameters = new object[] { sender, e }; + this.BeginInvoke(new System.EventHandler(btnOK_Click), parameters); + } + + + + + /// + /// Select this username and service provider if valid, then continue the wizard + /// + private void btnOK_Click(object sender, System.EventArgs e) { + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + MessageBox.Show(this,"Please enter a username before clicking OK.","No Username",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + try { + connectionWizard.ServiceProvider = ((ServiceProviderInformation)lstSP.SelectedItem).Guid; + connectionWizard.Username = txtUser.Text; + } + catch { // We assume if we got here there was no selected item. + MessageBox.Show(this,"Please select a service provider before clicking OK.","No Service Provider",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlayUserName", txtUser.Text); + regKey.SetValue("DirectPlaySPIndex", lstSP.SelectedIndex); + regKey.Close(); + } + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_ServiceProviderForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_ServiceProviderForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/DPlayConnect_ServiceProviderForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/DXUtil.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/DXUtil.cs new file mode 100644 index 0000000..5d0f0e5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/DXUtil.cs @@ -0,0 +1,285 @@ +//----------------------------------------------------------------------------- +// File: DXUtil.cs +// +// Desc: Shortcut macros and functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.IO; +using System.Runtime.InteropServices; + + + + +/// +/// Enumeration for various actions our timer can perform +/// +public enum DirectXTimer { + Reset, + Start, + Stop, + Advance, + GetAbsoluteTime, + GetApplicationTime, + GetElapsedTime +}; + + + + +/// +/// Generic utility functions for our samples +/// +public class DXUtil { + #region Timer Internal Stuff + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceCounter(ref long PerformanceCount); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("winmm.dll")] + public static extern int timeGetTime(); + private static bool isTimerInitialized = false; + private static bool m_bUsingQPF = false; + private static bool m_bTimerStopped = true; + private static long m_llQPFTicksPerSec = 0; + private static long m_llStopTime = 0; + private static long m_llLastElapsedTime = 0; + private static long m_llBaseTime = 0; + private static double m_fLastElapsedTime = 0.0; + private static double m_fBaseTime = 0.0; + private static double m_fStopTime = 0.0; + #endregion + + // Constants for SDK Path registry keys + private const string sdkPath = "Software\\Microsoft\\DirectX SDK"; + private const string sdkKey = "DX9J3SDK Samples Path"; + + private DXUtil() { /* Private Constructor */ } + + + + + /// + /// Returns the DirectX SDK media path + /// + public static string SdkMediaPath { + get { + Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sdkPath); + string sReg = string.Empty; + if (rKey != null) { + sReg = (string)rKey.GetValue(sdkKey); + rKey.Close(); + } + if (sReg != null) + sReg += @"\Media\"; + else + return string.Empty; + + return sReg; + } + } + + + + + /// + /// Performs timer opertations. Use the following commands: + /// + /// DirectXTimer.Reset - to reset the timer + /// DirectXTimer.Start - to start the timer + /// DirectXTimer.Stop - to stop (or pause) the timer + /// DirectXTimer.Advance - to advance the timer by 0.1 seconds + /// DirectXTimer.GetAbsoluteTime - to get the absolute system time + /// DirectXTimer.GetApplicationTime - to get the current time + /// DirectXTimer.GetElapsedTime - to get the time that elapsed between TIMER_GETELAPSEDTIME calls + /// + /// + public static float Timer(DirectXTimer command) { + if (!isTimerInitialized) { + isTimerInitialized = true; + + // Use QueryPerformanceFrequency() to get frequency of timer. If QPF is + // not supported, we will timeGetTime() which returns milliseconds. + long qwTicksPerSec = 0; + m_bUsingQPF = QueryPerformanceFrequency(ref qwTicksPerSec); + if (m_bUsingQPF) + m_llQPFTicksPerSec = qwTicksPerSec; + } + if (m_bUsingQPF) { + double time; + double fElapsedTime; + long qwTime = 0; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_llStopTime != 0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + qwTime = m_llStopTime; + else + QueryPerformanceCounter(ref qwTime); + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (qwTime - m_llLastElapsedTime) / (double) m_llQPFTicksPerSec; + m_llLastElapsedTime = qwTime; + return (float)fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + double fAppTime = (double) (qwTime - m_llBaseTime) / (double) m_llQPFTicksPerSec; + return (float)fAppTime; + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_llBaseTime = qwTime; + m_llLastElapsedTime = qwTime; + m_llStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_llBaseTime += qwTime - m_llStopTime; + m_llStopTime = 0; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_llStopTime = qwTime; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_llStopTime += m_llQPFTicksPerSec/10; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + time = qwTime / (double) m_llQPFTicksPerSec; + return (float)time; + } + + return -1.0f; // Invalid command specified + } + else { + // Get the time using timeGetTime() + double time; + double fElapsedTime; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_fStopTime != 0.0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + time = m_fStopTime; + else + time = timeGetTime() * 0.001; + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (time - m_fLastElapsedTime); + m_fLastElapsedTime = time; + return (float) fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + return (float) (time - m_fBaseTime); + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_fBaseTime = time; + m_fLastElapsedTime = time; + m_fStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_fBaseTime += time - m_fStopTime; + m_fStopTime = 0.0f; + m_fLastElapsedTime = time; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_fStopTime = time; + m_fLastElapsedTime = time; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_fStopTime += 0.1f; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + return (float) time; + } + + return -1.0f; // Invalid command specified + } + } + + + + + /// + /// Returns a valid path to a DXSDK media file + /// + /// Initial path to search + /// Filename we're searching for + /// Full path to the file + public static string FindMediaFile(string path, string filename) { + // First try to load the file in the full path + if (path != null) { + if (File.Exists(AppendDirectorySeparator(path) + filename)) + return AppendDirectorySeparator(path) + filename; + } + + // if not try to find the filename in the current folder. + if (File.Exists(filename)) + return AppendDirectorySeparator(Directory.GetCurrentDirectory()) + filename; + + // last, check if the file exists in the media directory + if (File.Exists(AppendDirectorySeparator(SdkMediaPath) + filename)) + return AppendDirectorySeparator(SdkMediaPath) + filename; + + throw new FileNotFoundException("Could not find this file.", filename); + } + + + + + /// + /// Returns a valid string with a directory separator at the end. + /// + private static string AppendDirectorySeparator(string filename) { + if (!filename.EndsWith(@"\")) + return filename + @"\"; + + return filename; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/GameClass.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/GameClass.cs new file mode 100644 index 0000000..c6b61a4 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/GameClass.cs @@ -0,0 +1,162 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public delegate void MessageDelegate(byte message); // Delegate for messages arriving via DirectPlay. +public delegate void AudioDelegate(); // Delegate to handle audio playback. +public delegate void PeerCloseCallback(); // This delegate will be called when the session terminated event is fired. + +public class GameClass : GraphicsSample { + private GraphicsFont drawingFont = null; + private Point destination = new Point(0, 0); + private InputClass input = null; + + private PlayClass play = null; + private bool networkEnabled; + private PlayClass peer = null; + private PositionedMesh spaceSphere = null; + private PositionedMesh playerShip = null; + private Camera camera = null; + + private string debugText; + public string DebugText { + get { return debugText; } + set { debugText = value; } + } + private bool debugging = true; + + public GameClass(bool startFullScreen, Size size, bool enableNetwork) { + this.startFullscreen = startFullScreen; + this.Size = size; + this.networkEnabled = enableNetwork; + this.Text = "SpaceWar3D-Step05"; + + drawingFont = new GraphicsFont( "Verdana", System.Drawing.FontStyle.Regular); + + input = new InputClass(this); + camera = new Camera(); + + if (networkEnabled) { + peer = new PlayClass(this); + } + + } + + private void ProcessInput() { + //Get input + KeyboardState kbState = input.GetInputState(); + if (kbState == null) + return; + if (kbState[Key.Up]) { + camera.MoveRel(0,0,elapsedTime * 10); + } + if (kbState[Key.Down]) { + camera.MoveRel(0,0,-elapsedTime * 10); + } + if (kbState[Key.Right]) { + camera.RotateRel(0,elapsedTime,0); + } + if (kbState[Key.Left]) { + camera.RotateRel(0,-elapsedTime,0); + } + } + + protected override void FrameMove() { + ProcessInput(); + int fps = (int) framePerSecond; + debugText = "FPS: " + fps.ToString() + "\r\n"; + debugText += "Use the arrow keys to move or rotate the camera. \r\n\r\n"; + debugText += "Camera Location: X: " + camera.Loc.X.ToString() + + " Y: " + camera.Loc.Y.ToString() + " Z: " + camera.Loc.Z.ToString(); + //rotate space very slowly for that nice twinkly star effect + spaceSphere.Position.RotateRel(-.001f * elapsedTime,-0.0001f * elapsedTime, 0); + + //rotate the ship + playerShip.Position.RotateRel(0, -elapsedTime * .2f, 0); + } + + + /// + /// Called once per frame, the call is the entry point for 3d rendering. This + /// function sets up render states, clears the viewport, and renders the scene. + /// + protected override void Render() { + //Clear the backbuffer to a Blue color + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + + //Set the view matrix + device.Transform.View = camera.ViewMatrix; + + //Begin the scene + device.BeginScene(); + device.RenderState.ZBufferEnable = false; + device.RenderState.Lighting = false; + spaceSphere.Render(); + device.RenderState.Lighting = true; + device.RenderState.ZBufferEnable = true; + + device.Transform.World = playerShip.Position.WorldMatrix; + playerShip.Render(); + + if (debugging) { + drawingFont.DrawText(5,5,Color.Yellow,debugText); + } + device.EndScene(); + } + + /// + /// Initialize scene objects. + /// + protected override void InitializeDeviceObjects() { + drawingFont.InitializeDeviceObjects(device); + camera.Point(0,5,-30,0,0,0); + + spaceSphere = new PositionedMesh(device, "SpaceSphere.x"); + playerShip = new PositionedMesh(device, "WhiteShip.x"); + } + + /// + /// Called when a device needs to be restored. + /// + protected override void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { + device.RenderState.Ambient = Color.FromArgb(150,150,150); + device.RenderState.SpecularEnable = true; + device.Lights[0].Type = LightType.Directional; + device.Lights[0].Direction = new Vector3(0,-1, -1); + device.Lights[0].Diffuse = Color.White; + device.Lights[0].Specular = Color.White; + device.Lights[0].Enabled = true; + + device.RenderState.Lighting = true; + device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, + presentParams.BackBufferWidth/presentParams.BackBufferHeight, + 1.5f, 20000.0f ); + device.Transform.View = camera.ViewMatrix; + + playerShip.Position.Move(0,0,0); + playerShip.Position.Rotate(0,(float)Math.PI,0); + } + + protected override void Dispose(bool disposing) { + if (networkEnabled) + play.Dispose(); + base.Dispose(disposing); + } + + public void MessageArrived(byte message) { + + } + + /// + // When the peer closes, the code here is executed. + /// + public void PeerClose() { + // The session was terminated, go ahead and shut down + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/GameClass.resx b/Source Code updated 08-12-05/Spacewar3D/Step05/GameClass.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/GameClass.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/HelpScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/HelpScreen.cs new file mode 100644 index 0000000..7d54363 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/HelpScreen.cs @@ -0,0 +1,113 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.IO; + + + /// + /// Summary description for HelpScreen. + /// +public class HelpScreen : System.Windows.Forms.Form { + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.TextBox helpText; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public HelpScreen() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + string helpFile = MediaUtilities.FindFile("Help.txt"); + if (File.Exists(helpFile)) { + StreamReader sr; + try { + sr = new StreamReader(helpFile); + helpText.Text = sr.ReadToEnd(); + sr.Close(); + } + catch ( Exception e ) { + helpText.Text = e.ToString(); + } + + } + else { + helpText.Text = "Unable to locate " + helpFile.ToString(); + } + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.closeButton = new System.Windows.Forms.Button(); + this.helpText = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // closeButton + // + this.closeButton.BackColor = System.Drawing.Color.Black; + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.Dock = System.Windows.Forms.DockStyle.Bottom; + this.closeButton.ForeColor = System.Drawing.Color.Red; + this.closeButton.Location = new System.Drawing.Point(0, 615); + this.closeButton.Name = "closeButton"; + this.closeButton.Size = new System.Drawing.Size(616, 23); + this.closeButton.TabIndex = 0; + this.closeButton.Text = "Close"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // helpText + // + this.helpText.BackColor = System.Drawing.Color.Black; + this.helpText.Dock = System.Windows.Forms.DockStyle.Fill; + this.helpText.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.helpText.ForeColor = System.Drawing.Color.Red; + this.helpText.Location = new System.Drawing.Point(0, 0); + this.helpText.Multiline = true; + this.helpText.Name = "helpText"; + this.helpText.ReadOnly = true; + this.helpText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.helpText.Size = new System.Drawing.Size(616, 615); + this.helpText.TabIndex = 1; + this.helpText.TabStop = false; + this.helpText.Text = ""; + // + // HelpScreen + // + this.AcceptButton = this.closeButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(616, 638); + this.Controls.Add(this.helpText); + this.Controls.Add(this.closeButton); + this.Name = "HelpScreen"; + this.Text = "SpaceWar! Help"; + this.ResumeLayout(false); + + } + #endregion + + private void closeButton_Click(object sender, System.EventArgs e) { + this.Close(); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/HelpScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step05/HelpScreen.resx new file mode 100644 index 0000000..a4f535a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/HelpScreen.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + HelpScreen + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/MediaUtilities.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/MediaUtilities.cs new file mode 100644 index 0000000..685a63d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/MediaUtilities.cs @@ -0,0 +1,35 @@ +using System; +using System.IO; +using System.Configuration; + + + /// + /// Summary description for MediaUtilities. + /// +public class MediaUtilities { + // private static string defaultPath = @"..\..\media\"; + private static string mediaPath = ConfigurationSettings.AppSettings.Get("MediaPath"); + + public MediaUtilities() { + } + + public static string FindFile(string filename) { + return FindFile(mediaPath, filename); + } + + public static string FindFile(string path, string filename) { + // First try to load the file in the full path + string fullName = AppendDirectorySeparator(path) + filename; + if (File.Exists(fullName)) + return fullName; + else + throw new FileNotFoundException("Could not find this file.", filename); + } + + private static string AppendDirectorySeparator(string pathname) { + if (!pathname.EndsWith(@"\")) + return pathname + @"\"; + else + return pathname; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/PositionedMesh.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/PositionedMesh.cs new file mode 100644 index 0000000..9e7734b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/PositionedMesh.cs @@ -0,0 +1,435 @@ +using System; +using System.Drawing; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public class PositionedMesh : IDisposable { + private Device device = null; + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + private Sphere boundingSphere; + + + private WorldPosition worldPosition; + public WorldPosition Position { get { return worldPosition; } set { worldPosition = value; } } + + private float velocity; + public float Velocity { get { return velocity; } set { velocity = value; } } + + /// + /// Constructor + /// + /// The initial filename + public PositionedMesh(string filename) { + fileName = filename; + } + public PositionedMesh() : this ("CD3DFile_Mesh") {} + + public PositionedMesh(Device device, string filename) { + Create(device, filename); + } + + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + /// + ///The bounding sphere + /// + public Sphere BoundingSphere { + get { return boundingSphere; } + } + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + worldPosition = new WorldPosition(); + + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + this.device = device; + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + + + + filename = MediaUtilities.FindFile(filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(filename, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + + Mesh tempMesh = null; + string errorString; + tempMesh = Mesh.Clean(CleanType.Optimization, systemMemoryMesh, adjacencyBuffer, adjacencyBuffer, out errorString); + if (tempMesh != systemMemoryMesh) { + systemMemoryMesh.Dispose(); + systemMemoryMesh = tempMesh; + } + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + + // Setup bounding volumes + VertexBuffer vb = systemMemoryMesh.VertexBuffer; + GraphicsStream vertexData = vb.Lock(0, 0, LockFlags.NoSystemLock); + boundingSphere.Radius = Geometry.ComputeBoundingSphere(vertexData,systemMemoryMesh.NumberVertices,systemMemoryMesh.VertexFormat, out boundingSphere.CenterPoint); + vb.Unlock(); + vb.Dispose(); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + + + } + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. + localMemoryMesh = systemMemoryMesh.Clone(MeshFlags.VbWriteOnly | MeshFlags.IbWriteOnly, + systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + // Set the world transform + device.Transform.World = worldPosition.WorldMatrix; + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render() { + Render(true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/SphereStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/SphereStruct.cs new file mode 100644 index 0000000..90d9d6f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/SphereStruct.cs @@ -0,0 +1,6 @@ +using Microsoft.DirectX; + +public struct Sphere { + public Vector3 CenterPoint; + public float Radius; +}; \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/SplashScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/SplashScreen.cs new file mode 100644 index 0000000..9ffea2c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/SplashScreen.cs @@ -0,0 +1,237 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + + + /// + /// Spacewar Splashscreen + /// +public class SplashScreen : System.Windows.Forms.Form { + private MainClass mainClass; + private System.Windows.Forms.Button helpButton; + private System.Windows.Forms.Button startButton; + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.Button soloButton; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.CheckBox checkBox1; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + public SplashScreen(MainClass main) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + this.mainClass = main; + radioButton3.Checked = true; + checkBox1.Checked = true; + mainClass.GameFormSize = new Size(1024,768); + mainClass.FullScreen = true; + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(SplashScreen)); + this.helpButton = new System.Windows.Forms.Button(); + this.startButton = new System.Windows.Forms.Button(); + this.closeButton = new System.Windows.Forms.Button(); + this.soloButton = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // helpButton + // + this.helpButton.ForeColor = System.Drawing.Color.White; + this.helpButton.Location = new System.Drawing.Point(440, 280); + this.helpButton.Name = "helpButton"; + this.helpButton.Size = new System.Drawing.Size(136, 32); + this.helpButton.TabIndex = 5; + this.helpButton.Text = "Show Help"; + this.helpButton.Click += new System.EventHandler(this.helpButton_Click); + // + // startButton + // + this.startButton.ForeColor = System.Drawing.Color.White; + this.startButton.Location = new System.Drawing.Point(440, 364); + this.startButton.Name = "startButton"; + this.startButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.startButton.Size = new System.Drawing.Size(136, 32); + this.startButton.TabIndex = 7; + this.startButton.Text = "Network Play"; + this.startButton.Click += new System.EventHandler(this.startButton_Click); + // + // closeButton + // + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.ForeColor = System.Drawing.Color.White; + this.closeButton.Location = new System.Drawing.Point(440, 406); + this.closeButton.Name = "closeButton"; + this.closeButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.closeButton.Size = new System.Drawing.Size(136, 32); + this.closeButton.TabIndex = 8; + this.closeButton.Text = "Exit"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // soloButton + // + this.soloButton.ForeColor = System.Drawing.Color.White; + this.soloButton.Location = new System.Drawing.Point(440, 322); + this.soloButton.Name = "soloButton"; + this.soloButton.Size = new System.Drawing.Size(136, 32); + this.soloButton.TabIndex = 6; + this.soloButton.Text = "Solo Play"; + this.soloButton.Click += new System.EventHandler(this.soloButton_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.radioButton3); + this.groupBox1.Controls.Add(this.radioButton2); + this.groupBox1.Controls.Add(this.radioButton1); + this.groupBox1.ForeColor = System.Drawing.Color.White; + this.groupBox1.Location = new System.Drawing.Point(16, 320); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(128, 128); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Screen Resolution"; + // + // checkBox1 + // + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(16, 96); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.TabIndex = 3; + this.checkBox1.Text = "Full Screen"; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // radioButton3 + // + this.radioButton3.Checked = true; + this.radioButton3.ForeColor = System.Drawing.Color.White; + this.radioButton3.Location = new System.Drawing.Point(16, 72); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(80, 24); + this.radioButton3.TabIndex = 2; + this.radioButton3.TabStop = true; + this.radioButton3.Text = "1024 x 768"; + this.radioButton3.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton2 + // + this.radioButton2.ForeColor = System.Drawing.Color.White; + this.radioButton2.Location = new System.Drawing.Point(16, 48); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(72, 24); + this.radioButton2.TabIndex = 1; + this.radioButton2.Text = "800 x 600"; + this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton1 + // + this.radioButton1.ForeColor = System.Drawing.Color.White; + this.radioButton1.Location = new System.Drawing.Point(16, 24); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(72, 24); + this.radioButton1.TabIndex = 0; + this.radioButton1.Text = "640 x 480"; + this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // SplashScreen + // + this.AcceptButton = this.soloButton; + this.AutoScale = false; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.Black; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(594, 454); + this.ControlBox = false; + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.soloButton); + this.Controls.Add(this.closeButton); + this.Controls.Add(this.startButton); + this.Controls.Add(this.helpButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(600, 460); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(600, 460); + this.Name = "SplashScreen"; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + private void helpButton_Click(object sender, System.EventArgs e) { + HelpScreen helpScreen = new HelpScreen(); + helpScreen.ShowDialog(); + } + + private void startButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = true; + this.Close(); + } + + private void closeButton_Click(object sender, System.EventArgs e) { + Environment.Exit(0); + } + + private void soloButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = false; + this.Close(); + } + + private void radioButton_CheckedChanged(object sender, System.EventArgs e) { + RadioButton btn = (RadioButton)sender; + Console.WriteLine(btn.ToString()); + if (btn.Checked) { + if (btn == radioButton1) + mainClass.GameFormSize = new Size(640,480); + if (btn == radioButton2) + mainClass.GameFormSize = new Size(800, 600); + if (btn == radioButton3) + mainClass.GameFormSize = new Size(1024, 768); + } + } + + private void checkBox1_CheckedChanged(object sender, System.EventArgs e) { + mainClass.FullScreen = checkBox1.Checked; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/SplashScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step05/SplashScreen.resx new file mode 100644 index 0000000..18fad73 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/SplashScreen.resx @@ -0,0 +1,4715 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + False + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + False + + + 80 + + + True + + + Private + + + SplashScreen + + + + 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 + AElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/Step05.sln b/Source Code updated 08-12-05/Spacewar3D/Step05/Step05.sln new file mode 100644 index 0000000..68a8827 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/Step05.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Step5", "Step5.csproj", "{DE8FEF2E-6E28-4456-9712-68437802A747}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.ActiveCfg = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.Build.0 = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.ActiveCfg = Release|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/Step5.csproj b/Source Code updated 08-12-05/Spacewar3D/Step05/Step5.csproj new file mode 100644 index 0000000..233c574 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/Step5.csproj @@ -0,0 +1,289 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/WorldPosition.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/WorldPosition.cs new file mode 100644 index 0000000..2f26c10 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/WorldPosition.cs @@ -0,0 +1,214 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + +[Serializable] +public class WorldPosition { + public float XPosition {get { return xPos; } set { xPos = value; } } + public float YPosition {get { return yPos; } set { yPos = value; } } + public float ZPosition {get { return zPos; } set { zPos = value; } } + + public float XRotation { get { return xRotation; } set { xRotation = value; } } + public float YRotation { get { return yRotation; } set { yRotation = value; } } + public float ZRotation { get { return zRotation; } set { zRotation = value; } } + + public float XScale { get { return xScale; } set { xScale = value; } } + public float YScale { get { return yScale; } set { yScale = value; } } + public float ZScale { get { return zScale; } set { zScale = value; } } + + + public Matrix WorldMatrix { + get { + Update(); + return worldMatrix; + } + set { + worldMatrix = value; + Location = Vector3.TransformCoordinate(new Vector3(0,0,0), worldMatrix); + Point(Location, Location+Direction); + Roll(Location, Location+Up); + } + } + + public Vector3 Direction { + get { + Vector3 directionVector= new Vector3(0,0,1); + return Vector3.TransformNormal(directionVector, worldMatrix); + } + } + + public Vector3 Up { + get { + Vector3 upVector = new Vector3(0,1,0); + return Vector3.TransformNormal(upVector,worldMatrix); + } + } + public Vector3 Right { + get { + Vector3 rightVector = new Vector3(1,0,0); + return Vector3.TransformNormal(rightVector,worldMatrix); + } + } + + public Vector3 Location { + get { + return new Vector3( xPos, yPos, zPos ); + } + set { + Move(value); + } + } + + public Vector3 Rotation { + get { + return new Vector3( xRotation, yRotation, zRotation); + } + set { + Rotate(value); + } + } + + + + private float xPos, yPos, zPos = 0.0f; + private float xRotation, yRotation, zRotation = 0.0f; + private float xScale, yScale, zScale = 0.0f; + + private Matrix worldMatrix, scaleMatrix, rotationMatrix = Matrix.Identity; + private Matrix translationMatrix = Matrix.Identity; + private Matrix combineMatrix1, combineMatrix2; + + public Matrix CombineMatrix1 { get { return combineMatrix1; } set { combineMatrix1 = value; } } + public Matrix CombineMatrix2 { get { return combineMatrix2; } set { combineMatrix2 = value; } } + + + public WorldPosition() { + + Move(0.0f, 0.0f, 0.0f); + Rotate(0.0f, 0.0f, 0.0f); + Scale(1.0f, 1.0f, 1.0f); + combineMatrix1 = combineMatrix2 = Matrix.Zero; + + Update(); + + } + + public Vector3 CombinedLocation { + get { + Update(); + return new Vector3(worldMatrix.M41,worldMatrix.M42,worldMatrix.M43); + } + } + + public void Move( Vector3 newPosition ) { + Move( newPosition.X, newPosition.Y, newPosition.Z ); + } + + public void Move( float x, float y, float z ) { + xPos = x; + yPos = y; + zPos = z; + + translationMatrix = Matrix.Translation( xPos, yPos, zPos ); + } + + public void MoveRel( float x, float y, float z ) { + Move(xPos + x, yPos + y, zPos + z ); + } + + public void Rotate( Vector3 newDirection ) { + Rotate(newDirection.X, newDirection.Y, newDirection.Z); + } + + public void Point(Vector3 pointAtLocation) { + Point(xPos, yPos, zPos, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(Vector3 currentLocation, Vector3 pointAtLocation) { + Point(currentLocation.X, currentLocation.Y, currentLocation.Z, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } + + public void Roll(Vector3 Location, Vector3 UpVector) { + float xDiff, yDiff; + xDiff = Location.X - UpVector.X; + yDiff = Location.Y - UpVector.Y; + zRotation = (float) Math.Atan2(xDiff, yDiff); + } + + + + + public void Rotate( float x, float y, float z ) { + xRotation = x; + yRotation = y; + zRotation = z; + + rotationMatrix = Matrix.RotationYawPitchRoll( yRotation, xRotation, zRotation ); + } + + public void RotateRel( float x, float y, float z ) { + Rotate( xRotation + x, yRotation + y, zRotation + z ); + } + + //YawPitchRoll rotates an object relative to its own orthonormal basis vectors + public void YawPitchRoll( float yaw, float pitch, float roll) { + + Matrix yawMatrix = Matrix.RotationAxis(this.Up, yaw); + Matrix pitchMatrix = Matrix.RotationAxis(this.Right, pitch); + Matrix rollMatrix = Matrix.RotationAxis(this.Direction, roll); + + Matrix ypr = yawMatrix * pitchMatrix * rollMatrix; + rotationMatrix *= ypr; + + + } + + public void Scale( float x, float y, float z ) { + xScale = x; + yScale = y; + zScale = z; + + scaleMatrix = Matrix.Scaling( xScale, yScale, zScale ); + + } + + public void ScaleRel( float x, float y, float z ) { + Scale( xScale + x, yScale + y, zScale + z ); + } + + + public void Update() { + + Matrix m; + + + + m = scaleMatrix; + m *= rotationMatrix; + m *= translationMatrix; + if (combineMatrix1 != Matrix.Zero) + m *= combineMatrix1; + if (combineMatrix2 != Matrix.Zero) + m *= combineMatrix2; + + worldMatrix = m; + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/d3dapp.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/d3dapp.cs new file mode 100644 index 0000000..9384434 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/d3dapp.cs @@ -0,0 +1,1517 @@ +//----------------------------------------------------------------------------- +// File: D3DApp.cs +// +// Desc: Application class for the Direct3D samples framework library. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + +/// +/// The base class for all the graphics (D3D) samples, it derives from windows forms +/// +public class GraphicsSample : System.Windows.Forms.Form { + #region Menu Information + // The menu items that *all* samples will need + protected System.Windows.Forms.MainMenu mnuMain; + protected System.Windows.Forms.MenuItem mnuFile; + private System.Windows.Forms.MenuItem mnuGo; + private System.Windows.Forms.MenuItem mnuSingle; + private System.Windows.Forms.MenuItem mnuBreak1; + private System.Windows.Forms.MenuItem mnuChange; + private System.Windows.Forms.MenuItem mnuBreak2; + protected System.Windows.Forms.MenuItem mnuExit; + #endregion + + // The window we will render too + private System.Windows.Forms.Control ourRenderTarget; + // Should we use the default windows + protected bool isUsingMenus = true; + + // We need to keep track of our enumeration settings + protected D3DEnumeration enumerationSettings = new D3DEnumeration(); + protected D3DSettings graphicsSettings = new D3DSettings(); + private bool isMaximized = false; // Are we maximized? + private bool isHandlingSizeChanges = true; // Are we handling size changes? + private bool isClosing = false; // Are we closing? + private bool isChangingFormStyle = false; // Are we changing the forms style? + private bool isWindowActive = true; // Are we waiting for got focus? + + private float lastTime = 0.0f; // The last time + private int frames = 0; // Number of frames since our last update + private int appPausedCount = 0; // How many times has the app been paused (and when can it resume)? + + // Internal variables for the state of the app + protected bool windowed; + protected bool active; + protected bool ready; + protected bool hasFocus; + protected bool isMultiThreaded = false; + + // Internal variables used for timing + protected bool frameMoving; + protected bool singleStep; + // Main objects used for creating and rendering the 3D scene + protected PresentParameters presentParams = new PresentParameters(); // Parameters for CreateDevice/Reset + protected Device device; // The rendering device + protected RenderStateManager renderState; + protected SamplerStateManagerCollection sampleState; + protected TextureStateManagerCollection textureStates; + private Caps graphicsCaps; // Caps for the device + protected Caps Caps { get { return graphicsCaps; } } + private CreateFlags behavior; // Indicate sw or hw vertex processing + protected BehaviorFlags BehaviorFlags { get { return new BehaviorFlags(behavior); } } + protected System.Windows.Forms.Control RenderTarget { get { return ourRenderTarget; } set { ourRenderTarget = value; } } + + // Variables for timing + protected float appTime; // Current time in seconds + protected float elapsedTime; // Time elapsed since last frame + protected float framePerSecond; // Instanteous frame rate + protected string deviceStats;// String to hold D3D device stats + protected string frameStats; // String to hold frame stats + + private bool deviceLost = false; + + // Overridable variables for the app + private int minDepthBits; // Minimum number of bits needed in depth buffer + protected int MinDepthBits { get { return minDepthBits; } set { minDepthBits = value; enumerationSettings.AppMinDepthBits = value;} } + private int minStencilBits; // Minimum number of bits needed in stencil buffer + protected int MinStencilBits { get { return minStencilBits; } set { minStencilBits = value; enumerationSettings.AppMinStencilBits = value;} } + protected bool showCursorWhenFullscreen; // Whether to show cursor when fullscreen + protected bool clipCursorWhenFullscreen; // Whether to limit cursor pos when fullscreen + protected bool startFullscreen; // Whether to start up the app in fullscreen mode + + private System.Drawing.Size storedSize; + private System.Drawing.Point storedLocation; + + // Overridable functions for the 3D scene created by the app + protected virtual bool ConfirmDevice(Caps caps, VertexProcessingType vertexProcessingType, + Format adapterFormat, Format backBufferFormat) { return true; } + protected virtual void OneTimeSceneInitialization() { /* Do Nothing */ } + protected virtual void InitializeDeviceObjects() { /* Do Nothing */ } + protected virtual void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void FrameMove() { /* Do Nothing */ } + protected virtual void Render() { /* Do Nothing */ } + protected virtual void InvalidateDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void DeleteDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + + + + + /// + /// Constructor + /// + public GraphicsSample() { + device = null; + active = false; + ready = false; + hasFocus = false; + behavior = 0; + + ourRenderTarget = this; + frameMoving = true; + singleStep = false; + framePerSecond = 0.0f; + deviceStats = null; + frameStats = null; + + this.Text = "D3D9 Sample"; + this.ClientSize = new System.Drawing.Size(400,300); + this.KeyPreview = true; + + minDepthBits = 16; + minStencilBits = 0; + showCursorWhenFullscreen = false; + startFullscreen = false; + + // When clipCursorWhenFullscreen is TRUE, the cursor is limited to + // the device window when the app goes fullscreen. This prevents users + // from accidentally clicking outside the app window on a multimon system. + // This flag is turned off by default for debug builds, since it makes + // multimon debugging difficult. +#if (DEBUG) + clipCursorWhenFullscreen = false; +#else + clipCursorWhenFullscreen = true; +#endif + InitializeComponent(); + } + + + + + /// + /// Picks the best graphics device, and initializes it + /// + /// true if a good device was found, false otherwise + public bool CreateGraphicsSample() { + enumerationSettings.ConfirmDeviceCallback = new D3DEnumeration.ConfirmDeviceCallbackType(this.ConfirmDevice); + enumerationSettings.Enumerate(); + + if (ourRenderTarget.Cursor == null) { + // Set up a default cursor + ourRenderTarget.Cursor = System.Windows.Forms.Cursors.Default; + } + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + + try { + ChooseInitialSettings(); + + // Initialize the application timer + DXUtil.Timer(DirectXTimer.Start); + // Initialize the app's custom scene stuff + OneTimeSceneInitialization(); + // Initialize the 3D environment for the app + InitializeEnvironment(); + } + catch (SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + return false; + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + return false; + } + + // The app is ready to go + ready = true; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available windowed mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestWindowedMode(bool doesRequireHardware, bool doesRequireReference) { + // Get display mode of primary adapter (which is assumed to be where the window + // will appear) + DisplayMode primaryDesktopDisplayMode = Manager.Adapters[0].CurrentDisplayMode; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + if (!deviceCombo.IsWindowed) + continue; + if (deviceCombo.AdapterFormat != primaryDesktopDisplayMode.Format) + continue; + + // If we haven't found a compatible DeviceCombo yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + deviceCombo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + // This windowed device combo looks great -- take it + goto EndWindowedDeviceComboSearch; + } + // Otherwise keep looking for a better windowed device combo + } + } + } + } + + EndWindowedDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + graphicsSettings.WindowedAdapterInfo = bestAdapterInfo; + graphicsSettings.WindowedDeviceInfo = bestDeviceInfo; + graphicsSettings.WindowedDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = true; + graphicsSettings.WindowedDisplayMode = primaryDesktopDisplayMode; + graphicsSettings.WindowedWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + graphicsSettings.WindowedHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.WindowedDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.WindowedMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.WindowedMultisampleQuality = 0; + graphicsSettings.WindowedVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.WindowedPresentInterval = (PresentInterval)bestDeviceCombo.PresentIntervalList[0]; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available fullscreen mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestFullscreenMode(bool doesRequireHardware, bool doesRequireReference) { + // For fullscreen, default to first HAL DeviceCombo that supports the current desktop + // display mode, or any display mode if HAL is not compatible with the desktop mode, or + // non-HAL if no HAL is available + DisplayMode adapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestAdapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestDisplayMode = new DisplayMode(); + bestAdapterDesktopDisplayMode.Width = 0; + bestAdapterDesktopDisplayMode.Height = 0; + bestAdapterDesktopDisplayMode.Format = 0; + bestAdapterDesktopDisplayMode.RefreshRate = 0; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + adapterDesktopDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + bool adapterMatchesDesktop = (deviceCombo.AdapterFormat == adapterDesktopDisplayMode.Format); + if (deviceCombo.IsWindowed) + continue; + + // If we haven't found a compatible set yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + bestDeviceCombo.DevType == DeviceType.Hardware && bestDeviceCombo.AdapterFormat != adapterDesktopDisplayMode.Format && adapterMatchesDesktop || + bestDeviceCombo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + bestAdapterDesktopDisplayMode = adapterDesktopDisplayMode; + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + // This fullscreen device combo looks great -- take it + goto EndFullscreenDeviceComboSearch; + } + // Otherwise keep looking for a better fullscreen device combo + } + } + } + } + + EndFullscreenDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + // Need to find a display mode on the best adapter that uses pBestDeviceCombo->AdapterFormat + // and is as close to bestAdapterDesktopDisplayMode's res as possible + bestDisplayMode.Width = 0; + bestDisplayMode.Height = 0; + bestDisplayMode.Format = 0; + bestDisplayMode.RefreshRate = 0; + foreach (DisplayMode displayMode in bestAdapterInfo.DisplayModeList) { + if (displayMode.Format != bestDeviceCombo.AdapterFormat) + continue; + if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate == bestAdapterDesktopDisplayMode.RefreshRate) { + // found a perfect match, so stop + bestDisplayMode = displayMode; + break; + } + else if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate > bestDisplayMode.RefreshRate) { + // refresh rate doesn't match, but width/height match, so keep this + // and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == bestAdapterDesktopDisplayMode.Width) { + // width matches, so keep this and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == 0) { + // we don't have anything better yet, so keep this and keep looking + bestDisplayMode = displayMode; + } + } + + graphicsSettings.FullscreenAdapterInfo = bestAdapterInfo; + graphicsSettings.FullscreenDeviceInfo = bestDeviceInfo; + graphicsSettings.FullscreenDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = false; + graphicsSettings.FullscreenDisplayMode = bestDisplayMode; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.FullscreenDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.FullscreenMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.FullscreenMultisampleQuality = 0; + graphicsSettings.FullscreenVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.FullscreenPresentInterval = PresentInterval.Default; + + return true; + } + + + + + /// + /// Choose the initial settings for the application + /// + /// true if the settings were initialized + public bool ChooseInitialSettings() { + bool foundFullscreenMode = FindBestFullscreenMode(false, false); + bool foundWindowedMode = FindBestWindowedMode(false, false); + if (startFullscreen && foundFullscreenMode) + graphicsSettings.IsWindowed = false; + + if (!foundFullscreenMode && !foundWindowedMode) + throw new NoCompatibleDevicesException(); + + return (foundFullscreenMode || foundWindowedMode); + } + + + + + /// + /// Build presentation parameters from the current settings + /// + public void BuildPresentParamsFromSettings() { + presentParams.Windowed = graphicsSettings.IsWindowed; + presentParams.BackBufferCount = 1; + presentParams.MultiSample = graphicsSettings.MultisampleType; + presentParams.MultiSampleQuality = graphicsSettings.MultisampleQuality; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.EnableAutoDepthStencil = enumerationSettings.AppUsesDepthBuffer; + presentParams.AutoDepthStencilFormat = graphicsSettings.DepthStencilBufferFormat; + presentParams.PresentFlag = PresentFlag.None; + + if (windowed) { + presentParams.BackBufferWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + presentParams.BackBufferHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = 0; + presentParams.PresentationInterval = PresentInterval.Immediate; + presentParams.DeviceWindow = ourRenderTarget; + } + else { + presentParams.BackBufferWidth = graphicsSettings.DisplayMode.Width; + presentParams.BackBufferHeight = graphicsSettings.DisplayMode.Height; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = graphicsSettings.DisplayMode.RefreshRate; + presentParams.PresentationInterval = graphicsSettings.PresentInterval; + presentParams.DeviceWindow = this; + } + } + + + + + /// + /// Initialize the graphics environment + /// + public void InitializeEnvironment() { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + GraphicsDeviceInfo deviceInfo = graphicsSettings.DeviceInfo; + + windowed = graphicsSettings.IsWindowed; + + // Set up the presentation parameters + BuildPresentParamsFromSettings(); + + if (deviceInfo.Caps.PrimitiveMiscCaps.IsNullReference) { + // Warn user about null ref device that can't render anything + HandleSampleException(new NullReferenceDeviceException(), ApplicationMessage.None); + } + + CreateFlags createFlags = new CreateFlags(); + if (graphicsSettings.VertexProcessingType == VertexProcessingType.Software) + createFlags = CreateFlags.SoftwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Mixed) + createFlags = CreateFlags.MixedVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Hardware) + createFlags = CreateFlags.HardwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.PureHardware) { + createFlags = CreateFlags.HardwareVertexProcessing; + } + else + throw new ApplicationException(); +#if (DX9) +#else + // Make sure to allow multithreaded apps if we need them + presentParams.ForceNoMultiThreadedFlag = !isMultiThreaded; +#endif + try { + // Create the device + device = new Device(graphicsSettings.AdapterOrdinal, graphicsSettings.DevType, + windowed ? ourRenderTarget : this , createFlags, presentParams); + + // Cache our local objects + renderState = device.RenderState; + sampleState = device.SamplerState; + textureStates = device.TextureState; + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after recreating the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + if (windowed) { + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + } + + // Store device Caps + graphicsCaps = device.DeviceCaps; + behavior = createFlags; + + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + // Store device description + if (deviceInfo.DevType == DeviceType.Reference) + sb.Append("REF"); + else if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append("HAL"); + else if (deviceInfo.DevType == DeviceType.Software) + sb.Append("SW"); + + BehaviorFlags behaviorFlags = new BehaviorFlags(createFlags); + if ((behaviorFlags.HardwareVertexProcessing) && + (behaviorFlags.PureDevice)) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (pure hw vp)"); + else + sb.Append(" (simulated pure hw vp)"); + } + else if (behaviorFlags.HardwareVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (hw vp)"); + else + sb.Append(" (simulated hw vp)"); + } + else if (behaviorFlags.MixedVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (mixed vp)"); + else + sb.Append(" (simulated mixed vp)"); + } + else if (behaviorFlags.SoftwareVertexProcessing) { + sb.Append(" (sw vp)"); + } + + if (deviceInfo.DevType == DeviceType.Hardware) { + sb.Append(": "); + sb.Append(adapterInfo.AdapterDetails.Description); + } + + // Set device stats string + deviceStats = sb.ToString(); + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // Confine cursor to fullscreen window + if (clipCursorWhenFullscreen) { + if (!windowed) { + System.Drawing.Rectangle rcWindow = this.ClientRectangle; + } + } + + // Setup the event handlers for our device + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + device.Disposing += new System.EventHandler(this.DeleteDeviceObjects); + device.DeviceResizing += new System.ComponentModel.CancelEventHandler(this.EnvironmentResized); + + // Initialize the app's device-dependent objects + try { + InitializeDeviceObjects(); + RestoreDeviceObjects(null, null); + active = true; + return; + } + catch { + // Cleanup before we try again + InvalidateDeviceObjects(null, null); + DeleteDeviceObjects(null, null); + device.Dispose(); + device = null; + if (this.Disposing) + return; + } + } + catch { + // If that failed, fall back to the reference rasterizer + if (deviceInfo.DevType == DeviceType.Hardware) { + if (FindBestWindowedMode(false, true)) { + windowed = true; + + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + + // Let the user know we are switching from HAL to the reference rasterizer + HandleSampleException(null, ApplicationMessage.WarnSwitchToRef); + + InitializeEnvironment(); + } + } + } + } + + + + + /// + /// Displays sample exceptions to the user + /// + /// The exception that was thrown + /// Extra information on how to handle the exception + public void HandleSampleException(SampleException e, ApplicationMessage Type) { + // Build a message to display to the user + string strMsg = string.Empty; + if (e != null) + strMsg = e.Message; + + if (ApplicationMessage.ApplicationMustExit == Type) { + strMsg += "\n\nThis sample will now exit."; + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + + // Close the window, which shuts down the app + if (this.IsHandleCreated) + this.Close(); + } + else { + if (ApplicationMessage.WarnSwitchToRef == Type) + strMsg = "\n\nSwitching to the reference rasterizer,\n"; + strMsg += "a software device that implements the entire\n"; + strMsg += "Direct3D feature set, but runs very slowly."; + + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + } + } + + + + + /// + /// Fired when our environment was resized + /// + /// the device that's resizing our environment + /// Set the cancel member to true to turn off automatic device reset + public void EnvironmentResized(object sender, System.ComponentModel.CancelEventArgs e) { + // Check to see if we're closing or changing the form style + if ((isClosing) || (isChangingFormStyle)) { + // We are, cancel our reset, and exit + e.Cancel = true; + return; + } + + // Check to see if we're minimizing and our rendering object + // is not the form, if so, cancel the resize + if ((ourRenderTarget != this) && (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)) + e.Cancel = true; + + if (!isWindowActive) + e.Cancel = true; + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + } + + + + + /// + /// Called when user toggles between fullscreen mode and windowed mode + /// + public void ToggleFullscreen() { + int AdapterOrdinalOld = graphicsSettings.AdapterOrdinal; + DeviceType DevTypeOld = graphicsSettings.DevType; + + isHandlingSizeChanges = false; + isChangingFormStyle = true; + ready = false; + + // Toggle the windowed state + windowed = !windowed; + + // Save our maximized settings.. + if (!windowed && isMaximized) + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + + graphicsSettings.IsWindowed = windowed; + + // If AdapterOrdinal and DevType are the same, we can just do a Reset(). + // If they've changed, we need to do a complete device teardown/rebuild. + if (graphicsSettings.AdapterOrdinal == AdapterOrdinalOld && + graphicsSettings.DevType == DevTypeOld) { + BuildPresentParamsFromSettings(); + // Resize the 3D device + RETRY: + try { + device.Reset(presentParams); + } + catch { + if (windowed) + ForceWindowed(); + else { + // Sit in a loop until the device passes Reset() + try { + device.TestCooperativeLevel(); + } + catch(DeviceNotResetException) { + // Device still needs to be Reset. Try again. + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + goto RETRY; + } + } + } + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + else { + device.Dispose(); + device = null; + InitializeEnvironment(); + } + + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after resetting the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + + if (windowed) { + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; + isChangingFormStyle = false; + + // We were maximized, restore that state + if (isMaximized) { + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + } + this.SendToBack(); + this.BringToFront(); + this.ClientSize = storedSize; + this.Location = storedLocation; + } + else { + if (this.Menu != null) + this.Menu = null; + + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + isChangingFormStyle = false; + } + isHandlingSizeChanges = true; + ready = true; + } + + + + + /// + /// Switch to a windowed mode, even if that means picking a new device and/or adapter + /// + public void ForceWindowed() { + if (windowed) + return; + + if (!FindBestWindowedMode(false, false)) { + return; + } + windowed = true; + + // Now destroy the current 3D device objects, then reinitialize + + ready = false; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Create the new device + try { + InitializeEnvironment(); + } + catch (SampleException e) { + HandleSampleException(e,ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(),ApplicationMessage.ApplicationMustExit); + } + ready = true; + } + + + + + /// + /// Called when our sample has nothing else to do, and it's time to render + /// + private void FullRender() { + // Render a frame during idle time (no messages are waiting) + if (active && ready) { + try { + if ((deviceLost) || (System.Windows.Forms.Form.ActiveForm != this)) { + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + } + // Render a frame during idle time + if (active) { + Render3DEnvironment(); + } + } + catch (Exception ee) { + System.Windows.Forms.MessageBox.Show("An exception has occurred. This sample must exit.\r\n\r\n" + ee.ToString(), "Exception", + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + this.Close(); + } + } + } + + + + + /// + /// Run the simulation + /// + public void Run() { + // Now we're ready to recieve and process Windows messages. + System.Windows.Forms.Control mainWindow = this; + + // If the render target is a form and *not* this form, use that form instead, + // otherwise, use the main form. + if ((ourRenderTarget is System.Windows.Forms.Form) && (ourRenderTarget != this)) + mainWindow = ourRenderTarget; + + mainWindow.Show(); + while (mainWindow.Created) { + FullRender(); + System.Windows.Forms.Application.DoEvents(); + } + } + + + + + /// + /// Draws the scene + /// + public void Render3DEnvironment() { + if (deviceLost) { + try { + // Test the cooperative level to see if it's okay to render + device.TestCooperativeLevel(); + } + catch (DeviceLostException) { + // If the device was lost, do not render until we get it back + isHandlingSizeChanges = false; + isWindowActive = false; + return; + } + catch (DeviceNotResetException) { + // Check if the device needs to be resized. + + // If we are windowed, read the desktop mode and use the same format for + // the back buffer + if (windowed) { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + graphicsSettings.WindowedDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + presentParams.BackBufferFormat = graphicsSettings.WindowedDisplayMode.Format; + } + + // Reset the device and resize it + device.Reset(device.PresentationParameters); + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + deviceLost = false; + } + + // Get the app's time, in seconds. Skip rendering if no time elapsed + float fAppTime = DXUtil.Timer(DirectXTimer.GetApplicationTime); + float fElapsedAppTime = DXUtil.Timer(DirectXTimer.GetElapsedTime); + if ((0.0f == fElapsedAppTime) && frameMoving) + return; + + // FrameMove (animate) the scene + if (frameMoving || singleStep) { + // Store the time for the app + appTime = fAppTime; + elapsedTime = fElapsedAppTime; + + // Frame move the scene + FrameMove(); + + singleStep = false; + } + + // Render the scene as normal + Render(); + + UpdateStats(); + + try { + // Show the frame on the primary surface. + device.Present(); + } + catch(DeviceLostException) { + deviceLost = true; + } + } + + + + + /// + /// Update the various statistics the simulation keeps track of + /// + public void UpdateStats() { + // Keep track of the frame count + float time = DXUtil.Timer(DirectXTimer.GetAbsoluteTime); + ++frames; + + // Update the scene stats once per second + if (time - lastTime > 1.0f) { + framePerSecond = frames / (time - lastTime); + lastTime = time; + frames = 0; + + string strFmt; + Format fmtAdapter = graphicsSettings.DisplayMode.Format; + if (fmtAdapter == device.PresentationParameters.BackBufferFormat) { + strFmt = fmtAdapter.ToString(); + } + else { + strFmt = String.Format("backbuf {0}, adapter {1}", + device.PresentationParameters.BackBufferFormat.ToString(), fmtAdapter.ToString()); + } + + string strDepthFmt; + if (enumerationSettings.AppUsesDepthBuffer) { + strDepthFmt = String.Format(" ({0})", + graphicsSettings.DepthStencilBufferFormat.ToString()); + } + else { + // No depth buffer + strDepthFmt = ""; + } + + string strMultiSample; + switch (graphicsSettings.MultisampleType) { + case Direct3D.MultiSampleType.NonMaskable: strMultiSample = " (NonMaskable Multisample)"; break; + case Direct3D.MultiSampleType.TwoSamples: strMultiSample = " (2x Multisample)"; break; + case Direct3D.MultiSampleType.ThreeSamples: strMultiSample = " (3x Multisample)"; break; + case Direct3D.MultiSampleType.FourSamples: strMultiSample = " (4x Multisample)"; break; + case Direct3D.MultiSampleType.FiveSamples: strMultiSample = " (5x Multisample)"; break; + case Direct3D.MultiSampleType.SixSamples: strMultiSample = " (6x Multisample)"; break; + case Direct3D.MultiSampleType.SevenSamples: strMultiSample = " (7x Multisample)"; break; + case Direct3D.MultiSampleType.EightSamples: strMultiSample = " (8x Multisample)"; break; + case Direct3D.MultiSampleType.NineSamples: strMultiSample = " (9x Multisample)"; break; + case Direct3D.MultiSampleType.TenSamples: strMultiSample = " (10x Multisample)"; break; + case Direct3D.MultiSampleType.ElevenSamples: strMultiSample = " (11x Multisample)"; break; + case Direct3D.MultiSampleType.TwelveSamples: strMultiSample = " (12x Multisample)"; break; + case Direct3D.MultiSampleType.ThirteenSamples: strMultiSample = " (13x Multisample)"; break; + case Direct3D.MultiSampleType.FourteenSamples: strMultiSample = " (14x Multisample)"; break; + case Direct3D.MultiSampleType.FifteenSamples: strMultiSample = " (15x Multisample)"; break; + case Direct3D.MultiSampleType.SixteenSamples: strMultiSample = " (16x Multisample)"; break; + default: strMultiSample = string.Empty; break; + } + frameStats = String.Format("{0} fps ({1}x{2}), {3}{4}{5}", framePerSecond.ToString("f2"), + device.PresentationParameters.BackBufferWidth, device.PresentationParameters.BackBufferHeight, + strFmt, strDepthFmt, strMultiSample); + } + } + + + + + /// + /// Called in to toggle the pause state of the app. + /// + /// true if the simulation should pause + public void Pause(bool pause) { + appPausedCount += (int)(pause ? +1 : -1); + ready = ((appPausedCount > 0) ? false : true); + + // Handle the first pause request (of many, nestable pause requests) + if (pause && (1 == appPausedCount)) { + // Stop the scene from animating + if (frameMoving) + DXUtil.Timer(DirectXTimer.Stop); + } + + if (0 == appPausedCount) { + // Restart the timers + if (frameMoving) + DXUtil.Timer(DirectXTimer.Start); + } + } + + + + + /// + /// Set our variables to not active and not ready + /// + public void CleanupEnvironment() { + active = false; + ready = false; + if (device != null) + device.Dispose(); + + device = null; + } + #region Menu EventHandlers + + + + + /// + /// Prepares the simulation for a new device being selected + /// + public void UserSelectNewDevice(object sender, EventArgs e) { + // Prompt the user to select a new device or mode + if (active && ready) { + Pause(true); + DoSelectNewDevice(); + Pause(false); + } + } + + + + + /// + /// Displays a dialog so the user can select a new adapter, device, or + /// display mode, and then recreates the 3D environment if needed + /// + private void DoSelectNewDevice() { + isHandlingSizeChanges = false; + // Can't display dialogs in fullscreen mode + if (windowed == false) { + try { + ToggleFullscreen(); + isHandlingSizeChanges = false; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + return; + } + } + + // Make sure the main form is in the background + this.SendToBack(); + D3DSettingsForm settingsForm = new D3DSettingsForm(enumerationSettings, graphicsSettings); + System.Windows.Forms.DialogResult result = settingsForm.ShowDialog(null); + if (result != System.Windows.Forms.DialogResult.OK) { + isHandlingSizeChanges = true; + return; + } + graphicsSettings = settingsForm.settings; + + windowed = graphicsSettings.IsWindowed; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Inform the display class of the change. It will internally + // re-create valid surfaces, a d3ddevice, etc. + try { + InitializeEnvironment(); + } + catch(SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + isHandlingSizeChanges = true; + } + + + + + /// + /// Will start (or stop) simulation + /// + private void ToggleStart(object sender, EventArgs e) { + //Toggle frame movement + frameMoving = !frameMoving; + DXUtil.Timer(frameMoving ? DirectXTimer.Start : DirectXTimer.Stop); + } + + + + + /// + /// Will single step the simulation + /// + private void SingleStep(object sender, EventArgs e) { + // Single-step frame movement + if (false == frameMoving) + DXUtil.Timer(DirectXTimer.Advance); + else + DXUtil.Timer(DirectXTimer.Stop); + frameMoving = false; + singleStep = true; + } + + + + + /// + /// Will end the simulation + /// + private void ExitSample(object sender, EventArgs e) { + this.Close(); + } + #endregion + + + + + #region WinForms Overrides + /// + /// Clean up any resources + /// + protected override void Dispose(bool disposing) { + CleanupEnvironment(); + mnuMain.Dispose(); + base.Dispose(disposing); + } + + + + + /// + /// Handle any key presses + /// + protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) { + // Check for our shortcut keys (Return to start or stop) + if (e.KeyChar == '\r') { + mnuGo.PerformClick(); + e.Handled = true; + } + + // Check for our shortcut keys (Escape to quit) + if ((byte)e.KeyChar == (byte)(int)System.Windows.Forms.Keys.Escape) { + mnuExit.PerformClick(); + e.Handled = true; + } + + // Allow the control to handle the keystroke now + base.OnKeyPress(e); + } + + + + + /// + /// Handle system keystrokes (ie, alt-enter) + /// + protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e) { + if ((e.Alt) && (e.KeyCode == System.Windows.Forms.Keys.Return)) { + // Toggle the fullscreen/window mode + if (active && ready) { + Pause(true); + + try { + ToggleFullscreen(); + Pause(false); + return; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + } + finally { + e.Handled = true; + } + } + } + // Allow the control to handle the keystroke now + base.OnKeyDown(e); + } + + + + + /// + /// Winforms generated code for initializing the form + /// + private void InitializeComponent() { + // + // GraphicsSample + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.MinimumSize = new System.Drawing.Size(100, 100); + #region MenuCreation/etc + this.mnuMain = new System.Windows.Forms.MainMenu(); + this.mnuFile = new System.Windows.Forms.MenuItem(); + this.mnuGo = new System.Windows.Forms.MenuItem(); + this.mnuSingle = new System.Windows.Forms.MenuItem(); + this.mnuBreak1 = new System.Windows.Forms.MenuItem(); + this.mnuChange = new System.Windows.Forms.MenuItem(); + this.mnuBreak2 = new System.Windows.Forms.MenuItem(); + this.mnuExit = new System.Windows.Forms.MenuItem(); + // + // mainMenu1 + // + this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuFile}); + // + // mnuFile + // + this.mnuFile.Index = 0; + this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuGo, + this.mnuSingle, + this.mnuBreak1, + this.mnuChange, + this.mnuBreak2, + this.mnuExit}); + this.mnuFile.Text = "&File"; + // + // mnuGo + // + this.mnuGo.Index = 0; + this.mnuGo.Text = "&Go/stop\tEnter"; + this.mnuGo.Click += new System.EventHandler(this.ToggleStart); + // + // mnuSingle + // + this.mnuSingle.Index = 1; + this.mnuSingle.Text = "&Single step\tSpace"; + this.mnuSingle.Click += new System.EventHandler(this.SingleStep); + // + // mnuBreak1 + // + this.mnuBreak1.Index = 2; + this.mnuBreak1.Text = "-"; + // + // mnuChange + // + this.mnuChange.Index = 3; + this.mnuChange.Shortcut = System.Windows.Forms.Shortcut.F2; + this.mnuChange.ShowShortcut = true; + this.mnuChange.Text = "&Change Device..."; + this.mnuChange.Click += new System.EventHandler(this.UserSelectNewDevice); + // + // mnuBreak2 + // + this.mnuBreak2.Index = 4; + this.mnuBreak2.Text = "-"; + // + // mnuExit + // + this.mnuExit.Index = 5; + this.mnuExit.Text = "E&xit\tESC"; + this.mnuExit.Click += new System.EventHandler(this.ExitSample); + #endregion + } + + + + + /// + /// When the menu is starting pause our simulation + /// + protected override void OnMenuStart(System.EventArgs e) { + Pause(true); // Pause the simulation while the menu starts + } + + + + + /// + /// When the menu is complete our simulation can continue + /// + protected override void OnMenuComplete(System.EventArgs e) { + Pause(false); // Unpause the simulation + } + + + + + /// + /// Make sure our graphics cursor (if available) moves with the cursor + /// + protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e) { + if ((device != null) && (!device.Disposed)) { + // Move the D3D cursor + device.SetCursorPosition(e.X, e.Y, false); + } + // Let the control handle the mouse now + base.OnMouseMove(e); + } + + + + + /// + /// Handle size changed events + /// + protected override void OnSizeChanged(System.EventArgs e) { + this.OnResize(e); + base.OnSizeChanged(e); + } + + + + + /// + /// Handle resize events + /// + protected override void OnResize(System.EventArgs e) { + if (isHandlingSizeChanges) { + // Are we maximized? + isMaximized = (this.WindowState == System.Windows.Forms.FormWindowState.Maximized); + if (!isMaximized) { + storedSize = this.ClientSize; + storedLocation = this.Location; + } + } + active = !(this.WindowState == System.Windows.Forms.FormWindowState.Minimized || this.Visible == false); + base.OnResize(e); + } + + + + + /// + /// Once the form has focus again, we can continue to handle our resize + /// and resets.. + /// + protected override void OnGotFocus(System.EventArgs e) { + isHandlingSizeChanges = true; + isWindowActive = true; + base.OnGotFocus (e); + } + + + + + /// + /// Handle move events + /// + protected override void OnMove(System.EventArgs e) { + if (isHandlingSizeChanges) { + storedLocation = this.Location; + } + base.OnMove(e); + } + + + + + /// + /// Handle closing event + /// + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { + isClosing = true; + base.OnClosing(e); + } + #endregion + + +} + +#region Enums for D3D Applications +/// +/// Messages that can be used when displaying an error +/// +public enum ApplicationMessage { + None, + ApplicationMustExit, + WarnSwitchToRef +}; +#endregion + + + + +#region Various SampleExceptions +/// +/// The default sample exception type +/// +public class SampleException : System.ApplicationException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + + strMsg = "Generic application error. Enable\n"; + strMsg += "debug output for detailed information."; + + return strMsg; + } + } +} + + + + +/// +/// Exception informing user no compatible devices were found +/// +public class NoCompatibleDevicesException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "This sample cannot run in a desktop\n"; + strMsg += "window with the current display settings.\n"; + strMsg += "Please change your desktop settings to a\n"; + strMsg += "16- or 32-bit display mode and re-run this\n"; + strMsg += "sample."; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when the ReferenceDevice is null +/// +public class NullReferenceDeviceException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Warning: Nothing will be rendered.\n"; + strMsg += "The reference rendering device was selected, but your\n"; + strMsg += "computer only has a reduced-functionality reference device\n"; + strMsg += "installed. Install the DirectX SDK to get the full\n"; + strMsg += "reference device.\n"; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when reset fails +/// +public class ResetFailedException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not reset the Direct3D device."; + + return strMsg; + } + } +} + + + + +/// +/// The exception thrown when media couldn't be found +/// +public class MediaNotFoundException : SampleException { + private string mediaFile; + public MediaNotFoundException(string filename) : base() { + mediaFile = filename; + } + public MediaNotFoundException() : base() { + mediaFile = string.Empty; + } + + + + + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not load required media."; + if (mediaFile.Length > 0) + strMsg += string.Format("\r\nFile: {0}", mediaFile); + + return strMsg; + } + } +} +#endregion + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/d3dapp.resx b/Source Code updated 08-12-05/Spacewar3D/Step05/d3dapp.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/d3dapp.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/d3denumeration.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/d3denumeration.cs new file mode 100644 index 0000000..47c1c6a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/d3denumeration.cs @@ -0,0 +1,449 @@ +//----------------------------------------------------------------------------- +// File: D3DEnumeration.cs +// +// Desc: Enumerates D3D adapters, devices, modes, etc. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + + + +/// +/// Enumeration of all possible D3D vertex processing types +/// +public enum VertexProcessingType { + Software, + Mixed, + Hardware, + PureHardware +} + + + + +/// +/// Info about a display adapter +/// +public class GraphicsAdapterInfo { + public int AdapterOrdinal; + public AdapterDetails AdapterDetails; + public ArrayList DisplayModeList = new ArrayList(); // List of D3DDISPLAYMODEs + public ArrayList DeviceInfoList = new ArrayList(); // List of D3DDeviceInfos + public override string ToString() { return AdapterDetails.Description; } +} + + + + +/// +/// Info about a D3D device, including a list of DeviceCombos (see below) +/// that work with the device +/// +public class GraphicsDeviceInfo { + public int AdapterOrdinal; + public DeviceType DevType; + public Caps Caps; + public ArrayList DeviceComboList = new ArrayList(); // List of D3DDeviceCombos + public override string ToString() { return DevType.ToString(); } +} + + + + +/// +/// Info about a depth/stencil buffer format that is incompatible with a +/// multisample type +/// +public class DepthStencilMultiSampleConflict { + public DepthFormat DepthStencilFormat; + public MultiSampleType MultiSampleType; +} + + + + +/// +/// A combination of adapter format, back buffer format, and windowed/fullscreen +/// that is compatible with a particular D3D device (and the app) +/// +public class DeviceCombo { + public int AdapterOrdinal; + public DeviceType DevType; + public Format AdapterFormat; + public Format BackBufferFormat; + public bool IsWindowed; + public ArrayList DepthStencilFormatList = new ArrayList(); // List of D3DFORMATs + public ArrayList MultiSampleTypeList = new ArrayList(); // List of D3DMULTISAMPLE_TYPEs + public ArrayList MultiSampleQualityList = new ArrayList(); // List of ints (maxQuality per multisample type) + public ArrayList DepthStencilMultiSampleConflictList = new ArrayList(); // List of DepthStencilMultiSampleConflicts + public ArrayList VertexProcessingTypeList = new ArrayList(); // List of VertexProcessingTypes + public ArrayList PresentIntervalList = new ArrayList(); // List of D3DPRESENT_INTERVALs +} + + + + +/// +/// Used to sort Displaymodes +/// +class DisplayModeComparer : System.Collections.IComparer { + /// + /// Compare two display modes + /// + public int Compare(object x, object y) { + DisplayMode dx = (DisplayMode)x; + DisplayMode dy = (DisplayMode)y; + + if (dx.Width > dy.Width) + return 1; + if (dx.Width < dy.Width) + return -1; + if (dx.Height > dy.Height) + return 1; + if (dx.Height < dy.Height) + return -1; + if (dx.Format > dy.Format) + return 1; + if (dx.Format < dy.Format) + return -1; + if (dx.RefreshRate > dy.RefreshRate) + return 1; + if (dx.RefreshRate < dy.RefreshRate) + return -1; + return 0; + } +} + + + + +/// +/// Enumerates available adapters, devices, modes, etc. +/// +public class D3DEnumeration { + /// + /// The confirm device delegate which is used to determine if a device + /// meets the needs of the simulation + /// + public delegate bool ConfirmDeviceCallbackType(Caps caps, + VertexProcessingType vertexProcessingType, Format adapterFormat, + Format backBufferFormat); + + public ConfirmDeviceCallbackType ConfirmDeviceCallback; + public ArrayList AdapterInfoList = new ArrayList(); // List of D3DAdapterInfos + + // The following variables can be used to limit what modes, formats, + // etc. are enumerated. Set them to the values you want before calling + // Enumerate(). + public int AppMinFullscreenWidth = 640; + public int AppMinFullscreenHeight = 480; + public int AppMinColorChannelBits = 5; // min color bits per channel in adapter format + public int AppMinAlphaChannelBits = 0; // min alpha bits per pixel in back buffer format + public int AppMinDepthBits = 15; + public int AppMinStencilBits = 0; + public bool AppUsesDepthBuffer = true; + public bool AppUsesMixedVP = false; // whether app can take advantage of mixed vp mode + public bool AppRequiresWindowed = false; + public bool AppRequiresFullscreen = false; + + + + + /// + /// Enumerates available D3D adapters, devices, modes, etc. + /// + public void Enumerate() { + foreach (AdapterInformation ai in Manager.Adapters) { + ArrayList adapterFormatList = new ArrayList(); + GraphicsAdapterInfo adapterInfo = new GraphicsAdapterInfo(); + adapterInfo.AdapterOrdinal = ai.Adapter; + adapterInfo.AdapterDetails = ai.Information; + + // Get list of all display modes on this adapter. + // Also build a temporary list of all display adapter formats. + foreach (DisplayMode displayMode in ai.SupportedDisplayModes) { + if (displayMode.Width < AppMinFullscreenWidth) + continue; + if (displayMode.Height < AppMinFullscreenHeight) + continue; + if (GraphicsUtility.GetColorChannelBits(displayMode.Format) < AppMinColorChannelBits) + continue; + adapterInfo.DisplayModeList.Add(displayMode); + if (!adapterFormatList.Contains(displayMode.Format)) + adapterFormatList.Add(displayMode.Format); + } + + // Sort displaymode list + DisplayModeComparer dmc = new DisplayModeComparer(); + adapterInfo.DisplayModeList.Sort(dmc); + + // Get info for each device on this adapter + EnumerateDevices(adapterInfo, adapterFormatList); + + // If at least one device on this adapter is available and compatible + // with the app, add the adapterInfo to the list + if (adapterInfo.DeviceInfoList.Count == 0) + continue; + AdapterInfoList.Add(adapterInfo); + } + } + + + + + /// + /// Enumerates D3D devices for a particular adapter + /// + protected void EnumerateDevices(GraphicsAdapterInfo adapterInfo, ArrayList adapterFormatList) { + DeviceType[] devTypeArray = new DeviceType[] { + DeviceType.Hardware, DeviceType.Software, DeviceType.Reference }; + + foreach (DeviceType devType in devTypeArray) { + GraphicsDeviceInfo deviceInfo = new GraphicsDeviceInfo(); + deviceInfo.AdapterOrdinal = adapterInfo.AdapterOrdinal; + deviceInfo.DevType = devType; + try { + deviceInfo.Caps = Manager.GetDeviceCaps(adapterInfo.AdapterOrdinal, devType); + } + catch (DirectXException) { + continue; + } + + // Get info for each devicecombo on this device + EnumerateDeviceCombos(deviceInfo, adapterFormatList); + + // If at least one devicecombo for this device is found, + // add the deviceInfo to the list + if (deviceInfo.DeviceComboList.Count == 0) + continue; + adapterInfo.DeviceInfoList.Add(deviceInfo); + } + } + + + + + /// + /// Enumerates DeviceCombos for a particular device + /// + protected void EnumerateDeviceCombos(GraphicsDeviceInfo deviceInfo, ArrayList adapterFormatList) { + Format[] backBufferFormatArray = new Format[] { + Format.A8R8G8B8, Format.X8R8G8B8, Format.A2R10G10B10, + Format.R5G6B5, Format.A1R5G5B5, Format.X1R5G5B5, + }; + bool[] isWindowedArray = new bool[] { false, true }; + + // See which adapter formats are supported by this device + foreach (Format adapterFormat in adapterFormatList) { + foreach (Format backBufferFormat in backBufferFormatArray) { + if (GraphicsUtility.GetAlphaChannelBits(backBufferFormat) < AppMinAlphaChannelBits) + continue; + foreach (bool isWindowed in isWindowedArray) { + if (!isWindowed && AppRequiresWindowed) + continue; + if (isWindowed && AppRequiresFullscreen) + continue; + if (!Manager.CheckDeviceType(deviceInfo.AdapterOrdinal, deviceInfo.DevType, adapterFormat, backBufferFormat, isWindowed)) { + continue; + } + + // At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed + // DeviceCombo that is supported by the system. We still need to confirm that it's + // compatible with the app, and find one or more suitable depth/stencil buffer format, + // multisample type, vertex processing type, and present interval. + DeviceCombo deviceCombo = new DeviceCombo(); + deviceCombo.AdapterOrdinal = deviceInfo.AdapterOrdinal; + deviceCombo.DevType = deviceInfo.DevType; + deviceCombo.AdapterFormat = adapterFormat; + deviceCombo.BackBufferFormat = backBufferFormat; + deviceCombo.IsWindowed = isWindowed; + if (AppUsesDepthBuffer) { + BuildDepthStencilFormatList(deviceCombo); + if (deviceCombo.DepthStencilFormatList.Count == 0) + continue; + } + BuildMultiSampleTypeList(deviceCombo); + if (deviceCombo.MultiSampleTypeList.Count == 0) + continue; + BuildDepthStencilMultiSampleConflictList(deviceCombo); + BuildVertexProcessingTypeList(deviceInfo, deviceCombo); + if (deviceCombo.VertexProcessingTypeList.Count == 0) + continue; + BuildPresentIntervalList(deviceInfo, deviceCombo); + if (deviceCombo.PresentIntervalList.Count == 0) + continue; + + deviceInfo.DeviceComboList.Add(deviceCombo); + } + } + } + } + + + + + /// + /// Adds all depth/stencil formats that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildDepthStencilFormatList(DeviceCombo deviceCombo) { + DepthFormat[] depthStencilFormatArray = { + DepthFormat.D16, + DepthFormat.D15S1, + DepthFormat.D24X8, + DepthFormat.D24S8, + DepthFormat.D24X4S4, + DepthFormat.D32, + }; + + foreach (DepthFormat depthStencilFmt in depthStencilFormatArray) { + if (GraphicsUtility.GetDepthBits(depthStencilFmt) < AppMinDepthBits) + continue; + if (GraphicsUtility.GetStencilBits(depthStencilFmt) < AppMinStencilBits) + continue; + if (Manager.CheckDeviceFormat(deviceCombo.AdapterOrdinal, deviceCombo.DevType, deviceCombo.AdapterFormat, + Usage.DepthStencil, ResourceType.Surface, depthStencilFmt)) { + if (Manager.CheckDepthStencilMatch(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat, depthStencilFmt)) { + deviceCombo.DepthStencilFormatList.Add(depthStencilFmt); + } + } + } + } + + + + + /// + /// Adds all multisample types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildMultiSampleTypeList(DeviceCombo deviceCombo) { + MultiSampleType[] msTypeArray = { + MultiSampleType.None, + MultiSampleType.NonMaskable, + MultiSampleType.TwoSamples, + MultiSampleType.ThreeSamples, + MultiSampleType.FourSamples, + MultiSampleType.FiveSamples, + MultiSampleType.SixSamples, + MultiSampleType.SevenSamples, + MultiSampleType.EightSamples, + MultiSampleType.NineSamples, + MultiSampleType.TenSamples, + MultiSampleType.ElevenSamples, + MultiSampleType.TwelveSamples, + MultiSampleType.ThirteenSamples, + MultiSampleType.FourteenSamples, + MultiSampleType.FifteenSamples, + MultiSampleType.SixteenSamples, + }; + + foreach (MultiSampleType msType in msTypeArray) { + int result; + int qualityLevels = 0; + if (Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.BackBufferFormat, deviceCombo.IsWindowed, msType, out result, out qualityLevels)) { + deviceCombo.MultiSampleTypeList.Add(msType); + deviceCombo.MultiSampleQualityList.Add(qualityLevels); + } + } + } + + + + + /// + /// Finds any depthstencil formats that are incompatible with multisample types and + /// builds a list of them. + /// + public void BuildDepthStencilMultiSampleConflictList(DeviceCombo deviceCombo) { + DepthStencilMultiSampleConflict DSMSConflict; + + foreach (DepthFormat dsFmt in deviceCombo.DepthStencilFormatList) { + foreach (MultiSampleType msType in deviceCombo.MultiSampleTypeList) { + if (!Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, + deviceCombo.DevType, (Format)dsFmt, deviceCombo.IsWindowed, msType)) { + DSMSConflict = new DepthStencilMultiSampleConflict(); + DSMSConflict.DepthStencilFormat = dsFmt; + DSMSConflict.MultiSampleType = msType; + deviceCombo.DepthStencilMultiSampleConflictList.Add(DSMSConflict); + } + } + } + } + + + + + /// + /// Adds all vertex processing types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildVertexProcessingTypeList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + if (deviceInfo.Caps.DeviceCaps.SupportsHardwareTransformAndLight) { + if (deviceInfo.Caps.DeviceCaps.SupportsPureDevice) { + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.PureHardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.PureHardware); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Hardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Hardware); + } + if (AppUsesMixedVP && (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Mixed, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat))) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Mixed); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Software, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Software); + } + } + + + + + /// + /// Adds all present intervals that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildPresentIntervalList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + PresentInterval[] piArray = { + PresentInterval.Immediate, + PresentInterval.Default, + PresentInterval.One, + PresentInterval.Two, + PresentInterval.Three, + PresentInterval.Four, + }; + + foreach (PresentInterval pi in piArray) { + if (deviceCombo.IsWindowed) { + if (pi == PresentInterval.Two || + pi == PresentInterval.Three || + pi == PresentInterval.Four) { + // These intervals are not supported in windowed mode. + continue; + } + } + // Note that PresentInterval.Default is zero, so you + // can't do a caps check for it -- it is always available. + if (pi == PresentInterval.Default || + (deviceInfo.Caps.PresentationIntervals & pi) != (PresentInterval)0) { + deviceCombo.PresentIntervalList.Add(pi); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/d3dfont.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/d3dfont.cs new file mode 100644 index 0000000..2b374eb --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/d3dfont.cs @@ -0,0 +1,666 @@ +//----------------------------------------------------------------------------- +// File: D3DFont.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// A generic font class +/// +public class GraphicsFont { + public const int MaxNumfontVertices = 50*6; + + // Font rendering flags + [System.Flags] + public enum RenderFlags { + Centered = 0x0001, + TwoSided = 0x0002, + Filtered = 0x0004, + } + private System.Drawing.Font systemFont; + + private bool isZEnable = false; + public bool ZBufferEnable { get { return isZEnable; } set { isZEnable = value; } } + string ourFontName; // Font properties + int ourFontHeight; + + private Direct3D.Device device; + private TextureStateManager textureState0; + private TextureStateManager textureState1; + private SamplerStateManager samplerState0; + private RenderStateManager renderState; + private Direct3D.Texture fontTexture; + private Direct3D.VertexBuffer vertexBuffer; + private CustomVertex.TransformedColoredTextured[] fontVertices = new CustomVertex.TransformedColoredTextured[MaxNumfontVertices]; + + private int textureWidth; // Texture dimensions + private int textureHeight; + private float textureScale; + private int spacingPerChar; + private float[,] textureCoords = new float[128-32,4]; + + // Stateblocks for setting and restoring render states + private StateBlock savedStateBlock; + private StateBlock drawTextStateBlock; + + + + + /// + /// Create a new font object + /// + /// The font to use + public GraphicsFont(System.Drawing.Font f) { + ourFontName = f.Name; + ourFontHeight = (int)f.Size; + systemFont = f; + } + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName) : this(fontName, FontStyle.Regular, 12) { + } + + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName, FontStyle style) : this(fontName, style, 12) { + } + + + + + /// + /// Create a new font object + /// + /// The name of the font + /// The style + /// Size of the font + public GraphicsFont(string fontName, FontStyle style, int size) { + ourFontName = fontName; + ourFontHeight = size; + systemFont = new System.Drawing.Font(fontName, ourFontHeight, style); + } + + + + + /// + /// Attempt to draw the systemFont alphabet onto the provided texture + /// graphics. + /// + /// Graphics object on which to draw and measure the letters + /// If set, the method will test to see if the alphabet will fit without actually drawing + public void PaintAlphabet(Graphics g, bool measureOnly) { + string str; + float x = 0; + float y = 0; + Point p = new Point(0, 0); + Size size = new Size(0,0); + + // Calculate the spacing between characters based on line height + size = g.MeasureString(" ", systemFont).ToSize(); + x = spacingPerChar = (int) Math.Ceiling(size.Height * 0.3); + + for (char c = (char)32; c < (char)127; c++) { + str = c.ToString(); + // We need to do some things here to get the right sizes. The default implemententation of MeasureString + // will return a resolution independant size. For our height, this is what we want. However, for our width, we + // want a resolution dependant size. + Size resSize = g.MeasureString(str, systemFont).ToSize(); + size.Height = resSize.Height + 1; + + // Now the Resolution independent width + if (c != ' ') { // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + resSize = g.MeasureString(str, systemFont, p, StringFormat.GenericTypographic).ToSize(); + size.Width = resSize.Width; + } + else + size.Width = resSize.Width; + + if ((x + size.Width + spacingPerChar) > textureWidth) { + x = spacingPerChar; + y += size.Height; + } + + // Make sure we have room for the current character + if ((y + size.Height) > textureHeight) + throw new System.InvalidOperationException("Texture too small for alphabet"); + + if (!measureOnly) { + if (c != ' ') // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y), StringFormat.GenericTypographic); + else + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y)); + textureCoords[c-32,0] = ((float) (x + 0 - spacingPerChar)) / textureWidth; + textureCoords[c-32,1] = ((float) (y + 0 + 0)) / textureHeight; + textureCoords[c-32,2] = ((float) (x + size.Width + spacingPerChar)) / textureWidth; + textureCoords[c-32,3] = ((float) (y + size.Height + 0)) / textureHeight; + } + + x += size.Width + (2 * spacingPerChar); + } + + } + + + + + /// + /// Initialize the device objects + /// + /// The grpahics device used to initialize + public void InitializeDeviceObjects(Device dev) { + if (dev != null) { + // Set up our events + dev.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Keep a local copy of the device + device = dev; + textureState0 = device.TextureState[0]; + textureState1 = device.TextureState[1]; + samplerState0 = device.SamplerState[0]; + renderState = device.RenderState; + + // Create a bitmap on which to measure the alphabet + Bitmap bmp = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Graphics g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Establish the font and texture size + textureScale = 1.0f; // Draw fonts into texture without scaling + + // Calculate the dimensions for the smallest power-of-two texture which + // can hold all the printable characters + textureWidth = textureHeight = 128; + for (;;) { + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // Scale up the texture size and try again + textureWidth *= 2; + textureHeight *= 2; + continue; + } + + break; + } + + // If requested texture is too big, use a smaller texture and smaller font, + // and scale up when rendering. + Direct3D.Caps d3dCaps = device.DeviceCaps; + + // If the needed texture is too large for the video card... + if (textureWidth > d3dCaps.MaxTextureWidth) { + // Scale the font size down to fit on the largest possible texture + textureScale = (float)d3dCaps.MaxTextureWidth / (float)textureWidth; + textureWidth = textureHeight = d3dCaps.MaxTextureWidth; + + for(;;) { + // Create a new, smaller font + ourFontHeight = (int) Math.Floor(ourFontHeight * textureScale); + systemFont = new System.Drawing.Font(systemFont.Name, ourFontHeight, systemFont.Style); + + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // If that still doesn't fit, scale down again and continue + textureScale *= 0.9F; + continue; + } + + break; + } + } + + // Release the bitmap used for measuring and create one for drawing + bmp.Dispose(); + bmp = new Bitmap(textureWidth, textureHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Draw the alphabet + PaintAlphabet(g, false); + + // Create a new texture for the font from the bitmap we just created + fontTexture = Texture.FromBitmap(device, bmp, 0, Pool.Managed); + RestoreDeviceObjects(null, null); + } + + + + + /// + /// Restore the font after a device has been reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColoredTextured), MaxNumfontVertices, + device, Usage.WriteOnly | Usage.Dynamic, 0, Pool.Default); + + Surface surf = device.GetRenderTarget( 0 ); + bool bSupportsAlphaBlend = Manager.CheckDeviceFormat(device.DeviceCaps.AdapterOrdinal, + device.DeviceCaps.DeviceType, device.DisplayMode.Format, + Usage.RenderTarget | Usage.QueryPostPixelShaderBlending, ResourceType.Surface, + surf.Description.Format ); + + // Create the state blocks for rendering text + for (int which=0; which < 2; which++) { + device.BeginStateBlock(); + device.SetTexture(0, fontTexture); + + if (isZEnable) + renderState.ZBufferEnable = true; + else + renderState.ZBufferEnable = false; + + if( bSupportsAlphaBlend ) { + renderState.AlphaBlendEnable = true; + renderState.SourceBlend = Blend.SourceAlpha; + renderState.DestinationBlend = Blend.InvSourceAlpha; + } + else { + renderState.AlphaBlendEnable = false; + } + renderState.AlphaTestEnable = true; + renderState.ReferenceAlpha = 0x08; + renderState.AlphaFunction = Compare.GreaterEqual; + renderState.FillMode = FillMode.Solid; + renderState.CullMode = Cull.CounterClockwise; + renderState.StencilEnable = false; + renderState.Clipping = true; + device.ClipPlanes.DisableAll(); + renderState.VertexBlend = VertexBlend.Disable; + renderState.IndexedVertexBlendEnable = false; + renderState.FogEnable = false; + renderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; + textureState0.ColorOperation = TextureOperation.Modulate; + textureState0.ColorArgument1 = TextureArgument.TextureColor; + textureState0.ColorArgument2 = TextureArgument.Diffuse; + textureState0.AlphaOperation = TextureOperation.Modulate; + textureState0.AlphaArgument1 = TextureArgument.TextureColor; + textureState0.AlphaArgument2 = TextureArgument.Diffuse; + textureState0.TextureCoordinateIndex = 0; + textureState0.TextureTransform = TextureTransform.Disable; // REVIEW + textureState1.ColorOperation = TextureOperation.Disable; + textureState1.AlphaOperation = TextureOperation.Disable; + samplerState0.MinFilter = TextureFilter.Point; + samplerState0.MagFilter = TextureFilter.Point; + samplerState0.MipFilter = TextureFilter.None; + + if (which==0) + savedStateBlock = device.EndStateBlock(); + else + drawTextStateBlock = device.EndStateBlock(); + } + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text) { + DrawText(xpos, ypos, color, text, RenderFlags.Filtered); + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text, RenderFlags flags) { + if (text == null) + return; + + // Setup renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.SetTexture(0, fontTexture); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Adjust for character spacing + xpos -= spacingPerChar; + float fStartX = xpos; + + // Fill vertex buffer + int iv = 0; + int dwNumTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / textureScale; + float h = (ty2-ty1) * textureHeight / textureScale; + + int intColor = color.ToArgb(); + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + dwNumTriangles += 2; + + if (dwNumTriangles*3 > (MaxNumfontVertices-6)) { + // Set the data for the vertexbuffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + dwNumTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar); + } + + // Set the data for the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (dwNumTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + Viewport vp = device.Viewport; + float xpos = (x+1.0f)*vp.Width/2; + float ypos = (y+1.0f)*vp.Height/2; + float sz = z; + float rhw = 1.0f; + float fLineHeight = (textureCoords[0,3] - textureCoords[0,1]) * textureHeight; + + // Adjust for character spacing + xpos -= spacingPerChar * (fXScale*vp.Height)/fLineHeight; + float fStartX = xpos; + + // Fill vertex buffer + int numTriangles = 0; + int realColor = color.ToArgb(); + int iv = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += fYScale*vp.Height; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1)*textureWidth; + float h = (ty2-ty1)*textureHeight; + + w *= (fXScale*vp.Height)/fLineHeight; + h *= (fYScale*vp.Height)/fLineHeight; + + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + numTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar) * (fXScale*vp.Height)/fLineHeight; + } + + // Unlock and render the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text) { + this.DrawTextScaled(x,y,z,fXScale, fYScale, color, text, 0); + } + + + + + /// + /// Renders 3D text + /// + public void Render3DText(string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.PositionNormalTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0, VertexInformation.GetFormatSize(CustomVertex.PositionNormalTextured.Format)); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Position for each text element + float x = 0.0f; + float y = 0.0f; + + // Center the text block at the origin + if ((flags & RenderFlags.Centered) != 0) { + System.Drawing.SizeF sz = GetTextExtent(text); + x = -(((float)sz.Width)/10.0f)/2.0f; + y = -(((float)sz.Height)/10.0f)/2.0f; + } + + // Turn off culling for two-sided text + if ((flags & RenderFlags.TwoSided) != 0) + renderState.CullMode = Cull.None; + + // Adjust for character spacing + x -= spacingPerChar / 10.0f; + float fStartX = x; + + // Fill vertex buffer + GraphicsStream strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + int numTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + x = fStartX; + y -= (textureCoords[0,3]-textureCoords[0,1])*textureHeight/10.0f; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / (10.0f * textureScale); + float h = (ty2-ty1) * textureHeight / (10.0f * textureScale); + + if (c != ' ') { + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+0,0), new Vector3(0,0,-1), tx1, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+h,0), new Vector3(0,0,-1), tx2, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.Unlock(); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + numTriangles = 0; + } + } + + x += w - (2 * spacingPerChar) / 10.0f; + } + + // Unlock and render the vertex buffer + vertexBuffer.Unlock(); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Get the dimensions of a text string + /// + private System.Drawing.SizeF GetTextExtent(string text) { + if (null == text || text == string.Empty) + throw new System.ArgumentNullException(); + + float fRowWidth = 0.0f; + float fRowHeight = (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + float fWidth = 0.0f; + float fHeight = fRowHeight; + + foreach (char c in text) { + if (c == '\n') { + fRowWidth = 0.0f; + fHeight += fRowHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float tx2 = textureCoords[c-32,2]; + + fRowWidth += (tx2-tx1)*textureWidth - 2*spacingPerChar; + + if (fRowWidth > fWidth) + fWidth = fRowWidth; + } + + return new System.Drawing.SizeF(fWidth, fHeight); + } + + + + + /// + /// Cleanup any resources being used + /// + public void Dispose(object sender, EventArgs e) { + if (systemFont != null) + systemFont.Dispose(); + + systemFont = null; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/d3dutil.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/d3dutil.cs new file mode 100644 index 0000000..ea2d5a3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/d3dutil.cs @@ -0,0 +1,928 @@ +//----------------------------------------------------------------------------- +// File: D3DUtil.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Windows.Forms; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// Various helper functions for graphics samples +/// +public class GraphicsUtility { + /// + /// Private Constructor + /// + private GraphicsUtility() { + } + + + + /// + /// Initializes a Material structure, setting the diffuse and ambient + /// colors. It does not set emissive or specular colors. + /// + /// The ambient and diffuse color + /// A defined material + public static Direct3D.Material InitMaterial(System.Drawing.Color c) { + Material mtrl = new Material(); + mtrl.Ambient = mtrl.Diffuse = c; + return mtrl; + } + + + + + /// + /// Initializes a light, setting the light position. The + /// diffuse color is set to white; specular and ambient are left as black. + /// + /// Which light to initialize + /// The type + public static void InitLight(Light light, LightType ltType, float x, float y, float z) { + light.Type = ltType; + light.Diffuse = System.Drawing.Color.White; + light.Position = new Vector3(x,y,z); + light.Direction = Vector3.Normalize(light.Position); + light.Range = 1000.0f; + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename, Format format) { + // Get the path to the texture + string path = DXUtil.FindMediaFile(null, textureFilename); + + // Create the texture using D3DX + return TextureLoader.FromFile(device, path, D3DX.Default, D3DX.Default, D3DX.Default, 0, format, + Pool.Managed, Filter.Triangle|Filter.Mirror, + Filter.Triangle|Filter.Mirror, 0); + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename) { + return GraphicsUtility.CreateTexture(device, textureFilename, Format.Unknown); + } + + + + + + /// + /// Returns a view matrix for rendering to a face of a cubemap. + /// + public static Matrix GetCubeMapViewMatrix(CubeMapFace face) { + Vector3 vEyePt = new Vector3(0.0f, 0.0f, 0.0f); + Vector3 vLookDir = new Vector3(); + Vector3 vUpDir = new Vector3(); + + switch (face) { + case CubeMapFace.PositiveX: + vLookDir = new Vector3(1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeX: + vLookDir = new Vector3(-1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.PositiveY: + vLookDir = new Vector3(0.0f, 1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f,-1.0f); + break; + case CubeMapFace.NegativeY: + vLookDir = new Vector3(0.0f,-1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f, 1.0f); + break; + case CubeMapFace.PositiveZ: + vLookDir = new Vector3(0.0f, 0.0f, 1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeZ: + vLookDir = new Vector3(0.0f, 0.0f,-1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + } + + // Set the view transform for this cubemap surface + Matrix matView = Matrix.LookAtLH(vEyePt, vLookDir, vUpDir); + return matView; + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control, float fTrackBallRadius) { + System.Drawing.Point pt = System.Windows.Forms.Cursor.Position; + System.Drawing.Rectangle rc = control.ClientRectangle; + pt = control.PointToClient(pt); + float xpos = (((2.0f * pt.X) / (rc.Right-rc.Left)) - 1); + float ypos = (((2.0f * pt.Y) / (rc.Bottom-rc.Top)) - 1); + float sz; + + if (xpos == 0.0f && ypos == 0.0f) + return new Quaternion(0.0f, 0.0f, 0.0f, 1.0f); + + float d2 = (float)Math.Sqrt(xpos*xpos + ypos*ypos); + + if (d2 < fTrackBallRadius * 0.70710678118654752440) // Inside sphere + sz = (float)Math.Sqrt(fTrackBallRadius*fTrackBallRadius - d2*d2); + else // On hyperbola + sz = (fTrackBallRadius*fTrackBallRadius) / (2.0f*d2); + + // Get two points on trackball's sphere + Vector3 p1 = new Vector3(xpos, ypos, sz); + Vector3 p2 = new Vector3(0.0f, 0.0f, fTrackBallRadius); + + // Get axis of rotation, which is cross product of p1 and p2 + Vector3 axis = Vector3.Cross(p1,p2); + + // Calculate angle for the rotation about that axis + float t = Vector3.Length(Vector3.Subtract(p2,p1)) / (2.0f*fTrackBallRadius); + if (t > +1.0f) t = +1.0f; + if (t < -1.0f) t = -1.0f; + float fAngle = (float)(2.0f * Math.Asin(t)); + + // Convert axis to quaternion + return Quaternion.RotationAxis(axis, fAngle); + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control) { + return GetRotationFromCursor(control, 1.0f); + } + + + + + /// + /// Axis to axis quaternion double angle (no normalization) + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by 2*THETA. + /// + public static Quaternion D3DXQuaternionUnitAxisToUnitAxis2(Vector3 fromVector, Vector3 toVector) { + Vector3 axis = Vector3.Cross(fromVector, toVector); // proportional to sin(theta) + return new Quaternion(axis.X, axis.Y, axis.Z, Vector3.Dot(fromVector, toVector)); + } + + + + + /// + /// Axis to axis quaternion + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by theta. + /// + public static Quaternion D3DXQuaternionAxisToAxis(Vector3 fromVector, Vector3 toVector) { + Vector3 vA = Vector3.Normalize(fromVector), vB = Vector3.Normalize(toVector); + Vector3 vHalf = Vector3.Add(vA,vB); + vHalf = Vector3.Normalize(vHalf); + return GraphicsUtility.D3DXQuaternionUnitAxisToUnitAxis2(vA, vHalf); + } + + + + + /// + /// Gets the number of ColorChanelBits from a format + /// + static public int GetColorChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 8; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 8; + case Format.R5G6B5: + return 5; + case Format.X1R5G5B5: + return 5; + case Format.A1R5G5B5: + return 5; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 2; + case Format.A8R3G3B2: + return 2; + case Format.X4R4G4B4: + return 4; + case Format.A2B10G10R10: + return 10; + case Format.A2R10G10B10: + return 10; + default: + return 0; + } + } + + + + + /// + /// Gets the number of alpha channel bits + /// + static public int GetAlphaChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 0; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 0; + case Format.R5G6B5: + return 0; + case Format.X1R5G5B5: + return 0; + case Format.A1R5G5B5: + return 1; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 0; + case Format.A8R3G3B2: + return 8; + case Format.X4R4G4B4: + return 0; + case Format.A2B10G10R10: + return 2; + case Format.A2R10G10B10: + return 2; + default: + return 0; + } + } + + + + + /// + /// Gets the number of depth bits + /// + static public int GetDepthBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 16; + case DepthFormat.D15S1: + return 15; + case DepthFormat.D24X8: + return 24; + case DepthFormat.D24S8: + return 24; + case DepthFormat.D24X4S4: + return 24; + case DepthFormat.D32: + return 32; + default: + return 0; + } + } + + + + + /// + /// Gets the number of stencil bits + /// + static public int GetStencilBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 0; + case DepthFormat.D15S1: + return 1; + case DepthFormat.D24X8: + return 0; + case DepthFormat.D24S8: + return 8; + case DepthFormat.D24X4S4: + return 4; + case DepthFormat.D32: + return 0; + default: + return 0; + } + } + + + + + /// + /// Assembles and creates a file-based vertex shader + /// + public static VertexShader CreateVertexShader(Device device, string filename) { + GraphicsStream code = null; + string path = null; + + // Get the path to the vertex shader file + path = DXUtil.FindMediaFile(null, filename); + + // Assemble the vertex shader file + code = ShaderLoader.FromFile(path, null, 0); + + // Create the vertex shader + return new VertexShader(device, code); + } + +} + + + + +/// +/// An arc ball class +/// +public class GraphicsArcBall { + private int internalWidth; // ArcBall's window width + private int internalHeight; // ArcBall's window height + private float internalradius; // ArcBall's radius in screen coords + private float internalradiusTranslation; // ArcBall's radius for translating the target + + private Quaternion internaldownQuat; // Quaternion before button down + private Quaternion internalnowQuat; // Composite quaternion for current drag + private Matrix internalrotationMatrix; // Matrix for arcball's orientation + private Matrix internalrotationDelta; // Matrix for arcball's orientation + private Matrix internaltranslationMatrix; // Matrix for arcball's position + private Matrix internaltranslationDelta; // Matrix for arcball's position + private bool internaldragging; // Whether user is dragging arcball + private bool internaluseRightHanded; // Whether to use RH coordinate system + private int saveMouseX = 0; // Saved mouse position + private int saveMouseY = 0; + private Vector3 internalvectorDown; // Button down vector + System.Windows.Forms.Control parent; // parent + + + + + /// + /// Constructor + /// + public GraphicsArcBall(System.Windows.Forms.Control p) { + internaldownQuat = Quaternion.Identity; + internalnowQuat = Quaternion.Identity; + internalrotationMatrix = Matrix.Identity; + internalrotationDelta = Matrix.Identity; + internaltranslationMatrix = Matrix.Identity; + internaltranslationDelta = Matrix.Identity; + internaldragging = false; + internalradiusTranslation = 1.0f; + internaluseRightHanded = false; + + parent = p; + // Hook the events + p.MouseDown += new MouseEventHandler(this.OnContainerMouseDown); + p.MouseUp += new MouseEventHandler(this.OnContainerMouseUp); + p.MouseMove += new MouseEventHandler(this.OnContainerMouseMove); + } + + + + + /// + /// Set the window dimensions + /// + public void SetWindow(int width, int height, float radius) { + // Set ArcBall info + internalWidth = width; + internalHeight = height; + internalradius = radius; + } + + + + + /// + /// Screen coords to a vector + /// + private Vector3 ScreenToVector(int xpos, int ypos) { + // Scale to screen + float x = -(xpos - internalWidth/2) / (internalradius*internalWidth/2); + float y = (ypos - internalHeight/2) / (internalradius*internalHeight/2); + + if (internaluseRightHanded) { + x = -x; + y = -y; + } + + float z = 0.0f; + float mag = x*x + y*y; + + if (mag > 1.0f) { + float scale = 1.0f/(float)Math.Sqrt(mag); + x *= scale; + y *= scale; + } + else + z = (float)Math.Sqrt(1.0f - mag); + + // Return vector + return new Vector3(x, y, z); + } + + + + + /// + /// Fired when the containers mouse button is down + /// + private void OnContainerMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { + // Store off the position of the cursor when the button is pressed + saveMouseX = e.X; + saveMouseY = e.Y; + + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // Start drag mode + internaldragging = true; + internalvectorDown = ScreenToVector(e.X, e.Y); + internaldownQuat = internalnowQuat; + } + } + + + + + /// + /// Fired when the containers mouse button has been released + /// + private void OnContainerMouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // End drag mode + internaldragging = false; + } + } + + + + + /// + /// Fired when the containers mouse is moving + /// + private void OnContainerMouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + if (internaldragging) { + // recompute nowQuat + Vector3 vCur = ScreenToVector(e.X, e.Y); + Quaternion qAxisToAxis = GraphicsUtility.D3DXQuaternionAxisToAxis(internalvectorDown, vCur); + internalnowQuat = internaldownQuat; + internalnowQuat = Quaternion.Multiply(internalnowQuat,qAxisToAxis); + internalrotationDelta = Matrix.RotationQuaternion(qAxisToAxis); + } + else + internalrotationDelta = Matrix.Identity; + + internalrotationMatrix = Matrix.RotationQuaternion(internalnowQuat); + internaldragging = true; + } + + if ((e.Button == System.Windows.Forms.MouseButtons.Right) || (e.Button == System.Windows.Forms.MouseButtons.Middle)) { + // Normalize based on size of window and bounding sphere radius + float fDeltaX = (saveMouseX-e.X) * internalradiusTranslation / internalWidth; + float fDeltaY = (saveMouseY-e.Y) * internalradiusTranslation / internalHeight; + + if (e.Button == System.Windows.Forms.MouseButtons.Right) { + internaltranslationDelta = Matrix.Translation(-2 * fDeltaX, 2 * fDeltaY, 0.0f); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + if (e.Button == System.Windows.Forms.MouseButtons.Middle) { + internaltranslationDelta = Matrix.Translation(0.0f, 0.0f, 5 * fDeltaY); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + + // Store mouse coordinate + saveMouseX = e.X; + saveMouseY = e.Y; + } + } + + #region Various properties of the class + public float Radius { + set { + internalradiusTranslation = value; } + } + public bool RightHanded { + get { return internaluseRightHanded; } + set { internaluseRightHanded = value; } + } + public Matrix RotationMatrix { + get { return internalrotationMatrix; } + } + public Matrix RotationDeltaMatrix { + get { return internalrotationDelta; } + } + public Matrix TranslationMatrix { + get { return internaltranslationMatrix; } + } + public Matrix TranslationDeltaMatrix { + get { return internaltranslationDelta; } + } + public bool IsBeingDragged { + get { return internaldragging; } + } + #endregion +} + + + + +/// +/// Handles our meshes +/// +public class GraphicsMesh : IDisposable { + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + + + + + /// + /// Constructor + /// + /// The initial filename + public GraphicsMesh(string filename) { + fileName = filename; + } + public GraphicsMesh() : this ("CD3DFile_Mesh") {} + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + string strPath = null; + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Find the path for the file, and convert it to ANSI (for the D3DX API) + strPath = DXUtil.FindMediaFile(null, filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(strPath, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + } + + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. Note: because we are passing in + // no flags, the default behavior is to clone into local memory. + localMemoryMesh = systemMemoryMesh.Clone(0, systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(Device device, bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render(Device device) { + Render(device, true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/dinput.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/dinput.cs new file mode 100644 index 0000000..f0829a0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/dinput.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + +/// +/// This class is where the DirectInput routines +/// for the application resides. +/// +public class InputClass { + + private Control owner = null; + private Device localDevice = null; + + public InputClass(Control owner) { + this.owner = owner; + + localDevice = new Device(SystemGuid.Keyboard); + localDevice.SetDataFormat(DeviceDataFormat.Keyboard); + localDevice.SetCooperativeLevel(owner, CooperativeLevelFlags.Foreground | CooperativeLevelFlags.NonExclusive); + } + + public KeyboardState GetInputState() { + KeyboardState kbState = null; + + try { + kbState = localDevice.GetCurrentKeyboardState(); + } + catch(InputException) { + do { + Application.DoEvents(); + try{ localDevice.Acquire(); } + catch (InputLostException) { + continue; } + catch(OtherApplicationHasPriorityException) { + continue; } + + break; + + }while( true ); + } + return kbState; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/dplay.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/dplay.cs new file mode 100644 index 0000000..be86825 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/dplay.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + +/// +/// The class that houses DirectPlay code for the application. +/// +public class PlayClass : IDisposable { + private MessageDelegate message = null; + + private GameClass parent = null; + + public Peer peerObject = null; + private ConnectWizard Connect = null; + private ArrayList PlayerList = new ArrayList(); + private int LocalPlayerID = 0; + public Guid AppGuid = new Guid(0x876a3036, 0xffd7, 0x46bc, 0x92, 0x9, 0xb4, 0x2f, 0x61, 0x7b, 0x9b, 0xF1); + + public struct Players { + public int dpnID; + public string Name; + public Players(int id, string n) { + dpnID = id; Name = n; } + } + + public void Dispose() { + peerObject.Dispose(); + } + + public PlayClass(GameClass parent) { + this.parent = parent; + this.peerObject = peerObject; + this.message = new MessageDelegate(parent.MessageArrived); + + peerObject = new Peer(); + // First set up our event handlers (We only need events for the ones we care about) + peerObject.PlayerCreated += new PlayerCreatedEventHandler(this.PlayerCreated); + peerObject.PlayerDestroyed += new PlayerDestroyedEventHandler(this.PlayerDestroyed); + peerObject.HostMigrated += new HostMigratedEventHandler(this.HostMigrated); + peerObject.Receive += new ReceiveEventHandler(this.DataReceived); + peerObject.SessionTerminated += new SessionTerminatedEventHandler(this.SessionTerminated); + + Connect = new ConnectWizard(peerObject, AppGuid, "Step2"); + if (!Connect.StartWizard()) { + MessageBox.Show("DirectPlay initialization was incomplete. Application will terminate."); + throw new DirectXException(); + } + } + + public void WriteMessage(byte msg) { + NetworkPacket packet = new NetworkPacket(); + + packet.Write(msg); + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.Guaranteed); + } + + #region DirectPlayEvents + /// + // These are the events the app will handle + // when DPlay fires them. + /// + private void PlayerCreated(object sender, PlayerCreatedEventArgs dpMessage) { + // Get the PlayerInformation and store it + PlayerInformation dpPeer = peerObject.GetPeerInformation(dpMessage.Message.PlayerID); + Players oPlayer = new Players(dpMessage.Message.PlayerID,dpPeer.Name); + // We lock the data here since it is shared across multiple threads. + lock (PlayerList) { + PlayerList.Add(oPlayer); + } + // Save this player id if it's ourselves + if (dpPeer.Local) + LocalPlayerID = dpMessage.Message.PlayerID; + + } + private void PlayerDestroyed(object sender, PlayerDestroyedEventArgs dpMessage) { + // Remove this player from our list + // We lock the data here since it is shared across multiple threads. + lock (PlayerList) { + foreach (Players player in PlayerList) { + if (dpMessage.Message.PlayerID == player.dpnID) { + PlayerList.Remove(player); + break; + } + } + } + } + private void HostMigrated(object sender, HostMigratedEventArgs dpMessage) { + if (LocalPlayerID == dpMessage.Message.NewHostID) { + // This application instance is the new host, update the UI + parent.Text += " (HOST)"; + } + } + private void DataReceived(object sender, ReceiveEventArgs dpMessage) { + lock(this) { + byte data = (byte)dpMessage.Message.ReceiveData.Read(typeof(byte)); + message(data); + } + } + private void SessionTerminated(object sender, SessionTerminatedEventArgs dpMessage) { + // This session is being terminated, let the user know + if (dpMessage.Message.ResultCode == ResultCode.HostTerminatedSession) + MessageBox.Show("The Host has terminated this session. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + else + MessageBox.Show("The session has been lost. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + + // This will post a message on the main thread to shut down our form + parent.BeginInvoke(new PeerCloseCallback(parent.PeerClose)); + } + #endregion +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step05/main.cs b/Source Code updated 08-12-05/Spacewar3D/Step05/main.cs new file mode 100644 index 0000000..c2a6fde --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step05/main.cs @@ -0,0 +1,50 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Container = System.ComponentModel.Container; + + + /// + /// The main windows form for the application. + /// + public class MainClass + { + + private GameClass game = null; + private SplashScreen splash = null; + private bool enableNetwork = false; + public bool EnableNetwork { get { return enableNetwork; } set { enableNetwork = value; } } + + private Size gameFormSize; + public Size GameFormSize { get { return gameFormSize; } set { gameFormSize = value; } } + + private bool fullScreen = false; + public bool FullScreen { get { return fullScreen; } set { fullScreen = value; } } + + /// + // Main entry point of the application. + /// + public static void Main() + { + MainClass m = new MainClass(); + } + + public MainClass() + { + + //display the splash screen and determine network status + splash = new SplashScreen(this); + splash.ShowDialog(); + + try + { + game = new GameClass(fullScreen, gameFormSize, enableNetwork); + } + catch(DirectXException) + { + return; + } + if( game.CreateGraphicsSample() ) + game.Run(); + } + } diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/App.config b/Source Code updated 08-12-05/Spacewar3D/Step06/App.config new file mode 100644 index 0000000..5bbb96b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/Camera.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/Camera.cs new file mode 100644 index 0000000..c8e3944 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/Camera.cs @@ -0,0 +1,119 @@ +using System; +using Microsoft.DirectX; + + + /// + /// Summary description for Camera. + /// +public class Camera { + + protected float velocity; + + + protected float xPos, yPos, zPos; + protected float xRot, yRot, zRot; + + protected float startXPos, startYPos, startZPos; + protected float startXRot, startYRot, startZRot; + + protected float endXPos, endYPos, endZPos; + protected float endXRot, endYRot, endZRot; + + protected Matrix viewMatrix; + protected Matrix translationMatrix; + protected Matrix rotationMatrix; + + public float XPosition { get { return xPos; } } + public float YPosition { get { return yPos; } } + public float ZPosition { get { return zPos; } } + + public float XRotation { get { return xRot; } } + public float YRotation { get { return yRot; } } + public float ZRotation { get { return zRot; } } + + + public Vector3 Loc { + get { + return new Vector3(xPos,yPos,zPos); + } + set { + Vector3 loc = value; + xPos = loc.X; + yPos = loc.Y; + zPos = loc.Z; + } + + } + + public Matrix ViewMatrix { + get { + Update(); + return viewMatrix; + } + set { + viewMatrix = value; + } + + } + + + public Camera() { + Move(0.0f,0.0f,0.0f); + Rotate(0.0f,0.0f,0.0f); + Update(); + } + + + public void Update() { // Update transformation matrix + viewMatrix = translationMatrix * rotationMatrix; + } + + public void Move(float XPos, float YPos, float ZPos) { + xPos = XPos; + yPos = YPos; + zPos = ZPos; + translationMatrix = Matrix.Translation( -xPos, -yPos, -zPos ); + } + + public void MoveRel(float XAdd, float YAdd, float ZAdd) { + Move (xPos + XAdd, yPos + YAdd, zPos + ZAdd); + + } + + public void Rotate(float XRot, float YRot, float ZRot) { + Matrix xRotation, yRotation, zRotation; + + xRot = XRot; + yRot = YRot; + zRot = ZRot; + + xRotation = Matrix.RotationX( - xRot ); + yRotation = Matrix.RotationY( - yRot ); + zRotation = Matrix.RotationZ( - zRot ); + + rotationMatrix = zRotation; + rotationMatrix *= yRotation; + rotationMatrix *= xRotation; + + } + + public void RotateRel(float XAdd, float YAdd, float ZAdd) { + Rotate (xRot + XAdd, yRot + YAdd, zRot + ZAdd); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/CameraMode.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/CameraMode.cs new file mode 100644 index 0000000..fc8f03a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/CameraMode.cs @@ -0,0 +1,9 @@ +using System; + + +public enum CameraMode { + ChaseMode, + CockpitMode, + Fixed +}; + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/Constants.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/Constants.cs new file mode 100644 index 0000000..22d420a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/Constants.cs @@ -0,0 +1,39 @@ +using System; +using Microsoft.DirectX.Direct3D; +using Microsoft.DirectX; + + + /// + /// GamePlay constants. You can tune the game by adjusting these values. + /// +sealed public class Constants { + static public Random random = new Random((int) DateTime.Now.Ticks); + + public const float EngineThrust = 0.3f; + public const float DyingCycle = 2; + public const float DeadCycleWait = 2; + public const float HyperChargeWait = 3; + public const float HyperCycleWait = 2; + public const float HyperSuccessFactor = 0.8f; // initial success factor + public const float HyperSuccessDegradation = 0.1f; // degradation per use... + public const float ShipCollisionLimit = 15f; + public const float MaxVelocity = 125.0f; + public const float ThrustPower = 1.001f; + + public const int ShotLifetime = 4; + public const int NumShots = 12; + public const float ShotVelocity = 350f; + public const float ShotDeltaTime = 0.10f; + public const int ShotInitialMove = 3; // times to update shot so it shows up outside the ship... + public const int ShotCollisionLimit = 10; + + + public const float StatusMessageDisplayTime = 5.0f; + + + + public const long RemoteTickTimeout = 5; // five seconds... + + private Constants() { + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/D3DSettingsForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/D3DSettingsForm.cs new file mode 100644 index 0000000..889162a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/D3DSettingsForm.cs @@ -0,0 +1,1037 @@ +//----------------------------------------------------------------------------- +// File: D3DSettingsForm.cs +// +// Desc: Application form for setting up user defined display settings +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + + + + + +/// +/// A form to allow the user to change the current D3D settings. +/// +public class D3DSettingsForm : System.Windows.Forms.Form { + private D3DEnumeration enumeration; + public D3DSettings settings; // Potential new D3D settings + + private System.Windows.Forms.GroupBox adapterDeviceGroupBox; + private System.Windows.Forms.Label displayAdapterLabel; + private System.Windows.Forms.ComboBox adapterComboBox; + private System.Windows.Forms.Label deviceLabel; + private System.Windows.Forms.ComboBox deviceComboBox; + private System.Windows.Forms.GroupBox modeSettingsGroupBox; + private System.Windows.Forms.RadioButton windowedRadioButton; + private System.Windows.Forms.RadioButton fullscreenRadioButton; + private System.Windows.Forms.Label adapterFormatLabel; + private System.Windows.Forms.ComboBox adapterFormatComboBox; + private System.Windows.Forms.Label resolutionLabel; + private System.Windows.Forms.ComboBox resolutionComboBox; + private System.Windows.Forms.Label refreshRateLabel; + private System.Windows.Forms.ComboBox refreshRateComboBox; + private System.Windows.Forms.GroupBox otherSettingsGroupBox; + private System.Windows.Forms.Label backBufferFormatLabel; + private System.Windows.Forms.ComboBox backBufferFormatComboBox; + private System.Windows.Forms.Label depthStencilBufferLabel; + private System.Windows.Forms.ComboBox depthStencilBufferComboBox; + private System.Windows.Forms.Label multisampleLabel; + private System.Windows.Forms.ComboBox multisampleComboBox; + private System.Windows.Forms.Label vertexProcLabel; + private System.Windows.Forms.ComboBox vertexProcComboBox; + private System.Windows.Forms.Label presentIntervalLabel; + private System.Windows.Forms.ComboBox presentIntervalComboBox; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.ComboBox multisampleQualityComboBox; + private System.Windows.Forms.Label multisampleQualityLabel; + + + + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + + /// + /// Constructor. Pass in an enumeration and the current D3D settings. + /// + public D3DSettingsForm(D3DEnumeration enumerationParam, D3DSettings settingsParam) { + enumeration = enumerationParam; + settings = settingsParam.Clone(); + + // Required for Windows Form Designer support + InitializeComponent(); + + // Fill adapter combo box. Updating the selected adapter will trigger + // updates of the rest of the dialog. + foreach (GraphicsAdapterInfo adapterInfo in enumeration.AdapterInfoList) { + adapterComboBox.Items.Add(adapterInfo); + if (adapterInfo.AdapterOrdinal == settings.AdapterOrdinal) + adapterComboBox.SelectedItem = adapterInfo; + } + if (adapterComboBox.SelectedItem == null && adapterComboBox.Items.Count > 0) + adapterComboBox.SelectedIndex = 0; + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + if (components != null) + components.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.adapterDeviceGroupBox = new System.Windows.Forms.GroupBox(); + this.deviceComboBox = new System.Windows.Forms.ComboBox(); + this.deviceLabel = new System.Windows.Forms.Label(); + this.adapterComboBox = new System.Windows.Forms.ComboBox(); + this.displayAdapterLabel = new System.Windows.Forms.Label(); + this.fullscreenRadioButton = new System.Windows.Forms.RadioButton(); + this.cancelButton = new System.Windows.Forms.Button(); + this.otherSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.multisampleQualityComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleQualityLabel = new System.Windows.Forms.Label(); + this.multisampleComboBox = new System.Windows.Forms.ComboBox(); + this.backBufferFormatComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferLabel = new System.Windows.Forms.Label(); + this.backBufferFormatLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcLabel = new System.Windows.Forms.Label(); + this.presentIntervalComboBox = new System.Windows.Forms.ComboBox(); + this.presentIntervalLabel = new System.Windows.Forms.Label(); + this.resolutionComboBox = new System.Windows.Forms.ComboBox(); + this.windowedRadioButton = new System.Windows.Forms.RadioButton(); + this.resolutionLabel = new System.Windows.Forms.Label(); + this.refreshRateComboBox = new System.Windows.Forms.ComboBox(); + this.adapterFormatLabel = new System.Windows.Forms.Label(); + this.refreshRateLabel = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.modeSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.adapterFormatComboBox = new System.Windows.Forms.ComboBox(); + this.adapterDeviceGroupBox.SuspendLayout(); + this.otherSettingsGroupBox.SuspendLayout(); + this.modeSettingsGroupBox.SuspendLayout(); + this.SuspendLayout(); + // + // adapterDeviceGroupBox + // + this.adapterDeviceGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.deviceComboBox, + this.deviceLabel, + this.adapterComboBox, + this.displayAdapterLabel}); + this.adapterDeviceGroupBox.Location = new System.Drawing.Point(16, 8); + this.adapterDeviceGroupBox.Name = "adapterDeviceGroupBox"; + this.adapterDeviceGroupBox.Size = new System.Drawing.Size(400, 80); + this.adapterDeviceGroupBox.TabIndex = 0; + this.adapterDeviceGroupBox.TabStop = false; + this.adapterDeviceGroupBox.Text = "Adapter and device"; + // + // deviceComboBox + // + this.deviceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.deviceComboBox.DropDownWidth = 121; + this.deviceComboBox.Location = new System.Drawing.Point(160, 48); + this.deviceComboBox.Name = "deviceComboBox"; + this.deviceComboBox.Size = new System.Drawing.Size(232, 21); + this.deviceComboBox.TabIndex = 3; + this.deviceComboBox.SelectedIndexChanged += new System.EventHandler(this.DeviceChanged); + // + // deviceLabel + // + this.deviceLabel.Location = new System.Drawing.Point(8, 48); + this.deviceLabel.Name = "deviceLabel"; + this.deviceLabel.Size = new System.Drawing.Size(152, 23); + this.deviceLabel.TabIndex = 2; + this.deviceLabel.Text = "Render &Device:"; + // + // adapterComboBox + // + this.adapterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterComboBox.DropDownWidth = 121; + this.adapterComboBox.Location = new System.Drawing.Point(160, 24); + this.adapterComboBox.Name = "adapterComboBox"; + this.adapterComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterComboBox.TabIndex = 1; + this.adapterComboBox.SelectedIndexChanged += new System.EventHandler(this.AdapterChanged); + // + // displayAdapterLabel + // + this.displayAdapterLabel.Location = new System.Drawing.Point(8, 24); + this.displayAdapterLabel.Name = "displayAdapterLabel"; + this.displayAdapterLabel.Size = new System.Drawing.Size(152, 23); + this.displayAdapterLabel.TabIndex = 0; + this.displayAdapterLabel.Text = "Display &Adapter:"; + // + // fullscreenRadioButton + // + this.fullscreenRadioButton.Location = new System.Drawing.Point(9, 38); + this.fullscreenRadioButton.Name = "fullscreenRadioButton"; + this.fullscreenRadioButton.Size = new System.Drawing.Size(152, 24); + this.fullscreenRadioButton.TabIndex = 1; + this.fullscreenRadioButton.Text = "&Fullscreen"; + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(248, 464); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.TabIndex = 4; + this.cancelButton.Text = "Cancel"; + // + // otherSettingsGroupBox + // + this.otherSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.multisampleQualityComboBox, + this.multisampleQualityLabel, + this.multisampleComboBox, + this.backBufferFormatComboBox, + this.multisampleLabel, + this.depthStencilBufferLabel, + this.backBufferFormatLabel, + this.depthStencilBufferComboBox, + this.vertexProcComboBox, + this.vertexProcLabel, + this.presentIntervalComboBox, + this.presentIntervalLabel}); + this.otherSettingsGroupBox.Location = new System.Drawing.Point(16, 264); + this.otherSettingsGroupBox.Name = "otherSettingsGroupBox"; + this.otherSettingsGroupBox.Size = new System.Drawing.Size(400, 176); + this.otherSettingsGroupBox.TabIndex = 2; + this.otherSettingsGroupBox.TabStop = false; + this.otherSettingsGroupBox.Text = "Device settings"; + // + // multisampleQualityComboBox + // + this.multisampleQualityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleQualityComboBox.DropDownWidth = 144; + this.multisampleQualityComboBox.Location = new System.Drawing.Point(160, 96); + this.multisampleQualityComboBox.Name = "multisampleQualityComboBox"; + this.multisampleQualityComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleQualityComboBox.TabIndex = 7; + this.multisampleQualityComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleQualityChanged); + // + // multisampleQualityLabel + // + this.multisampleQualityLabel.Location = new System.Drawing.Point(8, 96); + this.multisampleQualityLabel.Name = "multisampleQualityLabel"; + this.multisampleQualityLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleQualityLabel.TabIndex = 6; + this.multisampleQualityLabel.Text = "Multisample &Quality:"; + // + // multisampleComboBox + // + this.multisampleComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleComboBox.DropDownWidth = 144; + this.multisampleComboBox.Location = new System.Drawing.Point(160, 72); + this.multisampleComboBox.Name = "multisampleComboBox"; + this.multisampleComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleComboBox.TabIndex = 5; + this.multisampleComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleTypeChanged); + // + // backBufferFormatComboBox + // + this.backBufferFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.backBufferFormatComboBox.DropDownWidth = 144; + this.backBufferFormatComboBox.Location = new System.Drawing.Point(160, 24); + this.backBufferFormatComboBox.Name = "backBufferFormatComboBox"; + this.backBufferFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.backBufferFormatComboBox.TabIndex = 1; + this.backBufferFormatComboBox.SelectedIndexChanged += new System.EventHandler(this.BackBufferFormatChanged); + // + // multisampleLabel + // + this.multisampleLabel.Location = new System.Drawing.Point(8, 72); + this.multisampleLabel.Name = "multisampleLabel"; + this.multisampleLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleLabel.TabIndex = 4; + this.multisampleLabel.Text = "&Multisample Type:"; + // + // depthStencilBufferLabel + // + this.depthStencilBufferLabel.Location = new System.Drawing.Point(8, 48); + this.depthStencilBufferLabel.Name = "depthStencilBufferLabel"; + this.depthStencilBufferLabel.Size = new System.Drawing.Size(152, 23); + this.depthStencilBufferLabel.TabIndex = 2; + this.depthStencilBufferLabel.Text = "De&pth/Stencil Buffer Format:"; + // + // backBufferFormatLabel + // + this.backBufferFormatLabel.Location = new System.Drawing.Point(8, 24); + this.backBufferFormatLabel.Name = "backBufferFormatLabel"; + this.backBufferFormatLabel.Size = new System.Drawing.Size(152, 23); + this.backBufferFormatLabel.TabIndex = 0; + this.backBufferFormatLabel.Text = "&Back Buffer Format:"; + // + // depthStencilBufferComboBox + // + this.depthStencilBufferComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.depthStencilBufferComboBox.DropDownWidth = 144; + this.depthStencilBufferComboBox.Location = new System.Drawing.Point(160, 48); + this.depthStencilBufferComboBox.Name = "depthStencilBufferComboBox"; + this.depthStencilBufferComboBox.Size = new System.Drawing.Size(232, 21); + this.depthStencilBufferComboBox.TabIndex = 3; + this.depthStencilBufferComboBox.SelectedIndexChanged += new System.EventHandler(this.DepthStencilBufferFormatChanged); + // + // vertexProcComboBox + // + this.vertexProcComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.vertexProcComboBox.DropDownWidth = 121; + this.vertexProcComboBox.Location = new System.Drawing.Point(160, 120); + this.vertexProcComboBox.Name = "vertexProcComboBox"; + this.vertexProcComboBox.Size = new System.Drawing.Size(232, 21); + this.vertexProcComboBox.TabIndex = 9; + this.vertexProcComboBox.SelectedIndexChanged += new System.EventHandler(this.VertexProcessingChanged); + // + // vertexProcLabel + // + this.vertexProcLabel.Location = new System.Drawing.Point(8, 120); + this.vertexProcLabel.Name = "vertexProcLabel"; + this.vertexProcLabel.Size = new System.Drawing.Size(152, 23); + this.vertexProcLabel.TabIndex = 8; + this.vertexProcLabel.Text = "&Vertex Processing:"; + // + // presentIntervalComboBox + // + this.presentIntervalComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.presentIntervalComboBox.DropDownWidth = 121; + this.presentIntervalComboBox.Location = new System.Drawing.Point(160, 144); + this.presentIntervalComboBox.Name = "presentIntervalComboBox"; + this.presentIntervalComboBox.Size = new System.Drawing.Size(232, 21); + this.presentIntervalComboBox.TabIndex = 11; + this.presentIntervalComboBox.SelectedValueChanged += new System.EventHandler(this.PresentIntervalChanged); + // + // presentIntervalLabel + // + this.presentIntervalLabel.Location = new System.Drawing.Point(8, 144); + this.presentIntervalLabel.Name = "presentIntervalLabel"; + this.presentIntervalLabel.Size = new System.Drawing.Size(152, 23); + this.presentIntervalLabel.TabIndex = 10; + this.presentIntervalLabel.Text = "Present &Interval:"; + // + // resolutionComboBox + // + this.resolutionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.resolutionComboBox.DropDownWidth = 144; + this.resolutionComboBox.Location = new System.Drawing.Point(161, 94); + this.resolutionComboBox.MaxDropDownItems = 14; + this.resolutionComboBox.Name = "resolutionComboBox"; + this.resolutionComboBox.Size = new System.Drawing.Size(232, 21); + this.resolutionComboBox.TabIndex = 5; + this.resolutionComboBox.SelectedIndexChanged += new System.EventHandler(this.ResolutionChanged); + // + // windowedRadioButton + // + this.windowedRadioButton.Location = new System.Drawing.Point(9, 14); + this.windowedRadioButton.Name = "windowedRadioButton"; + this.windowedRadioButton.Size = new System.Drawing.Size(152, 24); + this.windowedRadioButton.TabIndex = 0; + this.windowedRadioButton.Text = "&Windowed"; + this.windowedRadioButton.CheckedChanged += new System.EventHandler(this.WindowedFullscreenChanged); + // + // resolutionLabel + // + this.resolutionLabel.Location = new System.Drawing.Point(8, 94); + this.resolutionLabel.Name = "resolutionLabel"; + this.resolutionLabel.Size = new System.Drawing.Size(152, 23); + this.resolutionLabel.TabIndex = 4; + this.resolutionLabel.Text = "&Resolution:"; + // + // refreshRateComboBox + // + this.refreshRateComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.refreshRateComboBox.DropDownWidth = 144; + this.refreshRateComboBox.Location = new System.Drawing.Point(161, 118); + this.refreshRateComboBox.MaxDropDownItems = 14; + this.refreshRateComboBox.Name = "refreshRateComboBox"; + this.refreshRateComboBox.Size = new System.Drawing.Size(232, 21); + this.refreshRateComboBox.TabIndex = 7; + this.refreshRateComboBox.SelectedIndexChanged += new System.EventHandler(this.RefreshRateChanged); + // + // adapterFormatLabel + // + this.adapterFormatLabel.Location = new System.Drawing.Point(8, 72); + this.adapterFormatLabel.Name = "adapterFormatLabel"; + this.adapterFormatLabel.Size = new System.Drawing.Size(152, 23); + this.adapterFormatLabel.TabIndex = 2; + this.adapterFormatLabel.Text = "Adapter F&ormat:"; + // + // refreshRateLabel + // + this.refreshRateLabel.Location = new System.Drawing.Point(8, 118); + this.refreshRateLabel.Name = "refreshRateLabel"; + this.refreshRateLabel.Size = new System.Drawing.Size(152, 23); + this.refreshRateLabel.TabIndex = 6; + this.refreshRateLabel.Text = "R&efresh Rate:"; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(112, 464); + this.okButton.Name = "okButton"; + this.okButton.TabIndex = 3; + this.okButton.Text = "OK"; + // + // modeSettingsGroupBox + // + this.modeSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.adapterFormatLabel, + this.refreshRateLabel, + this.resolutionComboBox, + this.adapterFormatComboBox, + this.resolutionLabel, + this.refreshRateComboBox, + this.windowedRadioButton, + this.fullscreenRadioButton}); + this.modeSettingsGroupBox.Location = new System.Drawing.Point(16, 96); + this.modeSettingsGroupBox.Name = "modeSettingsGroupBox"; + this.modeSettingsGroupBox.Size = new System.Drawing.Size(400, 160); + this.modeSettingsGroupBox.TabIndex = 1; + this.modeSettingsGroupBox.TabStop = false; + this.modeSettingsGroupBox.Text = "Display mode settings"; + // + // adapterFormatComboBox + // + this.adapterFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterFormatComboBox.DropDownWidth = 121; + this.adapterFormatComboBox.Location = new System.Drawing.Point(161, 70); + this.adapterFormatComboBox.MaxDropDownItems = 14; + this.adapterFormatComboBox.Name = "adapterFormatComboBox"; + this.adapterFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterFormatComboBox.TabIndex = 3; + this.adapterFormatComboBox.SelectedValueChanged += new System.EventHandler(this.AdapterFormatChanged); + // + // D3DSettingsForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(438, 512); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.cancelButton, + this.okButton, + this.adapterDeviceGroupBox, + this.modeSettingsGroupBox, + this.otherSettingsGroupBox}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.Name = "D3DSettingsForm"; + this.Text = "Direct3D Settings"; + this.adapterDeviceGroupBox.ResumeLayout(false); + this.otherSettingsGroupBox.ResumeLayout(false); + this.modeSettingsGroupBox.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// Respond to a change of selected adapter by rebuilding the device + /// list. Updating the selected device will trigger updates of the + /// rest of the dialog. + /// + private void AdapterChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + settings.AdapterInfo = adapterInfo; + + // Update device combo box + deviceComboBox.Items.Clear(); + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + deviceComboBox.Items.Add(deviceInfo); + if (deviceInfo.DevType == settings.DevType) + deviceComboBox.SelectedItem = deviceInfo; + } + if (deviceComboBox.SelectedItem == null && deviceComboBox.Items.Count > 0) + deviceComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected device by resetting the + /// fullscreen/windowed radio buttons. Updating these buttons + /// will trigger updates of the rest of the dialog. + /// + private void DeviceChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + settings.DeviceInfo = deviceInfo; + + // Update fullscreen/windowed radio buttons + bool HasWindowedDeviceCombo = false; + bool HasFullscreenDeviceCombo = false; + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + HasWindowedDeviceCombo = true; + else + HasFullscreenDeviceCombo = true; + } + windowedRadioButton.Enabled = HasWindowedDeviceCombo; + fullscreenRadioButton.Enabled = HasFullscreenDeviceCombo; + if (settings.IsWindowed && HasWindowedDeviceCombo) { + windowedRadioButton.Checked = true; + } + else { + fullscreenRadioButton.Checked = true; + } + WindowedFullscreenChanged(null, null); + } + + + + + /// + /// Respond to a change of windowed/fullscreen state by rebuilding the + /// adapter format list, resolution list, and refresh rate list. + /// Updating the selected adapter format will trigger updates of the + /// rest of the dialog. + /// + private void WindowedFullscreenChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + if (windowedRadioButton.Checked) { + settings.IsWindowed = true; + settings.WindowedAdapterInfo = adapterInfo; + settings.WindowedDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + adapterFormatComboBox.Items.Add(settings.WindowedDisplayMode.Format); + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = false; + + // Update resolution combo box + resolutionComboBox.Items.Clear(); + resolutionComboBox.Items.Add(FormatResolution(settings.WindowedDisplayMode.Width, + settings.WindowedDisplayMode.Height)); + resolutionComboBox.SelectedIndex = 0; + resolutionComboBox.Enabled = false; + + // Update refresh rate combo box + refreshRateComboBox.Items.Clear(); + refreshRateComboBox.Items.Add(FormatRefreshRate(settings.WindowedDisplayMode.RefreshRate)); + refreshRateComboBox.SelectedIndex = 0; + refreshRateComboBox.Enabled = false; + } + else { + settings.IsWindowed = false; + settings.FullscreenAdapterInfo = adapterInfo; + settings.FullscreenDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + continue; + if (!adapterFormatComboBox.Items.Contains(deviceCombo.AdapterFormat)) { + adapterFormatComboBox.Items.Add(deviceCombo.AdapterFormat); + if (deviceCombo.AdapterFormat == (settings.IsWindowed ? + settings.WindowedDisplayMode.Format : settings.FullscreenDisplayMode.Format)) { + adapterFormatComboBox.SelectedItem = deviceCombo.AdapterFormat; + } + } + } + if (adapterFormatComboBox.SelectedItem == null && adapterFormatComboBox.Items.Count > 0) + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = true; + + // Update resolution combo box + resolutionComboBox.Enabled = true; + + // Update refresh rate combo box + refreshRateComboBox.Enabled = true; + } + } + + + + + /// + /// Converts the given width and height into a formatted string + /// + private string FormatResolution(int width, int height) { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} by {1}", width, height); + return sb.ToString(); + } + + + + + /// + /// Converts the given refresh rate into a formatted string + /// + private string FormatRefreshRate(int refreshRate) { + if (refreshRate == 0) { + return "Default Rate"; + } + else { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} Hz", refreshRate); + return sb.ToString(); + } + } + + + + + /// + /// Respond to a change of selected adapter format by rebuilding the + /// resolution list and back buffer format list. Updating the selected + /// resolution and back buffer format will trigger updates of the rest + /// of the dialog. + /// + private void AdapterFormatChanged(object sender, System.EventArgs e) { + if (!windowedRadioButton.Checked) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + settings.FullscreenDisplayMode.Format = adapterFormat; + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + + resolutionComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat) { + string resolutionString = FormatResolution(displayMode.Width, displayMode.Height); + if (!resolutionComboBox.Items.Contains(resolutionString)) { + resolutionComboBox.Items.Add(resolutionString); + if (settings.FullscreenDisplayMode.Width == displayMode.Width && + settings.FullscreenDisplayMode.Height == displayMode.Height) { + resolutionComboBox.SelectedItem = resolutionString; + } + } + } + } + if (resolutionComboBox.SelectedItem == null && resolutionComboBox.Items.Count > 0) + resolutionComboBox.SelectedIndex = 0; + } + + // Update backbuffer format combo box + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + backBufferFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == settings.DisplayMode.Format) { + if (!backBufferFormatComboBox.Items.Contains(deviceCombo.BackBufferFormat)) { + backBufferFormatComboBox.Items.Add(deviceCombo.BackBufferFormat); + if (deviceCombo.BackBufferFormat == settings.BackBufferFormat) + backBufferFormatComboBox.SelectedItem = deviceCombo.BackBufferFormat; + } + } + } + if (backBufferFormatComboBox.SelectedItem == null && backBufferFormatComboBox.Items.Count > 0) + backBufferFormatComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected resolution by rebuilding the + /// refresh rate list. + /// + private void ResolutionChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + + // Update settings with new resolution + string resolution = (string)resolutionComboBox.SelectedItem; + string[] resolutionSplitStringArray = resolution.Split(); + int width = int.Parse(resolutionSplitStringArray[0]); + int height = int.Parse(resolutionSplitStringArray[2]); + settings.FullscreenDisplayMode.Width = width; + settings.FullscreenDisplayMode.Height = height; + + // Update refresh rate list based on new resolution + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + refreshRateComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat && + displayMode.Width == width && + displayMode.Height == height) { + string refreshRateString = FormatRefreshRate(displayMode.RefreshRate); + if (!refreshRateComboBox.Items.Contains(refreshRateString)) { + refreshRateComboBox.Items.Add(refreshRateString); + if (settings.FullscreenDisplayMode.RefreshRate == displayMode.RefreshRate) + refreshRateComboBox.SelectedItem = refreshRateString; + } + } + } + if (refreshRateComboBox.SelectedItem == null && refreshRateComboBox.Items.Count > 0) + refreshRateComboBox.SelectedIndex = refreshRateComboBox.Items.Count - 1; + } + + + + + /// + /// Respond to a change of selected refresh rate. + /// + private void RefreshRateChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + // Update settings with new refresh rate + string refreshRateString = (string)refreshRateComboBox.SelectedItem; + int refreshRate = 0; + if (refreshRateString != "Default Rate") { + string[] refreshRateSplitStringArray = refreshRateString.Split(); + refreshRate = int.Parse(refreshRateSplitStringArray[0]); + } + settings.FullscreenDisplayMode.RefreshRate = refreshRate; + } + + + + + /// + /// Respond to a change of selected back buffer format by rebuilding + /// the depth/stencil format list, multisample type list, and vertex + /// processing type list. + /// + private void BackBufferFormatChanged(object sender, System.EventArgs e) { + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + Format backBufferFormat = (Format)backBufferFormatComboBox.SelectedItem; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == adapterFormat && + deviceCombo.BackBufferFormat == backBufferFormat) { + deviceCombo.BackBufferFormat = backBufferFormat; + settings.DeviceCombo = deviceCombo; + + depthStencilBufferComboBox.Items.Clear(); + if (enumeration.AppUsesDepthBuffer) { + foreach (DepthFormat format in deviceCombo.DepthStencilFormatList) { + depthStencilBufferComboBox.Items.Add(format); + if (format == settings.DepthStencilBufferFormat) + depthStencilBufferComboBox.SelectedItem = format; + } + if (depthStencilBufferComboBox.SelectedItem == null && depthStencilBufferComboBox.Items.Count > 0) + depthStencilBufferComboBox.SelectedIndex = 0; + } + else { + depthStencilBufferComboBox.Enabled = false; + depthStencilBufferComboBox.Items.Add("(not used)"); + depthStencilBufferComboBox.SelectedIndex = 0; + } + + vertexProcComboBox.Items.Clear(); + foreach (VertexProcessingType vpt in deviceCombo.VertexProcessingTypeList) { + vertexProcComboBox.Items.Add(vpt); + if (vpt == settings.VertexProcessingType) + vertexProcComboBox.SelectedItem = vpt; + } + if (vertexProcComboBox.SelectedItem == null && vertexProcComboBox.Items.Count > 0) + vertexProcComboBox.SelectedIndex = 0; + + presentIntervalComboBox.Items.Clear(); + foreach (PresentInterval pi in deviceCombo.PresentIntervalList) { + presentIntervalComboBox.Items.Add(pi); + if (pi == settings.PresentInterval) + presentIntervalComboBox.SelectedItem = pi; + } + if (presentIntervalComboBox.SelectedItem == null && presentIntervalComboBox.Items.Count > 0) + presentIntervalComboBox.SelectedIndex = 0; + + break; + } + } + } + + + + + /// + /// Respond to a change of selected depth/stencil buffer format. + /// + private void DepthStencilBufferFormatChanged(object sender, System.EventArgs e) { + if (enumeration.AppUsesDepthBuffer) + settings.DepthStencilBufferFormat = (DepthFormat)depthStencilBufferComboBox.SelectedItem; + + multisampleComboBox.Items.Clear(); + foreach (MultiSampleType msType in settings.DeviceCombo.MultiSampleTypeList) { + // Check for DS/MS conflict + bool conflictFound = false; + foreach (DepthStencilMultiSampleConflict DSMSConflict in settings.DeviceCombo.DepthStencilMultiSampleConflictList) { + if (DSMSConflict.DepthStencilFormat == settings.DepthStencilBufferFormat && + DSMSConflict.MultiSampleType == msType) { + conflictFound = true; + break; + } + } + if (!conflictFound) { + multisampleComboBox.Items.Add(msType); + if (msType == settings.MultisampleType) + multisampleComboBox.SelectedItem = msType; + } + } + if (multisampleComboBox.SelectedItem == null && multisampleComboBox.Items.Count > 0) + multisampleComboBox.SelectedIndex = 0; + + } + + + + + /// + /// Respond to a change of selected multisample type. + /// + private void MultisampleTypeChanged(object sender, System.EventArgs e) { + settings.MultisampleType = (MultiSampleType)multisampleComboBox.SelectedItem; + + // Find current max multisample quality + int maxQuality = 0; + DeviceCombo deviceCombo = settings.DeviceCombo; + for (int i = 0; i < deviceCombo.MultiSampleQualityList.Count; i++) { + if ((MultiSampleType)deviceCombo.MultiSampleTypeList[i] == settings.MultisampleType) { + maxQuality = (int)deviceCombo.MultiSampleQualityList[i]; + break; + } + } + + // Update multisample quality list based on new type + multisampleQualityComboBox.Items.Clear(); + for (int iLevel = 0; iLevel < maxQuality; iLevel++) { + multisampleQualityComboBox.Items.Add(iLevel); + if (settings.MultisampleQuality == iLevel) + multisampleQualityComboBox.SelectedItem = iLevel; + } + if (multisampleQualityComboBox.SelectedItem == null && multisampleQualityComboBox.Items.Count > 0) + multisampleQualityComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected multisample quality. + /// + private void MultisampleQualityChanged(object sender, System.EventArgs e) { + settings.MultisampleQuality = (int)multisampleQualityComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void VertexProcessingChanged(object sender, System.EventArgs e) { + settings.VertexProcessingType = (VertexProcessingType)vertexProcComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void PresentIntervalChanged(object sender, System.EventArgs e) { + settings.PresentInterval = (PresentInterval)presentIntervalComboBox.SelectedItem; + } +} + + +/// +/// Current D3D settings: adapter, device, mode, formats, etc. +/// +public class D3DSettings { + public bool IsWindowed; + + public GraphicsAdapterInfo WindowedAdapterInfo; + public GraphicsDeviceInfo WindowedDeviceInfo; + public DeviceCombo WindowedDeviceCombo; + public DisplayMode WindowedDisplayMode; // not changable by the user + public DepthFormat WindowedDepthStencilBufferFormat; + public MultiSampleType WindowedMultisampleType; + public int WindowedMultisampleQuality; + public VertexProcessingType WindowedVertexProcessingType; + public PresentInterval WindowedPresentInterval; + public int WindowedWidth; + public int WindowedHeight; + + public GraphicsAdapterInfo FullscreenAdapterInfo; + public GraphicsDeviceInfo FullscreenDeviceInfo; + public DeviceCombo FullscreenDeviceCombo; + public DisplayMode FullscreenDisplayMode; // changable by the user + public DepthFormat FullscreenDepthStencilBufferFormat; + public MultiSampleType FullscreenMultisampleType; + public int FullscreenMultisampleQuality; + public VertexProcessingType FullscreenVertexProcessingType; + public PresentInterval FullscreenPresentInterval; + + + + + /// + /// The adapter information + /// + public GraphicsAdapterInfo AdapterInfo { + get { return IsWindowed ? WindowedAdapterInfo : FullscreenAdapterInfo; } + set { if (IsWindowed) WindowedAdapterInfo = value; else FullscreenAdapterInfo = value; } + } + + + + + /// + /// The device information + /// + public GraphicsDeviceInfo DeviceInfo { + get { return IsWindowed ? WindowedDeviceInfo : FullscreenDeviceInfo; } + set { if (IsWindowed) WindowedDeviceInfo = value; else FullscreenDeviceInfo = value; } + } + + + + + /// + /// The device combo + /// + public DeviceCombo DeviceCombo { + get { return IsWindowed ? WindowedDeviceCombo : FullscreenDeviceCombo; } + set { if (IsWindowed) WindowedDeviceCombo = value; else FullscreenDeviceCombo = value; } + } + + + + + /// + /// The adapters ordinal + /// + public int AdapterOrdinal { + get { return DeviceCombo.AdapterOrdinal; } + } + + + + + /// + /// The type of device this is + /// + public DeviceType DevType { + get { return DeviceCombo.DevType; } + } + + + + + /// + /// The back buffers format + /// + public Format BackBufferFormat { + get { return DeviceCombo.BackBufferFormat; } + } + + + + + /// + /// The display mode + /// + public DisplayMode DisplayMode { + get { return IsWindowed ? WindowedDisplayMode : FullscreenDisplayMode; } + set { if (IsWindowed) WindowedDisplayMode = value; else FullscreenDisplayMode = value; } + } + + + + + /// + /// The Depth stencils format + /// + public DepthFormat DepthStencilBufferFormat { + get { return IsWindowed ? WindowedDepthStencilBufferFormat : FullscreenDepthStencilBufferFormat; } + set { if (IsWindowed) WindowedDepthStencilBufferFormat = value; else FullscreenDepthStencilBufferFormat = value; } + } + + + + + /// + /// The multisample type + /// + public MultiSampleType MultisampleType { + get { return IsWindowed ? WindowedMultisampleType : FullscreenMultisampleType; } + set { if (IsWindowed) WindowedMultisampleType = value; else FullscreenMultisampleType = value; } + } + + + + + /// + /// The multisample quality + /// + public int MultisampleQuality { + get { return IsWindowed ? WindowedMultisampleQuality : FullscreenMultisampleQuality; } + set { if (IsWindowed) WindowedMultisampleQuality = value; else FullscreenMultisampleQuality = value; } + } + + + + + /// + /// The vertex processing type + /// + public VertexProcessingType VertexProcessingType { + get { return IsWindowed ? WindowedVertexProcessingType : FullscreenVertexProcessingType; } + set { if (IsWindowed) WindowedVertexProcessingType = value; else FullscreenVertexProcessingType = value; } + } + + + + + /// + /// The presentation interval + /// + public PresentInterval PresentInterval { + get { return IsWindowed ? WindowedPresentInterval : FullscreenPresentInterval; } + set { if (IsWindowed) WindowedPresentInterval = value; else FullscreenPresentInterval = value; } + } + + + + + /// + /// Clone the d3d settings class + /// + public D3DSettings Clone() { + return (D3DSettings)MemberwiseClone(); + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/D3DSettingsForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step06/D3DSettingsForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/D3DSettingsForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect.cs new file mode 100644 index 0000000..e0e11ae --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect.cs @@ -0,0 +1,254 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; +using System.Runtime.InteropServices; + + + + +/// +/// The connection wizard will allow our users to pick a service provider, +/// and then connect to an existing application, or create a new one as the host. +/// +public class ConnectWizard { + private Peer peerObject; + private Address deviceAddress; + + private ChooseServiceProviderForm serviceProviderForm; + private CreateJoinForm createJoinForm; + + private Guid serviceProviderGuid; + private string username; + private string samplename; + private bool isInSession = false; + private bool isHost = false; + private int port = 0; + + private Guid applicationGuid; + + + + + /// + /// Constructor + /// + /// + /// + /// + public ConnectWizard(Peer peer, Guid application, string sampleName) { + peerObject = peer; + applicationGuid = application; + samplename = sampleName; + } + + + + + /// + /// The guid for the current service provider + /// + public Guid ServiceProvider { + get { + return serviceProviderGuid; } + set { + serviceProviderGuid = value; } + } + + + + + /// + /// The game's default port number + /// + public int DefaultPort { + get { + return port; } + set { + port = value; } + } + + + + + /// + /// Am I the host + /// + public bool IsHost { + get { + return isHost; } + set { + isHost = value; } + } + + + + + /// + /// The username + /// + public string Username { + get { + return username; } + set { + username = value; } + } + + + + + /// + /// The sample name + /// + public string SampleName { + get { + return samplename; } + } + + + + + /// + /// The applications guid + /// + public Guid ApplicationGuid { + get { + return applicationGuid; } + } + + + + + /// + /// Are we in a session + /// + public bool InSession { + get { return isInSession; } + set { isInSession = value; } + } + + + + + /// + /// Returns true if the given provider requires a port component + /// + /// ServiceProvider Guid + /// + static public bool ProviderRequiresPort(Guid provider) { + return (provider != Address.ServiceProviderSerial && + provider != Address.ServiceProviderModem && + provider != Address.ServiceProviderBlueTooth); + } + + + + + /// + /// Handler for when our form is disposed + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createJoinForm) + createJoinForm = null; + + if (sender == serviceProviderForm) + serviceProviderForm = null; + } + + + + + /// + /// Set the user information + /// + public void SetUserInfo() { + //Before we call host, let's actually call SetPeerInformation + PlayerInformation myinformation = new PlayerInformation(); + myinformation.Name = username; + + peerObject.SetPeerInformation(myinformation, SyncFlags.PeerInformation); + } + + + + + /// + /// Show the service providers form + /// + /// True if a service provider was picked, false otherwise + public bool DoShowServiceProviders() { + if (serviceProviderForm == null) { + username = null; + serviceProviderForm = new ChooseServiceProviderForm(peerObject,this); + serviceProviderForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (serviceProviderForm.ShowDialog() == DialogResult.OK) + return true; + + // The didn't hit ok + return false; + } + + + + + /// + /// Show the create or join screen + /// + /// True if we will be in a session, false otherwise + public bool DoCreateJoinGame() { + if (deviceAddress != null) + deviceAddress.Dispose(); + + deviceAddress = new Address(); + + if (createJoinForm != null) + createJoinForm.Dispose(); + + createJoinForm = new CreateJoinForm(peerObject, deviceAddress, this); + createJoinForm.Disposed += new System.EventHandler(this.FormDisposed); + + //Set the address's service provider (this will be the device address) + deviceAddress.ServiceProvider = serviceProviderGuid; + DialogResult drCreateJoin = createJoinForm.ShowDialog(); + if (drCreateJoin == DialogResult.Cancel) + return false; + + this.isHost = (drCreateJoin == DialogResult.Yes); + return true; + + } + + + + + /// + /// Start the wizard + /// + /// True if we are in a session, false otherwise + public bool StartWizard() { + isInSession = false; + + while (this.DoShowServiceProviders()) { + //Now let's create a game or join a session + if (this.DoCreateJoinGame()) { + // A game has been created or joined now, set our flag + isInSession = true; + break; + } + } + return isInSession; + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_AddressForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_AddressForm.cs new file mode 100644 index 0000000..181fc48 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_AddressForm.cs @@ -0,0 +1,207 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_AddressForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// Summary description for AddressForm. +/// +public class AddressForm : System.Windows.Forms.Form { + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox hostnameTextBox; + private System.Windows.Forms.TextBox portTextBox; + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + /// + /// Constructor + /// + public AddressForm( int defaultPort ) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // Set default port value + Port = defaultPort; + } + + + + + /// + /// The remote port on which to connect + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(portTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + portTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Remote hostname + /// + public string Hostname { + get { + return hostnameTextBox.Text; } + set { + hostnameTextBox.Text = value; } + } + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.label1 = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.hostnameTextBox = new System.Windows.Forms.TextBox(); + this.portTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(248, 48); + this.label1.TabIndex = 0; + this.label1.Text = "Please enter the optional components of the remote session address. If set blank," + + " DirectPlay will attempt to search the local network."; + // + // okButton + // + this.okButton.Location = new System.Drawing.Point(104, 144); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(72, 24); + this.okButton.TabIndex = 1; + this.okButton.Text = "&OK"; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(184, 144); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(72, 24); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "&Cancel"; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(32, 80); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(100, 16); + this.label2.TabIndex = 3; + this.label2.Text = "Hostname"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(160, 80); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 16); + this.label3.TabIndex = 4; + this.label3.Text = "Port"; + // + // hostnameTextBox + // + this.hostnameTextBox.Location = new System.Drawing.Point(32, 96); + this.hostnameTextBox.Name = "hostnameTextBox"; + this.hostnameTextBox.Size = new System.Drawing.Size(120, 20); + this.hostnameTextBox.TabIndex = 5; + this.hostnameTextBox.Text = ""; + // + // portTextBox + // + this.portTextBox.Location = new System.Drawing.Point(160, 96); + this.portTextBox.Name = "portTextBox"; + this.portTextBox.Size = new System.Drawing.Size(56, 20); + this.portTextBox.TabIndex = 6; + this.portTextBox.Text = ""; + // + // AddressForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(264, 176); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.portTextBox, + this.hostnameTextBox, + this.label3, + this.label2, + this.cancelButton, + this.okButton, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AddressForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Remote Address"; + this.ResumeLayout(false); + + } + #endregion + + private void okButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.OK; + } + + private void cancelButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.Cancel; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_AddressForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_AddressForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_AddressForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_CreateForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_CreateForm.cs new file mode 100644 index 0000000..c321e80 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_CreateForm.cs @@ -0,0 +1,346 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_CreateForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will allow you to create a new session, and set certain properties +/// of the session. +/// +public class CreateSessionForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.TextBox txtSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton notSignedRadio; + private System.Windows.Forms.RadioButton fullSignedRadio; + private System.Windows.Forms.RadioButton fastSignedRadio; + private System.Windows.Forms.CheckBox migrateHostCheckBox; + private System.Windows.Forms.CheckBox useDPNSVRCheckBox; + private System.Windows.Forms.TextBox localPortTextBox; + private System.Windows.Forms.Label localPortLabel; + private System.Windows.Forms.Button btnCancel; + + + + /// + /// Constructor + /// + public CreateSessionForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + peer = peerObject; + this.connectionWizard = connectionWizard; + deviceAddress = addressObject; + txtSession.Text = null; + this.Text = connectionWizard.SampleName + " - " + this.Text; + //Get the default session from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + // Get session name + txtSession.Text = (string)regKey.GetValue("DirectPlaySessionName", null); + + // Get host migration option + if (regKey.GetValue("DirectPlayMigrateHost",null) != null) { + migrateHostCheckBox.Checked = ((int)regKey.GetValue("DirectPlayMigrateHost",1)==1); + } + + + // Get session signing option + if (regKey.GetValue("DirectPlaySessionSigning",null) != null) { + if ("Full" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fullSignedRadio.Checked = true; + else if ("Fast" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fastSignedRadio.Checked = true; + else + notSignedRadio.Checked = true; + } + + regKey.Close(); + } + + // Set default port value and hide port UI if provider doesn't use them + Port = connectionWizard.DefaultPort; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + localPortTextBox.Hide(); + localPortLabel.Hide(); + } + } + + + + /// + /// The port on which to host + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(localPortTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + localPortTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.txtSession = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.fullSignedRadio = new System.Windows.Forms.RadioButton(); + this.fastSignedRadio = new System.Windows.Forms.RadioButton(); + this.notSignedRadio = new System.Windows.Forms.RadioButton(); + this.migrateHostCheckBox = new System.Windows.Forms.CheckBox(); + this.useDPNSVRCheckBox = new System.Windows.Forms.CheckBox(); + this.localPortLabel = new System.Windows.Forms.Label(); + this.localPortTextBox = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // txtSession + // + this.txtSession.Location = new System.Drawing.Point(96, 24); + this.txtSession.Name = "txtSession"; + this.txtSession.Size = new System.Drawing.Size(176, 20); + this.txtSession.TabIndex = 3; + this.txtSession.Text = ""; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(288, 12); + this.label1.TabIndex = 2; + this.label1.Text = "Session Name:"; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(128, 168); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(208, 168); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + // + // groupBox1 + // + this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] { + this.fullSignedRadio, + this.fastSignedRadio, + this.notSignedRadio}); + this.groupBox1.Location = new System.Drawing.Point(16, 64); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(112, 88); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Session Signing"; + // + // fullSignedRadio + // + this.fullSignedRadio.Location = new System.Drawing.Point(18, 22); + this.fullSignedRadio.Name = "fullSignedRadio"; + this.fullSignedRadio.Size = new System.Drawing.Size(80, 16); + this.fullSignedRadio.TabIndex = 9; + this.fullSignedRadio.Text = "Full signed"; + // + // fastSignedRadio + // + this.fastSignedRadio.Checked = true; + this.fastSignedRadio.Location = new System.Drawing.Point(18, 41); + this.fastSignedRadio.Name = "fastSignedRadio"; + this.fastSignedRadio.Size = new System.Drawing.Size(88, 16); + this.fastSignedRadio.TabIndex = 8; + this.fastSignedRadio.TabStop = true; + this.fastSignedRadio.Text = "Fast signed"; + // + // notSignedRadio + // + this.notSignedRadio.Location = new System.Drawing.Point(18, 55); + this.notSignedRadio.Name = "notSignedRadio"; + this.notSignedRadio.Size = new System.Drawing.Size(72, 24); + this.notSignedRadio.TabIndex = 10; + this.notSignedRadio.Text = "Disabled"; + // + // migrateHostCheckBox + // + this.migrateHostCheckBox.Checked = true; + this.migrateHostCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.migrateHostCheckBox.Location = new System.Drawing.Point(144, 64); + this.migrateHostCheckBox.Name = "migrateHostCheckBox"; + this.migrateHostCheckBox.Size = new System.Drawing.Size(136, 24); + this.migrateHostCheckBox.TabIndex = 11; + this.migrateHostCheckBox.Text = "Enable Host Migration"; + // + // useDPNSVRCheckBox + // + this.useDPNSVRCheckBox.Location = new System.Drawing.Point(144, 84); + this.useDPNSVRCheckBox.Name = "useDPNSVRCheckBox"; + this.useDPNSVRCheckBox.Size = new System.Drawing.Size(136, 24); + this.useDPNSVRCheckBox.TabIndex = 12; + this.useDPNSVRCheckBox.Text = "Use DPNSVR"; + // + // localPortLabel + // + this.localPortLabel.Location = new System.Drawing.Point(152, 122); + this.localPortLabel.Name = "localPortLabel"; + this.localPortLabel.Size = new System.Drawing.Size(64, 17); + this.localPortLabel.TabIndex = 13; + this.localPortLabel.Text = "Local Port:"; + // + // localPortTextBox + // + this.localPortTextBox.Location = new System.Drawing.Point(216, 120); + this.localPortTextBox.Name = "localPortTextBox"; + this.localPortTextBox.Size = new System.Drawing.Size(56, 20); + this.localPortTextBox.TabIndex = 14; + this.localPortTextBox.Text = ""; + // + // CreateSessionForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(290, 200); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.localPortTextBox, + this.localPortLabel, + this.useDPNSVRCheckBox, + this.migrateHostCheckBox, + this.txtSession, + this.label1, + this.groupBox1, + this.btnOK, + this.btnCancel}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.HelpButton = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateSessionForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Create a Session"; + this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.CreateSessionForm_HelpRequested); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// We are ready to create a session. Ensure the data is valid + /// then create the session + /// + private void btnOK_Click(object sender, System.EventArgs e) { + ApplicationDescription dpApp; + if ((txtSession.Text == null) || (txtSession.Text == "")) { + MessageBox.Show(this,"Please enter a session name before clicking OK.","No sessionname",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlaySessionName", txtSession.Text); + if (migrateHostCheckBox.Checked) + regKey.SetValue("DirectPlayMigrateHost",1); + else + regKey.SetValue("DirectPlayMigrateHost",0); + + if (fastSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Fast"); + else if (fullSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Full"); + else + regKey.SetValue("DirectPlaySessionSigning","Disabled"); + regKey.Close(); + } + + dpApp = new ApplicationDescription(); + dpApp.GuidApplication = connectionWizard.ApplicationGuid; + dpApp.SessionName = txtSession.Text; + dpApp.Flags = 0; + + if (migrateHostCheckBox.Checked) + dpApp.Flags |= SessionFlags.MigrateHost; + + if (!useDPNSVRCheckBox.Checked) + dpApp.Flags |= SessionFlags.NoDpnServer; + + if (fastSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FastSigned; + else if (fullSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FullSigned; + + // Specify the port number if available + if (ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + if (Port > 0) + deviceAddress.AddComponent(Address.KeyPort, Port); + } + + connectionWizard.SetUserInfo(); + // Host a game on deviceAddress as described by dpApp + // HostFlags.OkToQueryForAddressing allows DirectPlay to prompt the user + // using a dialog box for any device address information that is missing + peer.Host(dpApp,deviceAddress,HostFlags.OkToQueryForAddressing); + this.DialogResult = DialogResult.OK; + } + + private void CreateSessionForm_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent) { + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_CreateForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_CreateForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_CreateForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_JoinForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_JoinForm.cs new file mode 100644 index 0000000..a86efa7 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_JoinForm.cs @@ -0,0 +1,481 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_JoinForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will search for existing running samples and allow you to join them or will +/// allow you to create your own session as a host +/// +public class CreateJoinForm : System.Windows.Forms.Form { + private const int EnumExpireThreshold = 2000; + private bool amJoining = false; + + + + + /// + /// Hold our information of hosts we found + /// + private struct FindHostsResponseInformation { + public int LastFoundTime; + public ApplicationDescription ApplicationDesc; + public int RoundTripLatencyMs; + public Address sender; + public Address device; + public override string ToString() { + if (ApplicationDesc.MaxPlayers > 0) + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + "/" + ApplicationDesc.MaxPlayers + ") (" + RoundTripLatencyMs + "ms)"; + else + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + ") (" + RoundTripLatencyMs + "ms)"; + } + }; + + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + private Address hostAddress = null; + private bool isSearching = false; + private int findHostHandle = 0; + private CreateSessionForm createSessionForm = null; + private ResultCode resultCode; + private ArrayList foundHosts = new ArrayList(); + private bool isConnected = false; + private ManualResetEvent connectEvent = null; + private System.Timers.Timer updateListTimer = null; + private System.Timers.Timer connectTimer = null; + + private System.Windows.Forms.ListBox lstSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnSearch; + private System.Windows.Forms.Button btnJoin; + private System.Windows.Forms.Button btnCreate; + + + + + /// + /// Constructor + /// + public CreateJoinForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + deviceAddress = addressObject; + + //Set up the event handlers + peer.FindHostResponse += new FindHostResponseEventHandler(FindHostResponseMessage); + peer.ConnectComplete += new ConnectCompleteEventHandler(ConnectResult); + peer.AsyncOperationComplete += new AsyncOperationCompleteEventHandler(CancelAsync); + + //Set up our timer + updateListTimer = new System.Timers.Timer(300); // A 300 ms interval + updateListTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.UpdateTimer); + updateListTimer.SynchronizingObject = this; + updateListTimer.Start(); + //Set up our connect timer + connectTimer = new System.Timers.Timer(100); // A 100ms interval + connectTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.ConnectTimer); + connectTimer.SynchronizingObject = this; + // Set up our connect event + connectEvent = new ManualResetEvent(false); + + } + + + + + /// + /// An asynchronous operation was cancelled + /// + private void CancelAsync(object sender, AsyncOperationCompleteEventArgs e) { + if (e.Message.AsyncOperationHandle == findHostHandle) { + findHostHandle = 0; + btnSearch.Text = "Start Search"; + isSearching = false; + btnCreate.Enabled = true; + btnSearch.Enabled = true; + } + } + + + + + /// + /// A host was found and responded to our query + /// + private void FindHostResponseMessage(object sender, FindHostResponseEventArgs dpMessage) { + // Now we need to add this to our list of available sessions + SessionAdd(dpMessage.Message); + } + + + + + /// + /// Add this session to our list + /// + /// + private void SessionAdd(FindHostsResponseMessage dpMessage) { + FindHostsResponseInformation dpInfo = new FindHostsResponseInformation(); + + dpInfo.ApplicationDesc = dpMessage.ApplicationDescription; + dpInfo.device = dpMessage.AddressDevice; + dpInfo.sender = dpMessage.AddressSender; + dpInfo.RoundTripLatencyMs = dpMessage.RoundTripLatencyMs; + dpInfo.LastFoundTime = Environment.TickCount; + + // Let's check the items first and see if this one already exists + bool isFound = false; + + lock (foundHosts) { + for (int i = 0; i < lstSession.Items.Count; i++) { + if (dpInfo.ApplicationDesc.GuidInstance == ((FindHostsResponseInformation)lstSession.Items[i]).ApplicationDesc.GuidInstance) { + foundHosts[i] = dpInfo; + lstSession.Items[i] = dpInfo; + isFound = true; + } + } + if (!isFound) { + lstSession.Items.Add(dpInfo); + foundHosts.Add(dpInfo); + } + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + + if (isSearching) { + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + isSearching = !isSearching; + } + if (connectTimer != null) + connectTimer.Dispose(); + + if (updateListTimer != null) + updateListTimer.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.btnJoin = new System.Windows.Forms.Button(); + this.lstSession = new System.Windows.Forms.ListBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnCreate = new System.Windows.Forms.Button(); + this.btnSearch = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnJoin + // + this.btnJoin.Enabled = false; + this.btnJoin.Location = new System.Drawing.Point(7, 227); + this.btnJoin.Name = "btnJoin"; + this.btnJoin.Size = new System.Drawing.Size(74, 27); + this.btnJoin.TabIndex = 2; + this.btnJoin.Text = "Join"; + this.btnJoin.Click += new System.EventHandler(this.btnJoin_Click); + // + // lstSession + // + this.lstSession.Location = new System.Drawing.Point(5, 37); + this.lstSession.Name = "lstSession"; + this.lstSession.Size = new System.Drawing.Size(400, 186); + this.lstSession.TabIndex = 1; + this.lstSession.DoubleClick += new System.EventHandler(this.btnJoin_Click); + this.lstSession.SelectedValueChanged += new System.EventHandler(this.SelectedChange); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(5, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(312, 16); + this.label1.TabIndex = 0; + this.label1.Text = "Select session to join, or click Create to start a new session."; + // + // btnCreate + // + this.btnCreate.DialogResult = System.Windows.Forms.DialogResult.Yes; + this.btnCreate.Location = new System.Drawing.Point(84, 227); + this.btnCreate.Name = "btnCreate"; + this.btnCreate.Size = new System.Drawing.Size(74, 27); + this.btnCreate.TabIndex = 2; + this.btnCreate.Text = "Create"; + this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click); + // + // btnSearch + // + this.btnSearch.Location = new System.Drawing.Point(319, 7); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(86, 27); + this.btnSearch.TabIndex = 2; + this.btnSearch.Text = "Start Search"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(333, 227); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + // + // CreateJoinForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(411, 264); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.btnCreate, + this.btnJoin, + this.btnSearch, + this.btnCancel, + this.lstSession, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateJoinForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Join or create a session"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// The selected session was changed. + /// + private void SelectedChange(object sender, System.EventArgs e) { + if (amJoining) + return; // Do nothing if we are already joining a session + + btnJoin.Enabled = (lstSession.SelectedItem != null); + } + + + + + /// + /// We either want to start or stop searching + /// + private void btnSearch_Click(object sender, System.EventArgs e) { + if (!isSearching) { + if( hostAddress != null ) + hostAddress.Dispose(); + + hostAddress = new Address(); + hostAddress.ServiceProvider = deviceAddress.ServiceProvider; + + // See if we should prompt the user for the remote address + if (ConnectWizard.ProviderRequiresPort(hostAddress.ServiceProvider)) { + AddressForm addressDialog = new AddressForm(connectionWizard.DefaultPort); + addressDialog.ShowDialog(this); + + // If the user cancelled the address form, abort the search + if (addressDialog.DialogResult != DialogResult.OK) + return; + + // If a port was specified, add the component + if (addressDialog.Hostname != "") + hostAddress.AddComponent(Address.KeyHostname, addressDialog.Hostname); + + // If a hostname was specified, add the component + if (addressDialog.Port > 0) + hostAddress.AddComponent(Address.KeyPort, addressDialog.Port); + } + + //Time to enum our hosts + ApplicationDescription desc = new ApplicationDescription(); + desc.GuidApplication = connectionWizard.ApplicationGuid; + + // If the user was not already asked for address information, DirectPlay + // should prompt with native UI + FindHostsFlags flags = 0; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + flags = FindHostsFlags.OkToQueryForAddressing; + + peer.FindHosts(desc,hostAddress,deviceAddress,null,Timeout.Infinite,0,Timeout.Infinite, flags, out findHostHandle); + isSearching = true; + btnCreate.Enabled = false; + btnSearch.Text = "Stop Search"; + } + else { + btnSearch.Text = "Stopping..."; + btnSearch.Enabled = false; + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + } + } + + + + + /// + /// A form was disposed + /// + /// + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createSessionForm) + createSessionForm = null; + } + + + + + /// + /// We should create a new session. Display a dialog allowing the user to set + /// certain options + /// + private void btnCreate_Click(object sender, System.EventArgs e) { + this.DialogResult = DialogResult.None; + ((Button)sender).DialogResult = DialogResult.None; + if (createSessionForm == null) { + createSessionForm = new CreateSessionForm(peer,deviceAddress,connectionWizard); + createSessionForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (createSessionForm.ShowDialog(this) != DialogResult.Cancel) { + ((Button)sender).DialogResult = DialogResult.Yes; + this.DialogResult = DialogResult.Yes; + } + } + + + + + /// + /// Determine if we need to expire any of our currently listed servers + /// + private void UpdateTimer(object sender, System.Timers.ElapsedEventArgs e) { + lock (foundHosts) { + for (int i = 0; i< foundHosts.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)foundHosts[i]).LastFoundTime > EnumExpireThreshold) { + foundHosts.RemoveAt(i); + break; + } + } + for (int i = 0; i< lstSession.Items.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)lstSession.Items[i]).LastFoundTime > EnumExpireThreshold) { + lstSession.Items.RemoveAt(i); + break; + } + } + } + } + + + + + /// + /// Wait for a connect to complete + /// + private void ConnectTimer(object sender, System.Timers.ElapsedEventArgs e) { + if (connectEvent.WaitOne(0,false)) { // Wait for the Connect event to be fired + if (isConnected) { // Are we connected? + // Get rid of the timer + if (updateListTimer != null) + updateListTimer.Stop(); + + if (connectTimer != null) + connectTimer.Stop(); + + this.DialogResult = DialogResult.OK; + this.Close(); + return; + } + else { + MessageBox.Show(this,"Failed to connect. The error code was: \n" + resultCode.ToString() ,"Failed to connect",MessageBoxButtons.OK,MessageBoxIcon.Information); + // Restart our timer + updateListTimer.Start(); + } + } + } + + + + + /// + /// Fired when a connect complete message is received from DirectPlay. Fire + /// our event to notify the sample we've connected + /// + private void ConnectResult(object sender, ConnectCompleteEventArgs e) { + if (e.Message.ResultCode == 0) { + isConnected = true; + } + else + isConnected = false; + + resultCode = e.Message.ResultCode; + // Notify the timer that we've connected. + connectEvent.Set(); + } + + + + + /// + /// Join an existing session + /// + private void btnJoin_Click(object sender, System.EventArgs e) { + FindHostsResponseInformation dpInfo; + if (lstSession.SelectedItem == null) { + MessageBox.Show(this,"Please select a session before clicking join.","No session",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + // Turn off all buttons + btnCreate.Enabled = false; + btnCancel.Enabled = false; + btnJoin.Enabled = false; + btnSearch.Enabled = false; + amJoining = true; + // Stop our secondary timer + updateListTimer.Stop(); + dpInfo = ((FindHostsResponseInformation)lstSession.SelectedItem); + connectionWizard.SetUserInfo(); + peer.Connect(dpInfo.ApplicationDesc,dpInfo.sender, dpInfo.device,null,ConnectFlags.OkToQueryForAddressing); + // Now start our 'Connect' timer + connectTimer.Start(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_JoinForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_JoinForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_JoinForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_ServiceProviderForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_ServiceProviderForm.cs new file mode 100644 index 0000000..4884d84 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_ServiceProviderForm.cs @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_ServiceProviderForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +/// +/// This form allows you to choose a service provider and username for your +/// sample +/// +public class ChooseServiceProviderForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListBox lstSP; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtUser; + private System.Windows.Forms.Button btnCancel; + + + + + /// + /// Constructor + /// + public ChooseServiceProviderForm(Peer peerObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + // Fill up our listbox with the service providers + ServiceProviderInformation[] serviceProviders = peer.GetServiceProviders(false); + foreach (ServiceProviderInformation info in serviceProviders) + lstSP.Items.Add(info); + + txtUser.Text = null; + //Get the default username from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + try { + txtUser.Text = (string)regKey.GetValue("DirectPlayUserName", null); + lstSP.SelectedIndex = (int)regKey.GetValue("DirectPlaySPIndex", 0); + regKey.Close(); + } + catch { + txtUser.Text = null; + lstSP.SelectedIndex = 0; + } + } + else + lstSP.SelectedIndex = 0; + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + txtUser.Text = SystemInformation.UserName; + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.lstSP = new System.Windows.Forms.ListBox(); + this.txtUser = new System.Windows.Forms.TextBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lstSP + // + this.lstSP.Location = new System.Drawing.Point(12, 63); + this.lstSP.Name = "lstSP"; + this.lstSP.Size = new System.Drawing.Size(324, 147); + this.lstSP.TabIndex = 1; + this.lstSP.DoubleClick += new System.EventHandler(this.lstSP_DoubleClick); + // + // txtUser + // + this.txtUser.Location = new System.Drawing.Point(13, 20); + this.txtUser.MaxLength = 30; + this.txtUser.Name = "txtUser"; + this.txtUser.Size = new System.Drawing.Size(326, 20); + this.txtUser.TabIndex = 5; + this.txtUser.Text = ""; + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(181, 215); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 2; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(260, 215); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(11, 44); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(376, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Please pick your service provider:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(10, 5); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(327, 12); + this.label2.TabIndex = 4; + this.label2.Text = "User Name:"; + // + // ChooseServiceProviderForm + // + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(343, 246); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.txtUser, + this.label2, + this.btnCancel, + this.btnOK, + this.lstSP, + this.label1}); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChooseServiceProviderForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Choose Service Provider"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// They don't want to run this sample + /// + private void btnCancel_Click(object sender, System.EventArgs e) { + this.Dispose(); + } + + + + + /// + /// Same as clicking ok + /// + private void lstSP_DoubleClick(object sender, System.EventArgs e) { + // Call the ok button click handler + object[] parameters = new object[] { sender, e }; + this.BeginInvoke(new System.EventHandler(btnOK_Click), parameters); + } + + + + + /// + /// Select this username and service provider if valid, then continue the wizard + /// + private void btnOK_Click(object sender, System.EventArgs e) { + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + MessageBox.Show(this,"Please enter a username before clicking OK.","No Username",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + try { + connectionWizard.ServiceProvider = ((ServiceProviderInformation)lstSP.SelectedItem).Guid; + connectionWizard.Username = txtUser.Text; + } + catch { // We assume if we got here there was no selected item. + MessageBox.Show(this,"Please select a service provider before clicking OK.","No Service Provider",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlayUserName", txtUser.Text); + regKey.SetValue("DirectPlaySPIndex", lstSP.SelectedIndex); + regKey.Close(); + } + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_ServiceProviderForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_ServiceProviderForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/DPlayConnect_ServiceProviderForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/DXUtil.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/DXUtil.cs new file mode 100644 index 0000000..5d0f0e5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/DXUtil.cs @@ -0,0 +1,285 @@ +//----------------------------------------------------------------------------- +// File: DXUtil.cs +// +// Desc: Shortcut macros and functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.IO; +using System.Runtime.InteropServices; + + + + +/// +/// Enumeration for various actions our timer can perform +/// +public enum DirectXTimer { + Reset, + Start, + Stop, + Advance, + GetAbsoluteTime, + GetApplicationTime, + GetElapsedTime +}; + + + + +/// +/// Generic utility functions for our samples +/// +public class DXUtil { + #region Timer Internal Stuff + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceCounter(ref long PerformanceCount); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("winmm.dll")] + public static extern int timeGetTime(); + private static bool isTimerInitialized = false; + private static bool m_bUsingQPF = false; + private static bool m_bTimerStopped = true; + private static long m_llQPFTicksPerSec = 0; + private static long m_llStopTime = 0; + private static long m_llLastElapsedTime = 0; + private static long m_llBaseTime = 0; + private static double m_fLastElapsedTime = 0.0; + private static double m_fBaseTime = 0.0; + private static double m_fStopTime = 0.0; + #endregion + + // Constants for SDK Path registry keys + private const string sdkPath = "Software\\Microsoft\\DirectX SDK"; + private const string sdkKey = "DX9J3SDK Samples Path"; + + private DXUtil() { /* Private Constructor */ } + + + + + /// + /// Returns the DirectX SDK media path + /// + public static string SdkMediaPath { + get { + Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sdkPath); + string sReg = string.Empty; + if (rKey != null) { + sReg = (string)rKey.GetValue(sdkKey); + rKey.Close(); + } + if (sReg != null) + sReg += @"\Media\"; + else + return string.Empty; + + return sReg; + } + } + + + + + /// + /// Performs timer opertations. Use the following commands: + /// + /// DirectXTimer.Reset - to reset the timer + /// DirectXTimer.Start - to start the timer + /// DirectXTimer.Stop - to stop (or pause) the timer + /// DirectXTimer.Advance - to advance the timer by 0.1 seconds + /// DirectXTimer.GetAbsoluteTime - to get the absolute system time + /// DirectXTimer.GetApplicationTime - to get the current time + /// DirectXTimer.GetElapsedTime - to get the time that elapsed between TIMER_GETELAPSEDTIME calls + /// + /// + public static float Timer(DirectXTimer command) { + if (!isTimerInitialized) { + isTimerInitialized = true; + + // Use QueryPerformanceFrequency() to get frequency of timer. If QPF is + // not supported, we will timeGetTime() which returns milliseconds. + long qwTicksPerSec = 0; + m_bUsingQPF = QueryPerformanceFrequency(ref qwTicksPerSec); + if (m_bUsingQPF) + m_llQPFTicksPerSec = qwTicksPerSec; + } + if (m_bUsingQPF) { + double time; + double fElapsedTime; + long qwTime = 0; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_llStopTime != 0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + qwTime = m_llStopTime; + else + QueryPerformanceCounter(ref qwTime); + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (qwTime - m_llLastElapsedTime) / (double) m_llQPFTicksPerSec; + m_llLastElapsedTime = qwTime; + return (float)fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + double fAppTime = (double) (qwTime - m_llBaseTime) / (double) m_llQPFTicksPerSec; + return (float)fAppTime; + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_llBaseTime = qwTime; + m_llLastElapsedTime = qwTime; + m_llStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_llBaseTime += qwTime - m_llStopTime; + m_llStopTime = 0; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_llStopTime = qwTime; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_llStopTime += m_llQPFTicksPerSec/10; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + time = qwTime / (double) m_llQPFTicksPerSec; + return (float)time; + } + + return -1.0f; // Invalid command specified + } + else { + // Get the time using timeGetTime() + double time; + double fElapsedTime; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_fStopTime != 0.0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + time = m_fStopTime; + else + time = timeGetTime() * 0.001; + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (time - m_fLastElapsedTime); + m_fLastElapsedTime = time; + return (float) fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + return (float) (time - m_fBaseTime); + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_fBaseTime = time; + m_fLastElapsedTime = time; + m_fStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_fBaseTime += time - m_fStopTime; + m_fStopTime = 0.0f; + m_fLastElapsedTime = time; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_fStopTime = time; + m_fLastElapsedTime = time; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_fStopTime += 0.1f; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + return (float) time; + } + + return -1.0f; // Invalid command specified + } + } + + + + + /// + /// Returns a valid path to a DXSDK media file + /// + /// Initial path to search + /// Filename we're searching for + /// Full path to the file + public static string FindMediaFile(string path, string filename) { + // First try to load the file in the full path + if (path != null) { + if (File.Exists(AppendDirectorySeparator(path) + filename)) + return AppendDirectorySeparator(path) + filename; + } + + // if not try to find the filename in the current folder. + if (File.Exists(filename)) + return AppendDirectorySeparator(Directory.GetCurrentDirectory()) + filename; + + // last, check if the file exists in the media directory + if (File.Exists(AppendDirectorySeparator(SdkMediaPath) + filename)) + return AppendDirectorySeparator(SdkMediaPath) + filename; + + throw new FileNotFoundException("Could not find this file.", filename); + } + + + + + /// + /// Returns a valid string with a directory separator at the end. + /// + private static string AppendDirectorySeparator(string filename) { + if (!filename.EndsWith(@"\")) + return filename + @"\"; + + return filename; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/GameClass.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/GameClass.cs new file mode 100644 index 0000000..a175b7a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/GameClass.cs @@ -0,0 +1,301 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public delegate void MessageDelegate(byte message); // Delegate for messages arriving via DirectPlay. +public delegate void AudioDelegate(); // Delegate to handle audio playback. +public delegate void PeerCloseCallback(); // This delegate will be called when the session terminated event is fired. + +public class GameClass : GraphicsSample { + private GraphicsFont drawingFont = null; + private Point destination = new Point(0, 0); + private InputClass input = null; + private MouseInput mouseInput = null; + + private PlayClass play = null; + private bool networkEnabled; + private PlayClass peer = null; + private PositionedMesh spaceSphere = null; + private Ship playerShip = null; + private Camera camera = null; + + private CameraMode cameraMode = CameraMode.Fixed; + private Matrix viewMatrix; + private Vector2 screenCenter; + private Vector2 mouseLoc; + private SoundHandler soundHandler = null; + private bool kbThrust = false; + private bool cPressed = false; + private bool f5Pressed = false; + private bool f6Pressed = false; + private bool f7Pressed = false; + private bool f8Pressed = false; + private bool f9Pressed = false; + private bool f10Pressed = false; + private bool spacePressed = false; + + private string debugText; + public string DebugText { get { return debugText; } set { debugText = value; } } + private bool debugging = true; + + public GameClass(bool startFullScreen, Size size, bool enableNetwork) { + this.startFullscreen = startFullScreen; + this.Size = size; + this.networkEnabled = enableNetwork; + this.Text = "SpaceWar3D-Step06"; + + drawingFont = new GraphicsFont( "Verdana", System.Drawing.FontStyle.Regular); + + input = new InputClass(this); + mouseInput = new MouseInput(this); + this.MouseMove +=new MouseEventHandler(GameClass_MouseMove); + camera = new Camera(); + soundHandler = new SoundHandler(this); + + if (networkEnabled) { + peer = new PlayClass(this); + } + + } + + private void ProcessInput() { + //Get input + KeyboardState kbState = input.GetInputState(); + if (kbState == null) + return; + if (kbState[Key.W] || kbState[Key.Up]) { + kbThrust = true; + } + else { + kbThrust = false; + } + if (kbState[Key.C] && !cPressed) { + cPressed = true; + SelectNextCameraMode(); + } + if (!kbState[Key.C]) { + cPressed = false; + } + + if (kbState[Key.F5] && !f5Pressed) { + f5Pressed = true; + playerShip.Sounds |= Sounds.Taunt; + } + if (!kbState[Key.F5]) { + f5Pressed = false; + } + if (kbState[Key.F6] && !f6Pressed) { + f6Pressed = true; + playerShip.Sounds |= Sounds.Dude1; + } + if (!kbState[Key.F6]) { + f6Pressed = false; + } + if (kbState[Key.F7] && !f7Pressed) { + f7Pressed = true; + playerShip.Sounds |= Sounds.Dude2; + } + if (!kbState[Key.F7]) { + f7Pressed = false; + } + if (kbState[Key.F8] && !f8Pressed) { + f8Pressed = true; + playerShip.Sounds |= Sounds.Dude3; + } + if (!kbState[Key.F8]) { + f8Pressed = false; + } + if (kbState[Key.F9] && !f9Pressed) { + f9Pressed = true; + playerShip.Sounds |= Sounds.Dude4; + } + if (!kbState[Key.F9]) { + f9Pressed = false; + } + if (kbState[Key.F10] && !f10Pressed) { + f10Pressed = true; + playerShip.Sounds |= Sounds.Dude1; + } + if (!kbState[Key.F10]) { + f10Pressed = false; + } + if (kbState[Key.Space] && !spacePressed) { + spacePressed = true; + playerShip.EnterHyper(); + } + if (!kbState[Key.Space]) { + spacePressed = false; + } + } + + protected override void FrameMove() { + int fps = (int) framePerSecond; + debugText = "FPS: " + fps.ToString() + "\r\n"; + debugText += "ShipLocation:\r\n" + playerShip.Location.ToString(); + + debugText += "CameraMode: " + cameraMode.ToString()+"\r\n"; + debugText += "Use the mouse to rotate your ship, and W or the \r\n" + + "up arrow to thrust forward. The C key changes the camera views. F5-F10 for sounds \r\n\r\n"; + ProcessInput(); + MouseControlValues v = mouseInput.Values; + if (v.FireButtonPushed) + playerShip.Shoot(); + + float yawAmount = mouseLoc.X - screenCenter.X; + float pitchAmount = mouseLoc.Y - screenCenter.Y; + + playerShip.YawPitchRoll(yawAmount, pitchAmount, elapsedTime); + playerShip.SetThrust(v.ThrustButtonPushed | kbThrust, elapsedTime); + playerShip.UpdatePosition(elapsedTime); + + /*Here we set up the view matrix and space dome location. The space dome moves but not rotates with the player + * and is alway drawn first, so it looks like it is infinitely distant. + * + * In chase mode, the chaseMatrix determines the offset from the ship. If you want to move our viewpoint + * back from the ship more, increase the negative z value. + * + * The fixed mode camera sits at the origin and always tracks the player ship. Very hard to control from + * this viewpoint, but cool to watch. + */ + + Vector3 spaceSphereLocation = new Vector3(0, 0, 0); + switch (cameraMode) { + case CameraMode.ChaseMode: { + Matrix chaseMatrix = Matrix.Translation(0, 6, -14); + chaseMatrix *= playerShip.Position.WorldMatrix; + viewMatrix = Matrix.Invert(chaseMatrix); + spaceSphereLocation = playerShip.Position.Location; + break; + } + case CameraMode.CockpitMode: { + viewMatrix = Matrix.Invert(playerShip.Position.WorldMatrix); + spaceSphereLocation = playerShip.Position.Location; + break; + } + case CameraMode.Fixed: { + camera.Point(0,0,0, + playerShip.Position.XPos, + playerShip.Position.YPos, + playerShip.Position.ZPos); + viewMatrix = camera.ViewMatrix; + spaceSphereLocation = new Vector3(0, 0, 0); + break; + } + } + device.Transform.View = viewMatrix; + spaceSphere.Position.Location = spaceSphereLocation; + + //rotate space very slowly for that nice twinkly star effect + spaceSphere.Position.RotateRel(-.001f * elapsedTime,-0.0001f * elapsedTime, 0); + + + //Play the sounds + soundHandler.Play(playerShip.Sounds); + playerShip.Sounds = (Sounds) 0; + + + } + + + /// + /// Called once per frame, the call is the entry point for 3d rendering. This + /// function sets up render states, clears the viewport, and renders the scene. + /// + protected override void Render() { + //Clear the backbuffer to a Blue color + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + + //Set the view matrix + device.Transform.View = viewMatrix; + + //Begin the scene + device.BeginScene(); + device.RenderState.ZBufferEnable = false; + device.RenderState.Lighting = false; + spaceSphere.Render(); + device.RenderState.Lighting = true; + device.RenderState.ZBufferEnable = true; + + device.Transform.World = playerShip.Position.WorldMatrix; + playerShip.Render(); + + if (debugging) { + drawingFont.DrawText(5,5,Color.Yellow,debugText); + } + device.EndScene(); + } + + /// + /// Initialize scene objects. + /// + protected override void InitializeDeviceObjects() { + drawingFont.InitializeDeviceObjects(device); + + spaceSphere = new PositionedMesh(device, "SpaceSphere.x"); + playerShip = new Ship(device, this, HullColors.White); + } + + /// + /// Called when a device needs to be restored. + /// + protected override void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { + device.RenderState.Ambient = Color.FromArgb(150,150,150); + device.RenderState.SpecularEnable = true; + device.Lights[0].Type = LightType.Directional; + device.Lights[0].Direction = new Vector3(0,-1, -1); + device.Lights[0].Diffuse = Color.White; + device.Lights[0].Specular = Color.White; + device.Lights[0].Enabled = true; + device.RenderState.Lighting = true; + + device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, + (presentParams.BackBufferWidth/presentParams.BackBufferHeight), + 1.5f, 20000.0f ); + + device.Transform.View = camera.ViewMatrix; + + screenCenter = new Vector2( + presentParams.BackBufferWidth / 2, + presentParams.BackBufferHeight / 2); + + } + + protected override void Dispose(bool disposing) { + if (networkEnabled) + play.Dispose(); + base.Dispose(disposing); + } + + public void MessageArrived(byte message) { + + } + public void SendPoint() { + + } + + /// + // When the peer closes, the code here is executed. + /// + public void PeerClose() { + // The session was terminated, go ahead and shut down + this.Dispose(); + } + + private void SelectNextCameraMode() { + int mode = (int) cameraMode; + mode++; + if (mode > 2) + mode = 0; + cameraMode = (CameraMode) mode; + } + + private void GameClass_MouseMove(object sender, MouseEventArgs e) { + mouseLoc.X = e.X; + mouseLoc.Y = e.Y; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/GameClass.resx b/Source Code updated 08-12-05/Spacewar3D/Step06/GameClass.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/GameClass.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/HelpScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/HelpScreen.cs new file mode 100644 index 0000000..7d54363 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/HelpScreen.cs @@ -0,0 +1,113 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.IO; + + + /// + /// Summary description for HelpScreen. + /// +public class HelpScreen : System.Windows.Forms.Form { + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.TextBox helpText; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public HelpScreen() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + string helpFile = MediaUtilities.FindFile("Help.txt"); + if (File.Exists(helpFile)) { + StreamReader sr; + try { + sr = new StreamReader(helpFile); + helpText.Text = sr.ReadToEnd(); + sr.Close(); + } + catch ( Exception e ) { + helpText.Text = e.ToString(); + } + + } + else { + helpText.Text = "Unable to locate " + helpFile.ToString(); + } + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.closeButton = new System.Windows.Forms.Button(); + this.helpText = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // closeButton + // + this.closeButton.BackColor = System.Drawing.Color.Black; + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.Dock = System.Windows.Forms.DockStyle.Bottom; + this.closeButton.ForeColor = System.Drawing.Color.Red; + this.closeButton.Location = new System.Drawing.Point(0, 615); + this.closeButton.Name = "closeButton"; + this.closeButton.Size = new System.Drawing.Size(616, 23); + this.closeButton.TabIndex = 0; + this.closeButton.Text = "Close"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // helpText + // + this.helpText.BackColor = System.Drawing.Color.Black; + this.helpText.Dock = System.Windows.Forms.DockStyle.Fill; + this.helpText.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.helpText.ForeColor = System.Drawing.Color.Red; + this.helpText.Location = new System.Drawing.Point(0, 0); + this.helpText.Multiline = true; + this.helpText.Name = "helpText"; + this.helpText.ReadOnly = true; + this.helpText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.helpText.Size = new System.Drawing.Size(616, 615); + this.helpText.TabIndex = 1; + this.helpText.TabStop = false; + this.helpText.Text = ""; + // + // HelpScreen + // + this.AcceptButton = this.closeButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(616, 638); + this.Controls.Add(this.helpText); + this.Controls.Add(this.closeButton); + this.Name = "HelpScreen"; + this.Text = "SpaceWar! Help"; + this.ResumeLayout(false); + + } + #endregion + + private void closeButton_Click(object sender, System.EventArgs e) { + this.Close(); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/HelpScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step06/HelpScreen.resx new file mode 100644 index 0000000..a4f535a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/HelpScreen.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + HelpScreen + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/MediaUtilities.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/MediaUtilities.cs new file mode 100644 index 0000000..685a63d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/MediaUtilities.cs @@ -0,0 +1,35 @@ +using System; +using System.IO; +using System.Configuration; + + + /// + /// Summary description for MediaUtilities. + /// +public class MediaUtilities { + // private static string defaultPath = @"..\..\media\"; + private static string mediaPath = ConfigurationSettings.AppSettings.Get("MediaPath"); + + public MediaUtilities() { + } + + public static string FindFile(string filename) { + return FindFile(mediaPath, filename); + } + + public static string FindFile(string path, string filename) { + // First try to load the file in the full path + string fullName = AppendDirectorySeparator(path) + filename; + if (File.Exists(fullName)) + return fullName; + else + throw new FileNotFoundException("Could not find this file.", filename); + } + + private static string AppendDirectorySeparator(string pathname) { + if (!pathname.EndsWith(@"\")) + return pathname + @"\"; + else + return pathname; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/MouseInput.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/MouseInput.cs new file mode 100644 index 0000000..7a5599b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/MouseInput.cs @@ -0,0 +1,53 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + + + +public struct MouseControlValues { + public int Yaw; + public int Pitch; + public bool FireButtonPushed; + public bool ThrustButtonPushed; +} + + /// + /// Summary description for MouseInput. + /// +public class MouseInput { + private Device device = null; + private MouseControlValues values; + public MouseControlValues Values { + get { + UpdateInput(); + return values; + } + } + + public MouseInput(Control parent) { + // Create our mouse device + device = new Device(SystemGuid.Mouse); + device.SetCooperativeLevel(parent, CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive); + device.Properties.AxisModeAbsolute = false; + device.Acquire(); + } + + + public void UpdateInput() { + MouseState state = device.CurrentMouseState; + values.Yaw = state.X; + values.Pitch = state.Y; + + byte [] buttonStatus = state.GetMouseButtons(); + if (buttonStatus[0]!=0) + values.FireButtonPushed = true; + else + values.FireButtonPushed = false; + + if (buttonStatus[1]!=0) + values.ThrustButtonPushed = true; + else + values.ThrustButtonPushed = false; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/Photon.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/Photon.cs new file mode 100644 index 0000000..de0c5a5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/Photon.cs @@ -0,0 +1,94 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// Summary description for Photon. + /// +public class Photon : IDisposable { + + private const float maxLife = 5; + public Vector3 Location { + get { + + return photonMesh.Position.Location; + } set { + photonMesh.Position.Location = value; + } + } + + private Vector3 launchVector; + private PositionedMesh photonMesh; + private Device device; + private float age; + public float Age { get { return age; } set { age = value; } } + private bool alive = false; + public bool Alive { get { return alive; } set { alive = value; } } + + private bool disposing = false; + + public Photon(Device device) { + this.device = device; + + photonMesh = new PositionedMesh(device, "photon.x"); + + alive = false; + age = 0; + } + + public void SetShot(Vector3 position, Vector3 launchVector) { + age = 0; + alive = true; + photonMesh.Position.Location = position; + this.launchVector = launchVector; + } + + public void UpdatePosition(float elapsedtime) { + if (disposing) + return; + age += elapsedtime; + if (age >= Constants.ShotLifetime ) { + this.alive = false; + } + else { + photonMesh.Position.RotateRel(0, elapsedtime*10,0); + Vector3 moveVector = elapsedtime * Constants.ShotVelocity * launchVector; + photonMesh.Position.MoveRel(moveVector.X, moveVector.Y, moveVector.Z); + } + + } + + public void Render() { + if (disposing | !alive) + return; + + device.RenderState.Lighting = false; + device.RenderState.AlphaBlendEnable = true; + device.RenderState.AlphaBlendOperation = BlendOperation.Add; + device.RenderState.AlphaSourceBlend = Blend.One; + device.RenderState.DestinationBlend = Blend.One; + device.Transform.World = photonMesh.Position.WorldMatrix; + photonMesh.Render(); + device.RenderState.AlphaBlendEnable = false; + device.RenderState.Lighting = true; + } + + public void RestoreDeviceObjects() { + + } + #region IDisposable Members + + public void Dispose() { + disposing = true; + + if (photonMesh != null) + photonMesh.Dispose(); + + } + + #endregion +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/PositionedMesh.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/PositionedMesh.cs new file mode 100644 index 0000000..7f5f278 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/PositionedMesh.cs @@ -0,0 +1,435 @@ +using System; +using System.Drawing; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public class PositionedMesh : IDisposable { + private Device device = null; + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + private Sphere boundingSphere; + + + private WorldPosition worldPosition; + public WorldPosition Position { get { return worldPosition; } set { worldPosition = value; } } + + private float velocity; + public float Velocity { get { return velocity; } set { velocity = value; } } + + /// + /// Constructor + /// + /// The initial filename + public PositionedMesh(string filename) { + fileName = filename; + } + public PositionedMesh() : this ("PositionedMesh") {} + + public PositionedMesh(Device device, string filename) { + Create(device, filename); + } + + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + /// + ///The bounding sphere + /// + public Sphere BoundingSphere { + get { return boundingSphere; } + } + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + worldPosition = new WorldPosition(); + + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + this.device = device; + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + + + + filename = MediaUtilities.FindFile(filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(filename, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + + Mesh tempMesh = null; + string errorString; + tempMesh = Mesh.Clean(CleanType.Optimization, systemMemoryMesh, adjacencyBuffer, adjacencyBuffer, out errorString); + if (tempMesh != systemMemoryMesh) { + systemMemoryMesh.Dispose(); + systemMemoryMesh = tempMesh; + } + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + + // Setup bounding volumes + VertexBuffer vb = systemMemoryMesh.VertexBuffer; + GraphicsStream vertexData = vb.Lock(0, 0, LockFlags.NoSystemLock); + boundingSphere.Radius = Geometry.ComputeBoundingSphere(vertexData,systemMemoryMesh.NumberVertices,systemMemoryMesh.VertexFormat, out boundingSphere.CenterPoint); + vb.Unlock(); + vb.Dispose(); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + + + } + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. + localMemoryMesh = systemMemoryMesh.Clone(MeshFlags.VbWriteOnly | MeshFlags.IbWriteOnly, + systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + // Set the world transform + device.Transform.World = worldPosition.WorldMatrix; + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render() { + Render(true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/Ship.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/Ship.cs new file mode 100644 index 0000000..dbff5d3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/Ship.cs @@ -0,0 +1,397 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// This class handles the drawing and collision detection routines for our ship. + /// +public class Ship { + private Shots shots; + private ShipState state = ShipState.Dead; // current state + public ShipState State { get { lock(this){return state;} } set { lock(this){ state = value; }}} + + private Device device; + private PositionedMesh shipMesh; + + private GameClass game; + + private float velocity; + + private string hostName; + + private float waitCount = 6.0f; // wait count before state transition. + public float WaitCount { get { lock(this){return waitCount; }} set { lock(this){ waitCount = value; }}} + private int score; // our score + + private int deathCount; // # of times we've died... + private float hyperSuccess = Constants.HyperSuccessFactor; // chance of a hyper being successful... + + private Sounds sounds; + private Vector3 startingPosition; + + public Shots ShotHandler { + get { + lock(this) { + return shots; + } + } + } + public int DeathCount { + get { + lock(this) { + return deathCount; + } + } + set { + lock(this) { + deathCount = value; + } + } + } + + public int Score { + get { + lock(this) { + return score; + } + } + set { + lock(this) { + score = value; + } + } + } + + public string HostName { + get { + lock(this) { + return hostName; + } + } + set { + lock(this) { + hostName = value; + } + } + } + + public Vector3 Location { + get { + lock (this) { + return shipMesh.Position.Location; + } + } + set { + lock (this) { + shipMesh.Position.Location = value; + } + } + } + + public Vector3 Rotation { + get { + lock(this) { + return shipMesh.Position.Rotation; + } + } + set { + lock(this) { + shipMesh.Position.Rotation = value; + } + } + } + + public WorldPosition Position { + get { + lock (this) { + return shipMesh.Position; + } + } + set { + lock(this) { + shipMesh.Position=value; + } + } + } + + public float Velocity { + get { + lock (this) { + return velocity; + } + } + set { + lock(this) { + velocity = value; + } + } + } + + + + public Sounds Sounds { + get { + lock(this) { + return sounds; + } + } + set { + lock(this) { + sounds = value; + } + } + } + + public Ship(Device device, GameClass gameClass, HullColors hullColor) { + this.device = device; + this.game = gameClass; + shots = new Shots(device); + if (hullColor == HullColors.White) { + shipMesh = new PositionedMesh(device, "WhiteShip.x"); + startingPosition = new Vector3(10, 0, 10); + } + else { + shipMesh = new PositionedMesh(device, "RedShip.x"); + startingPosition = new Vector3(-50, 0, -150); + } + SetRandomPosition(true); + } + + + public void Shoot() { + if (this.state != ShipState.Normal) { + return; + } + + // find out the location of the front of the ship... + + bool shot = shots.Shoot(this.Position.CombinedLocation, this.Position.Direction); + if (shot) { + sounds |= Sounds.ShipFire; + } + } + + public void SetThrust(bool thrust, float elapsedTime) { + if (thrust && (state == ShipState.Normal)) { + if (velocity < Constants.MaxVelocity * 0.1f) + velocity = Constants.MaxVelocity * 0.1f; + if (velocity < Constants.MaxVelocity) + velocity += velocity * Constants.ThrustPower; + if (velocity > Constants.MaxVelocity) + velocity = Constants.MaxVelocity; + sounds |= Sounds.ShipThrust; + } + else { + velocity -= velocity * elapsedTime * 2; + if (velocity < 0.00005f) + velocity = 0.0f; + if ((sounds & Sounds.ShipThrust) != 0) + sounds ^= Sounds.ShipThrust; + } + } + + + public void EnterHyper() { + if (state != ShipState.Normal) + return; + + SetState(ShipState.HyperCharge); + } + + public void SetRandomPosition(bool setOriginal) { + if (setOriginal) { + shipMesh.Position.Move(startingPosition); + } + else { + shipMesh.Position.RotateRel(0,Constants.random.Next(100),0); + shipMesh.Position.Move( + Constants.random.Next(1000)-500, + Constants.random.Next(1000)-500, + Constants.random.Next(1000)-500); + } + } + + public void SetState(ShipState newState) { + if (newState == state) + return; + + lock(this) { + + switch (newState) { + case ShipState.Dying: + deathCount++; + waitCount = Constants.DyingCycle; + sounds |= Sounds.ShipExplode; + break; + + case ShipState.Dead: + waitCount = Constants.DeadCycleWait; + shipMesh.Position.Move(this.startingPosition); + + break; + + case ShipState.Normal: + if (state == ShipState.Hyper) { + SetRandomPosition(false); + } + else { + shipMesh.Position.Move(startingPosition); + velocity = 0.0f; + } + hyperSuccess = Constants.HyperSuccessFactor; + shots.Clear(); + sounds |= Sounds.ShipAppear; + break; + + case ShipState.HyperCharge: + sounds |= Sounds.ShipHyper; + waitCount = Constants.HyperChargeWait; + break; + + case ShipState.Hyper: + waitCount = Constants.HyperCycleWait; + break; + } + state = newState; + } + } + + + public void YawPitchRoll(float yawAmount, float pitchAmount, float elapsedTime) { + float absYaw = Math.Abs(yawAmount); + if ( (0 <= absYaw) & (absYaw <= 30)) { + yawAmount = 0; + } + else if ((31 <= absYaw) & (absYaw <= 150)) { + yawAmount *= 1; + } + else { + yawAmount *= 1.2f; + } + + const float sensitivity = 0.002f; + + float yaw = yawAmount * elapsedTime * sensitivity; + + float absPitch = Math.Abs(pitchAmount); + if ( (0 <= absPitch) & (absPitch <= 30)) { + pitchAmount = 0; + } + else if ((31 <= absPitch) & (absPitch <= 150)) { + pitchAmount *= 1; + } + else { + pitchAmount *= 1.2f; + } + float pitch = pitchAmount * elapsedTime * sensitivity; + float roll = 0; + + this.Position.YawPitchRoll(yaw, pitch, roll); + } + + public void UpdatePosition(float elapsedTime) { + shots.UpdatePosition(elapsedTime); + + if (state == ShipState.Dying) { + return; + } + + + if ((state != ShipState.Normal) && + (state != ShipState.HyperCharge)) + return; + + float xAdd = (elapsedTime * velocity * Position.Direction.X); + float yAdd = (elapsedTime * velocity * Position.Direction.Y); + float zAdd = (elapsedTime * velocity * Position.Direction.Z); + + this.Position.MoveRel(xAdd, yAdd, zAdd); + + } + + public void UpdateState(float elapsedTime) { + if (state == ShipState.Dying) { + this.waitCount -= elapsedTime; + if (waitCount <= 0) { + SetState(ShipState.Dead); + } + } + + if (state == ShipState.Dead) { + this.waitCount -= elapsedTime; + if (waitCount <= 0) { + SetState(ShipState.Normal); + } + } + + if (state == ShipState.HyperCharge) { + this.waitCount -= elapsedTime; + shipMesh.Position.RotateRel(0,-elapsedTime * Constants.HyperCycleWait *6.0f, 0); + + if (waitCount <= 0) { + // if we didn't make it, we're dying... + double randValue = Constants.random.NextDouble(); + if (hyperSuccess < randValue) { + SetState(ShipState.Dying); + game.SendPoint(); + } + else { + SetState(ShipState.Hyper); + } + } + } + if (state == ShipState.Hyper) { + this.waitCount -= elapsedTime; + shipMesh.Position.RotateRel(0, -elapsedTime * this.waitCount * 6.0f, 0); + if (waitCount <= 0) { + hyperSuccess -= Constants.HyperSuccessDegradation; + float save = this.hyperSuccess; + SetState(ShipState.Normal); + hyperSuccess = save; + } + } + + } + public void TestShip(Ship otherShip) { + // if we're not alive, don't do any tests... + if (state != ShipState.Normal) + return; + // Test if their shots are close enough to us. + if (otherShip.shots.TestShots(this)) { + SetState(ShipState.Dying); + game.SendPoint(); + } + //Test for collision with ship or it's death explosion + if ((otherShip.state == ShipState.Normal) | (otherShip.state == ShipState.Dying)) { + Vector3 delta = this.Position.Location - otherShip.Position.Location; + if (Vector3.Length(delta) < Constants.ShipCollisionLimit) { + SetState(ShipState.Dying); + game.SendPoint(); + } + } + } + + public void Render() { + state = ShipState.Normal; + switch (this.state) { + case ShipState.Normal: { + device.RenderState.Lighting = true; + device.RenderState.ZBufferEnable = true; + device.Transform.World = shipMesh.Position.WorldMatrix; + shipMesh.Render(); + shots.Render(); + break; + } + case ShipState.Dying: { + break; + } + default: { + return; + } + } + } + +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/ShipSkins.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/ShipSkins.cs new file mode 100644 index 0000000..42b4546 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/ShipSkins.cs @@ -0,0 +1,5 @@ +public enum HullColors { + Red, + White +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/ShipState.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/ShipState.cs new file mode 100644 index 0000000..827eb64 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/ShipState.cs @@ -0,0 +1,12 @@ +using System; + + +public enum ShipState { + Normal, + Dying, + Dead, + Hyper, + HyperCharge, +}; + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/Shots.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/Shots.cs new file mode 100644 index 0000000..d1aed11 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/Shots.cs @@ -0,0 +1,101 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + /// + /// Handles the collision detection and returns the array of shots for sending to other players + /// +[Serializable] +public class Shots { + + Photon[] shots; + [NonSerialized] + float timeSinceShot = 0; + [NonSerialized] + Rectangle screenBounds; + + + public Shots(Device device) { + shots = new Photon[Constants.NumShots]; + for (int count = 0; count < Constants.NumShots; count++) { + shots[count] = new Photon(device); + } + } + + public Rectangle ScreenBounds { + get { + return screenBounds; + } + set { + screenBounds = value; + } + } + public Photon[] GetShotArray() { + lock(this) { + return shots; + } + } + + public void SetShotArray(Photon[] shotArray) { + lock(this) { + this.shots = shotArray; + } + } + + public bool Shoot(Vector3 position, Vector3 launchVector) { + if (timeSinceShot < Constants.ShotDeltaTime) + return false; + + timeSinceShot = 0; + + + foreach (Photon shot in shots) { + if (!shot.Alive) { + shot.SetShot(position, launchVector); + return true; + } + } + return false; + } + + public void UpdatePosition(float elapsedTime) { + timeSinceShot += elapsedTime; + + foreach (Photon shot in shots) { + shot.UpdatePosition(elapsedTime); + } + } + + public void Clear() { + foreach (Photon shot in shots) { + shot.Alive = false; + } + } + public bool TestShots(Ship ship) { + foreach (Photon shot in shots) { + if (shot.Alive) { + float distance = Vector3.Length(shot.Location - ship.Position.Location); + if (distance < Constants.ShotCollisionLimit) { + shot.Alive = false; + return true; + } + } + } + return false; + } + + public void Render() { + foreach (Photon shot in shots) { + shot.Render(); + } + } + + public void RestoreDeviceObjects() { + foreach (Photon shot in shots) { + shot.RestoreDeviceObjects(); + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/SoundBuffer.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/SoundBuffer.cs new file mode 100644 index 0000000..75c3d53 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/SoundBuffer.cs @@ -0,0 +1,71 @@ +using System; +using Microsoft.DirectX.DirectSound; + + + /// + /// A single sound buffer for use by the SoundHandler class. + /// +public class SoundBuffer { + Microsoft.DirectX.DirectSound.Buffer buffer; + Sounds thisSound; + bool looping; + bool lastValue; + + public SoundBuffer(Microsoft.DirectX.DirectSound.Device soundDevice, string filename, Sounds thisSound, bool looping) { + this.thisSound = thisSound; + this.looping = looping; + + BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + try { + buffer = new Microsoft.DirectX.DirectSound.Buffer( + filename, + bufferDesc, + soundDevice); + } + catch (Exception e) { + throw new Exception( + String.Format("Error opening {0}; ", + filename), e); + } + } + + public Sounds Sound { + get { + return thisSound; + } + } + + public int Volume { + get { + return buffer.Volume; + } + set { + buffer.Volume = value; + } + } + + public void Play(bool on) { + // looping sounds don't get restarted + if (looping) { + if (on) { + if (!lastValue) { + buffer.SetCurrentPosition(1000); + buffer.Play(0,BufferPlayFlags.Looping); + } + } + else { + buffer.Stop(); + } + lastValue = on; + } + else { + if (on) { + buffer.SetCurrentPosition(0); + buffer.Play(0,BufferPlayFlags.Default); + } + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/SoundHandler.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/SoundHandler.cs new file mode 100644 index 0000000..1782d3f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/SoundHandler.cs @@ -0,0 +1,86 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX.DirectSound; +using System.Collections; + + + /// + /// This class handles loading and playing our sounds. + /// +public class SoundHandler { + Device soundDevice; + ArrayList sounds = new ArrayList(); + + Sounds lastSound; + + const int VolumeEngine = -1000; + const int VolumeOtherShot = -2000; + const int VolumeHaHa = -3000; + + + public SoundHandler(Control owner) { + soundDevice = new Device(); + soundDevice.SetCooperativeLevel(owner,CooperativeLevel.Normal); + CreateSoundBuffers(); + } + + Microsoft.DirectX.DirectSound.Buffer LoadFile(string filename) { + + Microsoft.DirectX.DirectSound.BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + Microsoft.DirectX.DirectSound.Buffer buffer; + buffer = new Microsoft.DirectX.DirectSound.Buffer(filename, bufferDesc, soundDevice); + + + return buffer; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping, int volume) { + SoundBuffer buffer; + + buffer = new SoundBuffer( + soundDevice, + filename, + thisSound, + looping); + sounds.Add(buffer); + buffer.Volume = volume; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping) { + AddBuffer(filename, thisSound, looping, 0); + } + + void CreateSoundBuffers() { + AddBuffer(MediaUtilities.FindFile("hypercharge.wav"), Sounds.ShipHyper, false); + AddBuffer(MediaUtilities.FindFile("sci fi bass.wav"), Sounds.ShipAppear, false); + AddBuffer(MediaUtilities.FindFile("laser2.wav"), Sounds.ShipFire, false); + AddBuffer(MediaUtilities.FindFile("explode.wav"), Sounds.ShipExplode, false); + + AddBuffer(MediaUtilities.FindFile("engine.wav"), Sounds.ShipThrust, true, VolumeEngine); + AddBuffer(MediaUtilities.FindFile("laser2_other.wav"), Sounds.OtherShipFire, false, VolumeOtherShot); + AddBuffer(MediaUtilities.FindFile("explode_other.wav"), Sounds.OtherShipExplode, false); + AddBuffer(MediaUtilities.FindFile("engine_other.wav"), Sounds.OtherShipThrust, true, VolumeEngine); + + AddBuffer(MediaUtilities.FindFile("sci fi bass.wav"), Sounds.OtherShipAppear, false); + AddBuffer(MediaUtilities.FindFile("haha.wav"), Sounds.Taunt, false, VolumeHaHa); + + AddBuffer(MediaUtilities.FindFile("dude_quest1.wav"), Sounds.Dude1, false); + AddBuffer(MediaUtilities.FindFile("dude_quest2.wav"), Sounds.Dude2, false); + AddBuffer(MediaUtilities.FindFile("dude_quest3.wav"), Sounds.Dude3, false); + AddBuffer(MediaUtilities.FindFile("dude_quest4.wav"), Sounds.Dude4, false); + AddBuffer(MediaUtilities.FindFile("dude_quest5.wav"), Sounds.Dude5, false); + } + + public void Play(Sounds soundsToPlay) { + // check each enum value. If that value + // is set, play the sound... + foreach (SoundBuffer buffer in sounds) { + bool on = ((buffer.Sound & soundsToPlay) != 0); + buffer.Play(on); + + } + lastSound = soundsToPlay; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/Sounds.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/Sounds.cs new file mode 100644 index 0000000..0f3b6ac --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/Sounds.cs @@ -0,0 +1,21 @@ +using System; + + +[Flags] +public enum Sounds { + ShipAppear = 0x00000001, + ShipHyper = 0x00000002, + ShipFire = 0x00000004, + ShipExplode = 0x00000008, + ShipThrust = 0x00000010, + OtherShipThrust = 0x00000020, + OtherShipExplode = 0x00000040, + OtherShipFire = 0x00000080, + OtherShipAppear = 0x00000100, + Taunt = 0x00000200, + Dude1 = 0x00000400, + Dude2 = 0x00000800, + Dude3 = 0x00001000, + Dude4 = 0x00002000, + Dude5 = 0x00004000, +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/SphereStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/SphereStruct.cs new file mode 100644 index 0000000..90d9d6f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/SphereStruct.cs @@ -0,0 +1,6 @@ +using Microsoft.DirectX; + +public struct Sphere { + public Vector3 CenterPoint; + public float Radius; +}; \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/SplashScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/SplashScreen.cs new file mode 100644 index 0000000..9ffea2c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/SplashScreen.cs @@ -0,0 +1,237 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + + + /// + /// Spacewar Splashscreen + /// +public class SplashScreen : System.Windows.Forms.Form { + private MainClass mainClass; + private System.Windows.Forms.Button helpButton; + private System.Windows.Forms.Button startButton; + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.Button soloButton; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.CheckBox checkBox1; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + public SplashScreen(MainClass main) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + this.mainClass = main; + radioButton3.Checked = true; + checkBox1.Checked = true; + mainClass.GameFormSize = new Size(1024,768); + mainClass.FullScreen = true; + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(SplashScreen)); + this.helpButton = new System.Windows.Forms.Button(); + this.startButton = new System.Windows.Forms.Button(); + this.closeButton = new System.Windows.Forms.Button(); + this.soloButton = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // helpButton + // + this.helpButton.ForeColor = System.Drawing.Color.White; + this.helpButton.Location = new System.Drawing.Point(440, 280); + this.helpButton.Name = "helpButton"; + this.helpButton.Size = new System.Drawing.Size(136, 32); + this.helpButton.TabIndex = 5; + this.helpButton.Text = "Show Help"; + this.helpButton.Click += new System.EventHandler(this.helpButton_Click); + // + // startButton + // + this.startButton.ForeColor = System.Drawing.Color.White; + this.startButton.Location = new System.Drawing.Point(440, 364); + this.startButton.Name = "startButton"; + this.startButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.startButton.Size = new System.Drawing.Size(136, 32); + this.startButton.TabIndex = 7; + this.startButton.Text = "Network Play"; + this.startButton.Click += new System.EventHandler(this.startButton_Click); + // + // closeButton + // + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.ForeColor = System.Drawing.Color.White; + this.closeButton.Location = new System.Drawing.Point(440, 406); + this.closeButton.Name = "closeButton"; + this.closeButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.closeButton.Size = new System.Drawing.Size(136, 32); + this.closeButton.TabIndex = 8; + this.closeButton.Text = "Exit"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // soloButton + // + this.soloButton.ForeColor = System.Drawing.Color.White; + this.soloButton.Location = new System.Drawing.Point(440, 322); + this.soloButton.Name = "soloButton"; + this.soloButton.Size = new System.Drawing.Size(136, 32); + this.soloButton.TabIndex = 6; + this.soloButton.Text = "Solo Play"; + this.soloButton.Click += new System.EventHandler(this.soloButton_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.radioButton3); + this.groupBox1.Controls.Add(this.radioButton2); + this.groupBox1.Controls.Add(this.radioButton1); + this.groupBox1.ForeColor = System.Drawing.Color.White; + this.groupBox1.Location = new System.Drawing.Point(16, 320); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(128, 128); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Screen Resolution"; + // + // checkBox1 + // + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(16, 96); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.TabIndex = 3; + this.checkBox1.Text = "Full Screen"; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // radioButton3 + // + this.radioButton3.Checked = true; + this.radioButton3.ForeColor = System.Drawing.Color.White; + this.radioButton3.Location = new System.Drawing.Point(16, 72); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(80, 24); + this.radioButton3.TabIndex = 2; + this.radioButton3.TabStop = true; + this.radioButton3.Text = "1024 x 768"; + this.radioButton3.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton2 + // + this.radioButton2.ForeColor = System.Drawing.Color.White; + this.radioButton2.Location = new System.Drawing.Point(16, 48); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(72, 24); + this.radioButton2.TabIndex = 1; + this.radioButton2.Text = "800 x 600"; + this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton1 + // + this.radioButton1.ForeColor = System.Drawing.Color.White; + this.radioButton1.Location = new System.Drawing.Point(16, 24); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(72, 24); + this.radioButton1.TabIndex = 0; + this.radioButton1.Text = "640 x 480"; + this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // SplashScreen + // + this.AcceptButton = this.soloButton; + this.AutoScale = false; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.Black; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(594, 454); + this.ControlBox = false; + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.soloButton); + this.Controls.Add(this.closeButton); + this.Controls.Add(this.startButton); + this.Controls.Add(this.helpButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(600, 460); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(600, 460); + this.Name = "SplashScreen"; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + private void helpButton_Click(object sender, System.EventArgs e) { + HelpScreen helpScreen = new HelpScreen(); + helpScreen.ShowDialog(); + } + + private void startButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = true; + this.Close(); + } + + private void closeButton_Click(object sender, System.EventArgs e) { + Environment.Exit(0); + } + + private void soloButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = false; + this.Close(); + } + + private void radioButton_CheckedChanged(object sender, System.EventArgs e) { + RadioButton btn = (RadioButton)sender; + Console.WriteLine(btn.ToString()); + if (btn.Checked) { + if (btn == radioButton1) + mainClass.GameFormSize = new Size(640,480); + if (btn == radioButton2) + mainClass.GameFormSize = new Size(800, 600); + if (btn == radioButton3) + mainClass.GameFormSize = new Size(1024, 768); + } + } + + private void checkBox1_CheckedChanged(object sender, System.EventArgs e) { + mainClass.FullScreen = checkBox1.Checked; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/SplashScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step06/SplashScreen.resx new file mode 100644 index 0000000..18fad73 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/SplashScreen.resx @@ -0,0 +1,4715 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + False + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + False + + + 80 + + + True + + + Private + + + SplashScreen + + + + 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 + AElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/Step06.csproj b/Source Code updated 08-12-05/Spacewar3D/Step06/Step06.csproj new file mode 100644 index 0000000..c4aec78 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/Step06.csproj @@ -0,0 +1,340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/Step06.sln b/Source Code updated 08-12-05/Spacewar3D/Step06/Step06.sln new file mode 100644 index 0000000..e13909b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/Step06.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Step06", "Step06.csproj", "{DE8FEF2E-6E28-4456-9712-68437802A747}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.ActiveCfg = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.Build.0 = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.ActiveCfg = Release|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/WorldPosition.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/WorldPosition.cs new file mode 100644 index 0000000..35c2919 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/WorldPosition.cs @@ -0,0 +1,210 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + +[Serializable] +public class WorldPosition { + public float XPos {get { return xPos; } set { xPos = value; } } + public float YPos {get { return yPos; } set { yPos = value; } } + public float ZPos {get { return zPos; } set { zPos = value; } } + + public float XRotation { get { return xRotation; } set { xRotation = value; } } + public float YRotation { get { return yRotation; } set { yRotation = value; } } + public float ZRotation { get { return zRotation; } set { zRotation = value; } } + + public float XScale { get { return xScale; } set { xScale = value; } } + public float YScale { get { return yScale; } set { yScale = value; } } + public float ZScale { get { return zScale; } set { zScale = value; } } + + + public Matrix WorldMatrix { get { Update(); return worldMatrix; } + set { + worldMatrix = value; + Location = Vector3.TransformCoordinate(new Vector3(0,0,0), worldMatrix); + Point(Location, Location+Direction); + Roll(Location, Location+Up); + } + } + + public Vector3 Direction { + get { + Vector3 directionVector= new Vector3(0,0,1); + return Vector3.TransformNormal(directionVector, worldMatrix); + } + } + + public Vector3 Up { + get { + Vector3 upVector = new Vector3(0,1,0); + return Vector3.TransformNormal(upVector,worldMatrix); + } + } + public Vector3 Right { + get { + Vector3 rightVector = new Vector3(1,0,0); + return Vector3.TransformNormal(rightVector,worldMatrix); + } + } + + public Vector3 Location { + get { + return new Vector3( xPos, yPos, zPos ); + } + set { + Move(value); + } + } + + public Vector3 Rotation { + get { + return new Vector3( xRotation, yRotation, zRotation); + } + set { + Rotate(value); + } + } + + + + private float xPos, yPos, zPos = 0.0f; + private float xRotation, yRotation, zRotation = 0.0f; + private float xScale, yScale, zScale = 0.0f; + + private Matrix worldMatrix, scaleMatrix, rotationMatrix = Matrix.Identity; + private Matrix translationMatrix = Matrix.Identity; + private Matrix combineMatrix1, combineMatrix2; + + public Matrix CombineMatrix1 { get { return combineMatrix1; } set { combineMatrix1 = value; } } + public Matrix CombineMatrix2 { get { return combineMatrix2; } set { combineMatrix2 = value; } } + + + public WorldPosition() { + + Move(0.0f, 0.0f, 0.0f); + Rotate(0.0f, 0.0f, 0.0f); + Scale(1.0f, 1.0f, 1.0f); + combineMatrix1 = combineMatrix2 = Matrix.Zero; + + Update(); + + } + + public Vector3 CombinedLocation { + get { + Update(); + return new Vector3(worldMatrix.M41,worldMatrix.M42,worldMatrix.M43); + } + } + + public void Move( Vector3 newPosition ) { + Move( newPosition.X, newPosition.Y, newPosition.Z ); + } + + public void Move( float x, float y, float z ) { + xPos = x; + yPos = y; + zPos = z; + + translationMatrix = Matrix.Translation( xPos, yPos, zPos ); + } + + public void MoveRel( float x, float y, float z ) { + Move(xPos + x, yPos + y, zPos + z ); + } + + public void Rotate( Vector3 newDirection ) { + Rotate(newDirection.X, newDirection.Y, newDirection.Z); + } + + public void Point(Vector3 pointAtLocation) { + Point(xPos, yPos, zPos, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(Vector3 currentLocation, Vector3 pointAtLocation) { + Point(currentLocation.X, currentLocation.Y, currentLocation.Z, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } + + public void Roll(Vector3 Location, Vector3 UpVector) { + float xDiff, yDiff; + xDiff = Location.X - UpVector.X; + yDiff = Location.Y - UpVector.Y; + zRotation = (float) Math.Atan2(xDiff, yDiff); + } + + + + + public void Rotate( float x, float y, float z ) { + xRotation = x; + yRotation = y; + zRotation = z; + + rotationMatrix = Matrix.RotationYawPitchRoll( yRotation, xRotation, zRotation ); + } + + public void RotateRel( float x, float y, float z ) { + Rotate( xRotation + x, yRotation + y, zRotation + z ); + } + + //YawPitchRoll rotates an object relative to its own orthonormal basis vectors + public void YawPitchRoll( float yaw, float pitch, float roll) { + + Matrix yawMatrix = Matrix.RotationAxis(this.Up, yaw); + Matrix pitchMatrix = Matrix.RotationAxis(this.Right, pitch); + Matrix rollMatrix = Matrix.RotationAxis(this.Direction, roll); + + Matrix ypr = yawMatrix * pitchMatrix * rollMatrix; + rotationMatrix *= ypr; + + + } + + public void Scale( float x, float y, float z ) { + xScale = x; + yScale = y; + zScale = z; + + scaleMatrix = Matrix.Scaling( xScale, yScale, zScale ); + + } + + public void ScaleRel( float x, float y, float z ) { + Scale( xScale + x, yScale + y, zScale + z ); + } + + + public void Update() { + + Matrix m; + + + + m = scaleMatrix; + m *= rotationMatrix; + m *= translationMatrix; + if (combineMatrix1 != Matrix.Zero) + m *= combineMatrix1; + if (combineMatrix2 != Matrix.Zero) + m *= combineMatrix2; + + worldMatrix = m; + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/d3dapp.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/d3dapp.cs new file mode 100644 index 0000000..9384434 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/d3dapp.cs @@ -0,0 +1,1517 @@ +//----------------------------------------------------------------------------- +// File: D3DApp.cs +// +// Desc: Application class for the Direct3D samples framework library. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + +/// +/// The base class for all the graphics (D3D) samples, it derives from windows forms +/// +public class GraphicsSample : System.Windows.Forms.Form { + #region Menu Information + // The menu items that *all* samples will need + protected System.Windows.Forms.MainMenu mnuMain; + protected System.Windows.Forms.MenuItem mnuFile; + private System.Windows.Forms.MenuItem mnuGo; + private System.Windows.Forms.MenuItem mnuSingle; + private System.Windows.Forms.MenuItem mnuBreak1; + private System.Windows.Forms.MenuItem mnuChange; + private System.Windows.Forms.MenuItem mnuBreak2; + protected System.Windows.Forms.MenuItem mnuExit; + #endregion + + // The window we will render too + private System.Windows.Forms.Control ourRenderTarget; + // Should we use the default windows + protected bool isUsingMenus = true; + + // We need to keep track of our enumeration settings + protected D3DEnumeration enumerationSettings = new D3DEnumeration(); + protected D3DSettings graphicsSettings = new D3DSettings(); + private bool isMaximized = false; // Are we maximized? + private bool isHandlingSizeChanges = true; // Are we handling size changes? + private bool isClosing = false; // Are we closing? + private bool isChangingFormStyle = false; // Are we changing the forms style? + private bool isWindowActive = true; // Are we waiting for got focus? + + private float lastTime = 0.0f; // The last time + private int frames = 0; // Number of frames since our last update + private int appPausedCount = 0; // How many times has the app been paused (and when can it resume)? + + // Internal variables for the state of the app + protected bool windowed; + protected bool active; + protected bool ready; + protected bool hasFocus; + protected bool isMultiThreaded = false; + + // Internal variables used for timing + protected bool frameMoving; + protected bool singleStep; + // Main objects used for creating and rendering the 3D scene + protected PresentParameters presentParams = new PresentParameters(); // Parameters for CreateDevice/Reset + protected Device device; // The rendering device + protected RenderStateManager renderState; + protected SamplerStateManagerCollection sampleState; + protected TextureStateManagerCollection textureStates; + private Caps graphicsCaps; // Caps for the device + protected Caps Caps { get { return graphicsCaps; } } + private CreateFlags behavior; // Indicate sw or hw vertex processing + protected BehaviorFlags BehaviorFlags { get { return new BehaviorFlags(behavior); } } + protected System.Windows.Forms.Control RenderTarget { get { return ourRenderTarget; } set { ourRenderTarget = value; } } + + // Variables for timing + protected float appTime; // Current time in seconds + protected float elapsedTime; // Time elapsed since last frame + protected float framePerSecond; // Instanteous frame rate + protected string deviceStats;// String to hold D3D device stats + protected string frameStats; // String to hold frame stats + + private bool deviceLost = false; + + // Overridable variables for the app + private int minDepthBits; // Minimum number of bits needed in depth buffer + protected int MinDepthBits { get { return minDepthBits; } set { minDepthBits = value; enumerationSettings.AppMinDepthBits = value;} } + private int minStencilBits; // Minimum number of bits needed in stencil buffer + protected int MinStencilBits { get { return minStencilBits; } set { minStencilBits = value; enumerationSettings.AppMinStencilBits = value;} } + protected bool showCursorWhenFullscreen; // Whether to show cursor when fullscreen + protected bool clipCursorWhenFullscreen; // Whether to limit cursor pos when fullscreen + protected bool startFullscreen; // Whether to start up the app in fullscreen mode + + private System.Drawing.Size storedSize; + private System.Drawing.Point storedLocation; + + // Overridable functions for the 3D scene created by the app + protected virtual bool ConfirmDevice(Caps caps, VertexProcessingType vertexProcessingType, + Format adapterFormat, Format backBufferFormat) { return true; } + protected virtual void OneTimeSceneInitialization() { /* Do Nothing */ } + protected virtual void InitializeDeviceObjects() { /* Do Nothing */ } + protected virtual void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void FrameMove() { /* Do Nothing */ } + protected virtual void Render() { /* Do Nothing */ } + protected virtual void InvalidateDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void DeleteDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + + + + + /// + /// Constructor + /// + public GraphicsSample() { + device = null; + active = false; + ready = false; + hasFocus = false; + behavior = 0; + + ourRenderTarget = this; + frameMoving = true; + singleStep = false; + framePerSecond = 0.0f; + deviceStats = null; + frameStats = null; + + this.Text = "D3D9 Sample"; + this.ClientSize = new System.Drawing.Size(400,300); + this.KeyPreview = true; + + minDepthBits = 16; + minStencilBits = 0; + showCursorWhenFullscreen = false; + startFullscreen = false; + + // When clipCursorWhenFullscreen is TRUE, the cursor is limited to + // the device window when the app goes fullscreen. This prevents users + // from accidentally clicking outside the app window on a multimon system. + // This flag is turned off by default for debug builds, since it makes + // multimon debugging difficult. +#if (DEBUG) + clipCursorWhenFullscreen = false; +#else + clipCursorWhenFullscreen = true; +#endif + InitializeComponent(); + } + + + + + /// + /// Picks the best graphics device, and initializes it + /// + /// true if a good device was found, false otherwise + public bool CreateGraphicsSample() { + enumerationSettings.ConfirmDeviceCallback = new D3DEnumeration.ConfirmDeviceCallbackType(this.ConfirmDevice); + enumerationSettings.Enumerate(); + + if (ourRenderTarget.Cursor == null) { + // Set up a default cursor + ourRenderTarget.Cursor = System.Windows.Forms.Cursors.Default; + } + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + + try { + ChooseInitialSettings(); + + // Initialize the application timer + DXUtil.Timer(DirectXTimer.Start); + // Initialize the app's custom scene stuff + OneTimeSceneInitialization(); + // Initialize the 3D environment for the app + InitializeEnvironment(); + } + catch (SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + return false; + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + return false; + } + + // The app is ready to go + ready = true; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available windowed mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestWindowedMode(bool doesRequireHardware, bool doesRequireReference) { + // Get display mode of primary adapter (which is assumed to be where the window + // will appear) + DisplayMode primaryDesktopDisplayMode = Manager.Adapters[0].CurrentDisplayMode; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + if (!deviceCombo.IsWindowed) + continue; + if (deviceCombo.AdapterFormat != primaryDesktopDisplayMode.Format) + continue; + + // If we haven't found a compatible DeviceCombo yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + deviceCombo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + // This windowed device combo looks great -- take it + goto EndWindowedDeviceComboSearch; + } + // Otherwise keep looking for a better windowed device combo + } + } + } + } + + EndWindowedDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + graphicsSettings.WindowedAdapterInfo = bestAdapterInfo; + graphicsSettings.WindowedDeviceInfo = bestDeviceInfo; + graphicsSettings.WindowedDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = true; + graphicsSettings.WindowedDisplayMode = primaryDesktopDisplayMode; + graphicsSettings.WindowedWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + graphicsSettings.WindowedHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.WindowedDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.WindowedMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.WindowedMultisampleQuality = 0; + graphicsSettings.WindowedVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.WindowedPresentInterval = (PresentInterval)bestDeviceCombo.PresentIntervalList[0]; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available fullscreen mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestFullscreenMode(bool doesRequireHardware, bool doesRequireReference) { + // For fullscreen, default to first HAL DeviceCombo that supports the current desktop + // display mode, or any display mode if HAL is not compatible with the desktop mode, or + // non-HAL if no HAL is available + DisplayMode adapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestAdapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestDisplayMode = new DisplayMode(); + bestAdapterDesktopDisplayMode.Width = 0; + bestAdapterDesktopDisplayMode.Height = 0; + bestAdapterDesktopDisplayMode.Format = 0; + bestAdapterDesktopDisplayMode.RefreshRate = 0; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + adapterDesktopDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + bool adapterMatchesDesktop = (deviceCombo.AdapterFormat == adapterDesktopDisplayMode.Format); + if (deviceCombo.IsWindowed) + continue; + + // If we haven't found a compatible set yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + bestDeviceCombo.DevType == DeviceType.Hardware && bestDeviceCombo.AdapterFormat != adapterDesktopDisplayMode.Format && adapterMatchesDesktop || + bestDeviceCombo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + bestAdapterDesktopDisplayMode = adapterDesktopDisplayMode; + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + // This fullscreen device combo looks great -- take it + goto EndFullscreenDeviceComboSearch; + } + // Otherwise keep looking for a better fullscreen device combo + } + } + } + } + + EndFullscreenDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + // Need to find a display mode on the best adapter that uses pBestDeviceCombo->AdapterFormat + // and is as close to bestAdapterDesktopDisplayMode's res as possible + bestDisplayMode.Width = 0; + bestDisplayMode.Height = 0; + bestDisplayMode.Format = 0; + bestDisplayMode.RefreshRate = 0; + foreach (DisplayMode displayMode in bestAdapterInfo.DisplayModeList) { + if (displayMode.Format != bestDeviceCombo.AdapterFormat) + continue; + if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate == bestAdapterDesktopDisplayMode.RefreshRate) { + // found a perfect match, so stop + bestDisplayMode = displayMode; + break; + } + else if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate > bestDisplayMode.RefreshRate) { + // refresh rate doesn't match, but width/height match, so keep this + // and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == bestAdapterDesktopDisplayMode.Width) { + // width matches, so keep this and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == 0) { + // we don't have anything better yet, so keep this and keep looking + bestDisplayMode = displayMode; + } + } + + graphicsSettings.FullscreenAdapterInfo = bestAdapterInfo; + graphicsSettings.FullscreenDeviceInfo = bestDeviceInfo; + graphicsSettings.FullscreenDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = false; + graphicsSettings.FullscreenDisplayMode = bestDisplayMode; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.FullscreenDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.FullscreenMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.FullscreenMultisampleQuality = 0; + graphicsSettings.FullscreenVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.FullscreenPresentInterval = PresentInterval.Default; + + return true; + } + + + + + /// + /// Choose the initial settings for the application + /// + /// true if the settings were initialized + public bool ChooseInitialSettings() { + bool foundFullscreenMode = FindBestFullscreenMode(false, false); + bool foundWindowedMode = FindBestWindowedMode(false, false); + if (startFullscreen && foundFullscreenMode) + graphicsSettings.IsWindowed = false; + + if (!foundFullscreenMode && !foundWindowedMode) + throw new NoCompatibleDevicesException(); + + return (foundFullscreenMode || foundWindowedMode); + } + + + + + /// + /// Build presentation parameters from the current settings + /// + public void BuildPresentParamsFromSettings() { + presentParams.Windowed = graphicsSettings.IsWindowed; + presentParams.BackBufferCount = 1; + presentParams.MultiSample = graphicsSettings.MultisampleType; + presentParams.MultiSampleQuality = graphicsSettings.MultisampleQuality; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.EnableAutoDepthStencil = enumerationSettings.AppUsesDepthBuffer; + presentParams.AutoDepthStencilFormat = graphicsSettings.DepthStencilBufferFormat; + presentParams.PresentFlag = PresentFlag.None; + + if (windowed) { + presentParams.BackBufferWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + presentParams.BackBufferHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = 0; + presentParams.PresentationInterval = PresentInterval.Immediate; + presentParams.DeviceWindow = ourRenderTarget; + } + else { + presentParams.BackBufferWidth = graphicsSettings.DisplayMode.Width; + presentParams.BackBufferHeight = graphicsSettings.DisplayMode.Height; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = graphicsSettings.DisplayMode.RefreshRate; + presentParams.PresentationInterval = graphicsSettings.PresentInterval; + presentParams.DeviceWindow = this; + } + } + + + + + /// + /// Initialize the graphics environment + /// + public void InitializeEnvironment() { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + GraphicsDeviceInfo deviceInfo = graphicsSettings.DeviceInfo; + + windowed = graphicsSettings.IsWindowed; + + // Set up the presentation parameters + BuildPresentParamsFromSettings(); + + if (deviceInfo.Caps.PrimitiveMiscCaps.IsNullReference) { + // Warn user about null ref device that can't render anything + HandleSampleException(new NullReferenceDeviceException(), ApplicationMessage.None); + } + + CreateFlags createFlags = new CreateFlags(); + if (graphicsSettings.VertexProcessingType == VertexProcessingType.Software) + createFlags = CreateFlags.SoftwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Mixed) + createFlags = CreateFlags.MixedVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Hardware) + createFlags = CreateFlags.HardwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.PureHardware) { + createFlags = CreateFlags.HardwareVertexProcessing; + } + else + throw new ApplicationException(); +#if (DX9) +#else + // Make sure to allow multithreaded apps if we need them + presentParams.ForceNoMultiThreadedFlag = !isMultiThreaded; +#endif + try { + // Create the device + device = new Device(graphicsSettings.AdapterOrdinal, graphicsSettings.DevType, + windowed ? ourRenderTarget : this , createFlags, presentParams); + + // Cache our local objects + renderState = device.RenderState; + sampleState = device.SamplerState; + textureStates = device.TextureState; + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after recreating the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + if (windowed) { + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + } + + // Store device Caps + graphicsCaps = device.DeviceCaps; + behavior = createFlags; + + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + // Store device description + if (deviceInfo.DevType == DeviceType.Reference) + sb.Append("REF"); + else if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append("HAL"); + else if (deviceInfo.DevType == DeviceType.Software) + sb.Append("SW"); + + BehaviorFlags behaviorFlags = new BehaviorFlags(createFlags); + if ((behaviorFlags.HardwareVertexProcessing) && + (behaviorFlags.PureDevice)) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (pure hw vp)"); + else + sb.Append(" (simulated pure hw vp)"); + } + else if (behaviorFlags.HardwareVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (hw vp)"); + else + sb.Append(" (simulated hw vp)"); + } + else if (behaviorFlags.MixedVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (mixed vp)"); + else + sb.Append(" (simulated mixed vp)"); + } + else if (behaviorFlags.SoftwareVertexProcessing) { + sb.Append(" (sw vp)"); + } + + if (deviceInfo.DevType == DeviceType.Hardware) { + sb.Append(": "); + sb.Append(adapterInfo.AdapterDetails.Description); + } + + // Set device stats string + deviceStats = sb.ToString(); + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // Confine cursor to fullscreen window + if (clipCursorWhenFullscreen) { + if (!windowed) { + System.Drawing.Rectangle rcWindow = this.ClientRectangle; + } + } + + // Setup the event handlers for our device + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + device.Disposing += new System.EventHandler(this.DeleteDeviceObjects); + device.DeviceResizing += new System.ComponentModel.CancelEventHandler(this.EnvironmentResized); + + // Initialize the app's device-dependent objects + try { + InitializeDeviceObjects(); + RestoreDeviceObjects(null, null); + active = true; + return; + } + catch { + // Cleanup before we try again + InvalidateDeviceObjects(null, null); + DeleteDeviceObjects(null, null); + device.Dispose(); + device = null; + if (this.Disposing) + return; + } + } + catch { + // If that failed, fall back to the reference rasterizer + if (deviceInfo.DevType == DeviceType.Hardware) { + if (FindBestWindowedMode(false, true)) { + windowed = true; + + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + + // Let the user know we are switching from HAL to the reference rasterizer + HandleSampleException(null, ApplicationMessage.WarnSwitchToRef); + + InitializeEnvironment(); + } + } + } + } + + + + + /// + /// Displays sample exceptions to the user + /// + /// The exception that was thrown + /// Extra information on how to handle the exception + public void HandleSampleException(SampleException e, ApplicationMessage Type) { + // Build a message to display to the user + string strMsg = string.Empty; + if (e != null) + strMsg = e.Message; + + if (ApplicationMessage.ApplicationMustExit == Type) { + strMsg += "\n\nThis sample will now exit."; + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + + // Close the window, which shuts down the app + if (this.IsHandleCreated) + this.Close(); + } + else { + if (ApplicationMessage.WarnSwitchToRef == Type) + strMsg = "\n\nSwitching to the reference rasterizer,\n"; + strMsg += "a software device that implements the entire\n"; + strMsg += "Direct3D feature set, but runs very slowly."; + + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + } + } + + + + + /// + /// Fired when our environment was resized + /// + /// the device that's resizing our environment + /// Set the cancel member to true to turn off automatic device reset + public void EnvironmentResized(object sender, System.ComponentModel.CancelEventArgs e) { + // Check to see if we're closing or changing the form style + if ((isClosing) || (isChangingFormStyle)) { + // We are, cancel our reset, and exit + e.Cancel = true; + return; + } + + // Check to see if we're minimizing and our rendering object + // is not the form, if so, cancel the resize + if ((ourRenderTarget != this) && (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)) + e.Cancel = true; + + if (!isWindowActive) + e.Cancel = true; + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + } + + + + + /// + /// Called when user toggles between fullscreen mode and windowed mode + /// + public void ToggleFullscreen() { + int AdapterOrdinalOld = graphicsSettings.AdapterOrdinal; + DeviceType DevTypeOld = graphicsSettings.DevType; + + isHandlingSizeChanges = false; + isChangingFormStyle = true; + ready = false; + + // Toggle the windowed state + windowed = !windowed; + + // Save our maximized settings.. + if (!windowed && isMaximized) + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + + graphicsSettings.IsWindowed = windowed; + + // If AdapterOrdinal and DevType are the same, we can just do a Reset(). + // If they've changed, we need to do a complete device teardown/rebuild. + if (graphicsSettings.AdapterOrdinal == AdapterOrdinalOld && + graphicsSettings.DevType == DevTypeOld) { + BuildPresentParamsFromSettings(); + // Resize the 3D device + RETRY: + try { + device.Reset(presentParams); + } + catch { + if (windowed) + ForceWindowed(); + else { + // Sit in a loop until the device passes Reset() + try { + device.TestCooperativeLevel(); + } + catch(DeviceNotResetException) { + // Device still needs to be Reset. Try again. + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + goto RETRY; + } + } + } + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + else { + device.Dispose(); + device = null; + InitializeEnvironment(); + } + + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after resetting the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + + if (windowed) { + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; + isChangingFormStyle = false; + + // We were maximized, restore that state + if (isMaximized) { + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + } + this.SendToBack(); + this.BringToFront(); + this.ClientSize = storedSize; + this.Location = storedLocation; + } + else { + if (this.Menu != null) + this.Menu = null; + + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + isChangingFormStyle = false; + } + isHandlingSizeChanges = true; + ready = true; + } + + + + + /// + /// Switch to a windowed mode, even if that means picking a new device and/or adapter + /// + public void ForceWindowed() { + if (windowed) + return; + + if (!FindBestWindowedMode(false, false)) { + return; + } + windowed = true; + + // Now destroy the current 3D device objects, then reinitialize + + ready = false; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Create the new device + try { + InitializeEnvironment(); + } + catch (SampleException e) { + HandleSampleException(e,ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(),ApplicationMessage.ApplicationMustExit); + } + ready = true; + } + + + + + /// + /// Called when our sample has nothing else to do, and it's time to render + /// + private void FullRender() { + // Render a frame during idle time (no messages are waiting) + if (active && ready) { + try { + if ((deviceLost) || (System.Windows.Forms.Form.ActiveForm != this)) { + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + } + // Render a frame during idle time + if (active) { + Render3DEnvironment(); + } + } + catch (Exception ee) { + System.Windows.Forms.MessageBox.Show("An exception has occurred. This sample must exit.\r\n\r\n" + ee.ToString(), "Exception", + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + this.Close(); + } + } + } + + + + + /// + /// Run the simulation + /// + public void Run() { + // Now we're ready to recieve and process Windows messages. + System.Windows.Forms.Control mainWindow = this; + + // If the render target is a form and *not* this form, use that form instead, + // otherwise, use the main form. + if ((ourRenderTarget is System.Windows.Forms.Form) && (ourRenderTarget != this)) + mainWindow = ourRenderTarget; + + mainWindow.Show(); + while (mainWindow.Created) { + FullRender(); + System.Windows.Forms.Application.DoEvents(); + } + } + + + + + /// + /// Draws the scene + /// + public void Render3DEnvironment() { + if (deviceLost) { + try { + // Test the cooperative level to see if it's okay to render + device.TestCooperativeLevel(); + } + catch (DeviceLostException) { + // If the device was lost, do not render until we get it back + isHandlingSizeChanges = false; + isWindowActive = false; + return; + } + catch (DeviceNotResetException) { + // Check if the device needs to be resized. + + // If we are windowed, read the desktop mode and use the same format for + // the back buffer + if (windowed) { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + graphicsSettings.WindowedDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + presentParams.BackBufferFormat = graphicsSettings.WindowedDisplayMode.Format; + } + + // Reset the device and resize it + device.Reset(device.PresentationParameters); + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + deviceLost = false; + } + + // Get the app's time, in seconds. Skip rendering if no time elapsed + float fAppTime = DXUtil.Timer(DirectXTimer.GetApplicationTime); + float fElapsedAppTime = DXUtil.Timer(DirectXTimer.GetElapsedTime); + if ((0.0f == fElapsedAppTime) && frameMoving) + return; + + // FrameMove (animate) the scene + if (frameMoving || singleStep) { + // Store the time for the app + appTime = fAppTime; + elapsedTime = fElapsedAppTime; + + // Frame move the scene + FrameMove(); + + singleStep = false; + } + + // Render the scene as normal + Render(); + + UpdateStats(); + + try { + // Show the frame on the primary surface. + device.Present(); + } + catch(DeviceLostException) { + deviceLost = true; + } + } + + + + + /// + /// Update the various statistics the simulation keeps track of + /// + public void UpdateStats() { + // Keep track of the frame count + float time = DXUtil.Timer(DirectXTimer.GetAbsoluteTime); + ++frames; + + // Update the scene stats once per second + if (time - lastTime > 1.0f) { + framePerSecond = frames / (time - lastTime); + lastTime = time; + frames = 0; + + string strFmt; + Format fmtAdapter = graphicsSettings.DisplayMode.Format; + if (fmtAdapter == device.PresentationParameters.BackBufferFormat) { + strFmt = fmtAdapter.ToString(); + } + else { + strFmt = String.Format("backbuf {0}, adapter {1}", + device.PresentationParameters.BackBufferFormat.ToString(), fmtAdapter.ToString()); + } + + string strDepthFmt; + if (enumerationSettings.AppUsesDepthBuffer) { + strDepthFmt = String.Format(" ({0})", + graphicsSettings.DepthStencilBufferFormat.ToString()); + } + else { + // No depth buffer + strDepthFmt = ""; + } + + string strMultiSample; + switch (graphicsSettings.MultisampleType) { + case Direct3D.MultiSampleType.NonMaskable: strMultiSample = " (NonMaskable Multisample)"; break; + case Direct3D.MultiSampleType.TwoSamples: strMultiSample = " (2x Multisample)"; break; + case Direct3D.MultiSampleType.ThreeSamples: strMultiSample = " (3x Multisample)"; break; + case Direct3D.MultiSampleType.FourSamples: strMultiSample = " (4x Multisample)"; break; + case Direct3D.MultiSampleType.FiveSamples: strMultiSample = " (5x Multisample)"; break; + case Direct3D.MultiSampleType.SixSamples: strMultiSample = " (6x Multisample)"; break; + case Direct3D.MultiSampleType.SevenSamples: strMultiSample = " (7x Multisample)"; break; + case Direct3D.MultiSampleType.EightSamples: strMultiSample = " (8x Multisample)"; break; + case Direct3D.MultiSampleType.NineSamples: strMultiSample = " (9x Multisample)"; break; + case Direct3D.MultiSampleType.TenSamples: strMultiSample = " (10x Multisample)"; break; + case Direct3D.MultiSampleType.ElevenSamples: strMultiSample = " (11x Multisample)"; break; + case Direct3D.MultiSampleType.TwelveSamples: strMultiSample = " (12x Multisample)"; break; + case Direct3D.MultiSampleType.ThirteenSamples: strMultiSample = " (13x Multisample)"; break; + case Direct3D.MultiSampleType.FourteenSamples: strMultiSample = " (14x Multisample)"; break; + case Direct3D.MultiSampleType.FifteenSamples: strMultiSample = " (15x Multisample)"; break; + case Direct3D.MultiSampleType.SixteenSamples: strMultiSample = " (16x Multisample)"; break; + default: strMultiSample = string.Empty; break; + } + frameStats = String.Format("{0} fps ({1}x{2}), {3}{4}{5}", framePerSecond.ToString("f2"), + device.PresentationParameters.BackBufferWidth, device.PresentationParameters.BackBufferHeight, + strFmt, strDepthFmt, strMultiSample); + } + } + + + + + /// + /// Called in to toggle the pause state of the app. + /// + /// true if the simulation should pause + public void Pause(bool pause) { + appPausedCount += (int)(pause ? +1 : -1); + ready = ((appPausedCount > 0) ? false : true); + + // Handle the first pause request (of many, nestable pause requests) + if (pause && (1 == appPausedCount)) { + // Stop the scene from animating + if (frameMoving) + DXUtil.Timer(DirectXTimer.Stop); + } + + if (0 == appPausedCount) { + // Restart the timers + if (frameMoving) + DXUtil.Timer(DirectXTimer.Start); + } + } + + + + + /// + /// Set our variables to not active and not ready + /// + public void CleanupEnvironment() { + active = false; + ready = false; + if (device != null) + device.Dispose(); + + device = null; + } + #region Menu EventHandlers + + + + + /// + /// Prepares the simulation for a new device being selected + /// + public void UserSelectNewDevice(object sender, EventArgs e) { + // Prompt the user to select a new device or mode + if (active && ready) { + Pause(true); + DoSelectNewDevice(); + Pause(false); + } + } + + + + + /// + /// Displays a dialog so the user can select a new adapter, device, or + /// display mode, and then recreates the 3D environment if needed + /// + private void DoSelectNewDevice() { + isHandlingSizeChanges = false; + // Can't display dialogs in fullscreen mode + if (windowed == false) { + try { + ToggleFullscreen(); + isHandlingSizeChanges = false; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + return; + } + } + + // Make sure the main form is in the background + this.SendToBack(); + D3DSettingsForm settingsForm = new D3DSettingsForm(enumerationSettings, graphicsSettings); + System.Windows.Forms.DialogResult result = settingsForm.ShowDialog(null); + if (result != System.Windows.Forms.DialogResult.OK) { + isHandlingSizeChanges = true; + return; + } + graphicsSettings = settingsForm.settings; + + windowed = graphicsSettings.IsWindowed; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Inform the display class of the change. It will internally + // re-create valid surfaces, a d3ddevice, etc. + try { + InitializeEnvironment(); + } + catch(SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + isHandlingSizeChanges = true; + } + + + + + /// + /// Will start (or stop) simulation + /// + private void ToggleStart(object sender, EventArgs e) { + //Toggle frame movement + frameMoving = !frameMoving; + DXUtil.Timer(frameMoving ? DirectXTimer.Start : DirectXTimer.Stop); + } + + + + + /// + /// Will single step the simulation + /// + private void SingleStep(object sender, EventArgs e) { + // Single-step frame movement + if (false == frameMoving) + DXUtil.Timer(DirectXTimer.Advance); + else + DXUtil.Timer(DirectXTimer.Stop); + frameMoving = false; + singleStep = true; + } + + + + + /// + /// Will end the simulation + /// + private void ExitSample(object sender, EventArgs e) { + this.Close(); + } + #endregion + + + + + #region WinForms Overrides + /// + /// Clean up any resources + /// + protected override void Dispose(bool disposing) { + CleanupEnvironment(); + mnuMain.Dispose(); + base.Dispose(disposing); + } + + + + + /// + /// Handle any key presses + /// + protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) { + // Check for our shortcut keys (Return to start or stop) + if (e.KeyChar == '\r') { + mnuGo.PerformClick(); + e.Handled = true; + } + + // Check for our shortcut keys (Escape to quit) + if ((byte)e.KeyChar == (byte)(int)System.Windows.Forms.Keys.Escape) { + mnuExit.PerformClick(); + e.Handled = true; + } + + // Allow the control to handle the keystroke now + base.OnKeyPress(e); + } + + + + + /// + /// Handle system keystrokes (ie, alt-enter) + /// + protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e) { + if ((e.Alt) && (e.KeyCode == System.Windows.Forms.Keys.Return)) { + // Toggle the fullscreen/window mode + if (active && ready) { + Pause(true); + + try { + ToggleFullscreen(); + Pause(false); + return; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + } + finally { + e.Handled = true; + } + } + } + // Allow the control to handle the keystroke now + base.OnKeyDown(e); + } + + + + + /// + /// Winforms generated code for initializing the form + /// + private void InitializeComponent() { + // + // GraphicsSample + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.MinimumSize = new System.Drawing.Size(100, 100); + #region MenuCreation/etc + this.mnuMain = new System.Windows.Forms.MainMenu(); + this.mnuFile = new System.Windows.Forms.MenuItem(); + this.mnuGo = new System.Windows.Forms.MenuItem(); + this.mnuSingle = new System.Windows.Forms.MenuItem(); + this.mnuBreak1 = new System.Windows.Forms.MenuItem(); + this.mnuChange = new System.Windows.Forms.MenuItem(); + this.mnuBreak2 = new System.Windows.Forms.MenuItem(); + this.mnuExit = new System.Windows.Forms.MenuItem(); + // + // mainMenu1 + // + this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuFile}); + // + // mnuFile + // + this.mnuFile.Index = 0; + this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuGo, + this.mnuSingle, + this.mnuBreak1, + this.mnuChange, + this.mnuBreak2, + this.mnuExit}); + this.mnuFile.Text = "&File"; + // + // mnuGo + // + this.mnuGo.Index = 0; + this.mnuGo.Text = "&Go/stop\tEnter"; + this.mnuGo.Click += new System.EventHandler(this.ToggleStart); + // + // mnuSingle + // + this.mnuSingle.Index = 1; + this.mnuSingle.Text = "&Single step\tSpace"; + this.mnuSingle.Click += new System.EventHandler(this.SingleStep); + // + // mnuBreak1 + // + this.mnuBreak1.Index = 2; + this.mnuBreak1.Text = "-"; + // + // mnuChange + // + this.mnuChange.Index = 3; + this.mnuChange.Shortcut = System.Windows.Forms.Shortcut.F2; + this.mnuChange.ShowShortcut = true; + this.mnuChange.Text = "&Change Device..."; + this.mnuChange.Click += new System.EventHandler(this.UserSelectNewDevice); + // + // mnuBreak2 + // + this.mnuBreak2.Index = 4; + this.mnuBreak2.Text = "-"; + // + // mnuExit + // + this.mnuExit.Index = 5; + this.mnuExit.Text = "E&xit\tESC"; + this.mnuExit.Click += new System.EventHandler(this.ExitSample); + #endregion + } + + + + + /// + /// When the menu is starting pause our simulation + /// + protected override void OnMenuStart(System.EventArgs e) { + Pause(true); // Pause the simulation while the menu starts + } + + + + + /// + /// When the menu is complete our simulation can continue + /// + protected override void OnMenuComplete(System.EventArgs e) { + Pause(false); // Unpause the simulation + } + + + + + /// + /// Make sure our graphics cursor (if available) moves with the cursor + /// + protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e) { + if ((device != null) && (!device.Disposed)) { + // Move the D3D cursor + device.SetCursorPosition(e.X, e.Y, false); + } + // Let the control handle the mouse now + base.OnMouseMove(e); + } + + + + + /// + /// Handle size changed events + /// + protected override void OnSizeChanged(System.EventArgs e) { + this.OnResize(e); + base.OnSizeChanged(e); + } + + + + + /// + /// Handle resize events + /// + protected override void OnResize(System.EventArgs e) { + if (isHandlingSizeChanges) { + // Are we maximized? + isMaximized = (this.WindowState == System.Windows.Forms.FormWindowState.Maximized); + if (!isMaximized) { + storedSize = this.ClientSize; + storedLocation = this.Location; + } + } + active = !(this.WindowState == System.Windows.Forms.FormWindowState.Minimized || this.Visible == false); + base.OnResize(e); + } + + + + + /// + /// Once the form has focus again, we can continue to handle our resize + /// and resets.. + /// + protected override void OnGotFocus(System.EventArgs e) { + isHandlingSizeChanges = true; + isWindowActive = true; + base.OnGotFocus (e); + } + + + + + /// + /// Handle move events + /// + protected override void OnMove(System.EventArgs e) { + if (isHandlingSizeChanges) { + storedLocation = this.Location; + } + base.OnMove(e); + } + + + + + /// + /// Handle closing event + /// + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { + isClosing = true; + base.OnClosing(e); + } + #endregion + + +} + +#region Enums for D3D Applications +/// +/// Messages that can be used when displaying an error +/// +public enum ApplicationMessage { + None, + ApplicationMustExit, + WarnSwitchToRef +}; +#endregion + + + + +#region Various SampleExceptions +/// +/// The default sample exception type +/// +public class SampleException : System.ApplicationException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + + strMsg = "Generic application error. Enable\n"; + strMsg += "debug output for detailed information."; + + return strMsg; + } + } +} + + + + +/// +/// Exception informing user no compatible devices were found +/// +public class NoCompatibleDevicesException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "This sample cannot run in a desktop\n"; + strMsg += "window with the current display settings.\n"; + strMsg += "Please change your desktop settings to a\n"; + strMsg += "16- or 32-bit display mode and re-run this\n"; + strMsg += "sample."; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when the ReferenceDevice is null +/// +public class NullReferenceDeviceException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Warning: Nothing will be rendered.\n"; + strMsg += "The reference rendering device was selected, but your\n"; + strMsg += "computer only has a reduced-functionality reference device\n"; + strMsg += "installed. Install the DirectX SDK to get the full\n"; + strMsg += "reference device.\n"; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when reset fails +/// +public class ResetFailedException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not reset the Direct3D device."; + + return strMsg; + } + } +} + + + + +/// +/// The exception thrown when media couldn't be found +/// +public class MediaNotFoundException : SampleException { + private string mediaFile; + public MediaNotFoundException(string filename) : base() { + mediaFile = filename; + } + public MediaNotFoundException() : base() { + mediaFile = string.Empty; + } + + + + + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not load required media."; + if (mediaFile.Length > 0) + strMsg += string.Format("\r\nFile: {0}", mediaFile); + + return strMsg; + } + } +} +#endregion + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/d3dapp.resx b/Source Code updated 08-12-05/Spacewar3D/Step06/d3dapp.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/d3dapp.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/d3denumeration.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/d3denumeration.cs new file mode 100644 index 0000000..47c1c6a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/d3denumeration.cs @@ -0,0 +1,449 @@ +//----------------------------------------------------------------------------- +// File: D3DEnumeration.cs +// +// Desc: Enumerates D3D adapters, devices, modes, etc. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + + + +/// +/// Enumeration of all possible D3D vertex processing types +/// +public enum VertexProcessingType { + Software, + Mixed, + Hardware, + PureHardware +} + + + + +/// +/// Info about a display adapter +/// +public class GraphicsAdapterInfo { + public int AdapterOrdinal; + public AdapterDetails AdapterDetails; + public ArrayList DisplayModeList = new ArrayList(); // List of D3DDISPLAYMODEs + public ArrayList DeviceInfoList = new ArrayList(); // List of D3DDeviceInfos + public override string ToString() { return AdapterDetails.Description; } +} + + + + +/// +/// Info about a D3D device, including a list of DeviceCombos (see below) +/// that work with the device +/// +public class GraphicsDeviceInfo { + public int AdapterOrdinal; + public DeviceType DevType; + public Caps Caps; + public ArrayList DeviceComboList = new ArrayList(); // List of D3DDeviceCombos + public override string ToString() { return DevType.ToString(); } +} + + + + +/// +/// Info about a depth/stencil buffer format that is incompatible with a +/// multisample type +/// +public class DepthStencilMultiSampleConflict { + public DepthFormat DepthStencilFormat; + public MultiSampleType MultiSampleType; +} + + + + +/// +/// A combination of adapter format, back buffer format, and windowed/fullscreen +/// that is compatible with a particular D3D device (and the app) +/// +public class DeviceCombo { + public int AdapterOrdinal; + public DeviceType DevType; + public Format AdapterFormat; + public Format BackBufferFormat; + public bool IsWindowed; + public ArrayList DepthStencilFormatList = new ArrayList(); // List of D3DFORMATs + public ArrayList MultiSampleTypeList = new ArrayList(); // List of D3DMULTISAMPLE_TYPEs + public ArrayList MultiSampleQualityList = new ArrayList(); // List of ints (maxQuality per multisample type) + public ArrayList DepthStencilMultiSampleConflictList = new ArrayList(); // List of DepthStencilMultiSampleConflicts + public ArrayList VertexProcessingTypeList = new ArrayList(); // List of VertexProcessingTypes + public ArrayList PresentIntervalList = new ArrayList(); // List of D3DPRESENT_INTERVALs +} + + + + +/// +/// Used to sort Displaymodes +/// +class DisplayModeComparer : System.Collections.IComparer { + /// + /// Compare two display modes + /// + public int Compare(object x, object y) { + DisplayMode dx = (DisplayMode)x; + DisplayMode dy = (DisplayMode)y; + + if (dx.Width > dy.Width) + return 1; + if (dx.Width < dy.Width) + return -1; + if (dx.Height > dy.Height) + return 1; + if (dx.Height < dy.Height) + return -1; + if (dx.Format > dy.Format) + return 1; + if (dx.Format < dy.Format) + return -1; + if (dx.RefreshRate > dy.RefreshRate) + return 1; + if (dx.RefreshRate < dy.RefreshRate) + return -1; + return 0; + } +} + + + + +/// +/// Enumerates available adapters, devices, modes, etc. +/// +public class D3DEnumeration { + /// + /// The confirm device delegate which is used to determine if a device + /// meets the needs of the simulation + /// + public delegate bool ConfirmDeviceCallbackType(Caps caps, + VertexProcessingType vertexProcessingType, Format adapterFormat, + Format backBufferFormat); + + public ConfirmDeviceCallbackType ConfirmDeviceCallback; + public ArrayList AdapterInfoList = new ArrayList(); // List of D3DAdapterInfos + + // The following variables can be used to limit what modes, formats, + // etc. are enumerated. Set them to the values you want before calling + // Enumerate(). + public int AppMinFullscreenWidth = 640; + public int AppMinFullscreenHeight = 480; + public int AppMinColorChannelBits = 5; // min color bits per channel in adapter format + public int AppMinAlphaChannelBits = 0; // min alpha bits per pixel in back buffer format + public int AppMinDepthBits = 15; + public int AppMinStencilBits = 0; + public bool AppUsesDepthBuffer = true; + public bool AppUsesMixedVP = false; // whether app can take advantage of mixed vp mode + public bool AppRequiresWindowed = false; + public bool AppRequiresFullscreen = false; + + + + + /// + /// Enumerates available D3D adapters, devices, modes, etc. + /// + public void Enumerate() { + foreach (AdapterInformation ai in Manager.Adapters) { + ArrayList adapterFormatList = new ArrayList(); + GraphicsAdapterInfo adapterInfo = new GraphicsAdapterInfo(); + adapterInfo.AdapterOrdinal = ai.Adapter; + adapterInfo.AdapterDetails = ai.Information; + + // Get list of all display modes on this adapter. + // Also build a temporary list of all display adapter formats. + foreach (DisplayMode displayMode in ai.SupportedDisplayModes) { + if (displayMode.Width < AppMinFullscreenWidth) + continue; + if (displayMode.Height < AppMinFullscreenHeight) + continue; + if (GraphicsUtility.GetColorChannelBits(displayMode.Format) < AppMinColorChannelBits) + continue; + adapterInfo.DisplayModeList.Add(displayMode); + if (!adapterFormatList.Contains(displayMode.Format)) + adapterFormatList.Add(displayMode.Format); + } + + // Sort displaymode list + DisplayModeComparer dmc = new DisplayModeComparer(); + adapterInfo.DisplayModeList.Sort(dmc); + + // Get info for each device on this adapter + EnumerateDevices(adapterInfo, adapterFormatList); + + // If at least one device on this adapter is available and compatible + // with the app, add the adapterInfo to the list + if (adapterInfo.DeviceInfoList.Count == 0) + continue; + AdapterInfoList.Add(adapterInfo); + } + } + + + + + /// + /// Enumerates D3D devices for a particular adapter + /// + protected void EnumerateDevices(GraphicsAdapterInfo adapterInfo, ArrayList adapterFormatList) { + DeviceType[] devTypeArray = new DeviceType[] { + DeviceType.Hardware, DeviceType.Software, DeviceType.Reference }; + + foreach (DeviceType devType in devTypeArray) { + GraphicsDeviceInfo deviceInfo = new GraphicsDeviceInfo(); + deviceInfo.AdapterOrdinal = adapterInfo.AdapterOrdinal; + deviceInfo.DevType = devType; + try { + deviceInfo.Caps = Manager.GetDeviceCaps(adapterInfo.AdapterOrdinal, devType); + } + catch (DirectXException) { + continue; + } + + // Get info for each devicecombo on this device + EnumerateDeviceCombos(deviceInfo, adapterFormatList); + + // If at least one devicecombo for this device is found, + // add the deviceInfo to the list + if (deviceInfo.DeviceComboList.Count == 0) + continue; + adapterInfo.DeviceInfoList.Add(deviceInfo); + } + } + + + + + /// + /// Enumerates DeviceCombos for a particular device + /// + protected void EnumerateDeviceCombos(GraphicsDeviceInfo deviceInfo, ArrayList adapterFormatList) { + Format[] backBufferFormatArray = new Format[] { + Format.A8R8G8B8, Format.X8R8G8B8, Format.A2R10G10B10, + Format.R5G6B5, Format.A1R5G5B5, Format.X1R5G5B5, + }; + bool[] isWindowedArray = new bool[] { false, true }; + + // See which adapter formats are supported by this device + foreach (Format adapterFormat in adapterFormatList) { + foreach (Format backBufferFormat in backBufferFormatArray) { + if (GraphicsUtility.GetAlphaChannelBits(backBufferFormat) < AppMinAlphaChannelBits) + continue; + foreach (bool isWindowed in isWindowedArray) { + if (!isWindowed && AppRequiresWindowed) + continue; + if (isWindowed && AppRequiresFullscreen) + continue; + if (!Manager.CheckDeviceType(deviceInfo.AdapterOrdinal, deviceInfo.DevType, adapterFormat, backBufferFormat, isWindowed)) { + continue; + } + + // At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed + // DeviceCombo that is supported by the system. We still need to confirm that it's + // compatible with the app, and find one or more suitable depth/stencil buffer format, + // multisample type, vertex processing type, and present interval. + DeviceCombo deviceCombo = new DeviceCombo(); + deviceCombo.AdapterOrdinal = deviceInfo.AdapterOrdinal; + deviceCombo.DevType = deviceInfo.DevType; + deviceCombo.AdapterFormat = adapterFormat; + deviceCombo.BackBufferFormat = backBufferFormat; + deviceCombo.IsWindowed = isWindowed; + if (AppUsesDepthBuffer) { + BuildDepthStencilFormatList(deviceCombo); + if (deviceCombo.DepthStencilFormatList.Count == 0) + continue; + } + BuildMultiSampleTypeList(deviceCombo); + if (deviceCombo.MultiSampleTypeList.Count == 0) + continue; + BuildDepthStencilMultiSampleConflictList(deviceCombo); + BuildVertexProcessingTypeList(deviceInfo, deviceCombo); + if (deviceCombo.VertexProcessingTypeList.Count == 0) + continue; + BuildPresentIntervalList(deviceInfo, deviceCombo); + if (deviceCombo.PresentIntervalList.Count == 0) + continue; + + deviceInfo.DeviceComboList.Add(deviceCombo); + } + } + } + } + + + + + /// + /// Adds all depth/stencil formats that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildDepthStencilFormatList(DeviceCombo deviceCombo) { + DepthFormat[] depthStencilFormatArray = { + DepthFormat.D16, + DepthFormat.D15S1, + DepthFormat.D24X8, + DepthFormat.D24S8, + DepthFormat.D24X4S4, + DepthFormat.D32, + }; + + foreach (DepthFormat depthStencilFmt in depthStencilFormatArray) { + if (GraphicsUtility.GetDepthBits(depthStencilFmt) < AppMinDepthBits) + continue; + if (GraphicsUtility.GetStencilBits(depthStencilFmt) < AppMinStencilBits) + continue; + if (Manager.CheckDeviceFormat(deviceCombo.AdapterOrdinal, deviceCombo.DevType, deviceCombo.AdapterFormat, + Usage.DepthStencil, ResourceType.Surface, depthStencilFmt)) { + if (Manager.CheckDepthStencilMatch(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat, depthStencilFmt)) { + deviceCombo.DepthStencilFormatList.Add(depthStencilFmt); + } + } + } + } + + + + + /// + /// Adds all multisample types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildMultiSampleTypeList(DeviceCombo deviceCombo) { + MultiSampleType[] msTypeArray = { + MultiSampleType.None, + MultiSampleType.NonMaskable, + MultiSampleType.TwoSamples, + MultiSampleType.ThreeSamples, + MultiSampleType.FourSamples, + MultiSampleType.FiveSamples, + MultiSampleType.SixSamples, + MultiSampleType.SevenSamples, + MultiSampleType.EightSamples, + MultiSampleType.NineSamples, + MultiSampleType.TenSamples, + MultiSampleType.ElevenSamples, + MultiSampleType.TwelveSamples, + MultiSampleType.ThirteenSamples, + MultiSampleType.FourteenSamples, + MultiSampleType.FifteenSamples, + MultiSampleType.SixteenSamples, + }; + + foreach (MultiSampleType msType in msTypeArray) { + int result; + int qualityLevels = 0; + if (Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.BackBufferFormat, deviceCombo.IsWindowed, msType, out result, out qualityLevels)) { + deviceCombo.MultiSampleTypeList.Add(msType); + deviceCombo.MultiSampleQualityList.Add(qualityLevels); + } + } + } + + + + + /// + /// Finds any depthstencil formats that are incompatible with multisample types and + /// builds a list of them. + /// + public void BuildDepthStencilMultiSampleConflictList(DeviceCombo deviceCombo) { + DepthStencilMultiSampleConflict DSMSConflict; + + foreach (DepthFormat dsFmt in deviceCombo.DepthStencilFormatList) { + foreach (MultiSampleType msType in deviceCombo.MultiSampleTypeList) { + if (!Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, + deviceCombo.DevType, (Format)dsFmt, deviceCombo.IsWindowed, msType)) { + DSMSConflict = new DepthStencilMultiSampleConflict(); + DSMSConflict.DepthStencilFormat = dsFmt; + DSMSConflict.MultiSampleType = msType; + deviceCombo.DepthStencilMultiSampleConflictList.Add(DSMSConflict); + } + } + } + } + + + + + /// + /// Adds all vertex processing types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildVertexProcessingTypeList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + if (deviceInfo.Caps.DeviceCaps.SupportsHardwareTransformAndLight) { + if (deviceInfo.Caps.DeviceCaps.SupportsPureDevice) { + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.PureHardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.PureHardware); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Hardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Hardware); + } + if (AppUsesMixedVP && (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Mixed, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat))) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Mixed); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Software, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Software); + } + } + + + + + /// + /// Adds all present intervals that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildPresentIntervalList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + PresentInterval[] piArray = { + PresentInterval.Immediate, + PresentInterval.Default, + PresentInterval.One, + PresentInterval.Two, + PresentInterval.Three, + PresentInterval.Four, + }; + + foreach (PresentInterval pi in piArray) { + if (deviceCombo.IsWindowed) { + if (pi == PresentInterval.Two || + pi == PresentInterval.Three || + pi == PresentInterval.Four) { + // These intervals are not supported in windowed mode. + continue; + } + } + // Note that PresentInterval.Default is zero, so you + // can't do a caps check for it -- it is always available. + if (pi == PresentInterval.Default || + (deviceInfo.Caps.PresentationIntervals & pi) != (PresentInterval)0) { + deviceCombo.PresentIntervalList.Add(pi); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/d3dfont.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/d3dfont.cs new file mode 100644 index 0000000..2b374eb --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/d3dfont.cs @@ -0,0 +1,666 @@ +//----------------------------------------------------------------------------- +// File: D3DFont.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// A generic font class +/// +public class GraphicsFont { + public const int MaxNumfontVertices = 50*6; + + // Font rendering flags + [System.Flags] + public enum RenderFlags { + Centered = 0x0001, + TwoSided = 0x0002, + Filtered = 0x0004, + } + private System.Drawing.Font systemFont; + + private bool isZEnable = false; + public bool ZBufferEnable { get { return isZEnable; } set { isZEnable = value; } } + string ourFontName; // Font properties + int ourFontHeight; + + private Direct3D.Device device; + private TextureStateManager textureState0; + private TextureStateManager textureState1; + private SamplerStateManager samplerState0; + private RenderStateManager renderState; + private Direct3D.Texture fontTexture; + private Direct3D.VertexBuffer vertexBuffer; + private CustomVertex.TransformedColoredTextured[] fontVertices = new CustomVertex.TransformedColoredTextured[MaxNumfontVertices]; + + private int textureWidth; // Texture dimensions + private int textureHeight; + private float textureScale; + private int spacingPerChar; + private float[,] textureCoords = new float[128-32,4]; + + // Stateblocks for setting and restoring render states + private StateBlock savedStateBlock; + private StateBlock drawTextStateBlock; + + + + + /// + /// Create a new font object + /// + /// The font to use + public GraphicsFont(System.Drawing.Font f) { + ourFontName = f.Name; + ourFontHeight = (int)f.Size; + systemFont = f; + } + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName) : this(fontName, FontStyle.Regular, 12) { + } + + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName, FontStyle style) : this(fontName, style, 12) { + } + + + + + /// + /// Create a new font object + /// + /// The name of the font + /// The style + /// Size of the font + public GraphicsFont(string fontName, FontStyle style, int size) { + ourFontName = fontName; + ourFontHeight = size; + systemFont = new System.Drawing.Font(fontName, ourFontHeight, style); + } + + + + + /// + /// Attempt to draw the systemFont alphabet onto the provided texture + /// graphics. + /// + /// Graphics object on which to draw and measure the letters + /// If set, the method will test to see if the alphabet will fit without actually drawing + public void PaintAlphabet(Graphics g, bool measureOnly) { + string str; + float x = 0; + float y = 0; + Point p = new Point(0, 0); + Size size = new Size(0,0); + + // Calculate the spacing between characters based on line height + size = g.MeasureString(" ", systemFont).ToSize(); + x = spacingPerChar = (int) Math.Ceiling(size.Height * 0.3); + + for (char c = (char)32; c < (char)127; c++) { + str = c.ToString(); + // We need to do some things here to get the right sizes. The default implemententation of MeasureString + // will return a resolution independant size. For our height, this is what we want. However, for our width, we + // want a resolution dependant size. + Size resSize = g.MeasureString(str, systemFont).ToSize(); + size.Height = resSize.Height + 1; + + // Now the Resolution independent width + if (c != ' ') { // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + resSize = g.MeasureString(str, systemFont, p, StringFormat.GenericTypographic).ToSize(); + size.Width = resSize.Width; + } + else + size.Width = resSize.Width; + + if ((x + size.Width + spacingPerChar) > textureWidth) { + x = spacingPerChar; + y += size.Height; + } + + // Make sure we have room for the current character + if ((y + size.Height) > textureHeight) + throw new System.InvalidOperationException("Texture too small for alphabet"); + + if (!measureOnly) { + if (c != ' ') // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y), StringFormat.GenericTypographic); + else + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y)); + textureCoords[c-32,0] = ((float) (x + 0 - spacingPerChar)) / textureWidth; + textureCoords[c-32,1] = ((float) (y + 0 + 0)) / textureHeight; + textureCoords[c-32,2] = ((float) (x + size.Width + spacingPerChar)) / textureWidth; + textureCoords[c-32,3] = ((float) (y + size.Height + 0)) / textureHeight; + } + + x += size.Width + (2 * spacingPerChar); + } + + } + + + + + /// + /// Initialize the device objects + /// + /// The grpahics device used to initialize + public void InitializeDeviceObjects(Device dev) { + if (dev != null) { + // Set up our events + dev.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Keep a local copy of the device + device = dev; + textureState0 = device.TextureState[0]; + textureState1 = device.TextureState[1]; + samplerState0 = device.SamplerState[0]; + renderState = device.RenderState; + + // Create a bitmap on which to measure the alphabet + Bitmap bmp = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Graphics g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Establish the font and texture size + textureScale = 1.0f; // Draw fonts into texture without scaling + + // Calculate the dimensions for the smallest power-of-two texture which + // can hold all the printable characters + textureWidth = textureHeight = 128; + for (;;) { + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // Scale up the texture size and try again + textureWidth *= 2; + textureHeight *= 2; + continue; + } + + break; + } + + // If requested texture is too big, use a smaller texture and smaller font, + // and scale up when rendering. + Direct3D.Caps d3dCaps = device.DeviceCaps; + + // If the needed texture is too large for the video card... + if (textureWidth > d3dCaps.MaxTextureWidth) { + // Scale the font size down to fit on the largest possible texture + textureScale = (float)d3dCaps.MaxTextureWidth / (float)textureWidth; + textureWidth = textureHeight = d3dCaps.MaxTextureWidth; + + for(;;) { + // Create a new, smaller font + ourFontHeight = (int) Math.Floor(ourFontHeight * textureScale); + systemFont = new System.Drawing.Font(systemFont.Name, ourFontHeight, systemFont.Style); + + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // If that still doesn't fit, scale down again and continue + textureScale *= 0.9F; + continue; + } + + break; + } + } + + // Release the bitmap used for measuring and create one for drawing + bmp.Dispose(); + bmp = new Bitmap(textureWidth, textureHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Draw the alphabet + PaintAlphabet(g, false); + + // Create a new texture for the font from the bitmap we just created + fontTexture = Texture.FromBitmap(device, bmp, 0, Pool.Managed); + RestoreDeviceObjects(null, null); + } + + + + + /// + /// Restore the font after a device has been reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColoredTextured), MaxNumfontVertices, + device, Usage.WriteOnly | Usage.Dynamic, 0, Pool.Default); + + Surface surf = device.GetRenderTarget( 0 ); + bool bSupportsAlphaBlend = Manager.CheckDeviceFormat(device.DeviceCaps.AdapterOrdinal, + device.DeviceCaps.DeviceType, device.DisplayMode.Format, + Usage.RenderTarget | Usage.QueryPostPixelShaderBlending, ResourceType.Surface, + surf.Description.Format ); + + // Create the state blocks for rendering text + for (int which=0; which < 2; which++) { + device.BeginStateBlock(); + device.SetTexture(0, fontTexture); + + if (isZEnable) + renderState.ZBufferEnable = true; + else + renderState.ZBufferEnable = false; + + if( bSupportsAlphaBlend ) { + renderState.AlphaBlendEnable = true; + renderState.SourceBlend = Blend.SourceAlpha; + renderState.DestinationBlend = Blend.InvSourceAlpha; + } + else { + renderState.AlphaBlendEnable = false; + } + renderState.AlphaTestEnable = true; + renderState.ReferenceAlpha = 0x08; + renderState.AlphaFunction = Compare.GreaterEqual; + renderState.FillMode = FillMode.Solid; + renderState.CullMode = Cull.CounterClockwise; + renderState.StencilEnable = false; + renderState.Clipping = true; + device.ClipPlanes.DisableAll(); + renderState.VertexBlend = VertexBlend.Disable; + renderState.IndexedVertexBlendEnable = false; + renderState.FogEnable = false; + renderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; + textureState0.ColorOperation = TextureOperation.Modulate; + textureState0.ColorArgument1 = TextureArgument.TextureColor; + textureState0.ColorArgument2 = TextureArgument.Diffuse; + textureState0.AlphaOperation = TextureOperation.Modulate; + textureState0.AlphaArgument1 = TextureArgument.TextureColor; + textureState0.AlphaArgument2 = TextureArgument.Diffuse; + textureState0.TextureCoordinateIndex = 0; + textureState0.TextureTransform = TextureTransform.Disable; // REVIEW + textureState1.ColorOperation = TextureOperation.Disable; + textureState1.AlphaOperation = TextureOperation.Disable; + samplerState0.MinFilter = TextureFilter.Point; + samplerState0.MagFilter = TextureFilter.Point; + samplerState0.MipFilter = TextureFilter.None; + + if (which==0) + savedStateBlock = device.EndStateBlock(); + else + drawTextStateBlock = device.EndStateBlock(); + } + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text) { + DrawText(xpos, ypos, color, text, RenderFlags.Filtered); + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text, RenderFlags flags) { + if (text == null) + return; + + // Setup renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.SetTexture(0, fontTexture); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Adjust for character spacing + xpos -= spacingPerChar; + float fStartX = xpos; + + // Fill vertex buffer + int iv = 0; + int dwNumTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / textureScale; + float h = (ty2-ty1) * textureHeight / textureScale; + + int intColor = color.ToArgb(); + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + dwNumTriangles += 2; + + if (dwNumTriangles*3 > (MaxNumfontVertices-6)) { + // Set the data for the vertexbuffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + dwNumTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar); + } + + // Set the data for the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (dwNumTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + Viewport vp = device.Viewport; + float xpos = (x+1.0f)*vp.Width/2; + float ypos = (y+1.0f)*vp.Height/2; + float sz = z; + float rhw = 1.0f; + float fLineHeight = (textureCoords[0,3] - textureCoords[0,1]) * textureHeight; + + // Adjust for character spacing + xpos -= spacingPerChar * (fXScale*vp.Height)/fLineHeight; + float fStartX = xpos; + + // Fill vertex buffer + int numTriangles = 0; + int realColor = color.ToArgb(); + int iv = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += fYScale*vp.Height; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1)*textureWidth; + float h = (ty2-ty1)*textureHeight; + + w *= (fXScale*vp.Height)/fLineHeight; + h *= (fYScale*vp.Height)/fLineHeight; + + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + numTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar) * (fXScale*vp.Height)/fLineHeight; + } + + // Unlock and render the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text) { + this.DrawTextScaled(x,y,z,fXScale, fYScale, color, text, 0); + } + + + + + /// + /// Renders 3D text + /// + public void Render3DText(string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.PositionNormalTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0, VertexInformation.GetFormatSize(CustomVertex.PositionNormalTextured.Format)); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Position for each text element + float x = 0.0f; + float y = 0.0f; + + // Center the text block at the origin + if ((flags & RenderFlags.Centered) != 0) { + System.Drawing.SizeF sz = GetTextExtent(text); + x = -(((float)sz.Width)/10.0f)/2.0f; + y = -(((float)sz.Height)/10.0f)/2.0f; + } + + // Turn off culling for two-sided text + if ((flags & RenderFlags.TwoSided) != 0) + renderState.CullMode = Cull.None; + + // Adjust for character spacing + x -= spacingPerChar / 10.0f; + float fStartX = x; + + // Fill vertex buffer + GraphicsStream strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + int numTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + x = fStartX; + y -= (textureCoords[0,3]-textureCoords[0,1])*textureHeight/10.0f; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / (10.0f * textureScale); + float h = (ty2-ty1) * textureHeight / (10.0f * textureScale); + + if (c != ' ') { + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+0,0), new Vector3(0,0,-1), tx1, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+h,0), new Vector3(0,0,-1), tx2, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.Unlock(); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + numTriangles = 0; + } + } + + x += w - (2 * spacingPerChar) / 10.0f; + } + + // Unlock and render the vertex buffer + vertexBuffer.Unlock(); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Get the dimensions of a text string + /// + private System.Drawing.SizeF GetTextExtent(string text) { + if (null == text || text == string.Empty) + throw new System.ArgumentNullException(); + + float fRowWidth = 0.0f; + float fRowHeight = (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + float fWidth = 0.0f; + float fHeight = fRowHeight; + + foreach (char c in text) { + if (c == '\n') { + fRowWidth = 0.0f; + fHeight += fRowHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float tx2 = textureCoords[c-32,2]; + + fRowWidth += (tx2-tx1)*textureWidth - 2*spacingPerChar; + + if (fRowWidth > fWidth) + fWidth = fRowWidth; + } + + return new System.Drawing.SizeF(fWidth, fHeight); + } + + + + + /// + /// Cleanup any resources being used + /// + public void Dispose(object sender, EventArgs e) { + if (systemFont != null) + systemFont.Dispose(); + + systemFont = null; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/d3dutil.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/d3dutil.cs new file mode 100644 index 0000000..ea2d5a3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/d3dutil.cs @@ -0,0 +1,928 @@ +//----------------------------------------------------------------------------- +// File: D3DUtil.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Windows.Forms; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// Various helper functions for graphics samples +/// +public class GraphicsUtility { + /// + /// Private Constructor + /// + private GraphicsUtility() { + } + + + + /// + /// Initializes a Material structure, setting the diffuse and ambient + /// colors. It does not set emissive or specular colors. + /// + /// The ambient and diffuse color + /// A defined material + public static Direct3D.Material InitMaterial(System.Drawing.Color c) { + Material mtrl = new Material(); + mtrl.Ambient = mtrl.Diffuse = c; + return mtrl; + } + + + + + /// + /// Initializes a light, setting the light position. The + /// diffuse color is set to white; specular and ambient are left as black. + /// + /// Which light to initialize + /// The type + public static void InitLight(Light light, LightType ltType, float x, float y, float z) { + light.Type = ltType; + light.Diffuse = System.Drawing.Color.White; + light.Position = new Vector3(x,y,z); + light.Direction = Vector3.Normalize(light.Position); + light.Range = 1000.0f; + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename, Format format) { + // Get the path to the texture + string path = DXUtil.FindMediaFile(null, textureFilename); + + // Create the texture using D3DX + return TextureLoader.FromFile(device, path, D3DX.Default, D3DX.Default, D3DX.Default, 0, format, + Pool.Managed, Filter.Triangle|Filter.Mirror, + Filter.Triangle|Filter.Mirror, 0); + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename) { + return GraphicsUtility.CreateTexture(device, textureFilename, Format.Unknown); + } + + + + + + /// + /// Returns a view matrix for rendering to a face of a cubemap. + /// + public static Matrix GetCubeMapViewMatrix(CubeMapFace face) { + Vector3 vEyePt = new Vector3(0.0f, 0.0f, 0.0f); + Vector3 vLookDir = new Vector3(); + Vector3 vUpDir = new Vector3(); + + switch (face) { + case CubeMapFace.PositiveX: + vLookDir = new Vector3(1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeX: + vLookDir = new Vector3(-1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.PositiveY: + vLookDir = new Vector3(0.0f, 1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f,-1.0f); + break; + case CubeMapFace.NegativeY: + vLookDir = new Vector3(0.0f,-1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f, 1.0f); + break; + case CubeMapFace.PositiveZ: + vLookDir = new Vector3(0.0f, 0.0f, 1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeZ: + vLookDir = new Vector3(0.0f, 0.0f,-1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + } + + // Set the view transform for this cubemap surface + Matrix matView = Matrix.LookAtLH(vEyePt, vLookDir, vUpDir); + return matView; + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control, float fTrackBallRadius) { + System.Drawing.Point pt = System.Windows.Forms.Cursor.Position; + System.Drawing.Rectangle rc = control.ClientRectangle; + pt = control.PointToClient(pt); + float xpos = (((2.0f * pt.X) / (rc.Right-rc.Left)) - 1); + float ypos = (((2.0f * pt.Y) / (rc.Bottom-rc.Top)) - 1); + float sz; + + if (xpos == 0.0f && ypos == 0.0f) + return new Quaternion(0.0f, 0.0f, 0.0f, 1.0f); + + float d2 = (float)Math.Sqrt(xpos*xpos + ypos*ypos); + + if (d2 < fTrackBallRadius * 0.70710678118654752440) // Inside sphere + sz = (float)Math.Sqrt(fTrackBallRadius*fTrackBallRadius - d2*d2); + else // On hyperbola + sz = (fTrackBallRadius*fTrackBallRadius) / (2.0f*d2); + + // Get two points on trackball's sphere + Vector3 p1 = new Vector3(xpos, ypos, sz); + Vector3 p2 = new Vector3(0.0f, 0.0f, fTrackBallRadius); + + // Get axis of rotation, which is cross product of p1 and p2 + Vector3 axis = Vector3.Cross(p1,p2); + + // Calculate angle for the rotation about that axis + float t = Vector3.Length(Vector3.Subtract(p2,p1)) / (2.0f*fTrackBallRadius); + if (t > +1.0f) t = +1.0f; + if (t < -1.0f) t = -1.0f; + float fAngle = (float)(2.0f * Math.Asin(t)); + + // Convert axis to quaternion + return Quaternion.RotationAxis(axis, fAngle); + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control) { + return GetRotationFromCursor(control, 1.0f); + } + + + + + /// + /// Axis to axis quaternion double angle (no normalization) + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by 2*THETA. + /// + public static Quaternion D3DXQuaternionUnitAxisToUnitAxis2(Vector3 fromVector, Vector3 toVector) { + Vector3 axis = Vector3.Cross(fromVector, toVector); // proportional to sin(theta) + return new Quaternion(axis.X, axis.Y, axis.Z, Vector3.Dot(fromVector, toVector)); + } + + + + + /// + /// Axis to axis quaternion + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by theta. + /// + public static Quaternion D3DXQuaternionAxisToAxis(Vector3 fromVector, Vector3 toVector) { + Vector3 vA = Vector3.Normalize(fromVector), vB = Vector3.Normalize(toVector); + Vector3 vHalf = Vector3.Add(vA,vB); + vHalf = Vector3.Normalize(vHalf); + return GraphicsUtility.D3DXQuaternionUnitAxisToUnitAxis2(vA, vHalf); + } + + + + + /// + /// Gets the number of ColorChanelBits from a format + /// + static public int GetColorChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 8; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 8; + case Format.R5G6B5: + return 5; + case Format.X1R5G5B5: + return 5; + case Format.A1R5G5B5: + return 5; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 2; + case Format.A8R3G3B2: + return 2; + case Format.X4R4G4B4: + return 4; + case Format.A2B10G10R10: + return 10; + case Format.A2R10G10B10: + return 10; + default: + return 0; + } + } + + + + + /// + /// Gets the number of alpha channel bits + /// + static public int GetAlphaChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 0; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 0; + case Format.R5G6B5: + return 0; + case Format.X1R5G5B5: + return 0; + case Format.A1R5G5B5: + return 1; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 0; + case Format.A8R3G3B2: + return 8; + case Format.X4R4G4B4: + return 0; + case Format.A2B10G10R10: + return 2; + case Format.A2R10G10B10: + return 2; + default: + return 0; + } + } + + + + + /// + /// Gets the number of depth bits + /// + static public int GetDepthBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 16; + case DepthFormat.D15S1: + return 15; + case DepthFormat.D24X8: + return 24; + case DepthFormat.D24S8: + return 24; + case DepthFormat.D24X4S4: + return 24; + case DepthFormat.D32: + return 32; + default: + return 0; + } + } + + + + + /// + /// Gets the number of stencil bits + /// + static public int GetStencilBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 0; + case DepthFormat.D15S1: + return 1; + case DepthFormat.D24X8: + return 0; + case DepthFormat.D24S8: + return 8; + case DepthFormat.D24X4S4: + return 4; + case DepthFormat.D32: + return 0; + default: + return 0; + } + } + + + + + /// + /// Assembles and creates a file-based vertex shader + /// + public static VertexShader CreateVertexShader(Device device, string filename) { + GraphicsStream code = null; + string path = null; + + // Get the path to the vertex shader file + path = DXUtil.FindMediaFile(null, filename); + + // Assemble the vertex shader file + code = ShaderLoader.FromFile(path, null, 0); + + // Create the vertex shader + return new VertexShader(device, code); + } + +} + + + + +/// +/// An arc ball class +/// +public class GraphicsArcBall { + private int internalWidth; // ArcBall's window width + private int internalHeight; // ArcBall's window height + private float internalradius; // ArcBall's radius in screen coords + private float internalradiusTranslation; // ArcBall's radius for translating the target + + private Quaternion internaldownQuat; // Quaternion before button down + private Quaternion internalnowQuat; // Composite quaternion for current drag + private Matrix internalrotationMatrix; // Matrix for arcball's orientation + private Matrix internalrotationDelta; // Matrix for arcball's orientation + private Matrix internaltranslationMatrix; // Matrix for arcball's position + private Matrix internaltranslationDelta; // Matrix for arcball's position + private bool internaldragging; // Whether user is dragging arcball + private bool internaluseRightHanded; // Whether to use RH coordinate system + private int saveMouseX = 0; // Saved mouse position + private int saveMouseY = 0; + private Vector3 internalvectorDown; // Button down vector + System.Windows.Forms.Control parent; // parent + + + + + /// + /// Constructor + /// + public GraphicsArcBall(System.Windows.Forms.Control p) { + internaldownQuat = Quaternion.Identity; + internalnowQuat = Quaternion.Identity; + internalrotationMatrix = Matrix.Identity; + internalrotationDelta = Matrix.Identity; + internaltranslationMatrix = Matrix.Identity; + internaltranslationDelta = Matrix.Identity; + internaldragging = false; + internalradiusTranslation = 1.0f; + internaluseRightHanded = false; + + parent = p; + // Hook the events + p.MouseDown += new MouseEventHandler(this.OnContainerMouseDown); + p.MouseUp += new MouseEventHandler(this.OnContainerMouseUp); + p.MouseMove += new MouseEventHandler(this.OnContainerMouseMove); + } + + + + + /// + /// Set the window dimensions + /// + public void SetWindow(int width, int height, float radius) { + // Set ArcBall info + internalWidth = width; + internalHeight = height; + internalradius = radius; + } + + + + + /// + /// Screen coords to a vector + /// + private Vector3 ScreenToVector(int xpos, int ypos) { + // Scale to screen + float x = -(xpos - internalWidth/2) / (internalradius*internalWidth/2); + float y = (ypos - internalHeight/2) / (internalradius*internalHeight/2); + + if (internaluseRightHanded) { + x = -x; + y = -y; + } + + float z = 0.0f; + float mag = x*x + y*y; + + if (mag > 1.0f) { + float scale = 1.0f/(float)Math.Sqrt(mag); + x *= scale; + y *= scale; + } + else + z = (float)Math.Sqrt(1.0f - mag); + + // Return vector + return new Vector3(x, y, z); + } + + + + + /// + /// Fired when the containers mouse button is down + /// + private void OnContainerMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { + // Store off the position of the cursor when the button is pressed + saveMouseX = e.X; + saveMouseY = e.Y; + + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // Start drag mode + internaldragging = true; + internalvectorDown = ScreenToVector(e.X, e.Y); + internaldownQuat = internalnowQuat; + } + } + + + + + /// + /// Fired when the containers mouse button has been released + /// + private void OnContainerMouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // End drag mode + internaldragging = false; + } + } + + + + + /// + /// Fired when the containers mouse is moving + /// + private void OnContainerMouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + if (internaldragging) { + // recompute nowQuat + Vector3 vCur = ScreenToVector(e.X, e.Y); + Quaternion qAxisToAxis = GraphicsUtility.D3DXQuaternionAxisToAxis(internalvectorDown, vCur); + internalnowQuat = internaldownQuat; + internalnowQuat = Quaternion.Multiply(internalnowQuat,qAxisToAxis); + internalrotationDelta = Matrix.RotationQuaternion(qAxisToAxis); + } + else + internalrotationDelta = Matrix.Identity; + + internalrotationMatrix = Matrix.RotationQuaternion(internalnowQuat); + internaldragging = true; + } + + if ((e.Button == System.Windows.Forms.MouseButtons.Right) || (e.Button == System.Windows.Forms.MouseButtons.Middle)) { + // Normalize based on size of window and bounding sphere radius + float fDeltaX = (saveMouseX-e.X) * internalradiusTranslation / internalWidth; + float fDeltaY = (saveMouseY-e.Y) * internalradiusTranslation / internalHeight; + + if (e.Button == System.Windows.Forms.MouseButtons.Right) { + internaltranslationDelta = Matrix.Translation(-2 * fDeltaX, 2 * fDeltaY, 0.0f); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + if (e.Button == System.Windows.Forms.MouseButtons.Middle) { + internaltranslationDelta = Matrix.Translation(0.0f, 0.0f, 5 * fDeltaY); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + + // Store mouse coordinate + saveMouseX = e.X; + saveMouseY = e.Y; + } + } + + #region Various properties of the class + public float Radius { + set { + internalradiusTranslation = value; } + } + public bool RightHanded { + get { return internaluseRightHanded; } + set { internaluseRightHanded = value; } + } + public Matrix RotationMatrix { + get { return internalrotationMatrix; } + } + public Matrix RotationDeltaMatrix { + get { return internalrotationDelta; } + } + public Matrix TranslationMatrix { + get { return internaltranslationMatrix; } + } + public Matrix TranslationDeltaMatrix { + get { return internaltranslationDelta; } + } + public bool IsBeingDragged { + get { return internaldragging; } + } + #endregion +} + + + + +/// +/// Handles our meshes +/// +public class GraphicsMesh : IDisposable { + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + + + + + /// + /// Constructor + /// + /// The initial filename + public GraphicsMesh(string filename) { + fileName = filename; + } + public GraphicsMesh() : this ("CD3DFile_Mesh") {} + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + string strPath = null; + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Find the path for the file, and convert it to ANSI (for the D3DX API) + strPath = DXUtil.FindMediaFile(null, filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(strPath, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + } + + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. Note: because we are passing in + // no flags, the default behavior is to clone into local memory. + localMemoryMesh = systemMemoryMesh.Clone(0, systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(Device device, bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render(Device device) { + Render(device, true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/dinput.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/dinput.cs new file mode 100644 index 0000000..f0829a0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/dinput.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + +/// +/// This class is where the DirectInput routines +/// for the application resides. +/// +public class InputClass { + + private Control owner = null; + private Device localDevice = null; + + public InputClass(Control owner) { + this.owner = owner; + + localDevice = new Device(SystemGuid.Keyboard); + localDevice.SetDataFormat(DeviceDataFormat.Keyboard); + localDevice.SetCooperativeLevel(owner, CooperativeLevelFlags.Foreground | CooperativeLevelFlags.NonExclusive); + } + + public KeyboardState GetInputState() { + KeyboardState kbState = null; + + try { + kbState = localDevice.GetCurrentKeyboardState(); + } + catch(InputException) { + do { + Application.DoEvents(); + try{ localDevice.Acquire(); } + catch (InputLostException) { + continue; } + catch(OtherApplicationHasPriorityException) { + continue; } + + break; + + }while( true ); + } + return kbState; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/dplay.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/dplay.cs new file mode 100644 index 0000000..be86825 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/dplay.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + +/// +/// The class that houses DirectPlay code for the application. +/// +public class PlayClass : IDisposable { + private MessageDelegate message = null; + + private GameClass parent = null; + + public Peer peerObject = null; + private ConnectWizard Connect = null; + private ArrayList PlayerList = new ArrayList(); + private int LocalPlayerID = 0; + public Guid AppGuid = new Guid(0x876a3036, 0xffd7, 0x46bc, 0x92, 0x9, 0xb4, 0x2f, 0x61, 0x7b, 0x9b, 0xF1); + + public struct Players { + public int dpnID; + public string Name; + public Players(int id, string n) { + dpnID = id; Name = n; } + } + + public void Dispose() { + peerObject.Dispose(); + } + + public PlayClass(GameClass parent) { + this.parent = parent; + this.peerObject = peerObject; + this.message = new MessageDelegate(parent.MessageArrived); + + peerObject = new Peer(); + // First set up our event handlers (We only need events for the ones we care about) + peerObject.PlayerCreated += new PlayerCreatedEventHandler(this.PlayerCreated); + peerObject.PlayerDestroyed += new PlayerDestroyedEventHandler(this.PlayerDestroyed); + peerObject.HostMigrated += new HostMigratedEventHandler(this.HostMigrated); + peerObject.Receive += new ReceiveEventHandler(this.DataReceived); + peerObject.SessionTerminated += new SessionTerminatedEventHandler(this.SessionTerminated); + + Connect = new ConnectWizard(peerObject, AppGuid, "Step2"); + if (!Connect.StartWizard()) { + MessageBox.Show("DirectPlay initialization was incomplete. Application will terminate."); + throw new DirectXException(); + } + } + + public void WriteMessage(byte msg) { + NetworkPacket packet = new NetworkPacket(); + + packet.Write(msg); + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.Guaranteed); + } + + #region DirectPlayEvents + /// + // These are the events the app will handle + // when DPlay fires them. + /// + private void PlayerCreated(object sender, PlayerCreatedEventArgs dpMessage) { + // Get the PlayerInformation and store it + PlayerInformation dpPeer = peerObject.GetPeerInformation(dpMessage.Message.PlayerID); + Players oPlayer = new Players(dpMessage.Message.PlayerID,dpPeer.Name); + // We lock the data here since it is shared across multiple threads. + lock (PlayerList) { + PlayerList.Add(oPlayer); + } + // Save this player id if it's ourselves + if (dpPeer.Local) + LocalPlayerID = dpMessage.Message.PlayerID; + + } + private void PlayerDestroyed(object sender, PlayerDestroyedEventArgs dpMessage) { + // Remove this player from our list + // We lock the data here since it is shared across multiple threads. + lock (PlayerList) { + foreach (Players player in PlayerList) { + if (dpMessage.Message.PlayerID == player.dpnID) { + PlayerList.Remove(player); + break; + } + } + } + } + private void HostMigrated(object sender, HostMigratedEventArgs dpMessage) { + if (LocalPlayerID == dpMessage.Message.NewHostID) { + // This application instance is the new host, update the UI + parent.Text += " (HOST)"; + } + } + private void DataReceived(object sender, ReceiveEventArgs dpMessage) { + lock(this) { + byte data = (byte)dpMessage.Message.ReceiveData.Read(typeof(byte)); + message(data); + } + } + private void SessionTerminated(object sender, SessionTerminatedEventArgs dpMessage) { + // This session is being terminated, let the user know + if (dpMessage.Message.ResultCode == ResultCode.HostTerminatedSession) + MessageBox.Show("The Host has terminated this session. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + else + MessageBox.Show("The session has been lost. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + + // This will post a message on the main thread to shut down our form + parent.BeginInvoke(new PeerCloseCallback(parent.PeerClose)); + } + #endregion +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step06/main.cs b/Source Code updated 08-12-05/Spacewar3D/Step06/main.cs new file mode 100644 index 0000000..1ed0210 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step06/main.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Container = System.ComponentModel.Container; + + + /// + /// The main windows form for the application. + /// +public class MainClass { + + private GameClass game = null; + private SplashScreen splash = null; + private bool enableNetwork = false; + public bool EnableNetwork { get { return enableNetwork; } set { enableNetwork = value; } } + + private Size gameFormSize; + public Size GameFormSize { get { return gameFormSize; } set { gameFormSize = value; } } + + private bool fullScreen = false; + public bool FullScreen { get { return fullScreen; } set { fullScreen = value; } } + + /// + // Main entry point of the application. + /// + public static void Main() { + MainClass m = new MainClass(); + } + + public MainClass() { + + //display the splash screen and determine network status + splash = new SplashScreen(this); + splash.ShowDialog(); + + try { + game = new GameClass(fullScreen, gameFormSize, enableNetwork); + } + catch(DirectXException) { + return; + } + if( game.CreateGraphicsSample() ) + game.Run(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/App.config b/Source Code updated 08-12-05/Spacewar3D/Step07/App.config new file mode 100644 index 0000000..5bbb96b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/Camera.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/Camera.cs new file mode 100644 index 0000000..c8e3944 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/Camera.cs @@ -0,0 +1,119 @@ +using System; +using Microsoft.DirectX; + + + /// + /// Summary description for Camera. + /// +public class Camera { + + protected float velocity; + + + protected float xPos, yPos, zPos; + protected float xRot, yRot, zRot; + + protected float startXPos, startYPos, startZPos; + protected float startXRot, startYRot, startZRot; + + protected float endXPos, endYPos, endZPos; + protected float endXRot, endYRot, endZRot; + + protected Matrix viewMatrix; + protected Matrix translationMatrix; + protected Matrix rotationMatrix; + + public float XPosition { get { return xPos; } } + public float YPosition { get { return yPos; } } + public float ZPosition { get { return zPos; } } + + public float XRotation { get { return xRot; } } + public float YRotation { get { return yRot; } } + public float ZRotation { get { return zRot; } } + + + public Vector3 Loc { + get { + return new Vector3(xPos,yPos,zPos); + } + set { + Vector3 loc = value; + xPos = loc.X; + yPos = loc.Y; + zPos = loc.Z; + } + + } + + public Matrix ViewMatrix { + get { + Update(); + return viewMatrix; + } + set { + viewMatrix = value; + } + + } + + + public Camera() { + Move(0.0f,0.0f,0.0f); + Rotate(0.0f,0.0f,0.0f); + Update(); + } + + + public void Update() { // Update transformation matrix + viewMatrix = translationMatrix * rotationMatrix; + } + + public void Move(float XPos, float YPos, float ZPos) { + xPos = XPos; + yPos = YPos; + zPos = ZPos; + translationMatrix = Matrix.Translation( -xPos, -yPos, -zPos ); + } + + public void MoveRel(float XAdd, float YAdd, float ZAdd) { + Move (xPos + XAdd, yPos + YAdd, zPos + ZAdd); + + } + + public void Rotate(float XRot, float YRot, float ZRot) { + Matrix xRotation, yRotation, zRotation; + + xRot = XRot; + yRot = YRot; + zRot = ZRot; + + xRotation = Matrix.RotationX( - xRot ); + yRotation = Matrix.RotationY( - yRot ); + zRotation = Matrix.RotationZ( - zRot ); + + rotationMatrix = zRotation; + rotationMatrix *= yRotation; + rotationMatrix *= xRotation; + + } + + public void RotateRel(float XAdd, float YAdd, float ZAdd) { + Rotate (xRot + XAdd, yRot + YAdd, zRot + ZAdd); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/CameraMode.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/CameraMode.cs new file mode 100644 index 0000000..fc8f03a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/CameraMode.cs @@ -0,0 +1,9 @@ +using System; + + +public enum CameraMode { + ChaseMode, + CockpitMode, + Fixed +}; + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/Constants.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/Constants.cs new file mode 100644 index 0000000..22d420a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/Constants.cs @@ -0,0 +1,39 @@ +using System; +using Microsoft.DirectX.Direct3D; +using Microsoft.DirectX; + + + /// + /// GamePlay constants. You can tune the game by adjusting these values. + /// +sealed public class Constants { + static public Random random = new Random((int) DateTime.Now.Ticks); + + public const float EngineThrust = 0.3f; + public const float DyingCycle = 2; + public const float DeadCycleWait = 2; + public const float HyperChargeWait = 3; + public const float HyperCycleWait = 2; + public const float HyperSuccessFactor = 0.8f; // initial success factor + public const float HyperSuccessDegradation = 0.1f; // degradation per use... + public const float ShipCollisionLimit = 15f; + public const float MaxVelocity = 125.0f; + public const float ThrustPower = 1.001f; + + public const int ShotLifetime = 4; + public const int NumShots = 12; + public const float ShotVelocity = 350f; + public const float ShotDeltaTime = 0.10f; + public const int ShotInitialMove = 3; // times to update shot so it shows up outside the ship... + public const int ShotCollisionLimit = 10; + + + public const float StatusMessageDisplayTime = 5.0f; + + + + public const long RemoteTickTimeout = 5; // five seconds... + + private Constants() { + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/D3DSettingsForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/D3DSettingsForm.cs new file mode 100644 index 0000000..889162a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/D3DSettingsForm.cs @@ -0,0 +1,1037 @@ +//----------------------------------------------------------------------------- +// File: D3DSettingsForm.cs +// +// Desc: Application form for setting up user defined display settings +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + + + + + +/// +/// A form to allow the user to change the current D3D settings. +/// +public class D3DSettingsForm : System.Windows.Forms.Form { + private D3DEnumeration enumeration; + public D3DSettings settings; // Potential new D3D settings + + private System.Windows.Forms.GroupBox adapterDeviceGroupBox; + private System.Windows.Forms.Label displayAdapterLabel; + private System.Windows.Forms.ComboBox adapterComboBox; + private System.Windows.Forms.Label deviceLabel; + private System.Windows.Forms.ComboBox deviceComboBox; + private System.Windows.Forms.GroupBox modeSettingsGroupBox; + private System.Windows.Forms.RadioButton windowedRadioButton; + private System.Windows.Forms.RadioButton fullscreenRadioButton; + private System.Windows.Forms.Label adapterFormatLabel; + private System.Windows.Forms.ComboBox adapterFormatComboBox; + private System.Windows.Forms.Label resolutionLabel; + private System.Windows.Forms.ComboBox resolutionComboBox; + private System.Windows.Forms.Label refreshRateLabel; + private System.Windows.Forms.ComboBox refreshRateComboBox; + private System.Windows.Forms.GroupBox otherSettingsGroupBox; + private System.Windows.Forms.Label backBufferFormatLabel; + private System.Windows.Forms.ComboBox backBufferFormatComboBox; + private System.Windows.Forms.Label depthStencilBufferLabel; + private System.Windows.Forms.ComboBox depthStencilBufferComboBox; + private System.Windows.Forms.Label multisampleLabel; + private System.Windows.Forms.ComboBox multisampleComboBox; + private System.Windows.Forms.Label vertexProcLabel; + private System.Windows.Forms.ComboBox vertexProcComboBox; + private System.Windows.Forms.Label presentIntervalLabel; + private System.Windows.Forms.ComboBox presentIntervalComboBox; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.ComboBox multisampleQualityComboBox; + private System.Windows.Forms.Label multisampleQualityLabel; + + + + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + + /// + /// Constructor. Pass in an enumeration and the current D3D settings. + /// + public D3DSettingsForm(D3DEnumeration enumerationParam, D3DSettings settingsParam) { + enumeration = enumerationParam; + settings = settingsParam.Clone(); + + // Required for Windows Form Designer support + InitializeComponent(); + + // Fill adapter combo box. Updating the selected adapter will trigger + // updates of the rest of the dialog. + foreach (GraphicsAdapterInfo adapterInfo in enumeration.AdapterInfoList) { + adapterComboBox.Items.Add(adapterInfo); + if (adapterInfo.AdapterOrdinal == settings.AdapterOrdinal) + adapterComboBox.SelectedItem = adapterInfo; + } + if (adapterComboBox.SelectedItem == null && adapterComboBox.Items.Count > 0) + adapterComboBox.SelectedIndex = 0; + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + if (components != null) + components.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.adapterDeviceGroupBox = new System.Windows.Forms.GroupBox(); + this.deviceComboBox = new System.Windows.Forms.ComboBox(); + this.deviceLabel = new System.Windows.Forms.Label(); + this.adapterComboBox = new System.Windows.Forms.ComboBox(); + this.displayAdapterLabel = new System.Windows.Forms.Label(); + this.fullscreenRadioButton = new System.Windows.Forms.RadioButton(); + this.cancelButton = new System.Windows.Forms.Button(); + this.otherSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.multisampleQualityComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleQualityLabel = new System.Windows.Forms.Label(); + this.multisampleComboBox = new System.Windows.Forms.ComboBox(); + this.backBufferFormatComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferLabel = new System.Windows.Forms.Label(); + this.backBufferFormatLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcLabel = new System.Windows.Forms.Label(); + this.presentIntervalComboBox = new System.Windows.Forms.ComboBox(); + this.presentIntervalLabel = new System.Windows.Forms.Label(); + this.resolutionComboBox = new System.Windows.Forms.ComboBox(); + this.windowedRadioButton = new System.Windows.Forms.RadioButton(); + this.resolutionLabel = new System.Windows.Forms.Label(); + this.refreshRateComboBox = new System.Windows.Forms.ComboBox(); + this.adapterFormatLabel = new System.Windows.Forms.Label(); + this.refreshRateLabel = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.modeSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.adapterFormatComboBox = new System.Windows.Forms.ComboBox(); + this.adapterDeviceGroupBox.SuspendLayout(); + this.otherSettingsGroupBox.SuspendLayout(); + this.modeSettingsGroupBox.SuspendLayout(); + this.SuspendLayout(); + // + // adapterDeviceGroupBox + // + this.adapterDeviceGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.deviceComboBox, + this.deviceLabel, + this.adapterComboBox, + this.displayAdapterLabel}); + this.adapterDeviceGroupBox.Location = new System.Drawing.Point(16, 8); + this.adapterDeviceGroupBox.Name = "adapterDeviceGroupBox"; + this.adapterDeviceGroupBox.Size = new System.Drawing.Size(400, 80); + this.adapterDeviceGroupBox.TabIndex = 0; + this.adapterDeviceGroupBox.TabStop = false; + this.adapterDeviceGroupBox.Text = "Adapter and device"; + // + // deviceComboBox + // + this.deviceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.deviceComboBox.DropDownWidth = 121; + this.deviceComboBox.Location = new System.Drawing.Point(160, 48); + this.deviceComboBox.Name = "deviceComboBox"; + this.deviceComboBox.Size = new System.Drawing.Size(232, 21); + this.deviceComboBox.TabIndex = 3; + this.deviceComboBox.SelectedIndexChanged += new System.EventHandler(this.DeviceChanged); + // + // deviceLabel + // + this.deviceLabel.Location = new System.Drawing.Point(8, 48); + this.deviceLabel.Name = "deviceLabel"; + this.deviceLabel.Size = new System.Drawing.Size(152, 23); + this.deviceLabel.TabIndex = 2; + this.deviceLabel.Text = "Render &Device:"; + // + // adapterComboBox + // + this.adapterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterComboBox.DropDownWidth = 121; + this.adapterComboBox.Location = new System.Drawing.Point(160, 24); + this.adapterComboBox.Name = "adapterComboBox"; + this.adapterComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterComboBox.TabIndex = 1; + this.adapterComboBox.SelectedIndexChanged += new System.EventHandler(this.AdapterChanged); + // + // displayAdapterLabel + // + this.displayAdapterLabel.Location = new System.Drawing.Point(8, 24); + this.displayAdapterLabel.Name = "displayAdapterLabel"; + this.displayAdapterLabel.Size = new System.Drawing.Size(152, 23); + this.displayAdapterLabel.TabIndex = 0; + this.displayAdapterLabel.Text = "Display &Adapter:"; + // + // fullscreenRadioButton + // + this.fullscreenRadioButton.Location = new System.Drawing.Point(9, 38); + this.fullscreenRadioButton.Name = "fullscreenRadioButton"; + this.fullscreenRadioButton.Size = new System.Drawing.Size(152, 24); + this.fullscreenRadioButton.TabIndex = 1; + this.fullscreenRadioButton.Text = "&Fullscreen"; + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(248, 464); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.TabIndex = 4; + this.cancelButton.Text = "Cancel"; + // + // otherSettingsGroupBox + // + this.otherSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.multisampleQualityComboBox, + this.multisampleQualityLabel, + this.multisampleComboBox, + this.backBufferFormatComboBox, + this.multisampleLabel, + this.depthStencilBufferLabel, + this.backBufferFormatLabel, + this.depthStencilBufferComboBox, + this.vertexProcComboBox, + this.vertexProcLabel, + this.presentIntervalComboBox, + this.presentIntervalLabel}); + this.otherSettingsGroupBox.Location = new System.Drawing.Point(16, 264); + this.otherSettingsGroupBox.Name = "otherSettingsGroupBox"; + this.otherSettingsGroupBox.Size = new System.Drawing.Size(400, 176); + this.otherSettingsGroupBox.TabIndex = 2; + this.otherSettingsGroupBox.TabStop = false; + this.otherSettingsGroupBox.Text = "Device settings"; + // + // multisampleQualityComboBox + // + this.multisampleQualityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleQualityComboBox.DropDownWidth = 144; + this.multisampleQualityComboBox.Location = new System.Drawing.Point(160, 96); + this.multisampleQualityComboBox.Name = "multisampleQualityComboBox"; + this.multisampleQualityComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleQualityComboBox.TabIndex = 7; + this.multisampleQualityComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleQualityChanged); + // + // multisampleQualityLabel + // + this.multisampleQualityLabel.Location = new System.Drawing.Point(8, 96); + this.multisampleQualityLabel.Name = "multisampleQualityLabel"; + this.multisampleQualityLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleQualityLabel.TabIndex = 6; + this.multisampleQualityLabel.Text = "Multisample &Quality:"; + // + // multisampleComboBox + // + this.multisampleComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleComboBox.DropDownWidth = 144; + this.multisampleComboBox.Location = new System.Drawing.Point(160, 72); + this.multisampleComboBox.Name = "multisampleComboBox"; + this.multisampleComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleComboBox.TabIndex = 5; + this.multisampleComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleTypeChanged); + // + // backBufferFormatComboBox + // + this.backBufferFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.backBufferFormatComboBox.DropDownWidth = 144; + this.backBufferFormatComboBox.Location = new System.Drawing.Point(160, 24); + this.backBufferFormatComboBox.Name = "backBufferFormatComboBox"; + this.backBufferFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.backBufferFormatComboBox.TabIndex = 1; + this.backBufferFormatComboBox.SelectedIndexChanged += new System.EventHandler(this.BackBufferFormatChanged); + // + // multisampleLabel + // + this.multisampleLabel.Location = new System.Drawing.Point(8, 72); + this.multisampleLabel.Name = "multisampleLabel"; + this.multisampleLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleLabel.TabIndex = 4; + this.multisampleLabel.Text = "&Multisample Type:"; + // + // depthStencilBufferLabel + // + this.depthStencilBufferLabel.Location = new System.Drawing.Point(8, 48); + this.depthStencilBufferLabel.Name = "depthStencilBufferLabel"; + this.depthStencilBufferLabel.Size = new System.Drawing.Size(152, 23); + this.depthStencilBufferLabel.TabIndex = 2; + this.depthStencilBufferLabel.Text = "De&pth/Stencil Buffer Format:"; + // + // backBufferFormatLabel + // + this.backBufferFormatLabel.Location = new System.Drawing.Point(8, 24); + this.backBufferFormatLabel.Name = "backBufferFormatLabel"; + this.backBufferFormatLabel.Size = new System.Drawing.Size(152, 23); + this.backBufferFormatLabel.TabIndex = 0; + this.backBufferFormatLabel.Text = "&Back Buffer Format:"; + // + // depthStencilBufferComboBox + // + this.depthStencilBufferComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.depthStencilBufferComboBox.DropDownWidth = 144; + this.depthStencilBufferComboBox.Location = new System.Drawing.Point(160, 48); + this.depthStencilBufferComboBox.Name = "depthStencilBufferComboBox"; + this.depthStencilBufferComboBox.Size = new System.Drawing.Size(232, 21); + this.depthStencilBufferComboBox.TabIndex = 3; + this.depthStencilBufferComboBox.SelectedIndexChanged += new System.EventHandler(this.DepthStencilBufferFormatChanged); + // + // vertexProcComboBox + // + this.vertexProcComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.vertexProcComboBox.DropDownWidth = 121; + this.vertexProcComboBox.Location = new System.Drawing.Point(160, 120); + this.vertexProcComboBox.Name = "vertexProcComboBox"; + this.vertexProcComboBox.Size = new System.Drawing.Size(232, 21); + this.vertexProcComboBox.TabIndex = 9; + this.vertexProcComboBox.SelectedIndexChanged += new System.EventHandler(this.VertexProcessingChanged); + // + // vertexProcLabel + // + this.vertexProcLabel.Location = new System.Drawing.Point(8, 120); + this.vertexProcLabel.Name = "vertexProcLabel"; + this.vertexProcLabel.Size = new System.Drawing.Size(152, 23); + this.vertexProcLabel.TabIndex = 8; + this.vertexProcLabel.Text = "&Vertex Processing:"; + // + // presentIntervalComboBox + // + this.presentIntervalComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.presentIntervalComboBox.DropDownWidth = 121; + this.presentIntervalComboBox.Location = new System.Drawing.Point(160, 144); + this.presentIntervalComboBox.Name = "presentIntervalComboBox"; + this.presentIntervalComboBox.Size = new System.Drawing.Size(232, 21); + this.presentIntervalComboBox.TabIndex = 11; + this.presentIntervalComboBox.SelectedValueChanged += new System.EventHandler(this.PresentIntervalChanged); + // + // presentIntervalLabel + // + this.presentIntervalLabel.Location = new System.Drawing.Point(8, 144); + this.presentIntervalLabel.Name = "presentIntervalLabel"; + this.presentIntervalLabel.Size = new System.Drawing.Size(152, 23); + this.presentIntervalLabel.TabIndex = 10; + this.presentIntervalLabel.Text = "Present &Interval:"; + // + // resolutionComboBox + // + this.resolutionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.resolutionComboBox.DropDownWidth = 144; + this.resolutionComboBox.Location = new System.Drawing.Point(161, 94); + this.resolutionComboBox.MaxDropDownItems = 14; + this.resolutionComboBox.Name = "resolutionComboBox"; + this.resolutionComboBox.Size = new System.Drawing.Size(232, 21); + this.resolutionComboBox.TabIndex = 5; + this.resolutionComboBox.SelectedIndexChanged += new System.EventHandler(this.ResolutionChanged); + // + // windowedRadioButton + // + this.windowedRadioButton.Location = new System.Drawing.Point(9, 14); + this.windowedRadioButton.Name = "windowedRadioButton"; + this.windowedRadioButton.Size = new System.Drawing.Size(152, 24); + this.windowedRadioButton.TabIndex = 0; + this.windowedRadioButton.Text = "&Windowed"; + this.windowedRadioButton.CheckedChanged += new System.EventHandler(this.WindowedFullscreenChanged); + // + // resolutionLabel + // + this.resolutionLabel.Location = new System.Drawing.Point(8, 94); + this.resolutionLabel.Name = "resolutionLabel"; + this.resolutionLabel.Size = new System.Drawing.Size(152, 23); + this.resolutionLabel.TabIndex = 4; + this.resolutionLabel.Text = "&Resolution:"; + // + // refreshRateComboBox + // + this.refreshRateComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.refreshRateComboBox.DropDownWidth = 144; + this.refreshRateComboBox.Location = new System.Drawing.Point(161, 118); + this.refreshRateComboBox.MaxDropDownItems = 14; + this.refreshRateComboBox.Name = "refreshRateComboBox"; + this.refreshRateComboBox.Size = new System.Drawing.Size(232, 21); + this.refreshRateComboBox.TabIndex = 7; + this.refreshRateComboBox.SelectedIndexChanged += new System.EventHandler(this.RefreshRateChanged); + // + // adapterFormatLabel + // + this.adapterFormatLabel.Location = new System.Drawing.Point(8, 72); + this.adapterFormatLabel.Name = "adapterFormatLabel"; + this.adapterFormatLabel.Size = new System.Drawing.Size(152, 23); + this.adapterFormatLabel.TabIndex = 2; + this.adapterFormatLabel.Text = "Adapter F&ormat:"; + // + // refreshRateLabel + // + this.refreshRateLabel.Location = new System.Drawing.Point(8, 118); + this.refreshRateLabel.Name = "refreshRateLabel"; + this.refreshRateLabel.Size = new System.Drawing.Size(152, 23); + this.refreshRateLabel.TabIndex = 6; + this.refreshRateLabel.Text = "R&efresh Rate:"; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(112, 464); + this.okButton.Name = "okButton"; + this.okButton.TabIndex = 3; + this.okButton.Text = "OK"; + // + // modeSettingsGroupBox + // + this.modeSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.adapterFormatLabel, + this.refreshRateLabel, + this.resolutionComboBox, + this.adapterFormatComboBox, + this.resolutionLabel, + this.refreshRateComboBox, + this.windowedRadioButton, + this.fullscreenRadioButton}); + this.modeSettingsGroupBox.Location = new System.Drawing.Point(16, 96); + this.modeSettingsGroupBox.Name = "modeSettingsGroupBox"; + this.modeSettingsGroupBox.Size = new System.Drawing.Size(400, 160); + this.modeSettingsGroupBox.TabIndex = 1; + this.modeSettingsGroupBox.TabStop = false; + this.modeSettingsGroupBox.Text = "Display mode settings"; + // + // adapterFormatComboBox + // + this.adapterFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterFormatComboBox.DropDownWidth = 121; + this.adapterFormatComboBox.Location = new System.Drawing.Point(161, 70); + this.adapterFormatComboBox.MaxDropDownItems = 14; + this.adapterFormatComboBox.Name = "adapterFormatComboBox"; + this.adapterFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterFormatComboBox.TabIndex = 3; + this.adapterFormatComboBox.SelectedValueChanged += new System.EventHandler(this.AdapterFormatChanged); + // + // D3DSettingsForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(438, 512); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.cancelButton, + this.okButton, + this.adapterDeviceGroupBox, + this.modeSettingsGroupBox, + this.otherSettingsGroupBox}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.Name = "D3DSettingsForm"; + this.Text = "Direct3D Settings"; + this.adapterDeviceGroupBox.ResumeLayout(false); + this.otherSettingsGroupBox.ResumeLayout(false); + this.modeSettingsGroupBox.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// Respond to a change of selected adapter by rebuilding the device + /// list. Updating the selected device will trigger updates of the + /// rest of the dialog. + /// + private void AdapterChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + settings.AdapterInfo = adapterInfo; + + // Update device combo box + deviceComboBox.Items.Clear(); + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + deviceComboBox.Items.Add(deviceInfo); + if (deviceInfo.DevType == settings.DevType) + deviceComboBox.SelectedItem = deviceInfo; + } + if (deviceComboBox.SelectedItem == null && deviceComboBox.Items.Count > 0) + deviceComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected device by resetting the + /// fullscreen/windowed radio buttons. Updating these buttons + /// will trigger updates of the rest of the dialog. + /// + private void DeviceChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + settings.DeviceInfo = deviceInfo; + + // Update fullscreen/windowed radio buttons + bool HasWindowedDeviceCombo = false; + bool HasFullscreenDeviceCombo = false; + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + HasWindowedDeviceCombo = true; + else + HasFullscreenDeviceCombo = true; + } + windowedRadioButton.Enabled = HasWindowedDeviceCombo; + fullscreenRadioButton.Enabled = HasFullscreenDeviceCombo; + if (settings.IsWindowed && HasWindowedDeviceCombo) { + windowedRadioButton.Checked = true; + } + else { + fullscreenRadioButton.Checked = true; + } + WindowedFullscreenChanged(null, null); + } + + + + + /// + /// Respond to a change of windowed/fullscreen state by rebuilding the + /// adapter format list, resolution list, and refresh rate list. + /// Updating the selected adapter format will trigger updates of the + /// rest of the dialog. + /// + private void WindowedFullscreenChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + if (windowedRadioButton.Checked) { + settings.IsWindowed = true; + settings.WindowedAdapterInfo = adapterInfo; + settings.WindowedDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + adapterFormatComboBox.Items.Add(settings.WindowedDisplayMode.Format); + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = false; + + // Update resolution combo box + resolutionComboBox.Items.Clear(); + resolutionComboBox.Items.Add(FormatResolution(settings.WindowedDisplayMode.Width, + settings.WindowedDisplayMode.Height)); + resolutionComboBox.SelectedIndex = 0; + resolutionComboBox.Enabled = false; + + // Update refresh rate combo box + refreshRateComboBox.Items.Clear(); + refreshRateComboBox.Items.Add(FormatRefreshRate(settings.WindowedDisplayMode.RefreshRate)); + refreshRateComboBox.SelectedIndex = 0; + refreshRateComboBox.Enabled = false; + } + else { + settings.IsWindowed = false; + settings.FullscreenAdapterInfo = adapterInfo; + settings.FullscreenDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + continue; + if (!adapterFormatComboBox.Items.Contains(deviceCombo.AdapterFormat)) { + adapterFormatComboBox.Items.Add(deviceCombo.AdapterFormat); + if (deviceCombo.AdapterFormat == (settings.IsWindowed ? + settings.WindowedDisplayMode.Format : settings.FullscreenDisplayMode.Format)) { + adapterFormatComboBox.SelectedItem = deviceCombo.AdapterFormat; + } + } + } + if (adapterFormatComboBox.SelectedItem == null && adapterFormatComboBox.Items.Count > 0) + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = true; + + // Update resolution combo box + resolutionComboBox.Enabled = true; + + // Update refresh rate combo box + refreshRateComboBox.Enabled = true; + } + } + + + + + /// + /// Converts the given width and height into a formatted string + /// + private string FormatResolution(int width, int height) { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} by {1}", width, height); + return sb.ToString(); + } + + + + + /// + /// Converts the given refresh rate into a formatted string + /// + private string FormatRefreshRate(int refreshRate) { + if (refreshRate == 0) { + return "Default Rate"; + } + else { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} Hz", refreshRate); + return sb.ToString(); + } + } + + + + + /// + /// Respond to a change of selected adapter format by rebuilding the + /// resolution list and back buffer format list. Updating the selected + /// resolution and back buffer format will trigger updates of the rest + /// of the dialog. + /// + private void AdapterFormatChanged(object sender, System.EventArgs e) { + if (!windowedRadioButton.Checked) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + settings.FullscreenDisplayMode.Format = adapterFormat; + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + + resolutionComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat) { + string resolutionString = FormatResolution(displayMode.Width, displayMode.Height); + if (!resolutionComboBox.Items.Contains(resolutionString)) { + resolutionComboBox.Items.Add(resolutionString); + if (settings.FullscreenDisplayMode.Width == displayMode.Width && + settings.FullscreenDisplayMode.Height == displayMode.Height) { + resolutionComboBox.SelectedItem = resolutionString; + } + } + } + } + if (resolutionComboBox.SelectedItem == null && resolutionComboBox.Items.Count > 0) + resolutionComboBox.SelectedIndex = 0; + } + + // Update backbuffer format combo box + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + backBufferFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == settings.DisplayMode.Format) { + if (!backBufferFormatComboBox.Items.Contains(deviceCombo.BackBufferFormat)) { + backBufferFormatComboBox.Items.Add(deviceCombo.BackBufferFormat); + if (deviceCombo.BackBufferFormat == settings.BackBufferFormat) + backBufferFormatComboBox.SelectedItem = deviceCombo.BackBufferFormat; + } + } + } + if (backBufferFormatComboBox.SelectedItem == null && backBufferFormatComboBox.Items.Count > 0) + backBufferFormatComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected resolution by rebuilding the + /// refresh rate list. + /// + private void ResolutionChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + + // Update settings with new resolution + string resolution = (string)resolutionComboBox.SelectedItem; + string[] resolutionSplitStringArray = resolution.Split(); + int width = int.Parse(resolutionSplitStringArray[0]); + int height = int.Parse(resolutionSplitStringArray[2]); + settings.FullscreenDisplayMode.Width = width; + settings.FullscreenDisplayMode.Height = height; + + // Update refresh rate list based on new resolution + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + refreshRateComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat && + displayMode.Width == width && + displayMode.Height == height) { + string refreshRateString = FormatRefreshRate(displayMode.RefreshRate); + if (!refreshRateComboBox.Items.Contains(refreshRateString)) { + refreshRateComboBox.Items.Add(refreshRateString); + if (settings.FullscreenDisplayMode.RefreshRate == displayMode.RefreshRate) + refreshRateComboBox.SelectedItem = refreshRateString; + } + } + } + if (refreshRateComboBox.SelectedItem == null && refreshRateComboBox.Items.Count > 0) + refreshRateComboBox.SelectedIndex = refreshRateComboBox.Items.Count - 1; + } + + + + + /// + /// Respond to a change of selected refresh rate. + /// + private void RefreshRateChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + // Update settings with new refresh rate + string refreshRateString = (string)refreshRateComboBox.SelectedItem; + int refreshRate = 0; + if (refreshRateString != "Default Rate") { + string[] refreshRateSplitStringArray = refreshRateString.Split(); + refreshRate = int.Parse(refreshRateSplitStringArray[0]); + } + settings.FullscreenDisplayMode.RefreshRate = refreshRate; + } + + + + + /// + /// Respond to a change of selected back buffer format by rebuilding + /// the depth/stencil format list, multisample type list, and vertex + /// processing type list. + /// + private void BackBufferFormatChanged(object sender, System.EventArgs e) { + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + Format backBufferFormat = (Format)backBufferFormatComboBox.SelectedItem; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == adapterFormat && + deviceCombo.BackBufferFormat == backBufferFormat) { + deviceCombo.BackBufferFormat = backBufferFormat; + settings.DeviceCombo = deviceCombo; + + depthStencilBufferComboBox.Items.Clear(); + if (enumeration.AppUsesDepthBuffer) { + foreach (DepthFormat format in deviceCombo.DepthStencilFormatList) { + depthStencilBufferComboBox.Items.Add(format); + if (format == settings.DepthStencilBufferFormat) + depthStencilBufferComboBox.SelectedItem = format; + } + if (depthStencilBufferComboBox.SelectedItem == null && depthStencilBufferComboBox.Items.Count > 0) + depthStencilBufferComboBox.SelectedIndex = 0; + } + else { + depthStencilBufferComboBox.Enabled = false; + depthStencilBufferComboBox.Items.Add("(not used)"); + depthStencilBufferComboBox.SelectedIndex = 0; + } + + vertexProcComboBox.Items.Clear(); + foreach (VertexProcessingType vpt in deviceCombo.VertexProcessingTypeList) { + vertexProcComboBox.Items.Add(vpt); + if (vpt == settings.VertexProcessingType) + vertexProcComboBox.SelectedItem = vpt; + } + if (vertexProcComboBox.SelectedItem == null && vertexProcComboBox.Items.Count > 0) + vertexProcComboBox.SelectedIndex = 0; + + presentIntervalComboBox.Items.Clear(); + foreach (PresentInterval pi in deviceCombo.PresentIntervalList) { + presentIntervalComboBox.Items.Add(pi); + if (pi == settings.PresentInterval) + presentIntervalComboBox.SelectedItem = pi; + } + if (presentIntervalComboBox.SelectedItem == null && presentIntervalComboBox.Items.Count > 0) + presentIntervalComboBox.SelectedIndex = 0; + + break; + } + } + } + + + + + /// + /// Respond to a change of selected depth/stencil buffer format. + /// + private void DepthStencilBufferFormatChanged(object sender, System.EventArgs e) { + if (enumeration.AppUsesDepthBuffer) + settings.DepthStencilBufferFormat = (DepthFormat)depthStencilBufferComboBox.SelectedItem; + + multisampleComboBox.Items.Clear(); + foreach (MultiSampleType msType in settings.DeviceCombo.MultiSampleTypeList) { + // Check for DS/MS conflict + bool conflictFound = false; + foreach (DepthStencilMultiSampleConflict DSMSConflict in settings.DeviceCombo.DepthStencilMultiSampleConflictList) { + if (DSMSConflict.DepthStencilFormat == settings.DepthStencilBufferFormat && + DSMSConflict.MultiSampleType == msType) { + conflictFound = true; + break; + } + } + if (!conflictFound) { + multisampleComboBox.Items.Add(msType); + if (msType == settings.MultisampleType) + multisampleComboBox.SelectedItem = msType; + } + } + if (multisampleComboBox.SelectedItem == null && multisampleComboBox.Items.Count > 0) + multisampleComboBox.SelectedIndex = 0; + + } + + + + + /// + /// Respond to a change of selected multisample type. + /// + private void MultisampleTypeChanged(object sender, System.EventArgs e) { + settings.MultisampleType = (MultiSampleType)multisampleComboBox.SelectedItem; + + // Find current max multisample quality + int maxQuality = 0; + DeviceCombo deviceCombo = settings.DeviceCombo; + for (int i = 0; i < deviceCombo.MultiSampleQualityList.Count; i++) { + if ((MultiSampleType)deviceCombo.MultiSampleTypeList[i] == settings.MultisampleType) { + maxQuality = (int)deviceCombo.MultiSampleQualityList[i]; + break; + } + } + + // Update multisample quality list based on new type + multisampleQualityComboBox.Items.Clear(); + for (int iLevel = 0; iLevel < maxQuality; iLevel++) { + multisampleQualityComboBox.Items.Add(iLevel); + if (settings.MultisampleQuality == iLevel) + multisampleQualityComboBox.SelectedItem = iLevel; + } + if (multisampleQualityComboBox.SelectedItem == null && multisampleQualityComboBox.Items.Count > 0) + multisampleQualityComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected multisample quality. + /// + private void MultisampleQualityChanged(object sender, System.EventArgs e) { + settings.MultisampleQuality = (int)multisampleQualityComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void VertexProcessingChanged(object sender, System.EventArgs e) { + settings.VertexProcessingType = (VertexProcessingType)vertexProcComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void PresentIntervalChanged(object sender, System.EventArgs e) { + settings.PresentInterval = (PresentInterval)presentIntervalComboBox.SelectedItem; + } +} + + +/// +/// Current D3D settings: adapter, device, mode, formats, etc. +/// +public class D3DSettings { + public bool IsWindowed; + + public GraphicsAdapterInfo WindowedAdapterInfo; + public GraphicsDeviceInfo WindowedDeviceInfo; + public DeviceCombo WindowedDeviceCombo; + public DisplayMode WindowedDisplayMode; // not changable by the user + public DepthFormat WindowedDepthStencilBufferFormat; + public MultiSampleType WindowedMultisampleType; + public int WindowedMultisampleQuality; + public VertexProcessingType WindowedVertexProcessingType; + public PresentInterval WindowedPresentInterval; + public int WindowedWidth; + public int WindowedHeight; + + public GraphicsAdapterInfo FullscreenAdapterInfo; + public GraphicsDeviceInfo FullscreenDeviceInfo; + public DeviceCombo FullscreenDeviceCombo; + public DisplayMode FullscreenDisplayMode; // changable by the user + public DepthFormat FullscreenDepthStencilBufferFormat; + public MultiSampleType FullscreenMultisampleType; + public int FullscreenMultisampleQuality; + public VertexProcessingType FullscreenVertexProcessingType; + public PresentInterval FullscreenPresentInterval; + + + + + /// + /// The adapter information + /// + public GraphicsAdapterInfo AdapterInfo { + get { return IsWindowed ? WindowedAdapterInfo : FullscreenAdapterInfo; } + set { if (IsWindowed) WindowedAdapterInfo = value; else FullscreenAdapterInfo = value; } + } + + + + + /// + /// The device information + /// + public GraphicsDeviceInfo DeviceInfo { + get { return IsWindowed ? WindowedDeviceInfo : FullscreenDeviceInfo; } + set { if (IsWindowed) WindowedDeviceInfo = value; else FullscreenDeviceInfo = value; } + } + + + + + /// + /// The device combo + /// + public DeviceCombo DeviceCombo { + get { return IsWindowed ? WindowedDeviceCombo : FullscreenDeviceCombo; } + set { if (IsWindowed) WindowedDeviceCombo = value; else FullscreenDeviceCombo = value; } + } + + + + + /// + /// The adapters ordinal + /// + public int AdapterOrdinal { + get { return DeviceCombo.AdapterOrdinal; } + } + + + + + /// + /// The type of device this is + /// + public DeviceType DevType { + get { return DeviceCombo.DevType; } + } + + + + + /// + /// The back buffers format + /// + public Format BackBufferFormat { + get { return DeviceCombo.BackBufferFormat; } + } + + + + + /// + /// The display mode + /// + public DisplayMode DisplayMode { + get { return IsWindowed ? WindowedDisplayMode : FullscreenDisplayMode; } + set { if (IsWindowed) WindowedDisplayMode = value; else FullscreenDisplayMode = value; } + } + + + + + /// + /// The Depth stencils format + /// + public DepthFormat DepthStencilBufferFormat { + get { return IsWindowed ? WindowedDepthStencilBufferFormat : FullscreenDepthStencilBufferFormat; } + set { if (IsWindowed) WindowedDepthStencilBufferFormat = value; else FullscreenDepthStencilBufferFormat = value; } + } + + + + + /// + /// The multisample type + /// + public MultiSampleType MultisampleType { + get { return IsWindowed ? WindowedMultisampleType : FullscreenMultisampleType; } + set { if (IsWindowed) WindowedMultisampleType = value; else FullscreenMultisampleType = value; } + } + + + + + /// + /// The multisample quality + /// + public int MultisampleQuality { + get { return IsWindowed ? WindowedMultisampleQuality : FullscreenMultisampleQuality; } + set { if (IsWindowed) WindowedMultisampleQuality = value; else FullscreenMultisampleQuality = value; } + } + + + + + /// + /// The vertex processing type + /// + public VertexProcessingType VertexProcessingType { + get { return IsWindowed ? WindowedVertexProcessingType : FullscreenVertexProcessingType; } + set { if (IsWindowed) WindowedVertexProcessingType = value; else FullscreenVertexProcessingType = value; } + } + + + + + /// + /// The presentation interval + /// + public PresentInterval PresentInterval { + get { return IsWindowed ? WindowedPresentInterval : FullscreenPresentInterval; } + set { if (IsWindowed) WindowedPresentInterval = value; else FullscreenPresentInterval = value; } + } + + + + + /// + /// Clone the d3d settings class + /// + public D3DSettings Clone() { + return (D3DSettings)MemberwiseClone(); + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/D3DSettingsForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step07/D3DSettingsForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/D3DSettingsForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect.cs new file mode 100644 index 0000000..e0e11ae --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect.cs @@ -0,0 +1,254 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; +using System.Runtime.InteropServices; + + + + +/// +/// The connection wizard will allow our users to pick a service provider, +/// and then connect to an existing application, or create a new one as the host. +/// +public class ConnectWizard { + private Peer peerObject; + private Address deviceAddress; + + private ChooseServiceProviderForm serviceProviderForm; + private CreateJoinForm createJoinForm; + + private Guid serviceProviderGuid; + private string username; + private string samplename; + private bool isInSession = false; + private bool isHost = false; + private int port = 0; + + private Guid applicationGuid; + + + + + /// + /// Constructor + /// + /// + /// + /// + public ConnectWizard(Peer peer, Guid application, string sampleName) { + peerObject = peer; + applicationGuid = application; + samplename = sampleName; + } + + + + + /// + /// The guid for the current service provider + /// + public Guid ServiceProvider { + get { + return serviceProviderGuid; } + set { + serviceProviderGuid = value; } + } + + + + + /// + /// The game's default port number + /// + public int DefaultPort { + get { + return port; } + set { + port = value; } + } + + + + + /// + /// Am I the host + /// + public bool IsHost { + get { + return isHost; } + set { + isHost = value; } + } + + + + + /// + /// The username + /// + public string Username { + get { + return username; } + set { + username = value; } + } + + + + + /// + /// The sample name + /// + public string SampleName { + get { + return samplename; } + } + + + + + /// + /// The applications guid + /// + public Guid ApplicationGuid { + get { + return applicationGuid; } + } + + + + + /// + /// Are we in a session + /// + public bool InSession { + get { return isInSession; } + set { isInSession = value; } + } + + + + + /// + /// Returns true if the given provider requires a port component + /// + /// ServiceProvider Guid + /// + static public bool ProviderRequiresPort(Guid provider) { + return (provider != Address.ServiceProviderSerial && + provider != Address.ServiceProviderModem && + provider != Address.ServiceProviderBlueTooth); + } + + + + + /// + /// Handler for when our form is disposed + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createJoinForm) + createJoinForm = null; + + if (sender == serviceProviderForm) + serviceProviderForm = null; + } + + + + + /// + /// Set the user information + /// + public void SetUserInfo() { + //Before we call host, let's actually call SetPeerInformation + PlayerInformation myinformation = new PlayerInformation(); + myinformation.Name = username; + + peerObject.SetPeerInformation(myinformation, SyncFlags.PeerInformation); + } + + + + + /// + /// Show the service providers form + /// + /// True if a service provider was picked, false otherwise + public bool DoShowServiceProviders() { + if (serviceProviderForm == null) { + username = null; + serviceProviderForm = new ChooseServiceProviderForm(peerObject,this); + serviceProviderForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (serviceProviderForm.ShowDialog() == DialogResult.OK) + return true; + + // The didn't hit ok + return false; + } + + + + + /// + /// Show the create or join screen + /// + /// True if we will be in a session, false otherwise + public bool DoCreateJoinGame() { + if (deviceAddress != null) + deviceAddress.Dispose(); + + deviceAddress = new Address(); + + if (createJoinForm != null) + createJoinForm.Dispose(); + + createJoinForm = new CreateJoinForm(peerObject, deviceAddress, this); + createJoinForm.Disposed += new System.EventHandler(this.FormDisposed); + + //Set the address's service provider (this will be the device address) + deviceAddress.ServiceProvider = serviceProviderGuid; + DialogResult drCreateJoin = createJoinForm.ShowDialog(); + if (drCreateJoin == DialogResult.Cancel) + return false; + + this.isHost = (drCreateJoin == DialogResult.Yes); + return true; + + } + + + + + /// + /// Start the wizard + /// + /// True if we are in a session, false otherwise + public bool StartWizard() { + isInSession = false; + + while (this.DoShowServiceProviders()) { + //Now let's create a game or join a session + if (this.DoCreateJoinGame()) { + // A game has been created or joined now, set our flag + isInSession = true; + break; + } + } + return isInSession; + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_AddressForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_AddressForm.cs new file mode 100644 index 0000000..181fc48 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_AddressForm.cs @@ -0,0 +1,207 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_AddressForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// Summary description for AddressForm. +/// +public class AddressForm : System.Windows.Forms.Form { + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox hostnameTextBox; + private System.Windows.Forms.TextBox portTextBox; + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + /// + /// Constructor + /// + public AddressForm( int defaultPort ) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // Set default port value + Port = defaultPort; + } + + + + + /// + /// The remote port on which to connect + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(portTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + portTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Remote hostname + /// + public string Hostname { + get { + return hostnameTextBox.Text; } + set { + hostnameTextBox.Text = value; } + } + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.label1 = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.hostnameTextBox = new System.Windows.Forms.TextBox(); + this.portTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(248, 48); + this.label1.TabIndex = 0; + this.label1.Text = "Please enter the optional components of the remote session address. If set blank," + + " DirectPlay will attempt to search the local network."; + // + // okButton + // + this.okButton.Location = new System.Drawing.Point(104, 144); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(72, 24); + this.okButton.TabIndex = 1; + this.okButton.Text = "&OK"; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(184, 144); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(72, 24); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "&Cancel"; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(32, 80); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(100, 16); + this.label2.TabIndex = 3; + this.label2.Text = "Hostname"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(160, 80); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 16); + this.label3.TabIndex = 4; + this.label3.Text = "Port"; + // + // hostnameTextBox + // + this.hostnameTextBox.Location = new System.Drawing.Point(32, 96); + this.hostnameTextBox.Name = "hostnameTextBox"; + this.hostnameTextBox.Size = new System.Drawing.Size(120, 20); + this.hostnameTextBox.TabIndex = 5; + this.hostnameTextBox.Text = ""; + // + // portTextBox + // + this.portTextBox.Location = new System.Drawing.Point(160, 96); + this.portTextBox.Name = "portTextBox"; + this.portTextBox.Size = new System.Drawing.Size(56, 20); + this.portTextBox.TabIndex = 6; + this.portTextBox.Text = ""; + // + // AddressForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(264, 176); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.portTextBox, + this.hostnameTextBox, + this.label3, + this.label2, + this.cancelButton, + this.okButton, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AddressForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Remote Address"; + this.ResumeLayout(false); + + } + #endregion + + private void okButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.OK; + } + + private void cancelButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.Cancel; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_AddressForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_AddressForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_AddressForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_CreateForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_CreateForm.cs new file mode 100644 index 0000000..c321e80 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_CreateForm.cs @@ -0,0 +1,346 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_CreateForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will allow you to create a new session, and set certain properties +/// of the session. +/// +public class CreateSessionForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.TextBox txtSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton notSignedRadio; + private System.Windows.Forms.RadioButton fullSignedRadio; + private System.Windows.Forms.RadioButton fastSignedRadio; + private System.Windows.Forms.CheckBox migrateHostCheckBox; + private System.Windows.Forms.CheckBox useDPNSVRCheckBox; + private System.Windows.Forms.TextBox localPortTextBox; + private System.Windows.Forms.Label localPortLabel; + private System.Windows.Forms.Button btnCancel; + + + + /// + /// Constructor + /// + public CreateSessionForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + peer = peerObject; + this.connectionWizard = connectionWizard; + deviceAddress = addressObject; + txtSession.Text = null; + this.Text = connectionWizard.SampleName + " - " + this.Text; + //Get the default session from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + // Get session name + txtSession.Text = (string)regKey.GetValue("DirectPlaySessionName", null); + + // Get host migration option + if (regKey.GetValue("DirectPlayMigrateHost",null) != null) { + migrateHostCheckBox.Checked = ((int)regKey.GetValue("DirectPlayMigrateHost",1)==1); + } + + + // Get session signing option + if (regKey.GetValue("DirectPlaySessionSigning",null) != null) { + if ("Full" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fullSignedRadio.Checked = true; + else if ("Fast" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fastSignedRadio.Checked = true; + else + notSignedRadio.Checked = true; + } + + regKey.Close(); + } + + // Set default port value and hide port UI if provider doesn't use them + Port = connectionWizard.DefaultPort; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + localPortTextBox.Hide(); + localPortLabel.Hide(); + } + } + + + + /// + /// The port on which to host + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(localPortTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + localPortTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.txtSession = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.fullSignedRadio = new System.Windows.Forms.RadioButton(); + this.fastSignedRadio = new System.Windows.Forms.RadioButton(); + this.notSignedRadio = new System.Windows.Forms.RadioButton(); + this.migrateHostCheckBox = new System.Windows.Forms.CheckBox(); + this.useDPNSVRCheckBox = new System.Windows.Forms.CheckBox(); + this.localPortLabel = new System.Windows.Forms.Label(); + this.localPortTextBox = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // txtSession + // + this.txtSession.Location = new System.Drawing.Point(96, 24); + this.txtSession.Name = "txtSession"; + this.txtSession.Size = new System.Drawing.Size(176, 20); + this.txtSession.TabIndex = 3; + this.txtSession.Text = ""; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(288, 12); + this.label1.TabIndex = 2; + this.label1.Text = "Session Name:"; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(128, 168); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(208, 168); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + // + // groupBox1 + // + this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] { + this.fullSignedRadio, + this.fastSignedRadio, + this.notSignedRadio}); + this.groupBox1.Location = new System.Drawing.Point(16, 64); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(112, 88); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Session Signing"; + // + // fullSignedRadio + // + this.fullSignedRadio.Location = new System.Drawing.Point(18, 22); + this.fullSignedRadio.Name = "fullSignedRadio"; + this.fullSignedRadio.Size = new System.Drawing.Size(80, 16); + this.fullSignedRadio.TabIndex = 9; + this.fullSignedRadio.Text = "Full signed"; + // + // fastSignedRadio + // + this.fastSignedRadio.Checked = true; + this.fastSignedRadio.Location = new System.Drawing.Point(18, 41); + this.fastSignedRadio.Name = "fastSignedRadio"; + this.fastSignedRadio.Size = new System.Drawing.Size(88, 16); + this.fastSignedRadio.TabIndex = 8; + this.fastSignedRadio.TabStop = true; + this.fastSignedRadio.Text = "Fast signed"; + // + // notSignedRadio + // + this.notSignedRadio.Location = new System.Drawing.Point(18, 55); + this.notSignedRadio.Name = "notSignedRadio"; + this.notSignedRadio.Size = new System.Drawing.Size(72, 24); + this.notSignedRadio.TabIndex = 10; + this.notSignedRadio.Text = "Disabled"; + // + // migrateHostCheckBox + // + this.migrateHostCheckBox.Checked = true; + this.migrateHostCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.migrateHostCheckBox.Location = new System.Drawing.Point(144, 64); + this.migrateHostCheckBox.Name = "migrateHostCheckBox"; + this.migrateHostCheckBox.Size = new System.Drawing.Size(136, 24); + this.migrateHostCheckBox.TabIndex = 11; + this.migrateHostCheckBox.Text = "Enable Host Migration"; + // + // useDPNSVRCheckBox + // + this.useDPNSVRCheckBox.Location = new System.Drawing.Point(144, 84); + this.useDPNSVRCheckBox.Name = "useDPNSVRCheckBox"; + this.useDPNSVRCheckBox.Size = new System.Drawing.Size(136, 24); + this.useDPNSVRCheckBox.TabIndex = 12; + this.useDPNSVRCheckBox.Text = "Use DPNSVR"; + // + // localPortLabel + // + this.localPortLabel.Location = new System.Drawing.Point(152, 122); + this.localPortLabel.Name = "localPortLabel"; + this.localPortLabel.Size = new System.Drawing.Size(64, 17); + this.localPortLabel.TabIndex = 13; + this.localPortLabel.Text = "Local Port:"; + // + // localPortTextBox + // + this.localPortTextBox.Location = new System.Drawing.Point(216, 120); + this.localPortTextBox.Name = "localPortTextBox"; + this.localPortTextBox.Size = new System.Drawing.Size(56, 20); + this.localPortTextBox.TabIndex = 14; + this.localPortTextBox.Text = ""; + // + // CreateSessionForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(290, 200); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.localPortTextBox, + this.localPortLabel, + this.useDPNSVRCheckBox, + this.migrateHostCheckBox, + this.txtSession, + this.label1, + this.groupBox1, + this.btnOK, + this.btnCancel}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.HelpButton = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateSessionForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Create a Session"; + this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.CreateSessionForm_HelpRequested); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// We are ready to create a session. Ensure the data is valid + /// then create the session + /// + private void btnOK_Click(object sender, System.EventArgs e) { + ApplicationDescription dpApp; + if ((txtSession.Text == null) || (txtSession.Text == "")) { + MessageBox.Show(this,"Please enter a session name before clicking OK.","No sessionname",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlaySessionName", txtSession.Text); + if (migrateHostCheckBox.Checked) + regKey.SetValue("DirectPlayMigrateHost",1); + else + regKey.SetValue("DirectPlayMigrateHost",0); + + if (fastSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Fast"); + else if (fullSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Full"); + else + regKey.SetValue("DirectPlaySessionSigning","Disabled"); + regKey.Close(); + } + + dpApp = new ApplicationDescription(); + dpApp.GuidApplication = connectionWizard.ApplicationGuid; + dpApp.SessionName = txtSession.Text; + dpApp.Flags = 0; + + if (migrateHostCheckBox.Checked) + dpApp.Flags |= SessionFlags.MigrateHost; + + if (!useDPNSVRCheckBox.Checked) + dpApp.Flags |= SessionFlags.NoDpnServer; + + if (fastSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FastSigned; + else if (fullSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FullSigned; + + // Specify the port number if available + if (ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + if (Port > 0) + deviceAddress.AddComponent(Address.KeyPort, Port); + } + + connectionWizard.SetUserInfo(); + // Host a game on deviceAddress as described by dpApp + // HostFlags.OkToQueryForAddressing allows DirectPlay to prompt the user + // using a dialog box for any device address information that is missing + peer.Host(dpApp,deviceAddress,HostFlags.OkToQueryForAddressing); + this.DialogResult = DialogResult.OK; + } + + private void CreateSessionForm_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent) { + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_CreateForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_CreateForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_CreateForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_JoinForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_JoinForm.cs new file mode 100644 index 0000000..a86efa7 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_JoinForm.cs @@ -0,0 +1,481 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_JoinForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will search for existing running samples and allow you to join them or will +/// allow you to create your own session as a host +/// +public class CreateJoinForm : System.Windows.Forms.Form { + private const int EnumExpireThreshold = 2000; + private bool amJoining = false; + + + + + /// + /// Hold our information of hosts we found + /// + private struct FindHostsResponseInformation { + public int LastFoundTime; + public ApplicationDescription ApplicationDesc; + public int RoundTripLatencyMs; + public Address sender; + public Address device; + public override string ToString() { + if (ApplicationDesc.MaxPlayers > 0) + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + "/" + ApplicationDesc.MaxPlayers + ") (" + RoundTripLatencyMs + "ms)"; + else + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + ") (" + RoundTripLatencyMs + "ms)"; + } + }; + + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + private Address hostAddress = null; + private bool isSearching = false; + private int findHostHandle = 0; + private CreateSessionForm createSessionForm = null; + private ResultCode resultCode; + private ArrayList foundHosts = new ArrayList(); + private bool isConnected = false; + private ManualResetEvent connectEvent = null; + private System.Timers.Timer updateListTimer = null; + private System.Timers.Timer connectTimer = null; + + private System.Windows.Forms.ListBox lstSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnSearch; + private System.Windows.Forms.Button btnJoin; + private System.Windows.Forms.Button btnCreate; + + + + + /// + /// Constructor + /// + public CreateJoinForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + deviceAddress = addressObject; + + //Set up the event handlers + peer.FindHostResponse += new FindHostResponseEventHandler(FindHostResponseMessage); + peer.ConnectComplete += new ConnectCompleteEventHandler(ConnectResult); + peer.AsyncOperationComplete += new AsyncOperationCompleteEventHandler(CancelAsync); + + //Set up our timer + updateListTimer = new System.Timers.Timer(300); // A 300 ms interval + updateListTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.UpdateTimer); + updateListTimer.SynchronizingObject = this; + updateListTimer.Start(); + //Set up our connect timer + connectTimer = new System.Timers.Timer(100); // A 100ms interval + connectTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.ConnectTimer); + connectTimer.SynchronizingObject = this; + // Set up our connect event + connectEvent = new ManualResetEvent(false); + + } + + + + + /// + /// An asynchronous operation was cancelled + /// + private void CancelAsync(object sender, AsyncOperationCompleteEventArgs e) { + if (e.Message.AsyncOperationHandle == findHostHandle) { + findHostHandle = 0; + btnSearch.Text = "Start Search"; + isSearching = false; + btnCreate.Enabled = true; + btnSearch.Enabled = true; + } + } + + + + + /// + /// A host was found and responded to our query + /// + private void FindHostResponseMessage(object sender, FindHostResponseEventArgs dpMessage) { + // Now we need to add this to our list of available sessions + SessionAdd(dpMessage.Message); + } + + + + + /// + /// Add this session to our list + /// + /// + private void SessionAdd(FindHostsResponseMessage dpMessage) { + FindHostsResponseInformation dpInfo = new FindHostsResponseInformation(); + + dpInfo.ApplicationDesc = dpMessage.ApplicationDescription; + dpInfo.device = dpMessage.AddressDevice; + dpInfo.sender = dpMessage.AddressSender; + dpInfo.RoundTripLatencyMs = dpMessage.RoundTripLatencyMs; + dpInfo.LastFoundTime = Environment.TickCount; + + // Let's check the items first and see if this one already exists + bool isFound = false; + + lock (foundHosts) { + for (int i = 0; i < lstSession.Items.Count; i++) { + if (dpInfo.ApplicationDesc.GuidInstance == ((FindHostsResponseInformation)lstSession.Items[i]).ApplicationDesc.GuidInstance) { + foundHosts[i] = dpInfo; + lstSession.Items[i] = dpInfo; + isFound = true; + } + } + if (!isFound) { + lstSession.Items.Add(dpInfo); + foundHosts.Add(dpInfo); + } + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + + if (isSearching) { + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + isSearching = !isSearching; + } + if (connectTimer != null) + connectTimer.Dispose(); + + if (updateListTimer != null) + updateListTimer.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.btnJoin = new System.Windows.Forms.Button(); + this.lstSession = new System.Windows.Forms.ListBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnCreate = new System.Windows.Forms.Button(); + this.btnSearch = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnJoin + // + this.btnJoin.Enabled = false; + this.btnJoin.Location = new System.Drawing.Point(7, 227); + this.btnJoin.Name = "btnJoin"; + this.btnJoin.Size = new System.Drawing.Size(74, 27); + this.btnJoin.TabIndex = 2; + this.btnJoin.Text = "Join"; + this.btnJoin.Click += new System.EventHandler(this.btnJoin_Click); + // + // lstSession + // + this.lstSession.Location = new System.Drawing.Point(5, 37); + this.lstSession.Name = "lstSession"; + this.lstSession.Size = new System.Drawing.Size(400, 186); + this.lstSession.TabIndex = 1; + this.lstSession.DoubleClick += new System.EventHandler(this.btnJoin_Click); + this.lstSession.SelectedValueChanged += new System.EventHandler(this.SelectedChange); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(5, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(312, 16); + this.label1.TabIndex = 0; + this.label1.Text = "Select session to join, or click Create to start a new session."; + // + // btnCreate + // + this.btnCreate.DialogResult = System.Windows.Forms.DialogResult.Yes; + this.btnCreate.Location = new System.Drawing.Point(84, 227); + this.btnCreate.Name = "btnCreate"; + this.btnCreate.Size = new System.Drawing.Size(74, 27); + this.btnCreate.TabIndex = 2; + this.btnCreate.Text = "Create"; + this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click); + // + // btnSearch + // + this.btnSearch.Location = new System.Drawing.Point(319, 7); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(86, 27); + this.btnSearch.TabIndex = 2; + this.btnSearch.Text = "Start Search"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(333, 227); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + // + // CreateJoinForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(411, 264); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.btnCreate, + this.btnJoin, + this.btnSearch, + this.btnCancel, + this.lstSession, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateJoinForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Join or create a session"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// The selected session was changed. + /// + private void SelectedChange(object sender, System.EventArgs e) { + if (amJoining) + return; // Do nothing if we are already joining a session + + btnJoin.Enabled = (lstSession.SelectedItem != null); + } + + + + + /// + /// We either want to start or stop searching + /// + private void btnSearch_Click(object sender, System.EventArgs e) { + if (!isSearching) { + if( hostAddress != null ) + hostAddress.Dispose(); + + hostAddress = new Address(); + hostAddress.ServiceProvider = deviceAddress.ServiceProvider; + + // See if we should prompt the user for the remote address + if (ConnectWizard.ProviderRequiresPort(hostAddress.ServiceProvider)) { + AddressForm addressDialog = new AddressForm(connectionWizard.DefaultPort); + addressDialog.ShowDialog(this); + + // If the user cancelled the address form, abort the search + if (addressDialog.DialogResult != DialogResult.OK) + return; + + // If a port was specified, add the component + if (addressDialog.Hostname != "") + hostAddress.AddComponent(Address.KeyHostname, addressDialog.Hostname); + + // If a hostname was specified, add the component + if (addressDialog.Port > 0) + hostAddress.AddComponent(Address.KeyPort, addressDialog.Port); + } + + //Time to enum our hosts + ApplicationDescription desc = new ApplicationDescription(); + desc.GuidApplication = connectionWizard.ApplicationGuid; + + // If the user was not already asked for address information, DirectPlay + // should prompt with native UI + FindHostsFlags flags = 0; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + flags = FindHostsFlags.OkToQueryForAddressing; + + peer.FindHosts(desc,hostAddress,deviceAddress,null,Timeout.Infinite,0,Timeout.Infinite, flags, out findHostHandle); + isSearching = true; + btnCreate.Enabled = false; + btnSearch.Text = "Stop Search"; + } + else { + btnSearch.Text = "Stopping..."; + btnSearch.Enabled = false; + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + } + } + + + + + /// + /// A form was disposed + /// + /// + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createSessionForm) + createSessionForm = null; + } + + + + + /// + /// We should create a new session. Display a dialog allowing the user to set + /// certain options + /// + private void btnCreate_Click(object sender, System.EventArgs e) { + this.DialogResult = DialogResult.None; + ((Button)sender).DialogResult = DialogResult.None; + if (createSessionForm == null) { + createSessionForm = new CreateSessionForm(peer,deviceAddress,connectionWizard); + createSessionForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (createSessionForm.ShowDialog(this) != DialogResult.Cancel) { + ((Button)sender).DialogResult = DialogResult.Yes; + this.DialogResult = DialogResult.Yes; + } + } + + + + + /// + /// Determine if we need to expire any of our currently listed servers + /// + private void UpdateTimer(object sender, System.Timers.ElapsedEventArgs e) { + lock (foundHosts) { + for (int i = 0; i< foundHosts.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)foundHosts[i]).LastFoundTime > EnumExpireThreshold) { + foundHosts.RemoveAt(i); + break; + } + } + for (int i = 0; i< lstSession.Items.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)lstSession.Items[i]).LastFoundTime > EnumExpireThreshold) { + lstSession.Items.RemoveAt(i); + break; + } + } + } + } + + + + + /// + /// Wait for a connect to complete + /// + private void ConnectTimer(object sender, System.Timers.ElapsedEventArgs e) { + if (connectEvent.WaitOne(0,false)) { // Wait for the Connect event to be fired + if (isConnected) { // Are we connected? + // Get rid of the timer + if (updateListTimer != null) + updateListTimer.Stop(); + + if (connectTimer != null) + connectTimer.Stop(); + + this.DialogResult = DialogResult.OK; + this.Close(); + return; + } + else { + MessageBox.Show(this,"Failed to connect. The error code was: \n" + resultCode.ToString() ,"Failed to connect",MessageBoxButtons.OK,MessageBoxIcon.Information); + // Restart our timer + updateListTimer.Start(); + } + } + } + + + + + /// + /// Fired when a connect complete message is received from DirectPlay. Fire + /// our event to notify the sample we've connected + /// + private void ConnectResult(object sender, ConnectCompleteEventArgs e) { + if (e.Message.ResultCode == 0) { + isConnected = true; + } + else + isConnected = false; + + resultCode = e.Message.ResultCode; + // Notify the timer that we've connected. + connectEvent.Set(); + } + + + + + /// + /// Join an existing session + /// + private void btnJoin_Click(object sender, System.EventArgs e) { + FindHostsResponseInformation dpInfo; + if (lstSession.SelectedItem == null) { + MessageBox.Show(this,"Please select a session before clicking join.","No session",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + // Turn off all buttons + btnCreate.Enabled = false; + btnCancel.Enabled = false; + btnJoin.Enabled = false; + btnSearch.Enabled = false; + amJoining = true; + // Stop our secondary timer + updateListTimer.Stop(); + dpInfo = ((FindHostsResponseInformation)lstSession.SelectedItem); + connectionWizard.SetUserInfo(); + peer.Connect(dpInfo.ApplicationDesc,dpInfo.sender, dpInfo.device,null,ConnectFlags.OkToQueryForAddressing); + // Now start our 'Connect' timer + connectTimer.Start(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_JoinForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_JoinForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_JoinForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_ServiceProviderForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_ServiceProviderForm.cs new file mode 100644 index 0000000..4884d84 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_ServiceProviderForm.cs @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_ServiceProviderForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +/// +/// This form allows you to choose a service provider and username for your +/// sample +/// +public class ChooseServiceProviderForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListBox lstSP; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtUser; + private System.Windows.Forms.Button btnCancel; + + + + + /// + /// Constructor + /// + public ChooseServiceProviderForm(Peer peerObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + // Fill up our listbox with the service providers + ServiceProviderInformation[] serviceProviders = peer.GetServiceProviders(false); + foreach (ServiceProviderInformation info in serviceProviders) + lstSP.Items.Add(info); + + txtUser.Text = null; + //Get the default username from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + try { + txtUser.Text = (string)regKey.GetValue("DirectPlayUserName", null); + lstSP.SelectedIndex = (int)regKey.GetValue("DirectPlaySPIndex", 0); + regKey.Close(); + } + catch { + txtUser.Text = null; + lstSP.SelectedIndex = 0; + } + } + else + lstSP.SelectedIndex = 0; + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + txtUser.Text = SystemInformation.UserName; + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.lstSP = new System.Windows.Forms.ListBox(); + this.txtUser = new System.Windows.Forms.TextBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lstSP + // + this.lstSP.Location = new System.Drawing.Point(12, 63); + this.lstSP.Name = "lstSP"; + this.lstSP.Size = new System.Drawing.Size(324, 147); + this.lstSP.TabIndex = 1; + this.lstSP.DoubleClick += new System.EventHandler(this.lstSP_DoubleClick); + // + // txtUser + // + this.txtUser.Location = new System.Drawing.Point(13, 20); + this.txtUser.MaxLength = 30; + this.txtUser.Name = "txtUser"; + this.txtUser.Size = new System.Drawing.Size(326, 20); + this.txtUser.TabIndex = 5; + this.txtUser.Text = ""; + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(181, 215); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 2; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(260, 215); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(11, 44); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(376, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Please pick your service provider:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(10, 5); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(327, 12); + this.label2.TabIndex = 4; + this.label2.Text = "User Name:"; + // + // ChooseServiceProviderForm + // + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(343, 246); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.txtUser, + this.label2, + this.btnCancel, + this.btnOK, + this.lstSP, + this.label1}); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChooseServiceProviderForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Choose Service Provider"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// They don't want to run this sample + /// + private void btnCancel_Click(object sender, System.EventArgs e) { + this.Dispose(); + } + + + + + /// + /// Same as clicking ok + /// + private void lstSP_DoubleClick(object sender, System.EventArgs e) { + // Call the ok button click handler + object[] parameters = new object[] { sender, e }; + this.BeginInvoke(new System.EventHandler(btnOK_Click), parameters); + } + + + + + /// + /// Select this username and service provider if valid, then continue the wizard + /// + private void btnOK_Click(object sender, System.EventArgs e) { + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + MessageBox.Show(this,"Please enter a username before clicking OK.","No Username",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + try { + connectionWizard.ServiceProvider = ((ServiceProviderInformation)lstSP.SelectedItem).Guid; + connectionWizard.Username = txtUser.Text; + } + catch { // We assume if we got here there was no selected item. + MessageBox.Show(this,"Please select a service provider before clicking OK.","No Service Provider",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlayUserName", txtUser.Text); + regKey.SetValue("DirectPlaySPIndex", lstSP.SelectedIndex); + regKey.Close(); + } + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_ServiceProviderForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_ServiceProviderForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/DPlayConnect_ServiceProviderForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/DXUtil.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/DXUtil.cs new file mode 100644 index 0000000..5d0f0e5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/DXUtil.cs @@ -0,0 +1,285 @@ +//----------------------------------------------------------------------------- +// File: DXUtil.cs +// +// Desc: Shortcut macros and functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.IO; +using System.Runtime.InteropServices; + + + + +/// +/// Enumeration for various actions our timer can perform +/// +public enum DirectXTimer { + Reset, + Start, + Stop, + Advance, + GetAbsoluteTime, + GetApplicationTime, + GetElapsedTime +}; + + + + +/// +/// Generic utility functions for our samples +/// +public class DXUtil { + #region Timer Internal Stuff + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceCounter(ref long PerformanceCount); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("winmm.dll")] + public static extern int timeGetTime(); + private static bool isTimerInitialized = false; + private static bool m_bUsingQPF = false; + private static bool m_bTimerStopped = true; + private static long m_llQPFTicksPerSec = 0; + private static long m_llStopTime = 0; + private static long m_llLastElapsedTime = 0; + private static long m_llBaseTime = 0; + private static double m_fLastElapsedTime = 0.0; + private static double m_fBaseTime = 0.0; + private static double m_fStopTime = 0.0; + #endregion + + // Constants for SDK Path registry keys + private const string sdkPath = "Software\\Microsoft\\DirectX SDK"; + private const string sdkKey = "DX9J3SDK Samples Path"; + + private DXUtil() { /* Private Constructor */ } + + + + + /// + /// Returns the DirectX SDK media path + /// + public static string SdkMediaPath { + get { + Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sdkPath); + string sReg = string.Empty; + if (rKey != null) { + sReg = (string)rKey.GetValue(sdkKey); + rKey.Close(); + } + if (sReg != null) + sReg += @"\Media\"; + else + return string.Empty; + + return sReg; + } + } + + + + + /// + /// Performs timer opertations. Use the following commands: + /// + /// DirectXTimer.Reset - to reset the timer + /// DirectXTimer.Start - to start the timer + /// DirectXTimer.Stop - to stop (or pause) the timer + /// DirectXTimer.Advance - to advance the timer by 0.1 seconds + /// DirectXTimer.GetAbsoluteTime - to get the absolute system time + /// DirectXTimer.GetApplicationTime - to get the current time + /// DirectXTimer.GetElapsedTime - to get the time that elapsed between TIMER_GETELAPSEDTIME calls + /// + /// + public static float Timer(DirectXTimer command) { + if (!isTimerInitialized) { + isTimerInitialized = true; + + // Use QueryPerformanceFrequency() to get frequency of timer. If QPF is + // not supported, we will timeGetTime() which returns milliseconds. + long qwTicksPerSec = 0; + m_bUsingQPF = QueryPerformanceFrequency(ref qwTicksPerSec); + if (m_bUsingQPF) + m_llQPFTicksPerSec = qwTicksPerSec; + } + if (m_bUsingQPF) { + double time; + double fElapsedTime; + long qwTime = 0; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_llStopTime != 0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + qwTime = m_llStopTime; + else + QueryPerformanceCounter(ref qwTime); + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (qwTime - m_llLastElapsedTime) / (double) m_llQPFTicksPerSec; + m_llLastElapsedTime = qwTime; + return (float)fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + double fAppTime = (double) (qwTime - m_llBaseTime) / (double) m_llQPFTicksPerSec; + return (float)fAppTime; + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_llBaseTime = qwTime; + m_llLastElapsedTime = qwTime; + m_llStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_llBaseTime += qwTime - m_llStopTime; + m_llStopTime = 0; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_llStopTime = qwTime; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_llStopTime += m_llQPFTicksPerSec/10; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + time = qwTime / (double) m_llQPFTicksPerSec; + return (float)time; + } + + return -1.0f; // Invalid command specified + } + else { + // Get the time using timeGetTime() + double time; + double fElapsedTime; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_fStopTime != 0.0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + time = m_fStopTime; + else + time = timeGetTime() * 0.001; + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (time - m_fLastElapsedTime); + m_fLastElapsedTime = time; + return (float) fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + return (float) (time - m_fBaseTime); + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_fBaseTime = time; + m_fLastElapsedTime = time; + m_fStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_fBaseTime += time - m_fStopTime; + m_fStopTime = 0.0f; + m_fLastElapsedTime = time; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_fStopTime = time; + m_fLastElapsedTime = time; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_fStopTime += 0.1f; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + return (float) time; + } + + return -1.0f; // Invalid command specified + } + } + + + + + /// + /// Returns a valid path to a DXSDK media file + /// + /// Initial path to search + /// Filename we're searching for + /// Full path to the file + public static string FindMediaFile(string path, string filename) { + // First try to load the file in the full path + if (path != null) { + if (File.Exists(AppendDirectorySeparator(path) + filename)) + return AppendDirectorySeparator(path) + filename; + } + + // if not try to find the filename in the current folder. + if (File.Exists(filename)) + return AppendDirectorySeparator(Directory.GetCurrentDirectory()) + filename; + + // last, check if the file exists in the media directory + if (File.Exists(AppendDirectorySeparator(SdkMediaPath) + filename)) + return AppendDirectorySeparator(SdkMediaPath) + filename; + + throw new FileNotFoundException("Could not find this file.", filename); + } + + + + + /// + /// Returns a valid string with a directory separator at the end. + /// + private static string AppendDirectorySeparator(string filename) { + if (!filename.EndsWith(@"\")) + return filename + @"\"; + + return filename; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/GameClass.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/GameClass.cs new file mode 100644 index 0000000..20226c1 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/GameClass.cs @@ -0,0 +1,326 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public delegate void MessageDelegate(byte message); // Delegate for messages arriving via DirectPlay. +public delegate void AudioDelegate(); // Delegate to handle audio playback. +public delegate void PeerCloseCallback(); // This delegate will be called when the session terminated event is fired. + +public class GameClass : GraphicsSample { + private GraphicsFont drawingFont = null; + private Point destination = new Point(0, 0); + private InputClass input = null; + private MouseInput mouseInput = null; + + private PlayClass play = null; + private bool networkEnabled; + private PlayClass peer = null; + private PositionedMesh spaceSphere = null; + private Ship playerShip = null; + private Ship opponentShip = null; + private Camera camera = null; + private CameraMode cameraMode = CameraMode.ChaseMode; + private Matrix viewMatrix; + private Vector2 screenCenter; + private Vector2 mouseLoc; + private SoundHandler soundHandler = null; + private bool kbThrust = false; + private bool cPressed = false; + private bool f5Pressed = false; + private bool f6Pressed = false; + private bool f7Pressed = false; + private bool f8Pressed = false; + private bool f9Pressed = false; + private bool f10Pressed = false; + private bool spacePressed = false; + + private string debugText; + public string DebugText { get { return debugText; } set { debugText = value; } } + private bool debugging = true; + + public GameClass(bool startFullScreen, Size size, bool enableNetwork) { + this.startFullscreen = startFullScreen; + this.Size = size; + this.networkEnabled = enableNetwork; + this.Text = "SpaceWar3D-Step07"; + + drawingFont = new GraphicsFont( "Verdana", System.Drawing.FontStyle.Regular); + + input = new InputClass(this); + mouseInput = new MouseInput(this); + this.MouseMove +=new MouseEventHandler(GameClass_MouseMove); + this.Cursor = Cursors.NoMove2D; + + + camera = new Camera(); + soundHandler = new SoundHandler(this); + + if (networkEnabled) { + peer = new PlayClass(this); + } + + } + + private void ProcessInput() { + //Get input + KeyboardState kbState = input.GetInputState(); + if (kbState == null) + return; + if (kbState[Key.W] || kbState[Key.Up]) { + kbThrust = true; + } + else { + kbThrust = false; + } + if (kbState[Key.C] && !cPressed) { + cPressed = true; + SelectNextCameraMode(); + } + if (!kbState[Key.C]) { + cPressed = false; + } + + if (kbState[Key.F5] && !f5Pressed) { + f5Pressed = true; + playerShip.Sounds |= Sounds.Taunt; + } + if (!kbState[Key.F5]) { + f5Pressed = false; + } + if (kbState[Key.F6] && !f6Pressed) { + f6Pressed = true; + playerShip.Sounds |= Sounds.Dude1; + } + if (!kbState[Key.F6]) { + f6Pressed = false; + } + if (kbState[Key.F7] && !f7Pressed) { + f7Pressed = true; + playerShip.Sounds |= Sounds.Dude2; + } + if (!kbState[Key.F7]) { + f7Pressed = false; + } + if (kbState[Key.F8] && !f8Pressed) { + f8Pressed = true; + playerShip.Sounds |= Sounds.Dude3; + } + if (!kbState[Key.F8]) { + f8Pressed = false; + } + if (kbState[Key.F9] && !f9Pressed) { + f9Pressed = true; + playerShip.Sounds |= Sounds.Dude4; + } + if (!kbState[Key.F9]) { + f9Pressed = false; + } + if (kbState[Key.F10] && !f10Pressed) { + f10Pressed = true; + playerShip.Sounds |= Sounds.Dude1; + } + if (!kbState[Key.F10]) { + f10Pressed = false; + } + if (kbState[Key.Space] && !spacePressed) { + spacePressed = true; + playerShip.EnterHyper(); + } + if (!kbState[Key.Space]) { + spacePressed = false; + } + } + + protected override void FrameMove() { + int fps = (int) framePerSecond; + debugText = "FPS: " + fps.ToString() + "\r\n"; + debugText += "CameraMode: " + cameraMode.ToString()+"\r\n"; + debugText += "Use the mouse to rotate your ship, and W or the \r\n" + + "up arrow to thrust forward. The C key changes the camera views. F5-F10 for sounds \r\n\r\n"; + ProcessInput(); + MouseControlValues v = mouseInput.Values; + if (v.FireButtonPushed) + playerShip.Shoot(); + + float yawAmount = mouseLoc.X - screenCenter.X; + float pitchAmount = mouseLoc.Y - screenCenter.Y; + + playerShip.YawPitchRoll(yawAmount, pitchAmount, elapsedTime); + playerShip.SetThrust(v.ThrustButtonPushed | kbThrust, elapsedTime); + playerShip.UpdatePosition(elapsedTime); + playerShip.UpdateState(elapsedTime); + + playerShip.TestShip(opponentShip); + opponentShip.SetThrust(true, elapsedTime); + opponentShip.YawPitchRoll(250,0,elapsedTime); + opponentShip.TestShip(playerShip); + opponentShip.UpdatePosition(elapsedTime); + opponentShip.UpdateState(elapsedTime); + + /*Here we set up the view matrix and space dome location. The space dome moves but not rotates with the player + * and is alway drawn first, so it looks like it is infinitely distant. + * + * In chase mode, the chaseMatrix determines the offset from the ship. If you want to move our viewpoint + * back from the ship more, increase the negative z value. + * + * The fixed mode camera sits at the origin and always tracks the player ship. Very hard to control from + * this viewpoint, but cool to watch. + */ + + Vector3 spaceSphereLocation = new Vector3(0, 0, 0); + switch (cameraMode) { + case CameraMode.ChaseMode: { + Matrix chaseMatrix = Matrix.Translation(0, 6, -14); + chaseMatrix *= playerShip.Position.WorldMatrix; + viewMatrix = Matrix.Invert(chaseMatrix); + spaceSphereLocation = playerShip.Position.Location; + break; + } + case CameraMode.CockpitMode: { + viewMatrix = Matrix.Invert(playerShip.Position.WorldMatrix); + spaceSphereLocation = playerShip.Position.Location; + break; + } + case CameraMode.Fixed: { + camera.Point(0,0,0, + playerShip.Position.XPos, + playerShip.Position.YPos, + playerShip.Position.ZPos); + viewMatrix = camera.ViewMatrix; + spaceSphereLocation = new Vector3(0, 0, 0); + break; + } + } + device.Transform.View = viewMatrix; + spaceSphere.Position.Location = spaceSphereLocation; + + //rotate space very slowly for that nice twinkly star effect + spaceSphere.Position.RotateRel(-.001f * elapsedTime,-0.0001f * elapsedTime, 0); + + //Play the sounds + soundHandler.Play(opponentShip.Sounds | playerShip.Sounds); + opponentShip.Sounds = (Sounds) 0; + playerShip.Sounds = (Sounds) 0; + } + + + /// + /// Called once per frame, the call is the entry point for 3d rendering. This + /// function sets up render states, clears the viewport, and renders the scene. + /// + protected override void Render() { + //Clear the backbuffer to a Blue color + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + + //Set the view matrix + device.Transform.View = viewMatrix; + + //Begin the scene + device.BeginScene(); + device.RenderState.ZBufferEnable = false; + device.RenderState.Lighting = false; + spaceSphere.Render(); + device.RenderState.Lighting = true; + device.RenderState.ZBufferEnable = true; + + device.Transform.World = playerShip.Position.WorldMatrix; + playerShip.Render(); + opponentShip.Render(); + + if (debugging) { + drawingFont.DrawText(5,5,Color.Yellow,debugText); + } + device.EndScene(); + } + + /// + /// Initialize scene objects. + /// + protected override void InitializeDeviceObjects() { + drawingFont.InitializeDeviceObjects(device); + + spaceSphere = new PositionedMesh(device, "SpaceSphere.x"); + + HullColors hullColor = HullColors.White; + playerShip = new Ship(device, this, hullColor); + if (playerShip.HostName == null) + playerShip.HostName = "Player"; + playerShip.State = ShipState.Normal; + + HullColors opponentHullColor; + if (hullColor == HullColors.Red) + opponentHullColor = HullColors.White; + else + opponentHullColor = HullColors.Red; + + opponentShip = new Ship(device, this, opponentHullColor); + if (opponentShip.HostName == null) + opponentShip.HostName = "Opponent"; + opponentShip.State = ShipState.Normal; + + } + + /// + /// Called when a device needs to be restored. + /// + protected override void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { + device.RenderState.Ambient = Color.FromArgb(150,150,150); + device.RenderState.SpecularEnable = true; + device.Lights[0].Type = LightType.Directional; + device.Lights[0].Direction = new Vector3(0,-1, -1); + device.Lights[0].Diffuse = Color.White; + device.Lights[0].Specular = Color.White; + device.Lights[0].Enabled = true; + device.RenderState.Lighting = true; + + device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, + (presentParams.BackBufferWidth/presentParams.BackBufferHeight), + 1.5f, 20000.0f ); + + device.Transform.View = camera.ViewMatrix; + + screenCenter = new Vector2( + presentParams.BackBufferWidth / 2, + presentParams.BackBufferHeight / 2); + + } + + protected override void Dispose(bool disposing) { + if (networkEnabled) + play.Dispose(); + base.Dispose(disposing); + } + + public void MessageArrived(byte message) { + + } + public void SendPoint() { + + } + + /// + // When the peer closes, the code here is executed. + /// + public void PeerClose() { + // The session was terminated, go ahead and shut down + this.Dispose(); + } + + private void SelectNextCameraMode() { + int mode = (int) cameraMode; + mode++; + if (mode > 2) + mode = 0; + cameraMode = (CameraMode) mode; + } + + private void GameClass_MouseMove(object sender, MouseEventArgs e) { + mouseLoc.X = e.X; + mouseLoc.Y = e.Y; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/GameClass.resx b/Source Code updated 08-12-05/Spacewar3D/Step07/GameClass.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/GameClass.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/HelpScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/HelpScreen.cs new file mode 100644 index 0000000..7d54363 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/HelpScreen.cs @@ -0,0 +1,113 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.IO; + + + /// + /// Summary description for HelpScreen. + /// +public class HelpScreen : System.Windows.Forms.Form { + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.TextBox helpText; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public HelpScreen() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + string helpFile = MediaUtilities.FindFile("Help.txt"); + if (File.Exists(helpFile)) { + StreamReader sr; + try { + sr = new StreamReader(helpFile); + helpText.Text = sr.ReadToEnd(); + sr.Close(); + } + catch ( Exception e ) { + helpText.Text = e.ToString(); + } + + } + else { + helpText.Text = "Unable to locate " + helpFile.ToString(); + } + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.closeButton = new System.Windows.Forms.Button(); + this.helpText = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // closeButton + // + this.closeButton.BackColor = System.Drawing.Color.Black; + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.Dock = System.Windows.Forms.DockStyle.Bottom; + this.closeButton.ForeColor = System.Drawing.Color.Red; + this.closeButton.Location = new System.Drawing.Point(0, 615); + this.closeButton.Name = "closeButton"; + this.closeButton.Size = new System.Drawing.Size(616, 23); + this.closeButton.TabIndex = 0; + this.closeButton.Text = "Close"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // helpText + // + this.helpText.BackColor = System.Drawing.Color.Black; + this.helpText.Dock = System.Windows.Forms.DockStyle.Fill; + this.helpText.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.helpText.ForeColor = System.Drawing.Color.Red; + this.helpText.Location = new System.Drawing.Point(0, 0); + this.helpText.Multiline = true; + this.helpText.Name = "helpText"; + this.helpText.ReadOnly = true; + this.helpText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.helpText.Size = new System.Drawing.Size(616, 615); + this.helpText.TabIndex = 1; + this.helpText.TabStop = false; + this.helpText.Text = ""; + // + // HelpScreen + // + this.AcceptButton = this.closeButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(616, 638); + this.Controls.Add(this.helpText); + this.Controls.Add(this.closeButton); + this.Name = "HelpScreen"; + this.Text = "SpaceWar! Help"; + this.ResumeLayout(false); + + } + #endregion + + private void closeButton_Click(object sender, System.EventArgs e) { + this.Close(); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/HelpScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step07/HelpScreen.resx new file mode 100644 index 0000000..a4f535a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/HelpScreen.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + HelpScreen + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/MediaUtilities.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/MediaUtilities.cs new file mode 100644 index 0000000..685a63d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/MediaUtilities.cs @@ -0,0 +1,35 @@ +using System; +using System.IO; +using System.Configuration; + + + /// + /// Summary description for MediaUtilities. + /// +public class MediaUtilities { + // private static string defaultPath = @"..\..\media\"; + private static string mediaPath = ConfigurationSettings.AppSettings.Get("MediaPath"); + + public MediaUtilities() { + } + + public static string FindFile(string filename) { + return FindFile(mediaPath, filename); + } + + public static string FindFile(string path, string filename) { + // First try to load the file in the full path + string fullName = AppendDirectorySeparator(path) + filename; + if (File.Exists(fullName)) + return fullName; + else + throw new FileNotFoundException("Could not find this file.", filename); + } + + private static string AppendDirectorySeparator(string pathname) { + if (!pathname.EndsWith(@"\")) + return pathname + @"\"; + else + return pathname; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/MouseInput.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/MouseInput.cs new file mode 100644 index 0000000..55a295e --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/MouseInput.cs @@ -0,0 +1,55 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + + + +public struct MouseControlValues { + public int Yaw; + public int Pitch; + public bool FireButtonPushed; + public bool ThrustButtonPushed; +} + + /// + /// Summary description for MouseInput. + /// +public class MouseInput { + private Device device = null; + private MouseControlValues values; + public MouseControlValues Values { + get { + UpdateInput(); + return values; + } + } + + public MouseInput(Control parent) { + // Create our mouse device + device = new Device(SystemGuid.Mouse); + device.SetCooperativeLevel(parent, CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive); + device.Properties.AxisModeAbsolute = false; + device.Acquire(); + } + + + public void UpdateInput() { + MouseState state = device.CurrentMouseState; + values.Yaw = state.X; + values.Pitch = state.Y; + + byte [] buttonStatus = state.GetMouseButtons(); + if (buttonStatus[0]!=0) + values.FireButtonPushed = true; + else + values.FireButtonPushed = false; + + if (buttonStatus[1]!=0) + values.ThrustButtonPushed = true; + else + values.ThrustButtonPushed = false; + + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/Photon.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/Photon.cs new file mode 100644 index 0000000..39efb40 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/Photon.cs @@ -0,0 +1,95 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// Summary description for Photon. + /// +public class Photon : IDisposable { + + private const float maxLife = 5; + public Vector3 Location { + get { + + return photonMesh.Position.Location; + } set { + photonMesh.Position.Location = value; + } + } + + private Vector3 launchVector; + private PositionedMesh photonMesh; + private Device device; + private float age; + public float Age { get { return age; } set { age = value; } } + private bool alive = false; + public bool Alive { get { return alive; } set { alive = value; } } + + private bool disposing = false; + + public Photon(Device device) { + this.device = device; + + photonMesh = new PositionedMesh(device, "photon.x"); + + alive = false; + age = 0; + } + + public void SetShot(Vector3 position, Vector3 launchVector) { + age = 0; + alive = true; + photonMesh.Position.Location = position; + this.launchVector = launchVector; + } + + public void UpdatePosition(float elapsedtime) { + if (disposing) + return; + age += elapsedtime; + if (age >= Constants.ShotLifetime ) { + this.alive = false; + } + else { + photonMesh.Position.RotateRel(0, elapsedtime*10,0); + Vector3 moveVector = elapsedtime * Constants.ShotVelocity * launchVector; + photonMesh.Position.MoveRel(moveVector.X, moveVector.Y, moveVector.Z); + } + + } + + public void Render() { + if (disposing | !alive) + return; + + device.RenderState.Lighting = false; + + device.RenderState.AlphaBlendEnable = true; + device.RenderState.AlphaBlendOperation = BlendOperation.Add; + device.RenderState.AlphaSourceBlend = Blend.One; + device.RenderState.DestinationBlend = Blend.One; + device.Transform.World = photonMesh.Position.WorldMatrix; + photonMesh.Render(); + device.RenderState.AlphaBlendEnable = false; + device.RenderState.Lighting = true; + } + + public void RestoreDeviceObjects() { + + } + #region IDisposable Members + + public void Dispose() { + disposing = true; + + if (photonMesh != null) + photonMesh.Dispose(); + + } + + #endregion +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/PositionedMesh.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/PositionedMesh.cs new file mode 100644 index 0000000..7f5f278 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/PositionedMesh.cs @@ -0,0 +1,435 @@ +using System; +using System.Drawing; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public class PositionedMesh : IDisposable { + private Device device = null; + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + private Sphere boundingSphere; + + + private WorldPosition worldPosition; + public WorldPosition Position { get { return worldPosition; } set { worldPosition = value; } } + + private float velocity; + public float Velocity { get { return velocity; } set { velocity = value; } } + + /// + /// Constructor + /// + /// The initial filename + public PositionedMesh(string filename) { + fileName = filename; + } + public PositionedMesh() : this ("PositionedMesh") {} + + public PositionedMesh(Device device, string filename) { + Create(device, filename); + } + + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + /// + ///The bounding sphere + /// + public Sphere BoundingSphere { + get { return boundingSphere; } + } + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + worldPosition = new WorldPosition(); + + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + this.device = device; + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + + + + filename = MediaUtilities.FindFile(filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(filename, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + + Mesh tempMesh = null; + string errorString; + tempMesh = Mesh.Clean(CleanType.Optimization, systemMemoryMesh, adjacencyBuffer, adjacencyBuffer, out errorString); + if (tempMesh != systemMemoryMesh) { + systemMemoryMesh.Dispose(); + systemMemoryMesh = tempMesh; + } + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + + // Setup bounding volumes + VertexBuffer vb = systemMemoryMesh.VertexBuffer; + GraphicsStream vertexData = vb.Lock(0, 0, LockFlags.NoSystemLock); + boundingSphere.Radius = Geometry.ComputeBoundingSphere(vertexData,systemMemoryMesh.NumberVertices,systemMemoryMesh.VertexFormat, out boundingSphere.CenterPoint); + vb.Unlock(); + vb.Dispose(); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + + + } + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. + localMemoryMesh = systemMemoryMesh.Clone(MeshFlags.VbWriteOnly | MeshFlags.IbWriteOnly, + systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + // Set the world transform + device.Transform.World = worldPosition.WorldMatrix; + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render() { + Render(true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/Ship.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/Ship.cs new file mode 100644 index 0000000..cdd2605 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/Ship.cs @@ -0,0 +1,410 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// This class handles the drawing and collision detection routines for our ship. + /// +public class Ship { + private Shots shots; + private ShipState state = ShipState.Dead; // current state + public ShipState State { get { lock(this){return state;} } set { lock(this){ state = value; }}} + + private Device device; + private PositionedMesh shipMesh; + + private GameClass game; + + private float velocity; + + private string hostName; + + private float waitCount = 6.0f; // wait count before state transition. + public float WaitCount { get { lock(this){return waitCount; }} set { lock(this){ waitCount = value; }}} + private int score; // our score + + private int deathCount; // # of times we've died... + private float hyperSuccess = Constants.HyperSuccessFactor; // chance of a hyper being successful... + + private Sounds sounds; + private Vector3 startingPosition; + + public Shots ShotHandler { + get { + lock(this) { + return shots; + } + } + } + public int DeathCount { + get { + lock(this) { + return deathCount; + } + } + set { + lock(this) { + deathCount = value; + } + } + } + + public int Score { + get { + lock(this) { + return score; + } + } + set { + lock(this) { + score = value; + } + } + } + + public string HostName { + get { + lock(this) { + return hostName; + } + } + set { + lock(this) { + hostName = value; + } + } + } + + public Vector3 Location { + get { + lock (this) { + return shipMesh.Position.Location; + } + } + set { + lock (this) { + shipMesh.Position.Location = value; + } + } + } + + public Vector3 Rotation { + get { + lock(this) { + return shipMesh.Position.Rotation; + } + } + set { + lock(this) { + shipMesh.Position.Rotation = value; + } + } + } + + public WorldPosition Position { + get { + lock (this) { + return shipMesh.Position; + } + } + set { + lock(this) { + shipMesh.Position=value; + } + } + } + + public float Velocity { + get { + lock (this) { + return velocity; + } + } + set { + lock(this) { + velocity = value; + } + } + } + + + + public Sounds Sounds { + get { + lock(this) { + return sounds; + } + } + set { + lock(this) { + sounds = value; + } + } + } + + public Ship(Device device, GameClass gameClass, HullColors hullColor) { + + this.device = device; + this.game = gameClass; + shots = new Shots(device); + if (hullColor == HullColors.White) { + shipMesh = new PositionedMesh(device, "WhiteShip.x"); + startingPosition = new Vector3(10, 0, 10); + } + else { + shipMesh = new PositionedMesh(device, "RedShip.x"); + startingPosition = new Vector3(-50, 0, -150); + } + + SetRandomPosition(true); + + } + + + public void Shoot() { + if (this.state != ShipState.Normal) { + return; + } + + // find out the location of the front of the ship... + + bool shot = shots.Shoot(this.Position.CombinedLocation, this.Position.Direction); + if (shot) { + sounds |= Sounds.ShipFire; + } + } + + public void SetThrust(bool thrust, float elapsedTime) { + + if (thrust && (state == ShipState.Normal)) { + + if (velocity < Constants.MaxVelocity * 0.1f) + velocity = Constants.MaxVelocity * 0.1f; + if (velocity < Constants.MaxVelocity) + velocity += velocity * Constants.ThrustPower; + if (velocity > Constants.MaxVelocity) + velocity = Constants.MaxVelocity; + sounds |= Sounds.ShipThrust; + } + + else { + velocity -= velocity * elapsedTime * 2; + if (velocity < 0.00005f) + velocity = 0.0f; + + if ((sounds & Sounds.ShipThrust) != 0) + sounds ^= Sounds.ShipThrust; + } + } + + + public void EnterHyper() { + if (state != ShipState.Normal) + return; + + SetState(ShipState.HyperCharge); + } + + public void SetRandomPosition(bool setOriginal) { + if (setOriginal) { + shipMesh.Position.Move(startingPosition); + } + else { + shipMesh.Position.RotateRel(0,Constants.random.Next(100),0); + shipMesh.Position.Move( + Constants.random.Next(1000)-500, + Constants.random.Next(1000)-500, + Constants.random.Next(1000)-500); + } + } + + public void SetState(ShipState newState) { + if (newState == state) + return; + + lock(this) { + + switch (newState) { + case ShipState.Dying: + deathCount++; + waitCount = Constants.DyingCycle; + sounds |= Sounds.ShipExplode; + break; + + case ShipState.Dead: + waitCount = Constants.DeadCycleWait; + shipMesh.Position.Move(this.startingPosition); + + break; + + case ShipState.Normal: + if (state == ShipState.Hyper) { + SetRandomPosition(false); + } + else { + shipMesh.Position.Move(startingPosition); + velocity = 0.0f; + } + hyperSuccess = Constants.HyperSuccessFactor; + shots.Clear(); + sounds |= Sounds.ShipAppear; + break; + + case ShipState.HyperCharge: + sounds |= Sounds.ShipHyper; + waitCount = Constants.HyperChargeWait; + break; + + case ShipState.Hyper: + waitCount = Constants.HyperCycleWait; + break; + } + state = newState; + } + } + + + public void YawPitchRoll(float yawAmount, float pitchAmount, float elapsedTime) { + float absYaw = Math.Abs(yawAmount); + if ( (0 <= absYaw) & (absYaw <= 30)) { + yawAmount = 0; + } + else if ((31 <= absYaw) & (absYaw <= 150)) { + yawAmount *= 1; + } + else { + yawAmount *= 1.2f; + } + + const float sensitivity = 0.002f; + + float yaw = yawAmount * elapsedTime * sensitivity; + + float absPitch = Math.Abs(pitchAmount); + + if ( (0 <= absPitch) & (absPitch <= 30)) { + pitchAmount = 0; + } + else if ((31 <= absPitch) & (absPitch <= 150)) { + pitchAmount *= 1; + } + else { + pitchAmount *= 1.2f; + } + + float pitch = pitchAmount * elapsedTime * sensitivity; + float roll = 0; + + + this.Position.YawPitchRoll(yaw, pitch, roll); + + } + + public void UpdatePosition(float elapsedTime) { + shots.UpdatePosition(elapsedTime); + + if (state == ShipState.Dying) { + return; + } + + + if ((state != ShipState.Normal) && + (state != ShipState.HyperCharge)) + return; + + float xAdd = (elapsedTime * velocity * Position.Direction.X); + float yAdd = (elapsedTime * velocity * Position.Direction.Y); + float zAdd = (elapsedTime * velocity * Position.Direction.Z); + + this.Position.MoveRel(xAdd, yAdd, zAdd); + + } + + public void UpdateState(float elapsedTime) { + if (state == ShipState.Dying) { + this.waitCount -= elapsedTime; + if (waitCount <= 0) { + SetState(ShipState.Dead); + } + } + + if (state == ShipState.Dead) { + this.waitCount -= elapsedTime; + if (waitCount <= 0) { + SetState(ShipState.Normal); + } + } + + if (state == ShipState.HyperCharge) { + this.waitCount -= elapsedTime; + shipMesh.Position.RotateRel(0,-elapsedTime * Constants.HyperCycleWait *6.0f, 0); + + if (waitCount <= 0) { + // if we didn't make it, we're dying... + double randValue = Constants.random.NextDouble(); + if (hyperSuccess < randValue) { + SetState(ShipState.Dying); + game.SendPoint(); + } + else { + SetState(ShipState.Hyper); + } + } + } + if (state == ShipState.Hyper) { + this.waitCount -= elapsedTime; + shipMesh.Position.RotateRel(0, -elapsedTime * this.waitCount * 6.0f, 0); + if (waitCount <= 0) { + hyperSuccess -= Constants.HyperSuccessDegradation; + float save = this.hyperSuccess; + SetState(ShipState.Normal); + hyperSuccess = save; + } + } + + } + public void TestShip(Ship otherShip) { + + // if we're not alive, don't do any tests... + if (state != ShipState.Normal) + return; + + // Test if their shots are close enough to us. + if (otherShip.shots.TestShots(this)) { + SetState(ShipState.Dying); + game.SendPoint(); + } + + //Test for collision with ship or it's death explosion + if ((otherShip.state == ShipState.Normal) | (otherShip.state == ShipState.Dying)) { + Vector3 delta = this.Position.Location - otherShip.Position.Location; + if (Vector3.Length(delta) < Constants.ShipCollisionLimit) { + SetState(ShipState.Dying); + game.SendPoint(); + } + } + } + + public void Render() { + switch (this.state) { + case ShipState.Normal: { + device.RenderState.Lighting = true; + device.RenderState.ZBufferEnable = true; + device.Transform.World = shipMesh.Position.WorldMatrix; + shipMesh.Render(); + shots.Render(); + break; + } + case ShipState.Dying: { + break; + } + default: { + return; + } + } + } + +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/ShipSkins.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/ShipSkins.cs new file mode 100644 index 0000000..42b4546 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/ShipSkins.cs @@ -0,0 +1,5 @@ +public enum HullColors { + Red, + White +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/ShipState.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/ShipState.cs new file mode 100644 index 0000000..827eb64 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/ShipState.cs @@ -0,0 +1,12 @@ +using System; + + +public enum ShipState { + Normal, + Dying, + Dead, + Hyper, + HyperCharge, +}; + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/Shots.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/Shots.cs new file mode 100644 index 0000000..d1aed11 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/Shots.cs @@ -0,0 +1,101 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + /// + /// Handles the collision detection and returns the array of shots for sending to other players + /// +[Serializable] +public class Shots { + + Photon[] shots; + [NonSerialized] + float timeSinceShot = 0; + [NonSerialized] + Rectangle screenBounds; + + + public Shots(Device device) { + shots = new Photon[Constants.NumShots]; + for (int count = 0; count < Constants.NumShots; count++) { + shots[count] = new Photon(device); + } + } + + public Rectangle ScreenBounds { + get { + return screenBounds; + } + set { + screenBounds = value; + } + } + public Photon[] GetShotArray() { + lock(this) { + return shots; + } + } + + public void SetShotArray(Photon[] shotArray) { + lock(this) { + this.shots = shotArray; + } + } + + public bool Shoot(Vector3 position, Vector3 launchVector) { + if (timeSinceShot < Constants.ShotDeltaTime) + return false; + + timeSinceShot = 0; + + + foreach (Photon shot in shots) { + if (!shot.Alive) { + shot.SetShot(position, launchVector); + return true; + } + } + return false; + } + + public void UpdatePosition(float elapsedTime) { + timeSinceShot += elapsedTime; + + foreach (Photon shot in shots) { + shot.UpdatePosition(elapsedTime); + } + } + + public void Clear() { + foreach (Photon shot in shots) { + shot.Alive = false; + } + } + public bool TestShots(Ship ship) { + foreach (Photon shot in shots) { + if (shot.Alive) { + float distance = Vector3.Length(shot.Location - ship.Position.Location); + if (distance < Constants.ShotCollisionLimit) { + shot.Alive = false; + return true; + } + } + } + return false; + } + + public void Render() { + foreach (Photon shot in shots) { + shot.Render(); + } + } + + public void RestoreDeviceObjects() { + foreach (Photon shot in shots) { + shot.RestoreDeviceObjects(); + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/SoundBuffer.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/SoundBuffer.cs new file mode 100644 index 0000000..75c3d53 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/SoundBuffer.cs @@ -0,0 +1,71 @@ +using System; +using Microsoft.DirectX.DirectSound; + + + /// + /// A single sound buffer for use by the SoundHandler class. + /// +public class SoundBuffer { + Microsoft.DirectX.DirectSound.Buffer buffer; + Sounds thisSound; + bool looping; + bool lastValue; + + public SoundBuffer(Microsoft.DirectX.DirectSound.Device soundDevice, string filename, Sounds thisSound, bool looping) { + this.thisSound = thisSound; + this.looping = looping; + + BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + try { + buffer = new Microsoft.DirectX.DirectSound.Buffer( + filename, + bufferDesc, + soundDevice); + } + catch (Exception e) { + throw new Exception( + String.Format("Error opening {0}; ", + filename), e); + } + } + + public Sounds Sound { + get { + return thisSound; + } + } + + public int Volume { + get { + return buffer.Volume; + } + set { + buffer.Volume = value; + } + } + + public void Play(bool on) { + // looping sounds don't get restarted + if (looping) { + if (on) { + if (!lastValue) { + buffer.SetCurrentPosition(1000); + buffer.Play(0,BufferPlayFlags.Looping); + } + } + else { + buffer.Stop(); + } + lastValue = on; + } + else { + if (on) { + buffer.SetCurrentPosition(0); + buffer.Play(0,BufferPlayFlags.Default); + } + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/SoundHandler.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/SoundHandler.cs new file mode 100644 index 0000000..1782d3f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/SoundHandler.cs @@ -0,0 +1,86 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX.DirectSound; +using System.Collections; + + + /// + /// This class handles loading and playing our sounds. + /// +public class SoundHandler { + Device soundDevice; + ArrayList sounds = new ArrayList(); + + Sounds lastSound; + + const int VolumeEngine = -1000; + const int VolumeOtherShot = -2000; + const int VolumeHaHa = -3000; + + + public SoundHandler(Control owner) { + soundDevice = new Device(); + soundDevice.SetCooperativeLevel(owner,CooperativeLevel.Normal); + CreateSoundBuffers(); + } + + Microsoft.DirectX.DirectSound.Buffer LoadFile(string filename) { + + Microsoft.DirectX.DirectSound.BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + Microsoft.DirectX.DirectSound.Buffer buffer; + buffer = new Microsoft.DirectX.DirectSound.Buffer(filename, bufferDesc, soundDevice); + + + return buffer; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping, int volume) { + SoundBuffer buffer; + + buffer = new SoundBuffer( + soundDevice, + filename, + thisSound, + looping); + sounds.Add(buffer); + buffer.Volume = volume; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping) { + AddBuffer(filename, thisSound, looping, 0); + } + + void CreateSoundBuffers() { + AddBuffer(MediaUtilities.FindFile("hypercharge.wav"), Sounds.ShipHyper, false); + AddBuffer(MediaUtilities.FindFile("sci fi bass.wav"), Sounds.ShipAppear, false); + AddBuffer(MediaUtilities.FindFile("laser2.wav"), Sounds.ShipFire, false); + AddBuffer(MediaUtilities.FindFile("explode.wav"), Sounds.ShipExplode, false); + + AddBuffer(MediaUtilities.FindFile("engine.wav"), Sounds.ShipThrust, true, VolumeEngine); + AddBuffer(MediaUtilities.FindFile("laser2_other.wav"), Sounds.OtherShipFire, false, VolumeOtherShot); + AddBuffer(MediaUtilities.FindFile("explode_other.wav"), Sounds.OtherShipExplode, false); + AddBuffer(MediaUtilities.FindFile("engine_other.wav"), Sounds.OtherShipThrust, true, VolumeEngine); + + AddBuffer(MediaUtilities.FindFile("sci fi bass.wav"), Sounds.OtherShipAppear, false); + AddBuffer(MediaUtilities.FindFile("haha.wav"), Sounds.Taunt, false, VolumeHaHa); + + AddBuffer(MediaUtilities.FindFile("dude_quest1.wav"), Sounds.Dude1, false); + AddBuffer(MediaUtilities.FindFile("dude_quest2.wav"), Sounds.Dude2, false); + AddBuffer(MediaUtilities.FindFile("dude_quest3.wav"), Sounds.Dude3, false); + AddBuffer(MediaUtilities.FindFile("dude_quest4.wav"), Sounds.Dude4, false); + AddBuffer(MediaUtilities.FindFile("dude_quest5.wav"), Sounds.Dude5, false); + } + + public void Play(Sounds soundsToPlay) { + // check each enum value. If that value + // is set, play the sound... + foreach (SoundBuffer buffer in sounds) { + bool on = ((buffer.Sound & soundsToPlay) != 0); + buffer.Play(on); + + } + lastSound = soundsToPlay; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/Sounds.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/Sounds.cs new file mode 100644 index 0000000..0f3b6ac --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/Sounds.cs @@ -0,0 +1,21 @@ +using System; + + +[Flags] +public enum Sounds { + ShipAppear = 0x00000001, + ShipHyper = 0x00000002, + ShipFire = 0x00000004, + ShipExplode = 0x00000008, + ShipThrust = 0x00000010, + OtherShipThrust = 0x00000020, + OtherShipExplode = 0x00000040, + OtherShipFire = 0x00000080, + OtherShipAppear = 0x00000100, + Taunt = 0x00000200, + Dude1 = 0x00000400, + Dude2 = 0x00000800, + Dude3 = 0x00001000, + Dude4 = 0x00002000, + Dude5 = 0x00004000, +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/SpaceWar3D.ico b/Source Code updated 08-12-05/Spacewar3D/Step07/SpaceWar3D.ico new file mode 100644 index 0000000..5db9a4d Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Step07/SpaceWar3D.ico differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/SphereStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/SphereStruct.cs new file mode 100644 index 0000000..90d9d6f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/SphereStruct.cs @@ -0,0 +1,6 @@ +using Microsoft.DirectX; + +public struct Sphere { + public Vector3 CenterPoint; + public float Radius; +}; \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/SplashScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/SplashScreen.cs new file mode 100644 index 0000000..9ffea2c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/SplashScreen.cs @@ -0,0 +1,237 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + + + /// + /// Spacewar Splashscreen + /// +public class SplashScreen : System.Windows.Forms.Form { + private MainClass mainClass; + private System.Windows.Forms.Button helpButton; + private System.Windows.Forms.Button startButton; + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.Button soloButton; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.CheckBox checkBox1; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + public SplashScreen(MainClass main) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + this.mainClass = main; + radioButton3.Checked = true; + checkBox1.Checked = true; + mainClass.GameFormSize = new Size(1024,768); + mainClass.FullScreen = true; + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(SplashScreen)); + this.helpButton = new System.Windows.Forms.Button(); + this.startButton = new System.Windows.Forms.Button(); + this.closeButton = new System.Windows.Forms.Button(); + this.soloButton = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // helpButton + // + this.helpButton.ForeColor = System.Drawing.Color.White; + this.helpButton.Location = new System.Drawing.Point(440, 280); + this.helpButton.Name = "helpButton"; + this.helpButton.Size = new System.Drawing.Size(136, 32); + this.helpButton.TabIndex = 5; + this.helpButton.Text = "Show Help"; + this.helpButton.Click += new System.EventHandler(this.helpButton_Click); + // + // startButton + // + this.startButton.ForeColor = System.Drawing.Color.White; + this.startButton.Location = new System.Drawing.Point(440, 364); + this.startButton.Name = "startButton"; + this.startButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.startButton.Size = new System.Drawing.Size(136, 32); + this.startButton.TabIndex = 7; + this.startButton.Text = "Network Play"; + this.startButton.Click += new System.EventHandler(this.startButton_Click); + // + // closeButton + // + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.ForeColor = System.Drawing.Color.White; + this.closeButton.Location = new System.Drawing.Point(440, 406); + this.closeButton.Name = "closeButton"; + this.closeButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.closeButton.Size = new System.Drawing.Size(136, 32); + this.closeButton.TabIndex = 8; + this.closeButton.Text = "Exit"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // soloButton + // + this.soloButton.ForeColor = System.Drawing.Color.White; + this.soloButton.Location = new System.Drawing.Point(440, 322); + this.soloButton.Name = "soloButton"; + this.soloButton.Size = new System.Drawing.Size(136, 32); + this.soloButton.TabIndex = 6; + this.soloButton.Text = "Solo Play"; + this.soloButton.Click += new System.EventHandler(this.soloButton_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.radioButton3); + this.groupBox1.Controls.Add(this.radioButton2); + this.groupBox1.Controls.Add(this.radioButton1); + this.groupBox1.ForeColor = System.Drawing.Color.White; + this.groupBox1.Location = new System.Drawing.Point(16, 320); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(128, 128); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Screen Resolution"; + // + // checkBox1 + // + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(16, 96); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.TabIndex = 3; + this.checkBox1.Text = "Full Screen"; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // radioButton3 + // + this.radioButton3.Checked = true; + this.radioButton3.ForeColor = System.Drawing.Color.White; + this.radioButton3.Location = new System.Drawing.Point(16, 72); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(80, 24); + this.radioButton3.TabIndex = 2; + this.radioButton3.TabStop = true; + this.radioButton3.Text = "1024 x 768"; + this.radioButton3.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton2 + // + this.radioButton2.ForeColor = System.Drawing.Color.White; + this.radioButton2.Location = new System.Drawing.Point(16, 48); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(72, 24); + this.radioButton2.TabIndex = 1; + this.radioButton2.Text = "800 x 600"; + this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton1 + // + this.radioButton1.ForeColor = System.Drawing.Color.White; + this.radioButton1.Location = new System.Drawing.Point(16, 24); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(72, 24); + this.radioButton1.TabIndex = 0; + this.radioButton1.Text = "640 x 480"; + this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // SplashScreen + // + this.AcceptButton = this.soloButton; + this.AutoScale = false; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.Black; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(594, 454); + this.ControlBox = false; + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.soloButton); + this.Controls.Add(this.closeButton); + this.Controls.Add(this.startButton); + this.Controls.Add(this.helpButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(600, 460); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(600, 460); + this.Name = "SplashScreen"; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + private void helpButton_Click(object sender, System.EventArgs e) { + HelpScreen helpScreen = new HelpScreen(); + helpScreen.ShowDialog(); + } + + private void startButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = true; + this.Close(); + } + + private void closeButton_Click(object sender, System.EventArgs e) { + Environment.Exit(0); + } + + private void soloButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = false; + this.Close(); + } + + private void radioButton_CheckedChanged(object sender, System.EventArgs e) { + RadioButton btn = (RadioButton)sender; + Console.WriteLine(btn.ToString()); + if (btn.Checked) { + if (btn == radioButton1) + mainClass.GameFormSize = new Size(640,480); + if (btn == radioButton2) + mainClass.GameFormSize = new Size(800, 600); + if (btn == radioButton3) + mainClass.GameFormSize = new Size(1024, 768); + } + } + + private void checkBox1_CheckedChanged(object sender, System.EventArgs e) { + mainClass.FullScreen = checkBox1.Checked; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/SplashScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step07/SplashScreen.resx new file mode 100644 index 0000000..18fad73 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/SplashScreen.resx @@ -0,0 +1,4715 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + False + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + False + + + 80 + + + True + + + Private + + + SplashScreen + + + + iVBORw0KGgoAAAANSUhEUgAAAlgAAAHMCAIAAACGG0FDAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA + CxMBAJqcGAAA/3lJREFUeF7kvQd4HNX1/q+d3dne1XtvtiRLbrJsy73buABuGAwGDBgwGNNMM733DqH3 + ZkoSOoTQIYWShFBSv6QQEgiEhECo+n/uvdrxaLVldlci5PffZx55LU25c+fOfe855z3vsefFPi7dGfT5 + +d9XX3/t9XgKC/OjkciXX375xRdfGPtk+sVmswWDfo/H8+WXnPXrTA/Pff+CaLQgP/Lxvz/p6+vL/Wyp + z6BpmtftsckOHNpruZzOgkiUZ/HVV18lOTOX3f5x6rpN09J2OA0uKioIh4KffvqftDvnckeLF805+IC9 + 3nzrtx/+4x8pzqPrDqdT/+qroew9t9vd0d5aUlr0/vsfDL5Hu93u9bodDru5Yxm0DP5gwP/vT/6Tl9fH + f3O5d47lDHabJs/TPwj5luK0kWCouLDw3598MqwPxZaX4L5GtjQ11tW+9/cPGGw53vWQHO7zecvLS2Uf + 5jGNfP0171Yf49bjdvv9fhpppYsCAX9FRQl7fvbZ56lbZbfZNZsW1zF2TXPadfFq22zJX0CrtxsNhQvz + C/7z2WdxQ447YohYnzroBFrbJ0eUy+UqLyvRdZ3TMtHxZLMbtG63i5MYDRND1qapS1j88EJxTHaTLXfE + Ux7+edrCrcg77389aJXdrlk4KNUunIRRyMZN5niq7A6XN5TrRJbdpb+Zo0qKCyf1jA+HQsbluF9Gs8UO + By/V2LXSWnZzABp2u5WdzfsUFkSrqypcLmfCA2mq2+XizBUVpWyDG8MOut1hsZHmS3BO1gR+n9fv9yU8 + HLSrKCsJBPirOA7UjIRDNCY/PxLw+7hTsJlZxmJnpu4WM/DQiTyjZPvzV3VFJmUxN8Q+tCeLzk/c5zbN + oSXoUp/Xm9HbmsVDyWjwMDWHQkGegvkoXT5W6+ehq3myVh6i6PC8/plK9Tv/BQXpK/ODsH7puD05P/aG + U3cO7rcselIssMRKzsNygWWBGhvil7zToKS1l9rcwiwOibtBOo2nY6Wr4w5k4DGJGcM795ZYfEYMMJ8v + 8eRg8QypdmPKw9SIRMSN/Q9BEa1l1mMSyq4LOJyZN7tjszuKoT5h/Oidl+3ARJ/dGYyjGL5+n48pOMV5 + 8BNUlpeFAgGL16JDCgsKwKFU+9tsYQyggkJeXTo/Dh7U+0C/Mn1YvOiAGZMZNOUdqUdmvHX0QFVZGWt/ + 4J4O8XjcTqdT7pDFxVPfdPr1GZOmmM5M5gktyWKKSdaOhBahxfsUiy2g3K5/YxPWwIaBVxrPaAh7I+7G + Aavi4sJgMKCmryF5/jxNr8ud9fSS8NEwJEKhQFlxscflMXYwnuzQtT3BxRP2Cu9L0O9P/dINPhdHVVdV + RiNhBeSsWliMWhyKWe/GyobZhkcMBmd9kjQHNjbWHb/10F133QlvxnBdYxjOy0QfDYfNdjBvmsWXLRQM + TO+d1DaidajW7FbujxcUm4ZhY2Xn1PuwdgkFg4Mbr1ad6liv18srFzdG+2eKRHOFx+XqHjO6vEy4tpJO + xzYbIKc74hf4dHs0GmGxpg4cormovxXJJgh+73Q4QT9iBLRKXjT9HDgcCyBxzqyM4NxHgpUzqI7SE9mU + Vg7PcR/GBoZ7aUkRxlCOp0p2OGZxbW0lXgGL5zevKtQrE1vD2X0erxreACEz79COZE4LFjKVJ5x2+KXF + 6cvibRovI8GahIt+4bBN6UeUBmu8pcFRzD+qZ/iOuT8czTbfo7Jcpecs/QueUeeIqUquWMV5WaRM6Z0w + atTI4b6fzJqYbu842CstLZo6pScc3u51THYCFhfFhQUrly0eParjf+uW03WJDSgKh4P9w4WIgfDVbR86 + Iizq9Yi1c0BEl+M+7Iqpyuou3VUG/J3RyVshl7pBbMSMjrW4M+t9rL2EUxLwE/YHWblbfD/ojMGGrMVm + JNuNS4uhODR2SI5tSXA4TWPNxKoo61OruSJrSKABOANZesa5TLNuz+ADhclrrYXiYdlwn273nUqPej/g + eVzukvwir8lcG8JGpj1V6h7Ozn3KRZkG6PnsJjqmC+aKrB992lu2vkP2bQDqcUckuxLzHZGVTGc96+1O + OFhzOTztsWVlJWNGt6e+IybB6nICWyUsyjAoMW3Snjb1DrxCkVD4G3axJp2RbTblHky5g4dAvXXfLCCX + LFiorqJiHkO/UjPdg/CHJhnJYo5mOT/QEBQGkJ54CSznhaFxnmX/ZuY45jI8nBkwGAhgE2R4XP/u3GZr + c+OyxfMh42V9huwOHI6jGCoyJpc4ngIoVpWXj+3qiITDw3H1rM9Js7NDsqyvqA5kfvuWTG5Z3kgwFJjY + M7a4uCDZ8dwh81eOazQ5AaVfizc21M6eMYWITpY3M3SHRcORprq6hE7F7C4iHB0eYCBNnJJ3z6FlTFrJ + rkmpj2JeS9ta4wzsLH25Se08Qss1NZVD+KqwUsk93sA0F/aH3M5hMU9V59CHWa+yh+OxDt85QdBlixZs + 3G8v/EaZXkUEkFzObzL6kGkL4/YXqN/SOGf21IL8aI6n+t86nJkchtG3ZI4asq4D4RYtmL14hznYB0N2 + 0kQncjp0l8MpGMzJP4ytJYvm7bf3WuIEw9qYtCdX/m6I8Wn3HNodhIFid0KkHNrTWj8bi56MaHtmIIQB + kuJCuEOj0bD1lqTeE1u2rqZGLcaFwyoHKlMs/0EsabFZh3wuzmg9MVT9k8t5JHJvj+xaD0dhcPNEcJ9k + cXURTHI6Ey68crSnselE0lESd7RanqfdBt8RJyQ/JxlpOYse+F85RPBjHS6w8BtoMO8jRJuhWT1vp6gl + mtWJEk3sGVdYkG/lrsSqTeajWNnZvA8HwlBg3Z12TBO4gkmRwk+b4tK8RX6/N4W7L9NmJ9vf5/WMGNGE + iaN2SHtTGV1XpAolMZ25EOsVov2YagnfTJkBkSUzlhPyVk/t7ampqsiowf+VnUE+1nDKbcV7kgsQGg+R + vFhCANmNvSHvBEmeTBVsGyq3bVzLebvLS0oC/u2B4bjg8ZDfaQoQ4loY04z5TKdCsZDlTZDglx+NFhUW + qJc07lqMHuubOhZM9bjhn2e/RBbr6+EMEst14dAzdwbM5xZ8e7mPE95uUshKSgqH4JWE/RX1hPO9ETJm + sn90cq4neAA4Y6tlSXOQuaC5906KM4BM7W0tw23a0oDamsqlS+ZWVZYzRxQV5peVFlt3IebSA0wH7e2t + HR0jEsYt4ImAkRkNmrjJlGhofW2N4jp/kx+L+Y7cNVHI4etqkTSgD31CRXY9yYTrhteT5JURVg7UzkQk + PVzrcVcUCyvLb55QeMiPZgo8CZZlKc0si/ADQZM4ts/j1kVwN4Hdpq7L+GGBbu4NsYyQ1Fw+jGpuSh2u + rksHqQ2jxryxwDdvcX9Vh0AW8ODClQ/Gcqdu7x6Zwu8c/IyyGySDj6IroH+TszTck61cgNoZhMN3Ic7M + sizFyj6D1GdebVAw3xfRtYzNOHMvY2kUFeTD5sqd8DaEucNx40DwzUIiPWioRlWy84C1ePmYNPECTRgz + prmhPoU/TXg7nQQ/sjfUjGZwlZKSInyMCRsmMuQy4XCzfyQSNqJ60hucWWwyrqvVnWYKVDSgvHyACZKs + 2/EoBLy+TM8/3INhmM6fwuDDZy95CfEPi54pLiqE32SmIwGoeH2YsIa8nVwubgWTEKviMI9GM0QQWUgI + RXHYI/5r245b5lMZ1wJaRrQ0TuntTrECNlBQgZ8Z7eAFER9m89g0T56N+JB54/fswMYhIY+nIBAgFYAz + qJZkgYVo28iIS65zVLLjhVfM58ua7mR9kDChlRQXMYFYP2Ro9+ROU3i846+l4hO5B7uGKs7BE6qrqq6p + qMh9yTm03Zrd2ZgIIsE0QRH2gXY65JGn7Bo8YHHjsJNNZXCgWEFbpJWrk0jvkxhcxjmzA0KIpgUFUSt5 + Y2okx914Whdi7h1l3O83sMay0lpBjE0UE6V5iA6ymU+Cu5vFU2o2b7KLpgRjzetxKych87oZogx7yzC5 + zMCDDExxOBL1+9UvFcyk2AaAli1P4RCbugrXdTrsXR0j2kc2J3NXKkPQgECFfKAdOSJsuIDZQjZbyKaF + 8mysMdUG20dt/BXmHgJaldFocTDEsapJqg3ZwaGVp5zioQgtiEFqEhm5yi36YFK0k/eOLOf/+rTG0p8U + L1jK/2PrY15gIhBY7v9j7U4+ItTkyDxeWVmWLDw53BOodA0ldaNZfOsyepHUOYc7emSl5Ti+lEqIlZ2z + 3gdHiDDrUzJ+ZZbk9ii4mH8tr/1l51ttXYp3Z/A5ZGYUk7bls8daIT3taNElikaLWyPq79ClD8HsY4zz + Lhr2ljKzYNEgqlYcCAQdDoVDYIyxKUxSm/FLtY9ALJsWdbgDdl1ZadsvREukfWlYadtXZjF3qIGCHKtO + CNTBxwvn5cH4JNRflGcrtOUV5g3Y+D3UCXZgZRG1aQW6HiK5Vt6IaoAZC60+vKHYb/AAYPQgQEPgIO0w + Yge8WSw9hzWLKYuZgYZJRaHMBmppafG0qT21tVWDvVO5Oy+H4ll9a86RdmTk0lKed2VFWW1d9S6rlq7b + fYWV8CRrc4QzsuCXp2gn50TYd1jvNJdeyuhY8pT93gwUAofP025utnhLUyq6sQMeSGIH/eZjHkJlDrcD + gym9t1mQAqRLM5f1NSfJD0cqisuGyi2mIkCDn10yN6NhaYF2bAbIgWp0ChASJknRhECgSyTPFs2zCZhJ + ssl9BFwBWgV2R6nTW2B3+vNsChq5igGKykw0eyzN7VSmJ/vTGNrACQG54rw8hJHK8/Iq8/Kq8vKqB278 + hg3aGDuI3TR7pe4usjs4nJOoS3Pa/5ZRGEekEuE0liUWtILxEMIkSJbmJFdvmUHR4BGCq6C2pkosTzNZ + fgnOtseTkYHEXUNwA9QHyzfi37LSGxlNTdt3xu5BjWVIwl1ZtsAwRNJl47EjvVNQEDH4zXRxRq4/Ky2k + rysqypqb6ydPHNfcmCpSaJwNmdYJ3aPrannLhvCT69g1moK8Fokuxn8ZT9lpgWZ3bzyj0sKiwmj+/yKo + x62CiaBZfKvZDbYqzMZcXl0WEG2NLaNaRkKxSYZeCWN4xi/TPrKEECiiazHYA/AU1IE0CsOwqIActjKH + vcxuB3vYSvgv0GKzVTkcVbxBEm8SboCQwiEOKc2zldo0jDbOBnByCeXABBQNWDKQyXDVKltQoSA7Kwjk + bIBfTV5eQ15ec15ea17eyLy8toEbvxmRl9eSl9eYl1fHnpqj1qGX5Nk4nJNwqsFYmLYDh2oHMZVlTt1P + e3VwS8rMEpbNfj6R/vlo24imirJSZo+0FzV2EIGPdLO6xPv0CKecMdYvndmeNIJJPBrBnZ7ZgUO7N52l + pJxRiE7oqsI2UgJ9eABQRq2qKlfLn6L8wtryoUzoVveVOnoqclco1GMaWCok9k3K9Fjvf+6FFHVzKgJp + s2lldjmKm0o7ifPgUmfcq85MpkbI4UAFeT7fAEZyLVgnXM561/3X98QgIFyNkqri5hubCRIYiDZzAM8I + s8UZUgnvRZ3QHGlTYTZlY2GxAXvSx7gd6kA74I0VX43NVssmEaVewk+TzdasaSMdDqQawaFkGzgEUDXJ + QziWM4BenBB0BMy4loIlw0ozeyzhjMJohJhDVBIZC7QEiSPBI4LqXatpTZrWpmmdmjZa08Zp2gRN6zFt + /Hc8m8021mYbnZfXIUDR1mATViM3BRhzUWUXGg7S/+qkmOvoU5OYCLfnXIuDOZnsMsr84R0Z8lcV3y/u + orR4qbpD5Q3m2jXDd7x0uSQoVmLxisIb7vGQxQHRY3CPwJhaNGf24nlzw8EgKYkopBUV5avIMNNEOJCY + b2nx0pnuxkVBwYQ1cTI9VVopB64FJ6KpqS4LiAX8oPNk6p03boHDSfdJ65FjgYJPOIvmqQtBCR4zpp2k + oky7Lov98SJMnzKpuZHp97//sRJuiTP1ElJXnJrdgxZxjGySMDcgGfUjmZsR/MM445Fg54EQAvMkXIF2 + GFLK2Gq12UbYbO02W4fNNspm6wRa5DaGTdNAGvBGbd3Glpc3IS+vOy9vfF7euLy8sXl5Y/LyuvLyRkmj + jXNyZp4N1wJoQUSFTLzbWIfKY0kuBUQONvQRiHPixYpij9rtlXZ7nd2OfH6n3T7ebp/kcEx1OGY4HLMd + jjkOx1y58YX/zpR/6nU4JgGQsgFcmpviolioADCXYx2goNdwkJqHCw9O0sVNVZNgFWUYAxuS8QckAEuI + ZCVze+IDN4e3c7momPTSpcBmfX6L7l/OL2xHu45ObC7WbdbttHQgtA6iKcPEGmUKmzW1d+rEHjXhWq/e + Z6np/72dhGWWUsqB/pwwYczcOdOQFMi0mS2NDXNmTTPKQWR6OJe28hYxIwx+6Na9CypXbMjXmAlvViSW + hEIgd6ZdkfX++FETyrChg1peVJJMq8XAp4TpcXFJAsSQxSa5HmADG19U5oDBPUnIhIxDQcU3AQaAQGwy + 8K/aZquz2TDyWjDyNA1x+lF2e5fdPtpuHyvxZgKD0+GY6HBMltAyRWIM2zQJQmygTuLNbp+pabPYbLYZ + NttUm21yXh6wBDpiqIFMmIyALgAMHAJOALMw1NB8kRDIxpeA3U7dmSJ8sHY70YuRdvsYCYFcd77Dsdjh + WOZw7OxwrHA4VjocqxyO1S7XCrTi5J/YYRZ7atpkrEN5RQAYtyrAD/RyLfpQGYVqDWF8hHPF7eJlNIJ5 + QCBmErnOQ1utycqQK8zP7xk7Bl9lQrOVCRnPfOIEG1O1DYEueUKYF3+boa82TO8jMbiRI5tyFKJS4/bb + +5EO7gEC50IlduhcuhlkWX57Oym+ZTInOtVj5a8s+rLjT+IDpHj5kCxNsAuZta28HrLiqNfKnkPylHjP + EQrIXZs008YomyDtUUIcR1hr8TviKC6IRPEIxf3BDE5xuXFmoqaZt6JIK2xkyzeVFJX5fSo3IJBn81Ij + PmZLKfvGzAERERf5G84MlCJrRHQE2jcxv2qHY4TX0+H1tEvkGwfmSYwB6hTIgSLK0gJRFjgciyS6LJHb + UodjR4djJwlCalsu0WiV08kXtpUu1866DiCxp9jfbl+qaUtstkU221yJi4AiJiNmIjYiZij+UoAZfMIL + SilbIHDpokVbDjvsvDPPvO+uux64554Ht217ZNu2x7dt++G2bU9v2/bctm0vbtv2423bfrJt20+3bXtJ + bXff/fLdd790770/e+ihu44/nmZw6YWaNlteDvTlWjUSd1kHsBpIBoQ8LyY6KW7T/1BJTsIjUliY/w0b + hXJmCFJCx/DZmH0M/BVvEI60hG+iMFpMNXUxyMqLS4vyC5Q4zvAp6NJLkyaOw15K++IMwQ4sT4pZnlh4 + S4fgYilPIYp6f7OFQMVT1GBZDaMsgpVOwzP/jSGBlfbkuA+Tfk1lBW+OlfMAhFZItlZOZWUfophlspCI + lZ2Hap+CaLSro414ScITAn51tdUV5aWZjgGFTAqcDLNPkVYUb0VhnsFbARuYteGtsOFFLNMdtX4fTAZJ + Y7ERdA3DvosFvYwwm+EmFakj0tNoWFeFyJfY7bV2e4uuTwj6ezxu8A/ww6oD8wC8nf3+taWl+9bXH9zW + tqW7+7hJk7ZOnHjJmjXf2XPP76xb95099rh6zz3v2br1gTPOuHXjxqvXrr123brr99zzyhUrLpg16/xp + 07aOaD2mtvbYirIDfN69HI49HY495LYGc42fmrbKZtvJZtvBZlP4hFu1XdMwDfGUgoXEAim/iSF40MaN + 99xzz5tvvtmX+efVe+/dUl+/VmLzzpoG+k632bBEIdEQrcQ7SmemBsLBD10kB1j3gQzVKBx4Hl5SK/4b + Yf/JlCFzShgI6vdSglFI9uB7E7m/GdpcxoI+dZxPZr5vPzWXk8HLYeC/wAU45qiNe61bZb1A5fA8l/6z + fsOe3JiAegakpiG/fZYgpIKCB0NyZs4m5cEyHJhDcm15EkY2SyuUJuKGOG7Gwakd7CMLE6Y3lYaugRlk + PfKqo2JjMSafooX0RmkxyeyJS1sURqNrVuzYM25sXIQvxQnNhiBjVwTDTOBnkFYUV1PxVpiyBUXTlCSA + QcNWB3IQM5N/ZTcAErhWcS8VZjOyEVByM4Jt+BhZO5dKFGz3eidHo4sqK/fr6Tll1aqrDjnku+ee+9QN + N7x8//1vPfPMn19//cM//enTf/4zcwzq++SDD/725pu/feKJn95ww70HHXROZ+fRkcjhbs/BunN/h2Nf + h2O9rq/XtLU223Lg0G5fEgxM9Xjapd9SYCFDUcYFF8yde/rppz/yyCN/+9vfrDfjy88/f/S44w7T9Y1c + yOHYFei12RbbbDMJYUrvKIhLpw0GQubu3MfMEA74xMuvoajoK97fzDWkBBlHgqj0f1ide4U/1q57dfew + MF8g/a/ddSfMz+HQXhrWZ/lfnOuH9r6AAXJRhqr/OU8cD4WOUn0lMDImRDKEvSei4mYiAK6zRMKDsPkj + wVBcXIRlJpaQFTUZi33OjXLOLDjlCakonEioU8bKag9lp8X4nCxu3U69MBrxezwgDTWOVbRgcFa40QMG + CioIZMMHDTNP4Z9BWgH5gDf4jQLtYhTNFgJ4lA1CjUwGydpgi+g6/kwcfYoAouJeanI3YyFMD5cMtlFJ + eWR9/cJp0w5at+70LVvuuOqqH/3gB3/+3e8+/sc/Pvv006+//to60mS65+f//vdfXn75iWOPPRczUde3 + OJ1HeDwHORybbLZ9bLbd7PbVXg+WKCiFuYaPFGsVmzWCtTp+/L777nvVVVf9/Oc/t3jRj995577Vq0/S + 9WN0/RBdF7hrt+9GVRybjTilAkIuQSezbsDsNlyjUMPJn4PC91/PLrP4ynzzuyliqrI1rb9T0hykU1k0 + D1jli9/n7s5UHl7qIqFBmnsGZY59atGMYTLFl51dkaAcWzgch2c0GtI2IG5o8V/SZoU2rCz5HQ5BGOOL + bwi9kQAPITc1NmXFSl8CuWcmC5+fLe4R4/pwurJnDg/uDV4UxkYWNShSczKFOeuJ15FKUaw12WMybD5z + fpuRyVCcH60sLVFKzCo4Z7glB/AvTO5QHJh+zV7i8hbbXSo3HJsP8IO00igxb4TkrQB1Bm+FAF53jLfS + 49AnsuXZiLEp1gkpChxO6EthIS5WLiEQN2YOrlm16qYbb3z5pZf+mZWRZxGHUu/2zz/+8eH1609zOk/U + 9aPBKrv9cJttg822q7TYcF3C7YQ+Q24i2gRY4j3d3TvssMMJJ5yAUfivf/0rbRs+fPPNuyZPPlfXT9P1 + 412uo3T9CJvtALt9V03DDTtNnl/FCBVZhsCaV7MzjsWDs+VRT/Eb43OlnRDM66fhrnchsM0KvElbMJeU + AWO5z3kIfA5ZoaGQN1BRUpo1oz1TbE/48MBj0sushCrBfxInku1pfYmRdgzJKHd/DZe0O2e3A60N+YPh + UHiYKGScnxmcTdltjBuwR/3GSldbuSmzOVhYUDCqbURNFTI7ZTxQ/gRtB3YA54mTwDDOzMtJ5v4QPrUs + TiUlnVIFHhIyXQ3s5Aspod3jR0M1ijsPBqUi5piJnYNZLUpjM+h2BeQ7bQT84tibcbxNlR4eteuluqtU + s1doWo2mNcqsAGHqSVakwjxYmoq3QvRO8Vbm6fp8p3OeIrDIGBv4AQ+zK0Y5UdEvw9YhCU/RL5fssMNZ + Z531wAMP/P73v0+LKMO6wzOHHHK+rp+h68DhKZoGVu1ns6202bidSXl5OEhx22IUlrhcE7u7p0+ffvDB + B992221vv/126la9/9JLdzY3X6rr53Fyl+t0p/METdtss+1ls62w2ebJk0PMwYDG+6rSJxAg9fBuqeUL + oMj09A0yja28pOxDw1hiJSzcZvEMaXdTkSaqamhiCZf0oywZQouDX1VlFaR+hZlYSkuLFIOG9yvhecSE + E8tYyyDcRrOQK00RqpGGI4KCCW6PPxEvJSyUi1uck6t7sziLEW4Z7H/DDkCOhOLv6gnQHhYLVkwfcXcC + IQbcnYh1hcPQu7KsNpV21MQaGQ2GeZapLRJrJ8tgL4mIQx9z5rFgdDbU1fZO6KbzWdmgTJ+ShmqLBEKF + kfyMtCcyuE8LuzLqmhrqconRYuaOGd1x+ilH93RDrd/+YVyVo4FYWGhQWlTSnhL6Ah6V6mac0macZpg5 + U1sBoeBtsr6RlEgVq8PuwfppsNtxeKrEuJ4YaQXMg6i5xO1eW1Z2+IQJZ+6009UHHnj3Kac8d9ttF+2y + C5QTkSqgaeDHMswdp3O2y0Ve+QBzR7VTpeKR/zBu3H777XfFFVf8+Mc//uKLL4YV6lKf/JN33729ufli + XT8L0NK0EyVcrbPZlkqjDUSnQ8iUKHU6FRAedNBBt9xyy+9+97svv/wy2Zn/+swzd9TUXK3rACEW4XkO + ++madpTNtr/J3OQZG/2DX9TInVBGPDNJNBTyunmw38pPbuSB1PMzWIseTdoYnhjDA4MpsZ4SKJO2ck6/ + +G3MuZqwl2XRYKcLSM6IWZMWfijB3FBfk3Cy4JYKC6JCPsDCc1ee2MGAygSKWNzgqVnwSAdpCAmECwU8 + nnjqAYYFFHPYDaoh9FdlRbmVrDjIwaSLxTmaaaoo5xSEdBZP5RDWVXLeF+fxuikVa5UAkrbzLfTrt2sX + HhmUUbFUEUWCUgbDCai4PWwpOgGLKjslcUGqtEDPA67Ly0rT6gAM7uLtfk6bDdInprByEZt/j2XA5veK + +J8BgWYpFqVDxsaUqjbifIq6qWSdlXVoeEpFrE4aZyo9XDFWauz2Zru9Q+YtzA6H17a2Hjp16mk77XTN + wQfff8EFrzz44Ns/+9nffve7f3/wwVcmDPj5/fdvcDj2kUwQbKk97fa9goGV/sBUm4abFB8p8UK4M8pB + ClOUDSAcN3o0bsbjjjvu+9///nvvvfdfBEIu/SzUU12/kM1uP0PTtshgIXYbBi5wRZ8I5TaPZ3LPRIDw + kEMOufPOO7EIkwUy/3D//XdWVl7rdF6p6xfp+iV2+7madrzNdojE1x3laTGasTWhyeCCNiKpynvc78qW + fr//915qMaMOVJMf8kmHt3WoEr5VJt7QPwUcNhA6kk1q1q+HfUYOjcVcb05Lqdv6uprB4cB01rN4RtIZ + 2D8LG6GphHa3YhJbf67M7/n54WRBSp/bW5pf9E0qc6ZoubRrQ7mYO9a7JZc9WW0ARYMHGGO5ML/AYiZG + XAMYbCixZREvTHYjA0BO+JrykKGj0bhK3LqTyc+I/Jm/UFU96PVgw4n0Oyl6orQuDVaL1M/s3/hO2AmH + m8pOU/JdZsEwEhhUejiJARXBYFdV1ez29j3nzTvtwAO3XXbZ0/fc89qzz/7t//7vi88+SwtR//jjH08p + KTlS1zfrOkYP0/2+DjvWoXItIiem0gOU0aMS8gISCAGVDRs23HDDDb/61a+++uqrtBcy7wAI8cEmw5r8 + PPbhO7/hVJlybX60fv110nq7TILWsTJSiHU7R2Y4AITVLBEKC6b29s6aNeuII44gieKdd95J2OC377// + 5sLCa3QdFLxE16+w2y/QtJM07VCbbb0EV3IWydDojDlFWSKwZFESNjxcF8t76/NgLq/KMB0rhTOrROUc + 1l0JPswkuHyHLBo3THfxv3Ja5jsmZYukPul09aPcanH/hJ2ASddQV2PwEjE9YYrk6BUUFdJNdXbiriuC + XkncyMP3mIAQFQiMu0R9fc2Rhx3Y0gyfPMGHkW0x7T3rlpOm6XN6XY5+Nk2y8+AcbqipwZsatwMDhiQ8 + XPfWG4BFrvpBMHe8PGsrroqkpzfTW5RbUoEcK6zq8pL5s6a01te6kYOJZRoo56d5U38ydFiAwO2sFpsN + +U2VwMDGF0guNTHBMHZjZyXrbGChSuODZLxy6dIrLr74Jy+++O9//QtIyQiN+nf++ut7V6yADyJibHY7 + po+KhO0sTR+ABAcgRmF/GMxuBwsRglJAuCeJgN/5zi9/+cvPLCCu0TZwDuz797///eGHH/71r3/905/+ + 9Ic//OGPf/wj4IRx+dFHH3366aeAokU4/PzDDx/u6rrB6bxM16+y2/GOmoEQzTaAsMbhaC0pnjp16vz5 + 84855hhCm++///7gvnrz5ptvqKjAuLwCTAUL7faLNO1UGXfcNxZ3BAVxtyLqhn6NSthnfdAv5OZw+Ai6 + WyT7DRprTEfOmJ+MoZtsdkobPLP+jgzeE8/ZrJkENEancOH8TwO9uGXcdBgoGc3+zPVWltKCY5CREzaX + ZyWPJd9xRHOTUeYmre+ro611xtRJRuya9Q5IPNzMZhGXNjlUA0F/Q32tMBMdTGjD8lHpg4JcPNCRW1Nd + OalnfML8cdBl5vTeqkp8PEP88bhcQvRZOvGBwIDLT/w8tc4RTQ8FgoOHHD0pHE3W8nVZCkztnTB7Zi9r + HV5aHnp2FKR4yy+msWImuWAEdI1oXrtsSUddg9emKcWyqN9bGg1DWo1XNYuVviNpvdhmE6wWux1WS4vM + YVCUTja+IABtZDIoWWdldggVNCqnU72PIjV2e3kksvW44+6++27yAT755JNsUFAe8+q552L9wAo52+EA + SMDCg2223SX3slcahbUxYiRuWIAQp5ABhGQjvP766xkBITYfKAgEYkr+9Kc/feqppx6Vnx/+8Ic/+tGP + 3njjDRAROOScVrDwne9+93a3G4uQW/iOpp0lXaNYb8s1bYHbzSBolkUt6gsKQG7cuVu3boU1CgbHddfP + rrvuQo+HWCOWpTiV3X6xREHOhn252mZbaLNNkUHHOBRkgdIfwZWKGFm/RVKbsJ87rbxTg+dqRnIkJMgE + WeuFpYAxLofcUnV1JYUns76L/4EDmRwzKGYvb8jtdIt4b/KHS7diTJAZRkwu+yGQeeeVlhSPH9ulZnYu + HfD4U0fjCC/xGXidYW+vJNb3xwjpxl1X7XjLtRdv2G1tVX45aSoJbzqjZUqybsPwlbzt/r/zcgb9/mQE + NroFFMwiNpb6oQk7HtW0mHQLAw/6khmezWsXGUO0mlGbdrDgBN5zj5VLl8xTRKq0Ufe4E5qNPyXXYnBb + FLAphouh21Lo9VaGwvkOp5JuwXQbUVU+fXxXSUCIIyhoFL5QnoLM7CanjXgezjogEFbLaF2fHc2fn1/Q + 63RO83jmRCI95MAR54uphdXIfG1lkHFCCPpwSn26DiDVFhcfeOCBl156KVjy97//PWsg/Oitt24MBrGE + gIErNe1sTTsm5l3sD7PFgmGwcnDGhmNAuH79+quvvhrowsLL6OrYfETpXnzxxe9973vXXnvtBRdccM45 + 5/CT7/fff/9LL72EjUhiRgo+i7rcl5988sS0aTc7naLxDsclmgZxFO8uKL5E0+a43d1uF0Y2ZJnG4mKA + EIvwqKOO+u53v4sBaub4vHzjjWcGg+dIaswF0sWKLXgaBBlNgyBDBj1SMkibki8BCpJYYtiCKnyrPARq + 5GT9MTstZJp7AhYbpNRgQHCKs5soRI6TO+mxzBsEERLSyL8lViBzGs0bKqJ7Bk9KPI2Uph59N6azvbN9 + 5JDPpKlbKXujf6B4yB3XvyH95Qz6Tu4KEIpyE3m2onDB0Zs2Pv/Ydw9dv199QbXXkYBOBvcHYdncx1yc + fcwTxOxjG7xcpRNZA8ITyfS+0u5vduDQHliTnR0jiotE1STwKRQKoh+o4hD8hsEzhINb3ZQVnvBgCBTI + J/PADAg0XJpmbqdRbCgckysDqLDb4G0SXakJ+psIaTrsChdJcseQAkKoeAAKlptYLVODweX19ScuXXbt + EUfcdfbZP7r//qPnziWTAVnO6bLKQWds5jXLOuP7hiMDIDVVVa1aterkk0+GsYKDMSMoGhCx++KLx3t6 + gBN4ktfb7ZdJSwgHqTAK7XbksNttIltOyJXJG8l3uWCNgiv77LMP0PXWW29lCoSA0G9/+9vHHnsMgxIT + DQLq7rvvvm7dOnIbQMT77rvvZz/7GSZjmtN+/fXPjz5aNRtWy6V2O+bg0TEIJ5hHB1LpgvQJ+nxEVRUN + pnePPPJIbGiubqQSvvn448dHImTNn67r5zgcnOdCTYMmerSmHUCGvrSMjaxBUDBOYjs1CgpV4JzwccAg + 5V2GioUaMGvdtO9g3A68hiJZQYQJEhPFFVdz8GnlajJ92b9M25PF/rQ8IdFUsin/q9QkLI/Wlsaaqorc + p+8s+oWHilNbXVosFqQF9l9pSbLGo1/qpjJ5nt3jdHU0j5g/ZXpbVXOhL7+8qJQcD/PsT7NJORgmPkuy + uAJoMXJEU01NgscnBBaGKMkda6+mpnL82E5U7YlGTp06cUpvd47CtiJqWBAlYydhz2c0BswmoJ0UKFmZ + yJzboBIblFwnyAdtBKIgsKcUy5RcWSWp607n/NbmyZUVfDeEyqI2G2tsIBBiJ8+73ueb3da2z6JFsFru + vPjinz399N/+8IdPPvpIwdJHf/vbAfX1CE8jRY0JgpA05YcUO9HI5xPUTfjSTmeJ3z+6rW3hwoXM7Lff + fvuvf/3rTBkrZix848QT73I6b9L1axyO6zQNygmIAol0jdezyO+jQBJtECUdJBAWejwTJ0wAVwCw66+/ + Hg9nphkUX3366Vt33/3YMcfcuOuuZ86efejo0RtGjFg1ZsyCefMg4Fx22WW4STEZ//Of/5gji4pcY4QP + XzvxxJtdLlAQQ/ZiSZPZKp26aK0BXVNlsSQKDeJ/BghHNTXR4BUrVpxyyimPP/74u+++q/yuf3rttTNG + jjzG5dqq66c6HOfb7edLFDxW0w6y2fYgn0SqqalYKasBHrriDcXpayezBQVZzwJp2crsRxpA2B0qCETI + 5mLFLF3vGXxA0Pa2lpaWxkytSW4hbYqtlXZoQ1pNwbiiC0mmgnysiEzvy0qbB+wDvAB4atZWUdwhXONk + 3JrYAUziE3vG1tWxROv/2G2ikuSQtA1nHS6IXOg5qk0As9flUbkcIs/U5mA0Qygd2zZqXHtnRrI4/T2f + QxBCNcncP4K15Pcl5ICBgikWjxk9NRGo84jyyByFwM24cZ11tVW5RFNEx0ogTGjLqvc2bmIyB/xMyEfC + kyDVKPuPzXB+KmKnYfnB3lTcFsBAIZ+gt9hsDZoGF4ONON9on3duVeV4vw81E/KsiasJ6U6qv8oMv9nd + 3WeffPJ9d9zxmzffNGcvmNHoySuu2Nvh2F1W/4H0KIJScjbHHUfWNurYUYedToS0WRoI1kXyMcvw9R1+ + +OEKCDMK1MWZjx8899z3A4E7nc5rdf1WTcPHSEIeoLIbxRYcDhRnuCnagEUr7Fq3W+Xk7b///jfeeCOX + zhQIP3jwwWcLCh53Oh/W9e/pOtfFsLvC7d5cXb3LypVnnHEGfBZOSygR8MMuxJWKAUdgDw/wBx988OG7 + 7758+BEQZPCIYgtixsVlOCj9MyGxpmkiiZAKUB0dCxYsIIkQds/LL78MxH72ySd//d3vLl269MSS4qPd + 7uN0/Uy7/RxpDYOC+Ff3lIwhqKcsR8xSanEpgzl6RK2/SgTag+6AxwkLOoo+e7JqXMlOCAdt0qRxqGma + dxBLZJPBqpKUrDfJ+p6UYvUg2StYAkP8IamPZUEGOjBZe58wDgTJk9kFr0goUhwpNBKfmc4IyUTD8drK + Q3yviU5HMJlqXszXw3EtImpChyznZHMG67Id5k+ZjJNm+wdPYG15JeVLrBsu7MkjsDhGU1CHGC5CuMfC + fSncNTeb5597atTg0w7R47MBtKxdYl0qWq/EH5inDJUyBXhGVkM0ECwrLGSJZ8h1quCfsv/gpyjLT4Gf + KDNrs9XLWuogn6K3KN0W8vZEmT0p4CJKmZvK4+GXIxxIfeQNe+1FpsFzzz33l7/8JaEP88vPPrt89uyD + HQ6y+vbTtHWyogITOmfDFqF+bJ3fWwjJC8PU4cA5WR4M9U6atHTpUlyLRNrigl6Zukm/+uyzp0aNukfX + AaQ77ParNe1MTUOxjGYgJ0b5PZCgRvp+MQqLY0B4wAEH3HzzzbgZMwXC/9u69UmnEyB80Om8T9dvdzpv + kBkLBOrW77Yb3tEHH3wQQxPkI1II+GHAcYP/Jz+/evLJR+bNv87pgttJPO9sCWDYgmiNKuhSeX5wfFiO + QJNBVqaMsk2LFu2/337HH3PMeSeeeN5hh521fv0xc+Yc1Ni4r8t1iNt9qK6fZBdZ84QYj5PJEttpohQQ + lkZ5SzAwuaWhIhRU9F3DIzpEA9jSaRRoEVNAtcb67BFblFMZeIARKbiQQlOz/zUnqA+pEH6+paZktJOU + sxFaM8PAqZTurkxaAwE9wyO2n11di44rDEfRQDHOw5xeTb56YQk+wEzaktm+IjUns3vN7PzDtzdskQVz + Z45oZU2//SPMRLSVY9mNCa8+GDBEMoYFVVmkeUa0Nibj+mLkEZ/DPrNYe8VoGwg6duyoUaNGmlceIlkV + d4cmio4OIdsli8dBd0EhxtxUA4UNXGR9RpcZ1t5g2kvE5ysIBiDnKW0zI71PQaBS7ATJGhx6k7T5UCyD + 1UmBWaPSHvGzmS7X8srKfbq65jid6JahXsZEjF+OuRhjDjoMqNnq863caadTTz2V6Bfze0KUevfnPz85 + GEQzE3Hnw2ITMYEuzBFh2dhsmDWi0iyysTKJvrawEJts9erVZ5555hNPPEFFBSscyxQA+cYhhyjj7HaH + 40ZNw0NIHgJ4ALRMl2xJwABQwcFbEgNCDKxbb701tUpLgit+9dVrixc/5XY/4XY9ouv3YoNKS/RyEhl7 + ekjSv+mmm+DRgHwAIfeFj5Qw5GuvvfaLl19+5sQTb6+uvsbpZGdoruc69HM0+1ZNAwXBbGXAifRHPNWa + xhIEp6iyyKd1do6rrBxXWNgTDEJH4klRWXAXhwMT/ADZ54eDhRIFD5MEGaWsrUKDQrA0L29sVcX00e2l + oaCROP+N2YJZvBFWDuH9NSMT3sWyspKh0v2nAaykmWiyUxNVdpeVu8h4H4v2ROrzxgGSuFWIvg7nkDgk + E15aKMWEogFfIEdnWsb9Ze2A1Alq9I9FTXQefMC/XWQVKzwLxyyXw/WBxGcKW5Y/ZVGZgfE8uqu9ubne + UOATxVAcHiHe7fWUlBSa3x+F4jIyktFSLVWPpz6VMPtiEKgMPrdOdFZQUY0cBoV2StLMvCl5M+FyVFag + zG0ol7ElIVfmdHbouiozi2IZFdXR6lyan79x/PgzVq3aduaZLz300J/eeOODP//5kBEjKCdLdVnq1TGH + gmHCsSmlXkb5/bOkuNc111yDXy6h/fTsySdD1hCFDhyOY+32A+32XTQhmAmgAoRYY3BVFBAK3iaoXF+v + MvkuueQSYIN8gxyB8IMf/vABXb9b12/CKNS0yzXtZBkn20Xei/KOVkpQQahpck8PV9+0adMdd9yBlZaW + 3mmGwy8/+ujFsrKnXK7HnE6uiBl6C0CYn3/xsmUQRxEC/clPfkJCoQoHgoWc/5e/+MXTV1xx9+TJ10GN + cTqVBOgFkh0DdOHCVQa0QsFRoKA0xA0UHFFUNHPUqP123vn6889/+v77f/H882+8+OJbL774yx/+8LZN + mw4vLj5I1w/WdTyiR+nOTQ49zilK5wt9A4edMJRCQWZoiyObt3go9aCtTUrZ7TWEb6tqAIvRmspKEqIy + bQ/MPgxTizNnpif/X92fetyoUAa8YrH/rboH2oObkVGeuweV+6qvrhrd1qGKj3Oj2aLIUGJPXG+bb5N1 + j8uug4Vcj4VbnDlIraXSIpSDEte5zuIhskogBTbhYisu2wE/p08XNZPMqQ5KzEzF/IwStSrbQW3UWMfL + UaBpxXL2ZA6Fc49oNRgGkuHznOF2r6qt3TRp0lWbNz9xww1vPPvsP997Lw547j7qKFTK1jkca+12SBao + kFDKHODk8HGRyLSpU3fbbbfzzjvvmWeeGVyx4YtPPrlrxgxV6OAMstodjoPs2poYEI6IUfYFDVWWmQUI + u7u6ZsyYsXHjxuuuuw5riXBapu7QuP3BnKeam3FUAkt3aRreUWDmCCDZ69vZ5QJg2iQDU1SiD4WmTO4F + CA899NBt27ZhumXE0/nXyy8/7XQ+4XQqILy/vPyBnXZ6+MorH3roIUxbCueag51ff/XV7x5++MGlS6/3 + +5E9U7agUj47z24/wW6H3apwC7QWtqCmYb7zBGlnuds9t6fntK1bH/re9373298mS7W8dPFijEK2Q52u + EyLRQ/yB1bL0LlmDiMypAK1KX1Epg5k4RUXVl7KSYiW5/v+3j6iL4EanPTM1YyaT4sKC4aCy/2/3vzIv + ckRBOtdsbw1Jj9CkaCgc9oUydXzLxlClaPv4APkK86PFBQRfE3sDhil7JsdeTdaNeHGpQMsqIcd+BvkU + E1hEJ009Ewd+CHgabk9QEGYq2QWGkmcc21PlOfRvNhuOPjbwT2Q+UJlW1pjFmYkXdFIwuGNDw/GrVt18 + 8skv3Hvvu7/7HYSNFGDzp5dfPioQOARXm6yNR073Sk0jFwL3aW9ZGbBBqgNuzCeffHJwNvc7zz57hdfL + /H6mVI4+XtMOlEncTO6QPszaLqAgflFklib19MD+gDJ61113EaXLhSlj3NRre+/9fV2/Q4YJ8Y6iLna8 + Q98Sjuzq8eAkxNJSAtY1Aggnz5w5E7mye++9l8yNjIzRP2GWOZ3PlJa+vGjRb88++/1XXsHmA//wfxrK + Z1998cW/333317ff/ujy5TeEw0Cg2r7jdJLgcY2mkeFwmt2OJxnnLYJwixz2Xltep82mUBA38qT29pO3 + bn3s0UdZJdBCLOaEZuvL9923qbhYSa1S1PBgj3edy7Wj3bGdbiODxDBFlY6aUhO1viTnzc00e9vKW6MK + D1lRO7Fytm/VPkz2VnIhWGFQIiKF+5STYFbmPgt9qzonTWOUXZJiWmfEDBUH0tyULJKEwDz0Zbo62qwb + /kT1mhrqE+rCZP2QCBPW11UPX7ZGKOhnCOYItOqxDrRExRyknJ+AXyTgmzims7K4SPk8BdVFFKfVKF+i + Uh3MbE/YcqSJVEn1MrUxY7LBp1AbvtC2QGB5d/eRa9Zcf8YZP3vmmb++/XYyhudgRGTuvmXOnBMIdMny + dcf7/fvoOp5Syj7MqKsDCHfdddfzzz//hRdeGFwM7ydbt0IVIQ3gXKntQnCOMBXEUcKNIgdA5tQL3dGY + X7Q8FJo6ZcpOO+100kknwSsBPzJyTiaD8/fuv195R2+GwKJpJBSepNk32R1YSCKzXsmVQduRQDh79uwt + W7bA0+HqGQHhe9u2vXPllR//4hdfSiuWYxUd1Gwo/+fDDx+hRIauA37XQ6WRP2+kVXb7TZp2hbRWcYpu + JMOBUF/AN8elC3qtbB4LmsldXUcfddRFF12EwYrfmIUCHCVk1biQYTq//8c/bjvppH3z86HpchJ+YlmS + O7/S5Vri9fbabJ0mQVGzOchEw3ySReQi67d18IHEv6vKh14HYwhbOKynguLQ3tba1FSXolYSk1v5kJb7 + Hqo7ysyzmdEcCocqFBj+PJKh6AlmdlLooKRaPxnrmoqyUitUT+vnJDBOIZFhEs81/KUZPcS0jVeGoDnV + obaibIeZ08rCITyfItUBG92uKfAjoqaS/Kqlkme99JgJ3orUc6FQLY4+vvObrnB4ekPD2nnzzj7uuIe2 + bfvrn/+ctY/xF9/5DrErQn1n+f2XRCMH6vquDgd5gbNbWwHCvfba6/LLLydGGGe9ffnpp9+fMoVMAJS9 + LrfbEXYhh4/6CRQ6UIWEYKmoJG5RgF76RRvLyxWynnvuuU8//TRTfEZQlOwGP3/vvR9UVJi9oxRzgEKJ + pxdX4UQK/IKCdFpBwbRp00hOP/rooxGCMXLysu43PKvxQP711+/jQd1jj1uCQYisbGCh8oviQCbhD5In + pFbM7tW6YwePe5ImeK0qd742Gt1xxx3pHEKYZ599NrklZO4jvkNH8Xn++ecfuffey444Yv+2NmK6ov6U + 3Ci3u6vTuZxkUGpX4RKXhrg5fV4JijL8igryJ4wdQ2WxDAzDtIM7kx14rYQU0zBxSUwtSWtgZNLqodyX + WZTIi55EGVxdSRCBMvTKDk0TU/BlRL6aRyRgWLkS50GQjP0tTqPsBglzmKRthjHmlqQvBL/m/9ECLlae + /uB9Bia891fyY0rC+el3CD+hMv4qvJ4pLU1thfkYT/15fhL8zGzPsapKn8MxiXrlkv9CCHBmVdVBGzZg + WqVOb7Ayy3/8pz/dWFEhPJwuF7YdXER8bmt0fe6oUeAWyQaknyNIFneqv77w4g2RiLIIsXUg8TPFY52Q + FY7EMwn1GK+KKUM4WgFhe2OjEnahIiCCZENWJv7rr3+x++5wR8lnuNNuv0FyR5FbU6iMkQRpli6Fe8LV + 582bd+yxx2KPIgFjpXOy2+fPDz74+OzZt/r9WIRXOZ2q7iDJ74fZ7UoQ1eB2CglQVZQxHJ48cSKFJpYt + W4YIHDTUs88669yzzz7t+OMPWbt2HRCenw9rFEsd4QK4o8vsdoRJl2MRFhTsHArS54LuKzNBGUvwhw1z + UNBkyB+trp40ftwweVOye0cyPSqZhJv5PLx3sMGHPKKUaVPZP24SBk2Y8FPYgllcYmgOEcI/drijSXXO + hNSk12cRnzkbZVqDPiMnLHEjBYEiefGH3G+McUCGg1tPLNks6jwQB87Myh3QKKwxvLWDwR6XS1pDjaNE + ktzwLwmtdGP/stHKrin3GZzz7qbAL4GQWApEXCU/7L98XSfCp1L9mv2+qdWVI/xeGIMqyKdSHRTyQVqZ + GwhsnDz59F13XVlcvMTnm6PrpDpAAZ2q6zPa25FoQScF3U5cl4NjeNYn8R8dcABFfJivyfI+Fi4i06vX + O2f8eOZlqCVYJ4NLur9+6aXYOgII0feSXE1CjND3oYwaAUI1HQsUdDoL3O5xnZ2cEIuHTAOQlXxz6y1M + vec7N9zwgFPfhhGm67fJzPoTbDYClqsQWNE01g1CIlwCIbn8YAwMl0zrEcIFJZ+dNsNeIVk+rS37xccf + //mhh57de+9bGhooRn+6y4Xz+UCHA+8xYdQFsWLx2M2Yg6T8s1CAqVVbXt7R2gqlaGJX14TW1o7i4rZg + kFExxuGY6HROcejo2AGHEJowdunqOQR0Xc5exoxEwTrpTmBo0e0qOqhoMoxSqYxraU2f8zsxXCeQEYf0 + gU5pdmaj1SXEQ+Q1LN5AMu00oZPs84f91HvfTp6gUQChRTSx1AAxnzq2J1RaOibBit1GkZ0gSwenPxlt + REC6ZczoF0tLN8sLwNAFazHLZic6jM7FYdjZ2aYGOsmRihgZty+/gQxC2fFcHgYomJBXaeWOuC75DN8S + IFQlSqw0O+GTMuOfkequvoQCvoJIRHFhDBYozD0l+JKv2ardrlqnk7AfPjFl/JHkrlId4GoCfvNDoX06 + O89Ys+aRa65588UX/yWVqa/asGGlrmMB4LTEIFjgcMzx+abLfACInWAh9P2ssfDdRx5B9+sqmet9qq5v + wSgMh2f29i5atIgCQMg9xyfUf/31IwsXAoTU/aHiAfwUcsNVgBC+BqYJWeFGOcCQrhf7/aWBQO/kyRRS + wDMJVwWmSab57Cmw8LN33328sJDcPryRcEep54CFincU22u+ptGrYEmHBEKoOqqSQ8KSRgkvQTtR00ZV + gKNwVz777LNUrgBHwUUrvNN/v/PO67fddllX12HS1F6naSp9nuUC0IXdTN4LgnY4CUi1JBVJVIxSmnDK + ZaoKF+vO8S5Xt90xWdPwPLOhpo0VSJoKVXzJnSdLBFtQoaDIVxmkpjaEE87/q6ci5w1jBva4+QaZsfPD + kcEV35hAyMFzQguPzbSKIMmx/Az5gxR1sI6p2XQpfDxakBHpMSEJijOAhQ7L1dizaWvmx2SEvur0oMv0 + aZPGjYUfJ8BPZosnWNTwV8zBHKPlWTQv8z74lh4RB35K3sxgfhrVHlQZW7Psmcr2CzNJoedJqp/D0eBw + KPsP/MP4mwiqBQKkOpy2evUDl132y2ee+fiDD+Im5fd+//sja2v7Ux1klEhQWiSxU2EhKlz4G5nfswAY + JFp+0NsLrQPdE6JZFPnbIAsAQWxBHZtiQ//4xz/M7fnXH/5wW02NcvqBOgQIVRWhZTIrn3mZSZkAYX8G + ocMR0fUKgppSNpMMfU5IiE6hiKp2q+JtWRe55TwvzZmDd/S2mHcU8g4Fe/eW9RwmOxyI6XTGgPD444/P + CAgBvBe2br32iivoCo6FQ0vWIJWYoNt8/PHHqWsQQp9547bb7l21CoHsjZLesquSw5aeTJHjqIpCyDAq + tGFqnbCBhUruHJep4LuyWtLshIfpWI4C+dj40ild0AQFqdhJXJCVByjIMDNKIqvcQasGztC9dipB1uL5 + +sllOai3MKfBxlQ5wczqhKhEWSHLDTDaqfLLjckT61NI7QeCpYXFnoHoyCFgCslRMMP7Z11U+F0Uuu43 + AfEJFebnZwSEsX6w2m9ios/oJtkZQTW2jI5K+BQF1CMF4ktCLMzEgkx4foAKgkmmAmzC+zxQnT2jVYLF + 8WrejRuFt0I2RYrBVllZ1txEYtvw6Cxk0ehsDzHwz4EqrE2smxT4GVBnkD/xRCEtTQEwI/NdGIJk+2ma + kPiSk5pa4GMC4q8j4LdDcfHRixZdc+SRrz7++D/Ahi+/TGH3vHD55UegJ+Jw4GEDEWEMrtb1eW1tCgup + bUSeOC5HK5WABl/ld5deSowNqRTIL2dgu1RWcs5ddtkF4gZJhHEVFX5z663Xut1XOp1YkOSwI3SpzC9B + TpFTM5omKomNIYKhw7TeLAspUK6B9HOsK8N4BQXBElyONJtsAbip+B4h5lgxtsx38ccrroA7inf0NpcL + oRnK8lGhkDoMBNLwJGNtjy0RJY1wJp9wwgkYdtYtws///vcflJTcMmUKvCECeCwODjnkEOpX0C2/+c1v + iDXCHeVsQPuf5YffcCP/+M1vfnr22dd2dOAUPc7tIvLKI9uFwJ7MoKeXwDAADPQSxFpGjs1G8hrzNz/x + oNFvTFjkP+DAqdL1erujgYx7mSAIfPITUi6Hs+Cgq5VaujoP443QBYNTpUxklDWR7Ssy4DjhsdMc+KUs + zrfKkLK4c8IWEvgsKSlS0yZWXVGkIOD15S6WIswnUXRYJBwbMypQl5+fQDd/wF0gLYmWqAyBSY2R9B5p + 9qTlKLIOxs5ceib+wYjbiWF1Lg8b+n5jQx0k4MEnobnY1NbJMgmbQfjQyDKRUTergynZTeU4wlKcFhgM + w3sU8cIEe/Hsx4xup0bEf4uilstTNo4dQHhhQofl6/aotHelbWak/amc9yK3pzYcKXA6BU+SNZMEADZQ + kKU92X4q4b3b51s7ZswZe+315B13/JGqeJZDZdRHJ9XheF0nEe1wmfmH1NbqUGjm5MlM8SQGYLL84Ac/ + IP8MIyZtECsOCz95++37KypIS1cO0r0lZRQJmIsvvhhDc8DOX3/94ubNSKVc7nRe5HBcREBOpgQQkGOK + x1hhjsZHx7xMnxBjV0DYKU9IRJMaRq+++qqRD0A7QUGwBE0ycAWXKZYWEtWZ3sLHr732SCRyn8v13Wj0 + 0UiYCoVU5iNvfRcq/El9gG7JWVVASCUH66UQ//Hiiw96PLBSj5UF7tUHDhHlJh5++GE6h2L3fLgpKvSC + 8Y/eeOOtq1ZdVFWFk5mHdSRrF5drf5drN7t9hcp5x6SD/RurC9Fvw2GOMPPGRpdYVGFSg4IBf5XHXWrT + yvJs/TVDpB0pBM0l/mEF0tUY36J4lmaPEsRn6o6FBtUYtvhBY5rN4s4pdlMqaBZncIu7pbqcZOqpHYRd + ZbmYjzTCEtuuKJqR8ij4kj4vpYqov6bOX19XM2f2dGbpFO0x7ojpF8iwQpAR7km7jntSudyU1xMMFaqS + 5nI61p8l7VMxzNwf5+Az0GvcmGE7myuVKEjPtMhIikaCglmXslQDYkRLU/c4ouzp1yPZ9RWsEJ5SwmPp + KAix1t0j2TVgOI4yg5+R80APgnx+3RmkRmhM4VrJuzCLMQ3xluD2rPZ4G4KhYrsDtRf8WgR+gEAiPaBg + ta6PLSk5YNmy2y+55OWnnvokZZJ7CqPwz88+e1E4TKoDFERmWJKpCTstq61VszPke2CGVAdm+SwcpK/s + sw+2FIx/HKT7Tp26ZMkSpntOGEcZ/ewf/7h3zBj8omiGXYlUiqRokiGOWth0mTgBZQMeED0jZHFk6ItU + +u4xY0hdgHqDXzGuBBKgiM4LMU5QnMx9vrADNpYVTsr2vvr66x/NmPE9l/Mev/8et0tVZcJhuwc13yXt + aIIEQqKeJ554YkIgVE7awf325zvvJEkRc/lGp3NTXd2MadM4D4n56OMQmkWIFWUZMhyeevLJey+77JI5 + c04MBnk6xygI1PWNDv1gp2s/h85CASnwZeHQLnU14zweesmgd4J5yp1uONj5zquFXRh16mHNpoYZRrax + MeQU/qn6kaKcsjC+nVGX34NC4sCiu6JYQzpXofRnDpDxHL6JdDje3EzPyewdDosScoN7RvwJkRhZLA9b + c+zYTvYUyGKzVZSXlpXyQif2N9NjHBeJhNSsq1DNesMkPROnkubSXWE/ygPCFto+gUtjy6UsTSsnDfoD + 0VBESH4N50euJrLhJg1no7afm7Z1tLe2NONN+d/4WHlXh+lO4sBP4Z/Z+amkPvvT/mLgx0qc9bhI++P1 + 0DTq+ZH8BwWGZTvJ0bwrpQ5HJTXwWlv3Xr78ivPP/8Wrrw4JT/L5Qw8lMkf5AhQ+FRbu7XLNGztWYSGy + KRS8RVEadMnUKPz7M8/c5/GgJX2dz3f4ihWYg+SeU6gBqogZm0mVE4kTTueFMnGCpD1V8EEkTsiCD8Sr + FHFR9JikfkCWIZkdZIWxqYpOmE9IU3/58ssUeyJhEWihRhJBRLAwma5KsoXC7yiEJAW4b3I4btY0TFUo + PPugoUrFYJJPBgIhRqc6D71EeBJnLC5Z3LMqgd18iV+ccAJkVFi1SjJ7c3HxovHj6WrcpPQPqSCUzL3p + zDNPnTp1k9fL41CbIIhCE7U7qI+41qbhEYUpCuN3XWvTvt3jOrweUR9KIplB71RmnNn3rhwPRmkRQ11P + GH8yFkgP81dVZVA4KjAsADNpBZqnP5bUcNyEyrxlSoQIAwWC6GdmOpFa15MaknqBqecEgR18BmGHgLpQ + sLyshGTuwWcwrwD4bp1dCG4BnJw2m7w4m2B7KO69aMDgJ0XPlpeVprZGjZuRblnJzMzAJTBME+x/87SD + Fw1CadPh9Lm8WK5D1TmsXEK+7aLbWd8wrRXF/3xiNZT1SbI7UE0ZKpqSEP/M5W1Lnc7GUKDcrokKR9A+ + Kf0qmZ+qvJ+o8IdclkyRhuDQ6POtWrLksM2bzzrrLDIQMHQoSpB7wsC///SnbSNHEskDC092OBQW7lZY + qCwVIlg4M3/84x9nwZr56pNPnps2jTDb7eXlZx52GPROauxh8cR5EX9x/vkicUL6RUmcoAaQkThB0Qk8 + fkzxyi/KYltVpa/Kz6dtFJ3ghJh9cfE5cOjZiy++ZeLEwzdt2nfffYnAXXjhhewGAANO1uH8o5/+9CG3 + G+sN1s+dUsmFth0ASxNxAIzCgUCo+gcHLFFJQJEIH75Z0PcXv/gFpFBzluEjixaRJQLqkwvI4kNkQfh8 + OzU1zZ89G4v5xIMPPmzy5N283jU8BRm4FZovdvvemraXzCdZqYklAjRRSJ7jbNoYl2uk28XgYRWFf20w + scUYiubRqBSIDO119X07JwumhjQcEgYFebmAHFVc02JWtLJmVEWwZK9VQrOE95egSTJHkXEqGjtiRBOh + k1y4e1YMHcXq4MbNreU7xZuw26hnY9G4sji3SNx1seYYlnkMg5RY1PC5+LhJuTax0rEWO+TbuJvf7Zs3 + ddq+u+3aUtMo8itybiNomh+KlkQLEyxe0p2cERMJhQvCUYNwzOjx+/3DMoAGNSaZ/1MF/4TmWaywA2tw + ZivcUMr4aw8HJ1aUjSsqbPN4iPZB+4SOSNofG+QXfsIC7cIqksX/AMjOkhLwifJ7Bx98MD5G8Ml6aCoF + ZL69bRtcFbAQkU+iUDBowMJlMghnGIUE28yl0i0C8P9deul3df2BceNuvPJKjDPajBdxAFPm66+fXrtW + JE6AhQMTJ5SymjlxggAyQEistFU6b1XEEfGwwVrbDy1degcCb9KuJddw7733vvLKK1U9hzieToob+fJf + /3p+/HglMYOqmSpPuEnTVss89KkSCFUeIRV06R/WJcRTUTID+fAnk4tJiXnCftijXJodMBO/+Pe/r6mr + AwJP1vVT7HZKABKa3VMIDjiWl5buOnLkEo+HIsB4X/m5iBIfdjt1PLD/cBSTNU+ZYrqFpH6SJcxJDoIp + KtcKqkygWRQ7bmVm0JKNgiTGF2VBQlsM+rxB3p1BhqB54CuPy5DM+7ykyVKPFOiqq/A6FxcVKtsIPDVf + OhwOr91150kT4TBlE8MCC0RyuoVjKXtOjXFIKGb+IO3HdBumqQYgoWFD0s/pJtGh/rtc+zgy6hewOaP9 + h7rJGZxPhmEdWp5GWagD91x39gnHjmvuDLtCDJEMzpJoVzHo4SBlZcNxbElhUWUJTsT+N0F6IHJH56T3 + lAL8zPhn2H/gH/EYhX+4PWtI1kSdhFBfwD+7rGSC2009W9IeZgUCRyxadOuZZx67bBn+N7SqJ/N7KgBI + aijiXl1lZSh7MQVDmKT2EGQKyCA5ik0TyHp2110RtEQOhjmaMuXUpdtAur1MK1y7di2cxuxqO3z6hz88 + WlT0zMKFxL2wBfmQJ2DGnk/eeefeESMAQhEg1DRqo5OlgIbLMpnZZiROKL8oBr7KBKAoJA3DflINiwOz + j37967srK+/0eG70+Xbr6lJwTgl7rg59JiMf71tHHgmQ49293uG4XtOIXx6OCJnDsQPe0YoKTkvtCyxO + /L0sSn72s5/xk/AeJFL8yXg4qVOIjA5iPffcfvsDF1/80NFH37ls2UluNwG/w5zOYzTbRk3b3anvU1Sw + e1HBXF3niRN97NX1qS7XFNRZNY00SraZMlxKIQjYoSrPD0O5XjI8iZ4yrkDBwbagMUTNX+KyVBP8F3aC + rIOnhj5vETwL6wCTKTrSNvxtackQMOn2XLt6t9XLMRBplTm1gP8SYwsGMRwFRmbx4XbxdsbNwAndiXB/ + WPSbHcJDsxZI0mgWG1zO7XBlYRuk6QccvCIhP+dZ20J3p5mFsXkNE5uy66x0hnHattBca7sIApJDE0CI + X7S+vLqzfmRVuNynW5WCs3aVbPZiMZEdiGZxsQH8T7mONpIflP1nlHc38E9onsXwT9V2R/MFs28CE5/T + ubK+/vgdd7z/iiv++OabX37+OTP7Y9deu1TXmXDnsUlUIEEQexE4nNDQoCZ3sugoaYTZgReOFLRcJKf/ + 9atf3V1djctOqJZAaGSm1vU1MkWBUBxinqran0VD0Ew5eW2ffV5auRKCDFYRRhIGk/kkf3vuuVt8PoCQ + OCVAaAQIoYFQTogahCpAqOgbmIMwZSKoonR3o20GtpHgMVik5hfnnUc6/60uF+nw50Ui8yQJFuIPRiGc + TCJ21jvq708++T2XC2ILLbxZGqxbgC4pQTBDAiEfvK8IWxOqRF8GrL3zzjtRuqHm4uUXXXThli3nrFlz + 1rhxp1dUnOj3g3/9+SpO5wancz9NW4uMXNB//LjOXWuqkP6Z4HT1BoILKkqXVJZ3w5SW6X1qgzTUITuE + VAd4MUAgKyoMQQaYWiUQ2FO2oNmfOXhKSYiO5l/GvQ4gotfltf5m4SQkD2rwOwWSQQwZ7Lq0CJykqy2Y + N6ttBLGC/hzzYTWSAH4imkzLqScH4FOor2W1drcy7QCEWB25KHUkvUo0EiGxH8vDSjuGbx+eYhXjogQV + CDFWGW3/KxYhrTWoR6yPfA6v2zHAUTB8nfZfP/NgK9CgwJjxT/k/lf0H/qngH/afwj/ATOCf3c6qf3V9 + /UX77//MnXdSBCAOY/702msHFBdTPZyIFJ4xgGG6PArTsBMzMZbtR2Ye7kHsQhLOCIBlmi1nvuhvrrzy + BpcLbRdS4HHcMWsfEInMnDoVyCGPArg1+CAZweHfH3/81yecQAgNSgsoGMccefPCC4Ercicuczio80BR + IQB4N00D+1UVXJU4IXgc0i8KEJYEAlN6e/EPk42O2nVcoBTf4/2TJyuJamiZ17lcm2TxXqgo55xzDuYa + 4TrrDFhKQzzR1UVavaj/QGAPg1XTSGNf5nDMjAEhpjn9c/XVV2P5XXnFFRecdtrJ69cfNWXKETU1m91u + bodts/Q24wUl+U9kwdvtbBRr5LEilr0kP8JiaJRNG+/1zSwpWVBf01NY0KRpuIWNDfuvVi4L6BCsQJXk + IPL85MJLiZ8ZCe9x3JYsXpysYYYlPenLcVfkN1Mm9UycMDbrGJ64o8zpiripWLVncaBkWjrTzskEBbm1 + LM5v/YkMuXUkrEzdKSz9b4nLFT6PFa+09S5Te4rwsp9KuYFhCoLixSgtEfVm1eWG/DlZV+fDo5JQpzTT + HrOyf1ygReFfXPwPwl4y/FPBP1He3eHA5bV3Z+fVRx7504ce+uKzz5KByueffHLuxIn7ywASMlpw5aFI + TNE0PKgigojrbMwYZZEQAMP+wN5iis80W858dciOz61erVLgFYl0kwRCVMSAnIxyxgecFv7kb38L9kCh + HAylz69eDWKRa3i13Q4t81SX8wifD/hXymqkeBuJEypACFOmtqSEu4YpgyYL8BwXIHzn6adv9Pv7azW4 + XNf7vBcHAkvHjcN6hmQEZYYVg/UwITfyy61bRQshtTocyiI0AyGuUVR4joRcu2HDhh12WE2Qz+tl7cIt + iJJGDsde8ieHwHxZY7eThgj+4fiF88k9CsKLydVJnnuN3UGGaJlNGHzmjUWVkeQXtgCBqVEjBRWTgEJR + YT7FXobw3QYtWPdTSc141zL1yckXMDM3JHvjVySdLtNrWZkQvm37pAVjZXnzEQI3uhDN+X/8g++3t6d7 + Uve4bBi3FvpGDK9hiwyzOKDMb9xzSvjSiqBgcWFpKXLTucYm0960gYIG707R0JXUmZn/Yth/huY1+Ee1 + Byy5mV4vatfXbNny65/+9OOBfPpkWPjwEUcoDueBkjGI8CZCl4QMAVSwcFwgME3G8PgcdNBBpNP9/Oc/ + x/AiXmidGBl36X++8cY9dXUUwMNRCXHmkKIiuDnYUuSMw/iwLp6S8I6U5pn5T59/8MHjPT3ADNWXrrHb + KfJwrKZtkPQQUQI3pqymXH8GELbW1HDLiikD/Mdd6+XjjrvZ4+GcN2EOAmAu18VO59HV1Qdt3EhmAhYh + IdWEQKjSHgYbi3957LHr3W4MZaKnpBIeYbhGy8unTZgwZ9y4Gc3N3fn5o51OHvQkXKbSm01Jh6VSx3W5 + 3U5pYp4diqBLY2wX7k5F+/B2GtE+5erEkYCpx4oqbgP8VJKfkeSgrMA4Q5DBzCK1oIC806S0Ed4dL0ol + 7sQ5u5FQaFT7iGiECw7XB3zyEPnS+t1ygixjQTDZohPVaLSY9MW0L/4drjv5r54XmwSbh/CqlQii0rWx + Huv9r96ZNP/l+iV7Q4swd11NNVrYadcI/+VbTXR53oe4HB3uAgLbYGcL/STjqts1aofpdngSBgHdkIAx + QoDwP1XNP+J/hv/TbP/NDYcPmjLl9jPOeOvHP84Un966995TpOwLKmhU21knZ1J4E8oohFDag9zllCkK + C4866igCVJQ4x/eYWq8ytWPzd9deC4QQLIQ4c2xLC+Ygrr/TTjsNtmeOQDj4uu8//fR90SigxeWot47E + 6JGm0ktkENbEMgjx/qETppgyo6VbWDFl4GeaT0tu/mPz5t0mgZDteoS//f7zRo06eY89zj/vPOrTApwA + odluNtL+sCzpOhytcbfJOW9rbibhj2dB/T+037D24HPOCAQm+v0dUtwHoXN4TIRveS48Hao3wHOZR+q9 + tPxw80L1nBFju2ACdkqBbJEYo6J96Nc77MgmqGR2oI4BFrcJrpBcfhl5DkaaoJneCajU1lbV1GBVJp79 + +b2MwyS1rngBh9vRwhQneAYxoxWSS1xCQnbvcmzyHHC0UMO3gLLZXdF8FDDDEmT44oVxLQTS6mtrRrWN + JDXTSvYaqEmO47AAoeBTueDzDOVyg/FBLp31NNW43vF7fWVFJdaTe3J//MN9BmGA6jg3sl8ZmFvIJBDw + +lHRNa8SUtMHzOmASqeKeYq1uQoBUu2dDD+S/5TmteH/RPP6sDlzbj/99Ld+9KOMImrmnT98660rq6pO + k9Ub0DQhkxrDYhGTrNM1zukkUtgbDM1ubFJACGIRqUL9meT37NRB1aW/+vTTZ5YtQw4GK+38ceNggqDe + AhkEWyrrYhTJeuBPt9yyjSw9ruVwGBUe4I8AHkYGIUsNVfpAiUcjtz2pp2fOnDmHHXYYRjA5CeaTv/uj + H93g8wGBJDzcUVDwGAU3Lr1UsTdBQTpHpTFwI0qAFERU+IdXGcLRW2+9BfOTzAe+mJlBj++/P09BUF00 + jWJMlOyYS0K9w8FapE3XW10uBoBIANW01piSNekNVHJQG98x/kbH7D+FfyraxxBiIBU59TK/l7QQRpeR + 0ofXwbwp44+sLxicqWOB+ISUYHTch9UklBOUSqyIVQ73ez3wrbQqn5aiVbzFQjRlEPlDsseHcopO2AYC + OuPGdE7t7UnY8xl1pgjeoSaabsZjNZMfjRICG2DwJDlKJaikgirOwlWzc6+RUkpW/tCG4sB2JuusndoF + kShAOFSwkdHz+1btLP0ACYxFAuClBcXUNFHr4bQQaEZB5QtlzY7nCo5TOWUfSHKXpkA//9Nun5+ff/ic + OTefdNIfXn/9M8uan8lw4qsvvvj+nDmqesNWu500890JUIWja0vLez0e7I/xfv9Ef2ByUz8W7rzzzuef + fz5VyKGlML9nTZz5x6uv3ltWhl14y/IVxOHgmEADQfcyG9ZoylXAWyeeSLq9oLTY7aSrU4MQw3eXgRKj + eAjNQFjo8UydMoXqS0pTJq4c7kunn07p2ocmTPj5iSf+89e/BufoClLahWLno4+S7UekEywE5/g9Oe9U + gwIXMaPBP2ix6LGR9kfmA/xPCK6/eeONP7/wwitXXHF1dzd2+Sbsck2jVvBOmkaeAyTedtS3I+GuSBir + jg1sw4QlrgmxE4cnNh8kT37yHfCD7cJf2U3hn1nSE2FrUqbNpp6SRjN0YdQXSo6FAn4KviTMc0/9AjIV + olnf2TFysHPlW/Xm5tIYw3cqQBHfkjupu2jIvWVMOE2NdfW11Vi3rDOyPj9h1OU7LZ45rdeKtzNRX8UM + BpPhAAQWRKO+RJI3288AjPVO7p43d3oyj3mKB2OOXXHnKaxO/mSkhcadkAPjcmJyHAr/P0TBwZWmR+LT + mz0rKiuEmAelKJ7sxOAWS0Sz4oYhQxU39RikUFAQVxWnK9S0UqQ+7XZYoPjEMAGZEBcUFW1Cl/Kyy377 + yitZ238JD3zlpJNIsKN6w3FovsgyQGvcnqV+f4+mtWN/SBjugIDT0aHsQtyYlE8CtJjlcyHO/Obii5EW + e+zAAzGnSFGAnEkAEkNT6WeaP1nfL8mLP1q0aBt8FvRI7XY0ZdDaVjUIcf9iP4EcMGWUZhgmPBYhlNEa + WfwI5ovy1g7A5q+//vXtt//xgQcgjppbBUOHxlNE/rrrriOjH+uQ75R6IJUC4w/8U2nvKvOBjMDrLrro + 2qOOunrJkks7Ok7z+8kkIecBhTNoLypSi8GKzjVcnhE2W4vTSRks2qnILHwhTowUjsJFNr7wX0X1VCFA + oN0c7VPeTnO0j0E4OL1PuOhF5VThUUxICuXXRIwo5Y1VNNgGYgpC+kQWeBka5wqXwINqGECiScLhOny2 + VwbN5h7J1lAZh3EfJnwpiJNd+QHoEeBc4uArdx+Nhqsqy4WvMlEnC89tOtu0prrysE0bpvRMyLYnE/QS + Y4aMwTTISuMmTBg9a9aUXExaOhe/fFERgzzBhwJD7SOboxEGf4IPzlWSKBQMM8TFIB7GwZQLyKY/Vthh + w+yON+uSGw2K837w3/YRrXOmTysqKECcyWz8xclNGThnVtkwhKaM1EBmYSRqVGlTMvYxBEVpU7t9Sih0 + 8OzZd5x77m9eeSXT+J9F/PjrU09d6/EQoELw5bhYrdq5NhsON3gWzVJxhgBVp9c7tbtbYSHBM2ZzTJxc + iDOkDTzd2/vTo45SCinkiZP5oFIV8SiicQrKCp2UL77A7szu3mGRPjlqFHCL6ub1MkXvWKm1vSOJIprW + icEtoQUTXKhfxiijLZIpA1ET2xcMsyJ2A1iy53WXX37CoYfiUIUBS+UmBEipDwwign8g/c033XTt+edf + vu++F8+afW5FJdkj6FwjfobyCxCIEPlaOJ+yBC5l3MnpxNWJnUc+HwgHvOG/VdwWvAVsTAQYfGozyC+G + nrXA9Vi0T1FdDFenEe0z+yrSv3hyDxVND3oDHij9pjJ4Fg/PdDcmTAg15nQI3s3hCEEJG0PkLmcmGaOi + oIOtDqhAuM0SOgnTLhEwZnAsJ0MKluPQ9woK8hOeRzg8LRTuJoyHt9NiuG37hdR6X9pUAIpEa0ZWgttP + laeXZIGVwcBgtq2tqcSqTdgFLBMaGmrQvUx4RpCPw5UGinzkQ+Auz6DpQ7qrEjvnJxUWs4tTsmiYPm1i + YwMxlAQf+kcEZQfR4RiC5ng4u8maUyINSLwPckQYEGiAn0p+UA5PMzHB0B0W8sTSZ6UKfFP5QaFgu9e7 + 1/TpV2zd+qtXXqHsQ3YwYBEIP/3LX+5rbyefgRI8eA7xjopCrGhdejxdmkZ2MaEplaE4OhKZ1tursPDI + I4+kaDseP+rfZk2c+dtDD71z330qeKb0w8A/+JZoaQKxaJVhaWEj8svsfLAfv/76IxUVd5BEqOvUdkC0 + hTgoJheVb+d4PaNdLiOVXjFlqNSBCH9HSws3uH79eiiggzVlEvYq7f/eDTec0dx8TGPj6pUroZsCh6ef + fjr59bh8v3PGGRfuvffpPT3HFxQc63Qe63JtcYpqf5S93U9mPqwl50/SPg2FT2ELmlAQ/FMkF/Nm1rNW + 5BdFdSEb0quReGs3IFC5382ElxxfSqYUI1Q22DJJO91bvLq0bwZMtXIKs3h0mt14bRUY8EW4GoV5MDSn + ToYEilSZonOUPZfCpBOzdxItNI7yeT1pFVOt9p2phL1osJjgRGoJV+cSGH/kysMKjnsY7MmUGPT5+3P2 + sgsHpm5ifn5k4fxZE0SJogTLFjViEnYxTc9d9VTCgxvla6v9OMz7UV6xqqzCIhBKp/F2cYOGhtqtx2zq + 6cYxlvijgC3uA+yxDBo8Rg0IFPEV3ihZm02BnxJ/YYZiwmKpHo6t6PnCpmYxkRohDUGFglR+mNnefvLm + zU899NBH//hHdrO/Rfwz7/YCOpkymQFpysMkd3S3UGhH+PqYg9AuJFtHlecdX1o6fZpQX0MA0yDOgFvW + hVQG5P9xh599BvIRbuSD7cV5+AkKIlSGUgw/ibTx3+x8sH/FInO7yVXn7q7VtLM0jbvbgwRzTet12EdS + f0NaWipAGHa7C3w+mDLjpWQaFYtQbzFXsaAm/Qd//SutQsINgETzU8nOgdMv3n77edXVpEVudTpXT5xI + JHU9dTDWrz9pxYpjOjoOzc8nQQXYw/Ij4X1fmfO+DggkTULT1kCNiUEg7lBy/JXCZ03MFmS0KNUbZeTF + bcBeQHN4NbtyfjICAw53yOl1MmuZJGASujoHvwCMcHgJFqkuTAvhQDAc3F4/nMOhNaZ2fQlWhZCHHBrU + yW6moeXM4yqWydyNt2yowDtFe2SVulRTqLkgonQLU+3RqpEK9hA6TOsXZc5MS4NXlt92eoOEQKX6im9a + wCFrrH7Ts39P1XsKCLcbDGSxD0m3cln8D1AQOVtZafH+++7RO2lCpmema6Q5mJNjnTun1hRc0+yG3ZAf + JZUDxbskBrOoL5jqpRKahnI8ifCCVJovLS1OJj/BvuoZD+5n82/M+Kcy/xizUTz3SObHwI/5S7mw8GsR + vIG/XsYmEyH4bwla/pq9SHMUOnQSskrc7jmTJh24fv31111HPImSAlhCWUBadof8+vLLcR4KyozDQaE+ + dDhXOZ2zyamPzchkblTFsHBiTH1t+fLlOA+hegIJGZVcSN1I7Ms/v/02nkZYJ3SFKvWXkWiZcf7/u/DC + eyW982pJGaUq/SFEQGWyAQkGYDyPA2NLBQhxSAWdeoHbPXniRMoQIq5G8BJ71zjbZx9/vG3t2tsuuIDS + S6RV4PMEFGnYL++997zS0hMU51PX9y8v32v8+P0bGg4MhfbzeMhzZ8PtiXwo1R7Y1tpF2jv2HyLXmIA0 + Ruh86vrsUHC80xmn8MkSSuG0onf68IXIsqeGp50p3OvATSmGuBiKTEZQAmNeikzRhjcF15n57VDVthO+ + wh6Xu7q8kpCh8VcOB1RS2zSFBflFheRxDGia9Kv0z1H43XIs6iJmTlcqQRY1Zat2Gu+1wClTlRskY2RZ + g0y7MLPZjquDx9BMzJdhLTJh/GhUcviS2enS7S1qJiXPB5PmpoA62SvSuhLS46rmoxCrVpvaQaFjP/U0 + wXwpmpJB36lrJmw/F4kGI+WFJTwhnlkw4LdSODhdV2Tzd7ESGCK/QTaXT266wdW2OFYY00CgKp2V7CPc + Cx78C27gkC/JRHnMKGjovzCT4lXDc83MBf4RuVGZD4ifYU7VSe+i2upJwyIj0Garc+j1uqdcdxXjEdX1 + GRMnrlq1ikQCqCjPPvtsHFkxO4SzeNRHr712c34+WX3CprHZDpB8DfLSugmkud24RkXBQk2rkFg4wuns + 7exUDtJ169bBDcldcSauna9dcMHDF12Mlg0f2CUwLXGcZoG1b27ZAhCKbL8YZVRVpVdFJ+BesihhvaIy + CmTuhKPY5+O+FGUUYqc5+f2f7757QWHhRS0tWw8/nPR/bpxFwMv33HNOebliu2ySdR6Uwtmebs+GaP6u + Xu+OUjWUzPdlmrZMCr5Q7WGBptGG6VL2RWQ+EBSMhpc01XcFAnhrzQqfgLSh8IlbrSAcyA8FQbs4ypXB + fDFW8inGeepXmelIOPfkTqw38/OjhsZT3DlVwD6jN1oV1VPv7HYEcujlBSUYl+pUENAK8/OtG0ODG4B4 + ZnF+IX4j6zNxNBge3dTeWFGr7oilv9/pRes4o7sb3D9p74K5HR3/SJBhKDO8pWcP/9/kSeNamnnzBFSr + pMyMWpLCXkq4yqedRdH88pIyIY3Wn2oO+Alc5GceX8R39V9EoAU6msxE690sXayDP7TJ7yHilbS7eR5i + kfLtA6GMnsq3YWcrkWQ1BfCk+SnLoMQ/s4QQqNievMSMZfxsFbre4HFD8wMzqGoEzQTxT2gvkD/VRiIE + NY8E5R2lR5u9RrMDMGyNodBUGYGDikI9AagouBwtIlmOu33x8ccPTp4Md5RUthPtdhIMlNk03e3qzY/w + OjI1C76ippVLLOwwEWeU4gz5A8TzMqvPnrzRP9+06YEJE045+WTqC+KAhYoJ1mZarRCn60+WLr1b1q9X + lNHjJRUIPySJ510yAqeYMngXG6rKO1sbo15PVUEBj4ASiVw3rpzTbx577HSfD/GXU7u6EDzDGr77oovO + qKgQVd2V21MqwqySai/LnK4lLhellOYSj5TQi9mH2gvlHVD6JoURLgxtIKMfE1CkQ7icLX4f3Yv/gIWU + ofCpeFVGngO6HQxOpRFo8l5tz9JJ+64x0TPhpJ4oDZNOujGHfv4RQs+8ZDFyCkm35YWlfk+/pKK4QQuk + D+NO6Y5oNGKuC4FAMVlMss4MAmjpoZorNlXWzRo3pbWaZCXpPbJpToeTuUDOCeI8mU7CPB+fj6CdmNsT + BiBVOJA7ZeUt8tlIGXcLdgKPFoPYuB3aX1iYb3G5L1ou8/kS0iG5BS5BDqi6l9gdie8Y0HVVNaXFFOcW + E6CAPbtD/ERGtf+n+hLbBBD2Y+F2bJMYm2oEim6VknRx+4mWmagZmfZ12kGfdgd6ramhvr6mOs6bQUuS + RWXTnvP/1R0MFIxLeFD6Z5iAOD/xH44M+EcHAyMcDiUCQuYDxR8WlpTs0dm5YdKkaZhTJErrIld6jM3W + rtmAQ+xF0IWf4xoblaW1efNm/HKZFvTJBQ5fOeqoK5xOwoTHOBwom4hAGmYK7QwEWt0eHLncIGQ1jNcq + 3TnS5xudX2AozhxzzDEkxil3rnWx6RStff3AA6nbfsbOO1PPgQ+KNvTGr3/9azil1nlDn//97093dd1F + dFBSRhGzhjK6n92+nApENhuE2BrptRaRWmpNjOmY0NUe8bgbZTUMgnwAIQkPZgmYZy+5BMsPFyg5lyfM + nn3+iSeeUFtL5h9irXtjCJJ/Kc1NmDjz7PZZJAJS1S8vD50zwn4YoASlO2PlHQC/RonEtIHMB5X2wCqK + tZShcKZifoPZnmqyy9REMN5KmfVsNfI0VO9y/LwnUpm3ex2VJZTwWlaKxwEbyNwM5okA+c2N9ZUVpWkD + Q+wQCYQqi8spBBjXDDCMwuBuPZsgIjO+yFuzO6Rex4AbBC9EdMfEXQD/FPybe4PvEP7HjukgL0VFbdI+ + Ea7FIiDhbpxN5CAOOEm/F9Th0D0eL1UoZJ15ByjIEkJgofwpv+sCFAU6CkSUKKjcpP2eUgHkLpdIGjHs + Q84UV3pKLCuE6pA9hceZXoAUmtaUTtsRGe3A6Jk7a9roUUzIA5BceNg9wyt5nlE7/+s70zuDM9+JjTBz + EQUEJ1QIrQXOodM5GsKF3T7N51s/btzFBx30yHXX/f4Xv6Cm+Cf//OfJS5ZQDXWers9yOin1QG5pt66T + K6aKxbf5fFMnTmQiJkZFEht566Rj5yLsaR0a/3zvvdf6fQhhk9Z9uOTLKAHuecUlPUXFzCWKvg8Wljgc + NU5XI+neEjOUI5GkeMSmIU/mkmVvtPbVFSsAwpvKyxfMnKnsM8SsScsjc9F6b3z69tuPVVXdibJajDIq + yhA67FR1wCFJHjrpd6C7qDSLQ9vtDlGnG3t9xAgFhKRAgL7oq1GXWKH73Zs3k+qAC5TtMK93S03NBlXw + lvif5HyiTkfmA5Yf+IfNB/hBe+FCwB7xSMw+0hZBPpyfkHQIT6qcd9WxCv9U2kNczl8Wue3W3xfmL49H + 1Yoflk9sfszm/EybggyQjjAicyoS4ChxkJrqCrL9cjIwlHOQH5n4/4S9xaP0eAjHJJvSrbQKIujIEc11 + tVXEEYP+gBVt54SezySPVmBu7P6k/1NinggxOwg0u/hJbUT+K3/yXcKhAsiYaejAwBM+S8xQHct+QFZG + MBCA28LCi14wq6GnHmjsn2mIGKIISSWkE2Q6hFWUUy4tbRxuGMvGeZTZnva0nEUUuEj+FnENoUmUbiin + vdB/cYc4dyhrLUWHIRYoUAHmYYxFgv4ZJuBkt3vfnp7LNm9+7ZlnPvrb3+Kg6Pcvv7xHILBCxo12sNuR + TgZsmDE5Fg8qP3tkYXQ+UPBhLf7yl7/EzPoG6KMkUSB3id8PxgdAKHIMpB9vvMvV6nRiskBvqAwGSEeN + SruQuwa5JzY3q9auWbPmsssug+GSY5a96q6fLlr0fV2/x+k8pKX//CQzkLkILFnvjX/8+McPRiLU+SN3 + AsooKqPcF0bbIqlGDThhiinKqGD5ggdwd12uCbLiPNn0mLlkPsDWwev74iOPfO/ssw+rqiLbAfuPnyoQ + qCpY7ahpLBrIvMTzidsTn6eqaovUi7L5gD2CrIokpcCvxKFX+n3kminmsIF/hiM0zhAcvvHP6xkI+IYP + CJlrmSKYwVPOEsJTOjiNT83pVgAj6/5Rrq90M7OqIZxhlE7E9nKtfOf2uEkrlBFbW2p3MTvAg02YPiGo + hQiqDfgoBDBQUFh+EgLxB3vsRIV0UFBt7tgX+FgCC/stRWkX4tn1enweN7EFmbQQ5xel2ySr0dHV2V5X + x/pvuD6o2rS3jjCCzBYvwwLHgx3MreYceuQEdL1Mjum/OPcOrBpjiy8VZaVlpeBFZsPIyr3Qw8OdXC+A + HJ+7lF4U3HSJgtsl0GIQiBd0jN2+U0PDWfvu++S2bf94//0UHrxb9tmHaZSKOehJwhskFIcBMQ4BSRlK + HOPxGAUfYGQQpqKmT3bJAynMwcHNoyzCgzvthL4MKd6bZSUK7BuAkDldxdLyNa3M5yW7gIk7qmkEE9C+ + QfRkikQOPtQIUln2yoSy7sOMaycteXHGjPt0/U70rIPBhdJE5qN6A4aqxd549667yJ2AMkruxNXkTtjt + RzqdlCHEaIOfQn6CQRkVj5WoMLxfr3fihAlcS/ljzzrllFM3bz5ozpxVxcWE/Qj+wfzkwVHnb6WsF4gu + tqK9kPaACahifhh/9Jih82lUe8B5YCS8N5UWj6qvDVK1PInCddqcPzUzWlmtpn6VBk9fvMvmNEErb2La + S0hlq6RGIVMyAshYXblfK6MzMHtgaaU2s/qRMuepMqOGZboz01RRfn5LfcNgo0hFHBVJUMFVPwTKyJ8A + P2ntgXZ2pycULgiG8+1Or6Z77LqXAh7yCz+BRoGIdgGQcv9+l6k8g/CU9tNHVZ7FQMwVED2AiCz+bIOP + xDN3ZGpoJ+waHiSM/bQaAdLpvL1xAKFXh6LjyR0IZecOuHGAUKYt9i+yAEK0UsPhoHAtmD68GBGhGZGN + w0SdhrTNhpqa6rJy4tGZjhvr+9NoCpAgwOjMs3nybIoUU0AWhIQBAuuYcWOdznUTJtx01lm/ee01HINp + CSOkyB1XXAy9UBSQ0zSwEGOCmZQKOygsC5uyslJN/YibQNNHuwsSf3aJevEYI8sA4V2knYNNq59deilk + Gfx+BNJwjSqLUAEhpgzzuJG1DRaCi+jAQYjtCIWmyfrsfAAPxDkJ5uUkyf3ZZ8/19kJyAcPwam6O9QZG + J0TNV155RdW+SOv1/e2ZZ96r66LOH7kTdvtVhYVnFBevJUtBirZgrpkpowoIC4LBKVOmLFywYMn8+RQ/ + Gl9QMJrwYazs0Q6S/Llc06Db0DnUq1LV/ggBdsr8d5yfNcrtiU4sNTV1nU4zbD5V20HlAkZ93hDpeklk + zwwWTNKBasvDjZNMZ8v68I7bU73LyGmXFBThiMvoPAowkgHz0K+CM2pcop1F6nfAb4VKw9HK3rF+TTnl + ChGc1EdldtLkl6d5GEUlhYWDVxuiJbLx/Rl+ZNM53aFAhJQNAYF2FwgH8rG5vMFIQYnXH7HrPruTzS+/ + CDhUO4g95SZsRGkdGvFC5WLF8scqg/sjW5qONeNzY8EOKE1gvX+z2BMvc3V1hSE6I5ApP8p/M3quCa/L + GbgXl3MADpkNZIaC3+9PSLDGY1xWRrApMyCUMkj9OZoEfVH6Q/Ap05NY7EMzNcZtQ4LSGSSZ0mYrijEn + cQxCAd176tS7r7rqd7/6FawKqBxWJmhm8KdOPplqDyRZoy2Jsw7FL2bnyUzQqrK80zktVhEXBx0FDUgq + t2gGJYMH7DPaRuo3YmBKyQVuC2Qcs5DmX1955YyiIhRPoH5QnwF3H02KA0I1jwtlcN49qYMDx2dMcbEC + QhUsxJ1Ig7PIdlCN/+xvf3uqsxOlbCS5r9D1c5zOpbHeoDYtrJzf//73Vk7+y02bFGUUue3LHY6Lo9Gj + g8FVmkYMD1804TrMXEw07siwCEui0dHt7dUFBQQ24PGS68JCh6UJtR6pdQz/hSULGw/L8IJCulFCaJiA + KuxHzDhfs5UH/MW4jWLIFyeqZ2ieWcx5V2w7Y8kr5jXpc7I4mK3sBi2A11lUL0KCw+NJG5kbDKKyRVZp + ONIxNwxuIiu3KvexGP1hT4xGol1p7Q3zlWXMSHgkk02z/N4Fq2X4S7ypVvFcYItKFTl0UAPRcKHbE4gh + nM/hRoMhoLuDuifkcAcdroCdzak2v9wkIipQVECoQobCQdrPnQEIQ74g9QY87njCUYJnwrOHO0pQMsXz + Eo6CRJq2lh/x9h3pbuhG5SbIAQgpDI33MouzDTgEp6juLMkvItE+2cNOwb0246XFlnCIeIyxSpsWj8pu + tziCqJdnrNmjNuEPrHI4GnWdyjgL6+uvPOWU137+c0AFMTAlkpnWTFE7fPr++5c2NUFLAQv31bTdlLAI + 9XQ0DZaNqDYHtEwTAi4USUemS5lB1s8/uBkAIVBKhgNSKUTaEPYErvA0EtUjRU+5Mb/6/PPLp0zBVBU5 + AJq2EJ+tXRuj6xi+hkWoXHlsDHahD253wPhnByNYiFORBqvMQuvEFnODP/m///tBYyMCoaqQPd7ajVIF + mw/1e6nWhN43HZ52zfHybrupk1CPF8rocZpGkSnsbzBM1eNVlFHuCMsMbz4bRiHZhNQqIotNPGule65p + XcRKpfMT/VU2vkMBNbygkG7oHyJ/cF5AVhXzQzYPzba4mJ8Bewb/RY20tB9GPq6r4ZMIltodlFKAHycQ + AuFspmkR20NHN23jrO0QZyzKeoGpyIPWzjrsezHtAIQs9zPqB2URpjA2FIco09VGxner5lnaIpiaKgro + 0t0+3SUMPgAPDSKHJ6R7ww5PWGcTXyIOd1hsrhCb3RUUoMieLvZXcBjDQmFQKuKMQyYaKhtYGcEZ9VaS + 28K0RKwhowWI+UysRBjHamkm+yCVSS8N5wRPjCeESxNrMkXXg9aYtsBh7sZlxg94mA/gMSqOqJgipUsQ + WxCGSLVDEDvnV1Yevdtuj3zvezgtqcyHQiaexkxR6rXrrkPbkxQ0gGcfyTmExDEdfXYJhD26Pl0KffFB + 1ZPKDMAV9lzWgTeQBuSgqYihUDCIakEk/0EGufW66+6/8cbHzjvvYWrvwRApKiJ+CQcE7x9FX+eFArOK + CzuDfrLpmeXNEicFHt/oxvpWmYKLl5iCeUawkMzC22+/HZqPRR9mHGwDhI81NqKLhl/0AlmrlrDlMlkp + lw/KZ3fddRfmbOpUiq/+85/n5s3DuUrJw6vsdsq+ozJKYQ1cmjgz26UBB3QZQMjS3edyhb1ePBiQE4Ti + naZRCQuQw3Yk7IfnE+RjUyxQkh9qpBfUgEAj7WF7/rsp/29wwnuy2UI4Wgj1ZM6Ay/GdMAh0ZM1RYgKj + sKG2luLbmQZQmHlEYrRp1hHxBVGxKFd9q5hxo5STv7mAYiY+0QwewrBPmypeJ1AQ80GyQJ3eULSoorrO + GywAAnUi/p6o7st3+gtcgUJ3oMjlL9R9Bbo3X/dGBSKKDWgMYSnqHixFgYUOF1iIUSjswn4S6YDkQnG9 + /mBkBp2RaFd4qINrP/bvmG6hwW54HYsK8y3iqDSzBFUobmARQ64sL+NlyPFevg2Hc4+8h2m5YUZTzSiI + 6cPqPhLjSWL6zKuvv+Tkk9E6ocIOwTDsHuseUfOMTyHA26dORcnlsFhMTgULJ2kaWMg2K6bqSfLApZde + io1l8Pgt2p2Dd8MihAOJIXj7pZdeu2HDd+bPv6yl5YKiojM8nq0u12aHg3wAzEGYIHhr5xAD83t7/P4m + h6NK18vcbpFpIB2JrA9aa2r2Xr1zb1d7ARWCVLAwHJ4ma9nPnDmT3ANkWVgl0DmZUl7/8aMf3R+NKgy7 + wm4nb48u2jsQmCnVBubNm4f3FUkXlUqRrCs+feedR7q6btB1VAIus9tPt9uPwAstzVxMOlDNUBnlESuK + JpFgL/M1lhwyF3la2KYV2jRcnTg82RnYMzbQ0Uh+CJuS3+PSHpT9ZwT8+r+kWyszUIllJKskY36h/D4v + 3HrSA4bjLWMGqCgpQ9o+o5OzgCa4GFePkDuiVu+QTCa8y+FQiARz6z7YjNr//8DOisCIPS99z1jdzv4o + oBupnFB5TUNlXYsnWKx7C3Rfoe4vcsIED5X4oxW+aLk7WOIMFDn5JX8ScCgQUeClsBSxHYMOt9+OXQh9 + Roi6xyKFpmwKn9cXCUWAsOHtSZzwVOGILxksr8kQMeQPMlprKBWBOPKOMu2H92a+qbPzzgjrNklpjsGt + YKZStiAzPsEwZQuSLSBQsLn5ygsuYIrHo0jlVeZixF+yZki+/dBD57pc1OLBQbpB00TNB5mFpoBwqts9 + Y9QoZQYdcsghlPKhShGmZy5G4b9///ufXX75AwsW3FZTc43TCUicg5qMy3VBccnJ0Si2KTFLzEH4kCol + vEd6EeGA1DqdlWQyxdTI6JzicLi9sb6Y4EksWEga5bhYZiHgjfAKQnHvvPNOptHND59//vuRCEBIgPAa + XJq6frDMWF8SUxvYe++9oaeaE0sG98k/33prW3k5UEp5Kfyip7hcx4RCJPwR3lMqo+QzYOOyyuEpA4TK + YlOysdydX3NE7U6wEJwjxQLbET8qoKg2ooBmL2jCzD8z4UW8YtINKNlt3rSLVItlV0d3te+3fm11FWkg + Q/mRVoSwggZ7YrHqoMKlmF7AvMFJ39wOaJ1a3dD6DQj5eyeLln7Ho1rmZjTjWb8We8qKQzkJrQ2+HFMr + ImoUVMqFLZjsLtDDKyws0PHl2gkru8Ethyeg+8JOf9QVKPCESlyBYqe/xOkvdQXKXMFyd6jcE6nwRCvF + z0i5O1zmCpU6A2o3QLHA6c/X0aL3RRxeIojCR6popf2ZFYI10x8pxBYkK9/r8Qoe6ZB4R5PdJK8QMw9r + q7gHz39DvgCCdXSxCFh/I8oRXJS4KEuATJ0nGQ3Eodg5M4uQCVHNhrEwmJ0wGLGiRaNGXXbhhSRZk+fO + LMwUDzcSjmjW1fKoZvDQypUQNXGQ7m+3r7fZVsiM7Mkxo3BKJKLUWxYvXqxq41mJjSU2kr7++ldHHPHD + xsb7nE5S667T9culyjbu2eNdLlDwSL8fp6gyB8lxnOtwTLPbJ0kpMjINcCQCAMo7atg9Rj6JDBZKlTgO + aW9X4A1cIRT36quvQiNKy6Q1t/nDF174XjgM25MWXgmG2e2CYet0ri8vnROjpxqpFLBmWIiAtXwxn+T9 + n/zkxnD4EpfzdKKM+EXtdpL/KPtOgJA7MpgyLHS4C3PoTmEhMx/hMkM/HZtL1Q9RX1J4QQcH/8RMbUfv + iwifqHmLtTRUS0wyzJhMc6lyOvjlQkYDKRND32sAo4QOERL3qVAh2QJ6aIFKBNjcGD2CK0STYKXn0qVC + UkDKCydYE8tbtqLnktE0xbJg7pypkyeOG3ogpGaFD606v7QCBQsGAHMG8l2hYne4VOIcW4U7VOkOV7nD + 1Z4IW403v8YjtmpvfhWIyA6uUJk7WOqUBiJeUxAUHAVNBZtGACFGoaz0pXINVfRR2oUm3bWMumTQzowY + liCZPleO8rq9olRFwN/cVGfRC5E6nJv2PljhFoSj5cjTDbIdlVx52jN8C3cwzEGme2XrgIIQI+e0tJxz + xhmUWkV2i8mdbDZQENdc1iioZu0PXnvt4kgE7x9ilShVrrMLmcrZmjZRGoX8nB7LWD/wwAOJjeGMzdoo + fHXnnZFruUfXRTUGXb8Yc9DhOMnhEGrRscJ4JMntW1m5KhRCJHOmw4EUGfYTgTGQA2cglpCqYWtwQLbb + zUTUJLtkBOI4PT0KCynggCGrpNesx1D/9sADpNJDGcVgvUKWjMBhu0bXdwn4F8bUBkilQJocdzHLEYAW + BzVPBNexgYXvPv/8lcHAWS4XBiXVhg+U6qmUfSeVHr9oXIBQLV8NhpSxEuI2Ra69vGWV/GDkP/D7OBXQ + ZJl/sTD8ML4OvGsuh2tIeGSKYaDmH1pu4I3FVxU4EUKmKa0BYR9LSkXs/Bm70YT3K5aqoYRJLTYv4W7o + v0RDBIUTAKEQ38eCT5dxP/C0YrmTOiuDXq2uKofGmKzZImJFXmVGwUnmW+Ha05Uj1OEK4tLEmHOFSjzR + cm9BVai0Plze5Cus94qtwVfYwE9vQb23oMFXxMYv67wFtZ5ojScCRlaChZiGeE0BUVcQLJR2IT5Sd1Bm + Vqgsw+2RQgWE22tT5GgRhoPBinL4BxkPDtWnACFV7K08uVjkzOr7KfVh5M7i9aBimWih8EAnamoKIMR/ + /a0Vb1PRQWUQMOVFZNo40a/ukpKjDzvskksu2bZtm6JZktiXOwqqWfuFY45RaeybXK4Ti0v2DYdhzWC4 + KAfplEBgujSDFixYgMyYqkqBgZVFmPD9Rx+9X9fvlql1d9jt1JrAGAUnDlfkVYfjxHHj7j/77D++9trW + GTMwClG9wTtKBgXJBtBDlFGIVYQ70ZDBVKazWjSIYlKyu7pilFfaTHHaJ554IqNsir9gdMu0hysdjsux + CDXtYE0jmX1nv39xODhz/HiFslS+pTAFWAj9h+qAlLkn/AknlqjkP//4x6ePPpq7Qxr0MIfjEKkYt0xy + kbgXMghxJkZN1u3gSJ7ZTWpk+8V9McRfzF7QXGbkrI+FsUdmMHZn6slHYU/cVXipzYIY5r9K8y5dSHPg + 6aysrf1eH6FHZTsiSz20Fm0WfQhuEddM5GbLgzQEx36w3SZargS5Bl0vFAi2N7VQ+yKzjpPnMZ4OfSIE + uHGoWzInxMJAQKBDQKDIghAQWOgKluDt9BbU+IvrA2VN0eq2aFV7sGJEsGJksKItWD4yUDrCX9LqL2mR + W7OvGJhs8OTXeaLAIZZipVs4S8vc4RJXUNiFwkfqhT4jHKT9RqFwkPan2MtsClWkIlanKYuHoQ7hhuh6 + wEw5WDNbEWR+Vevn533AJQIS8uxpHrnwZjV0hoXK1ky7NBPeVI9HZjFaBWB1WwwIkpzwxFobGdv7IiMm + rwJCs1MUd98It3v9LruccsoplASCZoJ9A+UEX1yOtqCBZJ/85S/XNTTAmjnc6To2HD7Q7xdElby8SYZR + GIuN7bvvvlA9KQpPYDJTBopgjX744dNjxiggJHh2fgwIj41ELpkz58e33vrx+++rVl2x556o3oCFC6Vs + ClbUKJtthMuJwUfADMqMSjlQSKCwkN+ozEJlQE9oalJwhelGnXeyNaxnU/zlnnsAwutppMNByYgTNe0g + m221y7UiGl0UDk2JpVKggsbK4N577wVo+Tz66KOPPfzwY9dff/c++1za2oqRLdYWDgcgClkUEqwgItnt + 7ZpWE8sgZK1jBAiNcWK2C7k7dYPmTf0yLv8v85dviI9IaIQJx2Z/nQFRXiDgi49i8D7yMhJVyhTwErYe + V9ZgOBm8p2DZx3xIVqYgK/tk2psimyCW7S5mXZ+fKkAJVglCFjuBuUmxi/Fju6oqywe77pgeq0rLUd3M + qElcWmhVStNTKPsIswOiCyLcKfMyxcKmnxHTbwV6Iq5AkRtLLlLpza/F1POXtoB84aqOcE0nW6RutNrC + NV2hylHBilHB8vZAWZsCRV9xs6+wERvRW1CHp9SDp1RhoTAKodXAr4FNKnIN7dJBOjBSKNIKUVNXyfXi + NrijjHph8M4KcrII9VkRrBF2N0MxE9M1tpa0gUWMdZlvsX3Fw2ODAlAcLaSGcNobT7gsTXsUtajQhs8P + o3OZZqVl/rMYXqLojKVYutkcxOjBvkE5BQLIwu5ujI+zzz4bQ4V8PiZ00hhw9OVCWomz5167/HJEPjFf + sMz207TVsVSKHomFvV7vdCkzNnv2bLMSdxZG4ZvHHaeAULlGL6msvG/Dhp89+OC/B9Z7uufYYykkS7CQ + oBo1KCha1OOwT4qEm10ulXtnQIgBFcbqoUgGC5spsjF6tMJCEh4yyqYACO+SUUwswos1jfqIODZ3cznn + ezyTUTN3OHplGBJdcp4LNXKxC++88cZLDzjg1PHjj/L78fRi4+JqRhR0vZTIIfKKjh1ZE6OptYIeguS/ + GHBuhPVFbSDk92PSuHHOUiP/Ic58TD10hwRg0r4dCXcQr3lMg00AHgkZg2ZntU9CxeosLiqSyECXLI5M + cgjPQnCLMvNM9p8rYTOA4Ab0qGoqmROM09IDrM7TTizmNmIVoJdFuDejo1J0jEi5HlR5KuVkrlIjRJk+ + zeEhz49ECCDQB+clSqiv3lfY5C8ZEShrD1Z2hqpHR2rHRRu6C5p6ClonsuU39/DfwoYJBXXd4arRwCF7 + +kvbOMRf3OzHNMRZKjylBA45IYSaUlcQ7kyBExIpCRVmIOz3jsqcQlNyvcDC3Km9pECUFBWmLhuWAD5x + 05Iyks7YcpIGgj2bbreMxjODyedCejzl+iWjMw7cGTcKPtUBr4REVPNemKT50Whc4S46RFYGSf8xooMY + N4r9AVO0q6Bgj912I5MPs4YMdJyiudBEk0HX5x99dNv48STMxaVSTJZACBxOq6tToJKjEvc/f/7z+1yu + W53OB6ZP/9mFF/7tzTdJ9SOAF9ewH154IZ5SFOBW2+0KRXoJFrpcLbpO2pwiW6qsAzPZ0vAnEywU2RSR + iDmbgtgqijBWalP85d57VSL8ZQ7HBbJ2EkUEhSKMpnU7HKj5jEHUbepUlgUUbjx248bDd9hhfXU1yA3l + Fb7PPvLnOjZJxMW8xhYEBeHIQBZVFScIzpj5omp4MLWQtC5SY6kAP9AlmIXzk0kAQfyCfITZrYy+9OPT + 4h6Cmxqr+Ga+NGvX/zn5e0JtVkzMhIYEtJ7BCFqQH1mxfAeKORiH0C1AGn44i92b0MDNlNKR9bXUKJVi + 2dshkGw/3YcVWBEpbc6vbMe2C5R1BCsw+MaEqsaHqydE6ibmN04uaJla1Da9qG1a0chpBa1TikdMrWyf + WdzcG64dF6oaE6jo5KiYaYintMkvAod13kKBhVBJRbAwUETSofKOSukZqcTW7x2VOYX9xQtjRmEu96mO + FW7roL+upoqQofUXSSKDTOvv5z8nbojaLfdGfvNnkCVZBNYKuVSnN+ILiqrFMZoDGolF+dGsw6tGBj3m + jmEOzho7FuyBo4hNo+SkMyJAWjfafnfffWc7nRiFG2V+PWXtjPx6sHCSxzO9u1th4YknnkjBI0giWei2 + fPXpp7+94II/3n33lzGOJT7ewRItv7jnnkPdbiwqsHB3mYQ+HSCkmDDWnim6ZgChwS4BHQn+IMuijOmx + sWwKqhpdeOGFJPJTVSptNsWf7rxTlYy4xOE4T9NE7SSpCENiCWpnFOig1vH4pqb5vb3zW5pnhUMzdR1q + D45cCkFgxa5xOveAWSMPIWuQo0gc7DRxX8MxZQCDL2q8DGqZbf2NS/YKQFurqaAQXqlF2lrur5KwDkRJ + VTFHAoSDE5GxCJG/x0Ga+7WsnEF4x3LOv2IaLCiIMBNaPJWx5KArWM3EsdnpIsRFi4tQStgel+GXFpNV + Et41s01hQT4ZA1b6xOI+NI9hkyRnQynT4TQlHIgujIBAVwAiaK2/sDlS2RmpHhOpGRep64nWT47U9Ubq + pkbrp0Ubphc0zyxsnVU0cnZR2+yikTMLR84sbptZPHJGQXNvtH5ipHY8WBis7BKe0jI8pSNwqAosLMYu + rPUUQCXFQVoKa0Z6Rw0slPRRh8opjBVp6k+ul3UKh+TD8q2ksAhp6UzPxlst4CIrf0Km17Kyv8frgcha + XFzAcCksiKamX6sTxkIbA07PHfk8Xm5NmG5onnkCxeGoEws4ZpfEiXdYaZuxjxEdNMii+Pc6IuElixYR + mTvnnHMQ/MQczJqxmRYRKad+/4oVRArJat/HblfwMwtBL1Xal7TC8nIFhGvXrkWJG2IIMqFZRArTtoQd + 3v3FL06rqkJ0FOuKABtGITXWqdgwwpZXLSv0Gn5FI1vALMTD2g17WkivUYK4o0M1e5999oFzy2KCCGvq + zMvfXXGFKhlxscNB7aQjZE0oSmFAYR0tCzfWyzAkqRrtLtcYl4v+ocrxdNg9lEPCsezz7+z2ztOERxdD + EH1tWK8IwWAFqAwQo/GiippcRZk/TIuBAJV6c/JtYFYWRfKFwMo3+DGIKgkXuVR/EEGNb8Q8pQGiJE22 + jD+jz8Ct5ub64qLCtECo8EyAXyL0FfJiMDllsZqhfSDAFRHWoZ1sCYrhSUgAhECgJIWSwCDpMMTtKoBA + T36zr6g9WD4mXDMhv3FKQcuMohGzC0fOLWiZG22cE2mcW9A8r7B1QdHIBUVtbPOL2ucVtc8FFAtaZxS0 + TMtv7I3U9oRrukPVY0OVo4Plwi70l0KiwUeqjEJ8rWQZ4iBVrJkCpw8H6cA8CrtIWzTLcJulhTLu88Gr + 0SwWp6nNwbRtEkNqSDMRSf+fMX0S5aioFn3c0YdMnMDUtP2T0DY14tgD95ROgRhVgeIf6CzFERmY2uqq + K1oaa1V9GutMGbNflKQknHu1VAoc0bpkyRIEw2Dqo28JTT+tvqUVmEm2z3uvvnpufj45hWS84dbbWVJm + IG1OcLmmhQK9ft/0WMGj4447bkiUuJO15LN//evyMWOU/BsxS6wrshuhzIA6rR6PChOyBjZbVEaElV8K + FQJNI1gIuWak329kU2zZsoXaFCh9415OkU3xm8svV4ow5zkc5E5sttlYFmAfg2ooXDdoGopueK1VJeQm + 2ExSCxScphYg+/TaNNIf+S8EUaTUcIfWyvR5mh1WZXiFX9cmdKIcqP7GIwPJeVQNyxEIGbf/o04X+gMI + AzQSThTWpyOBymnnmnQ7SEar1VwyLAdl2/EBSyCCKnxi6VxcWIi0jZXZAK4mRJi0uJuu4Tn9XWSemeFc + 3BDBTV0MWE/AGYhC44TGAqvFV9TqL+4Ilo8LV0/Kb5xeOGJuyaiFpaOXlI3dsXT0jlXjV3XO2a+ld13p + qB3LOncq6VxW0rm0pHNxyagdikctLGqfX9g6O795RrR+SqRussDCauEjDZbjI8UoHCmMwlKMQtIqSDQU + RqFbGoXQR3U/lBkRKQSSNZFQKLijcUCYKR1ye5exnKmvrwmHeGCiqsOQZ3FafDiCMuBAbxegGRrblrFF + GSYGJWmk8+ZMN4QwVDCDqEzat0uMbFRvdd0gtSumokpiUxrQKq8LzfypPWO72loMr93g0S84rpzK7B6R + kClEtkjHlGkAePbagsGZPT2oPDN94xeFoz985qABSD888kjq4gI/5PNhhxHcolRhj9s1JRLudrkmI7om + PyhxU5CIdMYclbjVdWH9xBF/qNV057JlQhMcVNY0MvDwMYIuo3UH1hh2leLLDAZCpcijHKSqGwkWjo41 + m9oUcI6QI6DCoqGbOphz9KvLL0f15kKX60xdP0HTYMrAHqIrhEkqUY0iR9S3ZCuVWqD8howIpQUK8rEZ + cqD8ScmBwo4hLmjSSrVRToaYxuDJ2sxptPjKDMluDPK09QVpW1pidvLGCN+pxJVUCAWWIMMkfH2J9kqG + 7sIBNUTTRYrOtNJFHE5T6qqrG2vxGgggFJ4krzdhv8UZHvx3woTRE3vGDAWID8mgUFqhdsrkom1GSjtQ + 5CuqCZQ1Bys7QlVjwzU9OD/zm+YUtS0q7dqxvHtF5aRdqqbsVj1lbdWktaMWHrT6kEtn7LK1Zeo+zVPW + l41dWTZmedmYncvGAJNLSzoWFY6Yl980K1I/LVJLpHBiuLqbcwYxCgWVtE04SKVR6MU7CoMUIAz3A6FT + eUcVZUaHO0pOYaw2E25bFSnM2jUKGaSyslylj4T8wYRKB4qXNTR9nPwsoCDJnujVxe2iVouZNiBZapEk + 6emDy1LHWYEin4G1f2V5YThkBj+V4wzlgdnN2HxIEbpYothUsrNBcze/1DhtCiJRc/UoBZZuh4N1Y1h3 + kAOAX3QUqi7TpsHRJyaH5jUJatll72VkI5IAd05Dw4FUQSLihea1NIPG2GwU7KVsL4UgpsWUuIHnBx98 + kMIXuStxA/AAKj/NTX3hnHMAwo26vqfdbgAhBhnQAhBGyaOK5R6oRALVh+ZgoblOU09Li4Lw3XffnSwU + cv6QyFHhSX7Gdezrl19+qct1tsuFoxilbAR3iPbh51QpgAAbDQDYSATkJ35acA6DjzTHmtjGd1EUMCaH + pgxBRos56yMjh8Fwv3Gcn8nXeLNkJlL8aw5HsaWxAZTKtjEiA4rpJfXhvK1yCspgEVxUWNA9djT18LJt + mNXjBLVS2nzqAFWNdfB6HczDBESBK/V5pTd1wGxG1l5pSVEolOZAlS2Wdvked3WO4glmotYm/F/oQNtd + XiRdSGDwFVYHylpC1aMi9d3CBUrYb8SC4vYlpaNXVHTvWt27rm7m+oZ5GxoXHMDWMHf/xrkHjpy/aeTc + gzvmHVLfu3d5964VE9ZUdK8GL8vG7lwyaknhiPkFzXOiDTOj9VMj9ZPz6ycXwampmxCqIlgoI4UkFxaR + SqGAEO8oKfZ4R1VCYX9mvcPpo5Chk+qGqkghKGhIzFh5sHRKfU11ZVlpEqZl/HrM6XISlW1qrIsMj8au + uc1i5WgacMafGGEFBVGEJ6zcYNp9BvuBjUOMWVUhGYMu6HYTHuQlNqteMcGRTgEtT02LbPzGkL8ylMDM + M7WccaS/xbRgUTM4IksRrztsdxDfwu02uqxM2V6qwB51G4Y8IJcwAePHV16JRUgldMrAEpnDITkaE0cS + VYDDHrLopk2jYcuXL7/ssssQ/lYht4zg1tiZA/FSkhCCiin5kRBwjHt8++mnj/J4aAmQDHNHuEbBY1l4 + r8blrPT7wLmEuGIEC4VAnaYp8m2r1zslRvbZvHkzEjmkwHNdyEf8VGJ1Rqtev/56kkmQYD3CbieDkBpV + pHCokhFcnWq6yrzjQbMp5TMePYiohEDZ+K7kQI2iuKqpKvfRiGumHaJZ7JBiVFs8G4goUsoGASE8l5Li + olzYLsMRH6S1tTXVY7s6iecNvkGxvpRinckiRqnhBM5ROBCKC+wpuxBEJOaCuFrcGUDx0Z1tI1uaktYt + iLVSOhxT4b0omTfQdcSh2MqVFWX4zzMFwnA4PKK5iRKqg3uJqzDfGr/HIiJG6CJn2uGm5gNhOW+BgEAy + /6INPfnN0wpb5xa2LS4etXPpmF0quveomry+dvr+DfMObll82Iidjhy5/Ch+tiw5vGH+IXWzNtbPOqhu + xgHVveurJu1ZNWmPyom7lU/YpWzsCjylRW07EDgsaJ1T0DKzoHla6YgZ1R2zixoxDUeHKjsDpSN9RS3e + gkZPfq07Uk1yvZQhFWFC8ihiFqHgjupuvwP10YFaa3SupQHPmF48d87kbtKikiYd+vxe2CXq1Ro5snn6 + tIm1tZWZrCm2t0QYcyKhzlJGXbIbkLrmA9aqLFogMCFpkGlEhLtgbZuQTWBGQcMFqorB8qoxtTHBiVlP + lomHkYH1xlbOf+UkiOAb0yK7AddGQZzUc585QMjcrdj/E6S2GTXiEfl84YUXkJIZwsRB5ZDEGILwwpnN + SPbJBx+cOm7caodjASJn+GpkYKxVkkRaKQVM5DJGPyGLjpCbxSq1yZCSBnAGTDQ0a7jNX7zyyq+feuqF + s866cuLEw9xuyDK0hGx0AckSCOthnTgcpU6nykBQqw1zdrkBhPxJqPPE5GY68vNVNsX8+fNPPvlk6uty + USUKA4OGL2ikffinP71+yy3XjB59vMwFVLnwxEopBD9OqtvgCCXUp5ycSu1MeQWYXRQuGpsqCqjKCJu1 + 0LIwBMWAtIAh7IMLTianD5gCEjK/LM0R1naCOOYSQqaW5h0rN2Ltsv17KThJdlrVJwkpKiLeweo+OZ+I + 0+YHIxVFZUT7zLwbDiRFCkCSnuR4g4HEs4b6GrIPM7qLhDuTGk9MJ+4SgYAP8k4WIWRmPIzUwbM982lJ + URERMdUGJtL8goLa+nqq58LPRN7FX9ocrh1d0DK5uGNu4+TVjZN3Lxm1qqRzt7Kxe1X0bKiecnDdzMMa + 5x/VsuS4EctPaF99UvsuJ7WtPGHEzse1LD26aeER9XM31848qHba/jVT9q3u3bty8h6VPbuVj19dOnpn + FTIs7lhQ3DancMTMohHTi1un5jeSbjE2XN0lKDPFLd78RiE0AxCGSaIoR61GJRSakij8Dt2ngJAwoSE6 + KnRHrXzoF0AO0z7ZzpjRu67Zcc1qKgEIoXUqK0WjUBCyjEAzFhura+uralKHHoWdWlsdCfc/lbQ3wmMT + Eg2p5Q8SnYVVIqZt3LAYDIFC+1jVQ5fTH6YAUEeICLoERAmEsOFKgBBsfGm02drcnq5QuNrhYLoEL81l + g+LsQnOjuC5ebQgUXIsuRieMkyu64x577IGyGoYXwl3ZWV3JjgL8cEjCRKVMLp9f/+xnr9xwwz3r1180 + c+bBZWVkAswB8yTjAwAQ9R80TRSJhUSan6+UuJcuXUqVWkRbcmHxoFVNsSR04x648so7dtnluq6us3X9 + xFihRNInVtjtMDbJ4aMSBUAI/VI5J9Vqg0djYKHqYUaaDy0IU7DQyKYYb8qGpOVgIfFCPqJE8N1337X/ + /pc0NXFpoqQQVmEM7Uv6oDRGYcEoYxRzkOvGCC8C4dRGG5QiqNpU9WCFf4YCTurFEFMtWdWDhypDVCpI + pIcZ+AzYKHG+R5/Px9ScECeysx1FmDAmidI/dcrSFmlfVXbgpcsoxCiwyuUGycy3j7soIxhIGlak/K/X + n7peD/oGmFCVlWVIWRk3yJMCNpLdCE3FBIWOYOWRpe40qSoj0rIxLod8AWG+HVCgv3yseLrI8wSdvgJX + sAzBs2BFJymAQGDZuGU1k9d2LtzcPO3gsjH7lo49sHzCIdVTttTPOq5p4Umty05rW3lWx5qzO3bl55lt + q04bueLk1mUnNC8+pnHBkfVzJBbOOKB2+n41U9dX9YKF+EhXlY9fXj5uWdmYxSWdC4raZxeOmF7Q0pvf + NDFSPy5UDWWmzVfcQmK+J1ongBDFtX4glBYhuqNSa013BzyeMIJjIkwogLC/EkX2McK4p4IOxMwZk7q6 + qIU+BJRfMkZb6hrIx0jNn64qL581dQorFCvv1RDuI2wyoZcnEFVZgQoC1WKflwBPF5Nvhc2GrQYekElG + Phm51cvb25d3dJBexsZ/u92ebn+g2e7AdFAUCfNkrdxiCegzQjRVwwHLRIgFA8WjHvkSGY1bt24d2iWY + LHHFDXIHRcxBkuqwhJ65886799rr8qrqM3z+w51OjDAKIeEXneZwKHMQ7KnBGIrdOzfeO2KECrnBaL3n + nntyKc8EL+ZXt932yOLFNwUCZCygu0Y9CqKDVD4iLX1Xu31nu51KFL0OxziHA99si81GmFCRMCN5NkNl + xvA6AoRCNT5WyspcwaPR6Zws5WYopnHMMccQLESS+7aLL75gxx2PkXRZRGGAQPyxIiM+lkypVgOQPwFg + PAFxV1S0YTFgKCLocvqlcqUZ/1IsgIwBzDTH2t9YlZsHNp49tkwdHsYZWFkmDMtxRWzHLPycLKBFeyxY + qHGvp/QoZqbjDITP6J3c3srb1g+0YExRUb4/8/TzZEuBtHMI/FXUPllPGHsKIZiUki75+eHS0qKENgMG + KFqgGfEQITGAx5kOgFj8JYHdQleoxcSAPhHhQF2EA71hINCTXx8oQRStp7B1Ttnonaon7147Y7+6mQfX + TD20cuLhFRO2VPYcWz3lxPo5p7csOadtxYWjdru0a91lXXtcOmq3i9pWnTti+VmtO57esvTk5h2Ob5x/ + dP2cw+vnHFo/Z1P97APrZu5XM23v6im7V03etWry6sqJyyu6l5aOXlg8am5R24zCEVPymydG6saHsAgr + 2hGa8RU1IcyNEjdAKGS4gxRvAgjzRQYF1e0lcbS/MJPDrSxCFSO0ahGmHQEZ7ZB6dclTKcMVWwiapPkg + qoHbPTvva7pzJ/67giX4e7D4sMkUBDJ7MvCVF1RAoM1WqWn1Tr3F6WyT2iLj7Pbdurq+e9VVH73//t/+ + +Mf9JkyYKifrCQ77OJtGCT0qBwEeKp5knjp5oQcDoeEa5bpwHfG4Nuq6qrcOuQMgpBI9uJU7+JnPALL+ + 8Ve/enzz5u8UFIhySG73sR7v/rqT6CC54bMdDhIniA6qGwF4uBdlCmP7Iq0yXVaphYd57rnnPv/889mU + Z/rqq79u2/bchAn36Trl4FFyuUTXIWoSnDsaoWpN21fTVkhIpjFTRN86RjscwDCYRJOqNUelw1mg2ePM + btW9qksVRBnZFAQL2yje29uLGPemgw46YePGQ7q79w4G95aS35iAIm2RTdP2kMmLFIsgd1DZxFxRZQGa + Jb9VCFlt8IBDeMSoVDdQC9SiLxQAxds2gEtsoQh2dmOeo3hhlXhvBmfoVw0V77qoyafgMHNEtH5FLBVo + DGbWiUyy9MctzUV7SOdNYjRLE41EpyxdWaqvMgJ+WZaW/nEKhSBT/9CS0sLippp6tf4Q9OCBtrXqGQFU + /C3J7ajGpG0PVnuyOJRakUgTUPYJLcSkd3iQa8Hx6M2v85fCCEUCjeT3ZRXdu9fNPLB50ZaWpZh3p9TP + PbV2xmnVU86smXp2/ezzWxZf2rb6O117XTd2vxvG7ntd17qr2ldfOmKnC1qWntu8+MzmHU5tXHBiw9xj + 6+dsaQAL526un3Nw3az9a2fsUzt9z5ppu9dMBQtXVkzYsWzMopLOecXtsG/goAKE5FEIvoy/dATqo6Ja + RT4y3NIiHBAjVOUJBWtUio7G6vTG9GWsj7Qs92RNZKYtMTpTs5h4o9lhqBQFs2x0osMUS4XNZdP8Om5m + TVmBRiCwBH68puGobNX1SdHIzML8SS7XhqlTv3/ttZ99+qmBK+/94Q8Hd3UtlO5EEBGiP7mKcOhxpgEh + QGmcXShkG2J2tpDAkKsXNWUrIGwCCMeMUTFCqsNjEQ45EP4dtbPublUUEIVoQmIouewF9mgaOXMGAGB+ + EfvE/OIusIdoGzYxS/TJsfJM+++/P1qbUF1w3mYUxcQWfH2//URhJqdTlYMngf1iu53qfUdpGkn9GKbU + hFoke/XkXXfdqa4OhTOwkHWG8NbyaGwaDwhwImKn0grNNrd6svxGZVNgahN8BcjHVFcvRBSmrg6TlwIX + hiIMwcjdpCgaEEiBYsS+BWM2hoLY94ZT1OztNHBXjCU5P8VtFocrilz+wIDwnovappmTA61cjlYm5IUm + O1YQDuFOuLYrWxJbw06qr62Bq2kxOmilYdnto5I6kmGDIroPBKR+IFFQlN1Fkx0V8PooDEeBCxzdcYDN + 5SieyqYWEJKRlICfwVHJnOHSmEsgCmpujFQ/Sxo0NfbsXxeIBEEkL/1UhMfqwhtJPh9MzqJ2wAmj7YDG + eTBfTu3Y9fzOtZd1rLlyxPIrWxZf2bTwO02Lrm5ddm3HmpvGrL+t+6A7ezbdOW7DrZ27Xzdy+RXNiy9q + Wnhu44KzGuedWj/nxLrZx9XNOqp+9hH1sw+tm3Vw7UwcpPvWTt+rZtoe1b1rKieuKB9PNsWiklHzitpm + FrRMiTYiNNMPhIFyRRylVJMEwkgMCH0Fuof0iX4glHV6VW1CQ3EUo9AUTZD+5SF+0izTeid2j2xtVmNL + LS0zcv0nG0PSP5n+EQ7JwDXCgcq1RZpPRSQKU0o5QpnxRYqYFBAh/teOCeh0zotGtize4YEbbvjjH/5A + dC3OPnvnzTeP7OjAglksLZhp6FLGCumZsVDmGjpqK8oiIl9T1poQakUipSweCKVFCGuUaBa0jqF1jX7w + 0kt319VRgV2hoHAJgj0yJEbGnkLB/pw52RuADd3CVmCzwQ8ima/L758myzOhPQ2v9emnn86iPNM/nn/+ + 0Wj0Po+H4n93adoNmnaB3b6FyohSqxNkAgh3r6x8+NprgdgTVqzALuwlndHlHAt7S0YucVcq9koccWa7 + XWjLKwyFaguLKGaj6jSBheqZjpUFF4HD2RQ9RhRGskOxAqHGkD3J4xOIa9PGRCIjQiGzlzsh81POqtmP + 3v63yZQ9J1LjrDFQMn0juFZCXmiy8xACZGYHlY0daNuothF7rFzZ2TIy60ZKc9KqoSbNPvQHRBeLKjBu + so2yiZxhjUG5VNCYsU2crqMxCdCkDAdE1nK6fYVFmHAfYCyFzUCzU5ODBCORRXbqfhUdL8RfbXaPwx11 + h6r8xSOBQBL7yIWo7NmrZsqm+pnHNC0i8ndx17prxm64dfwBd43bcM+Yfe7pWndP5+73dO5xz5j1351w + 0P2Tjniw96gHJx7+vXH73zVq7U0jd766efFlTQsvaJh/Tv3c0+tnn1Q/+/i6WcfUzTqyduZhNdMOqp6y + AZZp1eR10EcrJqwuH7ezyCkcheLMnMLW6dGGyWFkuGvGCouwsiNQMZKcRX8J+jK1VDSU6tuorA2sxyQs + Qo/N4cKjJ5RlqAVmFGNS/SuqyfsCjJm0j8TKDsaSitDCpAnjy0pYIvd/hso7Ip5xtm8+x9IwIpEWXywF + QsoOE+BE/rXDARVaOULNEDjGbp8ZCh21bNmT991HIjbTPQkDJM8NdlS+++abW9vbcS0yfSM+OYM67zLG + Vj/QLsT/FYbJJqXaZDMYj/EWIfJdUzo7gZkdd9yRHHBkZYaQLPOfv/3t/o6Oq1BO0fWTKRBvtx8uUXCl + REGDIKNsQVAQmGF9oDa+q/q3YMnEhgYVKVy/fv0tt9xCuJEkhIxyPL7+6quXli75vt8PEN5kt19utyvb + FCDcEwj0+S7eY4+//OY3qquvPOQQDLhFft8Ofp/Q4DatM0CpqMOOFoHBIDWAEJdZVWFxbUmp3+6AgQdx + Biyk/Yr40ymfkZSDEbrefEEXlDN3ynUAD67R5R5fXl4bCMT5twc7PJU3zMqrlHAfZiakq3ibrWND1tca + fCC6z8XFhSkcbnF/4r/lpaWjRrZFgvHFXQfP1PI38d48t+4Ke4NunYp6ll5Z5mzkLwRL3G6nnJMs4Ocd + fKQwmJKo0qi7FqkCUixGORhBU1b2EAFB1lz6k1MR0STQm9ZpmctVRGkkYUQm7TGxXBDkxtTUKkExJBak + uyLRosZIaYe/bFx+45ySTiBwn9ppODCPb1xwdsuSS0auuG7U2jvG7ve9CZsennjYDyYd9uTEQ5/sOeTJ + ns0/nHTEU1OOe2bGKc/NOu3ZGac82Xv0I90H3Ne5+61tK65r3fE7LUsubd7hgsaFZ9XPO7Vh7on1s4+r + nbGF+GLV5I2VE/er7Nm7smePigm7lo0jxR7FmcVFbfMKWmdGG6aWtE6v7ZpTWD8hWDkqJIsXAoSB0gZf + ca1PAKGsx6Qk1sgj9ATsbr/d5XP7gl4S350YhU6ny8PLiv9iu0XIqgR+cLpOSfVc6FaYohUVpaApq0Lj + GX8zgoEZjRhGNr4aBqKVo+JQEIckUzxGDxBIIgSOUGZ5YlFA4Pzi4jP32++5hx8m1UxBIHN9CtXmv77x + xsltbVgziC8v1HW4jpD+yT/DdsEuNKgWcaR/M7MjSjxVTtMqS2HevHknnXQS9hY2aEaOxxQBxZcOPPA6 + p5MqSFSOPRkLzGaDHgkKQo80xwWNhDnleFSpAnwnn0ZJWnd4PNNkLfiZM2eSkAD3Mgsl7j/fccfdLhdA + qMxTctghrRzscp01d+6Td91lhtVHLr8cLusyp3MH3UFTVfF67MIaiDyUKgz4Qg67Ku9nBGKVu1KJ4VG2 + XNUsjNhsxdRCgvsjeUB4WVGEYb3CxhfwjxgkPm2S4ukB9gQ7VTq8IZKQMOynJlYrwy8xEAqtauSUkuYy + ZX3mwQfGmRRgw5iuDkj/pqWtcMFZuGL8/dIB+fkRyVPdvkrmVNL22n5CGgAVoLSwCE1UAwgFLEmbOtlC + YXvzkkuTyzBNOntI+rE4Gz+bGuondo+jzTKOaOWWE/cKp4KUpHyhcTeQ48AwrldWWrxwzqyGutoUwwx3 + utmDPbit0tZwajr4UeSPNNeOmFvUMC+/ZceycXtXTyWMB73lgtZlV41cfkv7LveMWnv/mPU/mHjw8xMP + fXHSkT/pPeblKce8PPW4l6ed8PLM016de+7P5l346rwLXp51xvO9x/xg/Mbvd+15Z8eam0euvBYPauuO + F7csPa95hzObFp7SMO/42plHVfdurpx4YEXPfhUT9qqcsDtAWC6AcEcU14pGzs1vmhGunVzbOW9kz+Jo + zdhAOeKlI4PlrVT0DZTW+4qqvZiDokJvIbrbTlGqXpXn9XoDkZFt7S0trbrLA1MmFAqXl5VTVDcD0e3U + vnU6kdXHuLGj5sxCYCt+3WfhJclplyzmFOuHmG1BhYJM7sppBgKNlBTQ+WVl527c+NIzzzC5k8wODmGT + AYFpCwH+5ec/P6W5eYPLvavLTXyLGusYGWBhnF1o5JapxijbFLBR6RP4Hnvq65W9RQ0mNFyA4SEBwn++ + 8cYd4TABOVDnTLv9OJvtAJsNMU9sQUwi2DHAgKoFb+QnqEw4lSRAC1lrkKUuav7RyFh5B9I8brjhBnLy + MjUKP/vrXx9tbzdK9UIZvWzq1Icvu+yN11+nrLwZzn/93HP7BIMEDoFDMgvxYeLApMGtdq3F7y9zOXmO + NNUIE5rmTdG9uNJCHo8fC0DatYoGbCjCYP6yCUyV5eNxdyiHcIGuh+x27lpBbOoUiExHvHRjiFwx60M3 + 00sM3h+LoaqiHHtOQQ6XxucZDoUMKiPTAkiWIrFKnTNhIIOzoXcRR3aLzTPb26JgI44cxG9I7bXiVEzR + CRn1JEXjEFykJoayYo1P3PlFwwRSpjf3AXWgKC6VntsUnqocFkm0h7b1jB+zdvVyHlyK2xfVDpLBuZDM + RiZGhAPdoTpvPol60wqadh4584i2hSc3zDu9ZdllI1fc2L7L3aN2e7Bzjx907fXs2PU/nn/M24tP+vOk + w16ffNQbU49/a/qJv5p56q9mn/nWvPN/teCit+Zf/Prc816dfvILk454YtyG+zv32Naxy61tq64fufKq + kSsvH7nyopErzm3d8YymhScQJqzqPaSy54Dy7n0quveCg1PRvaZ8/IrysTuWdC4qaJmNVFuociKypcGy + 0YHSDrLpA+huS61RRN08+RUe9NVkKn3MHBR8UYDQ4w/V1NYXFBZjDsIXtQujkDwKKvRaXtawfiF0m2Lk + 8fDINWQlkuPotPT2KqXaYECWL8k+1pL2WsocVHxC5k0UGpS7TPEhCR0trqu75OijX3n+eWUFKgik5JB1 + p987L798Vlvbvi7XKkl6FDlwMSzE2WhwZ8wybAYQUolQ5RGOLSxUQLjffvvdcccdJPxlLeBihpPXTzpJ + KUqfJRWlD7XZ1slCE9NkXFCgIAaTxABlCBrJcColgP8KEmaskZRfmDp+vGrn1q1bH3vsMdLS09Y5irNW + 3zjpJMUavXf27Dfuuuvt3/6WFHtQEPvbvOfH7723pbwcYufusjbTCod9gVMnubDNZqu3a0UylUJRZpTF + NgAImaBdnvxA0IObJJYYGo5ppBmKMIQbwT8crfyJs6GD11xenu/zDWbHpB1mCXcQ4CGqo/e/orxW9fXV + yMF/E+9XrEGsbgFCqo2qLuIdF9wKU4fRPKZ+I1dPgpYIyMXdkZYnivHk4hyKwwZFwUvh94trgIyFxbdK + 4LqQSdku3CENssTziWiAxCdumVpLTD4oO8JKNTeMvqmuKp/QPZrUwLQPXekkmy1L0R4hbSMsxVw+jBAa + xnSdjc9BdIDD4fJiTkE8CVWNRtWssHXnoo69xu903hFXvr7wsEfb19zRte7B0Xs/OXa/F8cf8Gr3Qa+P + O+DN8fv/et4xf59+2DsTDvnt5C3/N3Xr2zNO/sPsM/4w97w/LLj47QWX/n7ehW/OOvNnU455ofugx0fv + eX/7mrtGrrxl5Irr21Ze1bb6ivZdLmlfdf6Inc9o3uGE+tlbqqduquzZv6pnv5bpB6K4RoCwauLKuskr + KsYszm+cEaqeHCwb7y/p8hV3+IrbkPMmccIHX5TavNFKV7jMKYoRqjx6Kbct1GSoR+ghfbA/OijIojLK + JCvUZ5BHqNZBOS5Vcnm6ccfi22wb2cxwHMJzDj6VmIxUtjXCaXa7IlAQNAIFFzQ1XXzssS89/7yKBWYB + gcbE/c5LL53a2Eg6GowPMxbG8UgNu1ABs7K3lLLMKL9f5a2vWrWKqrwYW/BlcjcKfzB16jUyXe8caQ5S + chanKLot46VXsEawhDTETjGDDFWwAUkCcvUARlKZBtYMndYtpeD4rFmzBiVuCK5I1aSo7TDYZ/vP1157 + euHC3996K6Wg+CuyZyRjcJI4ouxXX3xxaW8veX4bHA62g/Oju0XCU2y2LlRvdJ1VPehlVuI2P3plvgg5 + XiMqHNOJjVOE4b9KNUbcpsOB/DMBJTMZNZuZKNYUpjOqtBsTJS8fkPNNJguphmTkAwQREVJJyuYfnndV + uPgI8yS3oviTFHaJX/WLCKLXZ06TT+v34g4IEFJ3EJjB8osrrK2MVzAotcHw7ZlF1QOR8C8C5WKKd7hI + P4dsEqnpKm6fXdGzum7GxsYFxzcvvWDiPvcsPfHlKZtf7D7oJxMPfW3ykb+Zcsyfphz7bu9Rf+3Z/Ndx + B7wzdr8/j9v/TxM2vdO75S/Ttr475/T35p3zt/kX/GXBJX8SWHjBb2ee/POezc+OWf9ox67fbVt558gV + t4xcfp0EwsvbVl00ciUW4WkCCOduqZm2qXLS/vVT9h8588C6XmKEKysn7FTVvaykYx5ao8HKnkDZWH9J + 50AUhCxahbIaKEiOv2CKxsrTkzUhUNDpQRBcqsmIqrwi9okhqDZrsechG7/0M0uejLQekl2b8yA4m3DA + 8VBlfTFLERTpHkhsF5ujg37qUdjtqnDd5Lq6o/bd98HvfQ+8wabBFjEcoVln7/3fM8+cUFWFBZPQLjSz + EI0UbICQVQBNwkYYqetTZU79nDlzTjnlFBTIAGbrVmnCZlMX93vNzfhFz8Ei1LQjjUp7kh6C8xaDFY9o + IQ9CpncoCDRCYoYlrbLUSx2OOhIraafM9OBz1FFH4cVFHzwzJe6vv1YQqD4Y3xyesP7ww4ceqmRfSLff + 6POu0HW0sCnY2+pwlNv6k/xYWxhtjsNC89Mn7QhRJhIChDsamSGXC67NYFEYdaohfKu+bTNmRhOBoqKk + yMkjYZz0uRzvkZe3KL8gGmJhE/+Rs02Cuki88sbvsyDcKaeoMI4tRUb7WyVEWaVTrahI1DrNqCeHfGd6 + gBnS6HlhFWObUlTAHXCHygLlbei2VE3epXnJYaPWnjX+gOsnHvr9SUc8OemIn0w88vXpW/+48Mx/zjvz + 37PP/HTuuV/OPuur6Sd90XvUf3o2f9x90EcTNn048bAPe4/6YPrxH8w785/zz/tw3vl/m3vBO4sv/vOK + y/86+4Rfjt3/qc49Hm7f5T6AsG3lLbhG21dd1bby0pErzm9ddkbzohMb5h0NZbR6yoGVE/GLrqvo3q1i + /KqK7p3Lxy0hfbCwdUakbhK17ANlXf6Sdl/xCK9Mole2oFSTKZa2YNThDjtcsuKEyJcAAt1mFBSCKNIc + FBDYvw4Yum7eHvROArCCkmNypGR9Zdws3EeywwHa8rKSwkLgI82HAQ19lHGZ8G00+0WBXICwyu9fOmvW + YZs3X3DBBXffffdPf/pTPKJUQsjIpkkGlr9/8skTqquxC+HOqHghHEUYGdiFQE4cFiotGwGEmqYicBRR + VACDgAsaKHgLcyxA8dl7790rsybOIINe+kVVpT0kxBTrBN+goEfizxkYElOsE6W8I4xpaTZV+HyNfn8z + gWSUuOWHWhm5K3HTmYMLM6kefu3mm5FAI9ljo90OwYdIIakOpGzi0VUQrkpSJARCsUyWm4BzME+4VKBa + i8pZ7U2NY0a0EtpSKxKVURO3CEg37iz9nStA35cSZZYDGJZO/E3sxDuIqgvUOd6vhKYabxwvHqJoObZG + uBNJO05Y4ZZ4rWd7OqNh/eA2JL6Y43I8mQc14e3QSOKLqGuDgnBureeP5bhKSNgYTATKVhQXFSgDQKjE + OJwOp1/3FXrzm0LVE4tH7VQ386D2Xc6acMitM055Yv6Fv1h46R/mX/TenLM/mnnqJ/PP+nrHy/oWX9G3 + w5V9i68RP+df2Dfr9L5pW7/uPfqryVs+6z3q0ynHfDx160czT/loztkfzj3vvTnnvDPv7D/MOeXXEw/7 + 6dj9BBCO2vW7HWvu6tj11o4117fv8p2Ryy9qWXJWw9yTamccXT0FPZqNFRP2LR+7BzrdJaNXwJEpG7uk + pGt+Udus/CZqMHUHK0YHyjr8xVJKRnlERTFeVLaVsigFCKnEi46azy4hUNZdUsqiwhbsr7vU7xRVHu9c + fDcDuxnpQpQdRL4Ovm9Nz2KpZb1UvQLxZK8Qf+IFSFvDRfkEYroJCU5mACHTJX5RooM1Pt/USZOQGiEH + AJEUVQh+SJyQau7+v6efxi4ECw270IyF5lx7RUVRtEwhLkOYkEpMU6cCMCtXrrzyyispCp9p0nocQn/+ + 4Yf3NjRcpuunwxfVtE02G/njMDDJmUNBhpw8sJkGGKRWYzSJXkWWSb5nRjgzqjvKnE68uBSmMJS4Dz30 + 0NyVuJMtLP78/PNnksqi6xSK2iCduqS9j7PZaDy0F4BQNX4wX2awaagU9RQoFufnlxUWYmgY4GcYwUP3 + MuXBk5w/d0ZXRztFuNKWJsgaS2I+saxPkPRAZtuyspKqqvJk1o8IteRGCbHQ6MQPRKpyinykrD8Uzi0q + wBeTPv9PXQKDq7GhrqmhLiMFSsxWei8ju3PA0E3SvegboAXt9wulb+EMxRfqjXgitf6SMZFawGZd1eRj + WpZdAZ9l2omvLLjknSXXfLLk6q8WXtY39xwBeLPP6ltwSd/S6/tW3t23+nt9q+7rW35H35JrJRye0Tf9 + xL5px3817YTPZpzyyewzP5577j/mnv/+nHP+PPPU30457rWJh/5o3AFPjd77oa5193XucWfXHreM2u1a + zMHmJefUzTqxqveoigmby8cfWDpmn5Ku3Us6VheN3Klw5OKikQuL2+YWjZgpytNTm74C5g6CasQFG30F + daCgKElPskS42BUs0P0GR7QfBY3cebOgmnyb1YwlB8IQDkXWWaUl/UwZUlkzXcuwpiuIUFnov+w0iJsE + lX+P6ZIwGMEw/KIdsdJCe+21F7XgUbgmTDUkzBQ1of/m0UePKylRWBhnFzJ9K7tQVSpQ+QlhUcJC8GXa + ScyPFYWHivLEE08QucypYV9//f1RowwgPNhmo9QfRQcJEGJUKSwx6vwNppwoo8roQJrKEpQOhGo7JhpV + 5ZlQ4r7wwgtJfMxFiVsZhdxpXEz0i08/vWr06C1KDhQRHAWEgyzCwUAo9CE9WIDb7TDjjUn2xfqUmmoF + ZzoLVMxxYzory8tIakpmZGSx1oybKAmxK6DilrE+MwoHpr3lmGxY2h3/mzsg6ZIpqUTMVNF8cuGtJ5vx + 0IHAuO6VFfyS2vrqEIvxnbgeBHdDFMGADJnoY0QEMZLIK/AUVFHqPb8ZrZa1pV1HVPac1zD39o41z0zY + 9NsZp/xr/oVfA4Eg39xzBQrOPK1vztl9i67oW35X3+4/6Nv7xb71P+7b69m+tY/2rbirb4fvyN1OYzdc + pp/NO+/f8y/4aN4F780990+zTv/11K0/n3TEi90H/3DcfhBt7hm9122de9zQvvpyBEjrZp5UMeHI0tEH + l4zaUNy+Z9HI3QpHrMhvWlo6YmnT+NU1nUvyqUFY2xOqHBssHxUsawuhplbY4InKuoPRck+k1B0ucoUK + nDEUFEFBYQsK+Riy5qW4toj7x2rwqj4wAaG5o3DFKBmF/8rApFE8v0zf7UzhNqNbU/O4cu7BF1UlcHFC + Tm5vV849DJp77703FxXphNbMW/fff1xZWTIfKXahquwDCClyP+lrWFpkfE+qqFAN23PPPW+++ea33nor + xzr1z+6+uwJC8uiVRQgQKouQtAFlVBmpAoOX2GaTWhTlkPRR1dTekSNVUzdu3IiT+Te/+U12TQX88EvD + lCETgxWJWUngPx9+eFVPDxn3RF4Rxd7RZpsuya6kA0IqjyR3jeLNw6eXWH7atIy0aFKYaRqwQMP+kMeV + YLUnlPNM2bdpB6qiblpMME82IcpsNjFd8tZb99elbVvqHSTR1J3dFG/l0hJCKAFogXtpy+NZA4RpTysZ + o/24peZQZsu4ShdpTxK3ChFeE4lVwrubTpo8o4kOxbZwMJR8LhV15CFSegsrovVdpaPnV/fuVTfzmPrZ + FzbMv711x6c6d39rwkEfTt365ewz++ad37fg4r4FFwmEAwWnn9w3+wzhDl11T9+6p/s2/Lxv41t9B77R + t+/LAhd3vq1vEYbjuViNX8899/N5F/x73gUfzjvv3dln/t/0k16fcsxLk454dsKmx8Yf8N0x+9zRtecN + HbteMWJHcPfkqklbSkcfVNS2T2HrHgUtu+Q37ZzfuDhSN698xA6jJq2pGjEPakygpNMvCKItkfKR4ZJm + Ci0hq+1GTTQkITAQdfrDujfAfREUtMt8eaEd0w9+MhyYAvzMzwY/xsiR6FZaGEAZPfPh2RnURDBiWN/e + wQYNQAj1cWw4rJyQqEifc845zz33XBaCYalpNW/ef/8xRUUGFpJTYfaRwtrHEFQMRoAQkQ8UokXDvN7p + kybRsNmzZ5922mnPPPMMSY25GIW/v+02YoRoWx/rcBgxQqrvkldOCh2QrLLxFFMmztFuxNiUd1RFNKlL + rIzC0YGAUuLGz4waThZ9aIZAiKOQbpAw5QN96f233/7Zd75zTXf3Vq/3IIeD8kzUyyW6iRYMifC1MimQ + DlSs0cEWIbag0hOxOHLVFKnq4ECIMB/IjCy9W/2LS+YmqvnEGXnilz4/8srN9fU+aZ9xQqDCusFhsZ3Z + 7ZbRFMwlFJUkxbWYYSidkWNOeorzc3X1LOL2MZBM9XBGvcH+caw6/pujzaAWMTzlivJSss7i7UWTsh1/ + krQjqwNSkXkS3KDoAmgaHk+0ONrQXjVpYeuy/bvWnT5u/5vG7//IuA0vjT/wD5OO+NeMk78G/4C0xVf3 + Lbuhb8eb+5bd1G/tzTilb86Zfauu79vtu317/LBvv1f6Dvhl3/6/EKbhrg/17XRL36LLhY903nl98y/4 + bP4F/5x77nuzTn972olvkFw/+cjnJh32RM/mB7sPvnvcATeP3vvqjl0vbFl2Wt3sYyonbirp2geTtKB1 + VUHzjtHGRdGGOZHa6eGqyaGKCf7iTl/hSG9+iyfaIGS+C2rdoXKnn3BgoUwTjDi9IZ2kX3IkXAICSZCQ + ZWdhAwlGjFCNMcn6pnn0dB1pMayP1FBmvZNjMDmjcZbFznLVgwyW1cGRxSUYSnh46U6MHkyfiJzEicZR + UGJaS4syaMjbu+2227IQDEvLL/3lPfdsiUQMLJxhwkKlO4NNAwqqwoc0DKVT8hqnNDWphhHFpGEYhVR1 + z5o++vHbb99QWEg2/bG6fpim7WWzLZWyagacKC2xhHCilhEGdxSrmrEF/BhG4eRYU/fdd1+a+uabb1ps + KhDIHWEFsj8+VWhB3CaZGBQ7fP4HP3j0lFOuHzcOHRzaDGWUDtyF8kzSL4pTV0G4ovkoCM+R5KmI0ACn + 1+ul9IFYiZvGpKQkpxmi4GJNacXS+XOXLJoDi0EZHMS4MwVCGoHIZ6ZTfOr3IkO8yBOFSwvzU6eT0yEk + po9safZ705tiWby2CQ9BmbqloQGOCPYfwctMc/XEVJAz8iVsGL2BINfgSCrLBfxzBpzn/lgFlusudzg/ + XNtSOXF22+r9J225aN75Dy255rUdb/zrsus/XXrdV8tu7FuxrW/NA8LVufvjwshb91TfXs/17fFU3+qH + +3a8VaDjokv6drq2b/ntfWse7NvzGQGBe0rX6Mp7+jgcIJx3Ae7Tz2ed+dHM096ddsLvpxz9y2lHv9p7 + +PPYghM23d+z+Z6eQ24dv/HaMftc0rHrGSOWHd805/DqyRvKxq4t6VhRNGJJQcuC/MaZkbrecPWEQNlo + b3GbgMBIvTtc7QpWugJlTl+R7s3v19F2UVBCmYAeDStQdwr86y8oIbMD+7M/41bp/Y8i5iBNMspYfZCZ + YIVsMlTDNIvzpLmHLM446BD8K9FAUElf9E/iNht4Q6G7Xp9vhrS9Zs2aRbqCEgzLNDc8LRa+ft99x1dV + 7a002CSPVGlzwyNVWIhzEjjEMqOugqrz0O3zTZfy1qphTz75JHUEyTHIOqfwmfXrySOEfrnZbiePkEgb + 3EvlYFTcSzNfxhyAVkwZlYqn3Mv0obJflWE9GtG1WB+eeuqp9KGVpnIjsGFxgSoIxARUEPjMY49976ij + rmlvB7ZPidXLxSlKkcLlmiYE4aQuNvJ1+EVVsz15NqcUGczIOpDGwfaEWv4rqBcS8YRv3yKlXsk8SkuR + M/g83lHtIyjnSaZ2diOXc5UUwNNE51zcTQr5MfP5+31FA36V3fX7j8KilXXSU2E/d41WWWVFeTKqZ39y + Av0J4yorxqxYhA08EPLR2FGjigvQVA9UVpRmVORPPSNiqCL1PkbTM9uXOXVZkoOlYZ3lKl86n10mg1W4 + QnVkNUtrSkf3ti7bc+KhZy+89KHV3/+/vV/8dP/X+jb+qu+g3/Qd/Pu+Q9/pO/LvfVs+7Dvivb7Nf+o7 + 5A/iN4e/33f8P/qu/2ffmX8S4LfTrYIpgxd0l/v7dn9CYOTax8R3QZm5pm/+xVBmPp+69e+TjvhDz+Y3 + uw96eeLGH03f/GLPgY+O3e+ecQfcPn7jjd0brxqz74Wjdj+tY8XWziVHt83dVDt5j7Ixy4vbFxW2zM5v + nBatnxiqJhxIsnyrJ79BQmCFy1/iDhS7fAXkRdgl/rk8QV8wrFRDB1QWlJIIsNnYUiwgeGUTLkG2PxDp + AU/lGhKFvvzxhb6sjwYeEjkLua9xEl1RvNrWW5J6TxJ1yU/y8QLEstcrHPpIf4BkuAl2+6yaGmV7UQXw + uuuuowpgprnhaYFQcGceewwsNMcLwUJDgw0XH3DIxhflHcVanRqTW0PJ7Prrr4c+mkvD/v7qq5f7/RhY + BNsO0jR8jMiVoX2jMiiEjxHpL8SiTNXVFZ3SgECV6aHU6bAIgW3sV9g9qNNNrq1VfUhJ4bSia4oRQyiR + xE1EDAgr0uc/+clPgMAHjj/++q4uIJBwJhUKRcoEVSmkCbuKQlGaRir9aBnaRBCO7hKEI4SQ/IGQx5sp + EGJSoLUyOLAUDPh5rywOPzyo+eEIiXTGCCReFFeRLqNhjJ51YQS9B4GsKginptEUb4PgBG3fTbw4xBpo + VdpbUAGzhM1LgKyD9kuxhMUMKi8pUYJtqt6BupCakSzGQTgAzp1ZmJQzEH9NlmUx+Ea4XFzlKTGxUvIF + p24giAVP2/xe3Gd+fpvRY/pmdmYokj+marcJZyhpOMEiZKmrJi3rWnfcrNO3Lb/rV3u/8Cngd/hf+476 + Z99xn/ed1Nd3el/fuX19F8iffD/hq77jv+w76Wvxp1v6+j7q67vr674Nb4rQ4K4P9615qG83aTXu8YO+ + /Z/u2+fxvuW3SSC86KsZJ3/Yc+jvx+7zs651z4/a7Qdduz3Ytdu9o3a7pXPddaP3vnLMPheP3pva9Ce0 + 7nh40/wDG2esr5m4S9noJRSUKGiZFm2YGK6lmsSoQBmkUEGHwQtK4UMS5D3+wlCk1BuIirxAUYPH4/Mj + n+2XGREqNV6NS2H8idUqQJhyFRVnc2fzaIgvs6bLj2CNZPMBCIkzp33fMj018Ix3V3DAhmJwsqbGnaJL + 7qAR4qp0udsCwVancwzeUbd7Zne3msepYP7www9nnBtuBQn7+n798MPHFBev1/VVDn0HXVf5hUqbmxwG + hC6V6FcFiQEeN2ZWD5HCCRNUw44++uiHHnqIHI/sqCiqgU+uX09OPZ5G0IW6EzvZbGSmYxTCHYUygy8v + lGdThY3MEmsC/7B1EO+Q0jPIopJWjykGDiHsIigzJNcX5s+cNFE1NYXomgGBqARgecNOQsqAJM7nnnji + wVNOuam7+wKnk2RHzFY4ooegI6NpGK9kPe4MCur6dIeD1uIUBbnpLkYtZhdtC8qc1oxW3QxaeOfkYOEO + jRufeLfSSm4ah8CSGMLygcI9K0p4bqe5DaivluRF4hA6QMGS8vtRCbakoHBweCmGRqneyMGvc9xvhPvY + VJuJq+BJjltP0KsImQ4GPOZ0FIyt82uclIpPwpm0MqvI2JBKkBnwQaKalbEIA9s0r9Pjc3mzqFtHP1N3 + nshO6pYAs5DwM7Vc1TlVzVdJ79EdrpA7Uo84Z3XvPl17Xjz33BfXPPDPDT/rO+RtgYKH/02YgMd91nda + X9+F1Gzp6/tOX98lfX1n9Qn8O0H+PLWv75q+vrvlL4/+d9/mP/RxuHCHPi4MxL0e7Tv2Z32bnu1beZcI + KC645OOpx789bv9XOtb8sHXH7zXvcHvTwmubFl7WvOTCkTuf3bb6tPbVx7ev2NK6+KC6GesqelagHVo0 + cnZB85Row4Rw7ehQZVuwrMVXhLopGjGlFFHyhosiBWU+f9TpDni8QUSEYhQYgqZmCsz27pRMqW+E6cJA + Acnws8tQ4oCgNKOEQIXFtZuVQWl9H6qVMkMF/EJhz+KW4uTFhYWtjY2CUy6NG+UdzafaQ56tTtPwjk6i + BmxJiZrEyQ2nNDypFBgruZBTkiGj4M6AhaacCuUjBQuJeOGiZH4HCJs87ja3qwujsLxcNWynnXaiQuGL + L74InSdrB+k/f/vbqysrKfVwKIpldrtBPMHT2KRp1Q6HxMLtYmPYf7zlmFwC/+x2pJFJwSTritx/gnNK + vRogJLm+O+CfHjOsd9llF0TXXn31VbMmjoJAMjX5JY7T3/3ud7/85S8puPjCM888fPrpt/T0XOxynS3r + QyEis5lN0zZKBZxdNG2pps3RtF5NG22zGSgIEhtF6lNnECYbG9Z1BlOYPlZGtaX1nA3FLzxE/YqXilVh + cYlpbp76rtxxFg/P6BY4p3AtmqYnqXpRWliQXvVCWYRZ+wkHt1Mqy6RRtEnMNZHWtuof3LZBd8DnzHhB + jy+ttrIKfkOKfiZ75+CNe+23z1oRftZ1DHfrDyVmBUDf8unecm/huPzmFTXTTxy913dnn/X26vu+2vel + voN+1XfwbwXPBbbL/r8UiIjld35f3+USBbEIT/yyb8s/+o4AJj/o2/q5MBDPlBt4eexnAkT3+YmIC8Id + Bf92u69vFSh405eLrvznrDP/r/eIV0ave7xl6Z31s6+pmXYRFeqrp5xApnz9nMMb529qmr9//cw9qiat + KO1aWDhihjABRUHBjmAFtSMa/UUkBVI4gvJJRAFJive7vIxu1Jy8Ri684n/KOV4MjbjABh0l1Fr7UWko + TKK0A10MbkGDHoC9LOjqqqusMJLTnj/tDma0ExEpUY1T6HAo11yKTZE41GY+ifmKDD4Gq4i1xLLCRV0e + adBUYXvJSq0zKNMqCwHy2bx5M3ouzNS52F4pTMQ3vvvdowsLlY9UxQuVXUisDncflhkbEthweagJNQE5 + sVjDKAoPFQX8wEGaNUi/ddNNZzudyijcy24nOZ08CopGjdK0ZmY0ST8BY4BDQ40zSrqVxL+WwsKGYBB3 + KBuNBLlpcK3NBneU5PrRuj5t9GjVh1u2bEF07e2330Y1DTqMyov46KOPQHGUtWEkAYGA+mOXXnrrlCmX + uFzYqUAgrQKhD7LbD9S0vWVxjDU+z5qC/Lke93ib6KImU4kMAwUNpmvaYZbdDqxKiUuZ69Nmdx5RjN6P + 2H1iw5V30Ofx4Qnsn51FmcP0omUJ8TLR1N8//Vqfha3fI+dk6khIvFQtGY6LquYBM5EIHooMfAHGQoHu + VW0mAOXR3VQ9tH7Lak+mFGlTppqjmT+XLpk3ZnQHPoam+nrSSa23VjhxHS6HhyLyI0PVC8vGHNq69OZJ + h76+8PJPdn1E8jzfEGkPe78gkAyqJ3SYjb8WaAfOgYUAIT+3/F1wQff9ad9+r/Zt/mO/ydgPhP8R0cS9 + n+/b5ft9O8Imvapv4WVfLLiUjMO/zDz9zbmn/PzA6/624PCnaudcXD31jIqe48rHHVY29oDycXtXdK+t + mrhLVQ81BSkoOCVSNz5YMUrkxQtpmGp/YWWoqAr7jywIBxRQ+J9SDgZBJ6GF1m/8DVilCfGWpC56UUsy + 2aJwSBd7g56/WrVxcTyKORKL044tA70MPFNBKSMupQgaKbY4Zaw4UDQaoC5kNgpxrMG2wCiEoknJ8rmx + 3PDFixeff/75L7zwAhkLOWqbJYPD1+66Cx6p4s4sogJwrJYvE31NDGBoGCBNZagp0egMmZ+gvI44SMES + OCZZM0if2LCBSCH1//YlGwEGiuRhEiwUlflcendxYYPXg7UHIrI1BgLN4VCFw1HrdN536617zJ8P7LE1 + gn8SvPmJNUlTR9GNBQWqnTvvvPOll15K2I90CNYTpAbyBVwEAl955RXy7h+/6qo7Fiy4LBQiHHiqrh8n + I5cH2+0EL/HZkuaI2xZezDyPZ04wMF7XMQRr5RJBlchIWCnQPNiErQDxLDX9P+3oVLOt2x2NoONlSfA2 + xSlVQN36PGildSJ9XjhFt+9rTCjW4SduT+sHqqviUqIUYdx98V/6TTLW7ea0Eys3pfbhCQIzqRsji7pn + gIKcFnNWZQ0O98wWd6dI2GQyikQ8UPdFfcUt+U3zKroPblly/cTNr62+7T/7v9p3xLt9J/yn78TP+47+ + V9/Bb/ft9Xzfmvv7Vn9XEF4O+l3f1i+E2XcGZt/XfSd+1LfhVeH2RDtml+8J1ijRxCPe7zv6o77D3xOJ + g4QJV9zdt/gqCKJfzD7rH7PP+OOs09+ccfJPeo96fMEJP1xzxrM9u19TN31r+fhNJZ3ri9rWFI7YqbBV + lE/Kb5oSre8OVXWCfwiEukOwQIn/FYoUCF8Y48/uQhpbJD/A/AQCybjFyxuzVrb3DYOkvraGhWbMLowf + IEJO3e9TRhrPrra6Silu8vgKCqII6wzjc8QetVKFy/qYjtvTDH6yhIaUsoRorjnYnDLJgY3QjXLNKe0V + 86Z+yV/Z4gJaBi4ONhMVEBrJcIZRSGY9eEP8aU5rq5rHsb0ogZRjxkLquOFr27YdGQr180hNWEi4Diop + cFiHg1TmUUDnmVFdbThIAWmUuAmwZaZwbWoNNJXvr1wp6KMyJwHhmx3xPUrp0Uke9+KG2vHRMKhTA7FW + 13urqqZWVTUTujvsMM5xxSmn0CSxsYCIlbRtlYY19ivdOHXUKMOwJr8e+5V0QIMUCjQ+cdNNt++wwyWB + ABAIHitGzCF2O+FAdETx1pIgAYuH4CXYDC+G4hjKb4zT2JAgMApF8TQTcmRCvmBJtFCxDHL8xKFppjhh + vnpC2yGnE0oDJ/UNDrlZZr4i3/EQBim8N7ARwswSmj6SgjvQx5skLy7+JoiNMfGlfXbKHlV2nkHfTXEU + TTKHA+N6bzBAGtOIcU4Okak0afi0wK3ZxyYit9aWZVTXw5HojdbmN06v6NnQuuzKcQf8dP4FH+/5XN+J + /+67oq/vtr6+O/r6rpNRwOu/7jv+vb79ftG34bW+w97tO+nzvnP6+s6THJktEgVhgS69DlNPoN3yO/vW + P9V34E9FssRuj/QryMw5+z/Tjn+vd8tvJh356uQtz00+8tGezdvG7XftqF3Pb97h+J7lp43f4ZjitpXR + hoWR2pnh6knBSlE+11fc7M2vdYcrXIFi3ZNvd4U0p1/O3y4j+d1we7IkDfoCCV/GosKCjrYRqdNv1DOi + /7pGta/bdRXJM/wXznDnqJGVFag9ZlDDK+1wGrCD9J4Pi3ygYZYpbycrdg9cAwLa4Jxmz3d6I1CDbRoM + CDZW/UamuUqzY9nApr4bjjt2U+Isg2sIKA1lMyKq70akkLMxvdZT3I5isxiFgcBMmbFA5QfS2MlYyKL2 + ujXejNjrlZtuOiIQAAtXSLtQ1fLtlGQQHnU9lhYhMYkuk53OmTGAQWvm2muvxbWIwZp1msdnH3308N57 + A0IQUlTRqCUOx1xNm6rZJ+v6OASpNQ0uaKfbNd7vH+N2b1q27OOPoJv1/fLHP57q9/c4HMAzrR2bl9cl + /boj5P4YhRNCISW6hlEIZlOqEBMQUihh1yduv/3WXXa5qKiIvH4coViBQOBhLhfu0P1strVSTZtCwUAg + mf6QYhQEqpLxKttSJTuaea2GSzxuiFMMwedm4f+NhBYye71y2ptJQYp3D7ivtFhonsQhd+CmY1aWwYft + 50l4krRnVgg0+JbUL+l/gyQyeDcrJ0/WWcaxVFDCLFDghAeLOTftaY1zCvoo63AxJYgPBzoJf0KuIVQk + k3rLkP+VX5hbDNyj5wrCUZQTUlyIxEGySszudHQri4sK09TeEpwYt9Nf4i8dU9a5W+v8C9t3eWLS4e+t + vrnv6N/3nfFl3019fT/o63uhr+/pvr77+/oe6ut7irUpsCfjgldLUigbjBiwEHtx31eEiCgUUDRlSIdY + /J2+dff27XGv/M1FfehuTz7yL+MPeK1rz2eoyjtqtzs797i+c49LO9ac2brjMXWzDqyZvOfIqXs1jllR + XD8zXN7tKyQRsNEdqaGuhe4vJP/P7gpqOjO326aRviSL4krlTxn42z4q6GcYTwm7iy5C2prMXfMQHTzC + +Svehbqa6hFNTV632Fmqp/mBQ6kFP2yvOYs4LkPRtJze2tjBNJPFEaRpwyZTnk9Fx++vmGrTonZHPspV + MkbF4FO5BGxglbExJ/Kdn+pP+O6wEtifWVKhowGKhqVohkMFhAMUUiRjUxmFUx2OeYPSAIhsDUlJioQA + +fL11x/q9Ro+UrAQDABawELcpGzN0nM7HmprMDhjYj8tc9OmTRis8C2RIktYt8gKGH/1+ec/veiiM8rL + yVUnS2+Nw7HM4ZhPPWGHo9fhYFkA1LFNdrm27r77B++/r8756ccfHzxx4ly5Gx7dqXl5wCGg1WGzAYSs + JyD49DY3A4SkP8J0veWWW9BK/eEDD9yyceP/R91bwNtRXe/fZ2aO33PdXXNvkhv3QAJxJSTBgrsEDYHg + GtyKFihQrFCKFCgUSmmhxd3d6kYpVIC2FFrO+917zeyzj1yJwPv/HeYTzp0zsmdmz372s9az1jqzqekk + TQGPBf80CzzUdQ9LJveLxwhqJF/MbM1KORoRHRhd27R6iEcsEMhch64iclZDBHPegK/wldgob0LgMGOu + OXhbq/2aM9aTfLJ/OtLPTcBSWVdTU1GGZiHST7nBjXStIVWlXRe8VUAF7poBYR1Hrr6uiPWMgxInLWdZ + pw6g4joUEGY6EWhKRAUjDy/gFCJWKXupuyJDDVgo27ENYn9mWv1EreYkF1UQi0okkalJmXOHVbvRhSbK + k5XDy9u3rB97XPf8u8fs9IfJq/638IL0AU8onedV6fS9GgWf1kD443T6jnT6Zr18PwDFx1GGp9N3aVA8 + 48v0ob9VjsMV31cB8iSXIYPokm+lF17w5cxTPt7k8F+P3+e5Edvf373F9zrmXN4+49y2GSe3zzyibcaB + LcQCTiBH9vyy9mlUCqyoG9PcOrGsckgkWRuOl6uKSNEiVcrMM+CncU/HpaxrpkAy8Y4Y3k1+IjMX4S4N + PhKhYOKhdei98mBM7FH+nmhnMMVulGpbCvywnySSiUjUBKWJ2ZOhTWgf4GeQD0U+sslmRIw68SZhakS+ + d+oF15R86XTddha0+46D0QzXESOm4CLHkXFTEFFsp+JitEU3Ehiuqq7rHTkO4zjj/tx4fE4QsXDCCSdQ + lQKz3noTr8EA0nPf/vbh8bixkQoWYhJESsrbiNWRhoEuINPs2tpZOiHcrFmzCPO46667yOGCCHO9sZDm + /fnll3+0evXapqYDdAIzqCFwSIpwEHFpaelRCxfcceWVhLrbF3Lr2rXbhMPLNIvFhjlT2zBBr5G6qcD2 + hKKiGdOm0UgA+1KkrgcddGRHB9qcQ8NhQJeLPSQWO9h1YYG76+jApa6Lk5IweXUQDf9AoJHtmNTkOUQw + 3yKKPb+ionzw0vx1eGHWcdOCwzFjBHSDAZSBm1xcyPcLRkf1gxEcFt0/yzoN93bblaFSCxMMZnDTmPIW + RNb1O0vQfrW3mEbzbx5WMkaYdbypG23zvvCShjIcYYEYT9Il3bFnhULTMdI4DuYZJtzrYYMbjHZXBwim + YqUdpS2za0cf2jr9pq4Frw/f5rNx+6Q3P0llOzvonfRZX6av1wj3o3T6h+n0nen0ren0TRoF+f7TdPop + LEzp9EsaKe/XvBCOeNy/lSPwgGfTe/1c6UKBw4WXfDxz7S+nHvrU6F3vHrr02vbZ32icfHzd6INJDVox + ZNvyzsXlHbPKWqemGkYnq8gC2hotqkukaouL6yLRYseLgdbal5VriOGWxsOxBEGB65g2Qeo/m57GBAKK + tyEBM+vWS1ToTyql6mn1kZiblqn6Jus4ccud5gT6FHEBCgUU+AGlGOBALHALHAL8QD6BPdSS8DN8TsIw + GFgxuBFdnrMQ9sCvLBgP2X6I62LhZACF3glfpOMaRGQ2Z+DQVuL4aTP1sMsROAVkaEFQe11qxGOE/IpC + KQy6PHP5ZUekUj4vRL/qugYV4Ea9jsPFIm2lbXODEHsSe5566qkoM0EpEZGud8YZmvG3X/3q2WuuuWXl + yiuwZy5efNVee9164olvPPron//0J0Iq33//fRsI33n00ZXFxbtqiy6iU4yZM0IhgkDGYMzUj4OHsklH + x9KlS/dZvnyXnp6tNb6y/W4EL8bjhxUXQ0DxBcICl2idDheLibUfCExQ0t1T9eL7IoLS8ZjbwT/6SShI + tydEwQ5+X7fXZn23lvcIk1o8EueNIx3l8CHdqQTztMImnX7euwFn3Ov0zjJM19ZWU1ovfy97jXzPX2Pu + xyBPao7DrJ9ZeD4rKsCTNGqt740vsB/dAyVngQBHbYJi6sk0FAicKf/qL5IcmIGFIUvJTAf94YnT2fql + 7zBlaifVFTdMrR93QNeC60fu+ObYPf81dq/0hJXpTY9ML7hIZUcjQQyBEIQGYvPEL3hpOn2JDhbkX/4E + DmGK2EiFDoKUeBBZj14GN+Gqd9MHvZTe8+foZf655IpfzT79ySmH3jVm16t6tjyzY+aRjZP2rendrryd + XNjTElXj4mXDoiUdseKm8pq2usbORFG5Yn54rtTL11+1P6Z0Ma41m14P+j5lNhzMvKH/w/bfW1RVP8YI + +5GIW3jjdrLMixFAoDjkjBVUkpJgw8SYKeHYTRr/hkQiE8pLJxSngD3QCCvlRDgQSo1odH5l5cKqqoWV + lYv0shhdYiy2mTbfEf8Hh5tMMSDNmUALsHOo6yJoNIhofEviRAQOCeMsCpPPTsmllW9StwcqCe8cl0pN + SyTmRCNzgzCANWvWQLy+ulAKAzAvf+97R5WV7aV1pEtw13lhpqLAAxF+IASGRy6Qi52NinLECFGjLF++ + /Mwzz4Szvvvuu2DhhvBC0wxSf37+r3+ZPwlYRPBJ8J8NhBRFOm/y5P01g9wjrJIDEIABmClhi+MwKWEZ + k0zOam/fJBrF2jwvHF6kGSQJ0kgWqkinhk8SvLHXRH2BSIR4ZExHmMHQN4TQy/OqLiuds9nU9pYmmYXi + hQBCyGSWgyKG6/TznsClmuoavuoCYaooj7YR9fVyqfh3skkVmjvnkBVCzyRSvp+L6ovfGOiyN8g5lJrI + Bxm8+K4zrQ7Kx9a/4CVzlj4abjYQhLWvLgduwa2C0vn8BvR1l3LWSx52eyX9isGBvsdMThFBINBCQbAQ + +z/FL+midE78UQyaBR+HDmrMPrLOENbXs4NakWalpGlM46Q9KO++2fFvL7r08+VBXmzkLUuuTu/ww/RB + b/nxfwDbKV+kj/lH+ti/pdd+mj76w/RxnyhRzGXp9He0guZGjX94B0/9T/qoD9MHvZ3e8/Evd/7RZ9vd + 9udl17656KJHNjv25nF7XTB8q+M75uzfNHmH2lGLK7o3K2keV1TdEyttiSbrwrEKN5KiWW1t7UOGdMVV + KT1l9jSXoLx9pAlat1SG6wGI679Lfy8Lv4nSdD2yJxRske/81L9BZnPeVeMIFFecYYGSl0soYKPOSAL2 + MGgq0x/RchUVC2qrt2xqOnjmzEsOPfSn117z7D0/fP4nP3n7mWfefe45e3nxJz957NZb77vyyqvWrDlq + 9uztGxvnxeMMuIKLgCJQqhBRGzREamH8TNpe6qZUYIsPhDxqGsbgCyUdXVw8IR7nOCaUAlrzVYdSGIx5 + /c47j6mo2CcS3SWW3Coanw8F1DiBlwI4HOO6XBpKltnx+NxAOIMg5eyzzwYL4YXYSNc70H4wJlx7m8cv + uohoB6oD7hdL7BmJbKkGC2cS7kyCETWnR+8KNYTK02Yeykxt/JzvOGhTwb8ZWg4DzBOwQbK09iAugr4B + BEqAoLZpox92KqnnN3ZkZXmZvJGYTeorazSdyvrQyQdU0gOWg8kCw2ZQFpXNeeBxvMAWvB2Dz6sJNSEt + S352G7k2sn0iBlkP3RrDbw6i5ENgzg2kJXWMEWWqerD25/mX1j/AaJTNOhL+FFw+MtSogwyazxU8kbqV + 66J4WteZPa1kUMILOCkUAvCAvcwSCmEaRbo1M6SchbyDQ6KRFh5WQSuaE2prbWptZWLf36yFG6uCSVTU + SypVP7Rh4goKGM09++2df/Q/AhuO+0f65H+mT/5UQd0R76dP/Ev6tH+oMAnQjqQwxL8T9kf8+xGvptdQ + LOkBcC596G/SJ/wzfdp/06d9kT7u7yqaYu9n0zv+6H/Lb/j7okt/Pe/c52adev9mx900ddXFE/Zc27Nk + /+ap29SOnFsxZAp52lL1lIBojBVXRRIlBDggW8TsIskY4Ov5Yaw8SzguXtX1h6mvf0/uuD2T6mtitR4N + 406hhUW6I32OgFbeVfkuQ5WoUYQImtSUsC5slbWaAmL/ZKDEjCYDJSTs0HnzrjnxxKd/9KOP/vjH//z7 + 34Mflz//978/+v3vn7rjjuuOOmr15Mki4oAvMvhCK+GI+NhEdmErD43v0LgqGX8BS8LYGcdp0qxIZP7w + 4UK8voZQCnO9r9x8M/GFK2PxHaPRpZ6ScU7XVQNxno2FFLouqplpnjcvmZw7frw0b9tttz3rrLOwkeIv + RDvzlbozTTs/fOutsxsaELzAC/d0XQIeFkejyxvqZlSWY2Hm+XZGo7hyecoQ9NE6ixuIzoUw3PCdqTcm + X6bYNgTSQwQCxYgddUJJinKGYU5ZQ6kSOFiyi/XowAPugpdi/JjRjfUYLDamUa7geTlXV1sbQWbmV2aW + mCvJQyY+tr7CpGgbY65swEGIUMybGeSeUINWn1ck8K9yxlCCKlx4EmD27utQHITRAHmBChXAG4JHMi+9 + GevVOKtpWQ5a9/9o1DwmRiq9rIG44BWp7BmBb1KG9YIcgDm6MofqaRn4B+wJCs4OheaEQnP5V39n/ea6 + EPQwCi2FwzkZaET3hK2XSAAi3vq/hPr62rbOjlRtW/WIeUOXnj7tqGeXf+czot1JEypyGIgdKdBu018Q + hf5AryRNDA6/k79IH/rr9D6Ppff8UXr5NarELtXkCR/c/aH0Ho+pfKHb3PL5okv+OvOUNzc94pFJB9w2 + Zo9LR+542vBt1nQv2qtl+lZ1Y2aVd4xL1Q1JlDfFSgj4I9sLNW+JdiCELZB6Dvhu/J/bANVAb28PmpyN + 23KeupJfJ4pMP5OE/YKCJjjB2EJhYFJdyECgTwG1SXPPSZOuXbv27Wef/eyf/xw8+PW15acfffTaz39+ + xYEH7t3ZCSISFwi3w8QK3NLXC8aiiWbVkELAEkcjBeKnx+ILSkq+zlAKc1Evfec7R5eVib9wCREdWpmJ + lwL+RIIxQJr7BtLPKyqaG1SxJ/sa5Skw4aIjJXULlkxkrhviMhzMs7hj221JBEONwD09b3vHWRqPbdtY + P62sBBbe4bodkSgMGx0TUxDuPJinhD960OnRTJ31Ygilb0hSN4FAIwrFAEWyD2qxfOVYlPeGIOVA6Q4q + 2L/oNISFRdSDx0uzpSAKo7XGsMzbxErO0tnRSgPygC33TtRUVQ0dMgSJXVlZKSHJijsFceI5AJMDf/60 + NQ8UC17I4I2Q0mByg8qAgCG6OFmUT9NpJDnBc27vYIYphpqqygrZsZ97nkzE7TSnOkNWaw7n5lZyFER2 + zMmwu4g5FPIH8s0PhRaFQmiYF/MFG0YILFT20k1x1WsLU5me5avHFyYlcnlDQ0O7/pTmZRXIuSjShta3 + d7VNmTdqp7Vzznps+7v/ue8LOtvLvxXnA+3w7T2QTj+XTr+gHX4/0zESrEQmg18QUkikIEXkSYq98GJK + 5qrCuXxZcMF/Zp32x00Of3HcXvcO3+aqIQtOb595eMumezRO3Kpu1JyqnsllrcOLash5XQPzIzwDx6XK + 8KKMBoO56//HtyHAorOzDdfgxr0O5nHYPXJmqQWJIFMjQBiTow+B4TD8QGKuZ5WVHb/99j+//fa///Wv + X0Xqlo9++9u7zj13v64uXFMQRB8OXZeBuCOwwokjikYykeaVkLpCkELGbkUKySKdF0pB8YevNJTCwM/z + 1167pqhI/IVbBlgoQXvo2cTYqJqXTM4bO1Z4Idlw0LgSU0HEOgHsOPY2UD4zIBb+6sc/PjkaJSSfdpII + ZjECHx1izx1WCcQdB5DjXzJKIehlxGElC1/APwJgGOZ5BMICeQQmLmJARczG7c+DPBoo2NTYQGaQ/PFX + 2IA4+fluW8Ys2Cs85CgXg8Vv9PaKJDG37D9AQpAACtLa1MSmZBBsbW4CUSdPHDti+NC+Ckj1zwjzb0X+ + xao1waUIQEqb85GJIaKhoZYiHgXhXN2uPDXpgPMJdWf6kKGas7ANmGcH8CHTzcnwCUrT8ZiNQfJmiPFT + h+4Agbiul+qsRhg5tgqF+A4oQg3Zhi0nkThCd2xxnVGxYEh39/Tp02fPnj1lypTm5ua+pLAqNqKopLxz + zNBlB8+/4OcrX/zXyR8rtQvghwSGQECWa3UUBPpPoiPAwsc0IwQFYYTUkTj9SxUXiPmUcAjKJG3xrfT8 + 8/81+4w/bHY8NXjvHrHi0o7ZxzZM2Ktq6NKyts1LGselansSFc2a+RHtIOmt83XWhbu/9iBgJl0nYdAg + 36SvbjPyKviULOscanK4jsmHBtPGnMPmQ6BSo+jRrVzjChGpHdHo2FTx2Hgcuces8vITdtjhifvvh7ig + 78CON+CAu94b/OP997+/du3u9fUGDpWxVDu927SlFFMtrylNBQVFxcrQzHpSuqgkn9mhFMcffzyuuK+o + KkX+NT512WWHJxLCC5d63gLXFb8apsUJWGl0NMUMsDCRmB/4C+fPn7969eqrr7764YcfprARZlJSz3x1 + 1JD0NFeMG4enkHj8nVyXEYQpM+I6rJ1yb+kAdbFoYzJBEQT+lAX+x03mtosvUKLjsZGVEFOgy0cM9mXV + mR77itIdTE9ep23EbKgShVj8SL6KZYwv/IsBxqRkgucRsZc7ZcyjZn01I9tqWHgrgxwqFEqp4Yo3nTqx + p5vYogLIJFgVcMEMo8rxJmafyQe9DKIHP2czTh8R7ZXaGaYyywx4nweDfwWPM+COXDGzdvA4MxJiZkAw + oT3TvjpUJ3AA6gC8paEQ+IcQeodQiLkdqW4RNi8LqVR/QgqZfY52HUghOErqzNra2okTJmy9fPkOK1bM + nzdvRG9vVSVJebMuGbmMqp1U2lg7csvRu1y55Mo/YN5Ez0JoPGbPuzX48Z2wP4AQcyixEEhAUX5iIEUj + Spo08mXv/2p6LxKKPpDe+e70Vtf+e/55f5hx0jObHH7n+P0u7d3uuI7Ze1H5obx9SlH1MKr9Ueo2HCvm + pL7NM7vL5c/IVEWqshKbMtVUVHW2tH3VmrIBO8Y6baC0cgMl5NNZ+wYnBlunc6tXy4pPl+h4sYXS1WAD + LTrmb2Q0NiWZ2jSRWLPllj+7+24KCVF8AGXHV4qCBlr++OabF65YgWRxQThMP1a+Q13BQFFD5tTWoMzQ + TMthKrAWwthVYLgVSrFixQqpSgHArHfC63UCdQQpq2MxsJAUaMuj0YUgn3578bShYQMLyY+K+XdhLLZw + 6FDhhXwoZ/+Nb3zj7rvvJp+LUEMUNOudlbSfBn/EjW1rw01IC3fSSdFomyltKISb6BxqVgB49kIPEQpo + DKGMKSXJIhXflt3/dA0aVRSFXs67OmfWtAnjR0naKro0XrTBmNf6GS4HMZL6DeJ0A6bA5mg0WMZcoWsA + oflTyU/yQFSOzl59ZfTmhuRwINtLZ98tDKSSL6b/ixLYy9mmkN9QmVnNZuLwy5G9ZNAxQw39FvV1pf0M + LyoHDZm7w9rJIoKDoKnMLbB25u874OODIi9aMGvSRHRm+oC642GWGOM4yhyqnYK4ACGChPHA/4BAevKu + odAejkPO970cd1fXXeG4Sx0XnRcbMxkV+aiKV9ZJtOfOmrXPbrsdvO9+K7beetrUqUM6O6kgaJqKIK+0 + qrm2e1bbzJOmrHpu+fX/XflCeu1/lM6TOD8wD7S7TkdBkBeNAAk4IpmysYLy5YwvlNV05weU8XP6sf+a + fMhvphz4wqYH/mzMTt/u2fLEjrkrWzbdum40lW9H43GMlVR5cTKcKZunDvIb7Ien3NrSyC2i7J15eAim + aivJsT/wJGYwp1HvRXSAnLGDOU7Bbfw0BYP05RM4wVx1wH6zTq0xXFBEMRIdKKGBlPIRRQw2RuQq6DtW + zphx1/XXo2wEBeGCGBi/HhQ04/hTN998cFcXWcTmhsPTwuEJuvrS8EiY6hOi15esNOLORCMBfqM7peWz + IxFjfpSqFJTQ+4qqUuSjzhMXX3xYIoGOdMdYbJkXVrwQX4WoThyH5vlYSGx7c/PsIDE38hlSulBhmErx + JLkmCvCTTz7BBL0R4fA/f//7rXPmkCaGAPk9CRPUilAcmcwwsC0zTHAnTdI7ccTKQj8x+Ee3sZL+5PZl + glxnTJ86auQw3EK8k9R8v+pb5+y3z84mjYg9UhfsukAo7zN1btepY5uB2N4LkxcRG4N/g9jSJNSnnW1t + zQw3BfWE4Bz5Eqsr6Xe5KCL5yUC4AeOL2ay+pgZLnXWQ3Is26CIYY/7N34Ut4QcE20mDVQXBklJq2AqC + BsfJkMWcNfaJ7YfKZkxcwIl8JGYXoK6+rianyrc5Yz+nKPi8pA2Me2PG9Ep9KFGHYq7AHIrTfZaDBIYY + VkUEl4VC24ZC8D/KXu4Zcsj5vtJxD3ApgRLezw3v5nqE/TDPAzIhhbx92P9RvHfX1EweO3bb5ctX7b// + kasO3WvX3RbNnz929JiaGmqUqepCpF9J1Q5vmbLvxH1/suSqT/dB7flB+qTPFOaJKAYuiPOPP4/5JL36 + dypq/sC30ge8oRKH7vV0evu70/PO/2TCyreGLLy3ceLFNb1HVXbvVt6+uKRpSlHNMMye0eLKcLzIJaWc + cvitax/PdDb0OwS22kVRCj6g9TtBSUnJ9E0n93R3Df7dGfyJOCZAuA5lYRhHNq6ZVIggCwOZEEHxCEIE + QZFWLRcUd+Cy9varTjsN7xooiF2REgQyKH/VUo58UHn/nXfOXriQ4O5FhGpEYwQpwvmY3GHowGXFu8J7 + wiJOTaaNqB9R2YCa88vLZ85QyTOXLFkC2Xr88cfB8q/CtVmQfj12wQWHRqN7RyJiI5VMLhksJD2p+AtR + 1pSXzw/kM3Pnzt13332JrLj55psfffRRBKXAIeyQ+ceGG0s///jjH22zDeVzyZRGBMXeWjWKygAXJklh + cAFyM6GAxu0naX3UbEnVuyEdfaa6Vj+G0Lrqms2nTu1saxUK2NrcvHj+7CFdJBQa7EQVdUtXazuF2gf/ + avWxZQYAFDPSWND/0GwfB0TsaG9BXF3w4MBMRVmpLcORI/PO6hyHuGqyoidwH4p1xx5ZlJJWp78wfrt8 + 0BWWJf68gh8b5KghrzXnakOGjnhMqS5tMmogqo9DmXE28zu7NDU1tKgJgU9ZbKss7SfnJCx/8HnSBxxb + 2UBqLSl1qLYDaXOoUoHiEST4FSKIOxCp1y6aBe4bCpHt6CDHOcRxSAG/2qUWireP6+2oSKHK/KDkoyJ7 + Liqa2tGxcPPNoYNHrV597Jo1hx100M4rVmy+6bT2llamTTh/ExXddeP2Hbv3E1vfnF7zJxXejvLzYm3w + BAJRwZAgBiBEJkNQBCmwSY2N+GXmKf+afsz7kw9+aeSOt7fPPLu6d99Uw6J46cRIYogXrXPDpY5K7KnD + 2zfSZ8DbuN7n4ci4rhcvmgvQrvdB1mFHxzKfYEaoqirfKKnR+nxh9EMwARJ4BLEF8JbT1ejjQgRVipZk + 8oSdd374gQdIuEzE9x/+8Afys8ClvmoRRz/WPGItvrtq1Y7R2NJoDKoHhIiZtC0IrgAFGTWVXVcnXZNS + hZgf5wdVKVauXElFQGgWoNI/wQLpzWedLKL5Gz90xhmro1HRzvhYaHgh1JASThoLEcpuGYst6eyUNGx8 + ttpqK7yG559//q233orjkOkIc5EPP/yQuQiIKA+i4IyElVwdG2BWZUueGrtwyXz59P33799uOwpHnKyL + V1A4kHk0cYQqE5UWIHDruId0CdF/WpwvlIzHSlJFoicZ0Beoxt9IzAQthQlh0jYfPalTeESi3n6qV2MW + g4ShybSG3dyxgyMZTSMHNIZNu+fbwwQ8qbWlKUeJnQ1Jate8kcUHtv4nozm+OnFn5DSeI0NMKWpoTpFv + E+IndVUZsMlApgXeuSvlkvPRnWYo14umOPYGxlDKFy18MdjmQ6S5h3ZTMXT7CvPsu6a2cZSJmIErMCZL + e2wcFSAvoBftZyhnBwYokjWqzPUiDUX8oi35y3ABQgRDod21IXRlKHRQKLTKcVY7zhrHOcJxjtT/Uh0a + jCQd/MJAMrOJ686qqVk2duzuW2552AH7n3T0kaccdwzLISv3W7po0YjhvehUvXCkqHpMx6yzF53799Vv + KcEnfkEWrKCSGpsEabgGMYEe97EKB9zi8n9PPezt3u3ua599cePEQ6uGbVPSPC1e3hNJ1LthjHmYURhx + Nxr4rQO6rO+maG1UMZCvQKfSV4twbQ5p7aCYvNoAfVRTYx02gZyXua8wTzXxTKXWYRYW+AVNmKDoYmBR + eATJBYpFkT6364QJN11+OQpGBl9sidARMYduOB3ZQFBh94evvHK3oiLMpEpQmnEZOsT4S6pSFe+oPYVk + qMGCivmRWIXZOuE1iaQJVMDkSFWKviL2clAE7giigCsbQoLBwlVanwkWLtO8cEbgL0Q+g98CLMSjOUen + CV1WUbEoqOVLm3fYYYfDDz/8vPPO+853vkO4IXUWibLARs1Dwd8p8EbEhXwU1H36KStx4gKZcF+uVOoo + 8eW9Bx+8afRoUJAa90chGY1GsSNJOUOstcMDuyi2AUYfGwWFieDvU66y/omJNYLafZhwtAj/qSptKlUm + IIFFEWl0X29FXV31lMnj+i8rrQsw+PwSfKXwQP9YxdGwI+Vkys9vgKFl5ifazCtpO124BNtOEyCQol9i + pMrxBRqIsnmboWUCKzYe6MmC7+SzoMgHEvsgBRHLrCwrKW1raiEQImczczqeJ0xO7NXSbPt05rpsSBNd + A5dvrMcCb9l4lmt6tY5f+JnnwyGPlnGwTcutce8JEcSGvwWimFBoBydEwZO9HIfiXwc6oUNCzmGh0BGh + 0FGOc6zjHOc4x4dCx2s4PCCktgQ46edA6dxEYquurj1mzTpk112PPnTVaccfe+baE8457eRjjzhsx+23 + nTRxYn1dHRAQr+gYvvS8s575HP53ri4Kf+qX6RMJlv8ofcyf02t+owrK7/Lgx0uuen2TI+4attWpDRN2 + Lu/YvKh6KNUnULtgWs1HPrl164tNX+t+6jUfpOsuaNc6bp51OdyZloam7rZOrBe6I4aUkcQ2+CL+6Whp + ZWpc8DZgOqiqqBj8zZW5vKCgCb+rw+OqzaEkSJsGEdxtt5/99KegILXoGHAxhzK2imRjQ8BgwyHQHOGZ + m27au7SU7NJk/yI+HZfhSMfrdFyJbEMvAyIifeQVktK4yvbY1iY0a7fddqMKEjQX1WtfVSlYj2KTDcAS + PoCKuQPrfRUPnHSSwUJfR6qxUOlItZR0Mtm6tZSUfNlc2vKGhgUTJ0qbwW/g8JBDDjnllFOol0tFiB/+ + 8IfAOTXiX3rppTfeeAPDNawdrSkfvlOIEdbLeiBTPnx75PTTr2psPCcSoZAh5ZMOD4cP0t5BUJm5Nnk3 + iBfkpsGq6WqMi3YghPQ9ldVhfcvbaiD0s0VzKLgF0nyV/KWPDzA5buwI+FP/b7/1rsqbW2DS3df7rCLP + 9eXwBYw04g57TJd9NbwZ06WPRsxZFagH+CFgIAhhnzH7e/bLL9wvaLPZEggkAzJRmPC4fHwK1gh2Cnpl + rj2DkXoYJpVdRVm5oXHBxj5yyTPF7SeJzvNRMB+DZU+Fgh7ZljN1v/u5TOsg/uULaPbn8eFOOmpSSzIN + ikjM0KKYOeIRdEIQQUShe2ALdUIHYAgNhVaHnMOd0NEa/05wnJOc0FrHOSUUOlV9d9aEQmyJghRSOJc8 + Sg0NO02adOB22x1x4IFHr1595snHX3j2qReff+Y5Z6496MB9Z8+a1dnRAbWNFJV2zdtvr++9feofVWq0 + U9Ppw/+ogt+XXvP3Wae/NemQe0bueMGQ+QfVj1tY1joyUd5ArhmV7apfNKisKCdH2LoCzNcKgOt1Mq5I + ZZMvlHeQl6wsVWJPxfo6g34dJcKz0Ic5XWtjUz91sOzOqmRbfftgBAWZZ0nKGMa7ctdtDEfaw2HRxSwb + MuSqc8555JFHnnvuOUZSaATmUHjGhlOi9caPvnZ85sYb906lttIWxeleeKLrDg857UGUN0CIiU95Comv + 16EUZHGbO2mS4ApSFMrEU2+9n9K4UCvEsYAKcAKuyISAlRvCie8/9thDAl5IfCHaGTwWfnyhdl0Yaogm + iISl28TjWzc0LApy0ACHpGRDVnrEEUfAay+66KJvf/vbN910E+VzwcUf//jH1A584IEHHnzwQVU4SX8w + qFIE+OdsNmOG1NGliCDlAymfhDcFiZ1KrqYTx+BtRSbDHELoILNZAULhfxoMnMaG+vY2DAeDdfKt1zvl + 7wRNYdToJwF3/sHZxdaU9YVGsiNzTVBWAv66uzp6hzMPxJgJjPlGX7ChPFuVnnNGH3KyrH9Z6cSykVUQ + S/1j0EiOkMMF1a3W1YW0JdmH9hySmoc6wYECZiYbGFCUlsu5cqYLzKRRuOS4/QriX3D5GapnW0Ht02V2 + 988rEOsfQL4oHW+ghM8BBn5ngOIVJpiHkB6IoAqT1x5BnNkiisEWuj/uwFDoUG0IPSoUOkZD4MngnxM6 + 3XHOcJyzXOcs9SV0AnxR77XMdfHEb9fbu9e8eYfuvvtRq1YddeihZ5x43OUXnn3FN7/xrUvPW3vS0dts + s3zUqFGVlZV4WSt7Jo7c+aR5Fzy6/Z2/3+GH7y+86Inx+13VMfvA6uFzUvXDS2taK6rqIhGfTA/Y27lM + fMaDr9414AE3cAOZ0GzgQczuqjALqtc88y8QWF1WOZgSzQO0ZPDTBxqhrE9KylDgY1BQBDJKI4pTMBob + VlwyoigJCu43f/6dt91GMVtQEAAABsQc2o8vaqPD2zodECzcr7QU+YzGQg9ehb8QLMQoCgqyEAnepuPr + JZRiYW2tAOF222132WWXcZn9hFJw1cwDnn766Z/85CegJqBCPANrsDquv1boyy8fOe+81fE4Qk0Ta7+Z + zjsDFI3Vaa/xegLqoqDhurAAs+X2lZXLe3rmT5kya8YMqiMRfb/TTjvh7ySl+IknnkjmbvKpwhSvuuoq + yC4WVCgjsfm3s5x33vXz5p2fTEop+aOAwHD4ENfdR0sMyL6BxYlTi58VMl0W0EFGIrqR7QikH5L9BDXE + xnpz7OP038lzIC1nfJfjMCiDgoNMQBEgkBqSGZgqKyvYEeSj5qbBCrhddXWF2FENDuUDTIAuPi2zICfL + Nmh2FP5mGmCzuj5wK8tWaY4vEJN/D20MK3RXzS6ZJojLVm+cWZn7lPNoa3ZLMiCXfdIM9uYcUO5Cfl9S + LDaIkeDVQB2KPZMg1+Wqx2LhDGELFUUMEHi4tnweGwLqFATC/4DAs5zQOY5znl6+oRdAEbK4H/EVnrtV + RcX2w4fvPX/+ochkDjnk6EMPXXv0UZdfcNa1V1xw/bcvvviCM1buu+emm2xCcD1TBDK5lLb21o6a0TBh + Yd3omWWtvfHyahXerr3dTKLwFeRcgjJ+Ei+0IVbCr+IFyzsm9598coOJX1IvFwRdzRnXBzULvq1f+SUK + IMss3l5EI2oEMtBBUJBIk8ZweGgiMb6oaNUOOzB6MuJjEcXIhm8JeQXm0A0hQOuEauu38VPXX793UZFg + 4WYaC3F0CRZi5WOBFKL8RQFLYjMVShFEryNC6T+U4pOXXvrdo49CjsGVS/TnxhtvhGAxRcBYCpVc72CG + xy+8MAsLqZ2mAypAQVJAsYwJ4FAspQhKBQ6JPNi+rm7brq4tx46dN336FgsWkJttl1122W+//VYxtz3q + qJNOOumMU08977TTLjnyyEtXrLho/PjTo1EMoaemik4uLUG8ShFBTElMjZlZI7pDIGNQUDQykiw0BwUH + PxXLGZcFXfrv9PAe3sZBTpMxWBGVYTsOzMH7GXn6ab+M/sGYnusUsd9hC2DymZYqYCsCt2xzpQYrffgc + PpSPi8G+Gb4okKnX+x/ru0rkxiw7OI6ycBp+ZqG1v7vZMbslPkoZSBM0DBDRanNwl4MNfHJp7k/OHbb/ + NCR4MGMfYxQGiXZHmUYwVIhHcImjPIJYL/ZQtlDcgUoUepgTQggDC8QLeJI2gYJ2ZzvOuU4I5LvAcS5y + nYsd52LXuYQ/XWiic5jr7uq42xQXb4eDcMaMg3fYAdMojPCEI9Z88xtn3HTNpbd998obrrv05BOPWrhw + QXd3N/kN1AWSI1BKt/f9ofeCKdItmT8NJi/8YO7Gxt2G7mE3DGxDWTKYYATuAayusrQ8GXiacRSIm2Mj + t5Ab7Q0wXAz2jPngJxBoo6CEDOI3IPYE1+DIoqLdli1bu3btFVdcARDiT0KFgUtMAtf+H3EK9gOTD11y + CXXywEL8hdOp8GDxQskN1qbj66VUIVUpRJM5YCjFx88///SkSU+eeio065hjjjnwwANRrEC8MEK+/PLL + 0OUNEdA+fM45q6JR4YUqH6nGJAKkgEDMQUS18y9OO9ghmlIyzAGHSlOKsTQc3pG6gNHosR3tZ0+ZeEBn + 5z7Dhq0cN27VpElrNtnkuHHjTuruPrmm5sTiYvKIHh2JkDgGCrgmVbSmrJTKvQwlBB1jDsXWhHsSDkqG + Du4PKIhrUFDQJAuVbo4riE4/2P6ni/aJvUWFzJeXmkQtfR1BR9oVSGhZcHtl/CzpU1/Txylyhnt/q8G/ + xhYaZeGKOR2OvuqqCgmwE8ixoCWDZDYa2dhjTJg5uGKIYw5Qyb3F1UTWFfEw8mdxcVHgPfGv14ZeA6UW + Gc3QXPu+CZBb+8rRsiA5/z7n30z7VpjvNBYOIoKGnHulIMRxcAp2IxzTIUZzQqEFOkYQ0wVTN2wY2EKB + wNVKC6oMoceHlC/QgkDnfGr8RkMAAP/0SURBVMe5EPBznG86zmWu8y3XZbnCcy/33G+47gnh8ErX2z4W + 37a5ZZfJk1cuW3b4fvsdverQY1avPu+0k7537aV33XbNXbdff/ml5+y+285jx44loHBwlkOHHOXEUAqo + 4AsfDLoM/oXaKFvyVjY3NZILfj2ORncgkAmpijBCLg9QrCgh2cZghwUc8IjAB3zjAOYNLa8k+GcAj/YK + +ZPFxIFJ4LxoZEgl1IBGtKxs7rRpoMLuu+8OFt52222M8tBBYTz/76OgAOTdxx0HFiIwQXVJwkyolYzv + khgT1xeZuCW+XoVS9PSIgVRCKQjR6yuU4tXddvtRJHLX/PnHHXAAkQwLFy7ccccdMUVCnVGp4GLEdLze + ZtKfn3EG/kKwkOq4YCHljVCsgOIwQgyVtJ9/WQj+ZeVkcAuHos4nQMI5COLuJcUHVlbsrqMyKJNLEQki + AhG/UEeef/kO7LGeX8mpvZeOkRAI5EQUxAB0wVrUMdwcyUgg+dKMa9AYRc3oPJhXCF7S2FBXEmDVgF3f + hg1z/BwAyIGW7FE7Q+bym8c8vS81tYVVBexz2awogwTB2C3YpuBHJ4VSwp+qynJdyi6DlPbl2BCYs41w + rOAaM1PsALr8c5kjyMYMtRLJYO6VCE9yWpizl4FDa31mlhBAoGB5BqiyW6jbk7nXPvAbVCvYW8zdRh41 + csRQxsTMMw0gl3GJ2Ri9nXpJOAXppUhDiRFURDAUQhd6kBPSEIiRU2lBFQsMhZQjMBTCBArnAwIvcZ1L + HedyxwH8rvLcqz332rB3XTh8bST8rXCYwNk14cgekeiKmtodRo3ae968Vdo6Cik886TjAMJ7f3D9j394 + 4803fevIIw6eMWOz1rxM3329Ajx6SakDNhQn16c+O/dRdaf1VaIN+G4CMZUVFX1lUu1vd13VSSWNCp4U + zgKSxcMRB5nzm9ewob7OLs/Sf2sH6d3IOkg+/tmwx6AmeUDszCAMdkojQ0IWz0P2MKq6WoLN+eB2QqOP + 4IJ4iY1VJ3b9DJ7ruheVZq/YaitKqPsxFfC/oFSspIoGFEm2CynE2Dg/lZq96aZcb04oRf5J//rYY/ck + EndEIt9ta9t/2jS5SwsWLEC9SeF7BCmYSaVw0vqZSX964olg4R4BFuILIdAe2MO6i3QFlCKqD9UcoAhH + 5Iow/G4CXmp7KYiIuBSOCPxvG4nsEI3AFO1lB8/b2XUZR8C/5drLwvHhnYhU4ZriFIQxN0YiZBPFBmQE + MjKdWj+rB28L/XidFC4DvsOD38AM37IL81CybA+mMX0Rmhwws//kXIwFcFn2BYD0WXwIyYzyAcAJlthM + yyBf8JOBnyyroxxcAk6CRvpfMytyOag5l4Pvs6mxXu5ADlbZoCjXZTXSwFsub7OA1j+LdeTMxpJUzxzW + 3DdmSMwYMuElemwlKBVgbPHcsdocqoignrEh8txFi2Iw5hMdaEShqECxc+ILxBCqIFCzQOyfCgJd5wrH + +bbrXut514e9G6Ph78Yi34vHbk7Eb0zELovH1sZiB/CylJSuGNK927RpIhwFCE8++shrLvvGj+64/v57 + vnvv3Tecd85JWy1f0tPTQ2WR/L7RT4cEMNbPLspZmLT1A4RWvrzBvxAbYUsahs1fa6r9IYEZ2OCDFKR7 + sH1f4X/WO4UEoXTUiN5J4zFUrcvHoKDx/AnhA/YY1OhbLEzzsbnnLH4eMs8jzxBCkslISIJRHofTxRdf + zBBPSfcNoTvrimQbvv3Hf/zj6ePG7aSxYSYprTW1Ik8Kwz1AqEghAKNLFeaEUpDJTEIp8sHsf//5z2Nz + 5twGEEajVyeTq8hMuNlmAocQaCYNmEk3sHDST086SbBwWyIIPQ+LJS0H8wAqgJDGy9Ku/wQRoXH8Cp8D + MinGPct1Z7vuslTRbnW1y2KxLVx3S/7Uy1JXgR9jCsdEm4ohVOgmB+nQ9wQiiCWKkgftVZWoBo1FVFBw + /YBwXfrvwNsWwqcCJrVs4MkclrEY7yMf+zh8V6Zb7c4JRuqMGy/7jD5YyGYcTcLmAgKn1qjh3udzPpZY + VkSzxv9iMC8AoYzzLzhsBsPMRYmW1TTM7Ks3yKCm2d6GTEx2VOoNtDAZW2gO5ml+GdVu2iyGJ8e02KE5 + Y9adMRgvd4aQRJLqiZ3W8Nec6ZG5HDgsoxMGmymuO1PP1YhwWE7WbMfZXXsEEcUcphUxxEVgCAUCz3B9 + CMQQepGGwMscrKDOla4jFPA7Ye+70cgtsej3k7E7ihJ3FSd/WJq6qzR1U0nRRamio+Ox3RPJFU1NO40b + t+/ixYftszdAeMxhh51/xto7brrygXu++8CPb/7ONRcddODeE8aPr6qqWic7J0hGwth1womBXwOVvi6h + FNSDNkUO5pj2NrruVmEnqLwvhW7CRh4haAN1V5YsnNfUgLRjEB8MtTEv6umaHAYCJU2a5IiRlJvl2t5V + hSLGdTF18y/fGfhYqoIS8ySRoQo5uVdmVFZKvDkfwuwuvPBCVPhEpBE/t96mvw3HtnU9wq+ffPKQiood + wuHFONUogauJFPgHkACE/EshPcSxKpQikZhTKJQi/4y/uvrqm2Kx66LRb0djl0Wjx9XULJkyRW4UkQyI + UxBnoj4lYh1t0frk3Pnyy/uOPvrgSGR37f8jmn6u600JqcJpkELaDGJh3WXBzCtXwRUJR4TYgW2A4uxE + YnF5KVohbJ6gI9c+Nx6fEQmDqTpa36Ug8AjHZVoAoHJAbFD0gTI9TyJxC7lAxHhuZKIbuY9blGUQHXxQ + mxgnVt7WWW0PUEFWqn/FnWbix2V3GZctFMwa6GWb2poqgvH1NpmNDSiaZtgNszApg3mGOBoDrIU30gaD + tRlYyrFVBrtkGhNcQgbU/SvKVaj6SB4AqjoFJIYM43jvrJtp4Z9/5zJtCxqZge0AyNU2qu5jTFLq+M+i + va15kynjqRls322+Sx0JnIJTdQWJeaqIoCofQYwg0lAhgmuUOzB0ouOsDeQwsECBwG+6Lo7AK1xlBb3G + c6+DAobD34tGbo1F7kjG7kol7i1N3V9R8mBN+UP1VQ81VP24tvw7FaVnFScPjMW2Ly9fMWTI7pttBilc + s3LlkQcdfOpxR9/w7Yvuu/P6n9570+23XHXyCUfMnjWjqam/uLX8ngoEkjB242ZjgUthVySfg9U/B/WO + DHIjCB/ZXAcUtfnPLqTSL7S1NlNBU9rDxUa96EZRyQ4276ju9U4iEqtMlVWkSpKkBNdOHeF/DGpC9VQI + HXERntdEOmBt/5SF76TSxhqmDGI6RSdySjxnACEkaVF5+dxgiN95552hOxQtwvQHFqId/b/iLHzgrLOo + pQC7QlqyeSCcgQC1E2Koy8lKfD11cRfU1wueEUpB4AFaWbSg+Zf5nw8/+uGYMddEo5dHYxdEo0SjH19S + sl0gPcVrSADD9ddfT7YXkp+tXxHBL//73x+uXi1YuG00tkU4OstxgTdBcXCLCRLsjcfKvyz8CSjy+IQm + gpfQR6ypkEVcLCyjXXdCLDpSl28EMod6FJIMt1JZMGCBAoFSQWLjEkG6KKNqXxYeCUsf8P00o6pglPag + 2wQud4pqDxAFAdKGKw4Vjwv7kcPn2gwNxthMCCfQtE0nTRjPrVUtyaFiFpT6F2cjqwFj04zsXwPAMtBk + fTHIEazLYXUZyJSbZv2bOYqFmjkc1AdFBiCsUkFMvY9eNlJy03QqVPv49rxB7qR/NP+++vsr3kwUSl2t + ryVhBi+aC1CRnixOQYwWVEoiHShmfFLA7OOEIIKriQ7URBAIPN0JGUOoaGGUI9B1v+0617quooCR8M3R + yG3x6J3J+A9TyR+XpR6sLH24tuLJ5prn2hpe7Gp6ubvlua6m+5pqr6wqO7YovkssupSMHK2tK0aN2m3z + zfdesuSgnXc684Sjv3ftJfd8/7o7brnqvLNOXLHd8iFDhuAS20AEIkttXV1uPa8B3wKzAWfPSdEwmH15 + ZEzdBhO8T1J4lkFeIy/O8J7uzTebSvZRed4o6cj8MMjdB9PyAbYxhlDyBqaisfryytriEpovybLhf4rn + kRVXC0GheiRLw+zJwtA/uqhIvrOyg+Ljjgo8F2IxUteJVTF2CC9LSuYHPImiRWR8JqEXYfXiBvs/gYVf + fPbZ5QsXgihKOKOTE47R3sGhXnRIOErqGUihlCqckx1Kceedd8KAEYLmk8JXzjzzykjkokgEFDwtEqFi + w/Gx2M49PYT0gaOU9CQSAywESslhRvKB9bhRYOEPDjwQkQtuTlq+AKjWbE8kP4wXoCD8nqcsRJ/pDvIv + AUXmNGL7ZUt7ASmFTTaEVIEOtq8kEJDa4rrPGAiUqPn1cArycir5frYNVdeYLaV8OX6EfEyS8TS/oxfF + EkgMCk4qKYQ0fZMp2PfMXoApAV79h1vYzkIzPtsDtT3KW4joD/QCdWZwhz5WV1eRLpxZsIV5hhfavC0Y + /jNgmW9szBw5GD4MhskX/+zZiFLgLPZV5KCghdb+MfPh0L4WA2PZd8Zfrd1CZuqQuUYeN7PxYHLgX03m + 5zxLAI84FiaLdoTK4Cp9qHYKSuLQrXSk/B46RhBp6BpXhUZABBGFEhR/Lo5AwiFcVxyBygrqutd57g1h + 76ZI+JZo5PZ49AfJ+D3FyfvLin9WVfpoXeUzzbUvdzS+OaztF6O6fju+5w+Thv9m4rAXh7ff1Vp/XkXJ + ftHIlkQoYo9lxpxKbca0eNiwLefMOu6Ig6/65tnf+86l37r07IMP3GvSxPGUrd+Q4Zu7gVazpmbdTKx9 + nZGke3DDAZXY7M7kY/68GUOGMNhvTPsOz5o5EwxyMG3YkPtWeF8uRQyhLMICi8Phiki0wg2Troe8eJ14 + emIx8I/0GFg7yaWCMGRuQ8NBCxZccdJJLz/xxBUnnwwTohoDMDAMrqBzVYt5jeReZOxEfMEQvHNR0eJx + 44QqEaNG+hIK45FoDbb0NWChpJDGwIg9ltOhXOXDF/6UcMbBYMyfX399TXU1zkIys+A/Iz5vZMgZ5oV7 + IlE1CbBKFVKVYpb2+W2xxRYwYKlKke8p/PiXv7yhpeV80rJEo6clEyfE4+QnY9m7sXGe9q1SUJfi8kQl + MmnoJ21b/5be/33++R2EaEQiu0QiqtqU5+EFlLRn8D+AEAgUXy9kTly/vKBlAS4yDQLqzML2fGelwKfU + qMJsjrQjHwL7cgrS1zFq1dZiU899l4DAno7Ohtq6fOUY9A03SVl5af/kzx55SxBXS6bdvE9tTXV3V6cd + 9suOgdOrzzdcGmxarWVvmfHaQIJBOwMb1k/BwXUBBLKpmaYJLzLwGeySS7ZsKLIPa114hkUF8FOY0gUg + 5+8aHMHApyG1xnppANWgkt9m03QDeObUedjp30O9QeZmBvdWrU3EYgSNGL5ugbFsnyGXGvxV83gMZQw+ + 4TCyNcyhKkyQIkpOaBcnRIAEMYKrXUUECZAXCBRFqHIEEg6hhTDXQAE9rKDe9yLh26KROxLRu4vi95Uk + f1pe/FB12RP1Vc+11L3S1fhub/tvx3Z/MKX3H5uP+fecif9ZMOWz+ZM/mD76uVFdNzbVHpNK7uC680Oh + GTqEl8GQIimtVZVTJozZaftlh63ad81h+++5xw6bTJ1kbIDrP6xvPCjincIymZOYkL6NbivHjYcpFUv+ + OslEfZ93H9fJe026Pt4Fe5q2/vdkXfc0RNC4A3kjpXBgrRdt9CIN1IuIRnuLkr3RKPgH2i2orT1s0aIf + fOtbbz///H+/+MKMv7d/85uzioogQ9hCgckxqCh1JBluJPIYMTPCtUZY2x7J5NKxYwULly5devLJJ8OW + SL39wQcfrLc8cjDePoFAOBlJ3aBWpDSTzJm/+tWv+BNWOvh8pw+eeSZV17kWQtFn6swpvWB/LNqJPkgn + XWM24IdSBBVxiUknVxlIhqsvv7UP778/+cnOTiYvrq0+KZU6NBJB4cK/+1dWLp48mRuFdoYoTNLQkIZt + vav+/vezz27ZY48DYjHEnzyLzT2PsGKT8wU8A/9MjUDs4Sz0BNaAcAYdbbBUyKe3YUvRD5s82oNxB+KY + 2Gz65CFD2nMqRxMCP3b0iLkzNi8r4WwFPoyMvKuDVRn0M0wMYgTJMbfaw7ppGaZaMvlmWzUNEOSaRmXc + NzhnAUYGCu2VAU4YyDGI6HM7g3zBMbNOnY9DYmW00dqCSfvgWUCY0yQhYwbDsqHU/JSFhoVmA7YROGsA + lD217EhSsGY+Gv/UKfTAat8WZvBKpsAsnAFnjqvMoct0hiNie3wiGNhCz9QsEEWoyEG1FtTREOh+N+zd + AgTGoncmYj8sStxXUvRARfEjNeVPNVa90Fb/+pDmX4zo+MP4oR9tMvJfM8d/sWBKesvp6W1mprefk14x + 579bTvvj9NEPDGs7v7p832iEzErE7E9zlIiMwaGzqrK2sgKFUXt7S08PCUdbCSXsJx3uug7m/WxPF60o + K4tFB8jWlumawbFYwyQSiMr/aZ2ax6x30oSxvNcF5Z0cHJtNY019VVnFYN/rdTr9gBsLEBoiKAlCcyrI + qzShYW9SNEoU6FUnnfTGM8/869NPC2LPz268ccuKCjyCZPACCRhn8UUxIYJ8zMRGQfgBdXlqqo9sqNt6 + xAjBwsWLFx9//PE58YWDAbZ13Qb8wMcG5hHYB6Kg1kGTCc265557ULFSWZ6gDsB4MGHsZMs+c9QoMZDO + IyBdqyUxioKC4lrDWAo5lqoUc7RKiLxl5LPmpFSbys/E/eHLL3+zsvLMWGxtUfKkcJh01UTpsRzCkkpt + M2oUpXQplkTeGQLt1xsIuWPEgdy6//6ISLfBckudKUoqaiM27j24HbADqgmkFRHiGg6LeSA/SEYCZlgv + LkBZJKjUJFgY0GIi2ThZ+Ejvl4GP72QcHdLZnu8LtG2SZtwfsJNbqFNwW4MKmV8NVmFrDcScPn4YIEHz + rbO9mLE4AzA5bZMtDPboK1VYnoMuZjPZsuAFWscJ+JlvJlWbBwfM/5KLfAGC5KJMflPNFtbxM+vs7dWz + I0NKNmxZxljVdrv9OQcM/jToaJ8l64rYkjtfV+ujiJyCYpZ1WKSikU2j0blhbwtXlRIkvEd0MYdrWyih + EYhCz3Gd81VeGPdSpYVREKgcgZ57ExAYDd8ei9yViN9blPhJaepnlaWP1VY821TzSkfD20Nbfzt6yJ8n + Df94+uj/zJn45eJN0lttDvild16Y3mNxes8l6T23SO807z8Lp74yYegNzbVHphIU7CVgUXLtdqOfiEXj + fYgnB9mH8zcbxFxO7YRDYfSw3vL1MsPqgpcDvs0DXAHMfs7MzUb2MkspvCUSqJKiYsLq1/tWFLo5qvz1 + wLoBYxE1ohgm/jADVUFeOwKBQFggELj/zJl3XHHFr999V2q39gNCz91zzx4dHWAehAM4RK+FtlBp8XWJ + k8XE2TQ3HlBRvk80ul0QeI7pj/RdxJ6/8MILklGlr6IN6wp+9vYcEy6IPIck0WSRJlAPJyUx/lDSc845 + h+zS4CL6TMLYMT8OqN95+dZbASqhVlwXEXhQK1TalIVt16oZDMgSSrGwtVUgH4kQZ6GYA8fPv5AH99uP + dJ3HqZjcMHkLKftJuDqnWAWHbm4m7IQU2ORj20Ag5LwUEvz+mjW7YqMmUU4kguEaOQzWUeycAKFE+4GC + zdV1dRWVCT1a56dNsJFPLOo2/snsapAfzJKYOmUQFCDsZ0csJ0qBFkhR6OOW5jtzzozREpFhWNVmKviS + 6JP2Z4nJQSOBMzk4L9jIkUOZ1MsMF/DW+d5UThMDY2bQD1b6reCmzpu3OWzYOr5Sx0lG+2Avgxn+GTk4 + 3kRNgjJYE1yCaoPMIQphoaFu6tgqKlGVdhCmZcNWPgLlbGCjqdo5czY6ifbp6vK89se/ZGtVDgs0p8g5 + e8HG+IfBoUimFXxjxpWLgKo8leqoqBhfWbF5SfGSWHQ7neRhpas8gkRH4A48XUGgCwtEDnMpGWGAQLSg + OAI9ZQW9NRK+Mxa9pyjx45KiB8uLH6kqe7q+6sXWuje6mn85ouNP43v+NnXkv2eM+5+hgDvOS++2SOHf + PkvT+y5L77s0vfeWas3yzf+46aj7uprOLi8mnQXuSSy05LJhfMCVzvRx8K/GgG+QxID2Q6GQKVVUlOtu + g+GxaJCJBgc873psIIEfg2B7G/H2qNkSwRK236FAywUFJUDez5GtaUGDqyrID9HePobyXSZM+N7FF7/7 + 9tvkRWME7x8FZXz/xbPPHjxiBOoY6vmRqxozBaISlhkkdHBd6r8vC4fxsTHQbz9kiIAEsefII0m2KZKQ + DSzC0BdeguL4I1HoXH755ccffTRlFpB0Llu2DG/lXnvthR+OjNIkvzZh7P24DKFW35gwAQUpMQkUeZAy + Qwi1QUH0k236u6hmiDSYG9SFB++BW6yy+azuz889d24qRd7qNaSupnSD53F/9uMulZRsvXAh2ddEL7Mh + plH7tpwxe/ZulRVLK8qpzaQcGNpNaIAw7oVLi1Kk2CJtLpN86SoFF8E8s6zHG2IoxWD21UQqtxptDswI + EslKxmWS1pvXr8DE1rJSGgDLaUk+HMqWFIg3JXDBNmofZotFfUTURc9EC+qfLFVcNGPzqV1ddBMf5PgJ + T0yMOsNBiaUs46XeDxFBpY4Wz0YaDUiOM3xo9+bTpkpVKRsLxX5obhE/0RiAsBBk5h8461Bch0pxYqWb + 0c1WHw2KtqnS97PS2rIyyIAaAfPMp/6TFzyWZkfDUUrtkEUsvymmn9CAhtqahrpaudv8yUhXVVHe1tw0 + or11k6aGhZXlK5KJPXWMIIUj0IUSHYgo9HzHRQ6jIiK0L/A618UReHPYwxH4g3jsnmT8/pKihypKHocC + Nla/2t7wbk/r70Z1fTBx2CfTRn8+e8KXizZJL9ssvd3s9E7zFeDtbUGgAOFeS9K7LAAI/z5t9BNDW6+s + Ll8diyDSQbPKGIh+tYU+w/0vxIkIiugZ0kn2UbvvyZO1u1+OXdHc8r7eneKSFJmYvh7r62De3695GxK0 + Vpb7NcIKn9rmgkxSRBqKaKEtHutJxIeGw0oLU1NzwZFHPvPkkwADBj2JcxgkJ/vT228fP306chKoIbEE + pOgk5wikUCU3ct2FnodRESzE07ZjR4dgIR8yO1933XVkF6MIw3qGzQ3Uvl88//y9hx12zcyZF/f0nNbW + trqtbYexY2fr7KBz584FGsn2SUJU0bL2zwufv+46dJiimqGvCynELorAkoUvJCCdnIgvKCleWFcr6XWW + L18OseMCEQflt/Te3XZT9WwjkdWeBxdcSWKzZHLfJUtQjRJ5CX5j1CULgdH1rF+N+7//9re3HHDAyoqK + XcvLFhcXw9cJjWBIFiCULGjC8JhlE5ulDCPZaFfwz6+5i8vpGAiKi1IEVPR1dnsQEa6Zg4UMNJAwPdxk + URBRXgT4kTtLzQdUVeU2OwOZASSNRD4QymhuoZ0cOZdpBQDpw4EPEipsJIMQ5vh8gYptt9WWO2633GQX + kz0RYwISnJ8RYcyo3o62Fgv/+sKa3FvhD8WOtkbWVOtM3OrmyCXrSHnTKp9hc6uTcZUAiPaMHzOqrblZ + 3WcduZ/XAG0J4Dg6QbOSQRWXUuImaJyPxPaDYzMykMv2NIYk6c2NDd2d7b1Du8d3d85sbd6qunKvZGK1 + 6x7rqpIRZ7ruNxQE6rh4Bzmoc73n3ugpR+DtUaygMaygPy0perii5Mnaiheba97obPrl8LY/jun+25Te + f28+9n9zJ6W32DS91Yz0itnpneend1+sAE+xwGCBCLJmt8UKILeemV449eOpI4mmuKWmfG0ytitTfxV9 + q1LeYzEq1/aVnA8XO3fm5gfuu0d9LaRRmc19T4Gq4Y49Q3Ue1lRWlJE3Z8AUKvbBBSnNGhWCGZSmMivZ + QFW+VG6QdfjAROGayURG5LUOO39dm+qRqm+KaaOg8gbpEbDacZrD4d5U0ZhEHEXMnptuett11z3zzDNS + NRAUHAwXtAf3jz/44FzEMDrkjpRdm7kusdgGCxdRm1CbFsHCnVtaBIr4IGwkCTUCS0yU6xc21xcUfvGP + f/zyssvuGzXqBqLXI5HLdMSCkqjEYkfW1m4VkDbq01J16N5776VGIFfdTwz7F//617kjRggpXKg9hUz6 + EGHCriQ4nTDKcUXJGSXFVKWYH/hEucBbb72Vg+ffzw9fe+2CqipIIZJRLKKrEolTdtnl9NNPJwwRbS02 + VUg5MleAkFaxO7yZjwhf+2qn6IOkyjxG0VdvuOHC3l7yhUq6uFlwVg2ENiOUyHc6SSIe0+Ff6/aGbNxO + biCH4QCuQESRfXwkKp2trUZTg3ESzpQfusurTqXDxsb6rEFBJXJSowxFzijOZ0iJHB9RHAuiON52m+cZ + +GEIlkSjghOG7pgNDM4wcjH+xKNqSqHG7ggGxExYiNmdQQoHicEJlVs8qKpre0Zle9VsECiwQ7Ip1bOB + BIt4KRMoyClm5GFDhxx60L6Tx4/T2dpU3KRt1dSQlmkv18XBcxCLDSQ6ReraCxDmfII1iqVpoEIQGyXY + TIWR6VLJ2OgKwi/xMGWlpZxRVWZWgTH+x0hh7L248wSA00KAuba6qqO1eeiQzhHDekaPGDp5eM+8jtYd + qisPSSROcl0Fga6GQG0IRQsDBN4UDgOBd8Qidydi9xUlHihLPVJZ+nRd5csttW8Paf7NiI4Pxvd8vMmI + z2eM/3Le5PQW0xQEIoQB5HZdlN5jC4V5gnx4BAHFXRamsZFuOyu9fLM0lHH2hM83GfXRmCGvtTfcU112 + QVH8IM+DFOI9QS1BOkO01tnQgcw1kooWoZHu6lCqMXIFwKGlywVqJD1XQk5C8XQrFVnBF01uVP5Parbh + eShUUajl/A4ElhaXrBMQ8lxG9PYcdui+w4eTReP/5oebVFyU7Gxpqi0vAwVFIKpQkChA3B6RyORo9Mgd + dkBG8uijjyLmJI5bUHAwoQU5IIRA84q99oL8iZkULMRvTDoueCGyZnghYzGJWsCS3err506fLli47777 + YrpEGIKeEwK0PulU8sAQDHhl//3viMVujEavikQu0RCITw4GBvCwHJdM7tDbKw0gpQvuQ+L9kc8AIf04 + LB864wzSTwPnZC/DE2Ai8yRXS5smhahmKO8wv7R0to6FgHeCbRhgQbV8zH7ggANO17VtT6youEln38Zc + DEMFBU0QIQEYPA7M1Kzh6ZB0hqgMqexoPyO+s4Znx4nY7O3HH797551Pi0aPikYPiEZVrjiCHXV+HIgs + sM0rKqZRkwJG2dCsZLgbvb8zRhuZzIAH50WFK1CoRdiVfBg6EcKZ2MGmpgY0qP4gYo0GrIE0kJfLjBH8 + qCx6GkhyrE9yWDJOJZNxkvn2dHfanj85gmKiWEUTvmPfHnwsPYjPKbFDiu6OE9F47J8wnmwOqrZkVq6B + UGBV8yft3QwwwCdb0gA2bqjV4nXzs74hNkTJoTT4EmpWxcilK0hEGE1NclEbYGR7Lharo8SliUMx+2P7 + FO1f1Jb50GhuuIjjJYe4ucagta6qzGfhXzYQ2kxdP5qycgqJM6QrFGzRKDi0e/SIYeNG907v7Vne3rKy + ouzEaORcWKCDIRQIlIgI9ybPuzWqHIE/TMR+nEr+rCz1WFXps/VVr7bVv9vd8vtRnR9NHPbPaaO/mDU+ + jSNwyTSMnMoQusM8ZfAEBTGHsoB8gOIOczX4zVCbzZ+SnjX+f9NHfz6l95Ox3R8Ob/9tZ9OrDVWEW1yV + jB/DRF9nIiSLLzNOVGl2HA+POh6OJSIZcGTSMFCSlz4pjupFTAbzpKFMSoQIihYt513rCzutt0wl87Tx + le8kN1+4cJZEvv5f+4ghHp9tVeUWc2aM6ukSFEQlQUYYYuHxaW2SSBy/zz5QFlJjI13Bm4XAhPF0vasG + /u+LL247/vhtolHBQrKxgIUzxEZKoGuAhRQx2KO6er7OVc1nzz33lJSkGzE99x/vvPP2qqprIpFLI5EL + w+GLPO9Mz6ObUk59tS6qfmQ0uksQ7QAvFHEKMNNPlfkP33rruKqq/RKJbeNx+jrsitBJjKI6zFz9265i + 7YMEpO3tcnUkmcMZSRWO/Pj6v7/33kWlpRfU1b3zox9RuV5KwJNuVPymBjh5IqhmOALCH9izFDrG3Gps + 10IEWUP7f/Huu4+dc87V7e1kx6d20mGx2L6x2E5kDdWTEiw2TFRpKrpzHBS8kXYutK+0i/NyEr07sKYr + GOIZTAGAviJteTn50bhDchiehhc1pLKBXbjcbGYBSmag4VxywBwwECwMwMzHPhkpcnDDjPUMJZpi6gp/ + aq2hkv5ApP+XtdJCaPOT/0WUKTb/yzugOhyt72hvbmiQzG3q8jXl8h2EBaGL68X1KeNm0PjcazLMjx8U + umdBYBYYB9cWwlOLEduS0vQFqPkntf2U6rYz0GMDwEiLpXdYd9fI4T2jR4KCIzYdOWxpe8v+1ZVr47EL + lS/QJS5eQaDrfi/sfR9HYCx6byL2k+Kih8qLn6wpf6m55s3Oxl8Pa/vz2O5/TO79bPqY/82ZmF64iQqH + gAWCcyhCt5+rMA8s5AugiOVz6WbpxZum508G/L7cbMwXU0d8Nn7oJ6O7/jq8/f0hTb9rq/9FY/WbtRUv + lJc8lErcFIueEfao7rRcv2tYjMhBgZvQxqIcHLLxZl3fPp6xqtlr2UKlQyrjwUB1J9hM9FP5J4V5Y7LO + +Un1okIbr2ubv/btuUBPV9dksPPCFalUCV1TD3+NhIFrFJwajx+1115XX301QQX4sQAh/GTAwIZXkP/p + ZZdtF4shU5yjzaQzNBbO1rxQsJCYPBRWe1dULJw6VdACnSQBA1Rv34hp2H5/zz3XV1ZiET0zEjk5HD7Z + 83CkH4YyRSt3cMsdWVS0w5gx0gD8hehToGL9VJkHmb49d+6RFeW7FxUt0X5QiUYwJez5ImV7JQHp3CCx + ztFHH431FaKWTwpfveyy3z/yCOuJ5cApyOWDeTnRh8xLMB0TjEELr7zyShyrBIFIfSvwj+wzEES+c/zX + Hnjg7uXLL4lGz9bE9zBiEz1vD9fdVtdLwkFI4jSQm+yg5XquipFAQiD6tqxvUNdlqLcFLAXfJV65wlo4 + /Ct573n/rbHfXgYIhs6lS+aTw8Xay4cWGTL6PJqBrwDqBAux6YkmLQDUDC0zoCjHJB3OsJ5O3DwW4GUB + jGyWizn6kgFRxReTwhfNpx8skWtR/KCjo4UkINl7qV/NoewvCtL0leqry2qL+UvWQyyUx9I33qo1fTFC + OYrCbB8v+4fAwm0zN43jkLOUNAhd7a29PUNGjRiK73PCmBGbjxy2fWvTYaUlpGcCAq9yHbQwEhGII/Du + ePS+ovgDJUWPVkABK19tqX2vu/kPIzs+mjD0n5uM/GLzsV/OmYRvz2eBoCCAp5YZChFBviWbphdNTeMs + nDn+y+lj/jt1xH8mDP10dNffe9v/0t3yx46G37bU/rKh6p3a8jcqS18pK36hpOjpZPzhWPQHkfA3PZf4 + fUghr9sY/a7xMIybsK8e59+xgZCGJ6Vu68Z4WYkFgt7lgKj0SQlp6v9Fk2nhBg0NX9POemyjD+EMYYor + rkHGPrKGEiZB2YSJnrdy6VKwh4LpDz74IK5BBIoMqRvFMsmw/th3vgPnE/nMDNJwE2IPL9QJkBbDTjQW + Epm3d1nZIh1CzgdaJmnYwIONlYbt3ZtuurS09JyiItGkHKZjjPZx3V08D7cZDsv9E4ktx4+XBhx33HHA + FbS4H1L4yJlnro5GaflWVKiXgKEg8bSkKMP9RhQK4iOVgLSuTlQzVB+E8hLOCGL15dSE3oGF4FnBkJU3 + b7nlB4cdduqppx6qP5hbv//977/44osAJPQRIkizH//GN67r6lI5azQXhPUSlUF+DTIuEmtMDsaxurWg + tW0X7QcIN7CvszvDeipRVF1eiYUwp+ebg+txtvDktK9dDIrYcJKzMXAyZtTw+bM3x0baz0tHC1UpgyCK + w0cDDXW6/b4TSw0QWqojTrgANPq0HOJRJIpLMy3/ULKTv2/IwdZKvjedOi4DdUwISFdNsg+smrTKhiYD + PP0gEMOTqEwFvdQUJHD+icnU/JR/NHuN2cw0ACVodUWlaa21sQybdkv9s9sr+0fNrJ2DByDtx0mGZBRp + zIhh3WMggmNGTBndu2ho5z71NcTgXhL2rnJURMSNngsE3hmN/DAeuz+V+HlZ6snqshcaq99qb/j10Lb3 + R3X9feLwf28y6n8zxqXnTlSGUEgeRk644NLp6gt/LpySnjcJ2pcGJjcd9cXk3v+MH/pPwG8Y4Nf8fnvD + 71pqf9VQ9V5txdtVZW+Ul7xaWvRycfKFZPzZRPypWPSxSPghz7vP88Dj01Q4f2hLXfWT1413TcmNsj/c + EOY62EUFijB6kz60/zRjitqoxKrrBoT0QAljsN9lvmsJdOHsSwMiFK8Ms7QBTTtswKvXVywjB6Gf48Ic + 8DgDtqfPDRwvRBUcSgBw1yR2XoyiCAWJlGCYRh2z9dixBLZjDyTPi4nn21goKGP9qz/5yf5tbWChyGcE + C+GFykaqsZASsiDKPsXFW0ycKFCEu44hnpCDjZiG7aWLLjq3pBRBCu69vT2PgmTk4cVUCBLj7SPYfE+K + CWuHJWVyCTfkbuBp66si4O+eeIIq7Zh2KWEv1lGJRpD0m9xhsLAd9wDlqEBKrj1bNfPuu+/25XxlPedl + OsK/+UbUF1evviMeP3/uXCJASEoAgWbSwI0iMwBKnNcfffQHK1ZcqIkgflBKyYP6oCDBxaAgMjbIq3g0 + pallAR3sxy7Ky4NXzCDEenRHmedCIxCP2K6+godiS7tcZ8FtjEPO/jUfrdUaPZ4i/1F+OKE9Pnr5PEz/ + qb5XVVQSioDi3xwzgC51DNAoUHz4O6pxv9DInbfOP56spw060jcI5qOrVFehrsyGVT1vUGV3/HqBBYHQ + P2CfLjp/J4a++toaFBlSGSPYKwOTBUExOKNmdMEpZNSmM0j7DaYS9lAaLy5LlBAQKfekICKaBudvkHOB + 1gYhpEFlqaKmulqcgooIjh4BEZw5YuiO7c1HlZVeEA1TIwItzHc977ZI+AexyI8SsQeKk49WlDxbV6Eo + YFfT73vbPxzb/QmQNm3Ul0AghlBIHigIF2TB2smfIN9mY0C+/04e/tn4nn+O6vp4ePtfe1r+3Nn4x7b6 + 3zbV/LKu8t3q8rcqSt4oK361pOilouSLyfjzidhz8egz0chTkfCT4fBjnveI5/3cde933Vtc9yIdyEim + U1LMUIRgWHl5XakyDNidltQMY3pHdLW1y/vFpA1kyvHnFezY+Sv7eTHZmDBckmXTo+jHtg6u4Ks0yHec + XpovRs3fF6AdO2pkQx3mpwIfIHD8uJHDhw2RAltfwQeNWSwUToS8hDJ5MdJhysEoyqy40XFwDVI5aEZ5 + +b577gkBws6GXwoysXEVm4b0/PqFF46ZOFGkpCRdo6CPYKGqE+a6YCSFHcDC/ZLJZYGJkjg/Ow2blLYf + KEpigN+fOPdcGCFAyLl28jz6KPBAGoitCG3UK7cNAhwphIS7tJ8w9o9///uzWlowroKjZFQioBBjY1tQ + igjLM1ioDKRaNaPK9paUzNYoO2/ePFHNQPsKNhf7Jz/xLBANEb5iXzVJtB9esOB70SjanxO7u+duvjka + HIJPCNjHXvrTCy+8vKsL8+/aSORYTQQx/0J8d3dUrg3QGi6Ia1CSq4lRlP4gofRCB/EzENGVYyfhT5Qp + BY0nG7fXythaUkS4nZSlVbQGPBjVO6ytpblgA2QAlWbIl2BINfDTZxutXdVeMLPqyoqg2KxvYzTHZOxA + 2aFm4Ro4GVAkPsE+Z87Z7cFdMJUPaNTS3ADPk+MEcKKOZIBVzsJHr+nTnhmoODPnsRDLBzB1fBXSRzrj + ChE+CCcwHj69i08SbaZoY1UOFho889FOxel7JfHiVIzYU1/jkw+EZo2c0Twm3LtdnW2kr9SPWzFv86vu + eJGqstKOpsbeoUOg9ePHjJg+ctg2XW2rqyvPTsSvRA4qjsBI+G4oYFH8odLUU1VlLzVWvQ0F7Gn988iu + v4/v+dfk3i+mjU4DgbMnqAUgnDUhPXOccL7/as7379FdH/d2KOTraPxjS91vG6t/WVfxblXZ2xr5Xi8p + ejWVfKUo8WIi9kI8+lw0+kwk8kw4/FTYe9LzHvfcxzz3Uc992HUect0HHecnrnMXfkrHgRTiKWTGPzIc + HlVV3UBwmw4vNS4IZhXtzc2wpaAbZ3Vmu++uE/LldHr2xQcskhnw5ivkXoXeNp6jEt/1YWWFDXd3dTBX + 25AL7HsgQqMVUSgYSYa8uJ9KjSFP6CCFc2Eq5ELbctIkIsrBG9K74GoS2cV6yEQHg08f/OIXJ266KVhI + os5Z2kyKcIZFJYl3XQrmEY2wb6podWXFNiNHCi80adjw2GEqxGC74Vj44CmnkMAMJgcL3MbzyEOxjetu + rbGQNbuVlAgplGgHygiTmLvg1ZHM+rr58wlIQIe5FCmQdhN2aCIICoIx/AvlIspemLcq29vZKde16667 + opqhbC/TjvyDQ8excHLJ1GDCiAoYm22++OSTu7q7r4tEUMB+KxY7pqlp/rRpODUvPO20y5csOTmRIEON + sv2Gwwd73kGuu7frHlpbc3BzM/ecCrpjgmKENIz5kAkflEoRyuTievFIdEDHwMbFP/toDJAmcF4X1lZG + lcXz54wbM5KiM2b4KPzOaLAhIkLisgs2UsAvIIo+jNob27BqfweP0bwY3NMEN8MvLRjOsZHKuTJn5IpA + 3Byqx9ESSUnm4zcJi5PCyxLyHuYbXX0UKchHs/HGAJ9cda4/LwcFbcDLQKZlR7UhMAcdJUQkOIX9PUMc + DbgaqOPqSEcwccIoyAq/clvUnVFFiRVUx6PR6rLSrpZmdDEkq9xkdO+S7s4DaqvPLEpcQZlc173Zc++I + YAWN/iQVf6Qs9UxN+WtNNe91Nv1heNuHY4Z8MmHoZ1N7/7vpqPT0MbA9WUC+/03p/WLisH+P7f7nyK5/ + DGv7qLv5z+0Nv2+u/U1D1S9qyt+pLH2rrPiNktTrqeSrycQrifjL8fhLsdiL0egL0eizYYV/T3vek673 + BPjnuo/qRSDw564DCv7UUYzwh657k+NeqEs+MbyMc5x6J1QaJTCpXEdkBoA3iHdpQ0jbIA6/bpvQ8uy8 + TgV2B2iRKw+mVJN0b5NWqa+m+DKzdWup3hp9UljTQcUIo2q+rxJoSQYZTQfxXW1eXLxo3jyEmmeddRYO + OfgHhrgNR5p+QPHTDz88f+utiSMUKSkF3xUWSsEUeGEksnMqtbI4tX88vl0g4/wq0rDdddhhB8UTu8di + K2Kx3UpLt49GIUwgtFhol2oY5rYgRcFJ2U8Y5V177YXudDeso65LZD0mR/QyAoSM2VLEkT87tGpms0Ry + +4aGeYEflFwz6Fy456C7fcdIEP7pL38J+D3xxBMYq5mgoA41G3z83ns31ddfEYtdHImcG4kQcbGmrm7N + 7NkndHQoR2A4DNklK83+2iOIo37HePSsaZscO2nC5snEKMdBJkq8BChoc8GvTSy6rt1YBgvlutOCESto + weCO7uoB5AneZNs/lXJEtpGjmX9lp8yfBoKC9dnoqORmAT/LXEewkwHXHIg1v2d4av4ZBXL0hN3nf5yg + qal+1MhhygGjZSkFuZrAGD5XIfFC8gxW2aBlr8xHOzm+YZOm0cHKAHezbaQ+6gX/yz5FBhGtW5TlMjRY + KAnktKBGGQDkEpjIlIXDLcWpkfV1E3q6piLZ7+nap6Hu1FTRZeEwERG3eN4dkTBW0AeLk49XlLxQV/Fm + a+2v8eH1tv9tzJBPJwz7DBY4ZQTylv9O6YXzfc4akC8weH4A7Wut+11j9a/rKt+rKnunouSt0uI3iote + L0q+nky+noizvBqLvxKNvRSJvhCOPBsOP+OFn/LCT8D/AvB7BPBzfPz7meM84Lo/1UbR+xz3Xte523W+ + r+M3Tlcp31xSTiLhJYWh8S4HUxy/O9kzN382FHQ0uysO+BKxsZ3zb8Dt12MDFY6aJYDNPQbPtLWlicTi + 69TyvlrC7Ki8pJQ6GOvR1JDyDoa1dzCueaGWyWAHw31Fvh/yYUIHZ7W0kOFs7733Jn0JAQOY4zYkrfNg + SCHbfPbpp9ceeCDkb3EkoqSkiCojkUWxmMo747roS/lpFz2amzRsVOYj09gNN9xAmD+mQopFbKAL8/N/ + /et7e++9TziyC+EE5LaORtFSLvc8To1wZhvN2yDKyGjxUPYDhA+dcIK4CSXHLilmcIkTPgH+Sa0GsJAb + joGUIlbTS0p3a+tY3twi5QYx/HLb4Xww3ZyAxd/fdNMrRxzx/OOPE0pIFadrr70Wh6Lc3r+++uq1NbUX + xWLYP6lfeEIisSYWI80N2leaASQr7Y/r7qDLsC1WmfjdhaWlhPaPjkaZ/RAsQXsAaYhGfu3c9elnA+2j + Mg3qPFs5G0pSl4H2zv09fxe9RnBIfSyMyuCcrCyIedZe/nGC4UkdikG5HKNVqUp/FZzCYKpthrVH+/zv + NjqC0/45C+5jwUNY1WMPRyHoliHR4Jy/jsBEDJKEo9nmRNtAmoNPGvMC5pahehkgDBA3wF7LEWgjq8Au + a8wBMxgc8E6rGcG1ZqA0i83KPTdoj6yoxnHHMFcuTm1ZU7VjQ+3BVRWnpYq+FQnf4Dq3hr27YpH7EWeW + pJ6pLnu1sfoX7Y2/72n5y4iOvwOB47r/hZ0TcyiwN3rIJyM6/w7nG9IsBk+FfLUV71WVvl1W/FZJ6s1U + 0RsgXyLxejz+ekwtr0Vjr0SiL0YizwN+nmJ+T7guyCfg94jjaObn4AUE+R50QD6H5SeOcz+L69znuvcA + gY5zJwZbXeP3VJ37G78Jr55KpuDPxjLd1djM1/Vd6Gt7ZlS4A8UfvK4fmoeHErv9erybOefKfR/XtSnW + 9ioAKZkaMA6kwBlQ6YYxhwaLG1NAKHZR2EA7XqtwZBohDZr6UCcIYQhSC8x0X5FRNAcjOcs9Z529YzwO + 7CElXVCUWJhMqCEbpuh5i4M0bAzuO7W1CWzwOeSQQzAnwpM2Shq2/3zyyfW77krkBnH94B9Itq3n4acE + gwUIOR3Qi4a2HyB85OSTsUOiON3edfHAEaJOGmuJzJMqfZLKnHveBimMRqcnEirXTBC/v//++0P4OAXQ + bt+iz//2t4d6e382adLd55xzxhlnULvxrrvukm1+c//9FySLIIJoQU8Mh48oKT4gmaDN+Cm5CmXjdRzC + BIlOmUkkr9bF4Lkk6w1EEKeg5NeW8rlSNUJyquUjEh7sigrylawDVtH1bfcDb7hkg8ypUs14R3wbi5gH + VZKXPhLzm1FjwJco/63rY42MRDkYlOGUAnjmX9qPhA+LqEFHC03lKH1RwMJol8+6+oBDlRqGs2tVjS/F + tL1uhiBqFiWU0ZCwLOJFqjzEOIjGc0DLYoGCggaG/ONYsGcYoVGiZm2MXxmFjF4Ue4XM8V3y0HBktUYf + XC0GNy3mal2LwlYyDlByfhISNs/DhXFiJPwNz8MXiBz0++HwPfHoA6nE42XFL9ZVvNVc+6vOxj8NbfnL + 8Pa/jez8h14IbPjb0Na/dDW939bwh+ba39ZX/aqm/L3K0nfKSt4qKXqzqOiNZOK1ePy1WAzMe1XDHstL + 4cgLXuQ5L/yM6z3lKdjTNk/nYYV8LjZPmB9mz5857oOu84DjKvKHI9Bx7nMU7N3uOt9zne/oXKaUecIW + ihBvKQMCqSvxPet3zbZAZPdn3Y2CiZr9ZcBuX3ADdc/7zV/fz2HZkUJRLS2NVkb79WvF/wN7IQ8lTjBR + GYqXhSIpRQcRjopetEzzFdJqj9Uuq9k6dG/lypVILYjdXtdUaoOkgH1t9tC3v71jKqWkpJEI8pnZXniL + WAwgJJM1WGjSsO3a1GTSsIEcFOeDvG4UUc9/Pv302ytWQKR21kCCWEZpRyPRZSNGIMjEb0pUJT7CfvKs + vnDZZcdEIiqHuOchyCTTPGpM+J8AIXjDIuokbnun66JOUrlmUM3oBAIwXanQRNhDzl3687333h2L3VlS + csMWW5x63HHkWsNZyDZ/eu65syoqOOmh4fBhlBsl/APww9fLTdM+eezM6EKRsCKKIcYfhtqmzw4RBJJN + cu3+UZBxq4WMLPW16wCDTHijUSwYwJq8BLzeMojnvBOsbG5q4OAM82yjxREDn8eeovIdfTn2H7OjgT0B + J4NkQUsya6wNfAwyQ4/N+cwlWPAjmGdTw/UBQg1IBeDPnFHPJ5AOFjNFyIE3PcYZ3PLRJThg5k8/eE+z + cHLFTBw3hjRsymicRQEzxNBidRlQFM7nf3RSUJix8pIGrA6oYwH8gC4WeGuMzGo03iVnSoRF46KGQ032 + MseyKGNAK/VG2PSofgN/ct09POc4T6VJAwKRg2IFvS8Re7ik6NmqstcIXWit/x1QBwsc2vZhT+uH3S0f + dDX+qa3+D001v6mv/GU1ps7it0pTbxRj50y8GsfIqTEvGns5HMHUqWEvrGDP855y3SchfJ6n1C5wPr2I + w89nfq6CvR+7zr0+5rnfcdxv6opOJ7jOoVqJBuaRRXKEgxOE6aaDHUhyMRj0818Bv2cGfTR4MbItIxlc + XHeLiZp6ksU7v4rZ4HFJJXvTvurB79LXlvmT0Q0/5qCPgFggHiqqC5U0h1J1oUS5j4XGQcgwjXZjghb0 + SxV1EpthA4SX9KUK2UDA62f35+64Y5/6epGSIp+Z5boE5M0JhWBXYCHrASeAavfaWpOGDUPuN7/5TSSX + GyX1DPUFL1u0CCQjdgLvIP/uX1Oz1447UhADlgziAlH9mIufveACxJkrI5EdPQ/hKLmUVNIy160mziyo + W+sndNUWaaOaMRWaiNMA2onTyPEUctOe3mGHW7U69Oru7m8edBDBgiqn2quvnlxdzUwZGsqsE9Xrch0a + OFObXygACQWkRCLNwB0IBEJPjS6mIBHsq7+rAHb0hlC6WHyQE0zFTvoQhuW8V8JOBt2nM8OIvFqAAWwV + o6UAYQ5GZrsM7WFFvhtGaJun8pEpQ/gCL6O9jY2INrCZvQq46/LPYZCJ2YD266h7ri9QZYEJtg/Imo7F + RPseYKF49QxUqdsSsEN/VzbAsUpOMkmYZ7FAwxoLQFQG/3wmp/6n5LupIoL5NPgp5ENBS9Y7JiNEwGFK + K3Id/1+EEqmS6lQxDVWVvAKmKG2S5gp4Z6yp+kI4AqX7Fnnuwa57FhBIjaRw+K5o5IGixJPlxS8Rt9dU + 86u2+t93NPwRO2d7wx+Bw6YanHy/UMiHk0/JW15Lxl+Jx16KAngRLJwA3vN6wc6p2J6LyMXF2gnhY9Gw + p6ydytTpwfaUhw/bJgzvu45zHam6dfGmUyiOpmv8LtOANwaNhVK+aKqnkdwvwiK4l/1GGTAQV7e+dn9a + lv9SmK6rshZk5zYz8yR7wpT/BhHfiWnTfg0HA2m0CmELxa0G+aYP5s3lvMSbIvZep1r2gznyoLbBLwgR + LG0NlbUrLAQR4xWhaKlyEGLfwTKGiYzUX0S2zQuAEFUI2a4Bwq/BQZgPiu8+8cShw4b5GbpNuL0OMYQd + Srg9+ERI/rwgDRuJyqgUsbFSz3z0i19QVgk32/6kmCET9x57YI2EgRGZB0vuJ46Qa3l87drjIyTwjEHL + BAgRxQwlPjoCFfert0vFYzGQdjgO4USqQlMsNjcI3j/ssMOgnvm5Zv7xxhu3VFRcE41+KxK5vLzsim23 + ffTBBz/+05+OrqvDossUYTvHWSKlXvLwj6cMC0QeDBllfkoDpO5u/0Qwp4fxfleWlnc0tfAC8xoT1/2V + qkmtN1ZRovzKEvBH0jNKgQKlJ83NHdXfHNYCoSw/jS2lCbbxsdX8mTdgUeMpjPdOBnT9McbWAkAYAEAW + ERQMEzzgA66PGTmipqrStFMSVedAlzKW6gw7hpYF5E8dTaUSJ0mpTxmNtVM91eBcGdwMQNSgqYHJHGhU + f3JIwTMoKm1KhSM18VRNvKjM80pdp8J14ZukKK1ynUrXLXeduni8HmKCAlkxRVCT3TU7DCipQUFpGD8x + qel1nRWue4LrXo4cFCtoLPrzVPKZsuLXaivfa6z+VXPNb4C9hqpfibylvPjNkuRrRag6Yy/Hoi9GIy9q + nve857E853nPeO7TniuET/x8mDoheehZfkRsA4ZW0E5lolG88xTXPYZAI5zrOgHhbFe5OUZ7LrFPVU6I + ZNVkNJCJiQ90xrNnrATZTmjbJiHPlKfJpMSapfndVQ4awJv/RWYe5pfB0zODu9KJA3o3AHbQrzraW9Bn + cd5BwcwgNuIdaaptaGvNCpAdxH4bZRPCm1KhkqZQeVeovDtU1hkqbgwV1YaKajJKGcKoUcpMkRgGzQgh + JYz7ZNn+mk2jBhT/9M47x02dCuZJUV8qNxGKMCMUghrO12EVIubcq7x84ZQp4i/cuKlnPnz33fPHjEH2 + ctdxx/3swQcp3ouGFqcpwhyIWj9+0wdWrTouGj0wEtsFu65k18UrEA6jBDdqFLi4hG9iL4WOD3Fd9LrT + uf9VVXL/CRGhPjDS0PzY+eePO+4KqZVBPYp4/LTe3oe/8501nZ1MDjApQwRnOA4skLANVRxYx8iDfyAu + Mx6BQCGmAoGCguIRHIzhg+GdytFYO9UgGw4rtZumKevdVQvumyVw8Z0lLglVZCJp78J34iJ0rV0ziBiX + noV0/oBlBpfc08rfORhmrckcSg7BgMRZxRgLPEtagIQOrCwIcmZ/yxTpr7M5kL0vPjwK8YgzVeyfCBYk + s5qNlzZ+2Eim91J0MBsFfbyUY1rw6bOyAE3NnwYCA6IpJQxRtGr8Ix8B6cOLSX4diTbFkk3RWB3uXsdp + cR2sHRhCWAj2bKDiRyRSH4vhYWZj+KJgobqNvlnVv3OmVSWuO8J1d3Tdsz2PGhE/ikYeSsSeTiVeLk29 + WVHydmUpwXxvl6XeLIbwYeqMvRKLvhQJvxgJv6Bh71kwD8BT8Xw6nt3Dkun+0HNvd90bdOrti1xq87pH + u+4q19nDdZc7hGyFcOBRNB0fXj347YDETpD7R3WOiurKkaNHFGn3cED//S8GbAQX7T8tHPJ7XcD//M10 + NKqfzZUD88CKk0XkUDUmd+vl8g++Hq+bnJu7zLlMYnrWiTe54AELejHW49RmF/W26vPJGg3J6sI35JiA + a4Kcg5Rw6f840MFkbaisO1Q+NFQ2JFTWESptUVgINTSSUcZKIggBQpQpczWuUDGJ1CQIMpFjfD1imXxe + SOWmM5YsAfOkou9U1wVUpKKviGjI3qISoRUXLwmqJknqGaoUbZTUMx+89tqL117L5eMUJJ4SLghFk9wC + fZl2qWtxxzbbkLpFiXp07TE8c+IjBIQke6fAj6l+rCI4dTJu0tphCl7Q3S24DilHmGOkoeaMn3300fVD + h5Iym2Sh4DQ5UXePRAj5QGSE6IY85hOhmIEWhjgNQwFFqoM8ijZwdgmQMLqYvjqjmkJmp/S0Oxy9sKa6 + kvrgg582rl+/NwQrBwhzXiFgicxMpjFmTOKVFs2OGZV4H0EVnXFbgNNAVYbAWUAq3k1FvJjFU92psryM + aHTmy+2tLXXVqja6OLQG/BQCwgx6BviUM5D6aCQDk49RBsky5k1DCjNmxoDuZbhdIQj0QZHxUaUxj4Fx + PvQqKNW8zRg/lbdPgx+OQbCqTBM+Hj85isG8dg9LpjPcdXoVjKl/WYa5bif1vV2nkcIXMEXXYUeFhXQt + zSwNl/UxXotrwM5ZrndEOHxzJPIYsXoxgtZjL+vlJc32no+EnwkTt+c96nl47O5x3Ts99zaqzOsU2+e7 + 7jnx2GkV5YclE/u4Kj8GnvJprjOBt8NVFbNBa+LVaYOwOmh1gjkHFgXD51S2sqylpqZyaE8XUqOgu2Q6 + jYVtGet6AJfq+MFTkw6r1sg3ninVzcjtaY5AZa7yVFk8qlLo5SFEpqda6NIfjuQfxF6j3m7tdd4QKMrf + VwCv4JvO6XRSN3UhMkfbkFPTT4uiyYqismQ0EXhfCx2PO4lGBswr69JLpwbCDmykXmVXFhDSXwUIF44a + JQPxsccei2SDaPqvNIiwf1/jvz/55IoDDoCnQgoxHk7UozzQAhzOcl2ciMhnkEfunUwuHTtWmg2EI2m5 + 4447oLPEfmyU1DPQMsnzSS7Q/nML/PvDD68cPlxUozvpvC2iGoWTYQiVOrcwMBaJXREDKXBFlc6RgH04 + PC+ZnBNw3BNOOIFHkJ+A9LUbblBhEqnUUeVloCDS0EXEX0Yi02LRKZFwr+MQwo8jUCAQ/DO+SZsFDgiB + 0qGgIEhkAJiC/ZUOTfqxgSrF+K/+evT4flAz532Wg4PZsEY9svkDjow62pGmKjQJoLISMyPXhU8xKLor + Q0wwSmXrX+Sl1QXZVUIWMp4gKOcLHjIC4bW5MoOA9ncbF/MhUA9DYQZBYdU2G5M/5WPxNvkzwwjVdz/G + wIBfgH2+ydHmdpnvPLKK8nIpE2gWCqsSw64ryKtTcLe0+FOVZ0TzgicQ9GKWAYxh6qzUqNYEqHgOmq9h + rjPSdcfyhlKMMxJZXF6O/msTD6mnMx5FuutoOGR7V7CQ44iNNDCQZlBc2gO+TvHcvcMexWFghN8Jq6xp + F3vuOZ57lueeockcqSF2cR3SXxBwTIIkZKU0ADKKPZYW1hQl6srLpNqTeug5i0Toky2WJF6OU1leQVYz + KpibR5bP1KWP8bhxnmnokk/mwNKF7IcuPQpkB+0o1WU6rXUWZb7W5/L7HvW2wELugXRds4vVP7OMItIq + ezP7RetrvdklaKGqfrWx3IH4TShqWDC2gS5npw5YjzEh6+oICXQR2IX7Q0H19kaVCRTXoOBfcXuouMMp + 6WoYusno6UuyGSEAo/UpW7a1CaKgl7nlllsI7l6/6oMbUU1z8+mnU6thqk7FQkdH+oj6gzAA2A+GU1yJ + pHHZOxbbKsjbuWjRIvLDkQJmI6aeQTQEpg6YYef9Z545IxYjjB0X5vY6JwBNRaLSEFLVqAFC45ATXgi8 + qAKQOjG3qGZUMu76enkEK1asQDUDE7VJ+V/feeemLbekjuDxVZXHVFagTYULkqwVxjzOdYc7fuEnCQ2U + NDESFyGnNtERgzSH0nEZ6/sKZtjAftz/7jnvcDBSZN55e5TgO2MTqYLt6XYwTvlwYkYfPTahMgUaVQ1e + e+Qyo481wOXubtNTGZ7yB83Mmj4UobIBeMwkQ3w/AcJlMSRZb34NQNHniEB7aVGxjCwUOYSq6rLvgRnT + sjoak6McgRtFdp5gYx8Ldc7JWIRxBbs30gxt/CSsvaqoaGhTfV0yQR+G/NV7Gv8o1qbxb4zrTnBduh/v + 42zPnUtWplRqVWfXLlVV8zx3JhDluVMj3lgKfXseWAh3rHEdqCR4i1BEmZV97M4y1UIWyzy3Ufvkejy3 + zXU4KSAKQLJUaDGO3Bns1DwA/Rj0F/WvpFHgu7+eTdU0SCYO+iP7cr1ifK6vqZ0/fUZPV5ci3bmPzOoh + rsrP2dPdgYLX6irqUEpEph6lqRlp2JuaRVHTkacj3D+Ariz0sjuhbVwwGxsg7Af2+v+pn9cN0wiv+Qby + M3N85qOSgV215ysdIwZ1cLyDRaHiJlDQUTIZLKKtoVRruGLIsMkLRm26hWInDBu4qRiF8WMRTQ+ubFVW + NksXiF+yZAnyE4rboQ3ppxrtRgS8fg512/nnT4tGwQmEJ9j9CIPDBzYxFMJ3SAA+rkQi//aFGw0bJhBi + Us/g1ZPqfRt+CTDjAa3Ejx5zzMk6mcseROLruIWxmu11pYoa4FaWTw5CJpl9JIJFhXLqZNw8BSyc8wJQ + h5fjmyQyRAI23rz99vPb2mCch0Qie8eiuzvuVjpAYlN9ImywbZpf4g4UOYwYQm05zCDxb1AdbAM2MsPB + YI5hjx35818fIF1n1Ihh7e2Y+XMnyDLE9HUiMwDZw1OwMsv2JYfpi/CZ4wihsUdbP1bAp27+KGyQSYZd + f/jNEo/4aBcAoc3tNCnEShmLVZSURsEuz8Vw19baFKhp1MaFvIOGL/pqUiv0Qof3aUln4P9T5K/Cc8e1 + Ns8cOqQtGm12FKsb6inv3ThP4R+cj1RQAN4Sz12mExNu7zq7MBFMJneMxZZHIlvEY4tKihdWVkwrKhoT + jQ6LhIE0zJ4BKXRjGgjzsNAX0mRhmwE5gboA8CQaww9RzDa0mlvOuEzZQuFeMhUIHpAGPpfixomW+ib8 + 0AYFzfwjpzNwz5lzZA4h3cJRNSKgfdrqoFf4H4UFHErNMCImdFDBtPIrU5NZncbvm3YvNfMwgZL8/mu9 + FANgDZ0Df4EUCOvzLeibUw7mDc3fhualEsnSVDF3fv2OsNH2wjsYq3RSbeHyDlf5BRvUkmpyS9sjVT3R + qh5/FMY0hxmNMXS89lHheFs0bpzACQV9iNpmFO5fHvKVYuEvn3761lNOOWD8eLQkRDoCFVga4Vj8O4K8 + LRoDZhGooDWTKoy9q0saP2vWLLSXlJEi2I4Ygw1PPTPgZX72179e2dlJYk9Smu3pugQSEb1H+c1Oz+su + KaGMil3nFkBiEVIYJD0P9SYT4+PxTTCQlpbO0iXs4eUkdcNZ+8u33rrrwANPiMUolIGcFY3ozow7Fgpy + QwQFTcBifpqYQj4HBr4wk8FSpaf3o/02Whe0DsQLz6tYUGIqr/RgoDF7pMiCN/5AgBcUzhWXnsuYpewz + waiklSOZiMacAavQnwbdMtiWMyzagJeDf2asFDdYMMLahC+H/OkxOYOFGSC0+Jyxi6qD6uB6tVmg3MG6 + lYE6WS/jvtnMWumDJQyQRR9GoSAPCa4GBEK80IxQAaE3HhsdDY/yfMvnVM/dzIP8efORcHsknXC399xd + PXd319nLc/eNhCn1vGc8vltR0U5lZdtUVi6rrVlUVzujrGxiMjlSJzNCPlPjcQoHPAF0AyD0iaw0WTVY + 2pTR9diX5l+XXF2w+BtYuln/dnGjtB04x3uaeb7qLNIPs7VIsoUuWRULKgn7My1rVqT6m2pzZpaUAUID + aTHqEWtHtX5o5O+Nk/1HduGIcgnyIgT93PrqvyC5b3BAujKom//yQl6HDx1CyaOv4r3u65i87K2NzW2N + zSYJ4td59sy5QEECJJKNTrLNLWp3ihpDyepQsiZU1BRKtTklHcmq4ZmAekZPoAWrI3Y5lV2ztlawZMst + t4QUUpUXD9mAVsEBcWJdN/jH73530047HVxSAsLhvCTrDdLKHgwyuLuTSZZh0ciU0uIp8dimlK3QFkKU + k4QY7tTiZyzjEg4++GBJPYPOhXq2G5iGrf9LeOHccyn1B1ChlKGWkyhlkG42oyPXAUZCzsQ5J4uQQj+/ + jxPqicdGJuIQX1B/rrZRExZCiOT3L730rHHjsLgSMo86BhQkZRoZ4KR2BFxQUJA0MQYF8+MiCs4btQo0 + NX7MSEliuX6dNet97eMQajTRgWs5v/eFf6zHdMknIGqZDc0362CZw8pknL2Yg3e0tWLIksGFcSpFeZu4 + SqciU+wA+fr6kjVKmo1tomDGPZ0YOjPOmj0VFYBAJPGv+ahmD+vSKhv59ChsVhYEQn8lFjgZeS0MCIBE + /xQcx0fBbID0AUNhDdXtI7FERFlEK8tLauBNRGQibPEU+YP54fMjmH02bgjyWnjuFsTyUqZN54vY0XV2 + 0268lZHwQdHoqmRiTUnxYaWlqyoqDqyuXllfv0dz845tbVu3ty9sbp5ZUzO1pGRMIt5DvlCiKfC2aqej + ZoRZ2lGFEhoCNWZ73EBtwrWvSBUugJaJd1alLC9WntogS43cGZWCJ+/m5D5TtixKJEmZZ2I0zeOQpyM7 + 0ACKnwTeRr8D5vePoJPYvwhq4pOO4n+twGcZT5AbTMW06KuUs3AJnCIocmK9Iz4mqjOatyznlen/T86u + NVAqWnH93u712IsmMZjUk7ihskry0Uiyo75e9kGegt3XzYvJXcMomoT/tYWKZGkJJetDybpQETH1bTgL + vYohGR+VsstpYyOFgYCcHTBoBNoTUsyQ8euNN974+9///pWiSA7GwK5umjuXbCmM+5g9BQiB6qGYGcPh + 8bU1PSVYeb2xFWWTCbdyXapckqGUzciIhn9u14aG2ToOgQ+XsBFTz/SFhf/4xS8ur69Hw4JddD/XJZ5P + Mm4zw2CeUWYpZYxxkv5usDBjIMXvopMbbB6LzR4/HkZ44s47r6yogOyyAIG7e55wQYOCpo6goKAdHShw + 27/phGGGgKHmpnrGgkH2SHszDq4GpOyyYaboq2zJa99/fqb8N4QeX1ZaKlFWjIR2uFUAjWZibo0WwYTa + Rz49WBrkE+l2gJS5g4s1eglwFh7odDFev8CebEFTU1rvbhMO9YN29XBnggK82vZo6KHeV+DKOp0NbD5c + WRhgoC6DCiCiBXL+d8vgGWCeHncNHvs4qv+GDBJpmIzF2uprGsuKyfzQptWeaFWweZJudwfPo9dh7Yfw + oU9ZGY0cUlS0fzRClC34d2gycXhx6siK8rO6Os/u6Tm2qenI1tbDOjoO6R6y79Chuw4btqKne0l72+y6 + uk3KSsfF41hH2z2XKItyBYTKDCspAwI27CO33Jb21uY5M6cjS1a2RB/g1S9gEkOt1CSh9xFzqUDRvz3q + ongo2tdpsCxDNwl00UJo/xETbE6Ut73GwKfpAXJAcyw6AJIimdjZn776jILzeExq/vGd10FZY7P6qj93 + MZYR6TmCXjmzx/yXxfcOFJpl9oU99voNxKeCg4Z+RuqFk8uULroew4vZhf5RXV2FRn0dWquMohWhJLHz + GgVTaGT4lwUfIXQQFOwMlXcqOmLH1MNdkF0Rq8B0b+fycpPPE+0ibipCCGBUG+5pGyQv/N1Pf3pOJCJm + xp2ZhML5dNk8lR6MlEvhMG8GepAGz20PhxVHpPGkeGDSqhNsEmK4a13dXG1d5EOy7I2Yeib/Ev772Wc/ + XLyYkAYCJxgd9tC5PZG2YheFqDHPAJ9su6ggE/+yQBCNgRQkQ1/awUxcR1PMa2jYRddr5IqIm1S1gvHB + 6OxN+AU5vvgFpZquCERzUFBOMeBHBkvpshrUlFmfrquKsw9kL2UXjE45M7XSkpLWpkbhc7zzagMV6rcO + Hxl6BCFoT3bV0AKmVMPwApjMvC/6m/pHj1n2v1l/yohjjWv2d7WlDHO80tiatLTSh0pulD2MGlSTu6os + tEFMgr4OJSLQsjrypclIbdvrrLFc/yK/y2bmY5DP5nmDWZm1vcCip4CQdlBkuTwSRgvTgQlUWT7d5Sqr + mbfK844ipN1zT9T/HuuFmZ4elUgcWVREVtujK8qPrak+rr7+xNaW88eMPqO398Se7uOGDzuyd/ihvcP3 + Hz5892FDV3R1btncPLemetPi4vHx2Kh4vCsaBQiJRQUImT4Q1wYRRVVvJgrSTjoA9QomTxwr4l5pbaG7 + oUBKpaArTmVrhfy7a99DnhQUUEk5AiDU8wPhjnJw9ZTzv5iOIe5ALI1aD5LTSWQrmaJlfpLJk/RDq39a + fc3vmb4xg/YMHdI1YdyYIAOLbfDwT5DT4TOAYdtJNDMzc8H810/ammn0OrygX8emiiroB6KGI89DbZRI + DNpqxV7holCsPpRo9YEQFCyBBQoWtscqu5P1wxwBQpNlTayj43BrUQJCZ9rcLqiTR0kEyh2QwAzr4kZR + nQwGC39zzz1UFCKLNLX9SBu2XCcMAwhpJDF5BAZg8C7Toz/f8XHCaBUWIiXFdaGRg6oLu1dVzd9kE8FC + ST1DWV0i85D/bFxL71OHH36hLv5OASaVikJnuKYxyi6qzZXYRQUIc/iZIYX8JAZS0J3MivhRwMLxOg0p + jlsy/kB2yR0KvkIE0eAgmhUUBGixiAoKSjXdQQYIilc/pzszxW5qrJeC7Jhx2tubbQQaTN+XY6pooUL1 + Jfp6Xe2W5LdKv/Oq9JLArXl7DXLreGQZfcwwFHzLvOe2RTRnNLGHpIJDmz84al7iMS3FpWr2kaFT7+bb + YH2Tp17PrWhpamisqxMflYy2mIyoPy5h1GIAVFcXDMSyke/dy8a/bLOhJnn+dtoeKLTPX2SNTSL9Y3Eq + 5ihqvi4oqAWiKc+tRpzpudhXIII7ei6lK0/yvHM97xLP+1Y4TBqHS2OxC5OJc4qLTy8vP7mm5qSGhhOb + m0/u6Dh5yJDzJ4z/1ozNTxs1cu2IkWdNmHDiqFGre7r37+zcs71tp5bmZTU1c0pLN43Hx0UjwyNhbDkg + rvgIAcKaiophQ4YQl2nuj74n6kJUrqCsvDnmen3QMgBG/gESn0qWWvs4AbCZ2YatIQp4v6WgUcfNmKzl + rwxx95+XflJ23KjNBWm25MaTjdW/uldK5yyEnZkuJy8IXaW7q7O9jbfPN9LIjvYn/zUxr4b9loGCfWUZ + zX7pBvNyr9s2HN+UER3kntyoiObxsj1/asN5n5N5s2UBOPcioURVqKg1lGgLxdtCSY1/iheqxSlGKdMd + rhoSKm3LK8yr1ZgkiUaHCZDsGY0uDerC77zzziSaIdEJqpOvBwv/8ctfXt7SAhCK8GQrCwilbBCqSKlq + BBzyJ0AOFg4PhSh7tBlvcji8XIfb75mdeoZ0Lffddx8FBT/66KONFRby8sknk/BM+OtqYpt0taMZ2nVH + hQdQihaaCMJ8Q6XBQtiTqg1JVkbCrYgF1Mog3KLoSHGCckAW1DdSPgKuyZwALliH8jsWKw+Hmysrejvb + kdIPJkBQcCX/XeIdNvkMGVmwLA6yB6/TZnmvdH9zUmkkPZ65rZ3FRtbzpjU21gG6+k3IYKH1PRh9LEtU + MB7lcr4cbMv/0+YW8qsadvUXnWXG5D+TYdoffElEp/ifb45Tx2Ckk6gJ+ajcaSp9q/+nRi8DYLpYRwLC + poZ4gQcRdhgMyAE/PWHIwKgNlppXKaeayoajt1F0Fuuikq54+AVHeO4MjYL05DPCYTr2DZEI6W3viMdv + TyZvLS7+Tnn5lTU1lzQ2nNfWdkZX16k9Q9cOG3bKiN7zJ0++aMoU9X3osPPGjDmpp+fQ5qb96+sO6+46 + fMSwrcrLZsZjBLmSomwIQRGk3uWM2GNhcrgkCc2sqYE2ywUicWxsqCMYxtxDc4F6guDfhOBZ+PcquOrM + rbOmEOarT/Vs/mc9U7Ov4YXqR8nSIHicwbZCxFFgj54AX1Q+ywJ80XQ5QcRMz7c31p0qy3YqICqd3KZ8 + +r1TtQZhS8ah3tfLWBA7zYtTcK++dhnM+47nlTT6A5qU7EPxjqg8xpYRta8AQXpLXTWRooys6sOsfURv + DxoA/2jYn+KlKmQC/pdsV0CosBBQxEyKTKZFUcOytnBVV1X7eN9BJdZRKAUAg+GRQRYDI6SQqgt7FRcv + CBgVia3JPopwhhxjXw8W3r/ffidoRgg93QqbrXa50UIYoQAhNAvrSn0yWUUCM42FbZqEsRlhFYSCSLg9 + V7FFkHpm2223JWsoKUPxepIrYAOx8D8ffPDiqlXXR6PMlL+RSq2Nx1c7zi665h+pPmGotAfCattF822V + rFEJMwnh8tza0uLx3Z3tFWVcoKK5pOR2HMpTTIlFkaqDrPhxmaxABIfHY8PIX+o4ddHo0Ib6inist71j + q3nzqktLBx8gwRuFjsNOxTKY/v2VbmNePO0x8ieGhmnJSIA3rqyklDeBvxjNef9lABLFgR6t+mR1BtuC + L7lbmqllzsDkY14w8xfTmeEBnJfa8QGnsS2ZmW18FiHjrjq6tvX5KTaUXCKPyqifGRoqy8rLikENjVsa + 4LhkREABVPjAYMyJWqnvG10tFFRTHEIskPjLcXzKpeUqGCWrUMd4yi+4HC7oeadHwldGo7fGYvckEven + Ug8WFz9QWnJfRcVdNTXfa2y8uq31kiFd5wwdetrw4acMHbq2u2dtV9dJ7e0ntjSf0NR0SkfbsY0NB5WW + 7ks97ZqqPWqqFseiRBNO8NzhZJ/RGdcqKYmg6SBGc13c3Hdgch/a25qIhKFnCi4KwpkLsSDef4ZyG4MN + 8oEw17CcB5DmOBnrqDwXPQNT1fgwABjczelCFmX0n7Xm2b5VP6+/yQq71xX4rvu5mdX5uwjmCRBatla1 + liDF8WNHkUhd2qzeBX1L+3lVbYQbPNpxct15vL7wyT4U/VBZZf0m+Yac/kcP+1L72ZJJSWdH67DuITII + qDtQXcmaIISfG5QMJciprcEv2RSKN4eirepfEm1TdyLVGCpuccs7ukfP2nHXQ30HVVauLz18UzcZTyGu + KayLe1VWmiIPUpuJsrFfTzTC3957j1knRRVoxlax6IJIhMBBcA50wSWGaZTHThrf3uamaqZsQeV3fhUs + ROoGtfXD7ZPJZQG7xdK7du1aUlpveOqZ3914480UgohEriguvrah4cLK8oOQkmsHHnZRyawGQtt60Xwg + 5Cky2HV3trY3N1RSfbuzramsFF7IjrBJFeKZTEyrq+mNRqGA5A6F+JI+e0xt9cjamnJqdpOiSSdTqUyl + hrd2VJeSUqNPS0JO36JTV1dVoe0ykNN/Nx3Mr/kvVfYrV+AYZgP7NcDfU1dbLaYh+4LYpjRV0lhTZ8tz + ZGRhY4lotrmfjAvWx8zEjakq8yPjC+gSiCDEzql+tTHPfNdQ7e/LXkzJNfxkBlNaWF9fowti+NvJvtoT + 5o/n/K+2tkrVn8ricDYjVHxRZD6BndPhzvQOY/7r5x2Vkd0AoRYp+KhpjsotAmCWLZ2PKopG+0CocMgj + 5AKYRcZJ8pdZnrub550QCTO3uyUev6+s7OdtbY/19j7e0/NEU+MjVVUP1Nbe1dB4Y0vrFR0d53d1ndHZ + ubat9aSmpuPr646triLV0Zri4sNSqYNJbBaJ7Bb2yG22yCXAyZ1MxTEXOuiRXAY9Tqmmg2AwEwDBOfnQ + +MrKMib42vGsLkqJRvX8JrhA37aJcZd7G7Bwf2VwHPMU5Ki5U5McLKTbKGWv74CUJ66JYGmJJN/JVTgF + z122lH/lRPYn50/Tz/2JUKHpmunt+XzRh0FtMASbefrmgDSSP2m/vF3cTRIm6DQLfb6y/b+nfe1Gk2Fs + LPlAyMUjiEUHlDvISG5x1TzxawxmFBlgG87F+CB1hgtgJ6Xno5SVaNZA2BiKV4WiNaFIfShWq2InSLSt + VrbEyns2nbntwatPUUAooWxZub4YZDWKYF3EQEo0wt41NTYWwguxkZqsmwPGmA/GI9jXNu/+6Ecn1Nbu + HY3umCpaDB54HpQIe6OQQrCwKhqtJCcCeKDnmNUwJI2UgBAORSyKIDrh9rDbvePx5UH2uC222AIF0G23 + 3baBqWf+95//vHLyyVdGIhcnEmeVlh5XlFzpOEQ1iF4U8gqrg2pDuLnD/eS25sWora6srarA+Y7XqDwR + rykq4oq4QGX1JWtUJMLwgY4G1sskgJVViCrx69DJgrRtDGfFCSWkW6eOJvO7ddql4MbrMKnUr4INftl/ + +ofHKy7QIn9nttdmUpntykr9JvjbyFBkvx7yq/WvGalyVup5dDiMECZHDWiGs2w4zAx/ekc1lBvIlC0Z + SdvasFiXZw+7mrlq4SLbs83IkUMp9GhG0pwx2vyp4VPm40RkxpA0yfcMW9LfdfFe25EWYKTncj+HdLZj + pDXAo/WiCo1KdQ4X7JaLPfeAsHdmNHJdLHZ3cfHPhg9/fNGip3fZ5dltt312k02ebm5+pLLyxzXVt9bV + XVVff3593am1NSdUVhxdVromlVodjx8SjR4QCVODbE/KkJHJWlVQ8ma4Kj8iho1uz20F+D2lFyVZESYQ + TQddpc7SWC/8D0N3RWlpWUqBEA4j8Q0HF2vuhwKDjvZmikAFUROZO2fgMMA2A4c57FDPS3D6VlWRXE02 + gklJlY9Rw4dNmTBe5Mr2/EY6kOqEmqoGf/YFgX6AoAAbU1Yy8+XLTU2fFaiw3w67e8uvNEbstDkwYHaU + niwbBK+P/4IUfE8Hv5KjyF3KHwS4FUo4rS269odbxWRFm23U812nHP1s33/gR0tj4+abbtLSxEBrLtVV + 5XYRi8apOAjg1YeiVaFIdShSp5ZYdSgBIraGYm1uqqO6Y3zHaKo5aP4tqsVAqUHmpLCSLIacGTqxNTF8 + RMXtQ/G/IBoBQf/ll1/+8MMPoyMlpmLjqk7yEfG1H/zgsMrKnWKxJZHo5pHI+HCYJDgd2bk0y6mhXFkx + oaO9p6amJZFoiUbbNBZiSwQLEZssjUb3Li45sLh4m+HDRTuzEVPPPHnUUedpXQ/ZXg5IFe1RnJqDzsXP + rDYoIPQ7q56X8DggNUizixyFoOIEBREBVBa+iHNUJSmNx1Q40jqWj8jvwazRqsYCCDp4eCt42MGszGF7 + wZ/+vNEaETRu5b5j/ugjhiT9u8Ce/92MFFmjVN9/qOi0pJX5U0/3821fAngyGmb/agZcf0fLcZU1TBs3 + HmcE8vVA74/RAga6pFTGgGlgIMcAaAMhI3h9bU1tNY4C35Do0z6LchEzSlLNAHVUFD1QRMLPYkdJtDBd + LvM8YlUviERuisXua2h4eP78J45Y88yFFz536qnP77DDsyNGPF5a+tOS4u+XlV5ZUnJuKnVCUfLwWEzh + H3NNQixcd+ewt2syuV0iDgTOCXtMXokFYkghd1kz6W88j1Q1FMejfBfeQRoQjYYBGxu/Vf5VGAS5YcUm + 6itIs9Bd632ikv1V4N84RnPmAVbQhf9QLO6t1ujRWTi3+l5RXgoq8kbU1lSTjlUejRA/s/A3b0xFaZlO + 2u5/sudJhTuZytLe1qznTAUNFbKX+Slrqme/CwG8+XZHAUgb8/K/D+Zl7H8bbsL6TZpN2/zXY9CskMdC + P9DYWaBpPLLxo0cvW7xQYoX9D2lFya8do8pgeShaqSAwDB2s0wQR/GsRFIQsohotbup1KjCxWUAoBtLy + kNMRT44vKx8diUzWia2p7AOd2g8sJBph+nRBkT322OPCCy+k+N/bb78tnravNDH3uz//+enTpm0bjmAd + RdQ6DiwkaaHjYDaEHmFCJP9vIwmcWluG1tVNbm8fXlnV4CheSJj5GLAQDWcisVtV1a4JZa7ZLijvMHv2 + 7I2TeubLL3+2evVJ0egJVRWnDe9Z3dEyjzBkjcS0kOYVjJ3If7BC0FkkJbeUamKCIkXtQT4WvkjuUKap + RdEoc2qTO5TdGT4gNIPuZkHPgVnqYGG7ScZIuOHvz+CPIBgWQFpmP394yFDAAoQyf+Cxx4K8cUdgLGsn + ti8vLWtr9oWy/uCXaxf1kU/v6b/XirT4IWs5QGg4ogyj5mMsn2Zste1+MsT7RQSN6CUHDyyQC7x9YQ97 + kTbtGiCUL0Kn1P8BDMZuZFASGKNwCHFWWdmo5ubRFeVTo5GtPffwcPjiSOSWaPS+9raHt9328XPPfeqO + O57/9tXP7bffM+PHPZZK3R+N3hyLfTMSOTUcXuN5+5FTRutrtlM46lIxdF4kPDPskYBmvOeSj4Ykuq2e + R4ZSBDJYRJGnMtXjvAKEtARWF7TZb7mN5WYSIF+4OB5TbVWVjl5QayAiqVgRuaol+sLGuZw/rUP53NoM + zb7VWrdHZDv+tCqQjPoPL3jqkjxakXTLfi7fbUS0e5gYCYKKSzZTzME/HwvNC2AOYk3sbBzNeVPUn/LE + DXYO+A4OuCU3pa2tiWzjAx5qI25AxiuMJYiBCx6TNhPHRIe3r1/TwRINhGWhiAbCSG0oCjXEWdjmK0gh + Som2mo7xLSOmehWwKv0RFiKhbAy1DYn4tI72caWl6BIRKFLwSNxsK4HDmpoFQSFciv+deeaZJGCjPtH7 + 77+PfOYrDbf/50cf3X3GGft1dBAaARZOCCva2u15bY4DK270wp2p4vporBK9ZTKJirIWLaUWVQoWbkIY + og4LkdQzO7a3z9b5VPkccsghJvWMlFhaD2Mv1ZfuX7XqzPq61ZUVK5KJeZ7HrUPVAhgD1WVWASYj6Sz8 + aPXURJ6IwKEgYs4i620IlAkTWruGemzD6/zJt/gzEum65+tmNe3r9ZPXjH/15M5IYGT6m0E+A1f2BdiW + omAg8H/3dw8OY82mM8MEl6DrCtmgl/nVJnzsziWjz7Tn/nmEzwBgBsPInEVyFqEUAdb5v9oELoeICJsU + FiIDdB7tU6IYiY0rtI2PGcFegncyvvv4l8MI5U+wkGMChepP5CqRyJSRo1dus83WUyZMLy4iX+hqz7sw + Er4pEv5RU9PPt1zy6AknPPHtbz9z3nlP7bjjk0OH/jwWvdt1r9NhFUd43j6etyJMojVyWXgYQqYruQ25 + 4xX+DSNftue24BQMA4FeOTZPIuiVJVahoCKjEr+R0cLkNFtlftNGYFU2xNwiBYQlpbWVCgjltmA/jfKf + j/f+E7AhMOfuBXfeB8EcsDRgZp6d8QCauY/pTXLD7UlV0KP8Hpfd8TJ2jhzaZ3XdAjM6a5Vv7fCRM4sI + ZkgTv4LmVioJQdYCw4LFIwfw3TFZaW1pZAq1zoPLQDvIXS24FXYB3MCDjOBSzwGxqBdT2WTAwmi5poOa + EUa1mTRJWhmNhTDCWJuX6vQIIkQ+Kh8z8oqBtCIcbi0qaotEcMXhkINOwW8ECwkVP7C8fItJkwRCUJ1Q + 5OG73/0uUlLykX4NZtL33333hqOP3pl0TeEw75ukHsX9PjSe6E2VIEVDoqkIovaigUA41bhKsJALQQEk + qWeITCc/yy6NjXbqmW9961uPPPIIV0HNo/XEwv/+986DDsKMDNZyFgoo4qQUjauQQhNBobQcYsvr42Oo + oUFEqRphFo5QEFBNpF0/fY+hY5BlUOidCkKo+JVMouZAsdB/l6ZDNzXUUbAt0G6pzRnKSRAj+7IBI5oB + RSx/9jzUYGKftyUL8IJJtD5s9kiR9TczWViyNkYV+ORYPg0ftfFPdgsQzh89A8zznUy+/c5nA9nb+oAn + Q6K6OAE/xTx0ufl8kDOIyLhTWVEhbpIcmBSqZ0GdsaP69sTsXw3GKDGh4VuKEUbCjZXVYzraR9XVjI9F + lY/Qdc8Ke9e57l0lpT8dP/6hFSseXbnysZ13fmzTTR+qqb5PVYr3Lo1Gjgt7+3redmGP1GvTw95k/T72 + ei6OwC6UnxxWC3AqVSo1xDhAoHIKMl9QdS00sQs+ciF+CwOzsPqbaVNdVQ2YZwyn+ddr3+uCkwkz/8j+ + 4pu15VnYj0AOSDPUdEHJkfzphXUim9AbwMvigva8qy+CaLpjsHHBnuyvDKaA2X09A4QGYv1ppXRIf4S3 + xhp9vf0xRU4AD6Pgtuyu31kJiFSfzLs5AG4OhH7B7xwZnNMl0tYnrZU5DS9TeVlJJBoLuVFFCilGH9GM + ECAEDmOVaok0hiJtaoERhvUXQJHIQhsIRTVjFKQqrFt7ucYgnAmwkDAGeOGqVGrbQHUyd+5cGBUuQ8rm + vfnmm1Ts+6qpIU7EP7z99rVHHrmiqQlqSIwdkXYjiD8Nh2GHmCJFTgIisvAFvihYyIVMpahvkIaN1DO7 + WyIgST3zs5/97Be/+AWITtGl9eCF//388+/utRcaV0IYEelMQSZHmhjdJAwKJqbeqGb66SyClGIpRaqs + arZpJmUv69cVebepv9PXFMxuEkE5KhO36+Es6e7uGLCn0qe70DQPpWxOhvNhqqtSTqk8LZnKhJ158+WV + M2c33y3/v69tCUYE2yPYHxAqc1kw0pgRJ3ucClxAwWGs+X4GPrPZnoHDwqOkkXcGw6hP+0hIg3GJO8lT + IKtdlXJBqfbZY3H2WK/AQEBCAWGWOsaAR5ZkxgYVPcSocuQ2NRTXYwCHChfhy0Xkr1I2THc2fr5I+ASg + TgFe+IdVlfcPG/bAhPEPjhjx07raeyORmz3vynjs9EScoWArD5WpN558bCQBxlsR9lrCXlMk0lqUrI1F + ubYysoAqd6AH/iHJUeZQZY+1mV/uVai6VCoVmSJ4mhEqZhO0378Qe/aQPSHIXKk9bzDfA8bsg5rBP5RH + gZrDf1KcnlkIA7TeJoOaBg4lSt6eJAVokemNNgTm2B70xvlG1Bws9N+D4IiGDmbQ0Z4H2i9vnutdlddm + XotUB5ERFxVgZO4ogiJ0VM/wrlay4KltmIQxCHBbzcFlljCYAWQwYKiBVhVrxKhvjwCD2dceLpjc87jU + ERgmcRNCChUWloYiFQChE62KJOqisTbHaw+5GgVZ4IVZQCi3OTCQom+Eu0iKkxYdxzZWY+F8zQvxF0J6 + kIft0t09e8YMoYYkbSE4DxEmdR4gVeRtwWtIMrb1wJLBS0x//corVx955K49PQYOYYcYS9sdh+gC8A/4 + wUoIKQTRBQuBJbJgCxaSRk6lnqmuNoGSu+66K6lncHy+884765165vN//eua3XbjLlENY/NwmDLCxPhz + don3wMNnEq3ldMDgIeR2ADaLRanpnOTNFHTsn032B65in9RT4P77Gb0cu5MkTqNhDNT5fbRgr83RqnEW + joAhqySFvrUAcDNSMwCZH2QbcyvMn9lvuO7t2d7EYI0/YpiD2AhpDVtZQ5UMSdavBuQy5k1EnkGEYtaY + GIx99i4ZH1UOBUE7t3DBrIXzZ8IFuSFNdfXIzXPoSDA0+/Agxy1E/vwRP88d6NNE5f9ToSAJaI1so0AF + x2MAMAED08ZSLV2BtyHpnJ5MHNDccHpzA+Xdv+V5N3ne7fH4D1JFP0gkbg+Hb3Ddb3reWixDYY8cpBhC + qSbdifHTcxtIFhNWQpiKSLg8Fk1xOqGAEDt9Cs6sEs6qlqhG6hb6X4ILlHaSvtzHfjXg+hZjg505XzJ6 + okLkWO6ePQ/IbK/CAAKIVWKxmJ/3R5CvEE207d6Cjn7PMdMd88XueMZ8avU0tXvONjIKm391Hy6omvHf + ERsG7FfGfmvs9dxTgBB/G93PvIxZeEkuQ8Iw4gnSHjF/lePrJ6UEqGY2yUHWO4U3zzxfWars81r0tE7g + 19/G5JTx4ooXCjUMl3mxmvKKrrJSSja0qxydXns43uEk2hUdJOJerlPsM7aBVFKcVEcjXcVFbaBLNi8k + BTbZn1fDDhsaFk2dKlhIXfjDDz8cavjjH/8YryFB99gYRUTzlcLh+7/8JWV79x41ysChTE47HAcHIQQR + RAQI+cINECxEBIQgFl/jVhoLST2zODD24vg8++yzSawKu13vcPv/fPrpt7bfXgykJAof5zioZsBmiawv + mGIG2yM5Ffsq/sDTMdle1ruvcBDcyiYRQ//HYbOqikrenPzNmLih0Rr8fDARS4wdPrK1AU1i7gvMwXXq + Tb+Ap7EW5wOhjCDarKpaZI0gShSQjXb5c2r/99wNLRVMMKj5eBbAm9qRW9FQU1deUiZh+/lDnqEIgliM + GjJwWBim1nMoXrSenk5KBmpFqKpcKkQv3y7XB8vJmDSzB3cz0GfQUYBQRR8oGFSnAMuJytcJZYxbTtBI + 4ROMDQdeHeFJidiuXW2njeo9KpU8RVeEv8p1r3H517nMdc8LeydGInBBUJAE/WSHhwKCfz75A3o1/4vr + A2ryp3VEGtdy/tX5Y6VtNinMbGl2se5GDn20UbAw2mkc9GcSwZRCHpPHiC93w2CeDPeaoGdJaSxjgJnx + mCeccRXbXVG/s+rq6LF2t5GeLF0xnxHK+qCL5/C/LO+g3iwHOIN9LeOKbGYgTUfsZL3TBhFZq2pblpZR + HMqGWL7TKsgxc3F567mhOo28ksvKyzjIQQlYj0fjJJWFk9IzBrlX/mYDnlFjd5Ta9SGkhLgMEeBHyiOx + Bi8MJrC0hcMdAKGig6Rbw0fIEemMkmFZXVKWcMapIIdNPMbwDYoIFs6IRBbFojjGRXJCqPuhxcUrRo4U + LBRqSKw6JQBJTPr6669TERf5CfEVXzUc/uODD+665JKDNt0UOMRXgbFU2CHKUuAeEGLhBmClNFhINW2w + UNKwkXpmyfjxcglbb731qaeeigiIuvB/+ctf1k8QCxZ+c7vtIJ1kt8GXOdp1hkejrZEwBlLkSEIK1fwz + 6KT0qrKyLPvDeveSvnbkWes330/E0P/xFVErGE3BfKKlhSyI6v0e3IdhEI2fXRTUmo36B7F7doCCBt38 + N40xBV8jubik8rV8GGkQfSibrcUk9S9ZU2mzvRp9rD+yhyQ1tAXDk0HEEP6Shmo/+5c1omUIgW0yZaBJ + EZkdg19lxmibXshty4y8GUlnBjiD8ToACJ/QGAywR/wA+RRoZEZ8gDiAH8O9FA6pYL1gM77QGYpiCcEj + MBn0ghQ20V1j0XmxGBKYlWHvyLB3Uthb63kne+7RYZdXfo9IdItIdErY6w57DeRBxpcG/sH/NPiRIIkc + prrCkNC7DP4JEGp4U4GDzDAUP83GSPOn7BiwxixWl23ptX9S2zNeG89rMM+QO+Pfn5wJSrA+EOdqCho8 + IDPvMSzfeAdzgND0h0wXYtbZxbSntZH4EOl0wT5ZFtEc8ymb0STJxufvpZso33kpW1udSZOcpUudgw8O + HXts6IILQldfHbrpJrXceqtabr459N3vhm64IXT99aFvfjN09tmho45yTzi+4tijhy2YV9LZGSoONJg5 + ShkuXYmfCwQCKvDjnpDFhZTXySQRnFEyBvKFP9dpIQdAfX1pe1sNdgqOxovLZHvwRSm4gfL654w93Ctd + sc0XMUA66V1MAtX4ChyGOVMi5KVCLpUrGqBIFDUhfMIta3fKAkaYc8QsLGQ6rKPWsJGChcPC3hbNjUtr + qokWpyYZsfbQKYKH1kSj+zQ3LwoysS1evHj//feHV910000PPfQQmcyAQ2GHX7Wx9JOPPvrhpZfu0ds7 + N5WaW1GO5x922O26AoeykJlFsJDML6QklTRsu0Yi+xUXLwsqT1GF8cQTT7z99tuhtng9KUq8HsEh//rb + 385dsgRj8gwMpJHwhKJkTyyKgVRFATJe6HqkBggHhylf91a4Bkf2DrW1y3QPVVBpILe29NRgaus323j7 + ZBaZ8xL6U7FMF/fBzFwzLyJJiMePHgV7tldCdIKZuDqsTOj1sCRDR9Y8uiApDMBPhipfBCiHykSP5Wjo + ZawMyJwZ4FiHiF+PYupjqJ58kQ/zTmzFWClNUm0ZpgP8yzGEZg3ihtwEIGk29sliDvD4uKJh0hhIDcYw + XsQZpAWKtPcO+zvcjoouJELbNOwtCitFKNlhdtf/bh/2KEO/WdgbE1buwFqAU+8CgrIv+FdVXkYgI+MR + t0DMmxae+d+l5dwitY1pVcAX83dRaBpgmAzH2RTTIK628UaUIFYyzOkH5IOfoX3WrZaG5HJK85j8R6aP + qeo9BQnT7VJQFrDZuKi+00WROy5aOHPK5LFBvEQGCANc9DupwUL2wm5JP6+prpJSiwr8IlTVCE+YEDrg + gNC114buvz/0zDNqefJJ58knQ489Fnr88dCjj6ovjz3mmOWJJ9R3/n38cffJJ90nnlD/Pvqoc++9zjXX + OCDowoVOc7PCoVwI0AWu8wtWlJaGzj8/dN11zre/rZarr/a/6D9D8u9VV/FF/dvPIhtceWXo8ssVil9y + ifoOWh9zTOigg0K77RbaYosQF9vRESopyWoet6KvShrM5ajDZeIomOFVlpYXxZNKVkGWGVyGylhKV0/G + vNIosayRpmR1d/2QMUUNPb5pVOanOle64oVCpE1AhdhIBQuRQY+gZixF8opTC2Kxxa4LhCAlxUxKBO6h + JSU7DRs2J4hJ2GqrrRDRnHvuucAhCpRXXnmFTDTkuUZKgw7lKyWIf/3jH++56MIjpk2dl0pRyWi0FLV3 + HElOxsIXbJUEhxDqR6mKLVOpHUtK9istO7isbOsRI4QXLly48JhjjqEQ4wsvvPCnP/1p/XKrfvKXv5y9 + dCm8cyrNCIdRHqnUMFR9q6yoLEpiWWCax6CBL7og/fq6cS/7fDRpm6VbHH/UqqFDkQ/39+mLHNqevAD8 + fEONxdgMXPnQqP/n46hBMtYwKJASBddaAHvKcxlxwxI6bwAPr1NRLEkwQ2ZCnWU69Wfugnn2J4NUvuXK + V9Do9bb5K8doJvv5Cos8G5oPh2b85W8qF5I7NMgfVnCkFtOlGaMzWBiAWSbkINjSbG+sncr0Khlb/L2y + YUkgx+CK4oua0sHtiHPA4delAW+qcnV7LOAfLHCsJoLNYa8KFUwAgcoEqvhlpJqOXUGhnDhkSCGsdXyD + cNYX/yrYjEZil2PwzWeEfgstpAwAzDYUi9/RB0WOpn1O5r5l3WR+BaIQVuiZR/79z1rDNhxKsu4FPUH3 + h8zMJsdx6PcHupbKB1tdSZybMbzn9Do5oJmH6e/QtVRbSzPeBy0eARed5cud664LvfCCAj8w75FHQg8/ + HHrooczCnyysf+QRJ/jXAfP04j72mFoef9x74gnvySfDTz0VYeHLI4+E77zTBX5AHVvKRiPwoVAspbqy + inth3vyGhtDzzzuvv5585ZXUyy8nX3op+eKLiRdfjL/wQuz556PPPRd99tnIM8+E9eI9/TTn8p56ymCw + guQnngjJv1yF/g6WK/ym8QLnGsv9C/zJTwDd0IknhlasCI0dG0JjAMnDw0Kq3MwkOmgca2iqWc/z0fNj + Lc9XWBh2XKpukf8wmvDiSaw28YriqtbKlmHxmiEZIGTq0dhQS/f1Z+V6HOKoFOpM4RfVWIhzixiAVi88 + NBaluubUSGQz6gEhn9FmUgrhUiPiSFKrVFevGDXKiGi222474BB2eP3111Pz4ZlnnkGHAkFEiiKI+NVx + xN+/8cZ5u+8+JxbbhCq+Or3TMMfBwMugDhDyL1io/IVkz0kVLUomt4rFdib7TCSyYsgQwcI5c+asWbPm + hhtuoNm4PD/99NP1CKv4+5/+tHdnJ6qZccR4iM8yGm0uKalMJpnANDfW9Q4bMnXqePT9///CXv7ZeY3J + Zjl1yviKyvKBgLBPM6ngU/6U00c/zRql+1r4Z/qz7wWR6ZnNIAUgGUWKk0XU/NbDiWaZms9hEhF1DwZn + hjwVuWEQL2P8zMG2/OHMNoJlTGQyzmU7lnLNZcbymQNmsq+M9fZB8niej0/ByK5siQZUrPFduFHGx2aD + IqGNFUVlFUXKkqxgRteYtPmZASSzkjWChZA8jBZAXaOOggARu7QilNpJAGQ1YYhYpDUKCqXzF424ChF1 + atB8LqgAT2OeYLN8EVkMf6O/UFoeYYrBktdInw7mQGzGLBxAr3VLDdr5t53mATMMd0asqzb2zbb+pMcw + eOuL3wd8w6k/b8rtJPgEzVPT+/oGhhz7pwWN/jb2ZEsP66qPYQX91rcUBAISIN/Pf67+FdjLWSwUVEAi + KCgQaFDQAOHTTwNaseeeSzz/fPLppxM//nF4zZpQz5AI00d5zXgcKL1Li1WecfPyYlN99lnntddKXnml + 7OWXS196qfjFF1MvvFDEQZ59Nv7MM/Gnn44ZlH3iiTDQCxnVDVB4HAAzUC1o7S8C4QWvCJrLwlX/6Eeh + Cy8Mbbt1pLNlfTiDG3IiDkY4Zsd68aJJSr9ESyLxKreo0S2GHOmPmaeYa+Zm0DEQtCqLgM6TqZLOuF5H + qrQjFmc/yV6mwu0dZ4nrbhuL7RqLQQ1xIRwZjR5cW7ttkOEaRKHgw4EHHojvECnNrbfeSqDFc889R0qa + 3/3udwhScCJiezSguBGVNRzq4e9+d/fubnBIgg4pum3gEH7GVRDzTtkmNLGztc7ThNubosQbEm7/z7/+ + 9dp9912RSnFwuCnZzPFT4nNlSgNpLytK1ukUh0wbBxkx+jWDZf7Ma5ANMDjX1/bWkf2vARwaOajl9AtM + qXJYIXISetE9pGPsaJ6qH/Bkb8B3sFwK1LE5Q3QyGtfzRH0QK12WP6blxcKb0SpnY9vOKd/NkGcDpPlJ + 2+jETGezDftP+Z7FRQKQM+zQOMwEOQxYmn0ztkeBGVyVQAvfcT9TGSOVUkmlg30LGC2VXFNjFVwOkAPq + 4HywQ6I9ZCnVAMl6vLJApkFBYE8bD30gLAyBivNFrUXlSgUxZY1mhPav+rv+Vf0Y5E/LBn7/DsjpdO7W + zA00d8+GpTxDqNqeNpB2jrA5nbXA40LIdMruwWPNSGlsdAys4pn5E7/SAtFa64Xv3M8IN1OuwOpmpgf6 + VgmZnplxWLrxmDEOGPDUU6Gf/UyBQUH8s1dqgFGLgRyBQM0Fw08+CQuMAIHPPBMDtDQKFr3wAtyu5NVX + S59+OnXNNd7UKf0JWEaPBpKdN98sf/31ytdeK3/1VYHDEuCQQ2k4THBwDYdRzsVJAzj0BI8tLMxCwYJA + mI/0P/1p6NJLQ1OnFphbGyATI3bOsMPooOgc8dBuOOmRDpVRIBJF8ePFi0uq4yVWntL8AUuejG0jZeym + 6F0VUWVaewKQYF3E0zaL7BIN9Ye2te4Yi+E1RFGGoPRo0g/W1m43ZsycIEPp8uXLKeR01FFHQRBJ2w0i + oi8leTdpr6GJGE7xxsEUP/nkE7yJGxEX//jOO2dutx1QhIBzgueh9gYLcRPSfha+gIXkBSVvwEwPp4iP + hTs3NZnUM9TckHD7X/3qVzg7Bxli+OHbb186dy6SIpypc5DwUHQ+iKPA1Kwq6DLvC8QygwSY/wc3GzRY + KmCzMMyfgdm76+9GPpNhcYFZVe3CgBKkv1KDhcpIqbXg9sdAnaxkEAIDICl5JlN7Mm6+56xUf2Kyq6oq + zy71kKsqzEHH7DFXZTCgNlsiKskz/bE1IHM5birZIGuUD4hRlkVUAECL3ZSfTxYDdeq7WhTXoeXUcxCF + ekGUyl+pdaRhlC/kAE3yr+Z/ogX1oyAsLoj1j2IRHF8AuMDROEJMJYgRtNPfc2HPgKJsAP4BJPzLev5V + x8yCf1sN5GI0QxCLRFa6h9hkrYmF/z1Y7RtR5VkgrampqKKyHfF1XBquJqwIwb4ZA2gWCmYLTQUyLRRU + EBhgoY+IGhTlaPYkTP0pH+M7kDWNjb4JERQUFtgXFzRGUciTQUFDBAOLqKAgEBgDrp57LgmTe/HFYlDw + lVdKX3+94p13ql97rfL66yPjxmWrQC17zuTJoZdect57r/qdd+refrvmzTerXnutIoBDxQ6BQ42FQg3B + QtBXeKEPhDYWAoqCf/n/2hAoFmC5fM10Q3fcEVq2LNe1yR3joZNXa7NpU+AWuSYozeV0lkonpeEwTk/R + VU9U3WCkNAN+xF9oUl8yfCN6FJchMIoIUxU8wkZaXLxdRTnCEETVBFdgKUVEc1gkckw0elhV1Z5Dhhgp + zaJFi3bccccDDjjg6KOPJvSQGPbrrruOAEQiFh5++OFnn30WreZ7770HWfzggw/EggouYpPcELcice63 + n3320tJSoYZoSnt1SIPBQriawsJQSLBwW+ILUdDU18+dNk3MpHvuuefFF1/84IMP0rb+QwxpJ/beX91/ + /0Xd3UwISGGzNUDoeeS1yQFC5i0FgZCHqkw1yvv1/8dn0HLQgo2j2ahFCqIjqctQnIrUJdjAjAL+ikBf + Y/7M5YWMJYxfBvbMTFDN2wJVuvxqhhhQUBS5ehSSn8wA5H/NI4Wywt+S/APU/GS4l8PaVC/YMSNaMUxC + hl3+hAuomJPKCgLXAqyyFTEZ86bl6MqgmtG5GOrnR8RrKCLei6UfeIPo1KjKCmWDgUBjk9SQJkyLB6oG + cRnKDQvUgOdjHjH7RiCTB4S+FVSQr7Wlefq0afPmzjFLjyop54NiV2fHzBkz5s2dO2/OnC0WL9pnz90n + jh2rg9o10mc7NYPJgbgnFbmUL0opo+6y7f8zoGgmClkiIyYTOr+ocivqa8rMReRp9mEDyKxnB+2RjTQ1 + Nk6dMmX2rFlz5szWi/qgfNG3zngZbdWM6pMcn7cjEVdllfjgF0Tzif9MULAfCAxQ0HcQPv6488wzzrPP + us88o5xzxi8ICoJMgoJQN1AQJgcEQuzeeKPyrbeq33679te/bnjrrfqLLw6DwfnvLy/m7Nmhl1922exX + v2r6xS8a3n3XwGE5hwJTX3oJLEzCNQULhYNqXpjBwjwDqW8mHZDvmvuAlfiuu0Jz5wbmTClKVZzC3N1Q + V0sZCvqAonDZ18BIKz4+lbFZGeQ83IZ6gMXFkgkXyYxpAq30ZnMcwUIDh2ImleJ/hKtj68PxJsITvIbz + HWep627teUSUCxweHo0eH48fU1x8QHPzjiNHLtDQQucg7nCnnXbab7/9Vq9effzxxwOKZPGGKd544413 + 3HHH/fffDwPDgkoMBqlecNERyQAbAxcJxhDP4roaUZ+7554d6+tnIV3RHruRjgOK03jgkH8JexdjL1hI + /J9oYu1w+5133vm8886DxWLU/etf/wovzI/9p2208IVLLrmgokIVo9AH2YY4DcchkJ/TcbuYQ+BwZUoB + EBZUjWLzi4WxC2WCXr82POTRqxDvwDGAOY+300TXGNTJmNCDyaz5CTdDIhrXYgICGyjjEETmYE4oKWlu + aMg3XBhcFBRk6KH78a+ZIwv8QBJoXgCBuTFVBhoN/pk1gkYGHQMU9NcZeYsByJyBjw0YIlF/COaJndPC + Px9hM7/qRNKqJH1RSnMTlU5F2xslnNwifEL7giQvVnS5+sHQFxvA7NE/MAkq8tEHyCk8QFwwY9OpnR3E + TqnDGhcdf3JRoHshDmf58CzAU+hITs/AVqkPlXXqbBzNUENAVHjeki22uOeee8jcZN6dSy6+2HDElfvt + 9+KLL9qv1XFHHYGDRtyc0v6+4NymwjYzNrMHw4btLwFCmsmNWiEOzoAUWg/bdAALGgUj9URBkb8ttliM + rQvTkX0Vc+fMoaKFsk5TMcpXI2d8h3R7+PSkcWPqamrE1b3lls5LL/koaHQx+aTQ9rTBBZ96ynngAee7 + 31Wi0Ntuw6yKVsU3imqLaFyjoE8EYXJYOIHAd96pBdV+9avm3/ym5YMPOl58sWGPPVSQhnn7zKu9YAGM + 0P3DH1r/8IfO3/629de/bv7lLxs1HFaDprBDfIc4DjG3wjjxGnJS4YUChMILDRBqRpjlLCxoIDV00BYH + obIhPqSryy/HxrPCLqTCqMQIYi0yjGi4U+MtyCWlCxKoabApwDioYucR1Jb34TGQ7YYZpDmEOVAOFqLu + QESBx0sVUtf+tjE6Vn1zCKIFh/smk4cUFa2KRJDSgA1Hl5SsamjYpbd36aRJ8zbbDESkNCChe8DMPvvs + c/DBBx955JEnn3wy5lMYGEWAEZ1SQZdsL4899hgCzrfeest4FtcjHuPNRx/dr7sbQ+WmWkEjWAgQop0B + C/nOJUjqGQm3VyGGZWUm3B7tj1S3J9weXpiDxLTnHx999PCqVedHIqdEIkcQkqEZIUA4S5cnxAxr6vRK + KGFf4RNiPvna8M+cSGkWMKEHvQeT2pIt5o4bxzwn92PYqgCMmZ75czHlk4tQRF7UsLKJOqxlAjL4p7+Y + rTKZLIRxiJROmbB0kmgLCIXz5ehgsrSgORwxgLqMYyaY6RvJQ8bgaZMAOZGBOsMScuyfGtUUtoF8pcmi + 0kSSvCp6UdnFIq4jtfdAecNXGHNTiSKELXIoxl+pTmD+NEY+AwA+GPQNCQquAq6m0S5ZXVXBvzmAJxZj + ptJZ0hXNArWGBZAzqGkgjZDQ0rqqamUFjahEHDgh7d2FIwpZlDYINBognDRxIpn6bbR7+aWXBAgJcd1h + ++2JWWKWaVBkh+22S6r74QOhhYIZlNVMMfB9SvY4bSJmwgLo5AGkL4uRQwWgyNxLc0GVaD6G/UCXd7ZN + 1jIHEnAM5kP+hEiBqAAhlwzfpdApwkAbCOfPnTtiWPeMzaZUVijFo20dFVqCHLqxvk6iLKCDt9yixJP2 + 0J9PCvNR8IYbnL33VmbDLbcM7bRT6KSTnPvu8555Rrigcgq+8AI6z9Qrr+AULAO6MG++914DYPbb37b9 + 4Q8df/pT1wcf9Hz66YgbbywbNizLGiUv+PbbK9PoX/7S9eGHw95/f8gf/9j5u9+1/frXih1iLH3zzWpM + rFDDAAuNjVQpVMVZSAgHC7SVJQcI+5LM2BdubggbwwsPPzxUVJSLfPlYaK6E8ZT7q4r2YB31YkVUP8PY + 7yTCEXDM+igbjkripVLSFcoMmRVWwfAm5YGEGuI1RA+JGlN4lUrp6TgLHWe541DOcAdVqFpFWaAsXR2J + HKUR8cR4/KiKilVNTXt3d283btzCTTedP2sWhlMSeYM3ZDuj6uGqVauwoBpcvPrqq2+55RY62ZNPPkl4 + IogIGiG0WScx55/effeQUaOoOYzLECwcZWEhcAgWSuoZwu3ZhviQXaiylkwuDUIM8XQSbg8WwgtxZ0p3 + BxFBwQ/efPNHS5ZcFImcgU04ElnleQeEIweVl6NHxegqSUfh0Nx1U6f36/cR8iLr9ImFveI5Gk8GhmHD + hjQ2ZpWz4K2gh2QMBoHs00yYBNgYJbQzT4idzMkCuLSUooa35VA9dmSMFiUzrUXApuuj5n5s5Yv9GwBD + EVpyKmodqa0I1TNxqcVaXVldpSZ80vMVe9Ib24zQDhqz1vt4acZKv6ofgEdZc/J2UiFZl7plIdk03ysT + 8ZbaqrJUEV43STMmYypWTUIpBAhVjk0VeIBYWyqzZ8Qv/TAhmyFlQV0GxjQoZGocKsbDWYTYGYVLPpnT + a3wDqZyFNUxuSD4iRJB2avJkq0D9Nhsolb1AMkG7rq5OKrh9//vft3GirrZWvIZbLllyySWXMNk1v8Kl + jJom+0rVqbUHMQIUSzPsuQJrcOvW1FC3O8NZ9U2wb6x/W6xrURelY8lyjKuWZMYylprZEltrp2ZkRG8v + bhQsW4SKmavA2FtbU0U+eoE6m2OqJ57UIiZFKxU0jx7lPv+8LxC1h/5+lKLEJNx3n0ME3lZbhbbZJrR0 + aWjTTYm7D110EZZSQhrEIgoXRBqDObQCFBQiCKv73e/a//SnIUDgRx8N//vfR33xxYS33+5ZtoxGaiIV + vLVEDu+3n2KE//jH8E8/HfvXv/YKHIKgUEmhhvBLixcaf6ERziggFB0pDYa/8m+O2LUf1UzOtAAgvO22 + 0NCh6s1dMH/+oatWncIHQWbw4SkEL7XPKLi7ajoI43cQfMVT0aKyIlI/FpeUlqlL1dYSkpyoJB0sNjTK + M8tao8ezHGrIsM6RCK4QSylw4psZXQc4nAfT10XbKVdN0CG+N1KVHoTJNBY7Kho9FkSMRE6OxdYWF5/Q + 0HBIW9sew4YpXJw+fd68ecTmAzwrVqzYZZdd4IsHHXTQEUccAQ7xthDhh/oUoc1vfvMb4PDf//734CMx + fvfaawf09CyMRmfGYhPDYbAQOkuzASqwXOQzWHqnuS4SG0mvulciYarbA9Wnn346eIzNFmstpwaMf/vo + ozePGUM50zOj0eMikcM972DH2Z3c/LH4TNeFDnKKzki0PVlU4XliF+Veb8SAel54IpB4k/rnkbzh8LyC + QDhI5yC9gt0zLFCfL4sX6jXMxsWZ5wOkRRz5Sjvlpxxks9foUUZtAwsZM3IEJVLlzTS75FhBM7oDh+QX + Scqfko1ehh179JHvHBxNhMo+DGCHY8VkoogoEmD8gjLGBWv8wSuHJSirJnFmmvZRXYjsYiAfyTbJXk2u + MsrvUXtBivBNaG+bM2lsLVlqMBLqNC7i8VL2tGCk1ikcM7lA87lgX1bBgITZZkObzxkBix+WwIkMkzMI + Z74Y26mBxoDzqeNk20Uz2JOzseGCsh6Q0JwvNqSra9asWdh78CAYnIAwQfv4df68ecx6sf1YEOIDoYRD + 6jsmups8ialaExS6Vyb92KiRQ4f2dCqGHShuZC9usRxMQ6law9nLSopxRooN1hLpKJ2OBIME0JjlDDa2 + gcA0Gunq7MTpw5hMLg4bzrGTs+RoSmkwwT+IdCSZMNF7bLD3Xnj4MkDYl0wm0JgoLHn6aefCCx1QkJA7 + lu22U7xwzBgVsf7ii0RKKBSEqAkKvvVWDaD1y182Yd6E1QkEfvzx6H/+c9x//jMpnd7kiy+mr12bqqzM + vNS8dMxCV6/maN5nn4397383+fe/x3/yyei//W3EX/4yFCop1PC99+phmdpMKjbSImykkFEo6dNPQ0zD + kNRDDlHHOeSQ0Jlnhu6+W1HD/FAKGw5toZCNhdwWhDPbbsuk3IMyYUigSrw9uyKXiyCacfToJ64jqUIO + RtFULNlY31CviLgWy+h5qB8+koOCqgNoHw/H0qOnD4riMmTE5TcpHiuBhgxUOMCkCuCYouSmFeUUvIZd + TdNRFos1QVzhODu77i6et3skCkekrhOONEUTqWobi1Hbdm0ksjYeP6Gk5Ojq6gPb2nYeOXKriRMX6SKI + 2FEXLFgADoGLRDVgpURo89Of/pRofcnlNkg9J/fr1y+8sH9X58JYVPFCakRoHSlA2KbNvBhLRT4z3XHm + hMNbQmrBwlhsm2HDRDuDIReZz6OPPoozgAiQt26//dtNTRSpPy0SOS4aPdLzDgEFHWcZuzsOwlrJu92V + KOosKUd5y403dtENUcRoO6T/UKhpMG7sCLCwfyAUpBlwm/wNfPjJLh5V8FCCVXIEmfwGMKn7oE69yLBi + TpGNhb4dNQA86aJRsFCVjsrFzcyu6lbo8+jZvRo2tRo+yzWYgUPfQaMOR/OgPTHN04KpulqpRkm/NK7F + BnyXnq7qLmZPAuR1sdly16lxXQoPtXlupy5FNFQvQzy3Pez1lpV2lhRXhT0iEAg/gAAy+Eo1WkFEm80E + 9jrFGfsBv75+snlhwOoypI0XWSVw0IISG72MIdReiQCl0DZZsYBynLwtszBSGCELQMjrw4wW378Ztk47 + 9VRACHiD/6Eqv/fee/OBULEtXQg3QEH5IoiY0aMa+kiTsChQRskHPx2GIQLUDIhqiQ0LtRnxpIoNVrZR + mwXBG+ZPRdXV9MQWOvl6GX9OE4kwuersaO8dNmzK5MlcDguSGTI0sS8NttSkvrKUxojKRu4AG5x3ntKL + DtouqoCEFDNHH+1svXUGCLfdVvFCONNLLxHqLhZRJY1B6qlREHOoQsEPPxz697+PBAI//3zS//63aTq9 + eTo9K51efOONLUQNmkkn31Kp0HHHET7hff751HR69pdfTvviiynAIQgKjv75z92//307/BIshBfifRQb + qdbOKOEMxPTpp8P77ONMn650LosWKePtqaeGfvhDlf7GjinsSzWT7ywksOT447EqwwgXMH/CfWYD4cMP + P6xihywgzB7TnHAklkyVxpMYjbI8ogUGRxlZBCzpVYYdskp4IVho11JnDBY4rHWdoSXFo0pLhmjD41jX + m+J6xOptHgrNJT1bgIhwxF1cd1dAURtOibuAKZKkZo02n8KrIIs4204DI0tLj6ytPbitDbI4N4jHIBEa + WhvIGQURmUXCzzBHDD416Bs///nOlZX4AgULYYHgH3AlC9SQlo/TYRXoa5bosAoVbt/ZKZB87LHHMg2B + kj58zjkXFhdjDj0jlTqhKAkKHuQ4u+lrBAXxOHJkIBYpVrWrEvwLHRxMJaYB4QpNTTKawAnf0FBLPDL8 + RhihSuSo3fI5R8in+P2fwj4CJiUAQ1kVMyTP3zuHDgZMT8GMnkvZdtQMQbSZosUOfRA1QGgOnsMdbV5o + O10YTJgNaM7qJzvWV+3DpBC+gBRmeWuyLagqy7m2lPhOISBVSigo/qftnxg8iTfGtArto/ZCB2ZkXSx6 + rOdO1MVpSSc0OeyN1/UZyPPXwpZEqVOZT5dlINzJFkP6qFYA+SxnmNLfK8utbQa0XXEBdSOvikLxgtim + gbDYhDpY/E85yTJ/5sNbLnAG7kAr/j1AzYxB1TBCbRqNYhqVeSS5iM2wJWMWGyxcsID6pvgdbLLIT0AU + XBnVDOJb2XL8uLGnnnoKO8oHxc22225jM8WA1fmwpw5CepBkspIpVXGRwUI7ZkNAUVFG3+gqf/oGWFXl + R2cKsKwCvpdR3IdiGhVgVqVF6utIOCdsUkJBTHChxQv9oEMeYnV11UUXXfjAA3f85CdVcJ0c9tOPXVQD + ico7ChDCBWUBCJcvD91+OzrPmAQLCgpiERUuCI3Dtvnxx6MAs//9D2zbLJ2ek04vSKe3SKe3e/jhCaSb + sT0aVVUKt2CEn38OUrLN3HR6xpdfbvqf/0z85JMxWEoFCxHdvPeespGKv1DHVChSqIMXIytXOtOmKRfm + PvsoDCO5GlAtIR9iI+3LUyiXnzM5AAivuCLU2pycPGkSxRIIUocLmZ7z2KOP0mFygRDaIIuq00RtiqRe + Bp3MpCCFsOGQKGVy0MArxXFos8M2xx0dL56UKB3lhamOS/Q6HsTNNEdEU7NNNHp4R+vqhrodHQdQ3J2F + cmgaFyGLNi7iVjw5Ejkdw2N5+V7d3cIR+SxZsgSJDcoaAjAIvVin1KBPfu972yYSc8Nh8uiPExGpyqAR + pvgUgZJGAWQq+m6jVaArWlsJt4eSXvvtb1+93XagNW07JhY7q7H+xLLSlY6zk7YGz3Yc2LCPgtqTKmJR + ph99BU4MiHw5GzCq86R7e7tHjaQMgDFiO/w5d/ZmPuUP9mH0VzF3Ygco9GEDXQcuNxxVSKSv3zGymLyJ + E9vInN1CyoB5WTTU/jUXC7MYn8/+DJ+0gTDHKBpAnR+SbMybZjNrjRg/RSVo8qL5xFX+Z4yiMuSBPpjM + KspKUkzqff6nis3W+vjn9UYik0tSu/QO3aapkbyyc3BaeB7lbZfG48vLSmfFY5PD4bEKJr02MrOQeF3V + efDzc/ZN+AT/ArAxLrqyEuoA5HG+jCxFgAe0M17AfLpmuGDwReFWNvPTCpdcOpgxtw64MUfGzjRkSDv5 + +ZTwWNszxTTKO7v99tvffffd9vxdPIjLli7FakpGxiyrqQZCCBPWSxgeZYrPPeccar3li8bR3UyaNDHg + iL7t9JCDD0Z/jt/EHPPMM88QIDzuuGPtoZMNCOrQQBi1da2sB2sDG2ngvtXxEipmUft6+VeI3aiRI5HB + o+/LUY3K7jw7IqdxgtqNf/ihhyaMH49/h10+/vjtJ56ozFGK5itlNGD44fMA4c9/7uy/v/IOCgSyAIoC + hK++ShY0lQtG+wVr4IK/+51BwdGffTZRE8GZ6fT8dHpJOr1VOr19Or3HG28sJFhCXlWB+ZYWB2OmZoSg + INssTacXamo4/fPPJ4vXMMDCJkgnoPvqq+UAsBaRErmosHDlSpcWHnmk5CxVKPjjH0tOtVwDaUFemAOE + hJeQZ7y7KzW0p4dOhS0B3YY9uwpy/AUDo8I/nX07HA9FkqFoSlWxj5WqZcM/3CrSlU8cNXLCqJFKGpdt + LC3DWOq47ZHEkGiyw3UhRhKoACJieAQnZkYj+3R37NpYDygu0bZEvInbYz51nF1ddw8WzyMmHbciQhvI + ItJTmCKIeGIqtU9X17zp0wUOiU3EdwhFQ5D2/vvvDz5N9g2rVuEFxBeoakRQO1CKqwXFm6CGNBidCxEX + VN6APiKfwWW4U0vL6j32OGnKlFWUKQ6HD9bNW0WGNhLOacqLcxQvI/ZVLpn8olKhnimCGEU3Ch00z07M + gPajrK2txkOW49+VPp1PE2W9/CQhCuvUK2xga6qvH9rVZQdI2FMotlRjhrbl5jQjh+1JM4W39UUEs9YH + QcqCiIYCCv5xUlAhmZQi7+LtM//ayoWsEnQ6qkHZP+nVZMhuqiirikWrXFfbP912VdvEHeW5kyKR6Yzg + FeVHjh61sr5+GwKHPHcnz90x7O1clNyxsmJxacnMVGpqMjmalHWJRBcVa0m6jSlMewqzUpRlRIw+BBos + 5AttRt2zcP6szk4VCFEIzITP+Z68HGeebSPNh7G+1viCmgKImGUyhSlhMSIYwzqOR2DGxAmjmZNpzx1A + qKBOgJBUU/j4bagAwPh1+xUryFxBMHE2I/Rj8NkAfxqKCGKrSMFRMHrq73/7W4CFPhDOnTvn0ksvJfzX + ssSeIkB45hlnIP+2m7H33nuJ7RTLLWOI+QkoFZzT2Wt806jvtAzCJ4RH9nR3U+IbrXsOEApqcpNozJ13 + 3gmQmw3wZhmH4p///PTDDydtIOzLVGhyitpAKCgIIgKEuAkBwtdeS7z8cpm4BtGIImzRFlG4oEJBLJyA + mYa0Zen0inR6l3R6r3T64N/8ZoelS+lj6h2k5AtxHSNHehoIw59/vm06vXc6vUM6vTVGVE0NN/viCx8L + kc/gLwRuoZ5AL/JUCS58/vkESd0AwqOPDl1zTQhZ7N13hx54QKUbRRkUgHpW3rWcC883jbIvFzikK9yp + rXSIsPBVmbt6/XXX+T5CLUvj6XlQQPAPCqhq9hYp/EtUhOLlGwqECgL15JlnPHncmGG0SKdKEWMpI774 + DqGdZY5T4Tg1jl8vHg+i+OFgYBCmMQEoIq0kEhEihfkUxSmkaivH2Q6VDaDoOHtqUNxbxyYKIkLFji4r + I3mNoYYmTTZYiIZlMIGGn3700dFjx+IFVDUitLMQc66UuWchMoTWDqUGdyRGuXmRz5CJjRj5XUpKCK6A + ILLQsD00EVyuIynxiUJ8h6tSH+oggoKEsAgKblyNzOBBiyeFLpxRKWcXQGKLRXPnzNysLylpwVNwNFH5 + G0hjDWHbFWVlOQDsIxZsOBavq6qRgIqACyrrZV8fhk+V96HQFsLqJCmVBAnKmuzF3wRoJ5UrbFjwPkBB + +4u/3lBAvhgvICZQ9C+12DY9t8slM5E7Ds+3503zPDoD5I+qZLiQ94zH94lE9gl7+0ej+ycT+xQX71FZ + sUNt7VYNDfPrajerKJ9YlBwZjzFNIOK3Bq0gFrPsXJ1i1BWjZQ4dFArIMEotQ1Kf2O49wykzZkkr8sHg + ov9rnnmzIASKNkQmWAOiJsRRgBBrg9qYQEMRyMTQpqowdfXdEsvwthIudc0119hQccSaNeDc7rvtCkDa + qtH58+dxDGGTLMRXEG2M7SdHGWEfCiysraVslg+EkydPwmIEdtpcQVjj+d/4BuzTjtbA3Co7YrlFdmB2 + OeP003xGqB3PovjV/6rep8ZZnXOcBbEMMI9qNJ8RCpRK7mWQteDo9P77jzz0UNQ2A/YRPujTQSAEIHzo + IefAAxX45QPh668XBa5BQuabEXkib/nHP0Z99tkEDJsaBRdpSNsRIphOr0ynV6XTx/zlLwfssCPOFjVN + JOEc0R1jx7rnnCNAuLveBrzcOZ3eJp3eEiINFsILP/lkLBCL0RXTq3YW1mAgFVL4wgsAYXz//R3Moffe + GyKhNkAOkj33HF7MLCDsJ7I+Xzj6gx+EOjvdjo4OOhXWUeST5ravXXuKtqeoUKKKkrLm2ubSVKUrQChY + GC0Oxcs2AhByDm4Qp5EJvvoU8h0y+ks+GsAACkrsIoIawi1ACIiXgKKkwIYpErCGWw4UwbUGnBCSCC4C + LQhtIIuAIkxxN8yn2nYKDyNW7/hodK/OzlkaDBGaQpAJsWCGRQA+4e2DwcKX77lnp0TCFNEFniGC0Dga + ydLoej2R5DAvBrDRtqmuS8lDFDRsD3zCJrf2PFjsMtcFIGe5Shw0xnFGRaJDo7H6kMP1mmK8igvqrHXq + RolMQ9d2GTyYbciWWKjaWpsZmHIOwhC2w3bL58+hVnGmJQWJo72SlpeW+E9fX5D6WOzQ97Tbxk+lSigi + E38guYJdVVe2tjTywuXYSKU3SUJmA5OG6llrFArKbCz41eBmgHo+KTT6zwzmiWlUFvMRWygr4IIIQUH1 + +rDXoZK24/ZzZ3vuQs/jQS/zvK09d4Xn4eHe0wP8ImtKUkeUFK8pLTmiqvLw+rpDm5v372jfo7t7++7u + LdraZtXWTi0pHhmLdmjraGUkTJGHHCDkAZlEZRrqMunKBI2knRYKZtkzLZpo8ln3h2cAmDF+6u9ZmCe/ + 5mzjo6OFkdYRtN4yOI5goWkStlHbNEppmssuu8yGirvvvosN9tt3X8TYNgKRX6Yk8At2d3WRsvicc85h + vMMDIrvD21Cr2Yfiu8EzjtnY2ID3BB6WB4TRE0844eabb4Zcmp9kR+AK25JNFlkvXkYR9arEddlRhhkg + 7OqaM2cOVXeYiJvDskZQkAWtHykbSRtiLkE2Q9zAYPWnP2GFjWAt1PnSchcbJOzMogQkHHqoUo0KHWTh + O2IZspG9+WZKQgZ/+csGuBqMDXXMv/6FXxAUVLoYjYJAGiTv4HT6iHT6uHT6zI8+OmqHHajiTTkRVEQQ + GWfGjNBZZwGEkc8/PyCdPl5j4X7p9K44FLVNFV44DdEpEAvQ/v73HWSf0cGFGEiVgvTFF1GQAoTud77j + 153Aw4dt0wLCAXJw5/sIiaC4885QT7djgJDMXxYQrhVGSIBoeXFpQ3ltKk49QqnTG2AhptFEueKFG/Lh + 7hhlqhxHjewAMKuzk9EYe6l4EOGI4kTEbWaDIm45EAiVisS2QxbFgorqktk3Qe5zqRRBqL6Wnu6EykbD + IaJTlDUH1ddLBaj58+dTShB/O/0bB8Bg6gjS/67YZRdIHvAGznFS2gBIg4KQOZI9NLrhJselbUNBOMeZ + gAQGQqBJJE0iPgR/59xodHYyAafEHNoVcpBOUIa8POQYvyDzhfqKipb6BvCgrraaIU+ZSoqQHA4Q8DDg + M1IClmwxZ18criDnU5M+naOrnxMF85zMJuwlhQBzIFAaIoho/s02kPoHYeQd0tU+tLtTsNmcIocg+uRP + OF8eedRgpoLQGYZlbqE2yVBDQUibCPoOQhMgaDyCemrvOwWhg6AgRBAVzAiPqQ+0T6m69iE21HMPJDYm + rP+NRA6Nxw4vSh5VXnZCQ90JTQ0ntrac0Nl5XE/PkcOHHdLbu/eIETsNHbqsrW1OTc3U4hQFb6nh0KAS + WKtqR6l4jDrDXL6hgBo8AnWMxhIMjDjGJNtZHvnz4/wKkTadES3w82luXYDbBdv44ermOPbGel8fJgX2 + OBIsgZZLvF2AfwZ01cayl95Y/QstlAAJMY0SE3XRRRfZ/jlMhWyAP++JJ56wIysWLpgvO2JZnTVrFnW/ + ye6E7ZQ5LkMe/6JZu+bqq0EP2wvI0YTYsWN9XR1npIyMAR42FlkNQQ4ApB2t8Z3vXM/61pYWquWQ1sqM + qmsOP5yUpAYIFdHwP36fAQgFQeUCDzvsMMK6bCAUKQ3/8ivADCl89dVXzQa4JJHdoX7//e9B+RDZpR98 + 0M8sIwk2pW4R6lDwg4V4CV2SkGxqznPPOWQ+O/lkqjUVAMK33koR6g4/gw6KURTehuBT+wWRxuAU3Emj + 4CHp9NHp9Np0+qx0+tLf/e745cuiiTjdr1hKapNWhpKBGggBS7Y5Np0+LJ3eP53eLZ3GWIrjcPb//rcJ + EEtMBXALKSROEVKIVVZnXwMIEwcc4FI3mJabGkwChIFYJpN3NCegMIcLyp8ChN0BEOJ4LgiE4mZRrgU9 + NvGWO6o2oXYTCi9MlBUe+thcct4OOATnbEDPL46lyOot1NAoS429VBBROKJkuxFQpCGAskIdHYwIG8M4 + acgigQ0TEvGpiQSgCFNEaCPSUzK2bO9RL1TJahCaHgAWakEp8fhoZ3BKYyAl1j5ntljwz18/++ze5eUw + PJKRTtSqGc4OEALVADYLbeNPnDNDXFdqGQpzBaTxBdKw8a4zynWBcPCS9gPw0F+Vy0dfMijITagFCBsa + 8Va1tjRBp7TUpUA96HW67cQ0V5aUY3UcDBau05FthMsHQkZsguIMspqQCYsUio0gB+EyMEmPhAvS0TRW + +VETwUkzJlPL52fYnga7wGRKG7SWzw+Hz5C7bDi0rKZqE4Aw4IJZuUM1xVRxEWWe8gViCIUF7kQ8TNg7 + wXNP97xzwt7Z4fAZ0dipyaITS0uOr6oEAk9ubTmpo31td/cpw4efPKL3hBG9Rw4ffujQnn27unZqbV1W + VzenrHRKIj4qEoERQjEliKK8pJjyIxLsYYOc+c4vhDqgOjF6TtnS/Dug3VLMmzYy2bsIwoltk1gO3KgK + tzKwl9nRpoxsg5FW6g4aFMw5S+Bc9OEwHwi/8Y1vUObTfhl7hw878ogjSJRhryTE0NhFic/D/EXYksGY + G2+8AYDcfLPp4BkIau+IkpCfACds9YwJu+++OzAjGxggPP/88y+44IIcqynzVLyMxGU9//zz5oA4Gk1g + hiKEPhBmbKSSOkdMo5yOoGcb52CEEpXBkxY/zkknnWQfH7ksWbSQ2Dz66C0nn1y9zz4Jotcpw0uh2lWr + QocdFjriiBDeNarpUp/vlFNCZ5yhYOkb31Dhg5dcQkVc98gjHeigBBEaRogR8p13SsgjqjUy7X/+cw90 + ENdgOj1d2zOXalcfRk5BwVPS6fPS6W+m07c88cSBw4dnGXigmBoIo59/fpLe5jTNHVdrXgihBFBxNM7A + Wfjxx2MghdhgNSlUnkKdiRTraNIAYYDrykEYAKEYezO8sC+9jKGGPhAO8Rkhw362adRnhGpwCXgaunq8 + D4wdihqimhEsjPWhGuVJtzY2tTU2idlzkB+FukAtqaKt+X9BRBQnogFF5huAYplLaeywmE8BHsFFsAdc + xFHXhtDGcUzmF1U4ScMhfkTkCcTpo6Yhx/d+TU1SPok8bfQqAiowOAwGCL/83/8u33bb7cJhVUQ3IIUi + cgGkTaskaQCa0nbdGGAPUGThi8QgCo805lAjjcHAp6x8Ghayhny1Rq2AivSFZHrU7pOuAYRlqRL+zVNx + qucGFqhkxN46PEfzuHOso+ZPGlNWVsrCkJz1rLOj/AwhNFio0TSwovso6eOiYXoqHiuquJ39sb2EICf6 + dx2UIdZC9REtSbbzz6hgstQxgRU01yhqeCGxhIAqqWEIihiGS5jYHs872nPPD/9/3P0HoCRXde2N3+6+ + Oeecw9w7eUYaaZRzQgIFQIBEBokgEYQEEgJJSEgCBYQCiCySyDlL5ChAARDYgLGf8bOx37M/nN6z/bB5 + Nv399t7n7DpV3ffOnRnhv79/U4z6VldXV1dXnXXW2mvv3fj2xsb3NTd9sLX17o72d/b03Dk0dMvE+Gvm + 5l67aeNrt2979ZbN12ze/OrNm69eWblicfHS2ZkXT06cPzR0bn8fnZ+Pa209tLXlgPY2pIIhgND6Oaj5 + oh7PK7pAI0VbCwLzNC5nZikAoW4ZlEzFxQq11hbmp/v6tIFDVD4TbHNEtHdlf/qeUyB0OqiYGvLTLQvC + CBPSKAont2d6bz7nOedfecUrqSpcAEJjhL3d3fTKZtb/rne9y+ggDxIQeWnLpo2kkeFPSSkm2RSWsMEG + fCIISjkqexdBRGOEYCoImuafgZGsP2T3wbQBSCVTc5OGdBf1NImEHp7IFcjPaC6bukBINqGFGFk4GKgt + SV++fz6Uy+AJTzibuOk3vvG1//7ff/LTn37nvvs+dccdLzvkkEHy4ukIYQv9aX3ZurVh27YGWiPxLwuv + HnywtCg69tiG004TAnfuuWQ7lH7xi348nBodXPj1r6UoDLxNRVFJk9C44Auq1csiCr65Wn1vtfqp179+ + 1+SkdHiwWw8j+bOfLSnwCoQ36Ta3VauvUSxEIzXvDLB6InHH3/xml5NC7DnwUYKU1HUjvz5lhOiiLo3W + tmdaT4kZgJAY4Yal0sjwMGeV0GwtEFKjYLC/33wJ/EyaQSs59Zo+AQqacWaV3Gu+OT1NqChILaW6wh1D + My30GI+yQbOh1FxpokIHWFgXOJ0gejJ+ShMBxd6WtsH2zvZS2eRTV1AtrGigSFgR+RTIgSPi5ISNEUQk + fEiUDicnWEjI8Ilbt3JSqDWAuIH1K5VZ1kbEH3zoQ89saSHmBykEaIE3WKkRO76nk1dAeqxcmaw0TjSU + gD22kV67CpDQWY7TtndrDF8Nn8bBB24ngL/alEK6gUiKXl0sC5bONacjq2bIU0F7amS8qz33S/vW/NBs + wKhYS/gKH5d+AJn7J590DKQ2bpOpoBHzslxAW5Nioa3II13YhlF2w9LC2OiIbpBtk5DCEhM6kiatDIfW + iisj3fCwMGH+36I1VNEutYnmMuVNGpU0+bIUiJmplA+tiORwaWPlDvCvufmzra1fbG//UmfnPb29nxwe + vnty8i3z869fWb55x/bXbN16zfLKNYuLr5qduWJinFoQL+nrvaCr85ltrSQIPaqJXNXKrtaWLe1t001N + kj5BdoHVWosLCQ+4YDy9L9C+4JHpBAYYZA201mCBQY10WTISvsj8MsVS3Sut/PpCU3QzNbZIQ6dkJ1rG + TOuoyZKooJEganqcvpptFiKLKdACElK9xYEQswzaIMlO6S35hjfc8eprri7kM1jRGZaF+XnwAzzDAeDv + CkC4eRPOAKpNpdDFS3yhbpxgra0MCHwilTf8jQAhnUCxtPBIR0/TVGkfgR8HPcm3p0Rqwgi9GZZM2jhr + 8mPFDhirA2FIT+Rgjj/+eARe3z/pEwqETwCVKSaQDy4eT2/EwYHy6GiJkmmUmd68GXtIw8AAhSNYpG60 + lI4WeSNb2Hj7duno+6tftf7sZ2IWRahErgSflA6SMkiyxFnK5OBzl1SrV1erN1erRG3fU61+4eGHL3/8 + 4ytA7Oxs6HbU0SH0NALhLdXqR6vVt1WrtxKNVRC9sFrFQYNxBlJ4tJLC7RSsMfso4UksM3/wB9K28IIL + Ki6N1gJhISa6mmu0lhEODAzUAqGVWOvt7CTMmRr0lB8YHVTvqC3pg7GJiahFfXgyNjIy0Fc/isjVddCu + HRTmToGwQoI+gck1I14pQUwREVBEIGshZTsyxVRBTcOKxskYg4FDzDVokhR/MSx8iuYwPHd09PhjjkGa + oDAplhnayq+HEbLNP/3N31y5snJ2YyMlRvGvesskGCEwArDZwvMeNcHKotopC084FwaBHC0c15MF+Wpk + 1y7Oz1rZzPqzBIWGdTLvvdoMsbq7vZMAU913MUVC3sTxJGGALE2+7pFkKxHQqD4qxYqC7BlYnX1EQvsK + f7pS6rBoaJcxZIYVqcHRxlwooGAMEMbYn0YEhQtSFoL6nIqQFlXLvDHBQZqtSI0wtiOLLHpQMLXMsCOi + gxRFW65UTqqUn48W2tL8wc6Oe/t6vzEze9/KyndnZ749NPjV4eFPTU6+e2bmDfPzr52fv2Zm+qrx8VcM + Db28t+eSzo4XtbY+r7kJSxdumtMqlaNBQbpgah7hKBVPVBcNjf2iqQRQt7rYtQuQT9VUrb9V59WMwOUz + /zz+5/pnwRHT0covaUCYhQ/zDE+LkAkQhhghz7XTfTDFiLAtGeO+WSqlhnfZDk0adSB8/OMfDyMsNJr4 + 8Y8fvu7aVxeC+pSRNEY4PztjxC5N0TMg3LZlM5UX8aekYiP2FirV9nV1k0R/8MEHU9mfpIUUCI84/LD3 + EhJ8z3vS1H424PsdfthhuDrTOTT5f1KDTaO5URqVaRPTF6neoIXfLPt+NSA04dRihCilhEi9UrECYROp + IwR0CjXHqUpj2fd8qDKzMm4zMnW5gKnji4ulu7vU02OL/AlA0sFi167S1Vc3/Lf/1vizn5E1Ibooqe4g + E/gUo4N4ZKCDz1JRlGgfMT/UzvdXq5//4z9+zYUX9lOqFGl0IjasJZv+ootEj6Vg229/CxB+vFq9u1p9 + q0qpKKUEC89X3ykOUjILD6NUDeVmUEdhojGPQgrNXHhhDggJdnqM0MOE3/xmEEhrpVELDa4GhFxUaYyQ + TlhmGRVEKzCFEkBIjFAhsLEOEAp5tPk7ozaVDgoZ2T6Y8vNj9+Bj9mpQZgTiWnF7hQx2yeL+GnZqZDFV + UMEQT9UHmYBD2OGsdUM0XlguP54qaPDC/v5TTzzxkksuwZeFTL9+IKRy9l1nnw2a4gmk4vZO9bLyKSAc + 4GfYVoBno4nGF8E/jtAh0IKCwSCaP02cgYKouFen8ZHdmJ8bGlDIHSyIoo5wYpprzBIWI9ULR2So5hsb + mCX8zxleBpYOeM7/EjTNMgKdPnpcMLhfIuYZtuWjg/Gv4ktlctHmZqcZxPVdOfufeszQRSkQWtleqZxV + KV/W2PjW5uZPd3V9beuW75599gPnn//QGWc8uLx8X3//PYOD7x8evnN46LqBgVf0dL+UFiutLRc2YeAS + NfWcSgVn6UmNlSObGg9sqmxqbJxprIzQLF5tMpQbjaiWywhM8yJS60oX8bs2ydKLdA1EDACWpDpEd4wC + myFQiOFpeRTeC+cT9GtroTFG9mpO6iwqn5HqSToEc19aMxpxBBtGhgaxHLsoauVs6omlohmmQIjCSYww + daMYRFEgpjBtxTVq/QhpW2hAmNadkdpsrS3bt22zdt8ufppqyruondbT2XnggQfiJwf23DEAfNImgn5J + ZGuAeemH8tKzn/0sGt2kK6kISjtJPssVUaXyQg1h0mOjQxQxMfFzDWnUIM2AEFXWDwYg5L3nnPMkgJBy + 5PRh9Y9mywiEOcGDw8AmSrfCz31Ols9/Xopu04OJVIqf/AQ5tPLHf9yqNdWklAyxOmwyf/d3G8EnNYvi + 8ETGxCNjdBCFE3r3wf/zf977xS/SOr0LcXXLFlmWlqgpJnfr+Dgl3FJGCBCSKPnuapXf63olhVhJn64G + VAw4R8I7YZ+eR6EtfMU7WhcIf/xjqSxjXYXXUEQdF90449KoMUJIf1qKwYDQbOd1xkyUSypdSnK9qqOr + PTjr6uyvT1MYELkvV9Xj6u2UHU2Oj23duFJkqXHjlCy6ywYgKRhtzGVD0A4eNlYqETukpArTbfRMrC50 + injWtm3Pf/7zUR5oe/Ynf/InaVbsHqnhd9/6VromnUUWRKWC7oo6ypSIDzIgNLZa4KysZyEWaBTQkuUN + y+uioE0y6MH5yOKZ702njRK6U7jNzVRsZd3PlXdh+CXIu/qPynuxU7DzdR65w6TtMmGKqTSak0DzemkA + wghy8qKDWyR2ARBrRNEwanAGoJjWU8wejCDTUxMQdA0r1ikiA83EyDtOmWzNjriysfGdTU2fGxz85imn + fO/66x+8664fXH75Q4cf/t3e3nvb29/X2XFrWxs1cimq8NzGClrMU8il0YJ8QOBRjZWDGytbGxsXGytT + TRoaRBTV9EHCtg6EBnirJUUUCKLmGqIJi0waqF7M9ksSHoyNuZ8zky65bRGWD9u9a3Fh1qJ3wvlywmZA + MoM0wzZ7DnxyJtFvcRyQMig1zySzAVaYk0aNYhaWAhBSYg0l08DmW9/8puc4fTlfLpJXTzn5JD4BcKKA + pwFhWonUGOGO7dtJIL7hhhvuu+++gmra1dEOELIB7yVhwztCrGzY8JjHPBpMhV+m8MnbQdxLLrmYocN3 + hV6KOYhdAatW1sdIoV1CnASSO9HqrTzb2ozQgPDEE0/kYPxbf/Obwgif+pSnII0ChGlaRQRCjUbKI6j9 + /EUyww9+UMJHSgPe++9nqVDM84EHKLFN30Fa73bFajKjlD37H/9jkcovVFOjEIzqonhbwC0kzSv+/M8v + +sIXznn720++4IIx4pHEIIk+2gIWtrfL3YsqS6HRRBo1IIRBvqVaJWRo2RTwS1gmWYnHULkUVw6FZmjw + hGFVOzRRZaarrjT64x+La9QW98sUaq0ZESxgoZtl9gkIGaNLDYxmTS0SKVznQ/yN/G8/5Dt+yHGK71HS + PD6cfdYeQy1TdJpoqfrS/okMfUrAVCpL2nGeZAYS+yi9dvkll4CCzPW+//3vE3j3uPoeUZANfnHPPc8j + ykhShKqjJELMlEtk3g3Tdg2oiDzV2KoTVsc/Z4GrQaB9UxvE63zrUom4Lor2foqkNn2xeyY920igHW11 + CpCyDT/uavHd7FBV2nQxs3D8vpmBmVM9fRJoXn5lAfX8z0L4MKxPPJ/FyF9ik8nF//hcxv0jD9u9smHR + mzFJFFAMKsHvkBdILetInDLjOrs6V4Cw8q7Gxs8ND3/9MY+57/bbvv+xjz14zavvP/LIb3V2fq5Suaux + 8dpKhX5bTxf8qzymUSjgcc3NhzU376TbJXVGmpumGxshgv0oolQ+gwtqaHA9bs+628A/qIqQAmEwpNRj + damxJcJVMxfYxsVFGuOlgcMCmJnbRd2kGRCKLqptKzirqogG8dO3Mekvtz4eVUEatUZFFiMkNAgHYvSn + xlghtY5XTz7pRJIWoGIzU1NACFSyAIS8Cs6RRAEQpokQhpFpzgZirKfhE3rEoUp0kD7baSEb+cQTT7zs + 0kvTAKE5aNgb5UOX5ucAZuOF6WKu0T2ZZYI0ChBSGNNHJICQ8/bUpz4FdEQarQeEIo1Gk3OYz11zjSRR + KH7Q2Ii2t/T889aDVNnuIoFPS2yPUU0mCRAerZE84nnYZNBFr7/5ZghzaWkJrVXuUwwDw8PivjEgtNZn + ACSGVaRRNcuYNAoQslAV4VYNMZo6Suk1PDjHIsCSUIgYiyRrSRSWWV/LCGtdo2sk1BdSCQuMkJyc9TJC + Y1o2gsMWpAnC+h7kj9J5nCjg+jZfdSspXNsu8Es4ZGpyvLbKSX2+EhVUP3hIGPX+B6TTTQUb3q7u7jM3 + b37B4x53zVVXgYJ33303uj/1KagZsc70Cbso//w737movR3fDZhKkgZ+HObyG3p7RpXBeVEYV3FrnxiE + 79XDHaEMz4tzs8Tw62LkXu2zsDFeEhoOiba2SrAQgLPKZzXwlq3IQ52sr0VzR0HHvBQUa6BvVcyzLWMC + oGukifaZ88X4TNlpX0BEeBZCKNP5aLdxBhlGkxgdNPOpASExQjTM8vZKmcDzyxsrb6lUPtnV9ZVDDvn2 + hRd+91Wv+t4znv6dTZu+3NT44XL5tkrlpY2VpzZWTmusHNMoJbZ3Nla2NTcuNzVCOZd7eua6OvuoCKNE + UORQdVWkoT6jZYWUhvyfeddJ1B5jaDDkPzgDC+CXz5qI3K5Zqr1o49+MUBatLpm8mSFcTvPMsT3XQnVj + QUdnkCm4Fhghmg0mTyt7Rg85qzFGoUgeNJBJ56wAoeHZakBojHA1IEytqqQXe1QStHv5ZZeRcZGWN7PP + xSD6issvTwOEnm5ByhOXU2r09RlVBoRaVbyQPhFdo2sC4VP2AITJ1S+eZwdCsulp8kfb2+99LwAhJc0U + CKmyTQahOGUgZyATRA26pkn0UDeyJi4iOvi1r+2+7bYGSpUecURpjFCQtFho6O9vmJ8XILRaF0ceWYIR + 1gAhRfJMHcUy81IVWpFbJUxIn6Z//mdJogAIzS/z859Tg1uAkPqiDz5oOZGSEAkQRmk0Y4RGB2tlUhdF + 7YnnEfb09HDOqVSQxghPOP74VaVRxmioVWAwmmK/zkc6wKVvYQAVAUY8Lnt+MJE88/STDz+M0vyU7ZGu + 2aspdWvAoR0/B95dqfRXKlvGx59+9tnPfdazzj/vPOo1UO6W3kwEA7i+sZABhOtvzGRAeElHB3n6hAmP + LZV2NpS2trcvdXf20o4rXx0t5azp8z2fhWQLNNKjDj9keYlYpOGK+D5qoMggYd+nIOQ+0xS0VpGuy0r3 + 6vh94zzahe+SUMM6HtEUFNPsCF8vSqyWCJevn4lCKZKFCJ86XwIWxuyIrFiMRR85sdqXTkLU6cY+0VZE + lH65ACGtIQbVLEMRGbLmX1epfEBI4dCXDzzga0ce8bXNm77U0/OxSvnNyhef3lg5UenjFuYx9GCSfPnK + MBSwsTKAeEhNUWyoyKG6pJiXaKHBq0IwjHFWOwWGxkYmbyb5DGnSeiiBVvDC1LhdMlbnEEWoiqZ8NW7P + bI3DG9RTKl1Lr2AB0SQKyJ8Ge/LEUDAfI8ztDR1VC2dThlvSJy666KJPf/rTlkd47atfffttdF34CnwO + FcdqT/tDGKG+d2Z6FUbY2rJzT0A4MTbGh5JTD6TZngHCm268kcxC6CAVZNIPfc555115BVpf9iByaWyP + 75twQbFosVKElnZ0UaHLnIENSxLLLAAh4Gp02cwyRUaoMUKk0VpGiDLMxEVzhULjEdM/aoAQRihAeP/9 + Io0ChATkAEK6QOSBcLfm0VMIhrKiEDho3LW//e2r/8//ueIf/uGCX/7yqE9+svcZz2jo7JS7kOAaJtWO + Dnl+3HHSLKIeEJJHgcuGMOGlWp7NgPAEMjQUCDdSYsaAENuOASGu0dWAcO3S2wUUzIBwSTLTOKukmaaM + kAKkAQhXgxOJuikdJLl+Px/8OHjP1gmE5HAcefjBFBPhV7TPhaCsFjJc7eCNFBKQ66IDHAWye3uP2LLl + +NiYiUa+RHuvv/56YuBM92gWyCW+/sZM//2b37yktZUMfcKNlHbDhkMzCjrMEWIa6e7qoSNj5KaCW5oA + uD8nkOIyj3nUSYvzc3vcyf6AFk26yX2u/YjVJjeOygnOBWyri3wG4QblEdDDuiQFophEsZowaoqugZ/V + OwnsMFdKO1cvzVMA7b1WMsYR0XRoykQdsH0r1aJsECHSQ3ZQZxvczxSnIHMZKZQq20T1KpXDGiuk0l/e + WHljpfL+SuUTra2f7uz4VEvzhxQFr9LiajhLsdXQsYSsWyTQgcbG3qZG+J/4QmlM39O1aWVxaJAelOEj + CoKnQF0wbUoyn5VYS5EvLfvp9k59kjKzjBcmdpVM3kwZYeptCaZQseFKJkCEugzYmD0M9vX3dVP+RlYC + BSlNjEBYhMPoNc2ijGLSSYAQbwtjltkmr7vu2gue/zxiY0Aj9dX+4i/+4pECQmsByOdSM5qBkokyLS/M + NAAQAr2MD6Ag/341qVGJpvrRj3wkPQbz3QgQJkmf8oNSKq+vb3lunlMUgLC5mejjKkBovQ/rAaFJo/WA + 8NGnnsosRF2jnuoTLvLICKXhu0qjBoR0OwpteH/yEwFClMk8IzQgRMMk+Q8gpJTMG6rVD1WrNAP59L/+ + 69t+/vOzbruNnlAytnV1lYgR8iArcR1ASJUZ8jHOSIEQ42gEQlIJg1lmT4ywjms0jRHWmmUMCOnKlwKh + oeBajk5hMGTWV2jTu8cReA8b7BVZ4czKGJdohwzRI5zydT9SadeAcKa9bbmtbWtHxxFcfxEOyazkTrMM + IS50NHeEDjTSPdYd/elHPkKLYFzvZ1FPWYFwQbM1Bpsap/DL9XRjl7NsP+6CznbKJu/XGTSmomEq6du3 + mjVp3aen/oYOomujtrO6wl4Uh8K6FDvj9rnJQO1OIuAJENYyv5gdIe9LAS+DyQQXU7OAQV2KdgkcukCq + +ieAqkVw8Goxc9epbnnj8uJxRx0G6kQiaMqoIGJTo5BCjJ1kUNCKBLZH/A+B9OZy+S3l8tvLpbdUyreA + jlLSSF7d1lghCmhGGEqvgn+SKW/kD49ob/fmTUuIH3XtoC5vJrQvS+NLPaI1RpgsFGcxObqG1FpU8mE8 + 7bRXY4FhGzqkYwJncpACoWOnersyR0yeGjodFCxUsMwRR+eIAoQEFyMjvOKKKx544AEDG2DmsEMPoZIL + mQxU/iwkF+4nIzQ2yUyQgZJu3jjJLfjHh8IO8c785V/+JWtS5OOlFBdtYwNCmaKkNVSxjEpaheRouzRq + FQPqMcIsfWL9MUKnkmbM8QezPerLkC+vNpnygw9WWB56qOmhh2jDK4xwTWmUMB6M0ICQ8N7rq9W7Yszv + Y9Xq5/7qry57zWsIRYdIPzf/ySevAYTgKFVm6jLCTBp1RmjSqCUR1kijWT+m9ZTe9hihASGF69YJhJg9 + 10hm28/xdl/eLtdPve53q+0rBUIoO0A43tQ819SIcfQgzsXQ0AkHHMAZ4UHKKs1QiJ9TIeL+++/H97Ue + avi5Cy54iXaTeBwlRSIQksjPJUExsXaqgSgQ8hjopWroJKPKvnztmveAguSJ/Z6AcI9HWKCGe2SfEbQC + DjkjtPX2Z+GhK7P1dbVQQ0pjg/F5EDxrioVqx4n4cERMcNHtoJWRwcENC3Nc9zYPYxtkOspBjIxIbTMD + v0gKDVxFIMUOQWCPCPSWxsqxlcoT6CnRWHlZY+WyxsrFjZXnNFYer0blLU2NCKGgnLlgCAGa/pnCnuHT + au4YtRpqPcNczoNgWwjjpe5QaekQNMl8jnzmW0kJH5kS4vAkVzCwvTyfk869JFS0HLB1yynHHoNswJ8J + FhqqFeEtzxolQdB00YiC4V3I2omgKq8qELaaNEohGAe866+7FmMv5hF8pG9729sKldIMCMmKn5uRPMI6 + ZpnVpVFDQVt4L/Z6bJmWdA8NJW2RnEVYKSn81Dj1RH7a93wjaRrMxrFIjRTcNmbvv6b/aUDIVMI6D9eL + EYYev3WlUXGN1jPLEFy09IkIhDFMUCndcEOJrImPf7z0iU+UPvnJ8qc/Xbnnnsavf735/vtJnGj/6U/p + xItZRqqMmlkGG+dvf0s2/dExRojJkxjhlZpKT68MM79gBOXfL/z0p887/fQMCE86aTUgfJeWmKE2G2kY + z9FUQujmcf/+74f80z+RUx+A0M0yuEYdCK1oqsYI3TWaZVDUzaOojRFaZZm9AkKcz6eecsK2rWSh/xd9 + 7FlmdCAEfwjakUQxVCrNVCqEcw7QgekxlIaZmTnpsMMMDgmfklBIhzPKCXLjMfUzapjqHv78H/7kT26a + nKSENzkYjy2Xj5UYoaTtA4RWOJvYZLCDauUdsNB9Lvt5RhmgLWd2f/bDHSqGppqCBnsEttU+lKMC6WEa + 6R6cHXJngi78W5s7mCFrsYJMwEeTKyNHzHViSjiivh4ZoRPKECNJp8dJFoSmOysR1Kghf05NjJMsARLY + SvLeJifGbD5o8R6P+qSIyI/RSit5TSgkEf4QtYNqsxF8MY3HNzXuoupsU+OYekFxwUiNGLODrrsQaEhd + yIDNuzfEvIjEgencTpLqVKQTbAsuzSQKmORCgE+gINkOGE1jDC+gVBrt41RwimanJtkskTo95mcIF8RP + A1RllnFlKyn2so1wprClbAwKUkciRhB5SVBQGKESJlqHuoETIOQloJHoPsmFaeVP0TBPPpEgWX9Pz+Lc + nAEhaVF+z1oe4c4d9c0yBSCkHP9rX/ta84i+9jWEtcKDat3UZUSStbnyPfd8gYyOnDx74okGcj6hKWCh + TFkECKVsW10gjMRuDWm0ua40mgKhx7ZN/z/llNJJJ1WOP6589NENLCec0HDiiTTjLT3zmaVXvaryyU+2 + AYR/9EfkEVJue/p//s+lv/97ysrs0iqjpPqR8Pd0bTdh2fRYWN8XsRAgpHbPx9/znq3adkKmsOy5njQK + aoKg5NRfpZiK+waiiRMH1+huc41SXEZdo5Y+0b0GECZ96rPS24WUiVrXqBTdjkB4yimnIK37D7eaNEph + rC2bV/r7pBkvE+o9Z8NLsESLd+zP6LzO9+pUNDfg1n0jQMhNjUTZUi4zkoFPOCypcLaMwbdSOZzmcI2N + ZHE9rbv7sVu2GBbyoGL9ddddh+pCKN6ihrVYSK3RLzz72a9oaqJ+N65RGlwcqa7RWS2cxgfxccigDoQS + N6/HZTXatKpeWuBe/h25w+amp0nw2ivQUlk1/DogS1tzG0VkDE3XuR+7ytNH+ifj7OTI6HDPQN1rwPDD + Wax+NdlTygVjs4hCKn0tY6zlgrKNEUc+yMZTl0YV7ay4qGOeaKBMmwGIAkGUyXTWTFWbq3V3JekTqQ+e + 5+FPwTNtIk8VmEERPytLjZXNkhQo/xKFnyAcqLFAb6WkLCFwhTwjXLUcTJre4MQxoXq5etkxmYFAU8iO + F8NLlsAemFk+1NfcksiVBazK4FCpYWJ4yRRO43mGcEDmzOQE+QOYZ+QYMo+MAqFkFmb0sSCTKiMECAMj + BPO84jbkDMJHR1ycn8AhwcIcCAGE7a3YUWZnprmXqUNWm1APEKK1klB/Xz6PMAVCanDzdtINraAa6Ouf + glx07NFHY1vFxUoHqM9+9jNpf1cNKJ5g9bsjEOYYodFEZ4SrSaNCnTXjvg4j/OY3NX3iqbVmGbWbyse6 + q8suez5Rk1gg9FJrprubmpfl8fEyrRgoK3POOQ0vfWnD3Xe3/PznAxQatTzCv/u7zSTUaydeym3Thpd4 + HlE9cuE5FbdXq3A7I4W2fOYHP3gB+Gr3KmaZK6+sNctQXIbmVtaJAky1Kmug7NH/9m8k1G/9678mj1Aa + E1oe4cMP54AwkUat+0RWcXs9dLDWLMOJRfpeHQiNRtkQLg9OI113mL6sBVJ8eXzd/AbrHFLXCXirbaYD + 06p8iJesoyzfgIL9Q309HBbIREkXapvh+CWSR3ckGucepw0CqcFNOuB54+OnHXKIYSHyMUY1hBGmDFjF + uNyRRFI4/MHrXndtczMtLM7j7eXyqaXSoVrCjdKmYC0fVABCLv7aM8OXGB0ZxmRXH8Up0DA2unP7FjIZ + ChtwnifHRzETrf80gjqclvQYdJ64X5zSP912K+bedmET9mfG/HQ7zw50NE2eKIAxWYE8REJpd1RMYyhg + YdZeKaKdbSysjkGapHhmcDYj5l+tiSnVHiLz8+owJnLmFgfL1G5g7hgfXAz/dGUwztgGUkBSY37AIS7Q + 4eamYfwR2GEkI6KRYqHC6rQtkQFz3UCgMr/M+ZkPB+bqkAVV07XQUCk0LdcSrZiBLGrYKaT0mTMlYJjB + IWXZCMMbIwy8zdhbLpiXBg4Dz3Od0za2CCX4t3vnzoO37yCNPqAmEkS2Z1F4DTXTt9tKyT5MYoQwM2+H + CyYBdaedduqLX/xijJ2Fhr0wQnXZtJprFHmzUGKN3e46YCczXYqWpRmBRhZZSKgng4ZcOd7+ghe8gEQ9 + /DIp5yNYCJTiMyeGwuDAnwXFyNtf1OrbJo1yto0yrsYIDc8s0FgXCIHJWiD8v//3N6eccvTwcOPEeOP0 + dHl5RSqIkvMHPj360WXKgZ57bum88yoXXlii/tmllzZQVo3AIf++6lUNl13WcO21DV//evt/+28A4STu + TW3AtOPf//1QbcaLgEmZbIyjtI8wdZTU+JQUfuzv/u7OZz0LkUDu/iOOqGWE0EEii7eqLkpjJiyjICv4 + ehJYSzMm8vdBX8goiYxaWSaUWFtNGl0DCN0pUz99QhkhxWA5seTOWXPK//5nf2aMMBkSGRutWzzSXlB9 + pWjMHg2P+++KXP+wvvaW3EgMhQw3RjjE9arGUdLqe1W6pGWS1Vo7iu6ACJuQQmtk39n5lE2brB8Fj2c+ + 85ncgZZrz+wPEw2BgX/9l3/53pVX3tTefgVNDRsbKY5F+1/6C4plVBsqYbgE2ayVkk8nGF4pUDI2xodn + D1aaWrja1+FbAIT0uyxsYLDwSJ2uR2Q/dY+H2dOWzctoCwlk1sYFwyxSgZBu66IaCoIVH7JGA3LZqw6T + Dod8EEaN8bER8goYc306HMOBAQtr8c/jhY52Hg604SzBQgNFgU/3dsYnQe2k21BvZ8fE8EA/NQmaBB2l + 1lyMBTLGYTbZuHFpYKA3minqN39IaF+wfXoXCI/t1ea5p2G/QPhioroBUsICAy+09VxvU+NjTCI5MKDI + QcvJnHFEkLKvr8cVVEWyAJyCYe1UdZnetHEJMo0xBGeNlRg1OTQin9BBR8EcjuqWBoQA3gaNERK899qH + xgi3bN5EofznPve54FnaMUaAECrZ2jI9OckbcQZy/+ak0baW3bsPomIZXSnSFk7s1nyqI0MDU5Oj9Knn + 7TRjAmgLafukbfT1doGvFNom/7iQX89nWQsLmU0Ua73KlYP+vG3rxg2LsxhnOCFrmmWamVSswgibLUb4 + kY+88VvfOvuBB854+OFHf/e7h959d8cHPlD6zGekQyF9ClnoU2hPfI39CUiQ3vDkJ8tCP6bHPKbh6U+n + +lr5F78w4+is9mCyVELChJZTD4ejuAykELcLkPaOGCOEEX7oP/7jA1dfPWepFBTgzucRfkIZJIkTr9UG + FCTmE3FEF8WGYwFCTyKcjEW3e6zo9sc+JvVFjQ7ef38uRui5g3WTCOs25vUY4QE7d3JiyRewkkBMawIQ + BkWT0dUKsbCQyM5w/p+hdD4CQzG3WloGJaUjVncNVCRu56SQFAQIHHXRjqV5b6ViWPg8+hQ2N9On8NG7 + dxsWIpMiy3AvoaKIc/oP/uDz5557Y1PTVU1N2GRou/qUcvkxpRI9ntBF2SdAh5bMmfNsesMrQiAnnnDU + 5s2IsnsBYMZymGEUyNwjcL72YhfFA17tK7j5xffNPX/EYQcbEEbziwGh/BOXnF8GsKAhnOkPRRqola9j + veygjqYxQpCJjAIGX9yejL9RHQ2BQ6ODHhH0CF/ifwnml3QNIxcOUqxJBmMGhyFSSF/DpqYOPJIERkO2 + g6pe+Cq7u0kXo5iWtQY05he2UTn0hOOPeMmLz5uaJKSIkCtUjNE/2D4lZT5kMkQLTJYj77Anfs6geWaF + zcxE497LNHVBUc3gJ3LBwAgdC5sZmklCI8+tt7dLNs7TNaeP/KwAeWenRMFSMFMuSA/ednJ/DzwAa3Zb + T49pBBnti0SzxYquJVJq2CbKqoKCIIUDoaOdAmEbjdC5N5/85CfD7dKO8waEtCamLQn37wknnEDfvgwI + Fe2OOOwwWlIgmaYNDgUIFX2puj3Q17NNYyX4yann6eFJ28/73//exYVpko8R1hBmU+chr1rPJgdC+9FT + swwh5xOPP2Lz5g0GhKvFCI0OrgaEvGSM8MMfvgZ4wD8CWvzoR7L88IfFJV2vz0s/+1npfe9reNzjiBHK + v/QO5AkLVpo/+qN+gBC/DJU/UUfhaqqOWrlRI4WE98ibROHE/0mlGPPLkCz/8Te+8WCqjHLnLi6Wksoy + uExJt0AUhUe+Sm0yRgcp24YuehS6qNVXswAhQEhvXgqf1gJhjVnGa42WVnONpqTQS6xxHwOExAhpMGlm + qBogBDQYwhnIDQtV4INS7Ud+9l6MuPu8KWMcabwMf7V7MKHX0+qt7ijqJUVBMbbQMmI3WEjb3nKZkqFo + pOc3NlIH8uKOjqcuLx9/9NEEzC+88EJmnSQtfeXNb3737t2vVRS8hOggnefK5ccpHbQ2TPS4cF3UgNAx + RPTlThq87EsmJgNXZ1vHnin5uk8fAENLLCbsq72jLtTh6T/s0IMAmFp6mhI+e257MA7nfybYVscpakjJ + NQoKZozQ0oHV9RkSBoNkmqqjxvMqSHDUnAOE2Fq1xxwEui4axc+iLpoXPzMhVMdxrDBBHU1ZIKJrT2eX + ViHPCmgBBnggzbkH+mW0IHmODXVmZgIk4FXYFYgIbKCY1ng7C2kPwttoa8AYquYXd4QGI4xnOxgcigQH + sCEptEnRS3yemvOQS1qIbM8pXXhjQR0NmBfpGgBfS+kM5LCegn+0qeCCnxgfATUTFhjAT6p4yx7yQBit + pJERtmJ7MdcojNADEyqNtlHGk4Ro3G0kPhHId6gzaXRidGjn1hD1ZyKbsUn0z7aWY485GlZHh/c0P4ru + hmbPSYt9EyLh7XRnS8XPW15389BAHz4daCU5V2kMks1QSg0FtUg5ZRmojRXqlduVwJx4eHgA9ZUPWoMR + BiCsL41KHuHTAhBe95WvNDPcf/3rYalNJKc/Q7ogKlJo9MorS2ecETrUGxbyJ9nrf/RHPX/8x6O//KWo + o9g46ZqrDSioL0NRUEjh0xTGADMML2AhZWKYZxD8Aws/9ba3nTA3J7c+vQnRWmNCPUW68ciAguQgkjUB + p6RaG6VqkFtpUn/4v/zLzr//+02U+ab1BBFKbczbS6HRH/xA+hEijTojdCBUXTRXaHRtm4ydkxQIJ8bH + Ub8f/7jHUR7vmmuusR5M4qHIPC6Wgm7db9sbSm0NlXapKUNLpr2uBrbuoXk/NzTmtOqwnhSK42tJ3VFt + HAgWEiykQCgwRj8K4nykA1I4lLxALDAkCD5vZOTMgw8+76lPvf75z7/ztNNu6O6+uqnpcuWCL6hUziuV + nkjqaKl0mAIqdJAMwl7df0EX3c9vZ8P6fu4kfTt7IyVOWintzYOGgocesosb295kjMqec/LhLKszxUzI + TZMiajhiYIAFkOTbAyjWQckVUwMze4M91VggWQxS189oYrLY5uFRTxeV75I6Ylz5NDzUVzNG6KIoIzKj + p8/6a6f/yRqlBZEc2GfZyEj5QGZxIqSFOmdeAsajfZkLBlCRwi0Qt5jhYEKoQ2CeBQoy4caktRCzhL6g + Uqa+Fc9kyIKCaRhPsSrAlWEhNloouwGhL26xMQwz5OPnsM4VJoo6F7RtHAjzkmkw0fAqjJDFgdBBCyC0 + YtZHH3UUCXbMU/GtJEB4EicHmIHVmahDXry3hiAFgu6Vn/zkJ/B8/uM//mPeZcMbW6RvJSerLVRog1Be + eeWVhc4SL3vpS/mKL3jBhWCklSlO92NAKDVLW5uZ4uw+aMeuA7ehNtssJwgD0oOJ/o6Cl2swQgsT1pVG + e7s6zz/v2TDCD37wNV/+cksqA9blRrF1n4AHHSeou02HesCP3vS2GBCiQ/78511kL1haPUkUeEchhdqD + 4gSFLgAMgZTeEdRII1iI1IlGiokUOPzYXXedQqE1bsm+vtCG6Yc/bPrtb9FC2QYuCArS1BdRFGZJdPDk + 3/1O6KBXGSWVnt4XWmWUAGHnQw9Jh/pUGl0FCIUOrscvkwKhe0R5ouZtuSMFCIuKnUUKgUC6L2ljXhpQ + 0KT3/4sPUeISLDTpF8QCCwnpzWq8kMwHa2H/GKWGGEGfqXAIO8QRc2lT02VNTXTxBQIJJT6/XH52qURo + EBQ8AkFcGzABq9BB84umdNDhgfFqdGgYvvJf8xz6ca6BZwnzk54VCs/C/OCXSFW1cxH3hSoXzGiiU8OE + LJpYGrFQP6kojQbUc8tozJEqYp5DYAjjGZIZWCbSqAuhWZkYx8g0CshKkAbvKIOXS6N1ooNJOmABEVOD + aNA/YwuIyBcr7NzoWqELhJk/mbVQ10akx1jtLAW8iIXysuuiINZQf7+kthfT+wIjXDVKl6Q3RLiKQT74 + pdpoUxRUFtjGesifNH9ykGvLkNIBVV4FWbEsF7AwIq7tGYk2BULcoV7MU4Cwg49rw7ECSNBfIu2gS42x + QOzapKaoqaMkRBUqsRV84P/4j//AuyTbvYd2m+BsCy42w9EXvvCFaSdeMYVqqiIcAqsOttK3vvWt3imQ + Vz/zmU+zq9HhwdFhSP/kY8961MknHk2JokLldAdCixGic2JEcED1BvcGhDwQ8fwM4NwZHxl+7vnnsfJd + 77r+K1/pAAZSIljAwoQ/BSD81rfKL3xhfSD82c86f/YzkijEMkOdl1//evl//a/twJW258U+ikBKlRko + HVgILwTkML/caCHDO+88YmpKbmRrzKuMECDEX4PRFIMMKEhWPmXVEEUJOh5j0cG//dtNyLCIsdhkSJyg + 0ht+0Ycf7njoobYCECICI/z+5CeWPpgVlCmg4HrMMikQwgromeVYqENPgw0qiht0lqL7UtKVl05M/x99 + uEBqBcSNF5pGiokU78ySt7BvaHhUqXQGmqfCIcny+ELpZc+CakqJrPPK5afS17dUelSlfGJ7O4n5y2oW + tawJazRvNhkmFxg78XwatDDETU9MDPUP/GeeQ9gGEuhq2LbPR2IQ5W83W6ajXWoQTVaGNzmZS6CuiHmI + eZQQQlpydFyb5EWyZxCoBV+CM5OESxU8pI6aIK0JpDEKaLZP9bzE4F+EQAsHhvR5bSHUZZWraiAw11Ug + ml9q8yKKHSRMBXXhFHjgxzJiV1sXBlUdcpUAnscCayuzBC+MVHyWQGlqh3GbqLwrR+ny0T6hdDkVNMf/ + CigIfgwPDWBjZgFEEEW1uIy/JSN/Er1TnTaioMChcceEIOqayAgtRviiF73Iu8lHIGxHouAlSmGQVp8y + QgsuinF0RoyjPJ72tKcRFEz79qUcjud3v/e96s2B34fYpAMhCRj4ZVLg1DBkyxmnnw56sWcoY1rdRjrd + S/tVIuPSf2p6apyahZzMgnFGgVBOsgEhGmzaB7gWCEFcugLYYUM6+YjHPfasV77ylbff/oqvfrWvwAgd + CVJEVFIo+HHffaVvfKNE1WwUUWwyBUb40592EqJzUmiRwn/+551RICWqB5kDC+GFaKTEC+F5hAyBw5tv + vXUbze4lwNFIeqK1YQIICSviryH1Ai5IBj0piaisx1FfFK5JG0Kig1pre1Jb8g6ii1Lm5oc/bKcI6gUX + lJwRgoIGhARE19BF7VTUOmUK0ijnM21LwllN+xHyFaTHnDXApY0QyAcQOhauAYTyTsmV3gsnyD6Pwqu9 + kUFLeibUixQqxoesEMNCpbsCXZg8cbhYyNCoIYkQxynbe4y0Wq2AiPSZo4YkvphzFAIfXSpRR4bucYe3 + t2+iX53uAYqJWZTduk2GDxURS2qU6Gkx58t/4iniU/l07QT5CPwu7ERbTmYStO00TyUD2sXUiJTUyZZ8 + f83eEx21RiY1OCQNo7KyuLRt0ybthRswskYLdaUzZAfa35H5Ceo4C5T15TJtBudnpzkhCRYazmnwLxhB + DdUyR6ghH0GvwcE+cCg1xayGiDVewSxfMH3JgTCFvaiO1kmTALowc3IYwfZZp/hLgDc3eQoKqqUziQvm + chUybTOLz6WYJ/iUQppuzxoTMMOWbIA/iVPEv7Z9WEQe1CWAojwHn3LbaKQwGmcMFAMuGiM0IARvnJZd + f/11MEJuLLxIhnMkBf7pn/6pgYQxQnsvy2GxVgalW8AzEh6wf6OL/vrXv06xbdPGZeKRWnwg5C9KKFEf + xx13XFrXho9YWV7i1YN27aJS8aMe9SiKFWMg8L15Ggbx3zDRITacFEM3SYDpAGJ1b3fnxo0r9kEUynHa + WguEHD8mVdsAIARBIaY05bjiigvuvbe3wAhrgbAgjX796wKEQCBAaFjo0ugf/mE7UPTTnw784he0qp/8 + 1a/mACoE0n/+5wM0lYJgIe0J4YVopE9VhgfCvVgJ35W33LIyRtNXvWex3igQNv72t1BAa8MLfAKigoK/ + +93hv/nNLhNF/+qvQnRQsyaEDhId/MEP2h54oOX5zy9//OM512iBEdbVgdfDCMkISBsvOxAKL+T+zwZM + uGFzEEVFGgUOFRTTB74EBhcbB7mCrBLjIw5v698hY9zWTRsn8S2tMu67RmremVBuplTuL1WgaYAZkAY1 + JGp4gMLhMaUSYikEEeTDGnpaqXQyuaLqESWsSFyQjUnPhwsaCnZSS5CxMk3CXP/RPxJb2tC8nj0Baf39 + fWv4ZWwnVlDM8Y6rxIGwIITmVVBzytg+wn+4QiDEhJcEDutkRwgG2jyBV7s7xfokAb98XND/rE2cMC6Y + PPRPLahtQLhpeenwQw5iWuBbJrwwwGGwg7ovNFpgdOwmJyI6PzNrTKyOlppiiqb5IhCGbMKQ9hfqX+vO + Q+fbpEFEE2qjqLICVC1zs1Ojo0NJ4kRa9tpy2KGVws8D8uVTFPJaqGxJDC+hdxkEpgG8BAsTXIwA6a+6 + IybFOcNLB0I+EZpExDK/jfHCDHH5kwMD6lg2aKN5WsfdddddpPMyYAGE8E7FwoBzgISXj5H2CwqBBocM + UEcdeaQhDWImSfS0c6IYDTkPWGysTNpzn/sc/SzZXoHQUhhb7V08yNMgmxCfPfCJPmlZFjt37rBXObbb + brvN45TPOf88s9tYQr0sej3Yc5sJKRBKO53F+ektWzbZfuAoXi7uJK1Nw+KH8fjHP560ZmsMQK0PXuJ7 + nXvuueeff+7HP95Du/Z6Hplcc1oXSIkROhA+4QmZX+bMM3GNNvzBH7Q9/DCt6mnJZALpFK4ZUilIeIfA + 0S9JsRCNlMwHuB3Yhn2GGjGwwxffcsuiAqE8qLttQPhv/3aWbnO2NpqAUMIFD6cl/f/+39tJVcQj8+d/ + ThI9ZlGS6MUsSotgooM/+EErBcGRRu+9t+EP/7DhgQckfSIfI6wfF6ztx+tnJo0RIpinVRocCElA3rxp + A8HdMIriFKUWS6CDDoSJNMrIsrgwNz6OQUQepketZwj+/W3DKCp3GN2xVn+kWAhitZWbRtp7hts6kC8B + M48aGhzCDg9SRKTpLuBHOPDQcnl3Y+OOUgmPKO4YeKSjYHu5PDs2NjE8BKPOqhH8/r5tvT0r/1uXBWZ+ + buYp5z5ubg7or/OwmQS/KeZ3NLPCxIL7mUkPI5eiXYS7yDmdAzoKhqlSSwtAaMUBUp6Y54VhOhkgNFYT + BQ+pR0AuK0SSf3nOnI2fm9C2I1+M/wV11PEvBAVJUpSRpSUyv6B5CuELXpiQTptFAT1TIqbSOwVUzKpV + RGvb54buSHkimNQFjel9ZiZERiP9MQyasQQMNt2RoUGua3DOvDmalpelTBiSWTaFiYq6JlNBHRdTSZMJ + AQ4OdTKnkbzw3FmgEsosnqfUzUih8EJle7lXDeHAiQTqov4JcezqJHgmMbjcBjgsBcITOBQgBOpYDAhP + PfVUaBnd4yh7fe21r7aX2M0ODROiXt56660GRac+6mTDyLC0CRY6LyTd4uUvfzkmcBwulIPBBXPZpZds + XFmwuKCeZHJIAo76ux772MdiWyVxEK8pn2JIuXlTADCG1Isvvpj2NSaQetVvI+5m3OXrqOidieESEsbU + 09VplJcHtY7hrHRYZCfWj9CS7u1VqCf+WDYA8m+++WZeItMR0+zZZ5/1nvf0f+c76wRCERUBQkykL3iB + SKMGhCyWSgEQ/vjHLeQtYFcBlqw9IUnuBAuhbmAhtWYoh6Z118iyB9WwzwCHZASieT7z5ptnVBqVSfCh + hzbccANAWPntb61CG0SQHIyjoZXGBUFBDQ3OaMoEHhkxi9INigrgiKIPPtjy/e83P//5HG3DX/0VXlYQ + WnTRhx/2GOGqQFg7J6h1jXJKn/KUp6TRX5NGsWTPzkxxX8RhUY2j5Q4xy5g0Sg+mtPsE4x53bIEW/OcO + +/v+aQ6HHc2tQ509nU3NoAeUjkGalDdTSmfVU0r8j3RDyB8L0EjFrO1tbfS4B0Cky4QaUHkjb28tV3oZ + XaisANdslBnfGjMDSQ2U+n9r5USIOF2m3c1eNKww7XE952VifOzAndvWLqnO3oyTFXbIVxsbpWRKaCqZ + RASNCGb/+hvTlREFPY8ww8WUKPJFREctl8Bh+uR2lUvdunQx3SmX0Dd5SYEwC/ulfNB0UfTR/u7e7g4q + ySkLLfplxEQTeWEx+GdOUddOa4XQNBxYzx1TzJGvoQVZ2ReOE7Z3wnGHa4p9SKIA8mI4zVQ7GalHBwYZ + tT1Z0EN9Yj3tJBnRMTJIoBEmC75N2ZV4TzMUDNjmgicvsc/R0UGaKkXzp4IcBcyErofjKQCebSBLAnUQ + QQ0Mhpfsib+RwyCHnUpAKTpGIGwd6O/lYpuamlzesHTgATuPOvIIlElDQf6lIDLFE2ampzeuLO8+eNej + T3vUhg0LBoT2BfVI5IDn52exy5900kmorCDKK15x+XOf85ytmzceediuA7ZvRqVEkrXIqNFBvh89KIgU + skxNTgBX27ZtOfDAA7Zs2mSMkBGTm4hX+Wd+bhZid/BBu0jMGBsZsRwMD/eaKziGfpNq6eIiboTujwwP + s1AKB5mUiifHHHXU5Nh4r0xShFZS5WB4eGh8bGx+bo4Ntm3dysEAkIODg5OTEyw33dhaCIn5n7XKIRop + 9cnAwosvDkDopNAY4Y9/3IwyaQ3rVSAVBylOFrBQeeGWf/qnnf/2bwerj/ToCIfUC0Usffz1148ODGjP + 7nKZnHplhAAhLhuw8BjyEX/7291AKXn6tB6knCnGVHOKwj7NI/OjH4lHBi74wAPN3/9+E0BIXPDv/16w + 8M//vOFP/qThT/+04Re/gOlm9dXWk0FYFwjBQuql/OpXvzJRHSDE6UBdoXwRNTXLMMBTmqwMb2pv7+xp + pfLwaqrjegbf/1LbMFpjJXjMKSdsWVnyqCEZ96Aa2AYcQvWAOhAR8RM3DbjIv+DfZLkM+wcCYZDujknT + 59mzlt6gld2qQjHDb1tjK/HYtc8JQNhcCY2c/oucPYOxQiJN7VVRw/MC1QvvFrAMgMhZAm2yWKDiH5xP + 8a/UUyoNlUvj5RJmtLlyabpcGiuXBhQRIxYKwjkcqgqakUL2TGI76mJqFjX1wh+GYQXAU2Yg5pR6gcBA + BxGWcUSw5Roe0VApWxvLCXBq7TEbEw0Xueu0n3Cz1nMh/hdcMKzBVyKMXIt2wgslB4Jy0r09Si/SXEBh + ZoN9fcMDA1pPMqt5XZOZkCUnFIhgKk662gk40RNqYmKEPrLGEfnX6s4YEEZqmPK/BO00HMghDQ/39/cX + cc7wkn2CtNs2rZBx6B9huzXaB6Ql/8oa00Xjq7kNSJkAtlXyBeNFzZa3w327xAtqVI839nR28C+b4HLF + 1QIKy2674Kkx60MTMGanJ/p6uw323IlqZWuifKpPkp4V/qcqU2kOaFoYPcyQsJJSClAwOybgW9E1phkz + 4+NTo2OAs74k8Gwv2ZOQpyhtnmTNc59Lf8Gia7SuX0bTDMQv873vla66qgQLfOITAym055/+NOn2tOpt + /+EPO4Alw0KASnmhaaQb/u7vNuEjRSYF1Qj1qZuUnoUn/va3J734xd0MewSL+U5LSyV1jZbVcXo0XhuI + IB5Rwo0WF4QLGgpikEGJpcT2D38oKRMPPCCi6AMPNH3ve43Pe17pa19r+Id/aPh//p+Gv/7rhv/xPwQU + f/pTvqykTNTmDtqauoyQPEvOkhTd3hC6TwCEiOqI3r/5zW8MCDFmD/XSKrJWUwwOk+bWtr6BvnWqbv9F + Ruw9HwaDy8nHH7OyOG+Zk4CZm2goQGM+GmKHYB6gaAvPwUiDQAKmACfnjHcFmyijuwmCNt6v/hBGuL4i + BUXM2fPXWlXqTPkZ43CBsCYiZzj49U96/PtG5idsD3ASPUiKrIbciYIiysniGMaGaEPbJ+yTcrWUhC2V + Osul3nJpGPArlxZKpS3l0oHl0m5E6XJpZ6m0XC7P0Pc4w8Jii6UiL1QM9LyImidGCnM6JyIpw6YIkiQm + xrLaoJ3l/HG3qAdQcqUBJ+0GbKKol4+RBEErGZrW9oxA6PmCkgVv/hHQy/bj8T9lJ5b5YIJnK9kTmDNH + h4es219MirBEQHYikJCDN40wQWvAUFvvgmfhT0c+eRJcMAJyfLs+avUCwCmBw+WhjDCqoDnzi61XkMvQ + EYwxRmgLuzVOaX/C+SZGR1iTMkLbiQNe+oTjsUNKYdLxEm43MT5KPfpwNrT+wJalDds2rsA7M8k0aqeK + rB2zMzCrgMQW7ARQ4eh5IAxmVCW7MfXeAoqGhbE+qkisUfSOKZ6eCWqphGWmZ8942hOe9fQngYXmIHWE + s+4Z0otDcw0LKJj+aUB45hmVWrOMgUE9Rihc6v77S298Y8nMMjBCqqw997kNV10l2+PzBIoAJGDJsJAM + d3ghtbCJF1L8hajer3+9QmlQgnzQO3COLIhq9Yh/+IdDnvjEps6O0Hh1ZKR0/fVURCv/y79s04jgDtgk + RJDcRMglsArRVBQcgAuCguixfOiDD7Z9//siit5/f+P3v9943nml226T0OCf/ZkA4f/+3w1/8zcw2jrf + qxYXHQ6BQGeEn/hEw8J8BoSI6jfddJMlrgCEWm+/TlHodORc/6i4F0M1N1tvT48VBS0M0/85oqvZKAzu + YWduohnq7JjjvmltMUT0hT+hjOjHQKAZRAtccC++/N5vKoNdG7HI/XUksQdGKsbG1Q6hFscLP3+Cmjng + Zz33ubo9JWmPSTh/OhDqFMGFUK0j09g42Nsr4zT8jzxc8K8k+DdfKm0F/EqlY8vlU8riVDqjXDqtUjmu + qeng5qbNjY1g4SAhTBo/SdUZ0Ugd4Qz2Co9I+1JEDAbR1CDj/I/xS2iaMkKXQPmT8vO07LAykpp0oeJ1 + VkOrApOghhZ4aYTP4MoooCWYp1aXuIFnuAexVLeRrhHatCHkPzC8IhKyyDgbgdBzBFP/pw3lhPeogjY9 + OQFt9Vedh7HnhIHlAoHO88zPCaQ5aLEGxJqcRAGTnHpfXAgNuqiyvYCUCYjaSlNKfUvABnmwgILpn0Hh + BLqSNyYbqBIbPxGUnZoaw1LkqI8wvjA5feDWrRNjo5YdIVaaIN7K1AG/6/TUGD9c9PtEY62E9wIPzs5V + 0mEqlZHz5z9X6C4mvYSsGCZMXDDs8LBDd532qBMWF2ZBYr+EEk9NuPByF0z0YWno0do8VXbsqPhYv0fL + jJHC73639OlPl84/v+Hccxue85yGyy9vuOMOYUuE4qBiQBFYiEDqWAgvJKGCPD84nMmkCJsGh+icIOJ/ + /MeuH/1o+fDD5TbUIEQJVxwNKH74w9Lf/z01S7cCgbBJiCBVTAFUdcc4F8Qg06mhQXGKgoJwQVDwW9+q + XHddCdijB+HPfiZAiED63e8Kqq1WXHQ1RmhldzDLUDpnZkYkKOLjmzduWNmwwAwmzSnk+d4PzPv9DmaJ + 1MTitk5QsIHWLVuWV7jm93v3e7cDDxwyhp112omXvug5s+MjVn48XRz/HAL/c6wxXFsyCncSI8txTf7s + 6+7t7xE35vq/MBtrumjuYRDivK0wOzGmm/xrEBi2clKosGHZEbJ5treIrnElllQxv5DbgRaN2jxXKm0s + l7aXhPwdWymfVi4/oVx6GrULKpXntjQ/q739qf39Z42MHNvff2Bb24bGRvTSHoBQlFVuvwwIaxCxxOx7 + ZWWREVz8NcVH3drZGUF0FDS6JqXpOjoMBTV73VvtmN5VYQjeuLJIbVIb2nxc4wkFPHl7Tdck72ekkmZS + KTSBSUa9YISxBHlzx+RRMM1zyPwvqTXU2BgLdAPLYsG9uRoUpUAoRA3nJ0GFQqZEPv4XYUl4oYKf8qcE + GlO8ZLYkqm+gkiEMWfdg2BttcBzz1sBON/gYxxX0lTwmS/nIsC3dQ13SnK9FkKuGmi9okP0cYX1S5dwD + uvbTczVaDgx4wSHB8vlGXBjTk+Ow79RXVfe5XVdsz2Ky/NCQdK9dBynM5EQLE956a8PLX95w000N1B2l + GjX5eX/6p+X77gMIIWSChYTrDAstoQLvjMqkUMNJ8IzkP/pFAG8g4r/+69Z3vnNofq7U0SKSCTdZR0fp + kksQWst//ddz9FcCO3mLEkHk0FHtOJhxQUAXFLz/fkRRULDpu99tvO8+aC5LicqoDz0kywMPiMdnbRSs + m0Hoxedglu98Z8PwkAAht7HMfrhPNXPKl3V6LOrLbnWHYB8Z1x6dC5txccxMT+BH5U5f/7D+SG1pWMjF + tXXT8u4Dt1E/wyVTI3+mgrIYfbTCA+vBH64M7kAjH/tD6WpPNXsbGxpZf55+gcylRJygl2YXSCEVO0gl + dlbdLIO9dA/G9tKdpNDoqAleoD719oopWVRTWUQIpVQ9PRU3a4GeU8rl08vlx5bLTyqXnl4qPbex8qKW + lku6Oi/tH3jZ+PhFs7PPXV4+Z3n5pImJQ3t6tra0zjRWCMO2Ch2Uh2Oh/mW4GM42OhPzbvtqtjL+62XV + sjqiBZk0HYwYd8AAoEVRsBFggxipqpklSJhQ6fXSDAsjOxQMS00TXgUmXxetNgU+dC+yzVLykWqhPqyn + GX4+7gs2xBSFiYnRrVtWGEl99M+4nRIvYXgJk+NViqMuLc6ayioFzAYkVOmczxhhCm/23DlctmVkb76x + KKUSsmt1OJSNVVnNHDdK4HSHsrjummq2eVTLitcYmXO2Z5vVRjejdBxhUkOMfFD6XqlxKpJr1nMxTkdC + pbpg1g31fSQwLD+36tseMoSgo9zaZaOoRovmyuTE+O5dBzA7yahhTeeKIEIoEDKrGxsbtu2xQlM4dLUM + itVyCgHCr32t9OEP03FCkhN++cuGv/xLqUH6ne80AkUJFkq8EO8MiQ1omCiZwCEVQaF0sEMMpVqJbf6X + v5x92tPQS8oEtvk1UWlwDZKq+PDD5b/4i0nCgWAnb+GN2n1egoLqEZW4oKGgckHighIa/O53KwDhd74D + Kpe/+U2WAIFWSq1uNbU1ooOcAcNCvibNp1pbRRpFrYc8cDs6BGbD3D7ACb/Hjh2bUTYK7GGgr29ilMr6 + +0Izhazst/q3nu8iNf7rNct1amg4ZwvfBN8CERPxYnjH3fV8jG7DEGgsYd/OyRqfY70p9mEiY0N2ume9 + 00Qi9/PPEM6gScJoAnU52LNpQAELC0yRPwGhxYUZMyUbEPIxcFssMLtKpceXyy8qly8rlV5RKl3e2HhZ + S/OlnR0vH+i/YnLiVfPzV68sX7Fp86WbN1+4adNTlxZPHR4+pqf34K6uWebFyggjEJoaKgfPpJuxhvHO + TaFJmDBrouRlYhT80khhLjsiwcJcQ3mLddVO2xOZy1HQnmSjobMEd8dEFdS5RdZEwqlhZgEt5jzkFDyH + N4W0rMiLQwUVTwj+1UWRFLpS7kXA7ICdm4kOshO+tXb4yFTTAgQab2OzoSGiXV31XhV11Dazo0KfHBkZ + TGOHqeCpKGhAqLKqpglFEhmikkWCGHI8gn6bhkjrUslIImW6YM/5ICPNfj7x9RDR1DUyHYm+pPA8rgm/ + oCuixvKjNuBquXWdDLYpQNeqk6cqgl1aXnIvAqdcnMiizMmYuZqYf/TRFUwlIERBI/XIWR4OQ9MGsJCF + QjNUtX74YfTS8re/DQKBQzksBKUeekiwkEge6KUphkPgGewQsZRQ369/Pf32t/cuLNgE1PzZ8iD6CJ/7 + 0z8lvkg4cJRAI+5QTZMgKEhzCcrHZO4YVUQdBYFAAcJvf5sFjM88olZZbbU8+tUSJ0wXpRHVZqz/WieZ + VK7ZqWlO5bqH8Hob8iX5VfjC/BLzc1KtI92KM7FxcWnL8kbG1f36mN/nm7mYN29YxqZcN++QMwWNYAJo + hE+CiKUS9zT+mnXWhuEtDK04LR4Rt8sjfib4BY2dpGSu9lPYBHs6ES/nduYEsj9N5LQzlEmg6R9hm1AF + 21CQffZx0zc2jpUaiAKeWypdXam8o1T6SGvL50aH3z8yfMfIyA0zM6/esOGaTZuu2bjx6g0bXjk7e8nY + 2PP6+8/t7DyhufmgxsYVuu9KjLDUjCgaGKHxQrkNcTZCARnFIv4ZCwxQp/hniqivEW3E8Ma7Jq0iUgVH + jL+aRGvEIBMHslxzXYvlmDKWskD/k8FX1EGxOhZFNubXJBdyKcIAiH75uJzzxWS5fTrux6E8KoEoom3L + y/ObNi1KmkBSEWYVBTKLujnasQeWFJwiBSwQwexPPDIkJhvPq8XCNExo4ArDBhr1kIo4J14Y9cjEdwV4 + Czga+GIasxRjS0KR0yBoeF5XYpWzmhXTCWfST3UHXWCyegW5VE4TUR0ajbjzpThmp/smBsgVIv7hNL9e + Lg8zWyVaenYJxYstC1drfFquapt1DQ+333STpNzVeiZXyy6IDtLgI4V4UYD0O98BfoSNGRZ+73topM1o + pGBhDBkChz0Kh/1AGobPX/1q5Otf75fooEyh00fDySdLjPAXv4BEDkMlSUyEU2pniUAE3SNqKMiHmigK + BCoKCgTGZvSGhVl90drvVYuCRgRZDwrS0ZCAqCESYSFGoXVyEr6SzTaiEpYoYNxLFNDjSlptgCacz9Sx + rmT6iI/p+7ZD5nNjwyP9fX11gZDLcdPGDWRWpjBmjKP29KnglfP7yLluKLUw9FWK6/ftaH9P7+IWAuT4 + jWvh0NFOvUQpC9QrKR8szKNg2CB3T8QdsJJheqCne6BSQRE9u1wGBT/Q1vbV8YkHNiz9eHH+a+PjH56a + etP8/GsW5q+cmLh8cPClXV0vbm15TmPl3DLdskqHlMsrmlCBLtrGQKAqaPxpsjqiMrQIAVfAS3yheTiM + 7BCps6lRp9hyNlINKpU960Kj17b2+bunRjgJ4H6BGwEMAQuTroE6YrYM9wzMDU2N9g0J4cq694mfZX5m + emlOQH1ujny20Vr8i2kMIbE9Sn8M6JlTFP63m27xOzYX4oIpKUw5VsStgGoBBWvEz7Xl0Dz4BT7HARgX + jCJnzupS+Nygr0IuyVTp40tYakQOVvUYFAITh05QYiMWomAj7Vr+iaNjXUJciBRaMTmbfNROQRz8Uqbu + sCc0Vxt/2IzT0wpjRb3MPJxMngwpswq0NrUqLNbby41dPOcgl5cb3/EOGfHXKLdWkEkjrlgBa0MdQSDV + JAULDQ7BQgsZklZhcAiZQ9UEEf/0T/u+8Y2eU0+lwXhWCt9v/F27Sj/+cemnPwU4pWSMWkO7cIeyE6KP + ZM2bNcZRkA+NKChUNQ+BgvGr0cE1iCCKMaHBL3yh4ZxzEEVlGEIzgp/UOiRWG2MZ6sxXEOFMBUHTzVir + FadyyifrhwYGxkaG/39jvHkksAL0giTYD6km9WJCCdckIkf6UZxQRCKuxdrPlxPF3tYVQ3wkjn6VfTho + ycHkDTWwAziu6wN7nLgU7Dh2ooznFSijf2gtUwRYmR2MlRsOL5deUCm/tVL54szM9y644KFLLvnBYYfR + /Pszfb1v6e29pqvzopaW5zdWnlUunVMuUwb9eMmgKG8ol8fLZfylbUIHBeRMES1kChoXTB2hMTRYUEGD + L0ZHE+n8kI4vFsJZhRqG4UnInIRWxRJiEBgRMVQSYSckCB51xO6R4UH25i7QlA6O9g4ujcxO9I9ITmGo + FCP0gsEUUyXEQgdiz44Ihap1S4bprBxMyoFStmd2jDRFIdUVDc8c1QrwBmJh7iDHxY0qtQzP1yi8meyZ + IZa/kamAYFm2Qdgsc3JqFLB2/5LIIQmhkv/npDDbzFAwj9P+9aXy9fQ4UrkyzmJef+E8eJwymXDUB8Iw + X8naSwVGmAqk+jxYghPzZ7HcmhNBF0tTXphefnGWFq6xdNLG802bynfeKYCBtTKlhqsIpIIrGn6zwFvA + QgNCxULIGVgocTsPGT7wAAAmcPiHf9j5i190ffzj7SefXOqg4EX02KVPlpfF6vKTn4jdhsJpZg21HAlN + FgwQ6O4Y/VxTRJ0L+rGlocFiEmFdHsycgKDgPfc00CJ42zbKv4TxkRG+tbGV23qfRmYTwCoNOlTUj/zx + iy/PLiCKohD8Hsf1vd+1il3rEmlBNRLY15nht/aBAADqfscbtr/ZDnv/jcM7ujo6x0dH+ckMpUCC2l2h + EtRZST6fmrMTpphWU3P8C08MCwsO0giBxSRCbhmyK7CJHlUqXVwpv6tU+tLmzd99y1seuPvuB08//dud + nZ+qVG5rrLwE1bQsbUBOLJeP0FTCjeXyXLk8rFVm8Mjg5wEEFQjTnhKFlMFcsrx7ZGyKZyFbRT6rIROE + Jl9TgMDU5xLQLmqh6JZ0W1WPTDbTd38EwyuMhKE5ixsJS8hGSSkh3SnZcYZtarcJ8GYiG8G5CIc5d6jS + lFwYrC7RcZqY0L68vSWPhQUoIoBnKJKilD33NU7yeEJ1jvhqgEN5NW4s+1GNkemDhf1quaPtOf9xIaxY + SyVNvw0ssAbRyeWHEVrKRJHCJmZXTjJgefhhu6hWo0UM/Kx6jDBXarwWKU1zjupozMGICTCRFKaZ9VnM + OAsVh94jaTJ+RhDlqksUC5+0+ZPp6fL555dIEkAmRQw0B01qJKmrlHoZUueFSg0zmdSp4YMPNv/4x60/ + +UnrV77S+spXNm7ZUsIU4zBoKOhYSE49UPTwwwKc4F9kgZIvr0RQINa0UCWCrogKENqRpAe2WlzQUNDg + 3L41xWgsd57mwJs2BSKYDWUhurMej+PqQ+8aw7pUS8H+3YgZcP8+Y58H/npv1IhRD7GK9QCSMEIdFR+R + Q2AGTwzykcoDkYJhqze/rcNHS+WJkdGZiQnetbdfhzMwOTnmHhknfNbbyPaWcEG5+mOQPIkWZtpoMX2Q + S4R8wUNKpeeVSnc2NHxudPRbz3nOfRdd9J0dO+6tVN74qaQpAAD/9ElEQVSJZaZcfiL4VyrtLJdWFP/Q + QrWgTLmdfracCk0fDJJoPl8+HxcM8GaYp+EZGWIcCFXVDuVjCnJTKpBGqudNIYL5xZFSbI/tKJ8hV6xm + +m/pFkIOUpuMoF2xX7ylSRTrf8KlDAhTu2NEzZwo6vQu0wDThL+6eFCM4WVxvghFlvyXgVaqbbrUaahm + pA01Nad/BtQML9k2cVHMi8cQPjEyv3S97lNQU/LrQ+jRDzU75gK1VRaYGFzNdMPHRauOUUlOJrOZleUF + q79aiJ5GaTRtzZH+RqEEqwGhY2QSMgzG0cQ+GgvsxVpC6TTL5VONLqfSqNi1CqKF8MKs+C3BjsrOnWUc + m+95T8OXviRiKdogHBFsWKVvn/BCgxx/Yhoppk0MnFhJH3yw8Uc/aqSC9ne+0/yRjzS9/OWV3bsb+vvD + HW5AmOVdxRLB5NSjcP7sZ60U8gY7f/KTFgqZUsLt4YebfvQjFtkhyw9+UHnooQqp9w89VH7wwZIv5EuA + o7ZYD6bCYmW4WQn48TXBQvjfBz4gfRBpprG0RO+d4sj3Xwma9nZUXvf2/BjU0RgZGUqFSlbK3Jt5yzrO + AdtQcWl0mKomjwCWEz2anpysa0xd93fKNqQa49QUqLZekOa7aOmy4hcppDekR+Ib84QBt/BZXZ2dywsL + VjXbKGACh6FPrycOKk7VfWgePbmDZA3iF8UpUy6/p7Hx88PDX5wY/0xrKyh4Vbn0hHL54LLUVBsrl/up + L1qmvigG0cACFeryKJh4RyPtc87nRUQlLUTjRFlPeemFK2HztNComdqzMIy7GHRlrm6Wi1raZydNh8+e + R3eMjK0MuC6NJk9Sg0ygHTURqWD6rxmjc9BYYEVpPMxcl84Ia8J7xeSHFN4EexSEnBSGEi0KSy6EJsBW + A4RWycX2IL4bcgd9mwBviLcH7doGJ7NsfSeRqdxqBzA82C/FaHI2nFDORr9gHhRz84A6OR6pOloLgana + XC+D3sKHObJofmzTRZFzRweHGAocAp38paBYAMjEZZoLEAoExuiglEGR/4d6DgqHmbxBVcH5+fJxx5Uu + vFCS5T/0IYmT4Sw1XDRESQHG8MZAiKQ9fVL+/veFF37xi7SJL7/pTeWLLy4/6lHljRsrfX0hHqFiTK7M + vd/zbDEyUvnEJ0q331553esqt9zCv408Ybn55rIvN91Uxubjy403luLScOONYbnhhhL1u2sXAO/aaxuu + vrrhooukOM6jHtVw4IENs7MNHB72230YY2vesjoKGPjv7WfY2dnbd61ze4YgM7ww8i1vmKevwj5TOg6R + dGmWR+RoTSJY57ewzYjiYrEBRfxdhJ9wcLMfawLu1hUZ0zva6wqb6//E2qMrHLBRPWsfyLAzPDhgpzrS + wfAFE8RTDbZc4Uexb+/Q6LKJxPPQNksl2mVBCp/eWLm2qektpdLbGhpeXypdVi4/vlQ+oFSaoBmTBQKl + vnbK/2I4kJXiXFanqEYIPSjoOfXpGhM8AwOM02rGDtSC+flpTMIqk9ojCxwaL1TAK4haXjTLuwrkgNCL + bKXuCUbVAhA6hzDnRSQTmdrpYmlqkynwlTzg5cqsoKl6YMxhMoUKf57qkFTgXFqYRQ51vGQn1nQwQcRE + 9gyhQdMzU7YXeGQeIx0FXe2UXWEtOfqo3aecfPTgILVMFQjj3gw1I3a2ETdFwKzrR41qbR2CWAxkxvoy + aTW41U5suj411LjmnCqlaZSXjIvp8QnKMNiWqR6wmoU4lRN4C7+gSu6hYoNP0fzKzE3atEhYKpmCiEzs + l5fLGDtPPVX65dJ3gpov4ArVy97whoY3vrGByOKb3tTwlrfwJ1n2AkvXXEN7itIzniFtBQ85pITISXe7 + zk7puGuRiPjw56aIZrNfNujoaJ6aaqJ+YlyAKJ7bv/Kkt5dFatD09DQMDHCczWAYz22lLrKNrgmLver/ + Mi1ngfmh4nkMiobIC7OzjJw+Zd/bcVgCgeXGhgq96SEe9cbwgYH+dbpOfTjWM4IZr0hl1n9wDGdcCHW1 + TU49ueT9PX0yOmsX+FolUIKbYlr5vTyMeK1Hd13j4xU8wtTKHE08bNSeHB3r6syladp+mHLiAlj/OVzP + l6+Hiw1cT7g16hLHiIjBL5MSQL5CREEmKOHnsw3se0IKmW5MNJQObWp6Qlvr+ZSPKZfPFUdMaZMEAoFA + ToREAZNyabkKMlpjJWQK2lYMQBgqVPk0m0x46Lgg5SRqNSW2nJudPOLwg/CzOC9c1R2jveXy+mcBDv1V + K7Ll9dVyrXFrSGEuEc3HWR9kQzpESIoIzLJQ8KUeFpKT0A50JRG4+nyoNiA3NjJEE2N7r5EwQEjlWfN8 + FoTNvMipumjESwEzS7i0d+lLUkom2Sa8nZ3jrcUbmldNw6vp9kHbtJz9eIS18cta042tWSXKmBZNzdVK + zZPCnGpqIi0HLBmQmZspBAiFLMbS5JxMNrPpUSSFmRJQBMhYsJu3WAWZ5Jp091aIbbuAkWr7NeHDoHm0 + tZWBxt7e8uBgaWhIFnjb1GTbxHjL6Gh5cKjE+oEBAar2dm6ospbWyB7pzRgR0W7qFALDbW7+Nb/r7d73 + R0zEsulyCamJ7HPdPqRmrT1gRpCTRt9q6TQEkAfFZo84bDedQexPcvwI9MAi1jMG6k609RINeOnE29jW + gPPfi3C5FUJYyF6yHGMVhXdJh5eRoVpbZt1jZbzjy9QFYE6cVAdIKFTtHqhluLcVyNZ3ymQrDgBPyn7W + weGrQftSIsiZQeOl7R/fjlPX1tzS19XL3bH+A9vbLVf5VcOML9lbxgINCNNHhMbgnbGX+GrKZXNaKX8A + +DRUomQombhUViMcSIm18VK5hyyfWC9G6GNQQcORONsTE7ncA1mZGAYCbYRlIcCQOJiAouufhSmztBrg + XakHrxYL3RFaQLhk/u4RxKzUpNPBfLgop4UmvhhjhLkyYKS1JdVhMmtMQedMQ4OrAUDt+ho3Si4KqDXh + DAsFCA29aoAwhT0HLXGHMlEz9MIuOz46FCmdoGBXV/YujybyFkTRBGsDBqefHrMvEpE2ktHUuVN4HvAv + Q8G6Jp20PmrmJPLpCBeACacG5zzhYBYWZsbHhvmTc2WBRte008xCXW9df7XnRlZLz7Pv7YlWl821rQh9 + fQsXpOFcAfnWBEK5IyAJzGu1moqlFVXwD02NjG1dWBkdGDIDtt1QHKLNKYPiElig3YMpCwwyjA3vBURM + IVCfF3xzGeDxktnV4mASBhYZYFVhCtPqmkGNkwzgETZyqYxd8TXR0YwRsUM8zyiFlgxd+6iBs0pDqV0a + EEr3QYBQl0pLQ7lJFjgiC08ekQefTbfMmenJQmWT1XZu53f9H23GDdve1E4uwvW/fV1bSnkUaKb8clp7 + eS8Or3b/wpBE7ReR30y9rGEKzY9n+NTX1TM2OFIAwr2akdRu7GuSKZhfrMVj9Os4nNV43ft29S50WccP + wf0ZUVCv7xhX4CkXOF2mgENcMPRGJkFeaoeGm62OAuM5EvGOtVvXHlkSoaOjEEG1g6rsWWSENnCEQSEr + nJ33JiRWBXMu8K+RJPMWMrq5F9Qn+46O7p6vp4hK51WX0VLlM0Sqstoo9QOBaXCrAISJ/aTofHH7SaRT + GUNKqVhnVztVVKgqYfzJgDBlhEqGcnjmMMmWeDVZzDsjz/tARWeEgVwm22cvZZslvNM+uh4fDZacyPMM + 4SLty1tSU63VI6DpVCCRjtVfGoOLnLERxqupcamno00QmR+wAcdDNRwtO5elWOgloS2TYvUftUQJvHFs + WIuN4aUwGemgrsxQMCvOZyLEalhYcNPUWkmjOoIy1zE5NgZJ1fml4OhAT9/c+DQoyCfbjcCDj6Nl99LS + HMejWzpAhoIVkSEKw4OlyCReH3qnh7s+xxGLs+X6E2h2J9xLByEfvYmBUsaHsVGxMBuXbGDkhoQtMP1d + jZ2xM+7ydRs12Cn8D/CLbXjpxBsWbU8PNNqfazwYZ9b9eVp1pUYsVT3QSO6+P/gxpqbGqS2yzl1w2EzR + Uja2njdyqG1NrSzrT8xce7ek3g8yerT3MnTXQUryOtSX7y/x2682x1nP8ds2drGm2Bafy3/jLC/Ni/Ar + uHApZ3O9yBLTDcLzlBPmtRSbZgblJL3NPBQf78aUF9qEJ9y9EREV8wIuZrzQRgdekFEjBlF8BLG4YD1F + NFsZsc2rw8jcv7+3l1/BgdB9EJb/kAe/tOxIlnNW8BkG8rdKYeg0UqXcIhY540lNtc/U5JnCA25JcEVz + vbMQXQSGQkgv/BnBSaCoFvxSPLNXLV/QN06gVNFUUc0pprtMs/1IGW4XVwMA61vqUNLMgBo1T8U2j1/K + V0gU0VpdNxhWE0QsuooAwo0bFncftAPaB0G3c2VO1FTHTulgGiY014ylwRgvtOdxvf1Z7EBiYWm/JmuB + 0KOGmig5Ab4q58upHR7wjkAlc6908mepOk7y9IYqYRc/5ujDtm6lfJMAW/4u8/oVMcahNxm3AKMu1D+y + QA0Y5rMpwkvks2tsPweOMjtuKjVSBrS1JEVINKlL/y98Q29x6wXDOpcnbYyKw1Ruqr9+EGHLhGWBtXA+ + oK6zoaW7obW3oa1P/uV5c5csLT0Nbf0NbXTnW+XBUfR19zA1WM8ozHdrqTDZqKnGEr9VspMiF/RvvtoH + cc6sCc56joRtOOa5qem+nt51bh+gQlPvH8EKavzY7QQUGhEF60wEGFUP2L51bobGwAHArAXrXh1zAfD4 + +RGcvfWHX0+FfSYnPKgfycWXXIix6Fq8OmuRMnflO/Kl+GcMsqC9xDUZTPrUNdU/IwuUW96mwEYH04Vh + iIgylcIMCxMg5EaTQko+jtSTRoNhwdmeKV0+zNlgJx8x1M/EX38gL5+dDYX5ciQ6kgb2EHojkJcfi8WY + QJclyRWsHJnUGVsA5jXAnH6YgUG7lLWE1mjczg0ptebPXCDQWtcagMVQX+EJ/XINqwJ7ywKBqkk6BMb9 + ZHDoTDRFWfsUaQAZdmjIGoKU8TC0K2H9sGWo+u1BwTpGHplNSh6FRw3dFqunK5Qb5Tkwg35uhWnSThpZ + HNe9qbGCXcIIPUKcZY6aHl4bLbYEG1scC60gUYH5RY+MdKLA3MSFV1cvFaIWL+wonISbQqeLhbxb+ZOT + MDs7CY9nh5Leo7bqmoe7ZuS+5vCAT24GB8J0aut3PjsZHhycn52RSXzWmsZQsL3U1CFLI73gVSNNRiJG + Rc5LrfCWbpR/x6pIlb7AYY+ODlMFOq7kmNA/WxuaOxva+xs6Bhs6h2ThSfsg/5a7R5r6p0s9k6sDobBU + wfn1DM3lhjIjvmQc7qnqCuW8yYhQbAijsAhSGGdCeHY9n7aHbUSElNTeVSGcUQlL4T5k4z0CBxd3QURi + cX4OKfwR3KeIBjrwr8c7Wph86WGohJEFwNUvStShXZozuNyan/dlfznV82mj/qYOhDk3mrE9HUklVJzq + ov48CRaGwmkpEBo6Igr1dkn77JQCsp5w7IE7t3GxrcILQwVRG3qiWUYDgbF2qA1qjJhIEUTmKWUCzERd + 1PlfmPhnLDD67H3Q9AYRHheUETkZfA3PMjNnvYT0qA0qQiRJ6wUfZs7JGbIahH5BFqfGxqbGpCtQwDzF + JAfCguEl43bRAuNQZ8BGII1Kp84ChS9qfYAcL6wx0bj0anuDYkaXTXuvJPhDaXM5GPn4ZTSvBjdNEua0 + 7vZJNgjfMc4SxI/KLMFnGJwBzoYF/2TeE4ymwUrjv4X/HAUTaW1OYYwBe7p99iTNMc0HnrPs1XqiRZrn + kzHI3PyPgF9nh0XB7eFiqQcUnCYKrURL1EC73jLSQTNuZnQwFyP0eaqxmFWJoNzeDcxLJ8bGFuZmpTy1 + hwwpyNzYWWruFcrV1F4CF2J5Lx/uUhaYruS5IXQtCq4HFxlX6UpI1REnCeqY6mho7mhoH2joHG7oAAXB + wmHgsNw10jk62zm2VOqbC+OfDaD7PShbMEx4Sd1gISedtr0qAJJA1oh4SEzO7KPktM1MTTJB2+9j2PMO + mOksLy8wvu950/+/2EKmZ5xqubYKaRJ2oWdf0gicRdQN4rgq+DW5OgpA6EKI3UV2t6RPMjgsmrPDXUcy + H/oPVsb0jk1u42CZsWraPvP1+J9bRu321us3kEK22b510zlPOHN0ZNjEpUSPSlhgKBmTS6Jw/dMlMgZH + a84Q1VFGOm+ipKNePue6EBr0TLWcCprP/yu8VHRLxtR1Vxe1CbsxuWA/UZIUyrukccGhoT4aN06Oj8xP + TVGKQcuhCZMLgqeaPwWWsmSGTCmNomgGmRbSA1eOP/7wQ3bvdChVFMxYo+4t85Ea/8tjrXyuaK3hSKjl + 3c3i9DHVUWtoX6C8bMPnUjefTAYlkan6mhV1i4zTfTp1qt5E1pjVpSsw9Xzc18vNWHpMMSXf02aCWSax + lSZwGLJ36l6cdWUMB0Je1Y+QHnCFhRPBFNB8iH6n2O2TzC/Dc49BRHYYbmGNQ6R0MYtxBH0nUUF5ande + bkaMHNrSW2oZKLX2lJpbUxRMxKeAsmKcYS9hZGrgbHGxcMv6uLQa/tVdz5HgtQFlbFDjFqeGNidE3DGI + okIHBQKVFA6VusZaBuYaB+Ybemdla45Di2jsiy5XixRcNBAdfvLal/zQpdMQxc2TSqlAIEfMtGI9sL9O + eNIhEiejjPRcr+O0AleLDSstvLzO/fy+NzMU+f19ihC7WJU0zvLsusuAMMU5bgOfDKYBx1ypiTwxDFBY + jAuGW0gwMtxagSDaXaqDSKvftIkuGia5qS+GV/lTi4oEyagwCvjwASqg1YCCjBfED+tGZSRC0yxN4NA8 + 1R2TZU0kA1lWXiuxP+Q6CNbAXqiLnY6kae0Yt28Y2qVBKc1+C+rfWlgoKNgh9UpFVBRUAAqkO1I3hTsz + UdEYUn8/dFa6zwtm9PX093ajB1ruoCFTQvUydBSEi+hlGJbgnOQVDA8TSwV/wtstfBhjfu24ciLWynvl + o3t79ICNAsrndneHoKO9q6DQOsPLooxZXZvsO/IuvrUlcpidhxZj1vKiZnEPjgqhsRsGPwGUkUpsnJnA + y600Xb53Y91f2adKjoWpWzhFQS4e5HHJmGgiz6GLJFe6P5oU4f/mI4gW+ZZc+/BkzTJsdiOws/n5mYMP + 2oElym6WWproMQgDuhrAKyOkaXe50LvNp7Ym2CVRD7n/NfoQUh3CeCDe8eZSW2epo7vU3ltqAwg7IDsW + BTHZSewzZqKRLLhyC0YU7XNhkhRAyLlP06ltzwqNaw2SvCYpXnlJ0uIjSl3bJBYYgHCkoXOkoWOkoW2y + oW2moXO2oWcmxwb2dixmLsC4ZPKpJMmJJSk89nZXbM9oRN7COsXYPe4f+YOoiReg6evrXVqY85TMwtv5 + MQmTr2aT0UGQWUL2M3B+lSc9MqZbq2BSOCQL+e5xWuAX0BrTDr384lXoT5MYtYOibZjHOPnLvnrt+kj7 + nBGmvlBb6fdPqB2TVJApxAhN48lZRpPQoNy0xDYGe/v5Zf0+T+fOjouM+MuL88S3ZHSoCcakdZAZQ5EH + YhQnc81kClgI/GTZEQUvTKqVpagmo2RbsaxXmhoY1M72VoraL83NMRy7HJdFCoNbxKu9aMGzTklEQ0c0 + 5kc8bHJiZPOmJdAu8MKQ3leQGQUz+JSRoQHKbStWZfAW0Qj8C/wPXOnr7dq+deP2bRsZu03JjH4Z3ium + UwDVIdCeSIZ+9NQo21MJtKuDLhN96NQBIHPw6dDo3hknrHlpNBe/NOQrvAV0oaYahDV1kOae1+sexcxg + BOdnIp96RYKoi3q5tRD0jchnqS85UqjxYFksPzVNtpHxrbNjbnZ64/ICH2rIl3LE2pBhLedLw961r/It + uJ5NMk1V0/hn7uZKOGIQI7mtJEQuc9MM9qJOaWuCUKRxSnlYp7GwXmCnWfCvc7DU1dfQBRb2oI6WUEeb + mtEArVMVEA0Jsmx5GSLCMKDjjD00bpaiHh8HB157MGT3LRgypNVsDtSamonakZ/fLh4Z1NGu0QYigt1T + DR2TDa0zDW2zDR0A4eweAWWtDZjAcnkbdDEicKVzxPu8R5eq+c78jvu8Hzu/ct/BiOPptJ96tX3yAzEC + 8KHacIAq5umpJANdaEj6Xi4Ua6G5Pwfp7zWAKeyKy5GudftzPsNF5aJDuMQCpDnm5QEuZYrhoPiytNtG + uLZulEnYL6bWJrpoFE8yCLQQhdYoSGFSntuE1OXQVAJN0iSyjhPMGCTH1BUhLUalQ0MuB8sGoNSYoFON + xLMXn7t/wcKEqdOhVuEsJA7WYwmSiJZ1hMg3kk1RMAlZdRy+a9dpxx8/rCW8bT3AMzE+QrKUxbrSACF/ + YuTbtW3r7NSErecTKRmzbctGcEv/9Az3kCaYAoZQKEWvKHtarC7HCz1wCME66vCDDjv0gAIQGvzwcXBN + SsY4Rkon3uEBSxy08+BsLyecxgChg2hGJaNmm1dWQ4Z7EFdjCj+ZiyrVhslBFIpr6+A4gwxn0sOHbqhx + 21F4Qsknsirkrs/1qUhxUZ/nOx1mXQ8FGsnN2LhxiS/iUzEw48jDdj/pcWfwC3Jf14saZm1768YOw9Ue + ezYVKs7wFiuj6LAX75TQpzO90fy+i8xFmJOMmGTdx8mrTWR9OmsU0P5sb27tbu1CVbF9hikyk9zW7nL3 + WKlnotQ91gActhEm7GxobSt3NY8uDm8/ePPI6BBvsOl2RNVszClgmI9gexxmOQDJfPMkDXhpsB41dXT3 + NYHHkk3fIViINNo9UeqdLfXMCQRCB7up4bZ/QJiO4H6a9njQa28w2Ne/dcMK2TAMm6JY7Suy1p0+6LVd + PwzJ9lOT4yefeMyWjSuF9D4tqvJ7lC7rnhDGbuZatZ9bDzTDDrjC+IKedmpQp9AlibcpphoFtBmDU8AI + jYU4ohS6W5yb27pxBSQo8MUwW9Q7xx5+q8QbTOrpiDlBLN1hUpkHPyeCARFdDk2CHMIUfZKbBktq0ySS + V2WsiV4YkFBygeTPWFy0ZkqeFU12N3xAu1gyG3nLXkqJYIKILVR3I9ZViDCl2WxW/ctHXobv8dGRyfFR + xEBrv8cyMz1+1OG7Z2cE6pJUgWAZHR0e3LqyjM7vOQygEbUsAJ4kxlYI0UX+FNLeFfmidVOoXgjyZaE+ + 2UDT4YFDhTGhgyl0YW+BgcFNbb1xQb47cBhhL9hnEvEz44JsXAuEUY8NVtXUs8NOmBmAvsYX7SPYA0FQ + FvvifDrPvS1UjawqPqPa1MOUfztGCiBEddRoX6T7oUJs+IltrhNrzXgGBQe5a+e27ds28WrqSV6Ym968 + soE9+2Vp+Tlx0pZTShXS5KZIQXEVRij6JLcYQMbG3IOpfca6VadR9houGOaj0qZOHBvucQtMMQn/h1uY + z0OrBATVhkPmsD6a20tdo6XemVLvFEBY6hwqtRIpxKXS1DLcsuuE7SeddezgxHhDY0sDGW7t7ctLi8z1 + 4yi0vwMszGFhfqZfonKN/CCDA8OdUFJCQnycoaAAYQ9O0UrvROfkxtbRZYFAFujgfgLhfmJe3bdzpU+O + 0uFBnCyc5TVo3N5+Or+UXdt1UQ1ycvjug17+khccf9SRKRASyOzr6BntH+K9e/WJMulTH9B/Gogyi12c + nZsaHxcsTJCbrwYHEOU9WWkIqEgY49T69QKg5f9jXM2hLpknFkTRzCZqoGgLN5i1UbU7KjrdUi4YYvtO + Cg0OIyjG+mp5d4BNfuvOnbO4YNEXGrpM5FUpb7LqtbJCmkSIA0VDBBSNwhH4MhIgzErDGMLVRcEEC3NF + 0YTzRQepj8hIuzBCa5NkSQ6eY2DSqK0BvVjsT6354j6XDEiMNoUlhvSyNVHwTN0u/qruXIN8hnNKJVP0 + Ms5nL+GB606U0vQjHLQCd1RMle2DiKr0MYE3x7nUX8P2Y6N0R+1NX0XjPfCALRs3LuoJaVuYn962bQWw + VENQxoyDhpwUYyvAoeOf/wTye2mk0DTYONcJBWPzAeAggKcKAcCp9dk8myJcV3bFpkVuDQhrUimEzwCh + ID+lTSXUndadkTodchmzf+d/Pv9jhwT57C1J0L1OToVLMgqDFsR3Icdnrfk1toHc2zIYsH8qESC9yRvp + Twfy9c3gwCz1wbcmBRTJUiBM2NHa2NfUN93TO9Zfbm0XvGwisN0bki7yo2rNaLlegMR5d8rJx27duhG7 + EOeFi5cZr9YXbQ0oKNy0V1ImeidaRpYqgwvikWEBBc0s84g91k2bHils0NF2XQkegWUrJ1/t+44OD23b + vHFooN9rjbJxV2vnwZt2nnL4sRPDY3t1otiJFqrei8Pbq/3XbsztQasN0nqcRtt55h+bEDo4hfUJ6vEW + 4EpVjkKYMECqc0GHt/BE7wm9O+xGqr1zJCdJzWwChIwE3DnMPG22Wc8pkyUL2mFzS+N6t2DeGlGTBBED + Ota01fVGEyKTYrvzfHkP59io5KGdBAglUERoZ5qIHD40SaXICmrHImreWTA3YgYXRm3zPO/ekJNA1UTT + KiWqheWQUjY0yOfmM/NaoWsMkawHKUGIxYVZCJNTKAMGN7PUwlLAsDwmJYiVo4bO+fyJQZpvr0AoS9hA + Edol02BMjXicYipgTyDfEbGulGoyqbHS5IvIc94+qugIjhIeI/duZGTAioX6tCAmL3qpgVzhb0/Vd29q + ioU8h2ozL+GnzzPCGP2NjDBVTfXCSJV2nnvdNe1oqqFBh0CT5QXYWiyN1RLNpXb8cUcdtmvHNtakEz6e + 8xFTU2PLy4uEbKJYIhDL/TU7M3X8sYdzNvRe8/zCrB5TesdZRd96DhqfxdagY07+Eb1HBhbcLoQGeydK + /QDhTKl/Dl7Y0DNe6hqReGGH1DltaCEuKOApPtLmNiJ60DVXreJIpRPzWPojfbLHsZHDIFw1NjYiHtHw + KItZ1OlgAMKhhq6xhp6pBo4woOBcg6VP1H2EI9rj56++gdp4YkJFO0H9wKjweDGN2CMWKv/AQUMul4To + lhZnqQ+efpq5Hu2xH4dZfCt708srxP/aW1q3rWw8dOeuwd6+R/BT9rgrnTnuudVU4bvXzgzS04Pzbmp0 + As7tkqlKX71c25TH27ZtkyW95Nlg+CsVPxMsTO8TDwHmLDMR8Oy/ckNyr+OI8wlp1G3CBNa5YEoKGRQo + EKV1tIuW8VQpDXEBsdtZfwmXRlNTaK6hUjoqaRJhzheDkikgJ8qYjX3MZDuxJqLCOUuoNYU6Y9CyZOJh + if6LoIsaI2EEj91xU9UuM/ob7cNvacO6djsKkT+AMOCHFjzDJGJ1RLXyWYABwRWTQItAAlAFadFhyXEr + 5XxOAVP0cl9MQgcNCF0j7Rzs76WtEsYcRuSER6YMkvWU5O7bsDQ7NTmK0FoPrTnIQH+VCBobNsXVCWWg + yMxiyQ9hZuApGS4UxyBrVm08LSAQA7EhlFgAQrOkFvJbmHNwDXDAlonor4ZLIsusz9UeEvAD82K3wgiE + mWWGC0kSPbULJqEMWP6GpTkmCqnyYYjIBvzi01PjXK7cEdFZKphEOiYvSa56Fk3IeWQ8Uqg8MKuAn64P + 92r4T+G+9sChjgwyARanaLmtu9Q9WOodKfUBh7Pl/vmmwbnGPuWFncOltr5SM60uAD/sLJWGppYGDCxg + oZbyDywlP+6sgYI+6AHDfPdVt6TAi1RQi7qoxQgtidAsM46F/asAoX7BvdT0atDITMiSKVEp08FrIJZ6 + 4fe2PkRrgAGfLZMiyevgQher1TnnnDk+HtIkOTbm0Ihee4STfdiAA7Pwr/88UCWtoL0Wt5MCBpoWuQ+f + WPsWPt2Gs/Vg/GrbpLMEe97f3bs0O8+ps0/kGpqaGKcyCy/R65hCB65/+nsd//JrCviXzh9TXijPgyNG + J5I+94w2mVS9iVqoVHq19Wkp0SYmTww6CSOMeRHaIDcVlyiaJT1vtcC/WxUc8HQAMkYYg4J5d5+lT4B5 + ZFYMDlBco5gRoT17vQBNHWuoU0C4o5k5822ShPMxzE2MD2tnhmD3cGuMBbdkHE+Kf5oJ0+mOwUZqsGQD + Po4uE7W8KlM7YzzPKV0B4eriokujDnUpR9Rm9zlGiDd1cmxkZX6e8Cdfs/DpTh9Zz9ffuLKwceM8TyJa + RyHXFd2itGtwq8pwZKXCDnu6aGo4Pze1uDDNepdVeYmfwOiysWp7KSk+4LkWuRRDz6Cw6jNxaeYn2LRx + 0cy0qqDK9MhtNR4mTEUFu6IcCLM/4xUY4ohSv1Q2c5+XK6K1YUIXRTOYtIC5Gj5jQD0VV7JAg91czgXt + ZvSJaUTBzO+W4KKbABQEzTsDHYThtXaWO3pL3UOl3kkIFhG4sZUd7aPzDV10exoutfeTUyjJ9ZI4IcAp + QEhaRT5Yo5AmQ5ONNj4wmhzFURPuNElPP72MCMwkZRUmx3DTEkVRqqlpTTUqq1FfxlMJxTgz3tA309A/ + u+a4rXC47qKdOWDjQJlJO1bZqV4/SLC9/KTRtqQzcco4hz2AkVzJTtrWv9vf35agYEdzO+7FtdBdcZ1r + Xdu37KF0gF1kezzgwjbCwuulJNqe5ErSI4yMULrvyn2TTcrsKqxPClMs1N8z4J9dlMma/IQyvlTXtJas + DCqohwYL7pgUGvOjAC28Ucak3YSOF02EjujExGCnrFrRLpSPyelRsVZkqLKdL58mIhU0lNE5Jk1naqeT + ALYxumDSWc2SpXWbvdMrnvCnBZ9ypsekGmccskOCHYchYqPk4QWGJEgWpUKXQJV+1aNWSdKeoEiEkATh + QiLExOjw4uw0YmBBDnX0yvTPEDiUAGEBCHkvDI+dFDb2fUr6R8ROOq6ZH0cPLCeBpjiXyrwpT41v0aBp + NzPmCX76CISCeUDgli00NZ2OE4sQQHXJNK3oZnRQXEuaa5gGfVNPDchKsSFUWSeLaYAwn00YBIZCvDCb + hLU0SzkAlUPjkvUFqxv/TqMDtWSx9q4J2+vkMk4xCyGJLH++IJNGdCzOdG0okJgFMkVbR7mlvdTSXm7p + KHX0S3Swd6ZpcL51aKbcMybqaAf20b5SS7fUHRX3SjPAWWlp7ZaaUGEYtHGs8K/+GYZB8U5CfancFjGS + 8Wd8bBSOxJy03jgpFEyMORBB8I+aoixgoWUTSvCSlZ2EMBswuPYneYS1+9LPzjWVLW6TjdQ1qR91D03J + 1h4H9z1uUJgv7HH739MGEtBWMyT7F/VboWGNzwLOJybGuO5xxhY6Au7nEVpgjwcheqbGPmOoMcKEz4kX + nE++HPn8WkzhMMNFAz+bDGpYUCAw3kaFu6U4zbS5qvPCPASG8jHpTV4ghavd/7FRgBjHbSrN8AQjlPY3 + 0iXAeGGhoVJoC8DoaQl8joJSiTHtIKF78OpoDnWMkpOjoyefcDSND4eH+ldBwcwXI9jQK2351BrqLWoz + sc6G6YSyZNzFGV5qCnWaFZ0mKZHKmz9NBTXwi4hYi3O2ht4LE2Mj+E18A7gaWGK6q6FXgQ7WBULfJsqn + QTVVxsmpyHaV8kX03hqBdM1opQYjU7yUt5sUHLMMOXLS/60nop3AwK3jtCNRUFNGqECoFl93+QaYZPbT + HmTtmhaSoXJboQlJIfEmRqaDlUYmUqEeaQ4CXeSwUDeTuXiFN8mxSaZErriuxxFzcfQorgiZylVocjEm + l8UUY/zZXDbettnEN8x5Jfm9abB3oLOrt9LaCRCWmtpInxDYgwJCtmCBtrQJHZRXpfRaUwldtJESvu2Y + IpkKxqEvM7Gng6ETRDH2WXphHOv4Aps3rew+aCe8wt/CIRFmzUgXWNjUFlDQKm5LuVGy6QcbWiGIOFp7 + yabYg2tUagDUjOyRgmQMVodMqRQgCfzRaxGeJM4U3kjQgFguv9PejvvKWvZMj/Z2t/uwPUcSMwHKY6PD + kxNj66/IwyVlfs59A/I9ngE2IMCg1XlyCBdJXu00Ri+tYlAwHGA9UTQmSXiNGRyhqvrY/VMIM6QU0J4z + alt4P40LFuxt+mdWRFjv6pAaVeuUgVssLs4hq2VuAh01+JMPwk7CzCACYYaFHgiUMU7aAedKaaf1tFJH + TIaCGhZaWVq49JLnn/fsc2ZmJsg+9REzTyMCFpqGyUgKaSN4BlvKS3Pq7YytGFLHY8aEPDoYRVHDgCIM + JLBHeoOlEyQumOA1daASu8qghCoN4TSrIeTO2zagIEgvtUB1AcayWKA8D6KovlSESUHW4f5tW5enp8eY + mth7VyOXUa2Vo/VdRYNMBoccYXoMrvEWEDSeN0G+mGcSTTc5e63pzxqCTUp1p/xPf9Awd8nnWihGavoE + kbyNy1LTwCPHduUkkyprT5GzJZvHSvs05eZqSXi7WBeJC5tbfGV5aXxsRK/5XH3B2pvFZ5N5FPQ21wJq + qTQaGWE2Yc3EnqD7BENcmA0TD2ruKBP/a+60f0stXUL+QD4WnrCwskm5IG0omtskuV4EPxFvMpyLzC+u + yQ1WdYc+Vkoyf1IQDXaB85+sjEzFlDChMkJNnGjoiNHBrnGtu03W/yiWmcpepU9ozQExUyj7COZCg0A9 + ag4MX6IsWmtcVNUAjfoyJ1TcwBqISr+lyZ57HOX3AbR+H2/R0NGgRWg5HdwJ6zxyG8T3+ZDST1ljSlAQ + Oet+XBqdjhjpqmdCBB31/MUkI8Jh0iJ6posmk8disrxctW0tJPoAXREyDQ0zUDQINGm0sABtLodqslP4 + kyGMfAadHWfhQJs+k7qI8cBiM+kisJeZYnIGUQve2JLPl8/ET9dFIRm7dm07YOdm1EgzTVgs0MbN/IiZ + tQ3C4bkwOwMQRv6XVc4sOP7TKJfmCHpEMIh7bm9JMcChkcObm5uamCBKl7GxHJnT9SiTY6Mk6AkQKsYo + HMZ/U9ACLKOeGbIpzCDDSt6evGpwGIjj+Pjw1q0btOBLeJduKbsKuJt5TU0dFTAGevF/JgkbZpCRRI5a + uA1f36KGBWdp4hvyqGp8khBETVPxGG1a385/x0L2fVp9Bi8Vc+INi3MSmQ6VZUIB0sK1FK8uscwwRcPZ + xP5RvDnsGLpOMl817TVe2IaIsoYLDNyFldqr2r6N2V5gh7X3TpyPxhh80uA63oC5KSzb4+IiC0tLxniT + JmeEeqt74QzaCkL1BAIFDiMWKhBSU0baMDWLp5QFSwdwyFKTGu4kL5mUp0ZIU0iLg5lUycjX9hrs79+5 + bQu1FQN/A4nInRDXqCZOiEdmTIKCvdOaMoGvdUqKq/XONlFulAc/D760tUVL5tgL87NQOsO8WBxHMI+q + w5s3b5yZnWlsIvjbSjFtkJ9USwmiYhASmAzMo3Zc5oQODZFkObpOONlnIHmk3mgerX04WgJO5NLtszK8 + V59YmFVFITSz/9gFl56TBOxMfJB/i0JoDRDm44LBTsYbDRgNHz3qoDet3L0GfvpSBntx6loHBVODzMjQ + 4KYNG0hxMYt5GiNJ59FBTYrt39LoSyEWaNN2s7xL1FC1UO8yoeOaF9bKaJ+Ng+bCMK9ErTW0FgsZsKxL + Qy4XInNwZDmCEfY0eVwrcxaSEBwFEwNLLu1dHKRSkTqvZCagKORPOZwKlRkQpuBnzxmvhwb6QNYgkOZZ + nQObh/0KOGp6bMYdFQjdZSpp+L3dmJIsxd625MilPmpytBzD2JhkSjhap69m3p/YBCOVjj31MHMYRcuM + Ty9i+NZLkmbx3aTqdy7om/pFRd6MoWK5YBJ1XY1XIfvCgdAam9hEzUqw1phIsz5NibAf66XEtEI+C0sX + knJ9XTQ3oZQ7saC+1Go23PLQrAO2bN21bTuSY94fHrDQxor4kvA8kT1ptxSoYUepRXmhekSVWtKSqUXh + sBIiKzq82COOTtlopGtyTpna8cqYVd1BLNkR6RPNIo0KKewK3ScAwh4FQlImLIOQKjOWPsHZJHAlfp56 + SGXrGLU4L1q1JAqhYqNB6KuMjo9fdtmLzzzrMdMzc6Pjk40t7ZUm0kRaZZEGHMBhYwEO+QaacErimhCK + uv6O5Puoy0OTTv6LP/htmKVlCnVyuBCTR7akeN2LwwAsPrI/arBQZlgcJzYTqx5XUFPli0gL6cAKY1ww + TAbDjRBEk1xokNtydnZKXd0ZBLosk8inAQJxu3sulCqiabHgUD5Nm83IZc9/mageuXv3hoWFCIQ2Ec4l + DkYUDO7QXIKEqqAxWVD7jCdtx72gTGSEoc+AeGHynXUN5FLqYCprgQ4mdWHi9lk96BAF9NhVIe0vwcLY + qyErB5OVaEmZVi4ylyRIhG0yqpdJlAY8GZ8LwmPQOQ0miYbiAgWKIoAF+FQw64IORkaYWWCIMvYqy1S+ + KOVmbHH6GNfIp5MoSbmcDAhTChtDgNTZOWT3jumpMYf2AsbncdGk1CioWsnTKCPzRuxU/GkAmU+u9wpt + TuJzTRxTXmgV0s0qBSl0d3FeSwiWY9fbXZbX6zCECQuiRUS+mPOTVCUt2GfYm/WRzhHB2InFQgyJOhqf + xwloXpIJM1f2SaU87FK8N+qiBoH+r5NCV0uZk1LSE0ZIA8LWMpmClP0kOwIVFAiguGhow5QLndmw40AY + 5+IBHe3PugN+wfpQdyR0mG1AHaUhomBhT6w1Oq0ZhHMhj1BAcXb9yGLHJG5ZVXv55s30eWpuY3LVMzxG + uvnkyPh0z8BIU2t3U5ssnBeRjxvbypwUKUCuSqk++KVQhzjj6/l4C1XaeSHpjY67q52g9extH7aRz+3r + hdKt/V424+qBmCP778OnpG9hV3qt1omMFq6PAu7VXhOR3tkkzmZRFhcMYjUT0ngJ2jbyenAqR1+MbZDa + ZPyusPXundm4srhj+2buTI+6J8GJ1BET5qfMwOw2jtPVLECY3tvc7ZhNrOER6jpBQR8R0DltZl0YI/I2 + vEb1zqTJ8tINoCCB1oqiJkOZoSZdHAiTqiUpKczxCQZcFEIS8bUedJom6KmBgQvmLDAxFugRvhjty0Z5 + G9zBoQnuv9EhSn2CVQ4JBcyw+JwiH+8K8TwBpwCEAbeM2MWIoECXGjsFBR3wCsCmTZQEBe29QCatzQEb + sA2Fc35uEt7s1NN2kh6bccpVcjMCTeQYyDaRfWZxyjohyXiuCq0tMnGY6YXM1Wbo/y61eCTvQj9df8es + 9Yf9GTy9mWoatvH0mBqTlMGh11XwNPwAkykKmmhva/RJbYq9J79618yQWWFI6cGCVDIpxhREShVnTYw7 + pPEIvQez8IShXuRsAfmylXkfTYgU+r0v7agxjooKqEExybLXpeg1MBTRuo96TDocZZjnY5GNh3lymOlY + a0BAHN+STUQj1cx6goWEBi2h3vDPcurXD4Q2EgokaR0BBNHGZnQeLEP9FUyoTThoAb++po7+5q7B5q6h + 5s7Bpo4Blsa2XqCxwjlSdgy3tK9dlzatjR9cM+PDI4N9kve2n0izV2/nUClDimF67c/lVY6QW2ofvpof + j30zLiWC91oUbb0mW7vAC0eYXhPsmeTuDRvmrRGjvRSv0iw0WM8jE1DQUDSFQ82HTW+JsgKSlOK1Rw0K + huzARJMJLNBmr4lTJjPIcCcfc9QhZ5x+0uAgAeZAGQMLVFMMWM444p46HDkY0h0Igx6V1PLwHK9EAjX9 + MxcaBHcZEAmzodQVWkkYEFpqmgZpFPns37jYSMo+lzfM33HbNZdfeiGowNCZWkPTTMGo4OV7+9UUZPHC + ZqnhRXwxuFoUJ5wjJiJnQD7TFdP1EZ9inC/JhYgAqdurfJrFAvkzaKryxpQUGhCalIo5enRkgDQDE2lt + D7Jen9DrmKqqhePB86yNojwMGeqx1RhtclXfinHQ1Eak5b8jHcycOOrFbcMlS5SXn9gSWjIVNP7p2Ydx + g0w7zVAQ5IsF1vNlFoKWbhM4m3Xlr726EJhzOCfsMBNLQ4wcn4om6UvDplhrsACEfJzOQmiHULgZY7Pr + AITyKrcSNSvYXRLvD5yvHh2MilAcAWzivvbDRgbGHm5X5q+cw7XfxLfjpO3zgJ8TWMvIpOTU05VwOMmm + V1647hJrMtzJ95Uegk0UcIP5NrZ0tLT2UDROoK59oNI20NQ53No73tY/2dY/3dY31drLMtnSM97SPdLc + CSJ2Q5+jTLpXSBSoqNWEXaNG2l7vdN1vsF933Zvv74Z8FnYwOnWtncSZ6OziR7UrLM6kgh00/RNT0szM + pBFxcEalaXnLGteuX6bZVDEmd9oajYjI1RzppmBqGh3MxeqjVpNXbDx6UadqjNyfrS1bNi9v27rCUJXe + 504BU6M5305yszHzEYYR8aqNFEPemE66I/5lZtEgcGURwTC1r02c8OGPAZ2KoIywCcnL9NLIMMTHc+AB + W7/w2fdefeVLYJa56GBIkM+1iXDTZq0FxkDOVb4U8HIumMTqYvwv1SHF3hIxzEHI8CkKpEoNVT+ExcIF + I4Z1Gy+0LEDbWLGtG+SLpDAYYYzzDQ31audCE0XlJWvAy5+Mzju2byLnLx5eUGgpaDagCYhpLDBmXGTS + q20g3zrv7nH9M0qjmQk2tc56sJCqbEtLlKzyDlaZd8lT7yMWZn0twjSIVsBi0o5SQR4Lbf0qDuQ0udD9 + WUGxlxB1NJcWKuKmufZc/BBkOgQwb/BgeV04DGJJY6N10fE7KM4pM6fMzPTE8oZFtk8UUfeUFqVRHW2C + wpQbHOJc2UaVFOfAXL0TZfyxSIcNWfkhKAvTcISaZOk2+DoBRWONZt1gZz7ygrKMA8mAqOXWzEFK+gRO + mRggXH+t0YCC5n9tbG4dGBrp7husNHc2tnQ3toKCQ10DU+PzWycWtneNLHWMLHWOrnSObuwcXukYWmkf + XGobWGjtn2npGWvu7G9q6yJwGEOGewcYeub3BY04TespV7Z3R/P72ZoviGJg7LuNNEWCvXt6GEY7TjsL + zCNizh0jQNvEVEssr/lHBoqrzdSSi95aOkv+gQGhX/pukMlH41NZJuN/zgVrDW917KP0miHrT4aEzFme + WkbTcAs3vua8k7YrmYKuREWFqk4fiaS9XDaQFfLlTRkTi8dgvyXFm/neR8wkgii8vreve3ZW5EEiYXSN + sMx694iiUlqBMfPF5Ps8ZOzQPJa1gTGjdA519ehgqH9moqJrnvaWCGZd/f2OhSZUSloFFFYBMsT2AMJI + /sIa+5P19pJtGe0zXX25P4U7hj2AiL087zFIzoRWxUsFuZCnYTAZd6tPtLEwC+hFJR2Tgu20ZOSyZrrg + r8pMQjP3bUoRfovoVypOU+SX8h/LUiyCuZTxua+rmw/P153J2jYFgAwyQ05siJYZ92S5LipYNTc9NTE2 + qnkB0tghaqdp58IAmRs3LO0+8ABK6jn+BbHUciowWse8I25D7gXi62CDayoxgmiBQgE8vh0fm5dzUkx0 + duizXr/pwyji40A6gY4jjMCVRjSF4cVRy8SpQDN8faaQSSWabARcjYxwe6u1J+hnPJE+ML09YY1AJXRQ + a62JOgoj1FqjLo3CCBkdeA+HWH+8tSHWIAjPCxG/jq5dB++enF4oN4OC/Y3tqKBj85sOfvJ5Fx516tl9 + 09u7J3f0TB/YM3VQ98RBXeMHdY3t6ho/oGtiW+fYcvfoQtfQJN2hxESzbtHPDoyR7zGnnfjEs8+01IW9 + egz094+Pjq76HSm5otdC7T7jD7RXn7aHjflZKbe3Gq/FFUc+QBAhydFPzpJD3RofUHebhCYaHMYQd0TQ + GjjMVqRCaIwHhKufQ12cnzUHkOkdgCKWfU+Q8HuoAId5CbSgiNYhhY55vBGMYZhIY4SuiMb5cqFCR66I + dt4OWsj0CtGdOJe3mX5uZSFMmKUMSp5ZwDbjgrGOF85AwUI1NbTRbsmAMKZGSOI/a8gWCPwvNohwwHPH + hyJcnahY4nbJBd7ykmMRbHLQ4oplJIWR7WVIaapmEil0nTMHhK6dJpQxwcUImWmuReSLRcHWiWzKPtMD + Q3Gdm5mEjHrs0xExz4+DLsp7ad0utQJ6xL/Dn2mBOpuXyI+YlLXzDdIf1+3BmnGRMMIkimxZNMoIa/T2 + vKE09ZFyATMTmoeXBSC0CGKW/2ONbVlsLihdpShMmu/BYjeX5JWj1NB7LBpH2QsbG1KmU8/olzHmpx7P + aPaOoY0s0TARSFOC6OESGwaKo4f/zelaWpwjfByJoMNh+qZgWTeEjLP5TOiSbvDSOjgHWDbUBK9pSeSu + HEFkFPXq21JlTdvzin10QjMopiSn3pp0O5Ymg2zIyraInnpk8L/yI3R29w23dPQ3tvU3tQ83d4239s0O + zW7fetgpU1uP6pvb3b94xMCGYwaWju+bP7F3Vpb+hRMGV44b2HBE/8KunqmNbf0TgoVA9JpiI4dkJgg7 + JH765z/36c96+jl1EWttbLDrZrVt+KACrfZPxJdRSFXZf0jkbIrJkVlFMtXhdwVRNElI2Evtp3D5alpP + xvUL2/isSi8gcfm61yaZb0n0kQJ93BKhBVMwzmRXZIEIOv8roCDvY+a6eeMGzYqVO4EdUon41Ecdx78G + jTW8UGYbPiGtC4fxvg0BwhQC5TlAqFQMilZ8KRZRS73mzg7ZXqq6hNx5nWWnPQVj7jMjl+JWLLIc+8zV + 2mQ8axCP//LC/MblRfiND5dQN+kZBCGKxWJ4iU702zdt1D6CXjtbzBqYcWxQNoKSWmOCEBpDXN05kROC + mNGglFelQmhIeEhYl6uUDipG4ITVBc9LZooR82eMDkbmZ+Jn2MbpoL1dSOTwgOxH32ixQHOKmvqqjDDn + rNEjzwRV5XyRF0bCKh8Xsg/DpzuQ1+B9Lmkyr69S3HWEujnsn0wMaymcFOvxUj7y60A3UYbzLR5D/4pC + rr2rBTGbIuSSmi4qV04OC4MPOcYLM100BBFpQCFlbL3UUcFEE5pL25zPbpbCjeBhAg3W5ypRpLde4k3L + AhM+YU1v3vzzYH/xOW6YBIe/sxm2DiMBFm3oYFwiSHHoQQcuzc8Z3KSiqMFeRL6c8d229MfY8DA8mHum + zlDMZuTrkaMgrX/9PQxNSTMmYYQDUmVNKo6SWahVZmggvBrPMOpgrh1Jk5csiGYIYaW5vdzc1diOKWak + pWeyrW+2Y2i5c2xr19SBQODQ5hNHdzx6/MCzxnaePbz1iUObnjS0+ZyxnU+eOOjJ47seP7r9tKGNR/VM + byeISHBRsy9WlTr5ReFGDoQka2hT+L2mg/sMXRJtkm4me2FXWefhiQk23w2KS5+cXMtkqPswEbweZ82t + E5RtbOSCA6X4N86nQrzQZjRddEFqqRVFdb6TVFCz6zKROCJNjVe73Ic6e3QtBTGHDzW6ZrdGPlgYgLCA + hZ4LmAmhUfZM7/N0M2eBlDwZHxkhVGMFqHJO0VAvxjsLymzIhxtJnMjnztv8XQqFJFW1as2issZz51tb + JkZGXnjeMy84/+nYLsw+A3pBVrBN4tD34s4ytvb3wgilcVJS2cTAT/Ev1n8pNPkTBS+tT5arc+aYF42X + Ka9Sh4uqiEwdXK7MP0npWpA3pZSM1iQL6BX4YmB+FuRzYOMJPh0WQbj+7snxkYXZaSAkFUjdI2MKaoqF + UU11TdXEz+DEMVHU0NRx1GOTjv0GpQn81ykIYGSRlkq4T3nOW1BHnZc7HHpcVkTskWGmGmkBNneWhhhh + V/v42DCd6NkzyoHPjQzJXE4wONR/M++o1+bO22eM/2VprCZgmCPGXTNy8cdKNBEFpcSMPVdNNcumKGBh + GmtQ2AvsMNVs9LYNbje/tYUpOvplqRTBKBfhMHPS5YeOQPjYrU76sKkH2pdwvmyMYtQCw4eHsEBnRn22 + 5AZmhCSZdGFurv5QyT4YI0nxa0R0E/1SIbC5oZFUwtiDgmZM5FFQay0s/VKGu7V7TZgIKIhKCw8FC6l6 + 2t7U2tXU3tfchS9mon1gtmN4uWt8e8/0QX0LRw5tPBkInDnqKfPHnzd37PNnjnrhzJEXzR59yfzxL5s/ + /qWzx7xo5qjzJ3efM7zllO6pA1t7pxupPgAWrtIg0E7uPsPYvr1xtWnBHvfGG1UGqdNTfo/vZQMjfHU/ + nVGSKmJm9azHAmXCZPMpe4Z9knt9fHwkJgiGeVa4GBO1wdcU/DJp6DuFw0QmzTSQpNCoTAIBR6nDC85o + U2WfTiaWGc9tyuXOp3dswQUXYC/gHBNdzaOXQq9Ns5NTOzZtBn1jmDDXbsmF0CQ6mKZMMFsXVyfnln5+ + tHXVcGdI/PJxLeJiLBYTuu9KXWZeIgvosIMP3LFtE6KWKaLc6dJjj1ow+Ux5zopLpiRPdtJgKHZaT4lg + kimvqGaWkCIWxopoWX6ek6qCCto5MTYsAJxwu8jnMhR05ROQA9VgS2DhCEaZGBRMAoEgmVRuYwODNP4N + QKigyEvpu0wsNfi0LRMcdXqXMsL0izibFOgVljaEGTW3QRpBNCxMo6QOlpxV547Gs7Pk+sDFrQwp85hY + mlVnJFHizqKDCN3uGV7ZsPCok46ZmaEIiwNh2pUppYOJRtqSPS/Mxry8Q8C/mFwRZ3iFYqS5GqRxphhA + scAXUzHGIDCCYkxqSuyjqZaTTmctBKiPMHjY8yQ0mL6U+QbWHHxk6ArDl27HOIZqRRaWtxtiDbLqti0b + KWlZFxQkjYFib3wVRp1mumFI4iA5/lpWRivLUG6bf/kzLNKwnoI4zb2jTVTcJqFi9YcyQkufL0vW/Ibl + le6+IdALC2hrz1j74EwXYb/JrT3Tu/rmjxzYcNLI1jOnD3/a4ikXbnjMy1bOvGrTY6/f9LibNz3+1o2P + vW359NdvOPXmpVOvWzj5FdNHPn94y5ndUwe39c81UqT1v0ymPD8ugtnaHSRWO12RTglyc9UKeV0t7Loe + YEy2wZGxsrJoVqs1cNoutbpgaW/0S83/NLJfcG2lQUH7UjYj8au/AIf+kk8qocVQNJyafitGj2hWSkZu + bLlxQ1Q/3dJgr7CGP5kUa8PaUFzbNkPGBAXNF+cWu+CLSeqo2Thig46xNObN/Et7CRvCqP1GgwKdy4dS + Mhb/E08EHf5iR7pUFvMiWzblV5AL2mZKI5LCabFZLpvlcwR9XC6kAaRjt6h80Q8S+V+wh7iZpTZExxpY + y9iImEriUkx4cMMLbMlQCsQC54DDwNgSR4yBGWmL4/TvUnpnjHBwoIe2guNjIFXMkbBMifBv4IIOmYlP + Nae1psfpGqwhqzZ3NFlVl+hEDexTSSErHQiDfKprZmfGN21cGA6VV+sUJQ+KdK5CWwaWxgWZ61i9G6+l + wGFM0kyxVyqlqfaeKQomiiaKgsycPLnC5lu+BKEiX9sh2mRU0oiMMJU9XBT1W4b5p5V509tHbiLfhiPR + Di3Sv9DuR78r87dnMM4kXNBAT3yeKXGUBnkdtAAKyFc7bmSQmEhNccDJkDEJzrhTT2zndqg+oPEn+bx1 + CzuzL2y2XS0dYKGoVC0dZYqIQvgoqyZNJ7rlOXFB+k4YHAKQipFtPUMzK9u7JjdKoTXN+lrVKaPDJNaW + lu07th96+GFEByutvc2dQ219k50jiz1TW/pmdw0sHTG0UVBwavfTlk++aPm0l6+c8eqt59y28xnvOOBZ + d+945ke2P+3jW8/5+JYnfnTLOR/ceu67Nz3+9oWTLh8/6Cn9S0e3Dy4IFj5Cbfz2EmJqCBasmvO4ly6e + 2g/llKKK7TMQFvDMujukn6Ib5DJk/C0ObL59ge0VQNGhzi9Mu+Id1yMK5iZ93F0qnjhAGvMLcUGeazxP + GCGngvs5u9OkBL5E8plqM25Y5L5uqIN3wc884GH3vwwHSQFG/ZS0B29aUzSHi6hSBMJ7egX2tFGRDBaC + XhH5NJBT20ephbFP6oKqdClt4qVBT6gpWpsyGBMBs05JSQgqCnHSXTaLBeZyJJJGCu4RdU7ja4JgqLG3 + zG+ZSIgOeBnzAyH6VGOMMqNF3RyoXLR0/6dLkZAwxFIBPCl7Ji2TeA5GKrcTyKS8Ac8prr20MEPOe0yl + cBU0eEodMj0YqY4Vt6HmQ4+xfmnEUbObuiTrQUpAvVjpNCaHBOJoHHFlZX7rlg3sLcmvCHBYiMsmpeyC + rTRmi7aieC9Ld2hrMJmVlTEUjDFCmT8VFHWuvUka+XZKI99a+4zPvRJcrM2vz65tm/MpwoXaSQEIKWGo + iYB8RIaR5p1pbpqfndmwOM9tFRXRlBSaROp5FPZc3mXp9pQToQomNeRcK0JtwrOKqcfQLg4F7iaNTyJ3 + DFiqM++CCyEZedwak4X3os619tDOPqRxn6GVUEAwjwa8XUQBR0okS0gb3glxxBAUZL1gpDRmqvSMtY0s + VgbmxC9DCWm011U+xyyjTB6a2juQDCQ1nqz55s6Rtr5p6GDv7I6BpcOGt5wwtuOMsQPPmTvy+ZsefeWG + U69dOeP1W5/8rl3P/eTuF335kBd955CLHjr0JX9wxGU/P/rKPzrqFT867JKv73reh1bOumHy0PP6549p + 7Zmll19dEykfziyKac1+Itzevl1/3b19U277fXs7Fx3zLC7cNXinvRQJXnCBugU5YXi2WY4LZtOwYKgh + lUfuqJppWnZx2mc5IQSH8EJQcpabJLHPZBKobemhQYNAacEojrVwv8mH6o3sEQv3ebu8Y2X/jOold35W + ejjwv6QqsbXbVa7ZyGiFf5UhiT8ZpBjCpibHgECdiWeF09JZeeZuSIvIaE1RBsfF+Rn2oCnzWUHtmlok + MhoKdUiayiaBqJggER0xhUzBQoJgtIOmyQ+a/xDzE8CAYLnUxD4P6bmTxeRQcgFJ1yOAlwbbEq7WZR6Z + FKicruF8OWD7luWl+X6UySCBhnCgSZ1aFBQpVdRUFv6UD+qTzke0BtTsiwwIYY1GHyNrTLlj5r6JIG0p + FgFQ6wMhdDPno4m5/yRX9Pfi2uGwJUTa1z06OqBVvK1Zh+Zi5smft6nyX8ER0QO9FEQlEpwywpgnoxUV + pMBeroWhw+HQIDrzkNSUlPortSXdIzXMku5DuZm8IppGCr0TdagjYbio0BiqzwQsjEAImBGcy4UMswJs + FqTIASG3CWdAZpp0O9q86dhjjqJHic6SxeEAKR4dGjKrQWEc0NdtzLDc8zCYsB+xAKm3rgB+df/MhKvI + GeuOigp+WjiG+tqEA8Udqp3owb/uSUmcxx0KBIZkCYqrTdMruKFD0LHcO908uNA8MFfiT05cgYJkn2cH + qOmDsEKqjJM4SO58S9dYW/9s1/imvvldAytHjW4/dWLXEyYPedbcMS/ZcNqrNzz6lo1nvmPbUz5+yIu/ + ddx1Pz/ltr857U3/dPo7fnv2R3537ud/96RP/seZ7/rnk275i+Nf+eAR531o+tAX9Mwe3UojDGA8jx58 + sopslODacy7dHlHLTMN73IwNqH5JixNOy3o23qttuDT4Rque7ZjkXruBrVnjjXbm0s3SNSkLTC8vO8MA + lV3NySP8wRkD9lDn7bpmU1JzcD+jsZhSqjPHMB8M4Bel0tQmg55JyMxKhqZLGro3GScVc+K01wvwp/d8 + 8AvYnZ/mHVuJGfRk1E4DQgYyuh/gp6jNnbCC2jBPn6rXdccwIuACxXKSl0bTcpSCf2AeYEl01qihDbUe + kcoTQS+TVkyQL+QABJNnrhyMJ6enMTYFQiV50ZyitKm3a/PGxa2bIUMOhEatgjVGgMoDeDHa5/ADHQQF + qfDJNo6UJm9a3TVbCRDaSvfCWGU1Nd0ESdNCj+6sSV0zno8fk/oza0w9qlpw68ifBvluiOVbC3+lGKNm + GRLDO/+8c0456Shst/6LKDU0j1LOaJr+ZDZT8eRCn/f4ZWAGYKODkSPG0kL5mnx6mcnC9E7aECsoqnxa + RyCNAcKQKSGB66wukkojUsjbYMUmf8Wc2vRWSpTPfEV7E2P0X/Zm00QPJapzVcRJSka39Qz2DQ5zNHbX + S5HpUCAm44KpraYQRlGsKqGjkq1P6mcBBy00UztG+Tw+mfrXD/2Qy6BSpwqeeGHouNQ+WOqeoDlwhdbz + kjJoxUVDoe1K/1zL8EK5f7bcN9c0sFAGI9eMEQYyIFlnxCGbyO1ub2rraekcau0Zbx+Y6xpHFz14cPnY + ke1nTOx+yuxRFy6c+MqVM1+37Zx37nj6Jw664JvHXvPHZ77rX572peqzvl191neqz3mw+oKfVS/4w+qz + v1t9+peqVz9Qff67/nHz2R+YPvLiwZWT2gdny81tjoWcLBSs3u4eLoF1AtgamMQwDvGFJdTdhp9tAOUo + dneUsFNPd0GN3CvA841NG/RdccMgXKzn66SYtxouptCYXkm+fR4X5fIroGBhauZ/ujTK7cScgJmBreE2 + Zl4Zuw8WdNHoHeUmSRoTph6ZGKIPwYkCCvqfliZl8OZ00KAu/snUWCobxsCJF9HOVRO1scOWQoGPGKGJ + aV7aHMB6Cqa586JxpSXTYpVtBkSNIEqCoI+SMEUG9COPOGjz5g3SJEFz5D3ml5K/tI9ESJDId0qyjHJP + lnAKaEIog7s/yQJmGjbDFYk1RhLVszIuYmCJ7hUDKldEPRFeMh8CpMHY8MIM9pFfwL/pGw3DIpKFfZpe + CtUzkLOdFNArgqVQxgJeRkjOlE/TXY3/FaA3L9uGb6H7lH6KiZs0l2LBGZ6bmzz3SacftGsbJiZzjcaf + Q+u0xXx8m7tYrr0RR0K5Sbg3K5jgiJim2LtYqteGLEYQbQnCe2vL9MTE5g0b+H3tmoyvZlMxt8/YVaq9 + nLN6gXZf8Lko9qCp3xE+HXRR1OeUcFCZBYbAYZ08XbbkYsafYmG53Gy1qbncSn9BaSVhSk8aO7QAoeFi + eB4xMC+Zqo2usRGKzjCr40wWDrRhJ45m6ZiUORhSP6DjojwhZNRcamhramhpbaDeNy0mqKDWMVTqGuub + WlrYvLNnciVUUIs1Rcv9c+MrO2e27KoMLGQvrVpiLZAzrXeN/AoQak21pvbelu4hEgHbhxa6xrf2zuzu + XzgO58vUYc9cPPmSjWe+5qCnv/OoF33+iMu+c8Jr//j0t//zU+6pXvjT6ov+W/XCn8ly8V9UL/3b6iX/ + s/rSv6xe+cvqkz9SPfpVf7PreV9YPuOqsZ2ntA9OSv22+GDcE+NwAiT7hkb2LnMV190DcyIUHAa9/dl/ + 3ffCN5itIlrYq+L40PJFa3+QUH0pUL6uw/HN4sUU5lbpmyNMpgJqg8mVXPW1cMjFLaE3tBJJt8isX6R1 + govcfokYksXPU0XU75YkIJEJLzalrQ+ETRWZiHR2cetHkcebSATyJ2kt7Z29Hd3a1ztXccNsBV6/OKnr + KFpTKoQm0ZqY+JyfwptZBoNDMv0P9beghkxsQSMLDnmBSkZPKNTs7AQRKUZtKKDRDhlV1YuYLFLfJCUf + KWTKc1IGNX3eDCBB7cxqwXRCtizJwd0lPEcFxbGChplqj2zA6D882C+apGT7BdQpqI4ZEA7IxpJoNyCA + 5AtvHx4mXgjyyUq+6dLiDBhjomgkhbUoGNBRW1b1DrAEz0ugpAmPFCJohlXNRMyA0AKTCRAGLTfzskYr + kOvDMkWItho+WjTbvq75KRg71RgiC1cumMwqut1rI37RmNli6S5O/vi5iRZL/wprp5U0IeHSFR2V6yJ2 + pgyW44iIXHWkhJHwo01fsox7y6wwd4xpp6mb1KrDh4mdXt5qzoISWq592tTXqWHQV7jLoADkuaLi1N5x + cW5qzpqizZtZPD32Ks2tlea2CopgBoRZKgXmQr4s6OuOgSgvKUb6EkaZLFiTQ7xkZHIimM7jfdKfA1He + RX5EZ0O5rzw8Pzo4NVMmNNjSiy5a7hjoG5sdnd/YMrzY0BuriWpN0eahxeHFbWKQsRKjgSbOrTramvar + 2C01ZaCfuHFIhG/pGaaaaMfwIkDYM7m7d/a4oU2PnTni/JUzXrnzGW84/MUfOeYVXz/ppp+e+a7/dc6n + q8/8VvWFf1R96f+oXvyr6iX/o3rFb6rXVqvXVauv/l31Ff9UffF/rz7re9UnfPS3J9z48Pan3Ti6/YTW + nhFNqJCetyhy64KC39tGgIQp2vv2CZLGKXAizYxysFQuAe9rwCFavbVAqv3chNWFF835WdjS1AbWGzmz + y4xPlKpNlIfXBzyPSSX3Rn6CFq5PJj4cpKX22iq7DXQPudxBuwF8qliYMMYJpkUHw2xUSx5KOfx0sTAh + N7aUFEij/YkjIJg/xT6Kf5QRI8PIXGeJgIW5AaXg01sjOuhTe3M9OBw64A0N9S/MTTO2RiAMFUlMImM9 + 7pJCXryTDAW/mDXvI3JkhLx3+9aN83PTPkDngDA2DgQttm5dBoQc8EwFDVplHjb4lSdHRiZHRg3YYmwv + QziHmSByqs7p1M2e8ImLi9OLC9OeHTE/N/W4Mx+168Btpnm67AkMm3DqBNE3KDDCFN4yxNWAJTBDgwhw + XY4kzzKDlpvDxZBuX4B/PSeiGJsbljPJqQAU2S2xzzTLgudkmGzcsEiJn3RGUig9E9l/O3C6deOycLJs + JiSKKGyS8mhMkvzKseunoLenqoOLEFno2lEwyqFeGjf4xbJG0/nE2SiZENdLDaVAIPVeuTZl2FFJ0+67 + 5CFrpFqFVugN96xvIHDYRq8hW1/ghRZ0j3QwU0pDjDAJuHjwRfcQzaYZHubGMB+UbG0KitlwRzJ2W6mB + zvMT7Su7twwvbGroHBVGKLywq6Td50u90+U+bTcYmy5VBuYrg/OCjt6GyeCw7ojM4MZMgOFYPCxWVgYg + bG5r7uhp7RmCunUMCyPsntrdN3fcyLbHzx7z/C1PuObgC952+GWfOuaq+06+5ZePfd//hQ6e973qRX9W + feW/CARe8a/VV1err6tW31CtvqlavaNavaVaveE/qq/839Vnfrt6wmt/vnLmq/uXjqRtBQO4XRZ7RKC9 + RSm2p174On2halCkxnedB2N2bfFSm/2slhbpe5FMu84uLua63449cMkyO1zjqxVesmvJ9sYx0/4XpFEC + Sq+rXk6jgSI/NKhmKf+ssdsgglyYuznmsQEixs4tW5m96nsLfjC5oYw1CgRG+6iLKnatK/KFLKWIgkWv + WsRCgUHuXmlQ3oNEE1oMJuqoYF5EPqmSqjNo54i5Kv42s5ZbNHTZzZVSi5KUuOGtiExhYArgF1Aw7TUv + 5E9onySMQ/giF/TqXPLEQkqSSqFYaIWhs1YJsqYG/8LgS5WZwb7du3YsLszkgDCU+rTYmBhkgA36OqmZ + M1bvDOl6QqoUPGToj7AnDK9A7wJkRhnTQSvDs0QIFSQb6pufn5qeHnPyR/oE0UfCh6yhuLa90e0wqY5q + z20bI4515VOPGvIEjXdleR67TR11NJh0Crn5IeledhLNpTFWqmVurF55Nz2Y+jeuLFBrW680r3TKb4qq + LD0XE1up1ToIv2lqAObcorJa5miUSaX3CNswSTKAdPCzfNNsdpX/M5mQ5ZraRzEjEMFU548Omjqdm2oT + KrLQuwxZTQwIoyNDcvu0NI8Nj/B1AyI2Vricdu7YTDS9kCaht7Hl3oebOtVOoyUgjA/56KBGFMM0OkM8 + DpIDiFNwX6/FPnvRezNlrmagc0FVre3UrG5raehuah3p7J6aIiJYkmjfaEM7pLCzgT6APaMdw7Mtg3Ml + r6/tTZdY069YaO15V2vDJByQ/4UugPoXLEWAsLu1Z7B9YKJzZKFrYkvv7O7BlRMmDnrC4kkv2PaU6w+5 + 6J1HXv65o674/vGv+fMz3/3vT723+pwHqhf9efWqf6u+6nfVq39XvaFavb1afVu1ene1+q5q9d3V6nur + 1Tur1Ut/XX38h6qHXvyThZOuRG6ll+EeIZANOCygeu3+DIX9mM5LXuR69l8w76RvQU8n6FiYQ6SAtMb+ + 2SwUXa+3ES9hQFs7lzF/feT+4kratLKBQsEKhDLF46rNrsHwrChQuCvaMM+AFfI3MTpGmRi1imWphHbp + g4LtWitDp4iZTTRCoOKf+msydVRzJ+zG8zmpPbEMehbGBY7Zw4GpF87vf1RTa7Em0lDs5RbIYgaNRX2p + QAEZEcB4JHFL/8qnfGkGYWc7452SvBQLWxk9TRbz6pRpIUrPGjRtzcTPrP9DZH7BoxHDUWED65EbfDHF + YtNe0iU1hjja1U3Xq43VBVyBriljS0mb/ZnjdgkWahRQXuW7B7CMThkQDpooOFcPCC186GAJHheAsBYU + 5dg0Z59kDPyu/EpxmxyC+huDA1Yh0LDfz5WuCXTQGjmJj2aAGGqUnfP1yr05sKbS55Lu7ZftogyCBg4T + MSC0HGE9+Iqpit89l2Oapdyo5biGI9Yo9mk/CqkakUn9NbJ/3lZazK8PaRVmQ6PgdXv7YQftOubIQ1CD + uHUmR8fo82G1R/mXitPMwGLDJpvHhsTfJNJhKwP8JUTQ1th82813joM5L55S0gwjXb6itNYBO7cyw8jp + ZzrF51OtFYE0PsIaQ+o5C63nIX+ARWdfuXcC2ieAJ4VDwcL+EkVA+ydbh+YaMYUqEFYwiI4slQT/TBSN + EGjUcA+PwCYkg6JCd5C2zpau/tbe0fah2a6xjT0zBw4sH0fttIWTLtj25GsBwiMu//xRr7z/uOv+4rQ7 + //2JnxBp9PI/r75RIfDmavXN1eo7FQU/oED4vmr149XqB5UmPv8Pq495a/WgC/9g5qjLuie3079wT0cm + zWO1UZGlvOx7z6o9flDtBkpfHnlb6dpHEvWBOlvZr2SMkEu8AMnZpCtLqPBOhBlKJtqFXdDhpdQe7SFx + 7p7WplYRfot11DLxJLmXwv3jEFjURfNFEfXVzEGadZy3QSGmxhdmzRZlsRHKnrtHJtNFVclhG2buUxPj + g/39AQhzFZNDcwnqbJHtmM+XiBUpO6RThGOhVmr2kl2happlH+aAMBQLDTZFt2mEdMAAmVkXBUsJt1Kc + QN346ODs9DjiXpIRWJNdEFMaagCmGL0z1TGlXAZamjgY4ColdrwaAA9gC6jZMzY6ODlO0XABwqEkWGiY + ahzRUFDf28caMg5pUoin9KgjDt6wYTYL/im7dVmVdx24Y8vpp564QdokZT6dWuA0RbQmnDkAZoNMVLAe + g2CagUiT7u0X8XRDz8X0qjRp4oRJ3PJTxjJABoTp7Mdb+KKs8olsbGYZniAgU7GIHRb8xsoXQ3d70yRS + P1f4Uy5mCQTmsLD4ZxBFLNFWHzkHqedL8IQbZ2J0dHR4KOcpTeam0dedg8DCXRwpYLjN84zQcwp96AgA + GXMqaubkcQXbIeFSx9/YRRzQZEzjqGTCClOk0ie95qU0DP+2iTWGfHm00PbBhm7ttSsL+YLjoaZ27wwQ + aChYHpgbWtwxtLSz3I8uGqODeEotRrhHIBT6IoOfdiynwh1kpb27qXOgpRvj6ELn6Nbe2cOHtzxm+ohn + Lp/xigOefechF33iyMu/d9y1//2kW/7v6W+vPuXz1Zt+XX2/EkFQ8CPV6qcU/D6s+PfpavWr1eo9Coqv + +tfqsx+qPvqt1d0v+vn8SZd2T28iSLt2dE5Gax2vSe087qgjiCztA6T9l3pLQQrwY6td72vS+GC6maNm + fGK+rPrBar88XQJNsylsrpcs6b2QcUGbP7KZfpCbaMJNZUYhC/4lIfo6DUULtrdUHTXXuHjoskoxocc3 + e8aRC2ag7VD1WwpZa8UZW6ITIQw37IRBio0VMgut52WEEjSNWdIxV8xXBqdocL4khUPTyjIppfBwVJoC + 77EoHX+zPkpZjnyonBKSJSA3jOlzM1MgRJojYciRBv9gXQ5mCTwk/C+Wg6kVMA0IgTT7N6qdImnaS4J5 + EfCAN0rJCBAOKxAqKVRTjNHHQDENAu2Q+HdmagxHD7Lq2WedumXzkmm5rB8fHQJI+C6RQfZtWJzduWPT + 5MRw7XGmdDCTedXFY0FBYa4DvVMTo0tzszMcIpl8g4NSB11zLim6PUVOSGivmLWCSnXRvLmpUGUmZE04 + BIbwodiMMxWUz9q5c/OWzRvod+HJFWnU0DT5IiNUqOMinJ2e5OdOCnAHN40TxOiU0QzCJF6e3kEujUYN + RnQaZ4o+H02Df+nKJJroMQ7HNhkWUoKYjh4uMvm4oYN1GmFJQVGGutT3F4eyAITopeB1SRsKUhdNciSo + EUPJGDIlSBmkakzncKlrpEQGfWgrMVnqIWViJi6zhAY7xpdbRpbyXBBEVBQEC9d+ECjCCW7JYkIKm1ob + W9qpskYPwuauyfZ+Co1Sa/v40e1nzxx5wYZHX7f9Ge8+9OKvHvOqXxz/2v9z6hurhAlf9w9CAW/U0OBH + q9XPV6tfqFY/V61+pVr9ni5frlY/pOzw7f9Rvei/VZ/0meqJN/3ZylmXdk8ugr5rHB6SFnSey2jbpo3b + Nm9aDUUeEagzKvOI7CpP/LO/GN3JMaptuFj4Xqshn+0ouZjsz9zVtsp8LNusHuAFucPgMKoipoDkRBJ7 + idjDHH3Hx0YtQ9HVFZU9JeUgl9KrXdOyMEbMIwx6aTK3NTiUrAlVRJMlFE6z/F8MVgAgC+4AmguoBy9n + Fg0RQQM/zetKgTB6HGwsS/yixb7zRgg0Qd4YgzsM+bOmcEwKhGnbhEgWC13jY/OjrCdD6H/rDpRMDIyU + LuVD0cYpsGSEz6HCFdG60AJ0GefDS0JNMpTJSOkCOIGCLBbqU5lUoXFY6o5mZFFf4o1jY4NzsyI/Gwqq + 4zRQQ7GGjvSzf0KP/RrRnJua2LayTM1u0Mt1VOKgo1h8CtHKwV5oaKKXivjpkm9BDR4e7COfBHwVB1N/ + L9E75dbdKK4EIJPkE1WktZtHbR6hp4QaF4x00HhhsA17XVmrb27XDystDSOWJ7Wcisw+Uw8IQ/Cb90xP + joPcIf9Hp4Ayb9P0wTwWSgWJBBSLjDDjiJgGens2L28YHx1JEc7u65ihlEUuEkR0RUfucdYTXAecohrk + CBemyC4o2Xza6GBBYYpjUTo1z2bqcTQLW8mf5SarGlqiKAz4JyjYSwWZEs0FrY+ENJRgGRFSKBBoZtFp + OF/j4AJAmHUftKCg8UJf1hjcgWMphd5M3ZlYYkYy61soBFNpAQuHW7pn2gc3dU8c0r9wyvCWc6cOu3j5 + Mbcc8OyPHXLR94+64m9OfUP1yZ+vvvRPqlf9bfWyv69e/7vqO5QOfka54Neq1Qer1Qf0yRer1V9Xq/+n + Ktzx6n+rXvzL6pl3/dnCSc9v6Rldw3sCbFC7yGVATrWVveZK4WGukEfkgeSwc8fW6cmJtc5VFBP3+Ily + JdVL7edTtGZ3bge1llX9vsUP8auqAH6ef5NcduFpXgi16zXM9WyLhPfJRcwxS7lr5Xz8yx2NaliorM2B + 0ffxyY9/3CEHHWgvsbn6ZeR9BTm0Vh0tqDrWUMJShk35IX9DioTimtGxwEx0Svg4dVk3iYL7PMmUyGcK + Wo5z3ayJBAhtsEtjQoKCsZVSTErT1DQvGZN0k9Bh1CKFWca3lcqM5C8HhJ4OkeVFJD2PjO44/1st2c58 + nsLPViF/DmbBvWLkL9A+4XlU5pyaGvWVBk6CeRYOTNROVqJ2GilMMXhpaUbKe8p6QUp7EvRShdJUlYUO + Cm+jwKkYcwwve/HjAIQxbBmOkJ1MT41C6VIdNcYdc/JvqDCQFSYNzYStrltItYxGXCfoAQujp8ndv1Ej + zbpOOihC6M1uyg+6skT7jUlTxUVXp8Kn5lqoxl60jyZZhrnSo5mkH/3PCpmiSZhHLJ9BG+4O5YX+XO4X + AvwAasr/JsfGDt11AMZW7kd2xes2s9TK/lJul3fZrZpGMfLumBK34PjIKPKLmwMSgTRzzTgc5gWnwmy8 + zmTdBjEdu+S/gj24Nekg0dxVAvxo1UBVTukg0U+NGGF+3RMliKAUVNPmSl1DDWQf9E6Z7Ekf3KUdh0ws + HyBYaNDIW4QvRlHUQHFvHvLVtB9TS7mxvdJCb/rRlu7Z9sEtXeOH9i+cOrrjGbPHXL7xrDduf/qnD73k + p6fc+tsnfFQcoc/9gaQS4hq9TQOEoB3/goXfViCEFP64Wv2PavX/Vqvf1ZfAS7DzlDf8fHzXOXwKp0OH + 1DqETIyR/f0LC/OHH37I4x9/5rOf/dTnPufp55331Kc+9UlnnXnarl07xsZGVy8gt96vDgDMzU6TZb8W + PW3FN09N2D0EDrnAkOlHhopGm/UeSrIdJ4QqtNh2oqqeVh+t5X41/LAePUzDgTaVizZoAe+YaSSGIwpu + SM8Ho31aDtXuFuaJ1F7q7urymycCnt5dhZSJJDRYE9uQCH+EQKWDpA/iVZACpME1LllZIqb1uv6Zqkzc + 5GJCC9VEPWHZ+84XIdDHKdNF0/RBV0eTNvTCCCV6R5kQXKAhBdszBWMdr3yrdC994iAX0TFrwpcCYa4U + mWRHdJEI6IN+mggRjCoJ/1N6lzNqpnYYL4qWQZeLnwDbiITxopgZYCkAYSR/zvMMBQ0jU1+MrYwoGJEy + gmU05gT5VGhrCCgGVhoEVeGdWQm3BL+z3Pyo3xb9qEkqYazFoxkmmgFi1DC0S+S5eWoEDuXXNJdT6I3l + eqm5n2y6k9ZVZwMO3laCecPDA9gvDzxgK+vBP6qMIgUbEHrD3pqEirSLb2Yf5S0WXwz4lzSjqIHDmFAY + p4+AJW+VPjBhTbihZCKptyH4DUVeXl649KUXHH7YwQtSKjZjioqFBZtotkYDHIU0qiQcqBzQUpBtSOED + rTRKIIiRKa6iUSVE0IQtGioZEBIXFLNME+ooWmjryBIWGPhfibigksKSlBIdVLGUEmvUlJntnd604YBD + +2c3Cy4SRBTIZCGmGLAQl03j4OI6R2AbZENymqUVlps6GinA3UHd0TkLFg5uPH3ioGfPH3/F5rPfuvuF + Xz3u2l89+s2/O/sj1Wd+s/rCX1Qv/ycRSN9erd6llhn8MvdWq/dVqz+qVv9KUfBfq9Wfq1KKdoqI+qq/ + rx75qge7p45tovmvaCa4ibKxnhM8Pj5+4oknvPCFz7v++ivuuOPGu+56w/vf/5YPfehtH/nI2z/84bfx + /E133nj55S8+++zTt23bjGq2zq+6V5s5HwUkmFsZJq3xYDOa/XJxr9ahfm3Smb5KZu7pjz7pqCN3c1HG + OVSoxWCbGXNMGHN4qi7QdCJmyRXGAlPw87hgGhUIkz+DtMw/FvMl5AzEQvW2gd11rqyuxgvT1ku1Af+s + jmhMomIbRpOpqXGM73hH84EWGVbQ9abGxiCRkkQRzQjFSh/Ry16bPp+6G9IiW52dQhBTd6iJaUYITArz + xAmpL5NUjTG/vg/BDMTSMtC6BtqTXFOFpP+tkJjQycGJVJqHF3Al7/NUILRYXaBT9oSs9oSZBbAMUqfq + nACYIhOYEcKN9kR6M/GqWWNUJg1rEsIX1g/JZiGsqB2dgnyqgmoMIkpRGIXw4M3x6KADqqivvn09U6vs + Sr81Hzc9OWqSqanBEkm1Vhje0bCXaQR8VzJPIiMU+wxS8OaNSwQU3TXqvNDW8IOyGR3ytAJ7KKpumRV2 + SmNdBYkR8rkHH7R9ZXnBVjJVYg9Z+kTkhbwKFMn0K+vcW4wXsityFgkPJ0CYJFRkTQq9JLeLKF6MNFNK + zYBmNdVMYuH2nJ+feeYznjQzPVGIWaiKY7wwK4URfQAGbzmveMFe4FNqG1VINqL+jzg/Ewj0Mcd86Uxn + OYZa7cr0KfGLNrZIi0EZ1BrotTQ0N7O4/WBJmRen6JgW1B5uaBsutQ43tA6V2qkmSg/6KWpqI42G3Hm2 + JNdQ1FQUVKWMvZJluH4gzEZgjiHNLCRe2NI9TIG0rvHNvXOHDm8+bXL3M5Ye9crtT33boS/5CvbR09/2 + u6fcK2VlXv6Pkk1P7iBJhAAhxhlE0e8rHfxzBUJI4d8pKP6tPgEjX/jT6vJZn+we3z0yNs744uP7+PjY + SScdf8klL7ztthvuuuuO973vzSDfxz9+16c+9e7Pfvbuz3/+fV/4wvvvuecD9977QZ587GPvuPXWVz/x + iWfSy8qwgYf9bP7nXoGfb4zsQNLeHsGvsHO5ttZX9bT2qHwCxUtwo6mpCc/i8DlCxD8HwgCKyeQrzGhc + HbWX7IQYYhUmbvEqTxExvROyEEK8fUJ00DUWhgwqX0sZ3xwpDHdpGiZ0FKyVRj1HIkhDin95OpglBQKB + kEL35hWwsJA76MGbgrtP/7RQkFfY0igRg2AGhzIyMtqOT0hMy+pbslhBk4CRESlj8TNvNhtIiVPDQiv2 + hBRKMEyMl5r5YHStYLMsuD3TuF1m4wxWlyzO56iD9Z+ImoEWuigZ9NSqtp1k/G9EsDCioAIhaxznYogR + qRNOaYxQNlAEVQOOOXFyImqkp8GPw5YTEyMT40PJ8bsYG2E7Qn4UTuWEEDvU85PVoMlSCbUbVLCkxnZO + JpBy5vmlwBvkTYM9YNIqsdmPYlSPkz87PcH6WEXdIsQdHOrs7CSfm68+0wZoqoM0LUOaS67H30BLB4kf + ujgfas1kddfYP4IH907iHQ19eq2CkuUXxmliKDpfO4+MbXuLHe3tZgScaiMXioGZQBo9bg6KMhS46uOg + WIinxCGFEiJiaa0168UhSAZkPsLHZJ+++1Te1vDlsTx1dLU39zZNb5kcXSZfXg0yFiaEDrYPl9oghcMl + AI+K2xIszAKBTcNLvbNbO8c3lHt5ScKH64oRrg4Pqt6i20q2IVbSjuau/rb+8c5RPuaAoY3HTR7yxKVT + L9721FsPuehTx1/3R2fc9W9P+7JUGSWnkIIyCKTYRD+mxhlbgMO/rlb/qVr992r2+Bd10Dzuk/+x8ay7 + u8e3WttCTsRBB+168YsvvOWW69/y1te/+91v/OAH3/qxj931yU++69Offs9nP/teUPCeL7z/3ns+8MV7 + P/ilL33oy1/+8Fe/8pGvfPnDH/rgW1784vO3btlo/ElcsPuKRn5aGCLJyNlbNOWaZn649qc7mfPPSq8M + uzikTkRSfSYehmyYv3rSvzLyF8HPWaABYc4AHZWNoG/k54BZEDENIdjzWuMZTk6tQkKpVS1jUZMvkdy9 + JMNkE1ubutq/WSpxbhTIeu16moSXcFyjqEeqhUoS2OhgqBWiumjREGhp8jE0GLLK3C+jMimwMTkpxVBs + DDVvpzxXF0YaJrS0v5j0FhovWIKgpsx77eysWBq0gIFeDCyIe4N9Wh5FqqbJEltAADBYVPC52EvBAhoF + 0qArRhCyOJwvMKqJ0SE6Fyp0DZxw/OHPPf/clWW6DkG2IhCOkJAwECBN/S8iokpjh34+l9rW/Gu+mEgc + wzaKlMFxqokWwWXq4caMAg5J5ZcD6La8aclwNCi0Ma/DkS+KqwHRs1T9aA7KcitjDr5MINRNGviioqBZ + eVNar7RSqsXi9vQYocnaZgZOsZD1zPDYrbtMjTJOT4xTZUZTKcK15HMslR/wLctmSWUZ6wtGWo6Co6Ij + teOpU8MTrxER8C/ky9bPqS/cPnJnxdlnYpyx7tZSFKP2lvQAod3OMFf0J9V18ne9Nl/LGegSJEw3ttGG + 2xhxl+1NWrTZdnwkyfJFl18mBNLEY/v2zd2DXRSUKQ+UGnohm10l88iIcVS8o/K8XddkTScC4A0s7Nh5 + zGlzO46UeCE9CGWJWLhvZEjpqY2wnAwyK5icd7R0D3QMTnZPLPcvHTx2wKNmjn76htNevvXcOw+7+GuP + uuOvz/5w9dzPVS/4qQikACFOUYKFJNSTSoFGinHmL6rV3yZAyNOHqcf2m+rjPvLbpdNua+mdQsI/5pij + Lr/8ZbfffuPb3nbre97zxg9+6K0f/eg7PvHxdzoQfu7zd99zz/sFBb/4oS9/6cNf+fKHAMKvfvUjX/vq + Rz73ubuvv/7lO3Zs5uzv87cuvJEvL0XI9mZ3/PRWM7rwprqAahTNEg/SDcgHP2DbFirUFJDS8TLCYRBL + 41zM0wfrOEUTFuiXc07oz+Ni1EjtPshqLwU51O4lv6PE1dlJIxEVZ/JAWFcIzXhhjAhayDAtq5ERRMuR + iBJoAfwsO94CLbXWGFvDGEcgBxWLEcqqR3pBNXti8/1UFLWEazeOqnrWEUlGkEkjHQyaZ5YaoVBnfC5G + qhIh1FRQ6xcoNbIjm1EVTowwqgQKQiRJ8RYUBCn5Iq58ukXF8CNjZjGlIYTiAiIG4AHPDjxwy3HHHWql + ZDL+p7FDQTXTRUcyIJycHF5YQIoWILTt7V/ji0YK42fpp8jxRDgMGfdmQO1jRoKlk2/hQBipYS7qmUQ3 + A780aFTaZ5XkrDC3nWe3zoZzGMu0xtwJq2YQC5rbL+UOGpO7O7WXJE8kH5H4X/RGSVhRrcJ+SXBVMPvR + 0jPaoSl6r7zEjE3CWq3ae7JQsIjSoFaSm22gg/ZcgFDlfS+3ZtAYi675fSElmfDITI6PkSpSjxqGKaa8 + XRuWyU0kkJird2juNnd9E2lUeKawqlRHNHZoj3D3xz/FSZdhoUFdkJhAwZWlxQO3bSN5V/qWa4K8o2CB + +TlSFgY0SaCibDc5hV3NDT2Vhs6mhjaAEFI40tAxqE6ZUWRS9c4AhCKNOudDAm0b3ziwsLNtTCpxg4V9 + s1v7ZrY0WvXt/Xp4uzv5xpJ0T6Jhc2dPW9/I2OK2A448Y37X6aM7n7Bw8kt3Pfcdx17z/VPf+HdP/kL1 + 5X9bfX21eqvWVyPLHlD8bLX6DQ0WIoqmDyRT8PLK/1V9zDv/adujrjjrsY991VUvv/XW1771ra9/73vu + /MAH3oIi+jEFwk998t2f+cx7AyOEDn5R6CBEEBT82lc/+rWvyfKNb3wcsnjZZRcuLMwm0cb9OgF6KayV + VmGXQi3muQiw2scbkvHDU7LJLr50SzwyU5PjXL7xAsoigjo/oexO+nA4TKdg2QaJgzSQQl7jyt+4vET6 + rQNkAoTZbRABL9NJ/P4humBY6PdVcr9Zmd+MGqY3rbR20yLpqV8mZYRJHZnC0JBlCubML6t49mSEiuWv + 3CCToGBARDHH54AwG/XSbDMPJsUBNIykGPdRybQ3Xs47yljM2M1L8ImcLyZ2dbc88QCESWmxaHvJ0vV0 + jemHmTPT2J4G58JLoAt8K7JAgMpT3XuHhkMuhDll+De6Y0LUMOV/rogaI7QFImWpFBo7DGkVvkF0nIZU + iiT6qKHEkIkRIDO6bAKgGtNFLFU0zWRV+7LpYhOF9bhq45QlkELFS/HLuKE3QUH1zsT+hYQSd27dTJI+ + 5UkxwohTht+xT2QAB8LYn8Sbk2TeqxQLDe1C0k4MVyPpB5iMXXyTXFijgAaBuUR7vzu4ZZglrywu4qqw + 4ELdJk0KhM20UUG79WbXKRz6bcueYccAMlYagqlYAnmvg50Dod31CQvMINDiheyQDm4QZayCxFqVF8qD + +SkqMaelEKnJMUWzj6rUJdn00nSeaqL0HWTpKXUMlqQBPV3p+5UI0oCQnPoxzbJXdTSm1UctVLhgz/Tm + w44/5bDjTsJNs99AWDuK28BfaRyfmDrggENGJzeQd9+3cPDUoWduPOOiA559x5Gv+Opj3vqrJ33235/y + 5eozv1O96FfVG38nTlES7dFIH6pW/3eChP9PtfpNxcJr/7b6ghs/f/WVl70eRfTNr0MRJS4IEKo15h0f + TxihSKP3vP9LX/zgl7/8oa985cPg39e//rFvfONj3/zGx1m+9Y1PfOIT7zjvvHOJ7a0fAGMHhkCBzTzp + b+dPa1BZd4esr0VKSy1d7S3pfrgKuS0kVhwf6buS52HmJP9RbAzulGTOpU8pVlQmh1wCA8kjiVpnSinz + ygN3bEtqjYbwoe3ZLno0m4mRMZL2HPyiNJoTSAvzzTV1UUmNYPopGYfRCx5zpLK+g1n6RBgXYnHRWFBG + S7p0+lw7jfzZyryXXcep0D0nRwexlwcimNFBhsXQZd5JQJp8xoBIAtz09Lg6PKUKjDR/GOYkefukLI/C + qkuTrqB9IXJiaUTBtEx2lhcYlc+MDPmaAlTE1AXBOcUqwZIE5AIyGVAZwpnaGcEsQJq/FF8NW5LkAEr5 + Ss+mGInC6djYwOjYgOZChKjhUNQ8VUcNB5NyR2OQKSOkpM7GDfOcKAf1wC8DiGbnIa0hkBiLlBcOhKzK + zC+qzI8/ycew+K4lerr1qZBWwQ/NZILy3CiWc5hzhgdZI92J+/FvCxBa/Bjj6IalOf6NiTcZEPqlyOxK + M19jEJHLUrMMTSy1arppCDytC5GlEuZKDAZeaAJSlmIRwwravDPXnkJvl/p9YJwRcoxzU9NMiKGDducK + W8y4YMYdE1nUhpEUF8NwJ74YVVNt+OHNuByWFue4W+uywDie6daSRNGsNbXJoOiVDAoSCgG/9oGSNJ2X + lWKEQRGVReFQSGHoyiultz1e2DfbOrJhZvOu2S0HtY1u+D0AYRyvTRVTmtjc2Nbd1jfaPbU8uHLYxEGP + nTv+JRsf+9adz/r20Vf+DZ7SF/5x9erfhGLc76lWvx6x8HfV6v+sVn+qKRZ3/uKfrrru9htveNWdd958 + 1ztuhw6+731vih7RdxRjhBEIUUS//nWI4Me++c2Pf/tbn/z2Nz/xrW994tvf/sR733PHyScfs85KNPxi + yBjEeqyoKRcOOQvOz7gshoco4Nu1HlSrC2brx2PbMg+EYY2v5PpToaPRcnBqH4RG4ZcOhAkXTIOFwQij + kJ95R7l89bYJCYJi9KIe6cgoljC7uJ39uV/UXWfmVUsXu6nq6qIeFEzk0KzXTOIR8AlyoYKM9KmRLhZR + dKpngZF+4hr2s6Y5hXyJIIS6X1TCQjFAaNW2XBmLpDB0uWNA3LF90wE7t5Dutrw0l9guionzFgvMHC4a + 6lP8yzS9WDzMM+SyYmOmheYcJVrb2uu8pDTLtEpfEtLWNwQ0BgInsT3ncNEFY2mCsoBkgmoKk4aUPJ+b + Q8YcCWtYGRHU1oxBFscGEU4PPnDbxpXFJKciaKdBRI2oOTqqzhp130QsDB+NMywNTwaYDPpqoIbGCGkU + FaKnITkyVtWJZzhNpbcwoYCZ1CANDX7rAqHnUQj1p7uWtvllISS7ODND6NEix1x7O7ZvfMEFT19ZWbAp + l9fmdo0U+QHpkiJ/aJ9p7NDQLmJhViy+toJEKo3G6vNZED0XR4jp9h5u15uuTpy+RiC1cD53mbQA1hs8 + a7tWcMq4WOoYWYOFNXKU6qiMw9yJDo3JkJUfwUCTptZSM613paYMKFjSjkslSqwJKPZSbk14IV3ps4Iy + OGW0Jb3V2vb6ovakR6qvSQG29ZRY29thuqgBSnk4A39ySahW2tHSNYjFtGdq1/DWMxZOvPTgF3z0Ubf/ + 8omf+s0z76te+EdipSGJkNAgXBD76B9rQsUn/+k/rrz9/dde/fLbb7/hbW97/TvvugNG+N73goVvxilD + soSoo59416exjH7mvZ//HIxQpFEYIaIodFCIoODfJ7/znU99R//92tc+cuONryRYuJ5vB6IwOaOQgrFA + u5j8jXw3xtta8XM9e17nNoHrZYzQMyICBzUUjPMv0l29xURdKMxW5hVR/ZFC+kTqHfVpXQnFEsiP2YSJ + ZywLJ2S58x4d5Ix1dnVw3/pt5hC4mjSaBQjjZNaiIxYjzEIj3nc3pE+IiVSbgMeeEjEomOBcGJgscDg+ + OkyDOosg+hKig7HpblpYMlLAWFDGM+i1pqhEj3q7ABvcE0K8BoWBuTUxrWlptGNlw/yunVtHUE2Tmp9J + 4DBwRPM62kidJqF72bPUHRrzHELxT0O+vKvTdUvXPJ38BWXSAM/toM7VkEzRJ6cmRmBmPFeDzNjM9Bhs + j0JoAL9pqrYAabYfNmODTSuLRP4849DppplrUroZgBboHcnIqBPZuH1WzkbdNzlGGKVjT6PMSqcWgrJG + 0z2nJbL2LBkmKUCaNex1mdR+dErfHXrAAZs3LEUsbKd6NSu8UZdhYbzAQsUi6CDmLK3eTnl30hDliZYJ + FCUjTQdyC1iaRBGL7opGWjdwng8l1GlkH62kIWy/SpjQCV8aNSyWlEo5Yr3AYeB/PrzoUBNih1YmOY5K + OfDTeX9cI0BIKqG2oW+R+jIlqa8mi7JDQLGPfrwAm1YTpdC21dSO/SW89aDn0XfPNrCYWWa17hOrjdHM + nrs61+uT5CtIQbYmKvEUy6XQy6IRdbp/rG9++8TBZ2x49GU7n/Who175h6e/6zcX/bL6Fk23RxQlg+Kj + v6le9a5vv/LlL7v5ple/6U2vwyNz1123v+udd7znPXfeffebNEz49o+qOkruxGc+/R4cMQQCFQg/DCP8 + BkD4TQFC8O+79336vvvk3+9999PA5Atf9GxMWetCo70yw6xrj8WNXAFYmzXaZeHUMOrmgoJiNRNDTZo+ + WLi8cpHCNEcif4HqrCWAYoaCPDOuaRd6DAmkt0RIOYpxQQFF3sFR4ai0xivBKZMU1K4bz+ce5uvAxgz5 + 8AtgTxARJxpHnRS6RhR1pCZ88IccshNVSuqr1RSOscJpFg5k6CE+NzI0IKTQ+unIaGVcMJcs4dnT0TQY + CzFrBqEzQp4jr2EcZWAN5ba7O8zBD5LFTPngzoAIHnPUoaeddCxJC1Zv0zMc0jphnhWXQmCkOyHyl1HA + RPN0FwyvYjeVsmSe+R5VUIOfENiLzwHvlPnlsU0UToAQnseTR51y9FlnnjRDkoXaZeGF+sZBxEMDM/vT + hFOPGvJ8gQ65UyPxc80gEwKN7HZiQkRUB1Q/POeORk89jhidpVk+YjSUamU4yZvMcu29MUVSXCbw70gH + M6NTmlaYaqRckPA5pOwIk52EDOemp1DCuVQIHBIIM9jzGmx5LAzrbRveAhCCgriHSMOfnhqPKFiEQy0Z + mAbFPX0iS6VIowY+a7S7TJwmIb+eGzOIMXUt3PlgofcvlCdWiSax0oShwMalxDvj/lLXSI0PBV6oJgnz + qad+BnXzVWjlShTHEDJioYhOLSWpNdrR0NZR6uhsaO8q0XpCyq1JuRkBws7RjtGljomNobNS6Djo7SYi + 5pE72DPX0DkbFuAQLGT3ayd38+VJEhCnULlMlHP9MiC75WzTxnAN2VB03+bW5s7ezpH5gQ3HTh/+/AOf + 94GzPvDzC37yH6/6q+r1f1l9+Yd+funLLr/u2ituv+2GN7/5Fmwy73jHbe985x3vftcb736vq6Nv//jH + 7vqUZFC8+3OfvZvcQVyjGiMUadQYIUAoKPhdUPAz3/veZ77/vc/effcdxx13eMGEkgJUgYqtDXB7xMo0 + 1WGfsNJU0Oxfny4ZHZRm7fmqcmEyZbYcedSxzKTRQSPuiaBRK/SHNY6CYfZnxWXigwtGDWmhVlNtRJDj + TPFP4xZp9ELChGAnk2UDQmNsiUc0uMYjCmatvRlBYGMbNswxGbfRJIQJIyImtE+lTo38ZYv44mJQsJgs + mJnmA/JldDArQWI1SmwA9Zpq1gZBjRixjqiWOJmZQVQck+igVoSx3HBLcrCBPqYJig3Stb4UMtUdo5XP + QuTPA36h+KfxJwjcxNiQBQhtz0F+DH7OLB0wkjkBMAcneQI6BoAUYGMz1M4Tjj/s6KMPBv8c7Qz5LBw4 + Ep7L9gCn80tpZLhpCR4ZjiTQxwCEvqssZBhlWINSV2Xt7QaHmbyc1kE1mpik4ac2Xa87E7MsrOia173L + woS1cEgBBMo4aAnvUJ7U0yp4Qt69eGc6xUrq3mMmWDrZSjvdy/M0Vs320iixm4qiuTBhxg6jNToqpQaE + mWvG54U1hblFLGHer9Wvgi6aE2Ys177eYre1zW55Czcm91QSBwlTYS0c350LHyYxwzR86MpTOvgwNgGx + ff09mGNLJBwCGixS4zq6GaTvUotU3G4B/7oaOjtZSu3wQtRR1UVbeivt/R1D0y1DWlY067KU4V+WONil + KNiRYCGHvjYQUi+P7A1NTKZKQmiTsc9D+RpvlEGYgat/bGDDoVOHn7/82FtPeP57L3zJVVde8bKbbryW + 2jEwwre85Za3R1KokcI3f/ADb1Xv6F2f+ISQQlFHxS/zAfXLiFkGUvitb4o0et99nwYIvw8Kfv+zD9z/ + OQDyFa940fR0/QqiDM0Eh1PNE6TB8FC3hCl4TwFWyY6p9+CHlzKAlf1q21R3MhFx0fwxGRdU/06zTKFI + vWik57QcW434kOUU1tNIDRELWChXZkIHJWZu08yCNRTfGqU7auOCgRGSvZREB1NXW6ETb5IpHOIfaTjE + hwCTjPLFZcxuEGpqGyIGe16Yqoc0+RwQBlCMZlEN+cQWS7lMCTeLKiMMbZVypMENouRrU/FZgn9S6CRJ + qA8tloyjJFlxEvYjnx0OF8pJaz6AIWVe9DPpLyvmGcJmw70SupudgFq5NJqYWWI+gwBMRrxS4GHj8XFB + L4nw+aJAyHoWB7zxiSFdMzSeAKdHGdFFfXsneaqpgsrpYQTrqemo/om1WJigYKbrKt3sT4rGZY2f3FBq + qnKszpOrZlDIKRQGnyRRaBqotG3SmY0+91lO1l0ya7xl4nlPVyfTIVU76wWbw8rgF03TJ3z2Fp8krhkm + drlWKllxXassHw2lkheRjxpaQKHZRCPzoPn0NH1SO2f1AIcBIf9aBpQBoZvmeHrWGac87SmP4yMM5/Im + UmeHYZ6dj8LI9gxgHZ3tI6PDbR2tpSYoFEDYSMdB+i6V6A8vumiL8L/2PgBPRNF2GCECqRpkTB21f6Ul + E2HCEBE0gTSzyaQZ9IaFvuwR0uTbaoksnJZ4pdagdwU6tcc9126QIklbW8/xx5988cUvuuaaV77uddfd + cccNb3zjTWAhpPDtbxdS+B6NFL7//RYpzLyjqKOQwnvv/QB5hKRPfP1rH1WzzCfuU3UUILz//s/df/9n + H3jgcx/72FvPPPNkLpHaI9FYYG49lpCp8XFLhDeA8Hdpev6qNb45YzLbWAUm65wE2TIQuKiCBi6YCqf5 + /Tnnk3ciXjBBkyu3VG7W3sUOg4p5omB4k+iCZdRYoUcc06lcwSpt1zpTXaRFBUKrry13iM1Y9bZpgtoR + Ri3cb4U/2VjLTUlL3rh41mAulZ5qah4d8XlxAoGZmpTl1Dsd1A5w7l8vTM+9hnIKjV5KTfMFvbZW7D6v + pZnDEodI54JJ1mCnJQWGAJWWgS7kS0TlM6idniOYEkG0uKXFmcMPPxBXamCQAGGUQ81pafFCwnVHHH7g + 5k2LxQicIV8sB2ORPNFCNfPBAUwBD4QLdlBHJgc2I3n8iSI6PT1qWxZIpFHD9CX5aPm4IhJHBTUB3Swl + I6tck+ZsuJWG/W/bury4MB0qseWrBBRaJKrMSwJA6NzriRZuFuVngudJ9l5WEp2uFElr5bg+THpibDg4 + p0I2oZuKlf9p7k16IWVO0VXKcEfXaJEXRuNoKDTvsUNLMXQsTJKLQrdCmVAmFUfdLJOSwjhJFYzUe7nY + PdvWKB7avNeSo2SE4MmWzcs7tm+GLDk6xjEkJYZhbp3AZOZL0AI30uYIjZLipEQEqSxawhcjccF2dcq0 + N7Rq3e22npaegfa+oXJbn4Ai/7b3SzMKjDMdI6W+mebhDQikZYE9aUkYlFJvQxi6T+CXmWswOOTfdT+E + 1nCghe0ZNzk/KXOycd8Mh+veuWzIW1Ifyvj46LnnnvPyl7/suuuuJGvittte+4Y33HjnnTe9+c0SKXzH + O25/17veQE79+zxSGEkhCYXBMqOVZUilF1Io6ugnHQhBwQcf+Dxi6U03XbG4uK6zYL+n6ODliiTW4CPd + 79o0qzHIiH8qaCbNlWq3t1Odyp6GeQa9NSww4CWQQ98+po7mLTX1NCJiEQW5aiXAIDVz5aU0Oug3TJRK + XCCVJwaEgm8KhH7XxeeZQAoqM8eiLUBtsmCKizbVzS9Zu8E8IzQ6WCeD3nMH8wnyuYyIFBRtji9AmNNC + Q/f5fOgoU0SzkTRUEE2ax8Ys79hHIjakjbmAudy4rHyopIovL8+BcN6cyAZ6U0cNYIwCShxuYQonSzR8 + yhqjdykLdMET7ZT8BAvyWYDQeJ4Bnof6JJlvQmJ48qrgnGS+a8MmWePoaIhoQGgbO0YaEHoEMcQjR2Vv + BqX+iakwmxhwMrAMztKRfsu+t8ptsgS9NPxp6ihFsSkOcPxxhx100NZozc1VYgt+GSTrPjHuioMmxUKv + BBu10+x3j/mFeIlj0Rl5UihI6y9558KCV7mm1INdulmZ3Az2ktq5BRUkCRZkDtKkDEUxp7BwVyrUCWRa + 9kW9SCFKDnPVFuueFt0AAoc2NKXjQzKfdiwMQ5O0kZEuTgkKJqOVxA0JqFFWW0iedlwS5RNQ7JRYYHt/ + Y/fw4pYdKzsObOkd1fRBMY42NJNcONDQNVkemO9f2D6+srPSK3kUJSul5lww2EejXopZxiwz+/lAdgMS + GOVSskJ8iKUuBWJcT1GzQCKdNnFqd+066IILnveKV1z2mutfBSN8/etfg2tUsfDmt7z5FnPNvPvdb3BS + KK6ZaB/9nNZagxRKWv1XPvz1r2kGxbc/gTpKgNDoIED40INfuOee9z3xiacXSCED/hol0Di2LnyQpPep + 4LifJ9Axb/37ST8T2xnZqQHfkuQK89HUAqGhXdBOA/7JZWpwGKtCZPFtu7L5FNIK7XKujZPbGhdPjBfW + xhuYR/msM51+eiTf7DDmy01ntdzetI/ZuLREECIwwgCHxfTBOFhkomjdUjKeRB+tMTZhj70jgL3QXsBy + JORV7zlQyKCvBcICI7QRFhsFY7TkQmjiNpAGBhAgZJhOm0gYz2NLQwgGdyN5QTjV/gwxX1CQL3XE1AbP + WKO8TUJ6CoQBkAIa6UfYsnl58dgjDoFuRoeLMMIIbxkQAlcRCAXeeE6kkEXRLqCmyZuW/+4b1/LFhGXK + xgaWAQ4TSdYzFHNsVYDTshJJ3ld9WI2jgf5qWDS4ZxUaTRelAtxjTjt+90HbY5WZHn4LEaW1FbB6Z6xJ + RXAzGRBq1NBfikHERBRNK6sll02YV2k9mtCiUmXSnE0m7XnJNZnXSD2nMLXMFKpyxz9jh07PuI0xQu3Z + KwH4rJF9zp6WL71md6Vm0HdbSkPCC617TGOTdLojodCyKYJLPDUNJFgYsrCsm62ZD2yc4SPYWw770j+k + vnZbSXpNiDXUQoCSI6ENeMmUb+yb6p/b0juzqdI7XeoACwcFCFuAw/GGDjpRzDUNzrcMTEu5NSk0E/II + V+GFSYk1jgE7DLMAH4s5Vv7MGE+pxISdhh21PRz4Zpy9Ahqk5sbC+C79kbW4ztrjPu6I448/4cUvfuGV + V17+mte86qabrqW46K23viYTSN8SBdL3vPHuu+98v+XXazaFOUgtWEjdbVwzZh81ywyW0fs1RvjQg5// + wUP3PPjg52+99VUpKeRbE8dH4F8/Mu3Plump0Ith1Z2laGeSBBuLhas52JHs7Qn4ZV5kjwIa8zOyXmCB + Qe/IZcKGjS05tzDd89sgzg0zjKzRVYp0MGeWyTfgLUqj0q27ZcfmzccdfjjuhJhBUb/vPCEKJtpKBLMS + M1lafdBFsx7i6uVLC6clcGg9d2JtydQgY07RkEyWNJdQUGTczPIFzY6P4GYkLyuWpi3UrVWCr/QkCsqk + HXXYwbsO2AIK0ioB3hbKhKoTxEb22dnxXQduQZkURui1rWNRGE8HhOTBhJyBFS0wxvZGB5YWZrZtWZ6Y + GHZaZmSOJSNqgeEJ8pnmads4EAYwk5WyAf/qS/w7wpPaj7aUxBBiDDuMNDSyw4CX0adjf2K04YDZoc0D + rBtGZi5Vcjw9NWY1dMxHIzOP4f6jDjnokAN3qrkGO5J4kYiwrqzMLy3NxiTCAITePzmI2LElpPfv9Wsg + sQ0nE6lEPPDapN6houAgjaHrKNpHAb+QRKF/BrHUntsGMvmLVlKphaapSu4XdWhMpph1OveGGzZWAJaN + 6xRdi6H9PBd0nTOFwzw0ZhDocJgJUfIsk6MAX4kLWid6iGCbBv/gfKGz0kSJYjHWQYmle67UPtPQPtHQ + MdbQPt7QNtPQNjsws+OAY04dXtwe0upDz3pqrUmJmZAsUfuEAZHh45CDd2IoSoFQ3BZR2+RQlzfMH3H4 + Qb29PbXj9GomkdV0vz2iIG+k5NTpp5/+kpe82IDwhhtfffNN14GFt932mtvvuEEE0jfd8ta3IJCqgxRe + GFPsLbNQOlF8UjpRfOHzmkqhJWa+IaTwk7hGEyD8wo9+eO8Xv/j+xz/+NC/myXBPighXQu3xC53dE4Tv + ByjWwUAHPxdI9bIpUYyE/p/OrWvRNEHEFB2zeVd0h9pMzTWKMHFLXpW5nDItUf8NCxNqaGFzX0LkwIIH + KSks6KJ1syZ0ZWgfk9zAjbBAavnPTU4xO0kYYVp6UaghvboOO/jAidERS5yoq4vGAGELKV/4S/H2BTuD + 5sing1qGdhER6yXRh9wyc1IIEAqNsKqVSia0xVKkGt4PSFiIFwNLkyUsiMggfu4Tzjj2mEOF2ZD8IOxq + OK0Xw+AOtCxvmJX+75hlikVhhCoZhTJAciCMKqUbUuBhAoRRzAxkzvicIxw5gqRMKEE0CjhiGMl6WSIp + ZAPeyKtIsraBwPDM6NLSNLCNQSbjhZl2KrQyKqgBXI0guqBqnh19b+CvGxZnVpbmhDEbEJqbNKZ/cDZm + psZ279y+YWHWAod2quWkjZP4McQTzgkiM//SzxIUZK6g9dUyK5Phn3Zx0qJrgSxqbaBYQj2XX5+0KrQ+ + zLIkEympPioWUwoXWpPnYq2ZutKFQZ01Dkz8pZZxn5WeCWaxluYNS/MHH7hDhJOkQn2URkPPXu/xadDo + eRTyvKYavqs4VhAxLmkEJNz7Ia0iGSJ8oDA66FPw5HlcT/cGqn/Ts7Cppb25HatfqQIWtkuyIPE/RUEK + isLwSj304J2RkB7hPTLiO+ca2mcBP4FAELFDkiJGlg48+MTTu6e3aE1tOjRpoRkpOqqdKNQ7U0p705tw + yoNhDoTzUbXuUM4pSKHRt6GcJEf/iOQGZPtsbJyanHzSk5508cUXXXXV5dddd9VrX3v1jTe++nU3I5B6 + sPBmsikkWPj22xQOkUmhhiRUCDXER/rRj9KSQgqQWlqhCKRf/yj2UeKC+GUiI/zCD39470MPfeHmm68A + 6dGt1/4ixLr6eigntlZx0f0AwuyttXMFW+Ocj3AaqSz2k6WYp2k3gVfmxIY457KVq1yXqUfUNpNaEvxr + wQMvrlaLfB459yc10mhyI8UcpgIc5rvJpCW2G4kpMO4hz7pBxo0DsQxVE8lbzOfoW+kO0nRwYQDCPs55 + s07fdM/Zvo1SWXMMc8YLeZFGPJkdVGM/bgqNXQZDpoRtFlvPF8wUyght9NQ6zjkgTMptFwqAuS+GYZ1h + enZ2wsJdpmp6e7+0Y0OaXV7IfEj/VElTWJrF7VKSFxPeQ3wuiJPIngHzRPYkAkc1MdtDBntBFx0hI1Ch + cdiQ0qmkbYmVRnFRGKGEFUU4zeDW9FV5bwg9ivu0eHgZEAZpV74CaZGaAWlnwIOIllOBcDo/S91p+g5m + qfRejgB0ZGIxP48xl5wWE6uzLh95E1NaEl1nNj7jSdRRnz+JbSppxRxKdatHlKuFQp0saOwxxTDr0JQm + UdQiIrSVlIxCU18z1Njt4IyQzegsyG2SN53lcpNWlUmt0lPEwpyPJl8WKhNFdb7LDUW53JmJCSJ/JifV + 0MF0qh1k0tzopEAoi9QhE3MfQ47wwhgmRBQNQNg1CeCVOmZLXXPE9uRfsJAsCIFGjfaxBoyM6fOCeWqZ + ob6MPvGu9LqNBwh5znFbv6t9G8G1OzkJGBgREZfXShks7r/GS8lZ5ZdF3BobGdm2deszn/kMgPCKKy57 + 9auvuP76V93w2mtuMiy85TVinCGb4k6wkISK1+Mjfdtbb5W0CnXQSNQwFJ2h4sw70UgxkX7pSx9EICVl + AlKIZQZSiCj6gx/cAyP88cNfuvfeu5/4xMdABMNBrkL7+IJcxmvPGFY7jXZ+at/rH5U8ccwLkJbSwZr9 + C0TqjyiVKRQvwzVWW2QtTMCS7id5Ohiv13g111JAZ4R5LMxcZBogzBKS0udc6Uw1uFvsZotLeB7np6FM + cLhdW2K8MNYaTtMkIiiG7vPoQqaLFrmglnDEvEdVQ+0voVnMHW0MlCyaSigzdGb6RhBTU0waAvTnBpDp + Qlb+vOZTU3bLc9FSFCx4RBmUd+3aeuThu9z2UkgTpMqatJjIp81lBdJirU7PpUuLsxh5MkYIDlECDRMp + lhaDQIEc97YYOFn+Q/g3RPtM8xSQE5QKUUAjeawMdFA3sMXoI5+1sjKnG4SXdH3yERHn7OMMBScns2ii + i66J+yYcpHtwjOAaEBZSLHx9mjjhcGhPrBOTOZVk0V4flET35IpsvQGkunwL/SiKLXyLCrnVHdXSo7F1 + CfhkjFCWfFW/vHEml+cj7VBqSsYX6s64fYzUCGaTaQ3CGmpoUUOdZSYhiQh7oe5abR5FYV5r97UNAtzR + ZE5SkjRYSJX/GQuU4SLoR2FinQxBXrUjjFchfGOZXpIv0S5hQrBQgoU9DR0D9JQodRIUVCLYNVvq1dSI + njmWpqHFjolN0l/X2yrxEiVmWNKEwtQpA/gJjqprFATlyHLhwH3CQ04BJTdJHVuP7GmfwBXB6eM38Q8k + HEOGEpec9D3YuPEZzwhAePXVr7z22isVC6+WYOHrrr/1ltfcrlioCRU3k1PxZpY33yIZ9295PRwRsVTZ + 4Vs+8uG3U30NLCSzUBykSgqJFAopfOBzcMEf/vCeHz/8xR/+4J5bbrlyfn6ag+GQGE3X/0XWecLME7v2 + bnmV5i1MU5mcFXbrjFDdmykltYIOFfQQjFgpQZT5Xeh1WTdlMBMrXLWwJ+yEJsYnnnC0Zstk1SJM68gb + RMOfwVad9ZooJudiuQao8LmPjY7ogeWqjEo7GFty6RN0L0vNb6GORop/hThKmoaVhQbVpF4w6eVrqmXJ + XolrJgd1Og6qKbRmyAM+mekDhMzco+fCOs6HHO2IghntoEf8MUcfctqpxxoQ2qidYGEoGGa9I1K6E1VQ + rz0WhUHtiBStLoE5gRywMWTJQAdVYDQPi2uPCoSZOGkIZ8CWIJxhoTA8X2mICNCyf/5V/jdEL9+NK5wJ + 2jLIlrpeKs7wxADYWKOJn0E7nZbPUriNhDIyy0AiVSYNuBiTNMT7Gs+MBQ7T3Awzy6TmWy/KGk6yoaCa + ZQz/EAO0tULSswkItB5YWaK9RX/13/xloEwx69ykKnpImUh6eFlAOoSlTYdY47L0kmzWXFpashDkzufa + R3dYyCn00GCaUF/MKazfkoIsQ0roW/Go7N6sxb8k5KFCUcyhQlFjuJDch6QHhfBFVXBTmTQZbQwscxpV + +AN1FJso0UFJn1DXDKQQaRQXaDfSqPQRLPXPlfpDagTJEoMLO1son+3JEuAfTQf7Y4m1aBzNiosCmZI7 + oZwSIHxEHnwhAo0pqq29W7Yn3kNZPWoz4NPhNMloXq6Q7WlBuIX5hac//ekveclFr3jFpVdd9Yqrr3nl + q199JfbRG2+45nU3XXvr666//dbXvuH2G954x01g4RvfeDNWUl/edKfkGqKXvvvdknH/oQ+JfYbkQkyk + CKTU4BZSiGXm/s9BCpFGAcI/+MmX7733fWeecbJMlpS6PSKnZf07EZxTVXOov396YqJuhJK9wagkqV+B + 0KHRRQZbibFLBf3G6UkM8WN8oaippjOv7BI0CdRmavFJw/Dw0DFHHTY6OhxXeoZszjVq/E8fWcelxD6a + g0NuCH5uK/ldDE6EmzNJe4qtB+P01stnhPrabhBNjAMhauIQiKBKa1X1atcAIeOR1lrzsSkpq52rqR1S + quNIZ+MgU/vICMPwx7C7hXKTizNuvpcuu3VSBkOLCTXLSPtcsNB8H14JzHMEPQsw1jkLhVRiubIQG0uJ + UcxbMIFREyHy+XxRikTnNKaV0zP5E+xcXJwCuhzJTOS0Ja4Mz+fmxjduRMUdj5JpiBpOqSjKxrOzYwfu + 2Lx10wa32ETAEyAk/2/D0oy4aSLvdKU0S9VPYNsdN5YEIhCoPhp5biZYawVV055JyHR+tuGhWZNMAUJz + 5+qf3ssp9EyO9lGrOxOUcJcEDBet3FpiIvUWvhkipkBozwtA6OW5CxhZm3RvxSLSzMKazKLaGhT5lNwQ + I5TiG5s2bjho13ZM1GugoN/XeclHoklw310HbKPuinC5rP4iYxEG+06rxuzF1XxIiQ6+IjXUVELqy9B3 + sLfU1m+NJjRZvp8evMILpaeEJUWEmqI0FyRrogFcDMuccEFZI4tQQ+OF1CANqqnKpIKFioL7249w/SN9 + vS05oVNT4/PzM2n6IBty0rZs2vzMZzzjxS9+0aWXXnLFFS8nUggvVCy8Cl4IFt72utfc8frXvuG2G954 + +40Ch29QRLR/33gTWRb8CzskxeK9730TYuntt1/7qle99HU3X/WBD9z51a9+WOyj3/vMgw987gc/+MKP + fnTvT37ypYd/dO/NN7+S7jn79532990GVr6Xgv9WO4flaGVaUEZPHU0rucFkUoIRgNRg1yIcL21GllyO + qZThan4q9AcbtCulqxlkrAFhXcsoYGS3WUIHXRTN9aA3ybSQUJgmSJk66mlVdUup2dxZ+n1rzdJCWRl3 + K5hI5ZN0nO4MZ1b+WEe0UFw74wFpblkODjsYmnfs2Dg7NymkMIQGk6z5XmUe/SEi5TndDLveJikwmNgw + QRMEQ9UYTx6w5LmoiGqLhpCfHoHBEvjy4Gf0y2OExu08mJdG9czkaQyP6jbT0/JcyJ86Pw0FbTFqCM6J + 9BrXKLcbmZ+b2LRxYWlxWjaYGdtOwvv8pAcCg9FG98Z7cyAafDcx3KiBw8hfA2B73oWfk9SPanqp112T + nIrB0I7D6/I4KRQiONxH2QEyKxQX6aaUVSUVvmicPsujyAqw+SWRdm6yiHIIJ2sSjruOIy8sksJCSdJY + zCEApNd/qAeEuVZNXlwpgcOQXCQ0MVdrpqC7CBASWZwYH1WxNKtB6qCY3tGKglY6Q6e/lQrhCLqNSV5g + UoI4xlxCMZZELHUHaZh2u6E9pYYyDCkpjFVjtJoorhlaD4KF3aMlzC8RCEN97f7Z0tBcw+Bsw8BcCQgM + y4I+WQjUsFB6Oy00s78j9/69n9k6jLAgGDJKz8/OnnPOOS984Qtf9rKLIYUZFl5LvPCq177m6ptuePXr + b74OLHzjrTfeeftNd75BFoAQCJTljhtJOmSBJsIOr7760tNOO+Hwww8+6aSjzz//yXfccd2997wf14xE + Ch/6vADhj7/0059+9Yv3vu/UU48zevqf8Fi3+prrMmEHlgfLjBPyDBRhqqj4Zz6aRBeNGxbkCL9qg54f + ZX2PCNoK7gcglpsqi5ZnRDDLHTSGmCIityJhfMozcpemU846ZpmmRsvtMwu4Sj2xE3eWO+ik0MuqBTd5 + NnAkNTty2VqxvlpaENkzKKAF2CgY44QdxjoysYJaGASzEKB6YcxnoYzBHYbBfJhUU9MolG7pORIpI5HA + Vcx+A5ampmi7F/oKuRkkTTCn1ZGM+EmNGGVFWV4gRDDN4TPvqCOKpzQ4/cpxvskRimIvLUyTpZAinCEf + JbZZHA5nZsQLE/6M8ULsrLsO2EqwkJcWFiZBOxM/LZvCPtQw1YXW9AAS+4xvHzTVNDc/pvmHDJA0cBjz + CHE/ibbMn150NHC+gZDNCUzyNXlvroJPDBwmddJDBmHIso9p9f8vd+8BH9d13fkPwAoSBAtIdAwGvVeC + YO+kRJHqvcuyJKsXq1jNsiV3S+69x457HDt2nGLHLXaKkzjFSVwTpztls+mb3WSzm83/e86597z73gzY + JDv5/OlnaDAYDAaD9+7vnnN+xUWHXg7GYApLtPeiMOjrHecWuZEz6TZ2jCFlgUFjU/BoQOO2MnYDpV9m + OqEoqGH0hSPbawYrGS7qwsCiMClMeHDBU8bWAQJWBit9dPZsIuit0bRHWrXCOE0964smO3VbtUxWvzp4 + p1ERio+MMkhJ3BUtBGWfHDRI65p7Sy2VutZKXUtv/ab+pa2D9ZsGBAI39tWBggKEVh3CkcmlEiqI6j3/ + Nf8xbDl69Oitt94KX+ahB+9/+OEHHn30Qa0LH4E7A48UTYW0SZ96yWu1NHzT6175ljc8yeFwiDcpQAit + 5qUvff4ll5w7Pz+zZcvs9m3zu3ZtvejCYy976UOf+tSP0CC1opDu6De+8fnf/I2fedET97W1t/wXfE+q + y8SkNSpd5byJe1r+hSJTz7jsfm+HWoGYQKB1+a0iDLWg3QO+YiLKFZWvCHPm9NXCCWOcGtvbL61q+YSN + 7ll6jpy5b9vWWa5zqwt98h+tFIOtolj0rsMBfnX1XNC9Y5KOaNIajf2opE8l+3TAz8DMpjuBMiOlYTYs + dMAzVj3LK7G6LLWpEYlzRBMftZgyH0ZQtgonmUrBIEbqv97erv6+cgqE3LayT7qdEu+XJQKmZmmp5NzY + oToaDNVhxKFM/Gecl1ifBcILgATOzU6Obp+fmRof6q10KOwFRkzZhoKKfIKIoCAVYaWDe7gdu6mAZTtF + IcViX18n9Rb9zxTnTIDhxWVKt7EvOV767NCg0ceEtiewQaNzUG0rEMrByCY1DlFUYWZRjg57sGYYDTLc + TWe0tmUppIVEC3W3TQ8zYB8NJk4LWYM0DgtzI8OIgjkD7tSV1KeD3jg1IHT8QyZbPR3PHAfzadX5GWHR + ccavxBhnb5qKzGjNr1m56iO508pBO7iqNetb/MVYhxhvcYWBvjZvKXyM7Sj7UjqsqUZEZf1h0YzXWnAT + FX9tGRY2deAXI2mCAoRSApY2VUqtlVJbL0d968Cy9uE6gHBjX6mlr66lv4QNNwefxmZpjGeK/NKnA4QS + l6Hr7w8CNigHZmdn4cvcdded99//XBqkDz8sdeFjjz30whc+8sQTzzf6jMkqntKpIXD4ZuDw9U++9Y1P + hQLxTU+ChXfffeuunds2z00vLMxu27p5+/b5nTu3nHPOGThuk1YPgxR/Ge2Ofu5b3/zCJz7xjsOHdj9N + gcTxTcxP5u2iBjTeSYJ2mdda2j7NaScSfUU1Ehbuyc0Ew3Qwk0/E3Vyaw+mDwJyjhLVDvQpMZumZj4wb + MqXloJPWTOdkXsCMjPfv2zE1NeKiYNnMUhQGc7Usg4bVpL2tBaJKsi/OeXMsRpDxfImqgU3ICjC+TCF9 + Ph0I0f3jWLe+kfVUvSslYqmwdCaiNEgZbjQabL1UOJELlLC+KJyOuKC7cWimEAAFuzpaerra+egMEdcI + Ojw4SEjlZxVYVL4bxjjnxRqe8QhoBzIN9HdPjQ1PT46AZAZyVghyo7envU+Rj8Nu9/V29Fb4VHExPAyG + Tnult4OPPZVQ9pnKorvbNRVeSrYavmY0HN7eZCrpuBgpMwEC0UjEAWeQRaaCCpubaiiHgJxyZ5K2p8oK + +fPRABjs7SHzIY1qSu25IxxmVb7RZ+zvW6CSut7GxTbWY49nVMHGL6sXMxRMOhZeCOaEE+jorRw0Jxr5 + lBGAlIxOJRVEDEVhCGZJ2yqpxN5uG9Tx6yAo6uxsc74Mu166OLrxtR5P0UomsAPCyCQojJlarGsUkVIe + AnMdUVuLcr3Q2guWtr7woFm+om5lo0bSr6tbjY9aq/vFKGWmt24jFWFvqb2v1NZfaumv42NrX12r3mjr + K7X3lzr6Sq39AQuta2oFYpgdnm5FyOsjaLBx+SrLba/+xy+JbAtrrpNZ92s+hsiySy655I477rjnnrvu + v/9esBDf0UcfDW1SnLjBQisNAxxKdQgcvuItr3vybW946m1vfOqtb37Vq1/1kmuuuYxacH7zzBaAcNvm + HTu20CPdtWuBkPrnPvemD3/4zdSF6Ci+/ts/961vfvFrX/upBx+8lazU037Z0rckjlj/yCfzJDUfJB1O + NXlPniF7vnAakVAC7MSfkm8syIP1nsxcJj35YhWYTQTzysJ8izQXQFiAxtAFLfRCvS+Kwgk9jG0wfTpo + cJgPnQgbVenrqjTKM3gzT/1sn2tZE1LkxYt/UVtR46knHAQt/iJ5zxYp36EnEBimg7aipdJp1j4b3WXq + wKhFy3fSsgGhK9WclAgKap0XOnKanBC4o1b/Vbo6B8s9nW2io7c0eSv4BsrliYGhSjf69I1WGkb8y8R5 + mclZlPqNjfVv2TJhUfKmc0gLMsNFGw1SycFe6evr2rowuXkWGkx7f29HH7UdB7DX0zZQaR/q6xzs7Rjs + bR/q7Rzu7xrul08H5B75aA+W7+rt5NulUrSWaSwrpb8q4CqHt1jlRmCZZr1TI69GGk50cQskUtd7hDQM + o8+4jMRqaPtLCRDKIW8yd4o3aXeb3S9oSh86MpWwJI08UhkQBrpvuGEqiyC3iCiYhRcmDgxaEUZzmYiF + Pi/MHItsgpjQSkMWZsqgqdEU1fRpgNBOfp4EUSy7sQKDNOprHQvTSIqQ0+uaQi5JMhFnZ8ZZtO3i5Usd + 7a1trZsSIHTJRFYOyq28cNA7qKEcDPqJdKkx6kxOXKifJg0rX87qSxbJVI+J/8o1BC3JmBC+zNpud9MW + IGzuq6MLugkUBAtBPj0Avy6Ofjm69R7BQu2UNvdry9QQ8Wm0Ri1rkC3CYqs9O4LRkcGTTb6thRhr1qw5 + cODALbfcQlF4771333ffc5kXPvTQ/ToyfPAFjz1Em/QJbZNSGor7zCtMaPhiEVe89hVUh29746te9YrH + r736UjqiCwtzW2M5uHv3tj17OLYePrznrrtu+MiH38KwkKLwd3/389/61hd+7KNv3blz/iRhrCbUGfqc + EAVrPmaxb7TnM081yiAqKAbzHMnZk2GeDRGzc6lKTR/LwUJTNPQrIte5SJwxAIvksUwvqB2SUC9GCAz8 + F1GvN2TRE4UkwqwtoztTlRJmXqNOAddyMFzPrBFsVBktV5NloulUqAshChHP64Itn8qggqenygLE2sEK + qOvUam6zkHlTVLMmwlqWSqTbWjb2dHVITI8k7tpcMKv2ErGg2ZGEldSAMD2kFulsgaPBAi0c0aigsNpF + gLCzow/Kb+tGkYe3yWKtK3tzuaMNdYJkxKs5pwIbgU05X2x3ZglaiK7W2dnRPbu3UN5lVVekvQjYKDKh + fIACOjjQPTLUMzHWd9Vlx/bsmAH2Rvo7R/s4OsY4ejvG+zqmBjrj0TU91D092D010MUxPVSeHOzmkSN9 + nSMAZF/nQF8H8EnFVUnGitZclWIxNlSt0WpFISybvbsXJsYH0pfqjFMrCgO7x8QYaliTsGqDhoT9gUwK + Y50dLWaaRoZ7zz66f37zuALh+o1qz2ZJkHllYSqxz4a7sWuasmYSmY1GkVQTR6s9ifKVou3GMllF6O1b + cJiLf6IZaZDJxsQJuSI2SORTriJMCGUFk3oHP1PupvrdyGUz3nm42KOnjE9AfO+b8ekUDFO+qO+kpSSw + 0tD6qD6RKcBeTRBUygwxFKAgobxg88oljAyZFEprtLJkQ+/S5t56UNCHhToUFCykHLQqEAgsD5Z6++t6 + gcOBEi3T1pG6TUOGhREINb/w6f/j1co7ujRXGvJbm4jt+M9vxVPNh3FnX1/fpZdeevvtt4OF2K3dd989 + D9x/74MPPmAjQ2fQ0CmFUAqJxuBQmqVPidwQicXrX/Oyh59317nnnEkVuGMHTVFqwa2g4L592/fv37Fv + 73boM/ffdzPzQoaFX//6Z7/97S/+2q99+rbbrsVp9+m/M6f0DAaBhl7+jemdxnyhVhLdZ/0SRumgA+Wn + AWREytotBt9/xbowbL6S87IaFLMT105lrHi72ttAYqWHGfJVXx7BkDDVJLleoiCcSN2e4mUZDGWKo8Hl + ZHPLlpZijo4orwRSQGyKptFL8uao6EpM1AhI9c21LzShf6VACJgBkOoFul6BMAuWK4x8zEobbOpsFzaN + DQWNHZq6ZsfiL1QPhO5GmkwmULMBlSnbotYtlIMGhD4UND2AOa14USjp8DoeAx6ie1nmCxOhQqzOIvkz + NB55fEr4VM8XwaT+vq6hwfLUxMBgf1d/pX2gtx0kmx7pmQTbBjrnhrrnhro2D3bND3ZuGezaMdqze6Jv + +0h5+3A3x46R8o7R8rbhbo6FoW4ewCN5/KwC5MRA12hvx1Bv+6AWlIKI2lyVsaIeInOM1SG3Ab99exZu + vfHq+blxebVBqq/iCrc2De6mwe/UnNsiEGqkVJQVyh6iYyOixtAgVWUhn05NyuxTELRN3UqjgtOUhb5f + MX1hqiyUe5REyh9dKdlrVVoaBKbqqZZOB8PtzHdGpYfxvPJgppB5WeCLVheF5hRfRR+Vs72wKaSnopnA + wjgzNin7UeT81JHKmslYo4VR/UloJ8Il7wNCVv6OttaB3opqJJxeXuSZs3zoizESX8qUSVVbhbVLiaOS + vrScMDlZbQhxJ81h1Zr6tS1LmnvWtPWv7xxc0dIPFjpxxggyMhpsUyzsHCr1jJb6hkt9g6WesbrOyVLH + RKltrNQyUto0GODQeDRP/x80v4mJkXJ37YRbfjne/8WmbpIcu2zFYmF+Nim85pprwMK7wcJ77oI7E9uk + wqB5/qMPMjWERKODQ/QVgUcDHHIwOySz4rWveekjDz/36qsvOXLkwN492wHCvQKEO4inP3hw14H9O887 + 78zXvOaFX/nKxxHXf/tbX/z93/vyBz7w+snJkaf/zhznGeRsiONVhzF7fAqFDm81MDJ5cNICdce1XGu0 + ejSd3sMJ2tS0BihKyF0ZTca5M9R2lGKJaD4wRb0vKs6Eeb5oSjyr5qRZgzQeyhHVjJciRyZLX5KrWpaD + qKAyLHQeQSaij9vnQE+PDVL16bCtd+b64SYguQyKUBEKG95VYmayZc6iBoeRPuMrpqykPMwVacliGpiK + CVNjLaMp132HFCEFQnNWM3Oy6JYScnTjCNCcX5QLGn3LgkGMOLkI9bQHYbtL4GPz00Z9gog61RseKs/P + jY4OlYd6qeSk7Jvs75jp75jr79gy2AnU7Rrt2TVS5tgx1HXG3PDD1198wzn7d49yTzcf94z17B2rcMPu + sUdy7Bzt2T5aXhjunh/smunvnOzr5JmHtX062NupjVM5wGAFRUaJoVMKSs3NjplIP+OURjk/mn1THNrg + 0AQh2bjUvLm1FrSD5x8d7QcdfYdhQnugEUPXcle7Kg6DGakrO4PXjBbx8e9of9Zgm8dteoZ8DAazUURY + 8B5K3WsL1rX5U06w0ICwqK9XHX2BMpMSZxLuaLYd5CKVULO1a4LQiCi0RumCcKXEAWEsBKOU0BGxqhAM + WUtWLMYrXfbFWFnRO6U9M9jfOzk2il7QeqT+0atCu2HPYFtqX3yONyYkj1cs1gigWLNkOeybhlXsBBoa + lq1dvrp9/fqeSlNHX2P74NKN/UKZMUGhDAul+SkEGaaDnYOl8lhdz2SpZ6LEx/J0Xdd0qWOq1DlT6tpc + 6phO4PCZAEJqZ1qgvNc1133ePfpQiwEhi/7xGTfQR3ft2nXDDTfceecdd915J3kUWhpKm/TByCalOszg + UOSGz3/xS6xAfFzgUKrDl7z0pY898MCdz7ru8mPHDh84sItakIoQIDx4YOcllxx797tf9eUvf4JgJoDw + T//kq7/+tU8/67qL2Gj5b2ScqJOBRn4jBCH47NiEj1+8pqGMbKkWGa+mPyX1XfNKMY+U4e64m8pZj9rm + K+2RxopQ/iuNB2YDa9dVmJm0tehpmrG8vI+RP7mlgrf9oBFEHQV9k+jdUR8NVkkm8rYySUaMQ2AeC1M1 + fRARhl1w4AtU2arlgyZsKQHS2MizbQcLQxc0cwCJcUuJxbYXhXinIXtnHbSVzlHQpBRSFCZ1IQ1PXGPm + 5sZkDa3qiPraKl/Vxl3gNGaJsiFLAfwz8V/mnJL3jjG3l2CZplWj6AW1YRi/FHgxQfCg7dBYhElxRv03 + PtQzNzYw0d812dcxO9C5MNi1dahrx3D3TiCQA7Qb69k92kPlx/1nbZ2444pzLzm0/dCWse1jla0jPdvG + KttHK9u4MUJdWN4+0r1zpMy37BmvgJGCiBSOQ10LWlPOaE9VysT+LgaNo0M92+amxkf6tVMq1aEJNgpq + RZdeZAwaJQG5aartDKC94LXdR+caX9YIhFZS57y5kzliIJTGxEe+fXJ0mErRSnz9A+W80QNBJhgGBaaM + 74dquvHxVXk22g2J1j6hzyiPxkzX4ty6ptdMFMKaR1KRFGaeEs4aAztFOxudSL0uTGkyQa2bH9U7TUa/ + KmTvvNd2RgjgYof/0dPdtXHDhrbmjew0Ik00AGFKLI+ImGMk2FKTNKj8drgv006saKpf0bRsZdNKSCmN + y5dsqF9bblrb3Vy/bqNPCtVTNAAhk0KAUMrBbqrA0YCCAoeTpe7JEljYPV8qby2VF0pdM6XO8VLrkAwO + fwj/TjwuO+6LgFGwd+9eGKS33XYr3BkQEaH9c+PUEDhkcAinlNmhIuLDUiA+/qgK8AO5FA0+cEioIbSa + Rx6599Zbn3355Rece+6Zhw/vBRTvu/fmL3zhI7+sqRTf+N3P/ckf//L3v/8r73rnKyqVbntdnEmVSpkd + 0PHfK049Ejzgbwz0VUaHBw0IEdl0d9V2iil0QfP4V9QOpp3PmF9fMJcp8mJqNkkTqJOvox0fHxzuaG2l + tZ1+KTl3szPb9nrWFI039NrQKhBLHjqWVJbOlHF2jFxXVbZqzpexijBJTcscMVwyUVNE70ORAqHApVdJ + 7qCYyLAYoRR0IDSSQhgHJqFLin/uuC1MGdYy4Mr4EdYj9YgJDavzcaA00yYnhp5717N3bJ/jttUTVCRY + fUqDjlqEEiTJ2jWOjNZ/snxnbqIJQcY9YhJqjAb+xThAL48EOGOYg8OGmbw4OUVUDZRiFWlXMs/bPNK7 + e3xo23Bl21CXgB8wZug13L2Vbudw95aR8vxImQbpDN3O4fLUUHnzRP+uzWOYB0wOlemgzgKEM8PzE33M + C2eGy3PDPVtGeraO9myjKKSDqs9mB88JWC7os02BiyO92zCdGemzAtEGh0mnVAaHxpepklhoRRjLQSHT + ioq/e6CvGyA0c5nWVhFOuCu3uRCI2kQPV9yn8kHulxqxhZ6noGD4M6nKxW1IXT6fqimkYeDGQ2GrFLoF + 7JAgNvV0dtBQPY7vDBH2MarQFfdG8gr3H58+k5nrZlH1nlOWKXEdCBPJRCaWSFEw1oURCt0lI0bK2D6Y + b2ZtFKbRug18ezoFrKoLM/l8XGcMB0ssm4SEUzzwaToSsuBCcRzFYkbs1igNV9evXlFH6sGGpXVNK+sa + mkqrNpXWMC8UTWGU1YuzmtSFdEc7GBAOlCrDioVTAoRycGOu1LNFj1nuqeseX9o1/kPAwafxI6gXsV9d + shTizPT0NCRSuDN33CEjQ4577rlbO6WhOnREtPGh14hmSaP8UtVaPPViDEtf+pLnP/rofffcfcudd9z0 + 6icf/8TH3/OlL/04QMiY8Hvf+4W//Zvf+rVf/eThQ7vspXMCQanipDj+bwIG4EzGmYGpF7uxCKLYPa9O + /8Yn/3YkJaBhXoC26jZp0lOVBxZKwKQLKpTWlCBKG5I6h91cbNwX+hnJPNzYYRkQZuWgXQC0LaBHYbPk + QFgtFgz7UGVs867SReAyKEwH80Vhjv+dzEKqE0qDpt7mKP5RVxNphybDwrABp55TloGl74bE+SRlIrsz + 3ex7BeBLYaCPCmtGSkNgb6APkbbE/eg6u47aBR4m6ywkl76ebsBYSo1YDoKODKuId0hqF2IIpRY05zBn + gUoyQ0YTlf6ntAoj59O16tHJOjNFM4ARFxitAmF7jlEC9nfODXZRye0erQB+1H+CVSMCVJuHyzODXWAV + 5BfQbnK4Z2yoe3Swe3ZyYHZycGyoZ3S4PDJUpqHKMTnet2vb9MzEAA8YG+we18dPDffAnZkZKjMsnNeK + EBQMxeJYz07GioqvYOf4ALzTroHeTpQYsHXgmmLwxg3jlBoEhhtJs9SNcmyAKlkZWiOmHqSGhcGCNTqx + CbNU3dRkQBt3JNzTslHs7qwQdOtXGxA6CkZJjPQA5K8f5RM5UMx5D8meqb11E+dCNYkm9SO1DZnBXkJj + DmznnBObVoR2MhOlwtP6LtBM1zyeSZT1kWKWV9O773YulSKhdgeOd2R3C0ObJSJtjdptmlrCLzWGSNgf + p4TSwmKSqbOsQWr/eHJY+rwbLFs8EyLagYFeNr7as1pet1SBUOMJJaFwZSN+bnV0HxuARpEVllZtFMe1 + dT0iK1R1vBiqMSmkO9rZV+rpq+sdruuZVsybqgtwOCVt0vKMgGJ5sq4y2TA8dfLL8mk+kvVbg2/ED/o0 + /onjT70gEPPC/v7+Q4cOXX311TfddJPBoWEhJBoGhzRLkVgIHNIyfQhCDQWiaC2EU/MYQ0SpEV9sxjQW + 6vSql0KoQXFPigWxFdhzf/YzH8Z37Ru/+/m//Iuv/dVf/tpjj93JQnnyr1mZUSeV0FSTUmqw5+Dn2Jbs + kuRmOlC0HinnlPKSHP6KlFFvh9LHqPR0J7PAnLgnad9nvX5DvrT7nzY9rC9qj+FagTjAkC8ZM1Amuocv + LeIsEVTRji0CAghRShgupmN8lIP6mKKJTIqFcViyaB59JBcsTzbXmVjCOmOFojAZ80SvLNvj53b6YUAY + 41tdZBaohrTCeHLoKpap6wbQ6P+6Otso7GYmR8dHBoJ2MESrp+XLesE/koZagoUmTwU26DhQRmK2+gff + aqBC9ekhCylat1hFaDZm4mQGKQbeivI/J/u75oeE3kILFAikk0nnc2FYSC6UfdR845A/B7pG5IBEWh4d + 7mGUOAT5ZbyfY2S4h2NYD+ids9MjszMjU5OD9hgePzYMUvYoTHaPDXRPCKZ2g4hA7HYmjmPSNZXG6Wh5 + 6zCgS3XYDTDz2gYQZgx0w9yB4FoAQtVXBGapc2eMOutqEG4bt9akFHY7c+QJ+opMU2HvP9Rckjn4qBn3 + oVmdjHiDGYJmEwYD7lQn414KiZFCKAez/VOORBN0FPBZXK6jzYkguk/k9pnsR07gaDFjZzUPAwjZtwU1 + YWY0E7KZXEefCOrz5mp5yqhFD3LR8fxcZbad5TZjLwaBdl3HSWHmoZFfDXLrhq0nunikEJh5d8TNdxjf + sLjBzPjS5z722MP3UEvIWgdb1CBQPuqNFU2l5U11y3DibvLYehKaSlFib75r4i+KlMIqwu5RaYGW5+p6 + QL6JEjmFZSsNw1HXO1o3MHjy6/xpPpL3bqC/ApVmMSPpk39e3lHGO+VyGQYNiAih9KabbqRfSrPUSDRg + 4QMP3GdwGAtEQcRHHnnw0UcFEWmcRlpNqBEZIoKIOLG9591v+OhH3vmzP/OhX/yFT/7BH/zi9//sVz/6 + 0TdNTg6f/Ms71UcWMC/9dh/g6clk+FcoBzPQJHeir7dsRuHV8kEDSL7E9m1qfGxh86zNLFPY8zNVrwRp + cfi/qhM9yCSqJoJhJ+gDwqq5YA4FI/IFl+28Wb57qrl83shvWSp9cJPR/a+5bGQ0mXzWBAyIltZmo6cb + HDKSickAq2hJOW0hTgSBPWmHOg8ildIbRTBxWQvOW06ZcQWFhN4pzyWI2JQCY+HyFC67t22Znhi1vqhw + ZPRjnGyF3l1cymVBHxzsQQvodtXusWLFn3U+3f8la4raUJAkJtQRlQ6EEBBBQTt6noDQntEeSjRKwK30 + KofLdDhnxvoo6UYGu4cHy0MD3YJJA93DQz0jIxWDPSBqaKjMp3IMV0ZHehe2TG3fOr1lfgIstMdwvz2A + b5TH82ygqRaLk/yUkZ55WqljlZ1QbBQReSVUh5uHukV6MdA1BHO1r1M6pTI1FORTdk+mOAzN0hgObM44 + VjgaccbftzZz5Y6xw/Il1dcbKck5Sm0tzSJTsfvjyNaqQxNLxIpQRn3eGk2F9i43jF/NzgrrpVs5mLVG + E4lhKl312KZkZBi6o9WDwwJ91MaEXgKagj6lXidFoY0hgpA3254qzvGNPJXfSecf3g0b1mTLm5EDtAq0 + fzmaTC3KTKoaNGjMPtrSxhoFw+vGZ1+5Y+s8sxRgUFmjEQKXrS5ZabgES87VpfrVpSWENDWJAemqjaU1 + 7RK9m9lwa/QERWHHkEwBIYt2TZUqY0sHx1aNbV7SG9ukgogTpd7hUv8PfkbIbyjStzVrvFtYAAy6w+3t + MqM6eSDhLVy5sqG1tXVkZGR+fp4J4rFjx84//7xLL73kmmuuvv76626++abbb7/1nntg1gjRVHQXUi8K + 0RRQFEQ0UHzBI1SKjBJf8YoXveH1r3zXO1//oQ++jVz7b37jC3/+fQFCiA8n/6qO/8jjCwurC0GADWYj + FwBnZ1IUprPD8E1U2+vWrgW8vIj02tL3XIZ8soHUPEUnbqW3+UHkM/MQQ8H0bK6GQ3fdtcsgnQsWbmct + lzgmdOmSXZzhitXrFoSTKlHpbYWrmvOHRqoYaOeTaGwJKGChLxyVCl6X3ZGPl6m1vAHlcTlusW3xqnJA + DRXkC/kSOaZoQhmlbcCq6sulLIvm4ByD0U0REQ0wRUdPTcOivFGX40gWzZLWw0ArFDcChMZ/seon80WL + xjFI4IEft/30iVq3oWBZVPCQNmcGED9U9o/3AYHAD0KILbRAKQGHgaiePVtn9mzfTKkH1A0N9SDMsGMY + wBvl6DU45AHcHhvt5c6xsd6JiYGJif6xsT7ulK+OcH84BBflebp5EoFDrRQnRiqTIz3MF+fh14wChz3C + rJFmaQ94PDvUNcEjwUJ1pbF5odwwYX5sllawcKt0JqZxQT0SMM/wDyZt9B8ngNfUF+5v7u+5+xVUTw2T + vmgTSgkkpKROGqE0RUcPctJ6MeQw26nC4/mugIUJWSbfJvVa0IgzmcTeTtFAe9bIzLxrbiBLeztUmiUR + /xwIq7IJQ1EYFYS5GSFUWFr6Piy0bXFK/E6LwgiNWS/UFo1aKGgrSqgLY4MqvTPgYrrQqdcoqYRE1SdF + 4bJGIBAglIMby3DlpjvavHRDuZE8QmzVzDvUikIEhWgHy8N1XWPUhUsHh0fPPnPu4gtXjNApHde6kGbp + ZKkyXur9wWoETgpEaNZt2TxDUEB1MzBWQsd7Ht5OldZx0nDysSTRMiLRom9kZHhqanJmZnrz5rn5edT0 + W/bs2XXgwL5Dhw4cOnTQPp5x+ODhwwePHDl87rnHLr74/Msuu/CKKy6+5ppLH3zwtieeuGf79tlQjp3U + 73FSDzpOFZj++rEilMaif0tyw3ukcp9r7W1fxf/1HJVv9H+xcRpKS6dsJV0LaW9yUZn6MzmbtZrU8WBh + A+iU0ZQ7Wo2IhdmDXIHFfAnzFM3qv+QyxjA4fAmhEtZNHJDigmpCEbGGdkKaSDJHAVPNuUNrwVziUrTz + WKVLTy53ScxF7RA4DMk7TTITSmTUsuTJp6Ddzp2bD+zfrl4zVj1IJaHIJ2MnnzkZFvpanFBjLB4hWKll + tI7IEXXWqCgIzSxNTav7ScDVwgi0MFPQVKKOCI97dCLYPtHXMTfQCepcvHvzpbvm9070A4GwWuiCjlHh + afNzdmp4Zmp4cmIAsTk4BxZyKLZV+HRcoY7bgoJjfePjAn7cyQ27rfgn0MidfMoNqxoVVuXgqUb5dp5t + pDKOSFFZNvPgnzRLhWUqiDjVv3tmiOHicF+HSyyC6FBQUOpC6/dK5KG65JhixGpB6xjnRqrx06H+ijFC + w/usRaGX4PH9z6VCGhDypSFM2Jj5ki+PYiLWiIncMJaMJq4I4YWrZVq8qRkxa0FTkVBmLOREXG29RZEM + C7MevnUyqvgyOVs1z2MJ10602E4RUa9NGaOkw4iMOLN8GUC4sXl9SvY+zgY3tknDZKS6KLSmaNJdSgvB + nK1MZC3YdCelOCh4Sl1ISC99UYIJ15SWNgKBpXr6pVSEa0rL1yxp3Dg4u3N237GV7SM6LBTijNjNEEbR + 2VdXVvpouX/Z8MjkeUfnLj5/1QRV4BAFojBlwMLumRLHf/o/3kiPbm9YvpIJNG0wt+tUI5OT0i2cqCDL + CcZ5WgopBlG2xPMCKFvZHcV52EmN+n4Ib500K5TJUoBJO118o+CfGmh1d6HQ6rF4SJ8dJlWg4GwsFn1f + ltu1eQnItdrR0QoepL1QM8+mj8+UwkYL9s/J1r6LtIsKfMXnxdPOEh19MXFJqsPMVlRme7gd0jNgq0sh + 2LhqlWQLxoowb0McrPrb2tAPtPrCgTGHSwlTknpi/xgsti1uwskyqaEM1PypiZGenk5vimovVICQhXU/ + JuEL05SAsVAI5PvUx5kuqPY/DQgzBmNtZmOYb+mIy4P3os10MAtVLqj5pSl9NEojpH6iqSgkTFAQaeB0 + P0L4zh3DXRReRxfGz1gY3yKEz24gMA7/BKWo/IArKry52VGQL/Q/FfmAOsq+8XFBOD7apzIvnOifnBwA + O+Wrin98Ve8f4IaVhqGO1Gap1pG9Bof86HGpDiszIz28nh2UhuOVMzYPH5obXoCbOtBFJ3h2fHB6fFC9 + TOXXCZSZGAhlpuFuIBBRMFjPmA2pqwzZMfSWOxm7hsBC1VdEgWawYUvYvIE1IxuajevImNy7Z+u2rTOg + Wl4VmvVOUzZpepIEjrGeKjVHhk7USvQ8hWGhTQez8MLQ/AiNULImpBC0YYHvJq3h7+Fl1nrBXwJuLTs/ + w8LUzsK3pzrRSFyC1UlqsSOhzoVa0Kcq2Q2tBb015R3RWBfmeqT2UH982McLnKIptHjCdSUoM9IjbRSL + GWLrV20ACFt7xzb2TtSvL9et7SqZH7cUhRXMuOvEWU2Prv7GyanOHTubJqcIvC1VBkpdI6Xu8VL3NNyZ + 3GKuLUcxS/0hLPE1fwTNAKYq8Cf8q/bWPOOvh9OCNiAfn/FnLjyh9SSrf4Wav1ThTn7t1pZNHLWKwrB1 + StqhupvCrXvpko4Olsh2bqRFYXIu+glmp2U4Fz1rwiDRXvZAf8/5555B7zoWmmoTKjOGZZCekeXVukiU + IKM0mThyb2DSYF5r+SMzVIszDNLRsupww/q1lZ4u4eDo6CLRS6TCwWxGCNRh/kJ7xxtKWWdJAhFDyoQL + J2op6DVuIrEYZQnrrXRtnp1Egq258yjDsr0/9Z/QQdtbIQdauSB6Ca0FrWjI5PNgoVUhMU0inQJGur9Q + Zpzr4SMuFvRKGTzotKXfuoLWAtW6jdpQCJbiFKMu2MKL6RV1PNI99H+iXhCdn3jEUG9NDCsESttTaS9a + +THwS8FPq7pwgHZTU4N8FPyb6IcXwzHJx6nBqekhPk4EOBzg/mnunBrUMjFrk8Y6Up5wVO7XdqvBIYXp + SM+clYbjvXsYH6okEYnFtqnh6dEgrkjSLUIIlJWD6dw0CijDnQaNNjV0jwL2NB7qq9kdEQWDH6ln84a/ + HX9fvndhYQpVTEFfn7oIuce67ZBCWpMG9na0t4yOIOrfUBAaprsujy1MR4bOmvFaMCGIyvnP6AS+JT9R + OqIrxYnCgJCHcW2yf9Vpn5pU8HHlcrKxzjqyn0A0oM64adW8bgNCv1+v30xEYe3QfIPUe0U5bZV3lbjB + 41XVKPYwushkfBkDvgQUM+wrrF1SF65kIkhI7xoBQmGQrjUgFNbMcvy4GRZuKilxhthexULimQQLJZ4C + KunGvvqOgWV9w0ugxvTBKSWVAm/u4VLX6JKB0Wzd5gePjQ7u2rnw9OGBRvHpoZestj8UGNY/T9Z1rIZD + 1nE1JZJd1un9LvacvJmcBKda1Dr0K295eboR0BcTMC8Wham/mpSAVtemZ1LciMl91G+kz2ax0Qlxxk9T + bhgusn8E7eJJ7LSxJQgD+RKiWk1gKe4Z04owYc1kSbxxT+qhMIJ/uZGhNkstCN4Y4W6o4W4yBfmgqSbc + XNQLwaQiDHaOBSD0XXlmsZ2PXoqSCRn84NCRV5WtoditdLH3QIgt/jLiCNrVRvVQBYTiaZk6qAVmf7QE + cwcZNwyTG20y8QL5JkYGx4cHdPUPCkKQjzoJEg3FnLmRUTNRPMG9NF4MGvbtw13oIpQUihBQJnBC5oz4 + F4gto4z6pLaz/qeUgLHnKRUeyDc1OD09ND0tWCgoODU4QwNT7hmamRmenRnmhoDi5AAoOKO3N8+N7twB + p23E0NSeR8tK76Nm1eHYCLNDHRzCo8GkRiX8tEn3zo1Mg9P9gutWEfphlJkYsiibgyxbMSQvhnIw3W1k + DFJ9z70cFynnpvVYnNP/9I1L3vogF+GUjg+tGe40mQCESRedaAu2UHxLCoQJd0aTC0NIRS7U3tQUcvYm + XDDjiNolQOdjy+bpjo4Wrh3aMwhwNm5Yb1cKF46IuNRfLXZZlqMBgwLKc7qdk7O1C4ho12z1de3UmNgX + VWONQJaxVafILWDB4cUMDfaBzfqIgIJp5eeTGkdE/2qyiNnIsKFuhegonEQKj9RCmoxEWiLRvrG1LuTX + wyDVzHoj0WBAIwwadeJGWbGR5MKBJa2DpY6Bpf1DGQSw7kxNjRJV/HSKJN4U+nJ9lTKkjKfzPM/U97LI + 8+4f/9kogtEpFupgShV+BQTiqABP+8XwV0SGT1ujGko5H0wWwj8td8Spz/5pfIX8z7/LJYTaCw2wF/ui + mUOpnzSp53auNaqP4AzftH4DL8vOtmSDFm7r+ZwJYC1vTKVCuU2fGn/LXqFQ/6VXUXKB1XaT8UIwp51Q + FNQ9rzdCQ/Mn0w67iZreYJWh86PCROuRZnKrWAhKqZfnyKTrjqkGhTLqcROmmkhttJrXryUxgjrVdv18 + ZDFl8sTq6daUNhTUZVTLwShNQ1DoWUvel0s18qmDjN8fo/g2ietKd5t1/EI7tDvyRYVdGQii/b3to/2d + +HyiVYARg/MZKAgnUyQKg10QOIW3opM/Gfhp55NmJngmhZ0ClYGW9DzjAc7Nzg5zGP6BfHNzI4Dc7NzI + 9oXpw7u37dg6PT0DKNrDRsBCwi7OOLRj28JU1kHVZ9OuqcEhs8ZYMtrgcLgHzs4sLFbsTMd7Ds0MHt48 + skAXd6CT6pZEC7fq5pd1FHTRpEdKmfWaDQ6jmiJz4vYaMSXOKLNXJCs21vUeqTNL9W8X7nf30RxNRhk0 + gUqakxI60yprjebpM1lUhROY01qQWYAw2BK9oO//2JMxm6DRAtQh29+5eUt3R4eMIWQTRhhFpKFFSpqz + YPSqtKLQWjKLlYZSC4pqXqkDSSFYoy5kdeAhtkpYVL0PCLmWwWDqV++LesvJO0+2EAUgzAWnpvt5lj5L + 611VCnBooLgmSCmCsrC5DhLpurJFLAWhvWfTqxnpsrahlrEtXXM7V5RHgzd30oSUte+0F337RjYpF5x/ + hEi59evXFZuEVY7Sp/GzeFeYGEGSPJmXymNaWjbyNzjOD+IJN/Ba19Z+TESmU36lgjGSHLK8rbWlJl0W + t+qmhsbOtnY0sSAleMmpI3NKeMOChCU2c/A8Cr9mWgIaaCb3RPCM02b+mOlJlO/Uu4IwnIreDvUbdipz + ZncTdbCplUsm4Y66m0y4PFKmmV8wxzEXjVvRRStCv4zVa9u1E5lemMs/ygQF81gRyJpgKUk5BTF6EIvU + BjbLzevWql6icERdl2rqU3F9CoSmmgACm+HErJP+5+hwn4h/+3uQz9uKCfm7r9JV3RSNlJmcrai5n7Rp + wefzLb9hDT0mf5vnxin4nAMiKKgMUu+OwoixJAdwArQY7m3HxgyBBD3GveMVHLGDMkFEERA45WAWKKQV + hSJlfhr+peBnJWBW9m3ePDo3xzHCwW075jeP7dmx+bwzD+7euRn88y9xwytF66DOTA/TRLXC0VqsOmsU + uk1olgqzRnT6E4KFPVuRVYhJm7RJtwx1T/R3Dil9RoT2ZjejuYYSDJn4zliZKCioHJlUO5G+w1oLyrA2 + +vi4aiLbqcTaPVNZpB408ieOrCjnkUaDoWA2a97crjKUpkJ+X5WSaKwVYbs0J4taOSjGoTBY1jb52Z42 + SI1oLYnZG9a2t7ZaFchTmRYwzZ1IdpzLzDSYBwgiFnqkWgumfBkAjCmS9oTEOHt4sJ/pg9ICgs+i5RSG + JqpVhxAYly2jQu3p7NTOk+zdqzfcjoJpdehLliw+qnQsNLcCm1SVFWFeuJwb8GhEWRhU9lYX6rDQTGdI + q5C6UD5K6FJz/+zRq66fOXSs3gMLT3mNP+430Caan5/q6+thb8DvgMSNXyY0CbWwOBkAOz5ubd0yt2Xz + 7AnrPCuY1LjkeMIMHmOztMV+qHEpq1+2Qd3xXirBGkrDSZ88vU0dce6xM7o6RaFhf2x3NOXVcDbi0QqU + +o9wVE7hLW+3HR6Sf0AmGZT7edFZHkrG3crv0eRbrNEhxmmyl22MhBh3GU3apLE1ml5ChWZLuveMt4OI + 0Dui4UbOYrsgH0yNM6QF5LDn7htywySDdijvnPUFIQSTv1REmPIUTESoA6ENbqWmCoqwkU99ZLif0IOz + jx7cvm1OlYJiosY90DiZ5HmaT8C/aF+SqQajrWgWKGECeT8iDZJyZ5AEwjKFYDMfsZCmKJQaSA1lAn9S + gRBbFnACV2sss/ELxSkNagwCic3wM3GBAfxUF2goKBNBI3+GpmWo1WILVLqggmShChyem0WkNMYR8G9+ + bAHGzZbxhS3jW7dO7tg+zW17ADc4BDWpC7VlSnVIBSlPpZ8mWGhwKJ1SKw2VZSpKfGmTjlSoBUVcQUWL + c/cQHjeS68SvaUAoh9oIBGPSkFOhFuTKkSlwR1Nj0hhbKMNa/gRepquUxVSGuY/i8kN8IXudaD1jex0V + yYR4QkmlYHu0YS17o96ezmyKnCMby+kUXPpySRRhB7ZYAAUVIfNn73YUJgLWI2EEGEAx8aCwHeSGdU2d + ba0gn80FAcuZsfHNE1MsL3aRavpZrij0cYaQ9USVIRUhCwIIOjFOvkJXbI0K7KWt0cgdraPhND40PDow + qItn2nnKdaF0RTKMjOVgdgM5gCwRRrFIDn0k9y5dXlIDNkaGICJ1YcRC4NAifDfVNXXCI/X03bp1qqxY + V1neMtg+urAGBYUk+mqc7zP7L67mgivsI8pd7AiCLkIdKU9BLFj9wgTYVq7EzxpPy+NAl0Egb9Qz8qtR + atDdNgam/wNKuBbYw9X8EfyaNFSPP+w0kz3KwVo7g9Dt5GSKQFhw4ctIpAnmpXETRZe19GH4xPd0dfMx + btM8SCy2Sa03qp41VhcqTAaetP4do+OoxzD5mNApZ9wTr67aegnr2MS+TfWA0La0NudwmkxsjS63YNLY + CA22au4gU5OG7qPBeEMSB9MkelCQjFMKO+g2yURnVeqy7W4yeMQwnjHujFtzuV4iLSC8w+Zrblxto3ZQ + pW9qFpOlrkfVvFjM8KW+3q7R4X7NozCaqAOhTApJxCUCcHpQzMzUMrR751jvns2jsyBN8IVRIbw2RcMg + MJaAPgIU0KLhqfgHknnlt1mQb2Lr1gk+AoF83LZtatvWyW3b5OD++KWJbXJ7UnBx85i1T6kj/XmkuRr7 + qzJTzKrDflcfmr6CupDpIE5v6P01y6K8ZZhQp078UYk2TPX1ftvLwWxLocmFoZmsZbTNBaVfqnajpux0 + faeLW+KX7Ksb2Nz0EL6FpaabxKoBaZWCQu5hHNjd2aZTwyClsBNG85vyifZSBYYIzFAL5t23nfks9GzK + SZHQSr6YsMbUREJm5/Dso79oJI5mPFKbDlJNckY7ENJnnRmbmBoa5RkpB2u1RmWhTvuoybAw3F+QTiX0 + 0eBCxbczpWC5DoPDbNqSzAg1mIgsLCQmeUpDfidvMCnL0BJf12yRr2O6tFSFhuFo1NIQFFxr1aGMDEVr + X9ZakIpQmqWKhT2ltQqQpBJKYMXTS5+wOmYxvDGy0fERq/b3LsK0ZAi0fdtmchKOj3C0GZnNPlOBgjbA + K/wWrPbr16y1Nmb1P6akuG6eBurzU4RWVSWWsB8R9YKOgu4jU6gA5VPny6QdUXucTBHWr6e1mOzUcrGZ + /Fl5jIrrpST1Gbg1QKJSQrqjXEerGd6rD6Ed+UhPM21ayhvIdZu0Q5eyhaXKlIFeAMJcGydp6YSyzymj + 2Y2VK6zmsyd3KQVYSOWHdSRb79AFZX1JcsCjl1WQDya5g2oos24NND+6rEZ8t8XO/UVzNlr6ALeS8WUx + 1Q4K8iWhu/KpFxwhISELVUf3bViYqOalxGkP91j2kPZFIwqqoq4VB1FqQaxB0aRbItLWoe7t04MHd22e + nhhwLuj01BAVmGsBkT0YBCr+ZeAHhknbE/DT8m7LljGwbdfOmR07prdvnxII3Da1Y4d8unPHzM7kfr7K + nRSIPB6wTGtEnko+1WdWgGTcOGy0Gtg3rr4Ig0MZXvaI+h6D7+Ge7cqdwaoU7g+xwGMD5bnJ4THpS+NB + 0xWBMMediW+gRTUJyXZibHB8bLC9w6aGEQWVwWv450wlE7dk0fZ0sPXTYmuUE0NnwAU/UosioQjbuEE8 + FuyE2bRhfRcOCrTL1lqASVDppPmX7jUK4AGQfBf3aMPD4nmPkzghrdHgtWS5g5JQmFGvM8+KuOnkuqO2 + o1kV+6VZRRgH/IuqJrwjyrUfDUhdOxH6pbpiCC9GJnpJHm+hNOSrGB0P9/ZjvmtQomQabVul/4Qjs6Ju + eUNpeUPdsuVYZIUvaieNxF5DweA7I4RSERdKUWj0mVXN5jtjbdLYIA1ObKK7t4Texf7x3gDXruerfhgb + FMDgZLKETrUy48/IHqFQhPEkUJ6g8/CXPv4TQnDBT4TW9qn+XB7PH0LsLxdBuPQJa+K/1YJAyGKhVDXL + XEM+gyi6++nuws8H/8bCPf69en8oCjm/NzY3K0knbKFi8yF0QK1iTtqhqZpHzkJo2eMTw80b1wNUinzZ + uZ6NB3Q8rmRP6ZtELLSgiZyhGltaZv52JxsLiYlpWLWGDqZwYm2kn3mKJp9KIcgqQFGeRNKH7ihPwpYW + pxxDQZYPaeCyCDSspAvKMM+k9JZxk4KfdETDmFAJMtHvKioIVUevhliMf4aHevv7uhMqYJo1kXMYcSDU + iAlxVgu90CxrSX1kYv9NPb1sCQ6CNp9pZXSYGLwn9EiZDsKNjCiojUFJey+3USchmSf5zzqi+HnO4nw9 + glCvV5qNUgIGOSBR9dBYTO3HrE5pn4KCPt4T/KPso+1J2ad4tmfP5isuO3b2sb27ds3u2gXyTQN+u3fP + 8Skf9+yZ27V7FpjcuWNaHzAr0Ch4Kd+7VerIUDVaN9X6qzJrpPSMdFNTIvKSpFVryn0qV6y9h8qYd+NB + YxEW5GOAhTtnxg5sm58aQ1/YiZW55TeZptDCp2x6Gtk0ZsfTQjHN37E1GrBZU7qFd940nVG4aQyatCI0 + MzaJjcwyQxIGab40dLl9a/MGtPt0Sq1hABBS9zBdtjaD7b2SSMLg6hCzJjiTpSGfF9FnU4Cw7ZPTXsS1 + NiM0IGT/11Pu4pldSlGQEho3W0eDJuHNdURlaJgfENrkr8Ag1Q3x0vVNa9lXgNHJ4hAbRXG5MDzU4LZs + 2pJOYegVgdoafVPPKoH1lSFirkBcuqxuxaq6lWQTcgB4DQJ+9ZRYNFWXhXgKxoQRC6VNqlRSBUIxYBMz + 0jVtdU1IDLUKpDq0YSE8UnXoFixcrCajrjoO85PXKnTI2PY8Dcg5zrdInaFOYKf6tHxLUoOeTmuUBX3j + +g0n/L34QXQ1CywYfU9WY97LmVN45XwJ/EZsUPilCoWmugfkBpYR9qwitH/hhtd88UuZ0SgnFj+Ly4Pn + S0fN4RzLjP4Kmp7QBeXMbhQkaLSZpTVIDQ7lwkjY0vJ6tTvKv5RsXeir+NXFhcfTwmrjojWaqF+o0v/M + eqGZQDh6x+SmgwXuKJ/S1Tx61v6FLdPeLI0KwkBAMCxM6z9fj/xOX6S4oVOfRuZD4FOSOCEB5bx+aBp8 + VCsZPWKjTKxE2zbhXel1YeagpshXaIo6fTSVUriVmi7ogQ/CbXGK6e3mo0wHFQglU7CnbaxXjGPMQZs4 + XJ0LAiQYm5WHzBomCOH7ZmZoeI4JKVTLQVDQIFDHezL5A7qs4ckh5d2O6f37t1x04RmHDm4D8/bu3cxH + vYGv4eZ9e+f56r5989ywe+wBwKGVj1SH9iRaSk4KLlJixnEjXVObI0qPdMrmlP1j9HITOzfqQmacc5Lf + ZEFO5R0T/fPjA9iwIZeERjQzPULT2N4oAqcg0Xicr2kuMzVhREFn5zo1twCE9mcKDW2NsLdtjXBHC3CY + b5A6EFL7KQpmvVAZDVZZb2MrU/DaNlNcm2qntC+N562RUJ8SZ7hNJUrRGV1m8m5N7mUY4z+lHFTTUWvV + 4FyxkY2v2IqoDlgRsaaOwtYBcXpas8Y6RulG2daluHtOa8RqS+5oJVOP+nmpbBO0DEhRUJekJYwDFQvJ + Y+Kg/xmgTrxmgiW3qewtp0JJpEacoRxkUrimpa4xSAw1s8mJM4grDAsTIOQlt/DXbmqKjbiEp1+FSKcD + MqcKa6f4eKtjiAEqoMspPg1FYW3ujDBHSMJQeGYVZ1QJ0ujtZRrCJ+NPwYNaag1a/Jdfev6hA3sW02gG + iIuvNe2CplhomMdHCp/hoX488zlXkbXjjJRrJuhjRF20ZjVYZl/yHqnetn+FIbZiXr3sAblGNDk4PcVz + J7f0JLJwstAUtUsrSZzIrqiIhaKqtDZp0il1BWGw1Y6bXN/thhs2F2EXnPZC7Tad8G3bZkdHByy21F0Z + nYnuLlZaAgY3UYnq3chKt95jmBBYIgGcGoMR0OFSikLiEg9AHJak82TjIpa/yLkIzTRzE/U6w/psoSOn + yvpYkWQ5CRA9IM64lZr1Pyn+BvvKY4PE2HYYTQZE7OtpG+ltJwJeouRHJO0PzGDABn6oUh6zGHgxFUpA + QT5tQpo0wlCQWhAUNIaLTv7AP2lvUtVxWM2nxd8M8AbmHVDY48bBgwsHD2614/ChbWce3nnGwe0HDiwc + 2L/AA/bu2SzfFZ9h585QJgocbgUO5WdZdShtUnqkKr1AgyhF6uTQ5qmx6fEhM6AR+zdSLwa74b7CgKXr + S3U4O0i0bydjUeg/uJuitTfTNVMZGqc0EVHI8LWgIHSmbipZCT1S64tK1zTawFalUqRtUjGV3UBc5Vr+ + ptFdyNoGIrDJU0NDsJdvvBwFk+ilnLOat0ZTyihjQlMuhjFhVhTKZZLuLFPWqDVavBfq2gm7DNmDqvpo + tfZsCKAQ1y3HwnSPm9JkbPsbUTAMTQoQmOykAxDGlSds0ROajNtdFRYz/dR8RxFOgHz4y4iUvlm8ZsDC + CIGGhfRFSzBIEReitacW1AMgFCxcQ2nYXpLSMM4LvTR0nOBdqnSXoRKdKnI8ncfzJh4Ht9haIAwVx7WT + MJfhMZbK/HReT675WSfA5jUcSypBWSbGcNwS9G2B2tcLMh3n59LAW9gyMzjQZ79I9a/j96SIaI/1xxuA + 2SOBm+5usl438isP9Pei/0hKxnAa2SlePYX2pqihY9ojtT4Gm1GEcFwHhnZV+7s6rqeRYVbkrrRnwvmD + IIQ/ViKfSIEwiWGiFgy5S5l8IumR0hENpPCAfMkIsECZSxQUwYC0hqdMxkEw4UTWDmXJmxgdhPaSip0p + Lvsq3aCj3ZlHQWNApEm8wVw0bY1iAUOBYoo0jk2bNH03GUcRjBC7cDEwT+sVWaATNYXE7Jm1pjBERCwP + CmogEffgGdaGj+hUf+dWmqIae4sbC5gBeAzDFDUgCR5pfQZ+zts0aSA1GWgkVeD2KQM/hn/AnvU8aYpK + 2UfBp+B36NDWw4e3HTq41W6cecb2M87YfuaZO+Tj4R1nHN7OcejQNqBx3/4tVh3a9yqaztJBTQaKNE6l + NDR+qckteEm8yC1z44f37NgyN2ENUvEp1fAKbFHRFx6YGjhjdnjHWC+0IAQVpGqEN4f3RBy6RU/pWntz + X5OKsJZAxWilKRCCnWwd+Gg7lVC+azko4YXa1o6lYdYdBfz402NYMzKMZnyTzQjdWcaanNJpUH1qOJIA + piyVMLbxcyJCrQ55jDFlfArAvJGFyL3mY9dE7ZZWrmANl8GAmrkYFgrsxalhoqOQ9aGKL1rPb9TXV2bk + 4OWg7W2r4dBQkI+y7AbjmFRqTNUos4+47S78N2OzGzT6P13KctIv3chzaCPUFPTiO6ruo+K4tspiC7Vr + ysrCpGR9PQZspFJYIbimVQ6BQznk9lrYpJFBY7ND/2eq7aeDIrwrcM+PDwnp8/Pbq6Pboj+UPxMaYkrm + p/OqTuN7TfYAxhDF5RUeZwOFVyFYkUdWukgW7U91Dsf5iY5kx39ViUDQgFAeTjlE4yT7e9k+aYnUqfEc + ypxFw6mT1IJeFOYrwnAOOiLyG3Fa87NMD5T2RcPWT1zOl1F74b1gl4ftAXl/+C6+FFgzeUK22CHqHjO5 + DrMAQrtWk81sMOBOGHFypekMNVBj0rIvNJGSQjDpi4ZGUxRp+WxGboj6qk0Wrwh40POiLaQECAQgzDRh + ygAM0XTaFDUCfcqUkQAmtigmzbZlNC6mrKcwYkaGxcTZYK/ge5KaR4uawiSD2IqqfZqJBS2WQZOV2sf7 + 2udx09ZkQdELDglmeFgSPUbTSPhE0ATvQuZU+DHBA4XgGYd3nHXWrt0GfnsEwEA+KQEPLIBtIN+hw9vO + OHPHkSM7jxzZAfjx4KNHd3McO7qb23r/zrP4eObOM8/YQY0o1eEBqRoPHNhy1ZVnP++Bm44c2QXE2hDR + OqVSF2ZtUrBQgHDn9tkLzz1jYcsEKC7BT5pxiBsccvu50cq+meFztk7vm+zfPNg5Tn4hysL4noT8Qp0O + ugVrZI06fTQ4kRb0mqg5W1o3YFPHSJhmeFAZBid0qwszJ7ZEZR/gUC1J10MhplUQIdD2TzHGxMJMZDoY + Qy6LY8LQI03tcP0cViAMlrkRDrOrIEVBmak3NFCaChtOhfZ23RlQ2SVmIor4sYCFiCUIIRedvlzHib+M + aYJrYiFPBa3OCKI2QzHE49HAt3XR4jLi2+7Ah/G+lK9OfPs6Ujw0sD5BR0KZ0EuEJAqRD2pOr0gmRClB + SCEEmcbSEnFxI+uMLs8SOqh8iapRBIVdaArFei0WiIKFTdzZE+eFldOAiUW/heJ6YX62o6215iNq8m6O + D718VWZSsGZ/iP/4oZwy4u1MpMXKlcffGvBnHhkYHB0cOpkYKSm2Vq3iN0rALNw84Q6EV6XiV/nHOZ2e + IrU3UNkGS0++SFr2BqlvzxT15RyXM40oTs5dbafauRvPYN/opcSZkEym1NAwWrBLRbr6yZiB95KiGW/7 + 2BENnr9yZSYKikiZsTymwKCxgQcXNYp4lJdpCQgpRnOlwhphQkAli+LN7XETWa/JVpkcSUFZM94XjQp6 + wUJTzdsgMA1iDVv+MB0MSrLgppZQJ7QcDIMlBooI7S3xjqV5eLAXeAMpCw261FnUVuroHJbWhQKEjMcG + +zrHcdNW+5idI92ozvGOoYsoekFLDZT4JPWImZDxm7iAqjoC6qbxOa0WFCHgjukLLyDd84gUc/vmaW+C + YWecsUMg7bDUfBwg3Nln7z33nH3Hju05+9iec87ee8458um55+7jfrvz7LO5fx+0GkCRMpFn4ABHb7zh + 4gcfuAm8DENEJdqAhdu3TRm/1KSHxp1R2f4oL5uOruVX2IEN29RIZct43y4OIgyHu2fVmBs/OQkvjJbc + nsUo4b2qKXSebT7NMfPjLu5IlDuTp8yECMMkxXBts5oHRcqonCGmnfe5oAEhEzvOBNtp1ZpPp2dj8HkI + WBiscS1EM0PBall94EvHbHouFjGjwdBNxPXMEVZubNrQsrYZq4mIgmHTaVioK4qxZpZwNQ0j0Sl3Kuzl + KG8JiaYGHBpGxn81ZoERHNOiMCPopXv0DRubx6en+JgrCqU3JYYyIZJJisImVQ2KdlD91UjrXY1ymx9A + Q4sqpm5pg3RKGRY2tgpHhhYoIgrAT1qjbSX0heszfaF89YSlycljEOyaDRvWWUKs/+NTVqfGFasK8nNp + TOuM7b/gv7Q/eaL3R6Qw1QRXngEzAQAgXwHn1BHHeeYCLvrroR5FGcLB2R9M2ORrVWpTKwRjOejVXlIL + ZmckKsneSpn9ojZCJewi7PvCeZ3ji3ozxKUUXAPj48NnHt7H0NTu5Bdn8G5Td2uqcHFiOQSDIGXNRMPD + nMVo1YQjeOozFyl3YiMsPsLWERLTDVUBei+US5+uJtClfNHMXzviX+iLRpv/QvSS0ESTXqiQZbq7GDiJ + JswYMRIZ3wowZq3RTFWdkCZSl23rpAFpYKG12mKDNKPsa+MumMs4NIo3ChzRTEohVY5mzUsUg7iJ9nXu + mRu57dKzLtu/ACoQKyipti6ZJ02XSeFor44GxQLUCKJUgUqKmVhQ8Z9ROgGte++5/oXPv/PKy48dkM7n + Nu45/9wD55+7/6wju44do+zbQ+V3wfkHOc47b//5HOcfuOACjoMXXHjofL/zvAN81cDy6FFKRjkoE3m2 + MFDUGhFwBRFdj+Fai6Dfp0Gq4RVuwMYUkCxD+XUgzgyJGff2EQkW3jbSPTPYhasqQGi5xDIgVG5ROCJ9 + 1NUmBN+LO0FMayoMDtPqPKOPZkGSuTjfoKlPndWC614gyCD844RkM8QpxJ/e0p5TymjkahWx0PPCCk3+ + mhDow/JIHBXhBMLByYGRgXKF5YIGaevaja3rNkqSvWTspCjog4mQ08tlOzjYSyB9oV8aPzVCXAaE1gry + nlCeMlOEw4Q4WqQmSD9JtMnSL6P4gC+rLD+rCINeUFxG1WJUpRHrgrmozALVUAZEXBrRBDZpFBfKsJCK + cH0PUYVLNvbjL6NVIO5rwWLGKkKxYbN//HKIxvjx6erMioabDquY1hyn0zXluxjAYrTTlNeecz89bjgm + J4OCvNm8kpPsPZ7ME/4QHmMWDCdUeqSvxN9hg6ukznOckzeT0SBEbPtL1bKVySrBPDsm3F8cCi6px2CO + w7leUgIuXaLqwBXJiR4qQpPS89Fn5lwkk+Mjx44eoh9gNSXW7Qf27VSeTs6uKUlBy12BJvsNvZoYz2uI + qDzSwCDVa14yewuqQQNF2zibX2iUTPgSIwxYAFL1FZmJWtyha3q49qzSSaFkDQoPQrbzHDRR0UrTN0vq + AAoC645qao+VgxZAqE1Ra416HrpTZuxGFqQeU9TNITN+zMpBU8VNjA2cfeTANGVRD6PBjomBrjO3jt9y + 4eELds/Nj5THNVmeLuIgA0JLk9C+KE1R58UYQVR7oRmfEy0gaHfPXdc++vAtl192lDkfheBZZ+2k5gPS + pAo8d5+B3wXnH7joosMXX3yGfbzkEjkuvfRMPl58MffIcaHg4gG+xQ6qRipF650Ch0wW5Ti0zQeH1iYF + C925xl1P3aSbKnbXrjnup0E6OlhmWLgwQpyv5BdSB1MWDyYVYRZKbO4z0XFGR61tsEyBTHYYmfWMDWX1 + TyCHhF7l+tWJlELGhLbL8UKQGxKwvFGiKNMkJpsrczrRSOfEYy9lgpykKFydmjnkXUYzOyQ1Qsq5BvrZ + XuCLWl1o7RNqQRCfFq9dPlw0yp1IW6PZ7jMdVdhj3AdD85jS+i/cNo6MKaYKQMhqgMgNyoKXgIaOsQXq + N3IDQq5rWy7ya6AvWRpJSAwT0UvCFw0+ahJGwZhwJbhIHsVKli1hoi9bUlq+pLRyZUkfLy3TletXtVRG + 5ndv7JuyKtACCwN31BmkrKe80PExMjlHbP31f/z1yN9h6enq6ujsaCt89YSlEu+99dnkN1TSR748Oh5N + Jn0kXNCLLzq7t9L9QwCwZ+pH8F5xSvGXtBlezbdO/841fiBoR2GdGtN4RWjEFodA26Ck/6qpMfGrstuS + /xcJMuIgE+/MNnGcUL7Riz4y2XmfHxXIQ300yJe4DrAUEDVmXlBoHZjUXBuoY7BPI4EbXMlmIhUgMISr + pcYZgTIatcMBEb01amuEs8/dPoanNWl8qo5I26F2fwEFZcAjM56QqiNGozIOzIUrmaFMai5qwfQ+HfQZ + YRJDr6PBTL4WOTJaFIqbl84FTQ9n6QrmI7Nz29wl5541OT7YW24lZZBAJct23zZWwZxzbFjwL0wHLVNe + fEQlOxAgpNiiC8r8jy6o+cIg+4uMmDlgiboN0KL/efSs3efQ8DxHMMzA78ILDl500SFADsC77LIjl19+ + 1uWXnXXFFUev5LjyGAe3r7j8LA6+BC4qHB4EETn49nPP3c8TWo1ocKiDQyWX7oVHMwsShx6pNUhnhy3I + yQ5e/4ED26675oKtC5NwRPkd4cRulvxCAUJK4emBTlJ8sRSwnKbUdCYwSFVZYQ1SifPt5Lbc6O7EQjcR + V4iUMMBh3KPkUpSpEc1LXTUSIYGE3Q8EGe4vAGEWw+Qj52xMmLFmUpO/1GjUtBOih+7phBeTBz9rk+b1 + 9TlzmSA0SrS5mVsF146Bbp5BGkaG1r9Jy8Ew71+UKVPEQmpQ+jaMGH2wkjZD4+2Agr5wGbIaWFoZYF/y + /0oeobqpSeUnjVAqQuBQZYUcK6DJsG6IUdey1UtLlFdr60urV8j9mtC0Ym1LW2W4sbVfdYTuL5MSRyuy + EPPzgHFWJG5b/BDvha/QvCDC5GDon1JRyIMBgILT5unBDG9updJtL++Z+qdv/Wm53ugrEEZJLQPS6pe3 + fu3awf4+NJfplxzYqh8PLElDAy183Dr46VLzGWrQqxJg5HcUf4DIpklOxHCeyfmq92ruUgBLe5jNve1j + futXCF3KzQy4aGmw8LEaBfV8CMN5Q0ReGmN2RhrcwKRx28IMvU1nzeiYMDVXU0+1JJLJNsViOhXGhDnr + URAxCf72QjDUfyns1bydusnYyFBpMtImDRNBNxFN8gpiX9TNmpUvo6I041xAKN0yP9nX110oCp0mE1KW + Qlsva/QhHh8erPRW4Mi0TWAoChCOkCwhenO085qspEO1GCtBzsOW+QmqQAXCETQMhw/vAPxMIKiUTtFC + iPJv9yzIRK0GUF126ZGbb7z04ovOAMMuvujQJRefceklZxr+XXHFWVdddfY1V59z9VVnX331Oddcc+61 + 15533XXnXXvNuddcc86115zDl8BFHizHpWcqKJ4RakRpmYZR4tGje/hZCDD279sCNsOgMaEhPFIFQtXa + q/WM8EgnBrixeW5sbLTPLOKI8yW/cMtIz87RHoI15gc7J4Q10847w6TQKEWp75o1SzsVDvvKnT3dBFl0 + zU2OjQ71w2myWSy4SKk9NFRJ6UupvwxmQ+WudgfCiIWZo0JWDtqwUGKYAt9YKTOpjqI4LMy7PdhIW/Zz + nL2kTG/bOjsy0u/UsOqK0GvByCzLYjtT9zVjkAKihDXp5KJoK1OLQYp11FLjuNWkyRTuZKGIw8JMduWL + SR4FbanJNF0pNcYRMVnJdEYINXQ5E8H1Io1gRriyEagTcaHoC1fVr2ioX7msbk1daX2pbn2p1ERdCMVU + ZfUCh2QZoqZol+ReC2mSjmgUFFbPCOkftbe21KJ+nE5r9JnCrWf8eXp7y0y2amr+TuZnoVvYujDHxueE + DxZj+PXMxk6cAOxMUXtOzgapp5MdSaz/5Ku2KSmUg+4s45spGhjMy8QhKDFrSPUShbPTsNAK2bxwIhHU + 59MH5dRXf1HbSHJZ8rYEY/tMLJjZWKR0NaexccUynNg8N8GSocNjdxktWin6jDDT1EeyjJeGRi6w6InG + RomeSBMnvBbUbXsmkEgNRYNkQh2TLXA8r5pgBTSiRKTR4zySd5BJP3UfZ8APPJubGwcOAcUa3dGEI5Pm + KlhxY25qo70ds8jn8RQlmYEw9+EywzMLVLJDbKxHewl82L9vgWLLODJ0RIMFGhr5fVvoeTILBP8uvPDw + 7bddBVyBgtRtAOGzrj3/kkuk4QmeSeV35bEIe+c+61nnP/vZF95559X33ffsW2657MYbL7rpxotvuOEi + 7nz2sy+4/voLrrv2vKuvBibPBiyvoli8/GisEQ+df94BuqbXXH3uZZeddeYRaDjbDmpdiE6DulBLVRFU + GI/UfEoNCG1YGEaGoizsGRsqEy9MzhQsIUQjKivsEgapHgqHGl6oYcWJvl5cCIBDKLvIMfsrJDiL0Tng + hyT/yJl7d+2cb2uXYApzIvWetmgEuUfGz9b9VqNt7Yqnh9mwGSIaU8YbpJmaUIwamsRpzaUUGjphVVoy + zBYU5AxHrnrdNRfNb55UOmigTGc3EgZ1QVZUBYGBhq2GkaLEzTqiwXc76noD2VvqBDqWUOKZcC6GgsYi + sF1y3DTLApIMC31L7ZtsFzHb2pPCYSwJa3e5ltXVA4SE1K9XFKQ0lHLQ4VDqPzQITctXbFq1fGND3Srp + jnoqRZDYr2JkuKa0ZkNpbUdQ1tuAsACEvACzyzrh+n5KD+D3Q1NRGECe0jM8sw8GMFisOaprXL4kcyjI + osediQJRNI1PBt4Kr7zWT0yVgtnDQS8Uij6gTb7R60m5r7oidHxMxoFSXkb8S3dhAQeTJr5wf6CB87Fw + QvswwM97vzxceFu4EcWCVgVmc0GdCLqOItxvQnuT/aZC4PSS9qZo6ixjJIKcDUeExsA7YKEJfNGoI1xD + sowkjxudz7UTBntRJhhv6D2WNpcsfKE5llaHLqW3PPT0CPcE8JMWHD06C8wzgkxiuh24/tYgtXXchBMi + mehtJ19i2xDyeWFOwhYZ03wlsVKTQF0JF9TpmjBFNfZBqivzjoEdAxaCOsAPckBwCG3D8+6/6WMfeROl + HloIpnogIr3Nyy87cuWVR6X+u+Ycar7rwb8bLrzh2RfeeOPFN9986UMP3vSaVz30xON33nH7lbfecvkt + N1/GnbfcfOlznnPJDTdcCBxe/6wLgMxrrz3XasTLLz8icHjRYcg1F114iIkjP4s2LFgIEoPK1KkAIVpG + tfAWHqmVhmI6E1MM+b0soWJoUKzXsCHFOgCJ/S6i7YfLkk3R39nf1ylSSwmlasNtwHYPJisMdaG1mpnF + QihVdUoYFnZshIjE440vauxQFb3YrFdHg9oGt3mwO8i4myhjwv7+boqtxIQoLQpDRcgp1N5KPaYGDtHb + L6kIQxKTF4WcmbwAi1XStn96nofbViymI0N3XKtyLlSKqLLPhVy6skHjPnUsWCOScAkvo6e7c524hYRS + L18aBqKA0wXMljmuD0FHwaf8graepJR1M/ZP7/HNeoqOyQ6eCeLKuiWNdctEQWgQGMpBKwr1qG9oXLF2 + /Yq16+r5qojrbVIohBqh1TSuWLJh2crWNUtICYQ76lLCE7JGnxEEkgbdqlVsGZ6RZ/uBPgl/sI62Npp1 + p/1T+POa/ODkn6EmOmpzkr99qP/iJknqQHtmvyfdP/FdRriyf3aDM51eqxOxwqAw8xqNZaGel0gnh/tg + pYq+M6kLU5e13AWQwmGsCzOOjPVbPBE7EQsGwLOdqbVADdKcIGOqCY+nd71UYfMbrWSsCrTVwZpLQTgh + 0xfBQo/hlSENTjRgXqEpGj1FI+DVQL7AIHXKTBROQJaRhdLdRJMog2CrnZQa66lLRkf6oG+kxMWcZCLy + RT1piPWdoCUcVaCKHJwZ3E2e+3A3HBlQUJR20ETVSi1aaQftPH1F0wtiH2pNUVBHNBLaCwXnqO1uvOGi + 887df955B0BBCkGmfZR0tD0Bs+uffQHgB8JR/916y2W33Xr5HXdcedddVz/66C2PPf+2595z3V13XUOB + qMdVt992BQ+7+TmXctx008WUiVIjau/UWqZgIRNHgJABJCNDVBkQZ1Ar0iDdvWtup0kM0VSoYffC5on5 + uTHTVADq/Gr6C1LpDs1ODyErnB4ubyPInszC0R6opOI1AxBSERoQapuUdzidFKZjV0NB34UkeRQFIBSl + RGIlIyhorBl2RXwJ7wUY0caaMfWOKChiI6FQFCL4EcPRvJQi0fOEMMJUTZiffMu5bd2OdDRuRZ6MFVVN + 5KwZ1yAJX1TBTybyq3GNkUS8DXT6V69l82nXYBRRFEN6vdlT3QiN5WCYlfDaGHRoJWUFooAdiyEkAONJ + 8AxGJrDJS6wIff1Rbb7yelKMjOsbaxnr4Yq6JZioZYVgHBPSBRUgjPQZlIXBdE09SJVlw6reVN/YtXpT + f/OyDY2lVetLjego1ID0hwOEtnIDh/ySx6+0Th48fkCPVK7/03qRnAWUNKf6a+ofO/xO6ffG6q/YCE2w + MOOUckLB14JbZOPPCIQlfEcRd3IKpvuvAn3UTkpOYotrsXMz5UPHfZ+joFuMFucHBe61oaDeGVjaek0W + 5fNcLYBTOvCQ60ocNeTCto5oWgiGAWGtcjDm8YZxi7RGc9bbrh30aU0UToTo1KwXqiVgkItBhXdejNJE + pTXqfBn12cpWTJNgW1GYtUBhJLaJTE3cRDvExdSPgIIxiSmo37QiBDVpikIWHah0ENe+c6xyYKqf6aBI + JoJwkJRBmRHSEaUcVJqo5CgZBAbV/NZJykE1S9usHmlbQaMnX/m8t77lRdBeZCLIOPDSM+mF0tUEvaj/ + ADNKvdtuu+L2268E58C/u+++9t7nPuu++65/4P4b7r//2Q/IccP99z2be+6991n33HMdD7vjDjluu/UK + vhcE5f6HH3rOs6+/4MorpDSk6QrcgoWIDmGTGneGolDcSgUOZzHsNmUhqffbF6Y3z44Sjjg50T89Pbyw + ZRIRJNAo/VKZFFa2jPbsUtbMAkUh6hHTFDIs1KRiN5pJuaP2xprQnjY12xFu+B5Fy8G0KWpK0MABlr9+ + 81pENYODFYW9Nfz5Rgb7O9uhhwTVhLVGJYBi/Vo+1pDVKzm50BqN/jKp20MmK0wyxcyDNJSAqaCCSwPT + any9eYBXhBEIg46e62t+y8zM3CQCAYCPx62SbadBYBEIFf8KbIBMUx+IoxlrVNYKwzmxZxOn/rh6RMxD + zgWHbt+e7bBpWOt8/YnLVFh/+PZUJ53ODnVFW1aSSaHRR7NCUOIpcHheZgQZmKIyRJS+KBBogYUcK1aW + Gpct3bBs6foVpVX0Uc2SG9MZ9IWVHxCg1Hhafj32C6eKEKf3+vg7GWnz9L79hN9Fq9FlkdwQCcxxQ3qP + 84TW3ozAJv+tfvFeF1ohmEfBXIPUwu5t0GcfKSBtC+LzPzvzsm1YcivhOofz2B7pp3WkkoYNn+soArss + sa6vliLF6WAiHMwymGwWqHP+oJeQTa4YSwVGTLDSKFgPF+aCiaFMpqPP90XDPMaEFtoUldUqERGuliRx + Jft56ITs/cUpTe1DfS5YZIeyXIZF0xy5vFMa4TBHEC1AICLFqJ0IGnDzlDFzbQNCDNVm1FwbFR0TMqaD + FjpvWbvRTS3ESoRCUHMEqQVBQU2NkL4o2AMCIRCkYrvzjquo1SgEocNQt9HMfNZ159PhpKrjS2AYOHfP + Pdfed+/1gnwP3PDggzc99PDNDz988yOP3PL8R2+hNOQ2D3vooZue98ANPIzjuc+97u67r6F2BETvv+96 + WqkUndSFQCw/hZ9Fj9Sw8AhFoRuzYcZmbt2J0B7YE2e4qaEDe7ce2r8dW4CtW6cO7N86hdZQs+y3KxAS + QTyrSkorCtWLTrkz0iBVfaE2SJU+2gI112rBsdF+xm/cDuV7kAwqFia6l3R/wwlAT7tcbreK0GQzFsPL + HHH7wtz05Ih8Sj5XTRSM3FGR68QwJmMs56ExS6tPbLgDX9RO8uJQMBqwpdeRO1RwJ1cfA3j08kND/Ww6 + ZW+aUbjdXyZ4cPvFW6scTHSEiYzKqkDWHzq/PH8sCCPVQBcZSJdoExDOJUuOL0TOafdKMW11RQap0Eep + CM1WBiwUOBT807VuCQ7JzA4tfQmtIUIL+qIxpEn19Q0YdJXIilD1IezT0sqNpVWdpdXlE675z9gDfnCw + VHiJ/CD+EuDBSf7EYIF+0r8oQLRi6fJVy4JFgIHiSf6s4/8QexLOWS2di4/1iaDCYU2+TFZTcrbyPNKa + 0KmAF4iLMGUCNDpx1JCPiwc0iuCnm76YMuFbwkLDZBEpbigKQ480NEtTW7XQKRWaTBUXvKoXWmMoaIzz + fC2oPjJeDq7W9KXITWBCg7SLPlVHW0vrpmbJrw/DwpQ+41gYmqWxI5rTSEQHNUE+VtUpbKNnxnrKHS6Z + iKVhZitqrjGWPmi3TeVtWOh5hMFoVP21+3vax/o6sBaTEAaMp5HQYUhNt3C0FxRU4aC0Rt1NjYoQ4gkj + N4NAddCehSOKcbbYZJ+5AyCEMoNGAmoojFDaodddey7QCPmFYo4q8J67r33e824E/PgI1IF8jz5662OP + 3fbCF97B8ZKXPPctb3niySefZ5++4LHbFRSfwyMffN6NoCZwSOP09tuupF96002X0Cm99rrzmDtqXQgr + 9aBK73cfPUt6pDB3TFxoyRVmwCb1H2oKzbUnPYoyl3r3skuPXXrJUUlrGsZrpseKwl1oCofLaCsx3LHu + qBWFmQ13DGbSt10cDNy7gNouWJ9nab2FolCTmHxMmDCHfV4INQaZ6WUXnXto307OB7eo5Ruhm9BBNeKo + MUjDxquGAVvgNjtxxnukhRG49Utz10VMYrLWondH48Q9xJzpV3OaenOqssu2UBemo0GbDjoJwNYEnw6q + wkoqQp5Kkw6TijCj3aVDwbQ16vvyjDgTy8QcFoYeF/RRpBR0RxULS9jNkE2hCazsblAMLlnXSfSSHs2l + hvXBdCbNLFRvNgXCDaUVG0srWqQu/P/TP+s+W1FlN07wr64ERX9twxoadSePZAKES5Y3LFtJxtaJfkA1 + mJ2gSLWXIeeB2qIZ5nEOWnmXlIOhjoxnSkgilAGi3mUja8I9STAlKMFPqNiXz5k7xH591g61KrC3XJ4a + HYUZpJ/mdIQFIEyn6DWx0MnZka4W2jVJQn30F42XcUqTSa/5dFFIVIPKEVWCaKIgDP2ljJuQTx+Evkdi + EuSFahFhRiLNU0YhOliz1PWCZpZmXbWxsf7rr73o5mddOTM5qiYyMiAkcTBLn9Dou2iurctxmwRNhNB5 + JIMmIozRu11WDmro4MxgN3YqACFC8gmokkM9czMj9AkFDsdgyvRL0KC2RpHiASFGkAFXQBezwMY+DeNQ + ykHakuedu0/Ff0ep0qjVnnXdec+58RIhv9xy2e23X0EXlIanQODDz3n+8299wQtuf/zxO1/0xN3g38te + eu/LXnbfU08++La3veQ1r3nkZS+796UvvfclL37uE0/c9fgL7+RgfPjIwzfzvcCh9UulU/qcS8FCsBYs + pAZFm5jVhUcgzkh4hck5aJPymm1SuFkc18SS2+LsOQBIPhU/cZJ7MSAdCZrC7SM908xK1WgmTgoFCK0v + Gv3VIjtGgbBgJRPJorW6o8Ka0d1P7QBC2Sfx1W4sFzpaLBrCWFfMKdAC0lT37kKQGLoZd6SP5pIo1Pkv + UGZUTOUuaz4RT7EwGRlYWyVTUHhR6Ndd4YbZnyo6FqeDciFDEY95TAp7NXQUrrCKguOidsLnLLEQTJEv + 1H/epqoJgb74WfuL0q8kDmraI8U7ho9LV9SzkreW15XH6zf0opFYtr6zfi1tzxZyKqQLamlN3iaVspKi + sLm0YpMcoOZ/7j9+KSKKmGxBwuzv6zlt+xiep1zumpwcZW9z8r8RqAGeNa/esJptxQ+sj+qvJ/0Rx/9p + PNJmynxvd0f7mQf2dba3e/u0VjkYuDNs+Ay3DDSRq3d3dHBPbMrbpiz9x04qLQfDlNv2dzhDlzs7NXJM + Nlx2p0FsoRD0i6RAHM2BYvA2zBmNOlmG+jV4BIfuaFAQBsJ3znp/Y1vLJts1u6eMhW4FRQAA//RJREFU + S6+KSokc8gXL42oFfcIdtZ17VgvqilaUT5iSzOCQXT+Jr0aT2bJ54smXP/zGVz9BggIcQsHI6FRiN/wj + CzEL9NaFaSpIrQJD6K71QgNHhhuIxDV9F17Mzol+mqI7Rshq7x5TQ7VhdaYeQVAPZVSzdm1ASEfRWqPo + 0AsEGbHMVqXEhRcdoviDEQMyIXugHXrH7VfdfaeQX0AvMOyhhwQCqfZe/KK7Qb6Xv/z+V77yAfDv1a96 + +DWvfuS1r330ta955LWvefSNb3jhu97xsre86YmnXvngy192H6DI44HD5z//NrqmPA9jQuaLDA4pEKGY + wiZlEincGe2RUhcG4oySSEFojE9BRIsFlrSmzaKmsDh7fkEMVC1nWDQVDEphjY5V9oxXoI9uHhE26VB/ + F61RKwfdgDu6bwcg9NAJ7LZTZ9GwX/HYSP2bBqugJInQuaOhQ8CZoGWibZ7ysooAigmb1JKfi+7bajQT + XQCTToad2NUVYZVeQoijbrSWEEcDE80QMb8NFe9Dc7FQgncAQiGR+qHXu5eD6VUft8LBcNjlE/npoCkr + 0h12WH9k2Uny4Jw7s2gtGPby2gmTBy0pWTY9g0Cp7fBaW1da0wHzZUlz38a+ia6R6dWtvXUaOlFavdGw + ENZMyO9FWSFWpdSLfGkTmYUnjxo/kEfyPiESKHd3vvRFDz30vDvhNp3ej+FPhdHX0FDfcQouFlg27s3r + N7Cr8Z/Cn2nN8tUAIUv96f3ok/wuTgbOruO8vAISW7N1+ZJl8+PTF5x1FPuK9AcZziWHfCpd+OZNODrZ + hFkQKxSA4SSqRZARaExHg7RKjOUVqV9hf2f4Z7NBb4ykiOhF4SIVYSF6SeUTwQtfrbcDfSbYRMVJYTY7 + tCuf65b4p8G+CqMI6rl0Rhj8RRPVoHEQUtcYc1Pz+o/1C6kWK52DX0p/j/jngoo0kj7I6l0+weIIFk5O + Dt17zw3Pf+TObQvTtEarlIJJR651A4T766+75MgZu5XKnwNCMUlRAQCMD50OdqKcQycgQe3YqZi/tgwI + Q/SuaCdi6Lxo0jeHZAnz1Gb2Rr4EXVAMz0AdM07D/4VaELUf0zuoMcKLuf1KKQTv1UJQUPA2ijyw7c1v + evxNb3wh4Pe61z3/9W94wRvf+MI3v/nxt7zlRRxve+uLP/3Jd37jdz7zhc994K1vefGrX/3wq5566JWv + eAA4fNGL7gZEFRFvvU+pNBBtbr35MsQVTCIFCy89gpqCV6Uk0t1YuzG8PPNMAWnqQkJ9tUFqsYUe4TtA + 71eEkhpkD2UGM4F5uqPjld2jYrKzfW5kemIAIPS5YHDnUXZMaiWzmKFaDCNc39bS3NG6CflgFFHEolBF + FM4jjbThrFjUHVLQ20RNYT6JIgwIc/GEUUoYuM2uoLDuqFkmxZTNvK1MElKWDQjVmMl7Kn5xJfvONIbC + bIHD8L5qQFikzDgcRvALjIE8FqbUUG+E+vwv7MhtgVLpsBg6Ogo6791bWYUbCK3r6hkNrsRcW+1mZC5Y + t4rEwY6mruHR+R1do3PLN/WLubaGEdIjFbyUkAr82NR6zWaEHCK0P2kgXMwn7CRh4DgPk07jyhXbFubw + kn46z3b8ko76ATh5/9ve8MTD9w/0VPzBoIlVRE/nR5/M90p3sVaMRuFlFyrFZfVLmxrWIBOy88C6pjGk + MFSBdqcAIeRitcy2B8splpw+sSla6EWkBaJl7aJ1ESF/QhkN2onkAggjgeKAUDsnuQspfipXYK0w3oLj + WqIjDJp6v5jNU4YVYWZmbHp6zDwYI3c0sxvVJSMTTrhIK42hT4FQI5Pw/3ErtdDU8pQJCV2KWRMZiVQW + O5OUZWsiiyPL6+zMGHUhyy64GDuioR2qc6lmISuO9sPsp+0JaxEn6GCuTfqgqtzo4yWqCbHYnhyuzI/0 + WvouwzCRzTEPE5oM00EPHRQFoTVF0eFZ0K4OCKf37J5Dz474HeABZsAebihB5gjlIEUhBFGILXffdQ0o + CB0GFgww9tKXPBcUfN1rHn3H214K5r3pTY+/9a0vfvvbX/LOd77s3e96xXve/UqOd7/7lZ/52ff+2Z/8 + 8ld/+ePvftfL3/TGx9/whhdQJj71lFSHL3/5fW98wwte8pJ7QFbqQopCmxc+5zmXMoDk5/IaTFmoxJmd + FmdI5xZeq9uQhmwKkxVqUShB9moaQIMUoxmhzICFI2U+biXpfqS3v7czZYrSbRbhoKkG2zJbNecryZhQ + Te+svy1/NQKzcFxr3ciNRawSlEoKJSpWilFcWA2BjUygU0JWFswrCfUyt05Yo5mCIu8pnwXWkyoh0RJJ + QqG3RvN0s7CndDWh6pRESGG4WCCvVe9fq2aExb5oOh/xBmnVuhHKQdtwJ91RJRzoXerrZkz1RYEvbv3D + QqhSClbFVXX1NDxJooAmqhyZhg3L1nWuau1f2txHdVi3uqPU0FK3iingRp0XYs9tXjNGltHvMiw84T/7 + yUpp/YGjRZx0nfBFnfIDervK737Dq//jP/7hFz77yemR8eOjZvrs/NbwjE/jdzc1gm1zCi/XUS12O7MH + BACr9VYHeItWfBH/cqdOmC8mOsKYQRFOsqQozEGgnaDexLDbSVHomz6HQLkq7Eqo2TmpFlGEaXyWheZX + Y2TNhLqQC7hgrhYIpTYX6e3twnrKL/5YFCoWmqdMQUSY1Yiy4hT8taMhVtoLTSu/XNyg9ULTj4nCLDPa + 1hpibWQesraGRdYKRICQUSItUJZm1mLKlBiYIB3RifHBhS1TlUoHt/kIUjILHB/oXhjuofsHKwRPNRqA + pO/iLCp9UffX1sQlBUI1114QKxmmg1i34KaGcQxiQUIkKAdpSGKcpgSZc7QpehGjQfqWVGwPPngjnJcX + v/iet771RfQ8X/Wqh97w+he85c1PvP1tL3nXu17+nvc8+b73vur9P/qaD3zgtR/84Os/9MHXf+ADr/vw + h9/w6U+986MfeeOPvOfJd73z5SDlm9/8xOtf/xjVIVQasPDxx+969JFbIN2gO4SJeuutl9N0fflL72dq + iHIfLMRxhqJQ1BSHt1//rAsffN5z8AGXoGBnzeiwUHzXRGI/iF0A5a8l9/LmEEmxBXH9iNTKU/0dDA6n + JwepldPWqKkmKMF58zHdXjR3IiCiJtQrHNoNE8O4Q1BSDkIZjfp6TSVMfUfdX8bEFZm/jCIf6IjugsMa + 9d7Spx/DCcyPGBokJbhVdnW6t9PzXE5yng2EtpZmcuQ8mFaEaOvAkXHks9aLhvQWgbD2jDAOCAvXuHeG + Ehq590jTdaO4qlTDYUEymGJhTWg02oSG66ALWFmqW1VCZU8Mk5BFjS+KKIJIXtIHO0orW/SgIoxAqFal + wXctuyHB5ov+o6NM7MPJJO3ZU/C6T/7BNX8qdFy0KyePUiePh12t7ffdcssnP/gj9z3n5vb1rfWlkwV1 + 3oFKubuQLVX9c6XAV0tP/xJEFXQz2GdbJ9YQ7oQvmMeYEKeAng53YASrvfJUC8TRzGUmO5n0ceZk62Vi + xNpMRGH4Z/cnPf0U/Ox2uEf179LKSCvCeKlkuJhiYTaBCEETaQBFQVYo+9a8caJe8EnuREFQaGuE4F+1 + 6XZk0IRs+sTaKiHIRLGEjAZDRZgqCF0+H1dAZ8oI4FVXDMmimakJKTgMCJ21SEfUg5YMC1m7jx3Zf93V + F1HqBSAcrkyN9UONgSCzmwEh4vGRHpQDYIAccEZ0YGY0GcudDxWhKuhJO0I4aPm6pANC0WQmh6odL9Cr + rjpGTXaDmsUIQfSBG8AqUJB+JhNBkIxi7g2vf4xa8J3vfPmP/MiT7//RV4N8H/nIGz/6Y2/68R9/68c/ + /jY5fvxtH/vYWz76kTcBhx/84OvASB75rne+jNqRDipUmle84oGXvPieF77gdugzPP+991xHXXj3XdfC + JkWtiIQRSM6KwiM7r7vu/Fuecxl1ofhxazaFpNhLboaYrpEkBRCCgqavl5wNxqWDXZLNBJl2qGu2v2N2 + tPfo4d1bt0wFyYQyj9htUDofOXMP90dDGUmu1wbpBka8GjqR0Wf8jxVCerEEatlQ6enAns0ilwvu2yKl + WN+EATet1DBUZlioYYQDAz0QR9OQXqsI6SWMDPQPVHrAyEYpDVMsbODHYTFKu8Jboz4FkEeqcL4wJnQN + rghwFSZVjGQXlyFiLv6z4IAfiaM+IMwiCe0yF+JM1REHJVkcTVoRFrbXus7Y/ruwC4+7e/9vrpXlVWC6 + 6VcsZBmvEw9S4cJog1QSmjSegiKvDmnEik11K1rqKApXUxQqiVRKQCkEtRbMSsNFV2Z+JlQL2E4nCUvU + D5hqUrOfcK1f7AEs7KAgW5DTfobjfCMI3d3aMdk/QjQXcFszJbjmtyPnhhBceBPEl2FdQDgFufqNpEKv + w+o1/OMPjR2SBTfbX0+pX6s4A6qqw9wdPFJmcQlk+o+252GkTf8/aSFUO44q7iWPsD2Xg7F9atjHjxK5 + 3moJkubaYsPozYvkhA4Tb7uHi4FLF/VuSqE2OlnKsa49KVwmJuAEboOj1plxZb2RZbIrNqoJM+6o7H9N + Wa9+iW69GB23nVOQBlBEBmlmrpZLX6qdOxEttpOOaA2j7aAUzAy1raumH91NBuRTTb2gYLbOWkXiVjKC + iFqysHbPTI9unhunFlS3zFbKvjn4L7ioDAsQbhsp46iCx5gUQ2olAypI+q5G74IZ27eLDk8SBxfEUA27 + FgNC+o2Cgufu1zSJw3BV0Eugc6dLiVKCWg11PIXaC14guggqude89lFGg1R4lIA/CgR+6A0f/eibPvHx + t3/yk+/8yZ9890//9Hs/+5n3/+zP/ig3fuqnfuQnP/WuT/7EO8HFH/uxN3/oQ6//0fe9mpYpReSb3hSw + 8BUvvf8VL3nghc+/g5/CGBISKYY1SDWwtsGPlKKQV8XYUiaFZzIpXBC7GTILRfIxd87Z+w8f2s6vZjbc + CoQyIJT8ekakjEsHZGi6laJwuGt+oHNmuGfnwvTYSG/UDobAeoBw9655uLWmUfGQ+ugvI/RdJ9F4m9Ql + oWx34H/293Vzj7cEEvmETAGtO2qUUXCRdCayI0i952lTWrIPra1STFqjqSmuiAstWTM4JcXz3E9+x0LL + JjO+KOIFfmi5u4Mz3wyb8p6FGV8maY1Go9FaxFFKkyC5l81sTdZoGAc6KBboBd5qSvbZGRzaHj0uO2Ht + 4lPrOOX6XfJJUTZGKr3SR01NYZM/P6j8FA5XMyaEMkNdCC5yoJoQvAz0GaGPHtc12qy60nWalbBJFvca + DmS8akxJWP7s8RubN8ACZYzDG8/vc5LYZvwP3u1NGwkfOX2fM1v0M6V6/PEnj3/Hf8GWKQHIhVIYnNPA + qeN8l/XBF90E6Pss87mGBn+7UgjU3yiq6f2GPF04OVLwMxTko6IFJFIBV7mcuK2EFzU6kkh6Tjhtkixn + E0O2AVl+Rrqpbo3GHohMtun1QbnWxmi2SUwVFOmkMF8XEjG4QixFE6aMD/B9QGhXb+IUFZCvWkRhcBhJ + BIFfF4kGrqMIVjLaFM0xFHxJMr5fwhcVTbSRZZwEmNaFqXxCW6BIsEG7ZhgWsZjQIVPiHZNX0AcUpE0n + TJkAhKKdkKgEyV1qHRjoxjgbj2kKAyqenaNlQpe2jlYmgcBYDobQQemIDtE2RDsIKeaKy88m4chpMvvQ + Dh4UIKT3CNhQfuEgQykGexOODEM7mqIoJUDBxx67/UVP3PWKl98PL4aJIChICQj+UfBR+X3qU+8C9gC/ + n/vsB7785R//5V/65M9/6ce+8IWPfP7zH/7sZz/wmc+8/2d++r08BjikaqR3+p73CBZSVr7m1Q+/7lXP + f8OTj73k8Xv4Kffeez3EVPHshrN6HZzVY5SnvKqLLjx89VXnQhnVbIqtEEepCLnx1CsffuTh25gUYjED + g1SSKCgHR4Uui5MAWDgy0M3QdGFYhCWEckz0dfSVW3uQnehOQuCwW6T0DGVhHnlsrwkqJDO5q2Wgv0yp + Z2rCCIH6N5XAEBURxnTJQiShkYcxIx0Z6du+bY6tjLv0ib9MPrC+4OcX2qFrhMxVmBGadiI2+WtTRmtV + hOGSYZNKQRIh0CaFYYupY8KoXEq6ozUHGVk7VJJiGuTbFomhsP2r88lT1owuJTnVoCX0xrrQdVwOjbrd + X76caCuvIqrg0FRiWhSK18zKAISqtdfkXkvr1WPl+jo6pas3LlnT1rC2d8mySmlJR2lZc2kZrJloOrMs + lw606DJe7urYvWMbBQ17lK1Tc5WOruPjBK9xeKB/88wUqnYOR8eThEOMtXp7JDP9ZB6vq3ERaJs3rO8r + lx2oTuZ5jv8YjY5sZKcTkE+F6idZK5/8TwckKDTTNmyCheFpDA6FPlxjshxmrPG8qed6AP/4Tv4KZx3e + Pz87bV1Q3W1ZgyI0SAFgDKjFpzAo6FN/taLXmokCzQs0uTZq6ZAiD9u2n3BRdVIY8s/sskwo3eGiTRWE + yW3b9magWOCUu5TC+DLkTlg5yEfmMT0dnV0d7aKaCtm8hQzCQGfIPGUiECY23BbDm3dWozUaAngzINTB + UiafT221ExG98RjhxbT1KbnD12jTvZ15xu7n3vnsmUnSgdrnBrsQTkgU7WjPJBUhuUvETZh8cDz4i5qt + GlmD+/cvEPIX5IN7NouI/sAW6YselaxBHM6sHLz++vOfc9MlwpG5+xr6os9/9FZkgmgkXvWqhyG8oBGk + yQkQ/vjH3vITP/GOT3/6PUAdsAf4feXLH/+lX/rkV3/5U7+sxy/+wie+8uUf//kvfewLn/8Ij+GRn/jE + 2z/y0Te+//2vefe7XgmtlGcDC598xfNAWVqvuLJhVYNhNy1ZDaw499prziPjECfSa646B1IPL9WAkIoQ + LLzg/EPnnnOAipBy0ASFShlFRyitUfFZHUBVCYeomziO7cNdJBQSXEwqkyUUuqbe32HjkRqDVNzPu1rH + SXmsdDqzKUZPJLJ6+RPnmKKuKZSJXdvGyy8799abr2akhy2RnTDJ7NnUOJGrHH1kCm4yioVuh+u+SBnz + Kzvbo8u2neeGiKklr7NjChvKpPtSY0DoXLYEFKUdKhe4ckq9HNTUwlAasoywGFC3oIJLiOVGL4/Dwrix + NvBLKDO5JciHhdYVU+J6oSLMpj85wjwkRJJ7ATMDQnEWpTQkoSKWhlBGG9ZvRF/aO7ti+WCp1FNa0io6 + QgNCFPq1aIw11u3xkeF9O3eo3mRFW/MmprknXNx5dyz9x4oWW3dP+F32gAD3VY92VOCpDIf4ET2dXfhE + p5jE7cH+3smxEV7tSf7E4z+MH0cN1NpKHMnxar5Fqz2vRxWgrLar+c/OgBT8DNKs7osQKN9Oa5A5hZSY + ARe9QWrDyGwLZU1RSGbzc9Ptbbj8pdsx74OGExT74Pb2ljgmTE7leE57XcgNhqAklXLVLYlOS1oIZqxR + v6LcblQn/zIBTRlr3rqJ29WooMjqwoB/BopeF9oSkMIhnyaGxdkigtACIOxoba1OqDc1RSE0IMbwiggM + 00i4CVR7eaPtxGVUgTB6qonyLMmdKMKhRf+k9jETE4PbYMf0dHjukq3dmzeP79oxh1XKaF/H/FA3/qJ7 + JvvmCF3SDPpoqBYU9AzPPGUCf226o0qTEQgE/LBxoS8KMxN+pvRFLwcIz0HeTlkGewU+Jy5oWMNAE4Ud + w3SQCR+80A+8/7Wf+ol3fv4zH/zMz77/537ug1/60o+BeV/96k/+2q/99K//+s/+5m985rd+87N8/NrX + fvZXf/WnwMVf+IVP8Jif+7kP/PRP/cgnPvEO6sgfFSx8BVNGdBe0WxkWIsynKKQARVkIawaezm23XH7f + 3c9CwoGcg4IVrxkBwgMLWI/u2jnLL5KmMoGC9IHBfnYAMiOU/nDvDK3jsd7NaEtG5RAD7oEuDMqR1UON + 0VgJysHgUeAQaCiYHbFxndqNWjloR8qKSi1n7ayAhtPb2y3NgyildziUU0tPsHx3NHEcbVyFLhYL9mZK + yExKH5r5Nc1l7LRf17imuWkdfbh0g5hGTyTyiYw1E7mjWfyLsdiyq5JPEylh1t2J7R/aObZd9uEIdULi + JmOznbSrFG5bnymMZuINYbHmDSCrF724oOVWuYiF9vD6krivNZhkXrPs0RcKFtpRv3Jt04aONU19dXWV + Un2XVISmpkCYX1+Dz1h7gQYAnmb1k67v6c84ed0CqyLzF3rmfLsBITfosbW3tLLK8/KW6lbDmp+2BD8j + KGhPYnXPyT/h8d8uvsoTptG+i0Gjo6bDIZDEr88OgCuLUzFDvHirwMIyXJSzT/E03i50J8LwjwqSczpy + R3NAqBTRYLRt2z32Ohrhko0Nsuow1eRG4hm16ejIIJa76YWXNmp8J2t9Uf2Y2mTkKDOFSYmy6ZrYmNpY + xbqj6bISzGVUX2/J4E1NdmSyQncZpd+FJwg2ImzkaZFNTgwNDvRYjzQHh82BNRNcZmInLZIMtS700jB2 + St1KTeCwY9PAQHlwoGx0f8laqnTGaFnxlCFmD+cwYhYOTg/sGu/VMPqeYTUXtb6oKeglk2F2ZF5UEzFl + AjeZPXNUgY8+dNvdd157jmgH9yOipxxEyQcC0Zm8RcmiDzzwbAq1Fz1+FwxP6C1vftMTNEWZC0IE/fRP + vucLn/vwF7/wEemFfvVTX/vazwB+v/M7X/jGN770rW99+dvf/sq3vvnlb37j53/7tz//m7/52a/92k9T + IH755z/2uZ/7IINDqQs/8sb3ve9V73jHy2i00m5FUKFF4a2wZigK4cswoaQqvfH6C1E0ChCquP7wGaKs + p5AVu7XtWMxMRgWFpPUqFgprVOrCkQqyQsByC4qR0R7syKmbCeUYw1+mpx3p/fzmCd5bt6wLsnpxs2Mi + GNKvMosZ+qIhhkn5ovrXjFiYUYIDbRjxDMGEOhQUCc2GtchsmAtypGn1riOUzVaViCIWhQ1tmzZWOruw + zE7PWAuyyHqkMXHCAss44WmBEtEktJggJUwieeMVFC+lLN0sbDdzOWgSzBRI3bkrN3PZjjQZyxwNfaNU + T8yCwFPQisuVhlnKRAaNSVNUbup1biFN9TSZy+VOrv246Q+YGLAummvFqiDVj+ltyB9LV9rIMArnpTQM + mId8cMnaUv2muqW4yUTi6BKsVECKExh+nfzKfzqPZCJFbokv5cd/CmbG0J7xGyo8zCFHEOIHLwc8nd+z + 6nv4q3d3dyD/56Q0qHOc88cagOmn4R2SHYDyifhNk+owrRTDI+OM0JmiepJkXtsBDqOnTCqo9y+lfhCB + LBrIMovbjWZkmURNKLQYvcy4fjZu3AAIJd3R3LjCmTJpa1SdZTKOjFWEoRYMKwJmOoJ8GFxx5FN5ZVsN + ure0EJnaaOJ6O6K1R4aCulSFLpYMeGRFgywmRiHtGlBgPNKUTWqGW2YuY/RRk0wQSZ8pCNP0iViCsBAr + ZSNED7JAWzk4NICPdgWmjAQQVtqpachRnxrswlyUAeH2sZ4ZBUIJox8OZNHZGRFLAISS5I5qQsii5q89 + h1cZKvVLL5HMBzAGlQK0lKuvOue2W67A4cVoMujcEfmheadco2iDJkozU5qiH3r9xz/+9p/69Hs++9kP + gm0Ugr/xG58BAr/5zZ//7nd/6fd//6t/8Ae/+od/8Kt/8Ae/8vu//8vf/e4vgoi//fXPg5Rg4c///MeY + I9IjZbIIlZRhIY3W17/+BU8++SBFpxWFlKEUo9YdNdM1erbCl4mRFGY9yi/CryO+oyqrDyGFqAkNC0VB + gdtq38RIRfhEGtW7GfM5xoQ97VI3D+MS2GaudZifGRDC7QwxhPHPkXmtGcspSgmTitDs1EN3NN8bkBOg + p6dzbnZ8z+4tpAGvlaLQ4nkLzYbkZEvG1cEUMIh8VrlNoA0Oo9Ea0iCXEkr6RNoOyVeEeoE0CMUvZcqY + JCk1l0m91vySzMGhXsVmXqqJokWVcEoiZXEAAycnRkkzdZ6dTwdjkynw0iMWypRGD1mc6MD2lLv6+nqU + Mx/aWvn5T01iYOyWyUrJErlErEe1TepYCKHUPWVKS4FDZPXaNV3aVKqH3cnwaBH2hr6yHzRI1rHphzfB + 64evKFWdwvL69euwTvXyy/GAOujkSTc8MmvMPiPY9Yw+Cb9UUxNThGIysBX7Sr6SXrJrNx0m41bIm6Vp + 1zQ7S5LhX4TGXEc0jAYBQn6Q9TRsRya9i9gu9bM5tv5D+zRPFnWyTDY2CGRr3VpyFYFDevnpBJGTPfO8 + FzJ3OiCMPdIcTaZGUZjJp5w+qmFskmK6noFN9CwOdSGVImUoa5NttzM5c3RfS6InQhfLuDMxm95YMwKN + dlSzZmIDTbFQyoigPAt80fy80CmjjoVmNAoQWq6stEY1Ua+v0kG00HQGhJV5/Da1EnLJhFaE0heNcRO5 + 3EGGbSgILRSXkguazFVXnQNZFHH9rbeKgp5wCYzQRDLx0nuZDlK6oZenHIT/+ZOfejfUULqdYBso+Lu/ + +8XvfOcXvve9X/njP/71P/uz3/rz73/9L/78t//8z3/7T//0N//4j7/2vd//KgUiSAkWMkHkuz7zsz8K + xRSuDc+GAANxIcpCZpB4liKloDsKEALGACGUGYSM115zDlBt8UxmPUpRaFgoPNgt457WC0U26AjJ6TW+ + zGD31BBSSzViHewc7+voZ0aI0ai+q0wBjYLkBBmjjKpDbPA6ECw09+1I+rU/YkzoDd1Rl8+n3VFOCR7Z + 31/GV4jn9IqQB6Om2LBOQgpDMKE1SHVMGI3WREdRqXQBz26xZu1Qy51QXZDlazprJo3kzYkoZAfZsAK2 + fyut3KZ11IppumeirA9U0mRIEVLSCqwZ27/iSt/fU8bJqSZZxrbJLBeQSDZsWB97pKGflE5frDVqfHW9 + HwiEykdNhlAbRj38Oz4VXOSjSuZ1Bx/ze2PJlINDLxTsRpgMiTF3aJPm0ifomiLAr+Mj9qRrFAVpMa4W + MWL1PxYyfh8WoGd08V/0yXj16ocinUzevOEhHPQZ7wlThvdjfHxoYnz45CHQfgzrLq1zvv2H8ys8/Z/i + uw7eByQrGugslJZYFFrVGPY+hSLS0TFpk1osSdhV8TxsDrVzn1Gz7AS1DWDa0w8nazy5feLNEIBcQy6t + vJYoh39+FflcIQwkYvJntHEKMwlnygSFU+S2WY5aznQ7+AhnCmKQjxWE9SUWiLCZVnHyDAxUct3RRE1f + GBBazVfg8sU1y+1GU1mhtkbBQh0LFQQVwZHS6sLQVXOvbeEiWtkBldT4MjF9wvPoBQt9TMgiDhDC+Bju + 6yCGHhrI3one7eN9WyiG4EyGvqjk0SMnUPmgiui3jFsMvQ0IESEgH0RET9YgY0JomRRelF8kztOQRM9H + QISWg7fhI4PgD/vQt7z5Re9+9yso4yjmGPXBjvnFX/wJsO13fvsL3/3OL/7hH/7q9//st/7yL3/3r//6 + W3/zN9/5Wz3+23/75l/+xe/82Z/9JtUhWEiblCHiL3zl45/73IdokPI8MG4oClHov+61z8d9Dds2giwA + YLEeveVyRpUAM6G+wCHcURkTBhFF4MuQUGgG3FYOGgoyI2Q3IGQZMxYQ4qh4kQOE6CgmCOk1IIwJ9Z0C + hFYRZsH0fHVsbIDWtFeEzhr1SWFeJJoFE1o2obkLWZ9Az6VVFkbIWQQEooSZGh9p2chpKrkTAQu18WBn + nXXpaWMcOrBzYnwoldXbZo6PsvHS2aE1/JOJeLgWpDRMNIWs2xDkQEG6pmbG5PRRb5P6MD4StmW1hCgX + J/dhRsjjuZePXZ1tm2cmaHume9xamkLdSUcjxoQvk1ms+diFnigTnvr6xvwhQKiLFEsfa6CouXwdS9a3 + Gm2wSKVQBgYYymhsmbZJw9RwlY4DMaMB9gT85EZAQfgytVgv/Gyq6lPFnqcPBop8wn/xaFx+pa5OcsW6 + TunFsDZrLfWDqmgjcmcjQwodOV90ZnbCn1pdaus98le2dyDFv6wxGmlHfjY4HNo9xuPKnysBCznFuVIM + BsMeK9mneeUXz9FwNsdzWk5ifjWsec7ad2B2YsKiDQuXgZR6kVqtNwJB1NspxhT1DoyYg4uWMGGNZlG9 + gepd4I5KgzRq6s10lGYXa4TzZVCxEnjG+uK8c9lKZ2EUojJ2qjrTRATLLHx2T6qdSImjNqfRcjDRUSRF + YWiNJtmE1hp1W5mkRyqhExw93R29PZ3ue8mY0Lgzmj4oFYwEEKZAOCBAeGBqYNtYL9qJ8ZFeaQlGEWF0 + k7G+qMRNGBAqWXQBBd6RI7uwVTvv/P3UhYzikO6BPfQkAUKsZFQ7eDuFGm6isFre8faXvu99r0Ydz4QP + Cigc0V/56k9+/bd+7tvf+jK9UApBYO/v/va7//AP3/sf/+OP/vl//PE//eMf/sPffw9Q/Ku/+gal4fe+ + 99VvffPnmSPCnQlF4U+8g0nhe9/7FN1RKDPYdmPJTSf2ec9jTHgdvVkgGWCGvHPZZZLZq2pCsZjhxYPl + 2hrNIpnoALvFGsRRU1BgIoOs3oCQGeG+6cHNIz0AIU7l0XE0MHI9g4I3nz8EApWjZ+2dnhr28OQECC02 + RCKU1Tw9Kw1T1oxTiDN/Ge2fc85QI/ZBgOlq4zF5KlbRbo1Ti4hEmhkJcVQAUgss/GV6u7va7TROS8Oc + E3fskaSaCrekSOHQpBTQa5gvSp8myu2FcCPFo0VnhyQKLlAz9+ASg26tfIDMSaoaCP0eJxM4t86rRoNJ + QG7JEmJT19ixZAkfQUTuWV4P9S4ILFjNGBZyFHXVSb80KspydELyekRnX1pWL1GFxibFkhRvUumC0nqM + EGg36leXlp6Y/vmMAFwy6fqBd1xLnR3tA/29Yjvwg/lnMkdOHX96zihWds3qW5RVtAj+FV+i451/wb/R + QC6933sFnCkURyr8D30D20nZv8Diik0GBcFQGnKmcnVxits91riIDf2wuaPrzgUyPjR87YUXb5udS+hh + AQ5TCMwPEnIMUu/D8HatAaFUv+92wEHqlJoFyxBdwC8li6Zq+sSGWBpHtqE2TnlNu1Hvi9pGu4KDVWdr + IUA1Q8EkdCKfJ+B8GYnqBYyzgILIMPRIXnQUpq/3zpvw9TslHtYF3ZFBqulLFsar0Ut0R3sZdFEREsY7 + UsZfbZ4w3pHe2clhVIPClNE8ek+coDUqAYSqo8+A8PA2WqP0G+k6UheiXn/29RfCVcEFG94m/Unri6Jw + +MD7XwMKQpNB9vDTP/We3/yNn/nKV378K1/5OBSY3/2dL/ze7/3Sn/zJb/zVX/3u3/7td//xn/7wX/7l + z/793/+G43//65//z//5p//4j3/wt3/zXSpFeqS/991fpEFKUcj3wjVFWSjd0fe9+h3veCmaQlipCPZl + TPjgTdSjACE2pxjckAkcvNbOFq81aY2iqQcId4m5DHwZ4456HpNp6pU4KnXhyGB5ckhcWHePVQ7ODc2P + VgZJJUzkE0GaosKJ2CMVEwOmsBSL3il1Qb3ViChbRob6xkYGurDfjtyZwuCw4L5tBWIoEzMGqfUVQrPd + uw7ejYjsrWI8rwQ5bYJDg7Vo2NI5Flb1S6uieiO/OjFpCpfSuqY169c22SQiFoVZOKgzui3KNG2HFjjh + CfIVQmlk6eAbtTqoziaE5UC7zmpBwM9vUyBqORhaWfxXogq0TVrHYGMcwnS5M9nuywPFfVs/WhkoB43A + JSUYMHXL6uuWIzFsFL6MNEXpwSZVYCwH65boQPGH848Ss6urg2lNNR484y9AJNvqXMKi+ow/udRhjFY1 + IDB78ip0P3m4r35kCnj2dvGBv7bsxjKaTHiUgaNUhNb6jJ/al50jmtw2FIwTwSWSpcm5xT2Of2kt6PUi + Q9yezk68cmxzV5iTg5/SDo0Ea7tguId9ZgUValtrLAeDcELr/mBy4fImw8JU/OQQmF7M1bL6VEGRKJGr + gwkp/sKMkMnl4GBlamrEsuKc3Z4CoYujDQhVXJ+MCdc34YDFQokjCQtf5MsEKQX6elk6zbJSZYU6LxSV + veURmgG31oVmtK38fvmoGUxazfT2tI30dQoQDnWBhSgEJoZ6JsgdVIMxGROO9UUgHFIfsrGdO2fRzuMv + yiEV4WEqwgCEGsB7lHLQTGQQttOfpEtJr/LJVz5PVBNveRE+2mjhv/j5D33n2z9PU5RpH9NBiDC0Pb// + /a+Dgv/6r3/5b//2V//n3/7yP/7jb//jP8DCv/63f/vL/wUW/sMf0C/9s+//1h9876twSn/9az+LmuLz + n/sQlBk82ABXxoQUnWRTCF/msdsffN5NVhHeeNMlFgV1aeTLWGv0kEoJ92C0Jo6j8GVkRliNhRpMWJGQ + 3uGehZEepJbYsdJMtmBCi+cNgsIYbmU59eLEHUJ6s2BkC+w1Hqn5IfBIMpZRvCQJTWlgYVTOeGxv0jaP + 7CojWGVYmERS5KrD2C8VqaupXUNHNLqvpSa6+TZpyKxnK+xXRxyuG/h5j9TSzRAsBBSsos+EsUU6LLQB + R77lk60AvhrEpqjUfCxVukRk3v3WhNK2E/+3pigQuKx+CVVgA2hUT6agrHCsRGQNcCfAJsseRSE4Bx31 + 0MHd83NTvBBdEvkSxWJDiaN+pcRQqAd3qX4F305/DAuuEoYnK9DXq6yQ5qejICUgn/JRykFaplSEyYyw + rbVl946t7Hyepl9oTexZv34teN7cHEzITh4nVIB4yrUdf7S56cmRoYHTwF3bhxR+C14F78ym5maBnAIK + 6kNhvsDxOaUWbvUb5a+WbRQ/jMXa77HTJ63zYtc01dbUZFUFRHQsdBR0RMxYXpnXdsoaDeof+VNkCoqs + O8rv3tHewkUInur1I7tAvWyESLZ9YXO5S/ZxQTWRxNMnTJmM3l1TDhxNpHIWM+m8xG8XFos0ntDtRkUd + uKHJwCkPgTmanzRFY2s0oqB8I5hnA0JqQfpmLjJL50lWQDjzgiW1r1c0bWGRzVusZY6juKwpEFoMk80I + EdGfsXlk93gvCrnxoW60Exo6IfIJAcKJmEEoQDhKFQUQkrskM0JpjYaK8AKrCDGUueZchBMQVe65+xrC + ArHDBghtQAgQGl/0kz/xDhxk6G1qX/Rz3/n2L/7xH/7aX/zl7/zbv/3Nf8i/f/73f/9vCoR/x8f/+3// + +l//9c//xz/9EQ3SP//zr9NBRVmBvhAQZcTImBBjUgFCsine9DhZhrByqEHJ+xW+zJ1XaWDvBddeew5t + 20suPnzVFceuuvxsVB+H8JeJIgpz36YonJ8X4qhlE6qgUIijYiwwUpkeqWC7AxDuxI51qHukHylhJ2+g + UXBDWr1hoXJnPKpQW9PZ1DbDQo0qDGmFkGhUWRFlFbLLoQFerS+Eo+Lz47htiruoUCAG4oxzSgtm3JqU + G1DQp4YpfaZmLWjnf7JHzI3YBfzcbjRJJRSEC+MJlxJaMGGW08sq1NHeyqs6Ti808uliB1SXqnxjyVFQ + GlRK0YMaI0EOAn5LgUP9KLeX1y9fxSF4JnwZJoV0NbldD9GBjbXu9i16wmgvtD1hvjTWYb3NgUYCjii+ + oytWc0gtaLlLoJ1ioaZVgI5N4R7uN36p/eO5t23Z/Nzbn4Ps2vRtNTODTqPA4tfW7lzGgeRJjIp7wmej + bKEQOaWsXXtO3maYuGwiTvgjCg/gVfV2l4d7Bwp2aODxKG7w5W5+nXXr1lYziQADemRpmah+14tC+PER + mpfR2dnGviFWhFbg+T8tEKWMA7BDRZhX3ng5WLjh5WDKYw6d0rQizBeFUmym53rc7oWBAf2K2Zlx7Kp5 + mI0TfP8o8j5twvgGMyVt006u0hFmebyRLxMMZcxHMS0HlSa+AqZAwWLGVw1XZdnmmnJQe1ApVaEhjSf0 + uAAWqUgZ9UIwhDFhGcoaWpBUN4OOmaxeWqZ2GBGfG7RDyWYaGelNykExfXZ9vUvsE75MKxqAkd6O/fOj + lxzYsicHhEFHCBAaX0bCeNERxtYoozVR0+/fIkB4plaE5+3X1uhZ4qx2w4XIJ2iN3v/ADVIRPl4Ewp/4 + xNsBQlQQv/Irn/761z8HTeZP/vjXmQL+y7/8xb//+z9SBf7H/wMR/54sFz7+v3//7//7f//FP//zn/zd + 3/7eX/zF7/zRH/3at7/1FcaEcE2/+MWP4ruG6ZqIKN79Coij6BQDcfSRm5UvI15riBolrRcgvOSMK684 + duXlxygKeeWRODorgfVbJ2j8psRRcdKZGw3FMRXhSM/CqFSEAOFsAMJQEapBAXsLtVuLEKgVYQECM69R + wT91XLPYeg+gcHpwtb7ew+vTRnquIyqCimDjV7AeDaNrxtV5cxk5gZUvqk4U4TwPN6KIKIoIk0sjU99K + IZhMH7IAJu5nk4qcSXtnweypijIqm1edI8iKZ3vZ48FhYrsBYjFfLOywY0WIipqNL08o40BFSIXDZcvr + liwtifhhdf3y1fVL8YNcaf3MOrAQgSBuarKoCjpakxNUA95C7jzYiStng1pv46xm0YPiuKbpg+Y4g3ZC + kU9sZeQerQXNj8b/0a2iScS+QV4V/3smNHn8jkxeqxf9mkVVTdCytf9U8ey0H89JMTk8OlTpr67tLDLe + K0IBh8VfGG8gIYKnUVv7LxtBz7YpYbNi3FH+MaHsbG0zbq09sopkbHdmRjMJZTTAoegu9Z9uDGX3E89U + LwetC5oxwfQysNZHdqBwwsJNm5/SaAWWjJbGxcM9cobHKtBu+Kc51qjO7WMLNJgFJx3RKgisgX+6Ulhs + TXBZ0+5oPoYpbzdaMForWMwI/Y+1j+YYYMY0kcBVWwoDZVSV1L4mipSwmTDeZss4DK1RxUIAj+WYjwaE + QsFQBj99UVmObXCVsEYtkrev0k5rlPV932Qfnim0Rsc1gEkdVcRxGxS01qjbyghZZse0zwjFYvTILkKO + qAiBGasIAZ5bbr0c7QRuZ9YafcUr7peKEAXhe5788IfeEIDQKsLf/vx3v/sLSCYYAf7d3/3e//znP6YX + +v8CEIKFfxeB8I9pnBoQSkX4m5+1ihDqKRUh7VZSnKwiJLNXKkKVEorRmioolCxz5KKLDp173n7MZY7E + 1miQT2wvyic0eZG6cMj8ZSDLEE01j7mMuKx100we6oORJMTRlC8TzdWSkN4qc5lomB562h69VLSYiX/6 + qhiKzHc7dBTUX00hUMU5buBQ5XybWqxlyno5mcPMu7DhK2wKk6ZoIkCCGiOXgFDT0nk8V1bzBsIU15u0 + yfmihoXqLBMG/LYDrkLBgIgZb06tLg3XeE6KELUjThtLTlkX4GOaj64EZLZlR5uZK5euXN20fuOqpmZ1 + 0JbyjiJP5oigndxD8Qc00gWlFmyU8k5LQJ0Crqpbvbx+3ZIla1fWY5jcsLZu1QaNm9hQRzw9XqM4jqrR + msgHsV7jSxwSyWQphs2yUArNTvV88V8Nu+rThpYfJoyd9ovMfnMazxoRefynMjis7qDad1EbtbVuEubq + 6VaE6U9PodHu5x72fNDK4lAwFIUpFnLbtm9WkXsXNN6200/OQK6BTvpB69fngVDO6cgjtdvhHkPBFAtN + cmuXih9cfk1rGtOQs7jxdK/RVETordHgBZVCYEKWWdR9uyp6AluZ4DWadEczx2034M725oHg7sKJ4BjJ + CgipD7RTD5EwJky1E6Yt46O1QxXqsGQLK6m210LuhM0FXU3vxA0tU8QGDI4M+GcHKzhAODbQtVkdt3eN + VRbGe6fEYxN/tV6zlTEUTOUT24ik3w4QSkUorVEly2ArI2p6bY1eY0CIudqdV9MafeSRm5944s4AhLRG + HQh/Rlqj6Oh/67d+7jvf/gXgDY0ENR8t0H/91+//+/+lNUpR+LeUhv/3//w37vmnf/pDbY3+Nip7RPdM + FgUIP/9hgBAFhQEhwUwAIWQZ3L2J/7UZIYpGJcucDU4jdrRgwsNnbA990Z0zLp/ASTU6yzAl1TxC0xGy + MwAIB7vljVIgnO4Xu1FljWa9UHm3Qwm4Ea9zDekVf5lQo2sXNDRCswBCbYEGtwQdB+rfujp9IjotaNsg + CurNkMGFE6nLmnXaM7vRMAXMvEbDSZswRf0Md08l6YWkkYQhg6IQTLi8r6c8NTYK48b2nVGtK0HZ3p4J + +Ld8GfvI9RvWUc/V5MVU08VtQyyrAUuEQmaKmt5YCotNEBGKMAwrFfaTtGy1L8qSuwTxXGtr66GDe4ZH + R5fQ3nQsBOoU7QQIhf/ZKCpAgFCanHrgI7NqRd3apQ0tKxtbG5euW11qbC6taS01tpbWtNWvK7f0TvQM + Tzc0d0kABbjIR77U2E54vWTTr24vNXQL72O4DxuirhSxKBXEvuQ/13jm6cPaM/EMJ1+SWsnFz6SlPjo6 + iHL8VH++42bWA43I551Px0KvBXMt08gV5XRkR0YgIlpy6ViqSEjpWIp+4YYAJBcGgzI+eh8jfyPDv4iF + xViylFqWa4FKRzSgY9oRzY0GYxivM2Vc+RSH/N4aLdpt24rAZtcUFDGPMIunNyWW65Q9gKmWrZop6INS + QmBv3RqkYCTvUCKYs5oWf55EKGti1EgEBX2OF+OqwRjuY13QLHpJJRMpFrpworcHQ5keWqk7tk6NDXbP + DgpTBtbolrHKxDCLfpgRAocWQwgcOhaKxdrWSWmN7p47sH/hzMM7qAhja/RwbI0Gc7UIhJI4Qaz8W97y + BII/ZH80MwEwnNUAM6Z93/rGz//B94Qs89//+tv/63+Bgn/zb//2F//3//zVv//fvwYFhTj6z3+CiAJl + xZ+hoPj9r37jd7/461/7GcgyVIRf+sJHII46WcYqQsKeHnroJsQbVIQmnyCDgmBCB8JUPgFrlF9KBoSb + kRKKxRqjQTqioiN0+QS+27pj2DHcvW2oa6q/c1B1hFYO2lBQysHgLJOE1JvjaGI06hVh9FfzhPqw3cnT + RIOOMO6QnBRj5jJqvR28RoOUkKuSU4uBMcqKFAiTAIosmND7onZ650WEorVPi0Kk9AkvRvam0hdduXzj + hvUM6TF4cwhMne4TjqjsYrFsW7e+SXs5UhQazom56OLRE3Fb7Nb8vmKkZv2+86bfuHzJspWyHZZnX2ET + QcXCeirU0ZEByBgyI6Q7algoobtNEfOsUgQO9VB0FH/tNeuWbFizctOqFRtXQaAvrWkpNbXXre0sre1e + vmlgYmHfwu4z1nUNGTQKBDZ0lRrKpUagkQj7cmlFRcoLMauLiUJacUBElcWQm/xOruo71WX9/weP50+l + 3psndhkFqFRzYz4AYp1+eqVwtXzCy/TCEyb4F24aadTrQk5xktzxm+YM4zwWk5c1YiWasEa9UpRvpHRM + Wxm+m0vxz8vBUCMqMUxbnWEKKAJBLj6VDOYKxIYG8km7O9uNpZY0RXMh2omUPjPazrWAIimARQGBPz7a + EMEV4VabGYcftrJ4I1ScHps0VkmXp2QcqLd1fmNqaJbL3t4usRtt2dBb6WLOZzp6OZQjY0uhsGb0hlms + AYpSMUSSPaDI8trZ3sJHpk3GQvQBoYcRmu9olBKqgqKrFZXh1NjQuccO7N09P1zpmB7oIHKWJX7zsJJl + yFsIXqMVICGVT8iMMNERoqZnQEiBpan0gSyDjtDSl6gIEVFAWtEk3nuxfVFbGZFPwPP89E++G8tQJBAI + IVDT/953f4kxIUXh//7Xv/yP//c//uV//em//K8/+9d/+T4f//mf/xhZ4d/89+9gNPNHf/S173znF9HU + Y8NtpqP4y3zsx94sjqNvfynE1KeefPDFL77nseff9uDzbryfPKY7ro6t0bNJq6c1ii24sEaTAAoBwq0T + sGFxjCOnXhPqxXc7RBJKAIUI6i27WAT1Q12TeUF9BoQaOmGHe41m/mqhIpShoE95NWCr6LsdK0IR1KcK + QgM/I4hGynGOGmM7ME4kmud8b8HkKG1duP7HwM8+rVLTF6T0VgtmInr9NPg3RQ5atctagSaTu2yNCs6i + gVtNf3/P/Pw0BvR5xngAy6ptdGiTuhwrtJeo/4C9FY31yxvql66MtxuFMqqP0JVoWYhVEs6LGmevaAIU + +a6AglYX0hdl4MdjVreW1pbr1nfUrV9fwrNzzca6po66dV2ldT2ldZUlzf1rOkdXd4wsae7Te3pKTT2l + 1ZXSykrdqkpdY29pVaXUUDkBWrG4k7pwwlbhDwfzfnijwvD7SP9Ttfkn5VCjQ8NTfo1VFWdBKVgghS7G + C61tO5SICUkGXkl1yI4vPywMJaJPB6vxzzDPpoMpTcauBxBPkGhNo8GeyP5EGpEDQnaUdEImRoe7O9vi + QCLthYbRoFomCrHbpfSFKYjN7TWeW0rAjRvWdbS2kAuBKwftR+MUBOfGpBA0gowBoaXH5TzVov2VoSP7 + d54KAZkVhSaOlqUtCOrNZFmIo6gmWCVzA8Ikrd7lg55E4e7b5KHnswljHmEUUVDH9Pd1DQ32IACgxUeu + EO0+pOJbRsqSwaRhhGFGONEvFmvuLDM/Jq1RmRHOkN4gebwunxCyzGHSjiR3QvN4RVB/77NoUSJmoF35 + 1FMPoiZ8+9tf+t73vuojH34j0UtGHJXu6G9+lrEfYnkKvr/+b9/8h7///b//+99HSs/xj//4h3//d7/3 + 3//7t5kOIjTEd/Qb3/yS9UWJqvidr//cl774EUJ9TVD/+tc99spXEsZ0t/lux4Tei4iqv+pKqQgR1J93 + HgEUe0Q+cWjrfuQTe+Z27BT5BAcJixCCMtNtb426oF4t1rYOdhWcZQIQdoXRoAcwaZtaprbSu45aTypC + U39uNIu1WgEUkRfq5aALJBwIs4ow7LryARTenDCOaHU5mHdZM75MVhEqFUWzqZPWqE8T+F7MdQHaxFYm + i7yu6s0oENposFYwb+yaLh0Z7j/ryP7+vjL3pJMR3yg7FlqNaEiYAaR8QjlICbiazmc9h2Kb3ODjMu2R + kqYkgUoNPEYrwtVLVq5Z0rBOsLBhHQkS9eAiVaB1R+WAGgr4dQJygnNruyj46jjWlkvre+rWV+o39NVt + 6AUO5VhfqVvP7d5SU29pda+AHx+bKnKsOREQiqDxJOidzywQ2jtYeE5ARpSZi1B4Ct9ykqzUZ/Zln/DZ + tJMuxWVNvLTmp3c+dQwpv1bWHFXM1G9PYS/9NBjTaJ/TR4MB6qy41zdKCkHboOmZ6prCXCvD8U+b/oE1 + mmwGw7RcwA/0S2aEmgsq3Jmg1WXwQCr96tVM7MOUQr8URvfh9nLgqqVVbEITykxRSs96AYyp376QRYU+ + 17CCjiXSeE1etL1zZNnlZPVh+sKkBMvEGgPCJIMCAsvoSD+CEJgvyAGjgjA4blvVWO5u37mwmdLNC8Sc + 9XZqsWYOzma9bc6WeR2hl4MyKYy2MqjpmW/hNYoebmawm9bo7nHkAT3Tarqdeo1OqsWaOG7PjVIRhmB6 + YY3OicXawa1UV6gRcGyRJEK8Rq889qzrzmMyRxLhPXdfCyDh84LbC54vYrH2liewWGOkJ93Rn34vQz46 + nBSFFHnYp6Em/NM/+Q0GgTBIUQ2Cf3z8u7/9zj/94/e+/+e/JbYy3/oyNjSUgyQUcnz9tz5DRSghve9+ + JbY1dF/RacDNQbPxgFms3XwZukbLqScfCmorXVyGmuY1Kr7bRBKqdkK8RtV3O2jqMd2WVMLe4RGyOHpG + h8p4jW6FLGPZvP2dwWs064uKUjOabiet0cx3W3xHrS9K7V7p7qCaDxbqtSrCgu92dFkrAKGXg4uTRRO3 + o6SN7yYymcuou8kb/uXFEqFHatN67JbQjhHsxSPpzkSLNTevSPoxyzGskIs3ynxrw6Fd9YAlEJuPIK0u + B60vGj7q+uL+olryiUYQnDP8MyxcU7+ySQ6r+VYqOkr/cxWN09WNayDQaF0IHOrB7TAmVMvQ5WtXbexu + H55t6h6lEBQg5OM6gLAXaOwYnhue29nQPgQQCgrKUakDC0E+isK1oKPBZO8JV+8f9gNYpYXPW9WNFGNx + tQirfkF4EeEwiT+qfQnkJkHHAmlP6R9/Nf7ep/QtJ/9gnpxhFuPqmt8SAC5vHGPjPBdI+DemQCgzaq1E + HUf5xZUVLSZz1in1iWDClAngVwWKaX8/d3sx2rRuDzNNoYwZxLhQLEl9bM61BvjYJeQVocGkBUfwatka + 4zLFrF5mG6p5co4M+CdOiGL4JA/OyAK6HZZN8Uqhquohxvw5ymjeYg1HZAT0vg13KUU6NaQXKqPBTYwG + 3UYyLHBWLJpxTB9Gya0ipUc7ERqkUUGR990ORqPeGqUpl7PbNil9lyaq60EYkxyVdirCYTXdFiAc6yGM + KaRPoCLXVF5hjaqOcHbGBPWjAAawQVEIhAAkmG4DKkQ6CHE0dkdVQRGIo6KpF3MZDSN86iE075huv/9H + X4Pp9qc++S5c1r70xY9S3jHzEyz81leo+SDOUPxht4bvKDXiX/3l7/7D33/3T//k1+HIoLXAiQYlPvPF + n/2Z92G6TXFpSUxvfOMLRET4skAZlUjCO6+++RYFwqvPoVQFCNVfjb7odgvmhTLKLxIs1tRZZnZmmJx6 + c1mz7ihGa2wLxoflndmOfGK0vDCkXqPiLCP25SaZUL6o5fGGYHojy4TSXLvWPuItd7VPjgz39XRbXzSE + 1DfjYy1W1vylJsYH+ZjXC5oDn2cwJQNCNRqtjqdPisLQwy+wRlMTmTAj1KIwegrmBoQeQGGXEohuIfVR + PpiF1KcDQi482JuROOpNUTeUybijLpxIY9es7HPqXKE7mjaZ4s7bXLYblywVqItw2FjfsKa+YW29VH5N + dQ1goUgARVCoZshLltIpXQUE6gMMC9fWLVkj2gnGhMvI3d7U1F5ZvqFMaVha017X1C5AuK6XcrAysTA6 + v2tFy6AAIWgXsdBqRIVGqRTlsH8sMwyQnnEYOI1W4WIF03Eghy0+ZTt5DvYYqR2F+VmEzBPSXgwwTh7b + TumR9uTHf0NiwSfgF588vGpwDmRpb21Z29QUa0QxJac40nlk1kHl1ARgvN/uI0OD1aoBYaCGWr9UoGsJ + 5GntfXjAdHTRrVUXZsSZeKmEy4mLEAo1zG8Fv2VaNBpRTT41Z1RusHvdpLDNl81NzSpF745y5Zt9qPd5 + juMsY/O/xJWxODWMbSjLIyxqJ1jpqAKbZGQYEsat/vM8AcJXZyZHaIpGrVg+j1BLBx0vycewsMYBoc8F + bS02mkyaSm9kGbHbVqNRiWGqdBDMO0keIeZhowqEBPNqa9SAUBQUAGHw3Y4xTEIcrXJZw26UVN6LD19x + xVkoKFAsWAzTc++5DrczhnbEMDHAe8PrYzY9MUw//lZ8YT772RBAQRgvWAjakUHx+7/3y9R/8GI4GB9+ + 9zu/8M1vfgl+KbUjqPnFL/0YsRVwZJgOUg5SYiLVD0ajms1LRSjaCWKYUNNff4EA4eUChOedux8gTBPq + t28HCCdCHqGg4NDkRDYjNO0E78b4cHluhDxC0RGSQQFxZqCvE/s0kdJHLIxwmAChZ/PmyDLr+fvCZLGu + KfsePnXiKOCHJHQKP7duMRGNjtuhNeoORIsZqjlx1KbanFf4kQ7094jWIGvmuyNSVE3EvqgpCKPLfB4I + ow2vzQgTk6bUqiI3j2DpYMMq1SAXfJaV7XCYhWwvVdYMj9J27MqMKZpL5BbRhW1/a7LtdP1hXcJNRi1G + 0UUss3IQIBQsrGtoUkRE/NAodwqDRvNWGRnKwyIK2g1yd7EPjZ7aIpxfzWiw3SrCOgaB0hftXd4ysHRj + v/VFpeyz7ijN0g29tEzDbUNH/vHamd/s3LrAX2ORekUcvPg1Tx7YeKRUBg0rTwktFvvpvMLjPI+u4Ceo + 5HgMkoaC5v2E0Fj9Q61Gq/06tUlpX5JaZ9Uq0fFV/UvQbtHfqeaokbN2bmqy3N2ZdlD5u9hvYViowkHd + DSTloH05jgZDpzT5NHRKFQWXSDbW8pWMDBIgzEkJ7f60QJQpggKb00f59Q8f2H3PnTf19/Xw4ByVdLmM + XalZaYSaX4zFW3sAhV3GDoSpU5R6GW+wolBWhCShnnva2zaddXj/YH9FqKRVDVKzlcG8OK8jlGBC262z + SA0NVWDH6O3VqadMJEFgJSMxT6YjTKaDAf/UdiR2QSMdX7J+DAujfD6mTzhl1DgyLXigEHRuwokQSdjT + zoI+3t9JlQMQUvHMjoSEegGAEMZU5MvQHaWK0kjCWcrBc8/ef/bRvYjzkBLi23LlFUcx9mQsZyIK1ITP + e+BGhnaM7pC6E58bkpje92rMsmmQgoU/91mJp/+lX/wJcI75329//XO4j+KjZgfOokAgnmq/+iufpo+K + iB4UtDDCD3/o9e/9kaeYO5pwAk8ZxPuQZQBdKKO33XoFHVoZEF51TESEDAjPRUS4x5kyVIQAIfSf+S3j + 0hTNDGWi0agyZYYGu+HWzg2XqZuRT2geYScJ9dFfLWcrEyOZtE2qCb0+r43yiUCWYTrIYzADonC0JELP + Iww5lJrKayNk996zDrndn5mLFhLqmQs2yVaMIfeW2amZqVHPCPPuaOKXK63+kCyWAGFqJSPXSMzsTC+c + gklTxlPTvSa7S9bn4siwKphXr+5gncGj1WktzxvXotAU9NFTLZsOxvmLoSMVIWS9aLe9pHHJ8lVLBAW1 + KKQ7iv5vJYp4LRCl8qNBqvPCgIIWNx8bpMIshVO6RsQVyC0QDjZuqmtqgyma1XkCgV72GfL1ydHcX2Km + yAFMbtSP42yoyl24SAMS1Q1JW6p5K8R+fe2Gky+YWHl5a07GPsbRIDT48ujA81AL5GWO2SNA2o42+Be1 + +43pM/HK4VkUIgDF4OAkvtefhwdLuaF5ygUQk99XTBqCHJNzjPNsMRQ84f3eKU0Hh7yZsf6L2JdAYIJ2 + ha86BHo71ErDtEDUTwPCWavDRfQB9rwHElzWks2gUstyQMg7gUXRju3zFHwuUbLSkI98dWKC8mWKi5lP + E3lTzgUjuaSlXmQHPTk5zDdygy95gzSuCMtRrWxfmIMoqxFugWgX1PSqo0DfaUwZ249LURhR0LBQl7CQ + FVAdOpEkEbqhqNd/6ygR0N0XxoEWXwC8DQ72sOzGolA4GhYPG6tDaY2SooB3GhA40I9qvlfX8TZmXaP9 + HSzuLPEs9Cz3aOotfsiAUIvCqKBQsxUJY1qYQE3ImPDMM3ZecPbBc87aS3eUhPrLLzsKJwV+5tVXn00p + xohO1IQSSSgZFHRHn3rqIXqYKOvf/a5X4JRNY5MYConn/cz76XZCIv3lX/okdjMgItlM1Ih8/LVf/SkI + NcAkNFFmigwFf/In3001SYQFz/DOd7zszW96nOkjdqYhoZ4B4QM3irnazZfdeONFvAxjyqCd0IR6KsKk + NYrj9lYS6nPTQcmmN8ftoZ7BwW6AkFYltmoQa6HXziAixFnNHLe75TCzHodAMxoNwhXJ6Q0jQ++Upm1S + 4c5Evky1vzatcnZOYrYQuVTc5k4LCMt7imbd0bQbQTsEEinnIUwuzkkBwhhGaLQvYUevbSwzSW5eb0Nx + 547mtBPGFw0KiqJhbxROeAxhsPk1FLQLs5rpXSB+Vw1HbBYYWqMhtzcuHdZeisNCbzvJPRELVy9Z2rB6 + zdpVTeuWNKyubwhTQMVCEHGdsWO05lsVuKMCgREIww0xkVHjGArKdXXoAtd2wZFxakxsfmotSAmo4Ffn + KMiNTX2l1r5SS39paKAPl9HjZzWwA4APjKGr/BIkND3T/UPendnpifnZmZqQdpyOIu1cCPSnBLcpCPHj + gKsTVpPhW1RED9rxQyOHJXsyXiRf4o2yu9LS+ZTK6LRI1W80dkwOd63+s/tP+M9nhClS2jYt/nPiTERH + pc9Ut0Z5o7jYqPN1U1hUE/p1Yj1SnVyWrEyUjmhEQWnDLF/GAEMVvkFKkXeBygaEToTjkSwKsF67utrE + ws2BMFkX8kKrCISJoIJibnCgh3Unyio0E64ppKRmggoLCoh59CktgqWQJ7GiMM0dZPnjTpZU54haJC/3 + 95Tbzz128IxDu1mOY11oQChHAELli9qAUON5McnsNHMZ3DJH+tpnB0Q+IeWO+G6TQysqcgupBxWYlkXH + USaFlko4CcdEQuoZEx5YCJQZmRRCmTlI+SXc0WeH7qiH1ENjoShE5EABhx2aYOGPvgY8s7qQmR9yCOAQ + 6zUQkeLPDkgx3MP9n/3sB37mZ95HRxQrGWpBRoPvetcr4MjQFH3ySUFBwggJPsTymzLUysFbnnPZA3ff + cMctV191xdkiIiR64sguBUJlymQzwgwIZToYgZB9g1SEop2QDKYgIuzrMBGhKQiDrVpuRhgUFLEojECY + FIheHbqOQmxFrS4M4hm5vXl6/MJjZ40M9oUSMJaGMaG+UdIr49Yq9RRN8gile58AoRghJZRRJcs0NhBq + uGFtUxJSX8yayEAxyieUfR16odZlSQjbmZeF02ScMlrgjnqnx8eE1fKJBPCqW6NhJQmdqKBgZv63Yumy + FZCIoL0JZZTpoE4BY1FIRagoKDED+M6skMqvCggxheFOcYdRNk1JdBQIJJQLqkQYAT8aoc2V0sZeMK+O + yi+g4EBp02CJ2WF7f6m9r9TWt2h3ruYXoBngsXGyyHHSz71h3bqbrrv6nDMOnxJDlZVdUiCehhUcu5hV + /BkSXLcB28lD1wl/xeM/lX/VbtiHWvViBq4J8mVAGEExGKoV+qLyqTmfxjlloRy0gaI3MWJ1WKwLeRj1 + VHtLi6nvC8hnF0zhsslzstO0s+jBLVtRLwRrJxG6sp5SjyWDZQKNMPzwhDgQmOXan5GZIqgWdRQ2JhQ+ + AvDGcsaXrDvqHVFTTcQYeu90ZSYyxpGhOAAULVk3b6smi2OCi1Ffr51Sio+Z6RFoqG63nZUghoVRSqg1 + isYwqQDc5oUAIcv6tIwJBQhJGmI+ZUCYYqGkEibxvAsLk+gNjDJjwYToKBAUQpkR7qjE8wp3lIKMaHjY + m1BXyKPA8EUTeu9/3WsepYxD8MB470ffJ2oKKryf+Il34qANHMKgARHJ3SVcggP8owoEAikEEV2gQcSk + DRSEdAMKMnQkeunlL78PlBX5oKQvPQvLb7EYffaFSOnvuOUqsPA5N15CXOLRY7vPPLIDl1H4rjjj7MJW + BrKMVIQWT28zQoJ5+0bHoq0M8fQD3VODksdrIsIJj6fXKhC/nprx9PL29rSDhc6XkbiJ2NDOxIWRSho8 + 83QD1MyhdgrDA71z0xPkBSrghcTKtCkK9ZSOfWbsnpCTtSeR5S4txpSxsMxG+GJ6bqczwpQ46j0S3zum + iRM2MqR/xuUDZGruYBIFGmeEBQWFXssiFLYr3fX1eSAMOOd3RlDMdUd1V23ba2Mw0CMFCzV3l9sYZFsJ + KHQYajsZE0IfXYpL5TKhzAgcAopZOWilIeVguKFOabipddStVVKMAqGUhoKFlbpNlbq23joAj8pPsJBe + 6FCpZbLUOlvqGC91DAgcntI/dvAFN+pT+vbFHkxX4ODO3RNDw6f0bLy3TasaF+Nh+lOx+vN3tIXekt8L + zdf0U630T2EU6vXfaWNnVQlocogU+XI14QlLQH+A/sapZN4MZWp2Sin0g01aT7mzr1IGnJKiMPRAbNpH + 4btYRWiXSqGjkndZ8z5MRh/VvWpo2tgVG0wxZEurykKlgCfmwitbN21E3KCY18hW2WiixqxjQaE7CmhF + /Mts1UytJTDJepSXDyKoj+uXU2OyJF7oEuVyu3bAPFtAAsrNazsKJ8KkkPW0o20T/PtuRI66jLr1mi2v + BRGh2Y1KAIWHMWXxvK34hNEdhQaJKsDi19EJjGo/ECAcJaTX+DJqtDYzQ1S9UGbyOgqJqsdrTbmj+yi8 + zH0b0YJSZi6BMoOOwhqkSCle/rL73//eV3/gfa+xqF6s0YjqxTVbRoY//lY6pXBBf/JT70JxT5nIwW3S + Kj7x8bcBgTzmA+9/LXNBcg2lFnz9Y4qC9yPPAAVh5cCRoRl7662XE0N4/fXk8Z7NK7n6qrPpjmICd9aR + nQC2l4M4plIUWu6EUEYVCKeUMspv7S6jvBszGMrIRqF7ngFhb0cfHnVKOMKyzimjJEcqR0l2GOw5aEEz + /+OempgXgybcblu4o8ogVa29B0+qr4K5DsmNPBaKOdHG9Vh6xi1XjjuazqpV6hqIXa6FtbjN1taNk5Mj + PD/szui7HbqjVa1RV9NnoUvxgpJw3Uqla252gmYsl6Ten1qM2iYVdwxImoEv4/gXZ/9Fx+10N5y0SbNm + UrqGsPIAHxMTI+Njw8sZ79VRgUCHQTW4Soq/IBME/1ZFvkzTstXrlzE+lGCKlWYfKkc2L5RaMCsT8Q5t + REGoA0JjhNrHjZVSW6XU0VvXSRe0X4rCjQP1rWMru3au6DxY17qz1DZT1zF5StDzg3owa2ulsxtZ9in9 + AJZ13n1DoOO0T4Hujes38JH2AM63z2w5y8+lCwhpowpfT+lXKT44rRStERo/FkSE1iS1BxQ7pama3vui + 0WQt1xvlPTHGCqd+VycxeN1muJqwv5KOh3pwy0WS745qORgqwmo4tDlE2p9xz/vUC9ivW5tqpNvbILdP + QuqZl6j+oZF9LjBmdHOr/HQQWODF2DIUC0GFQ08fFENkg0bri4YCMfhGRn6gQGMqps45bmtRCF8GY9JK + uXNqZKi/0p1Mm1RHmDBI00hCiwHK2a1ZKqEUhagJ28f6OuYHO3cOS11ItALcEMxlRFYfWqP9YINNCmGU + gBm4kVFFmY6CSSEWM8zeqAglqv68/VYUAj9GmWFWd8ftV9Egvf++66nYYM289U0vevMbH0dNgQQePGPO + h/UaA78PfuB1hDR99CNvQlwBI/THP/bWj33srT/20TeBf9wvEPjepygiMZGhoKQjysSRjigoiGafBGCw + 9u67rkW/CPqimkDFAW3n0kvR0R8879x9x47uwQeHl+qhE3RH9+3bQpuXnEV+KUFB0pcm5Tc1izVhzw5J + rxjPHWHK8OaQRNjb0VtuHx7sGRvtp73scUvWhZZSu9zmIgqhMpnEU7MmdNcS4wYj2oUZYbbjCd1RNxgq + zA6NOCOtdQ3qoliUijBRUMQZYSGGN6SjBF5MtJJhsA0Wwik1E4mgo4+loVwgcNt0pyibxSq70XRP2dXV + PjTQy6melzDZhWnPgDYX3+ksK8bpb97sKZSD+ULQ0ND+pXPBIPHip8D12yRkFAoSzeOFRCpAiI6QvAii + JJZSINataFDKjKCjcmF0Rti4sW5NSx10mFUb63DQtqao1ogKh3pDiKP4yyClV16M6SKapRwsdfaWOrQi + bOHj4PLOzZtGjmwcOntJy+FS675S505ZglliiMzlV31ai/d/3jdThNOz5a9Y8yXwN2EnIsXQcXORTvXl + s+xXerp538ADDBlO25eVF9a0upELJ+ReZZAW2qSxwnOoC4AX26Hh64vAXq6ATDgyWS/UAC9+lCzGRQjQ + NhW3jqjq6/N8Gb0/1xpNS0MuM1i7Gzasc/wrCArtanTw87rQasHsUjcrjSx6QtqerZSHG9YFizWFw8Rl + dJX4YJHJre1Qo8lUCyeMKZr6rmmnNFSH3vVSFHQszOzWUgYp6yZFYRn+vVrPiDuJatFCTn3AwlAX0hc1 + 4kYKhCGk16LqNZ53uJcxYaeMCcVfpsf9ZSR4IUgp+iYmB2gn7t0zj/2KpNULEE4Jd3TXHGXW2UfFrgUs + FGX9BQc18Ogok8Lrrjv/RmZ1t1xOXXi3JhSqrPAOeqS4wACEb3j9Y/BIaZPivkaU0o/8yFO0PZkdojUE + +Ti4gRkNQYbMFIFAlBKUkq977aNY1dAR5Xkee+w2ak2U+0g17rjjyptvvpQcqGuvFTcZ8JjylFpQvLaP + EEy/zctBXrmJCGNfNAIhGYQ6IzQgREwyLZG84sUqdtsDXUO9wpTp7+vGnUcGhNptNjV9HMoGx23P3VU4 + NB2hAGG0WJP6j20Nf03hi+qA0MEvddpzHYU6jrozu3YU4imUcmeqAgjNWcYsRi2MN6sOrf+Zt5URsWy0 + j5AHe7PE2yemR0rMRUOXJXhcxGB6uxh5GLwHlL4E2sxPTtPIKDR10umg39bmWVgTvDQsEGSUGuNriyue + aUpxP+MVSCd0nmg0SQZhnbBTpXFav8wngi6Z0HIQFBQsbCmtbpYoiWxkCIg2yZgQIIQskxMIqlJiU78w + Ylr5aDcG69pmV3TvW95xuNRysNR1sNS3X3j2LE8tLeIgd6pg8F/k8TIspCv3TFN4jv/b0c2Dpsju6TTe + BDs57BsB1P5yZaBcsVKVT9mU2VcT7migzDiJNEVHvlF+/SCrzyEfL5I/LmjNLiE/Fwyj63inN1HrIQ+j + pYFeaxpYO7PTJCaXT/iVYHajXgUaIsZryQaHS7lu21o2oahxiprICt19RvncLqL3XmjUV8hlz042Cicy + 4tyq1SshA/dXyjDRmaJI5EXTanbQ/NZxNVmFTp+lKkQSRiOPlLnnyTgeFJCGEUZ+fHCWSbgzWRBBmk6X + j+cVTSFNOdp0oeaI3VHrkYqvaaWTZTqs0cGGWyFQGI9hTEioELL67cjqR8tbR8RFZWSwe3BAuqMGhBzT + 08Pnn3/o8KHtWMyIsl5EFFO0Fs85tu/C8w9RacWQ3r3nn3cAV0+ImpbKRINU6kLrkd5z3fMeuIGMJDqZ + 8Dzf+uYXQfjEhtQZNBBKkUO84x0vZQRI/5PGKfXi2976YvAPVxpYNvL4Vz0MiIpY4gntiD70HPD1nnuu + RTh46y0wRU0ycbai4GFEHaaawFBGbNX2b8EcDou4MB2UMN4xz50QKf14HwJK+ZVVQTg2VJ4d6dkx1rMH + wwEGqANdg31I6YV2ZDRRHxB2dqrFaKQpWUWObp7C0epCP0wJapJQ/kD8pdxUNgXCnKA+WIyGDF7XEfq8 + sJBKnyZRGHvZFa6OiLafc7MkJ4taXUghCHRNDg/395R9WJiSy4QsE10p7OLSf5m/TJIGY5feCs7RsYEh + No0pEOavawe/FAWzEtBXjPz2Otd/sjUHzEOsywZAsFJsjpc3rG6s9HZvaN5Qhw0pbmomn3cR/ar1gnON + AoQCh6s31RGxpKVhqAgZExK3hMuaFoKmEaxr5tC5IIVgW18dh2DhSKl9utS5UGrfXWrfX+o6UKoclPLC + NvKnsaD/p3yL+NXFjuh/ygs4/g+tHhZaVzP9BzR42jAnxZpVq13FwTnFtK6qNWrf7wzS1GgNMwSsVYTK + W2iQ8nhRrGPI2Y4MP1iM5lujgSYa923yaXtby8zkONRQ7Tyn3FFrd4SPSXUY5oJxouCj9ZwtBVcdTR76 + rlznVgtaR9QLwWogzOaCDSvo1u7YOs9ri6qJDAsF/JRBI7vm1StZesrlDsAvpd75vFCHMcUjF0aRsN6T + olDduhO7UR8WFgJa03mhISKFyNGj+848skeAEHKpMDKq3bc1oVfctzeayp4RV3+lixgKELSvtx1ZPWNC + MZUeKdMdxXSNwRju2xllBneV8T5aiDt3zG5dmJTWKDEU2yYvvfjIO9/88tc99YKzj+3FrgWwwdKaSeF5 + 5x2AnHLZpUekLrzq7GdRF95w0a23ipoCLIQ7Qw33+AvvBMzwgmHI9+STDwJvxOpqjfgCAI+DSlGON74Q + mHzda5//2tc+wkQQq7aXvew+lIKPP34nHVFinkBBak2rBXU0KAp6MJhYKJFM0BRVFEQ+SHf03HP279+3 + hXJQQycm+EWy6eCUeMrwa/qAUKT00hctS0zVCHmE3eMqpTcVZmIrE9rODoQ+poWXZFDn/mqSpawOeZY+ + HxWEEjbicFjlrxZCm914gTNKQifUeju2GbwPH24UvGa0SyEHpy6uRiqlkBzBxGs7Nd0Wf4nm9esm2RF0 + dYpeOzRObKaezgi9LnQUdO1EZrdtyKdOv5Y7kR3567o4JoxFYQ4LfarifSblu+Q23ywmoDzKXp4R3zX0 + go3rNlb6+1atkXYoIkJVUGzQEEE+Mh1sDhUhKKh1oeAid3pp2LB+CYkT2hfFXE3IokIZFcmgVIRt/aUO + JYi2DJXaxhUI50rd20rlvaXy/lL54H9BKAkvibetmsAJAhSzMn6Qv0Eq4zuZn8PCThvvhMSZ+IDFpPkK + elVf9CrQXomXfgZXySgxVxRaucz56vcmpWF6aoYORjyj/dOiHsgMdRUIiwqKpC4sUmYoWdHwYWBvQBjn + grYVDbVg2g71WlDtZlZ0tLWMDQ/S/3R0tAap8wWsWaSsGRkTZvZUxTyKJJIwCAoz+qjRTdPDGTQundY4 + Uxn8mKtIIZgwXw6ymK6lLtm1a358nHAZBBXNPZ3tMAkDZUZdvnQWKD4mFkNhfFEzWrPVXEQUPW1E1dMd + DTEUuIgNdu/aNnNo//axsX7J6R0lkkmGZ5rbTmt0lLpw+9bp22648ouf/tCPvv3V5569TwLriSc8c6c7 + rmHmAhohK6Q+IxSQ0R00Fq0Lr0XkQCX36CM3oy9kaojEkKgm9A8IIeh5Mj587asffe2rH6FYBPyASb7E + AwBOJoIGgc9HpP+iuwj+ZS7Ic2pH9CJ+CiSdOBqUrImzj+2RAMLD2wHCG6+75O6brzvj0A5QELKo+ItK + 9BIxhDodVL6oaydkRDpUpi+6daQHR3L6xjMDXcN9HRi0AoT+7qmIQlujsTuaieijoUyaRKhAKA1t9DA4 + 7fEldVYr9kXpt0dbmWyH5PWfNiFESpiEERZ1hGl/PtJHpS6EPAVL2dukMaE3yIFkHC77vgCKtFgkc1dc + BuXQeWE2R4gN0tBu8a1nKqKPHRrZmi9WCC4yIKyuDhMmQTImBOqUKZoj0bC+yHRFVxHkE0jjg/u21YJy + aAm4prUeeOOjgR8f+ZRBoJhr68iQx2jcbmvXwI5dh/rGtza0DTWVx5dtGtCKEMkE4KflIGSZ9oFS61ip + bbLUpkDYOV8qby9Vdpd6953M8v7MP0arjcBzqfnsPMCq9WpQkbq6pvPKM/8yS1jtKIUngNIJcVE3Uqcz + ai38Runvx3Pi+sWWzx6TNEXtZoFHkwFkYWrogsK8xUwOC9PSUHdzuTPbpoMpVSzdLVaTReP1Fgiihm1p + cyahxkSyaNbMcTVh7sJOmXLqL6N2o8FlNA1sy5IovEeq8kFh0BhVvXpLLstWwELYN84jNWWFjn/Wr0Uz + zxDFaDL0YFkxI28wiSq0PCZ3XNMbpizsgk/fKsp6AJJicWpy+NiRAyNIBdtDLWgLt022jC9jOgpEFFP9 + HUQriK80wzAMSLdMAoTgH0Dosnrs1mZnhCyzeW5s65bJs8/cd8v1V1xx2TGyCeGeHDigWEhdeGwP9tZU + Y9Rk2JvBWwGiYo/0UmICrS5ksEdpiO/M4y+8Q7qdL5OZH1EVL3vpfa996tHXPvXIK14m4Ef9B1jiGvPC + F9xBL5QpIwTRB593U0zfveLm51wmKHjdeUITveIsCDLWFLUYXhMOwpG54NxDF513mDEnQAhHRsmi4rIt + qgmpBcN0MExGh3BWw2oHwx3tGIuzWuegWIwGy9YQRqhvYEKZyTluh+iJzGjUBoTyx+JPs3VhxqQyVh2G + wwiiwhF1izUqwiyYno3OcH9f66ZmCDKGhUrFCkDoPfng6uAtCj0nrWOBWML7GcgK7Vt0e4eIWZ4nhlEU + 7UaD42i+IlS70YCFrppIHUf1ys0E9U7zNslEgoIZFS4tBCNfRlYGHow7gCX3mSiLZRwuRVdXh+2b+QV5 + kfmJDFyDBrNbE1KM9kKlIly1oV6cYloxi6lvAvZa5eCGOKh1i32MAqSE60KfWb2ps39qz/5j/RPbsVVb + 3jJYDwSajwx9Udqh1ILt/XXto3XtU5SDdR2zpc7NCoTbSpVddX17n3n0kFL3ROM6HgAL6jhC+BNCDq9b + SLUEHJ/oZz2d31C8YqL1DLzK7m4M3U/Ny3sRzD5eLWho5x9ZbLfPzne3d7rpQQJ+XubVoIzm1IRivVZw + k7G5YPgXITArBL2/4Vu5mlWg08bSMaFuMwtH6mGRRWMrWLojsA8wCjn1mXyiCgjdgziPgoUYikhDCGuN + rT5qc5Xri1bJKuKwJzhmsfa1bmzm4AYQ2N2NpkLEhXnHtSSeUGkywXc0uI8KQVH0GF3tXR2t05PD27fO + Iro3EaFxOljBcdTEaEamXDGPAkkA3NHNg0KZMe7ouHFHRygH8R0VWb3EE1IUTksSBWNCU9bTIAVXkCJA + pQELGRYCPBBnqAvBQnqkTOzoWwJUcGekRyrcmcuo4TDFNjh83vNulKnhY7cBcvLxsdtf8NhtL3r87he/ + SPqfAn6P3fboo7fQBYUaCgTSC0UsiCQDveBtt17utSA9WMQSl1x6Bm5qoGBoip5J1sQ2qlVeHqpHRoNS + Dm6bFGe1AIShHOR3lOngqPiL4ikDX3RySKKpoMnQFyWVd5TQCfEXDUBoewiVEgZbGZsXqo4+yAedL2r8 + XqeMcptv5M/Bn8/b3QKEugFKpoMSVBkN1YLdGhFIhPZxp/dFc1uujKsVmhOyPwMCg3zCIDDUf3K7sUGJ + NrRKxXo+tD0yslgmLoyUGU+iCFTSFdJxsRkhvo8rqSGpFGs4q8UMphQIExGh5fRmrdHYFgp6YltA+Ckt + 7ACaJJTNgJAfxNUi6W86WNGENhOz+SG+a4QL1i+X6MF6a3U2rK9fvVGqQMW/eoFANIJdZO3Kx/WkDzIF + xGW7Q+EQ1UTnso39K1uHMNp2Q+0IhH11kEWFI0NTdEIKwa4tdV3zdd0LUg6Wd5R6dpb6numKkHeZNOTG + xtUp/NRc9QsAdhpFHvsVOgTGMfkh/KN9QQVwHPA+mdfAnx9ORy4GORZ5i1XGtNFbmzfRBaQuTdubOhRM + gbBYC8avS2WnJ5/8UzjMqQnj3q0AgbnOp/VLq2rB3A6xZl/FEdG2nPkjTgqTAb6xRgusGRPUJzrCcDuW + g7mKMC4iWRiTWHVER2OTElpRqCgYSKQFrzXrkSbxqpm4MJaGiXpMF8dUYu9Lp4vPbJE1aqIBYZfK2to7 + mA4GoxmxvhQ2RzNL+ezs2MBAWeij1iZF9NbTJtmE/Z0ksO8Y6YYnSVdwbFhEFEaWGYt2a5JQqGEUACFj + NlJtQx7FbhHXS10o8UzbBAuPisT+kkvOpDVKg5TSkOnd9c+6AKE9bVLgEHoLcnuBw+c+6757pUCkyLMD + wKN3Sr0IRvIpXwL/QE2UgjIRvB0IvBK1/k03iVKCWtCctflZFreEiQxVKeVg6ixqKKieaiGSnt9CKsKp + IdMOurPa8GB5dLCMBfk2JRBFvmgHeR35pmiWTa8yTR8WJkajNEgDazTRToB/wV80DAsdBZ0v4+Ekdo/D + YaG7HotCrQgNBfWs85NQTsV4frqIsLHRsdCTxXKC+tRrVGilqzTpTBaXIhCmDFI4Y+zcmCnGNmkm55VL + NRsNZr7Bdl2nqokCWdSWBVsfWF/gXe7YvkVdnVPLqlzcjS9BcXe+vH4JAYSMBt1BLcNCRUHi5kFBGKHd + TAFLWhHWrStLacg9oh3EZRuL7cGGtmEJJkzMtcVKFCBsG5TRIIVgzw4pAXuYDm6T2xy9e0r9B05m9T6F + x/B3wLojFd3z9tSSsWfPyfJOy43y/TSw0DqoLK+n8BJrPfQ4BZoUryHh4QRl3Mm8Bs4ouP509r3gK3xX + gReqw8DwEH1/AmvGZs/HmQsmkFkHNxomPzOAPAoKHHLhsIPTP1CaUBjbomEWmIURVs8FU1JZWhSarVrN + fmlsxWRAmPRLU853zmjGdISh+aPtUNtoL9YXtXlhykRPzDsyKUXaqiqwZkJULwx43ZJ7g9TC51Q9nc0I + vSiUMSEpFpZZH1XYMnlSCBSyjLpvtyV2zzq1Egg0lxmTu3k2Bbpv3EpFElBpH+/vQFnPSIykhfnRHrdb + szGhBDNN9E8rEDJaM2U9jtUWUihpvXvnwUKO/fRINb8eM24qM2Z19EjRVCBpYIZHjUibFPrMLTdfalND + lA/YZFPkPfe513HYDTCPA4C897nXkbJ7111X33XnNZiIohQkVgIHNZ4BWKXvipGNdERD9K6gIBh85pki + nw9M0b2bjSBDIWh6CePIgILutR2AcLgiljpD4rkqNBkx2hYd/ViMXrLBKoRb74iqQKUqg0npozyGVOe+ + 3q5sTBhmhMaXCaayIVSEBqn3RUP0hGhpenu7+vvLfMk2T8R8wQtLaaKpiNBGg9lRW0qfyyNM+aJxEFC0 + WINSrQkWDAxdVpibKfj+Uog1MeNFrjvZnioc6oywOpu3GgIXu8eKQspBOmesmdZSih0n7z3lDD1E1CZb + c7CUtHoNoCeMPljMSHdUpoC0QykEbS7IxxA6yO32EvcLBApHFHZMc99Mz8S21R2jShw1fzVao311zAtb + R0sdM3XdW+oE+XbX9e5iNFgHBFILgoLPOBBWg4GtqccFuTr+BjD+jl/bgZfVYYTyvq+hJX06GgZ/qQ7V + vEjZ+eRLTKy6Otpan+aP8J/FH93s208GNeOblgGwm87Eb9chYS3TUS8XORe5PNatEb1jKAi1MrSD7v3o + 8KBodxKLtXwvNGehVBMI7cLg6hIXUM1w4v+SCVrFQIvawbytTFQ1uVm+M0ijrNAu6eyjKqsamptlPudL + g68Xgn9CnAmejckuO+i0Uu5otQOklYM8sxH/BAJTIAxEeZsautFMIY8pXUDDdLCtLdjKdHa0cBRcZsyq + VCpC1X2brNAmW2YGxpgQZT3dPxGP0wwcFfGc6Sjw24x8mWA6qlg4DJAgPKBNurBAj3QCZf2NN16C77Z4 + kO7Fg3QrPVJR2R/dTY+UKk14pJcdgc9JgUgBx9SQYs6qw9tuuxI4BOFuv03khpKs+8ANjBIpGSGa0lkF + L7EPBQhvxUQ0VoEAKrCq4RLUgmcg5Ee5cc7Ze+jKUo9CkMEHFY4oRSqvLQTwLlALBhQ0Bf3k1IAMCCfQ + OZA+aF7bEsExPSRKEpqiNIpVPtiBHV2SQZh1RA0FLQDZ4+nV8a4ZyBwfG6A1bTzSqCYMmnpLXxKD2VbK + dFyNsza4bIY0fQLtoPint+H6RxhhAMKIgpF7lXNWK1gdRfmg9iqc52UTQZsUngAIE4uJhC+atlXosgRv + iir37WrT0RxlplAOWrdTxA/5AApdFgKlQNtOosqzZcQnLFXUhHRSwzOqlNCwMJhuG1lG2TFeDnoGvSbR + m8W2H8s2DTZ0jJC7FAX1yOrFYrtu02Bd61hd2xRYWOpaKDERBPkGDmZHAQgFCXB1q2V3eTIL92k/Bqc0 + OurWLOVNlCJvWbHICwYq+Z9hlfVp/1z7Rp7BGC4KhPKnS59QJlinklCRYF6NhAq+CrkL8K75smtORgMl + JumgxmqvMBeUT/WMlC6oPcbO2sRJNN2XyWmqQX9ZOeg7uHgGG1kmfCxIJuLFENom/M24aPnbSY24lBI/ + xF57UVglpdeK0BLqo/Nh3mVmOeMN00LZ/d4j5QYvXChzqxefEarvmh+2ygQ1YWyNpqajjoheCJoHqU1o + Cvp6ZU9IfeATI7uhXTIpB6OIXtqhgnnqWmLgx6Jpa26KhdYgtWU6iutDUQh3Rruj7f19neT0Tg10ia/m + SDeyQgujoDxKW6PmuGama1YXUmNtmR+j3rrs0rPOP+8gtdee3Zpfb/NCIuwR2ov7mmgqqNsgszDMAw5R + GdLVpDoUHo2A4sU33XgJQPiOt78EyTzQSPOTCAvqP77E8ZybLjFq6HVSBZ6NNgNYDXrBCw5Sd6LcAHf5 + idSjlr4LBALMmXx+fowXrO1Q+RXUWVSaohS78EVFOEHtO4ylQA/loEwHR3tQlUg56IkTEItonI72BVuZ + pBa0PGR9q0P6UuavVsUgteGuYSG3QU1JYJY/sYRwKRB6Eq/uimLuUlILZkoJ16q6q4N3RzknsT2DgGUu + uAaBGfM5Nw70oUAwHZUGSQhgUtVE4jLj20q/fIQgU+UymrJmzBm/uih0OOSrlJ28cgdCnxTGhSKl1+Wm + LXHpqc69kTVK7l2KlF5ClzSwVyOZqAjXIKJvrZfKT4aCS9Z1N7X3NnUMSI9U6KNgZKdOCjuEPkMMoeYu + WQCFRdJrUUjKBBbbo6X2mVLPLuGI9gcUrOs/WAciGhDyGkjjhgYCBOKMWtWsM/79KTtwnjw+scqx1hkA + A4ED9IDaWk7YKXWEOPkf9MN/ZPVvQZ1Ep74AhEnbM2eWZjuDdBYY1YROFs2+qA47TZuaN2pUb4TCiImx + CxFQ0jZo1ly1c9S2e3Efl53QvqezL0nJXNBOJDoKY2MXiDPWPs27WmQ+h6KmMDjMvDBy8bzcbyRPQW1V + U4g8v3UjxLxEPgEiWkJ9JBQkkYQFA24byRQEhYW+qEsppBx0xzVlQIBVu3fNz2+e4DUIUT5pkFozzVN5 + 5UYMKYR8IaH2bZJQAS7KoZ1S/RiMZiIcRvdRnREaaxQglMx6CaNQHYW6zFAUzgz3TJDHpJFMIqIQ1oyk + t1uPlEh3sFC8ZjaP0CY1+gwJTXBnpEG6b4vOC7fSI0XGABZSFwKHYOGVVx5lpAeS0SyF6kmBeI0wSwFF + ysQLHn7wOY+/4K7nP3wbBy1QvLNNF8HDeDCkGL4d/KMKhB2KeP+C89ELimoexIWzCgrCEQ2FoGjnrSk6 + KcJBtRWFLIr2A+KryufFVhQG0ML8JL8aKGhk0W2j5TM3Dx9ZmJgZ6qYcpHXMbFWyO3o7jx3df+TMPXRH + RY4CEFotKDQZo4xqa9ri6bFQpxbXP4rc2WrK+uAy09ISsbB5LfdTOA4N9lDNO2uUfEphEG9Y6yZEYc+U + z2CyU8uZWVUuowAhAlMJmHCzeNnAhZaGqGO9KNQTPumLJrPzpCmq8wVpogS3JuOjsQUXrUWRKSPzCwW/ + aslTOtqQBYF40UcfvvOuO56NOpl1I60L80AYts6ydESnKl1jQqyNrzZ+p61ApExI+qCF12vWoHBnoIYy + DgQI13avQG00OL6xMrYEmSDloFBpWoQ4ymEdVMHCHpHVc6xDU1jRGF7qQnQUmGtPNYwe7Np92ZqZs0NH + 1FCQj/xj3cIemHGR9c4KaMHvRFoh0s7TQBGB+VOUE/AS6LDzx17sx0ndpk481AOn+uSn8StYQ/E0vtEw + rOa/mncnDw4Nz7S4TLHQ/0bJnVb/iTYfonWhInTMix3RXF3on3gfI73Hy0Hvl4Y9YCGcM34KzJNPAmT5 + RYLzS6XSjdyJ6w0M44aOdc3bSbyAbccaYdJaOml8DK75KyfHh7bMT2GRYzwa9qSdHW08cyIrTFAQh6pQ + C2aUmaRBWgMFfZGK9Z/MfmJpSFEYc1YNCNugA8zNTI+KoNCY9HpEO5IspD7KCteiF5ydGYMLauxE+WjW + o20CgUFWqLPDmEehrdHuVnp9faoQt5Am1np0FCaupxjaST00Wpka6RlLsNAMSDWPQopC4BDTGemRRjPu + bUoixcaTotBympIe6V7oM2AYgz2ILSDZpZce4VNAUVumx4A6Sr3rrj3v2ddfeDt0mJsv57YNAnkAD5Pj + siPUlJBimDuef/5+wBWIFdW8UGMYCkq4hKFgyJcABSH1KEHGUiaQfxzat33HthkJmtB2qORMTQ6qdlA9 + 1bQW3DvRu51KcaCLnTN7BdNL0EYmQR5aqXRE1coc/EOpSWYTs0CDQINDudHajKBFBA9DWPOMgJdhHGgU + 37iP4UlGR/r4i5MrGRqkaijKmUAQNG1tbxhwGrA38uglUU1gNGqt0Sonh7yzWmiZJm0MOXuNJhqBUPOo + Ix0mlIOZgt4m6HZBZZGE0k3RjgtONO2tm2AMFDhrrP+st83ryTskWTdw4vLct9D1GRzofeGj9z7nxqu5 + Eq1B6rMSpcwEMkGyVmQ77KQiLBaFcc8u/jLiLGoNUkPEFWuXb+haLQ1PqsCe+vXllS19yzf1128gX6JT + GqemL3THGRsiNgq/prRW4FPUhOs1g1eO/srWMw5cdVvrwnkyI/QBYWiN1pVYPcf6Bocr/dURuLxK1q3T + MDDjG9lBVHq6Tg9FFvsu/gDsavjLwcQ9bYiq+eQMeAHX9Es8v5i2/CCJqfr2ojYNU0Mr0RIIdClFIZVC + HmZ1ZMFQJp5VBo25w1KYkma9b9DCnbE1Gogz6QlttLBwncgts17TQ2tEu80lx/XGH8eBkCyIocE+tlls + ObW9KY1vrRqXATAD/T30mqLEPiBi1BcGEQUXf19vN49U8bBYj2pTNFgs2ozQy0GeDScd11o5Gd1bo2rz + H9wd09aoYSHfrtJA6Xka3y/PHW3kq/hYDvSVLafe2qEawxTUZu4/EqtDaZNS/7HUDg6UfQoVm3JFFEwF + hRSRk5NDZ525l5XdhfYS1dvXSQ4tKLh7DHexytxoZULsp8V3NLMeVRtuc+JWHqmUhq6pwIAUVucDD9xE + caaaCuaFO6gLyX8wP1L8PzlwJWWwB6SJ9P6SM0BEDkCO4/LLBPD4FHU8ogs+Wv2HdyglIN9lrjFMHzmg + 5FAIml7wyJm7jp61h3pUfNRUKUEhmBBklCNDU3dmhB5vGAoqQUYCN8jgHdIw+rHKgan+3RO904PSLqZQ + diAMcRORI2pVIGXi3PTYxOjgzOTo7ORYF0L5uAWRZnX7xunJkYnxQf46wm+K/mphH7NpHQY0w8O9FJcF + cxn+9HwL54x5ijIytPOHT20XlbYZIi1L7GMEFMNJaO16UU3Edqj384PFWvWMMKGGBvqYbjGxm2/iwU66 + zl9Hop3g2uRKtP6nwyGYR51DdwMeDd8L2Ucy1fNkUevx8HPXrcWvMbu645qQeWvYQlEYEPpK4ptsUVPo + GmH3MNVBagExsa5+dd1SAULlzqyGR7q+o79jeA51oJSABNDTDl0nBV/Q1EtFuEmy6RUUQ3Uo0nuyCa1A + VMc1DaZnXtjQOdpQnqnrnEFHWNezPcwLfUZI+MPFZxzbNbPQsGzRUuxU8YxfHp9lY0jm0EXkJtVxSOnq + XyyJqp+h0Fo81de2GBByKgReJviky/UP4gelP51rYGx0EEioXTvqq4mVX7jt9yRf8uIwe7DzZQwRq3Cx + UBdm4Mfl1N7e6gyaZEyY8aSdQl2tI5R7Er5ohL2MkGa9Uy5FfhB2aKwLfk1Wma5FA9LEj5stLQsSu1er + JqGC27pg4d1o3mk05bfVmYtxNHIMq48hItnfaOTRROedZcKAJwuj0KUNC9DLLj57z66FVDuY82LeEOIJ + zaCrEOFr9FHrjoaiMLqPxumgEGRcAD40XEHWTUfOWTMyKezvxFRzYbgMEO4eq2wd7ZkikklxIkRSKIPU + symopTSkSbDQNBX0IUGyZz/7Iu2OLpxxcPvhg9vokRqV1Bk0jPQoEM87T3T3HIZwhEVwCOYJQB6ifcpc + EEQEOJkCUv/hHQoE8o1EXoB/R87cATXmjDPk+ZkLXn/1hc+66gL4q+apDZGH+aUWguIgw0EhK56ioPh4 + /9TE4PhoH+WdASHMIPhBC0Pdh2eHbjhv/7E9c+KpJjQZkQ9aGG949xKCjO0tyt3t/b3dZ+zddWj3Dio8 + fNSsO+o7Ep3aNmMMa4nKMWspxGyZoDAnrlcGab4pGjoHQUFh5gyRKZPa29oskJ+4eW5ycKBinyZwaGwv + G3IbHEZPQbOPSLujevLbBpFHpuqjgum2XHdRwmROpLYflatPOd6gEtnXR87chxRSiJxxd+vyCfDNlpGo + l0jxL1htJFPDDBFtFy3waKwFRUGWAAVCZY3WwzJdXVdHN6tRsBBZ4TKpCCGRLlndvFRk9aoXtBJQRoNU + fvKpoCCCepNYNLaW9B64piXuMd9RGxZKPK8G827gIJWXeeGUEGcqe0q9sEYPilOluDU2rql0dDc3rac6 + PSVQqW6lnvDbeftxHzhOmWWWPDYM429Z7upAknHCp31mH8CphYadUItn9mmrn42TDMJxTR6plYbxY2Fz + EN74Qne0qllqk0EHwtCmj7iY7c9is15OcUb3zGhdepjyZey2t0Sq94Pp2CB0V2okFAbGtl20rp1IRRSJ + O1SQ24cRSIPQZFgyZHu7ds3G5vXsrAMQWgcprhG6dtg6ItQDdW7MWKOWAGcVIUDY3dFOgCoCefgvtotP + 1zLjxNv4Bx/ImalRmmxJJFPOaC0ul46CWWYvi2+07wqOo07W0CSEwBQNou+kpnGXmb7eTqFNAgkDXczG + MFXZRVEIa0ZN17Ack0wGHqCloU0NzXRG6DMkNM3KpNA6kJZZSI8ULDy0f6uxNwEqyJyUbgAYcAiSoXNg + akhFKCoLEO68ffQ5tWTcb8h38UWH8Cy1BAn6n+JZwyzwKGXfLupLGqHgHxUnz0xHlOPokT2YqKlYYlpq + QX0xphdUjqigoBwTA7OTIwszk9Pj9DkrgoKaRA9plvnooZnBC/Zv2bl5dIhyMABhcKSzYHqRwyc0UWuE + cs9gf89gf3nXzs17d28hY5IdCToWGp5IILiN0J7wLKaAFiFpm5hoKGN/5ZxmNFKl0qAJZVcp/klFmGuN + 5pJ4Ucp3d7bt3rkwNNSrzqJI3dNaMPRFj1sOhpBOA0I/3KpQmBc2dw9S3aCjZ0q4pmG1hLnqkMK7oFy8 + vBLSmkAE63MKOmgFWVNKGOFw0Y5owrlbQVodFRCSZk3lNV2F9UgBV+oihUAFwnC7fjVYKHYzJi5UxzUB + OYpC1dSXmmiNtkKoKcmXAD9SKRQCQ5u0VRg068pWEZrdmsTTMyncOFS3aVhIpN1b63r2lioHSn0HSxs2 + rF+37nRghvemo61tTWPjqUKFltjH6zfa8iwYUKqbHBu54uILODdP9ac8zcezxLO+/hBmkEkXtJplGr6Y + 9kvzjVMDvgKhJkW+Qi2YAWHVvDC0KLynYedo0uII+zuNIaxhtGYQ6BdMgS/jo3gvB11K4RaIsiFrarSI + 4NR31LBN9rzOFNdBCPG8fWViLCV0O4eF1IVSlq33yUrsi1ppWJspw2hHgLAZOZYDoWQz+fhHTLc3NHV2 + kAvRYaWAEehNRKEmanTJgvlI1Ncr51A1hZZpwEcKFHSBTLB0WBhkhSYfjKxR444G+qjZrQXT0UpHf38X + RSE23FAlwT9hzYx0bx2hYdgzOSJ+K1o88VGE9pjOqA2pjQyFRErjUWQVZBbOj23VwEKJatpNBC7WM3P7 + dWQIbuH2AhzK7PCIiO4V5HZzCDSetVsVF3sBPDm4Qf9TwG83xd+RI9JipdHKEQUSxArKQTs0I4huxTsm + i1gyH7XMUFRccvomxgcmxwcZzlERgv046cAUFekIv++QSCaIHqQpyhgVGpEoTFRBSJrH2GA/vWu16fHE + icAU3dSybmiw8uADt9x5x3X0S/mL8FZzT6UH7zyp1Bn7aUUYUNAVFBHzMlsZ+6NDlmHzpGeCVofrQ56l + AKEYFeXCeF1EaK0IG0ibfVp6ilohaGkqKU3GBoTeAqmlnQ/XTgKKKQctE0twkZFgkXZrDBFt9hFoouzR + G1evX9ukxWJ2aSdzwSyGyduhhdZo3GtL23PJErImVmsSoWiMYQLwkWxeasEM/+oyOKQurFumbVKBQ8PC + Zqn8VDsoDBpuk8drUb0goqOg0WfojgKWdEdVVigHQChYCIN0TBikmMuIpn5vqedAKRAHTx03gMD+SgU7 + g1P9VhhHuM/VrIEKT8WKDp0VkwLW2FP9Kf91Hu9Fc0CtRV5Z4av2XYvSbRIPNm+c2rdw0mJzwTnudFOf + FOpAW7mhQccawE8RL60ObXYYUDD29/1Tu5GbCsRCUK+lWvSzuPHMyNn5ib1colR4nBvRGjFgYXdX+9aF + acq1VFPYoJRxBhtiXbhKEidYj8zGkIP1ZQomZU8XqwlEBvh4ubowCX6L3NGgcc4TRyXs1w4xDeFY18gN + fhDLH0OgJIxCgNDkEJmIItFix+5oUKcBftQc1pQL7JgkHigzmlGiR0BB4YBI5DoHi36v1kD4ao6b6dpI + N3XhtpEenFZGB7songZDMIVhYVIUQpyZovcoQfZWEYJGMDbR8Aki7poBC5EY7t+PK+mCkGgObycRAkiL + xmyGcCgupGS0nqfWjjttBIhhDZWfHzRaORT/ZplK4qDGXJDnpy8KO8bsY7QWFEaPtUMlXEKzBtPSFnQn + i5jfbvtIz+6RMs7j8GZHxV87jAaNSWQHBd/s1Kg0k6Nlnb3J3gjlzZ+bG2fsyh9CZS3FAKa4ZRHVhOkI + /c+amqtxZ0+5g/NTXdb8cB1FjTFhQU2fSHpiDGEmnMjJB701GifiOZfRCHseOpEpjtxcLe27cNueJxsW + RuFETjuxVDiJ0jZdhBmni4BEI4h2OPPUDspjX1Xi2uKAByIup1/T1LBmBS6jltAbK8K6Ohqk3GOd0tX1 + HPUNdUs1m5fS0ArENe3wZRraB+tpkK6mNUoGxQZSeUtrpBy0Q6MqEN13lZp66tZFcb0AIWoKBUJcZspb + zWimVHkaXqO2Vp5Ga5RNS8Fj7CRAi1kq09RTkwxasXQST/6f9hBxCUhki46Fjn/JPdYazeAyKQRzQ0S6 + HbRkZOtQzKwXLT//DBeTkWGhQRqqRk5uyrI8CgYstG1jioW5jmgMI/QaMXWscDWh3ZlOBxNBfZBP8NX2 + 9hbmKJRr3E6dZQzzxHe/YYXy9zY5EFLS0d21IJve3m6GQxDQozYryJZ9WBi8jwumo0E7KCjojlnRNETg + cHKCtXtkgxhrSVQvBUFzc2yQJt0zdZmJ4notB01Q4QrCdIEObEZT1kc1oUy8uikHxWjNXDSNFVImkkL0 + 9TRIVVc+Kg3S+aHuSW0hDnFoUSienLivSXfUYEZajmrMLUAo+sItYsAm3p5aHYJVYKEE/KoBDWWc9TM5 + pGuq4j8ILzJNPLxN2p5aO1L5SfGnzU8tKIM6gnsOHFywcEEBWnVQoyPKjzPVvI0GpRZ0FIw+arzsoWEx + CkA+j1ZS3NRGK3tHeykH5wc72QEMyLYgMEXFprxLEhwpB+la8xGeLUGDAwPd6iwKCtoROtK2NcnL561e + 12NjyFK2ctC7oxuahRgVcyfgxYjQnhZCYUxoOyRrpKczQkXBaCvj/tqZC66SZYKOXsrBtCmazQgT1mjB + etBaKelMQfofyi/zpovTs41cGtszmYjedBQ+418MAm0F4CNcUyKoadVIpGBx65yxEPRLUhQa4C2pb1iO + UTQi+voYVR+AUIpFM0UWTXsdtwkbWCWlIUAICi5ZXiLVfu2G8fltlYm5JWvb61YHyqiAn5JlMtaMiCtQ + GQoQWndUPLi9KMR3tHtLqaJA+Ix7jVZDSk0h/KkijyRWLVl2SkDIW0kywQre67p6OIbQsk71h/6gHw9O + qR3ucgPrdEsRy8HcXDA//0vboUXHbUW5wrgwFHnWmlcU9DZpUBDaaSvbjaAmlHl2ypTxTZ9fBoVhYUC+ + fE5vysOWhoiYOQWtoYsL0+owMb/IZRbmt72BHZBSyW2Ta0uGc2esFnSTjmRYGPT1BoReCwJsnZ30XNd7 + XEAGhGI0I7gImC1smZ6dHUc+EXMKs0gmIdFELIyZdkFfb/pCF0ukwom8uF4jmdRZxgMoVBvQBu90z875 + zbPjfNrf27ljfmrn3AQG3FuHJJUCjxUbFg7jtGKOMxEISWui0grG3JNCIlUcknmhVWaQVgjyVbiaQdWg + zdI5MExaprvnCMs1OLQmJ9ILSsb96gvDDTskU3fvZq0RdykpVNqtfDRqqNl/S7hSFAsqO0ZM1CRcAuE8 + enn3jhmGHSMEGVBQs5bKEIL2jfcdmhiQ9N3+jiHK4sRcW9zJYwMZOOR9q/R28CtXKp1BO6gOdhk7JlMK + mtd29gdKm6JZAFOQ0stfFiC0ZngCeKFzkHnymcWMAqF5MjgiRhGhj6s9jD4Uhe4mU7CV0dM7ZK2EXaAQ + ZMxxKQwO7BoJvZOGFRDHGHwZ4EUamnVHU9d71RGmhoh5sps1RatnhLYPxtxp04bmWBEqGyYKBwsiCpR0 + mGsrFkp3lLmgMEU1qh5uvt7TAEMxLE+6eulKJRPEgIVLeYAIBRqwX+7saWjuMNWEg1/KGtW6sL3UFGeE + mtYr+vqgo8CJe0iSKLq3LB3cv3ry6A96tS9B8GtraXmaldli3y7v0yJVqQAh4YBsQ+rqEbDTbD/VX1X4 + /U1NP7gxIS8eK4W0IrRXqOdA9mITskyWSpGUjFk5WHNYGM+nzGvGUDDBQgNFuYcze2xsaPeurWxI7QGp + fDA9sx0LbSSQ3zmGiUIKgX5bt5zR3jB3QebcnrKBfwiRyRwUpS8abbgTHWFgjWZGa+o1GvT1iaO/GXkQ + cGhGHpmCUDkytLl6K11kSuDHnZBIlTujS5tS5GmaibubLYUiqLcjCgodCE1ZsYmqImZQODsmcEdbN4j1 + dvtGGxZaUWjqb0ZckD4cCLkBNE5NDD37mksP7N1ODUR3dHK0f3K0j2HhzEAnWGjBFIKFwXqt29QUTArd + mFsSKpREapNCgUONqrBOqWIVRZsgonzUGwwRJbxiN5Ui0EiTU4xpxBFGDgpHcFE+6ldneLAeswAqyv1I + DRWlPLwYA92sEFT7GBkNjg+Agk7zAQLp7qqzttS4JO7iHrB3rIJiZGaQ0WA7WRxSGXcLTZR3SW5oWITx + jMSsPGbTm19d7I4KLzT8CdTrR0IiW5sZEHZ3tUUfmRjJKw5BNakx1gWV2bBUfpn3kNkPBfwz5Iu7KCXO + 2NQw7zXqnYkczzmeun4Cu798hMDQCynQZAp8Gf2qBp/l/O5Fv2tw6DvR6ks1HfkXUDBWfomYKlJMCw3S + RKmlK4nK6zHyUoJMGMcItsmdGLYUN+/67axv3C9gqQdWIezTl5WWrSKDsGRzQS8ErSMa0JHWKHYzIp9Q + ixkDQupC0VHUb+xf0TGyrJ0G6cwPAwhZz9lanwah5iRBi5WaP1ION+J3alFUn9p02lp/ks/MwyARtbW2 + 8lc/+W95hh4ZpoOFGtFLPH4Kryr9xQ07izVg/Nx1FElTNGCf14WcprarmN88fXD/LthMPKFt8PLyCQ1i + 0R5IbJA6zZqGSjSniN1RuaeKNRouP8HDDPwSTX3qMlOdRJER5GqVg4njmhaCokdWMl7KR+juhElfNp5C + Uem1JqxZeRTUMArMlNc1UiWgQqPUM1DUYWEGgdWaCvNai9ET5rUWGqRmYpISRw0INSfBRRTGgZRPWeUB + Pzp+fX1dwIAZkPaUW/tJaOptnx3oIpgC4sy2oe7ZQerCLkmxBwilupIeo9FnKLwMe8SYWwsyc+ieFyc2 + qQsXaJZuldmhHgKNhotWKUqTk5ki0GhopxhplV90zZbvsiglmUFGpbzHBYO73J7O5oJBKcEs08iuioLl + wQHp8YKC5CvhrG0RE7P8Un0d/b051SAoONhbhu3JWxRhj1gPYR6ZxSgftQUtrdFkIxJqQe4cHe6HLyMi + Qm2ZZkzRGCqS2ibE2XAAQk6GsdEBRBeuNzX5qcEep4c5M9jplJxspmR1GU/mMhqZMjkpfex2SMNDTnut + AjNQrEEZlfGTjduz6aD6FKbdl5pbVae5LdoXtc1vVSM0FQs650BXKmm9RlAMDafRkQFGHqwA7Pzzw5p6 + iTdf3mAVTrKsAYEsSmDhypKMDNeWVq4Vvqhp59ViRhmkmmWvN0p0TZsIrDCyjMOhNUj7lmwarN+kwUxM + CtM8Qha445M501Xe3oTqdV8EmU87C+LpwwkQSFM0lYJIi1r4I6cAhDIjXhwFpaRfupye7dN/tTWfwco7 + LxFj7zRUizowMzqMF5F+0uTc13wcaKVhAoreGg0VoWGjWpVm+vrsjNc9B2YuQIsPDr01qtdMktUi0WXF + JJdcj1QH7IXWaIqF0VxUdr4ZNTzG9to9KRBm1htVOb2Fvqiz9RLXx2DqEXywYqc0rlxZZj2jSsZC1Iux + JrBEVjNfzhtwQynU6aCmvErxEePu7J7Mes3g0FMprKDJgDAmJ1hUofVLR4Z7x0bESxMXMbEh1dhe0grn + JMK+mx4pZqSozieHxZyaukr1hRWqyZmpYQuyN5W9W5ICh5t1YmelIYio40OOMQxftFKUMlGM0AC2hfHt + 8VOFSSn7PEEJUsyO7TNGwwEpjRq6ZX7coiTE8k2hNxSCGq40RlGrqsfhRDgfxBJKi2UuyMc5jZiAImSq + wVAra/e4t6ezUu6gO+rMW5+z2psm9NE8ZcZpMhpGLwCZxE1IHZ9yZNxRlhqxr68bI1PqSPESatkwPj54 + 8MBOcDTxIcoAj3PDUincYs07ECGSSZT1DbQoBhn5tm6KwkHbwOUiNgueMlbt6VUgF0JBPgFSYjIl5LHM + trBmDtpSwJIHZ0ExGsbrF2+qrMgu9nwHqBYi+gZabJyZU4IKvueWTtiypQvz0zPTYygpYg8sDGtYRFrR + cDZtYEVJldBaF1LzkEbXWLdkTd1yiDNrlUdKRagJvTGqnkpRmTVNpZXr61Zt0vxCURN6TqHSR4PRTEmw + UBqk2SJcqXTt3rVQiBJcbJVnK18NEizKvPV86QeEDSf/tKzkyGDSmaJVR4s9A+9+Vye9keZFaZpV38k+ + AKwVj/JTAdfj/Ar+PMmN3OCQrRMnB44HnKhp8ZeETyxaFMYGafi+eFKmLjOGg9oy1TNV7bNzZDDuNKe0 + WA6GpmihNSoXj6Ji9eXk3NHIlMlhYbpd5TaqCXbxpESlZhlOECgAoYCiO1EpFlaXg2ox6jvxbEaYhFFk + hpCuJkxV9oTLw8pJDbh9RmhGzMqk+P+6e5Nn2dYku+v2fd+evj/n3nP7/vVNvuxfZpZSpcoqyaqEBIWQ + kCETJgYyYeIPwABjwgAzzBhhGBOYMWCgAQP+B8wYMmXAn8DPffnnn3874jT3vptZKU5Gnhc3zo4dOyL2 + /pb78uXLYw31rolQipYqVEhmnJRDNXp3wS0u2wymyGCa73ZMotB4JqEg4Lf/YHP/wZaax/ltPQNYr20u + mojUsfCrR2tfPdl6+2jjKRypa2ce729/+/m7Lz995WVC6yyMmzGl1lmhdvtkSqesqZmUmgsaQAjhaWMO + le054KkEaBu8e/zt128+//Q5gApY/uS7T0HQtzb74ilAaODXABjxKqhMy7y8Y4y/5bcDIZ0SxojuWcug + CWKbTBSk39mkNNg6JdqgJT4ZpDGvXjzmMxELWjGvGaqFBEmGom50l9MHkcbktBC/g516GTCZo5f4fnnW + s2dMrn9GxyGkKFvyPVrfoTME3g5h6WAmfySFRiTQpj36q2kGoSzW2M/66vKLJ49omE5zmVEpExbbng6G + xVrEgma0PRGLmkOh/dVb5ou5TAJhFAi5BrlqqIfDb7DbGqdmLjhbGhxj38wL6Zaf1ZmrXmiwGouLLzBB + MtmDQ2iutYnFhTIW72nevFXVC63v3uQzDPI1LLxhyR+JIB0UlibeOGEoePXE+Ssnzl89cfH2CfQyNzcY + 2MtsilPoZVpbYcfCO3sn7j/uK/P16/RILbDGHQdvPtbqf5zXKtvMwRw+L3NJ9dTtgx3XWN9fvnyCIdzh + 7wvBDrx6B6oZSSqHYQ0AF87nMVv44204Hvi859ttyZ6eyw3c5SQH43UMM1zoJBccZlBo48z2/H4mhfWO + UZ3qZDBrvVEVXXQ0rUIwSqvzyql3IvmbjifsM+sLgdML+6wFNv/9JpZOrf4fpcEIgcUR9SZC+cs0vcyc + 0ROdIw3tqOgprUe+MLn9VfNHTpesIhz1OpBrSkMZWNlR50h9cv0Ca7GBX5tE4dWmpsiInkISEWsoBMbM + 91nTJ1r7oDKbZhJti7i1UjjsNd+ZQEElRo6Fi2ZDali4guPMT17u4UAGrwi7uL9Dr/36q+cPqQ7GOHuf + aG/ZWLPnNmRyplQm3Q0ahY77mH9ahe/NI2qB6GJicK735ktoowwS9Q0be6uiSo+P5OvGg+YX82SHl9PQ + xJfPH7589pD09CGJ4EOjbcXiIo2hU+LZ7spbQ0GbsmSMqDVLLOZ8CSeEQy+qRBkg/OztSwxpxYJ2T+3m + 44qnqB7Xn3L6oORLZdCEU6MVBcs8epWBOSd5FkiJJRs30FGhkpzZxYvy23ZyC7OifjpZLujOavJUi3Pv + yiUaXhfu3bljGzPzrXKkg9e2UDCo0Tabs+WCfULZOMts2kQ4oUZZqVDTmKDGx6d5XjhIY+YCofTbbJlF + EzUWZ2qYsGcE6dCXlRWZvnTxEO+LFVjVmRmRX6oCdQcshB29LCe2Ez7U3vCv3bz7nhaLyyfPXz5x4Qqd + FSeurZy+vb3y5NONF1+cubttltytp7AJZ7yz8I/h5ziwyjbUGtECTw4YjAEIWbUxtMTr+cPejr4MDWM6 + 6IdtcKlkkTzEdpWDuXnjep0hhTXf21cvzBDgABg8/L038jO2EmNeIDDOkoaUOr1smoRPPYzEsaV5vWui + ImLJDuME5oz0CoSZHih8y876SoPIe2K+cLSMtD5YMlOlay1c9TKG8sUMZivtMycRHLvpmzdVncE0CEdR + qDeXGbsTKFgC9rGbMKo7QxNFn8rkZcLoITN2VOaTNGyopzBNuVKI73ds5VU3Peu4TbNra7RSmVzHsepu + 8pk7rUzoehCX0uS0QgEhxULLC92SG/e1b55uf/14AxShpwJbMjoQwJiHD9dJvGyWveszHRQNlmiosJtP + blJje7KmJqsJianV9mQKqtzRMc9+i1NNmzTtJGfqmuu3twkyU/DrL1//e//wdz/58WdgsOYrSSATAlGf + r/Tywdq7QEHqndYyaLmgy0RdIGNvVr8jLHBz7dY16B+gJku0W075SL3uRLJUfWREaHfPvNYVY+m+1DFW + Wr7EeMJ//Z/+R//qX/7TlZUFThhvs4kgSengbVNsGkbqpr6IlIzqjmAPjtQm6ppfUnU+ClOkDOwSAntF + oFUKU1BdXEY9F2yGMgX/ejqoYiFPaZqawWJGl21LDeOO0jtYQ1Y5Z4Y6Fha9aOdFCyJW8ikjcukSTuHN + iisBMGxheonuGzXam8YcCKkUXj7BRPvwYCP5A/wCC+2OpYMBhHCnVAqx6r6+/vTKymNTzTSOtLVSyG7m + jwAIHYTM9fxwDOPzAecqxvDlMFcWPQtPZL7B40cPfn8KT2GPF33ngKWYwLnHjzHmowe71SKuIt9sv2BN + JTMRnIBlYqGOqv5OIBSG5UnV77aoSzRoJogN8LJeGHfGjFDnfTcV1IWhn7ml9VpjyPvZvVTq9sO0eoJu + N2C83CqFMVa0ImIqBbJTAj6F6ahryzQ4X5clR1YHawdF084oMA8gVIROSN5EfdgixxKmAQKK9DWSSfLR + 4jgTvROVT6PFsApnGvmWdmtdJuNQVwYD5QreTGdY2VnlpRoNAUgzYwssRFzq+lLggR5zTKjBwle7y6ad + AVEerIKLrx6uM6QCmwHNqRD8qN0e+QwUZTp0y95MdUTdSOYsyZMFWrPwzs6HTCLZRsMu9CxBKbuym7cJ + gru/+dWP/uv/4j/79a9+lA5wPmjXDHGMDn2w9poU0Lxj1qzSubeCGnZ/s+WCnvtmTpx6WpMRNV1oiyH6 + lKWqRSJ3zHRQBKmGgai/s5qLNlu18JGJblEPetRaSsjyi59/8+PvPgc1LQUMnsAh8NaNJw/3UGOZRrSd + RfTd031fnWWSBS3tg3Uwfb9f69+JgooI+7TqPrYzu+llSZFzXTo1qtq8HPBlsekZXiCf41+iYC/85zWu + p+e1n6K5CXvkGZ7U6YMKoUbeWqDYktes65XWsYKJeZdl9sIJkkL0MgaEl0+cvXziHCyopYaWF9pvLxAa + NcpvJ0sv3T13Z+Pe7svLy/tBjcprxjoLvaEC37XjZGN9daZMxUC6QxUikZUcOzVj+5SxcJ+yKl/LcY4K + dvtPvv/5ztamFc/8czz2a37MDfmqaWQFIufu1L/QI344pUgc+RDmbddxLsnVBn42Brplh2JR59cIB71M + 8R01WW0fRhHcfeVLdWYHpz9ypO3sn+KfGcsUQ6bZdDDL8mpmkqJMYm5dtPxzfX2ZQjqLiICwzpTppZG2 + EFQgRLqCVeTK0gIg2vsoRlCUo2MVkWZSaMMFb+Ev23oqEguvdSBsnWExqjc0MsaDqad+sOAqfRRWTGIV + VvIxKxbNFrds+s7iFqv89tYKg9RZ+mW9JlfSqqkJIDSDMVoLjCPd31x6ub30bncZRNGQCgY2McYPG7ZH + D2zIe861t+TMOFJzdfFZhroZOj6WrAYs9NGGEKTq+VPuiC+o7sgsOw1iTI+jMuRTw1fJc2yU4P4mBOy7 + t095OXJTKw3ChSJktekZTJy3Ngno0K9xEmfUopmoLT3cXGLaBrMGlf85CrqPaFfVSk/rMplMpr1lMBNB + GYp++smLr758y2Y+ZVeTIKNYKAPY+ZLR9oV2eVT0TqhfvjuzJ5EOH/6jrz5jalj25xA8/fJnP+LGU3Ti + 9dETeTY2WzXpnPO3Oustkmsl8Bks7C6jrZs+Ouhl5JtNhJO4M6+4rpSJK3dqlDiJcQvgpUpgoEa9U8J+ + TFVgY2c0YoLftM/TSkhHuHGmyUvpTv3nnAjeFjdfa89dvXDhyik6689cAAUjLzxHFug0KbAnRPQpTp4g + 2j+v3l198PqzG+uPraFC2pnopggR6QmkScdYq/sSreSVfzMIh7Li5Lm8Z2echyKZb3OS1k9rHj/0hy2B + BLxP6275NtHgzNb/eJBBiXwwk13yXCrKROSEO0dh0Ef+O9827/FISOb0TLAXkzkZ9jQbTNh5dKYLc9hg + ZRmyaFXF0XkQGPXCUZqc0VmXj/r5Z9FY0TfbP4sAunYTxhmffYSVHZ1cMIcjYsO/bO/VeF6DQ+Bkd3cL + WMrm+uaOEde81gKZLnY1nffRA4GsWXLlLljYjfzrvJucx6TUsKn7pv6QYaDc2sLSd60qRSWW0a09rqRQ + Y+uvs/iyCk9aJmIkYc9OfGCviUhtTiGwx/Sfzz59STsBbimhBPHGuAELW8ehe7AZf4iOdHt98eHm4puH + Gz9+tf/Nk60vsed+vPHpo/XXpIYP1lGT2lx7xyF5c8uJjVvOrBB1Gcqax9tIQP/qL/8Wv+VT40leZHtJ + pTr/GQPlbaY8yNp2qD1TC9zZWbEeQa8IPnqw/urZ7nefv/ji+S5KV6QxOKhxqFCjz2Ql6uN2baxEnyyh + fkHwL0IB/bPqRSspqpyPR5gmSEkvU0A5G0RSGHMHWwehU6OTLzfbRlsfvUZ0hfGQQFHFQlom6KYAWTlt + YEe9ofAKhn/ra8tuK1rlWtPpS43GCDJ/VjJTLSMkHJvoRTN2jGundSi1xzUEJuagyeapRKsBgSkcnaV5 + JJTLOHieZLT5NZ4+hYiIRIUii5NPgJ+3xtsNOCTbSfftng0ehIhCBA78m68+//t/78/u379H20VgIRmh + W5Ka9YxoUtLEU2dOWLvhZeWFAOTpK3dOMcVeuWBKZlpeeILV48PQgDcJDk3SHQ8BLiV/yPu7dvUqSMZL + sGodCYRspvyjMoTkW7TEzPdKG1+ef1kYcuYsBAZV8+O83Ie994OeBRWBQOyQpgs9kbQHXfNs/NFSvaEK + yPac7utrK4zsyPyPt7lwH0ZoUZ+VmIR2pzMK4kYr/6m/jWTFQN+3LBAg7OzobFJYgTCvjQMbj0orodvK + RC7YQtTB54IHAcLNjVWIynb1tmFMrWuiVgpnq4ZJJfkgm+ypj6qh/dVH2xSnRx9D0YR8LmoI1UxrglZz + dIb/WRfM3mpZjw4NhUmNSnwRXRNl/RUKammO5kLvsjAgbEN6GYzw8uUjEj5LYoxBVcd98+N2azFXk3rl + zG94jOFDbf2FG0vvnj340dunn2LAtr9OyZCZTdx589DSrydYlwFFjSkFlrL1fv/hJipTuhoEk8oRqQV+ + 9dVriFBlkMoaVeozHlUWbg1KW/9+7+WPyYL4xbgV6sNde3XY2k+e7vz47aNvn2+TBdImQRMkbRLPsNje + WdvdXO5tEk0l1FJhNUW4yDamTETjfK8OZu+8A55pl4rLnQQy9qU037tMCpPilgY4q4OqEWr0oN0oCnaZ + aFeKoive2bZxleCfJvRyRomlT+3o6AIvgcx88CsdhMNI3tpN0RHRB9PXlonqNVo7CGcgsMKhu6yNhjKl + CJINxCkZTZlMLxlqxUACwxg+k9I4vsEWbawylfPRuXM3zEfUXGbMUWSo4VjiGM31Y/uELXHs8+mTh3/6 + 2+9BHx/KcJFi4YkznvyBeQaHV+03NmQiCIFDssaQ0tw4cZkhhWutuZ4Z98yyX2dI4bX1px8OBDr8w59v + /XzeQfLhL/M+z+Tj5jQwnYinM+/z1I+zrURSx93XAR9e4phSPX6gF27futmkp/F3wV7bJnLIjoHlXg2y + UrI8g4U1KQzTtQOSwl4pFATOFggVJ+pamm2iSC5UopgcQ1F9R7OSH0LwCH7DWa3ZSsWQti4cJaxrZoys + FGSH1AuVHWa9kPWLB4G6hoVNyD4K3EfJjDVHSyyK+3ZmftWVO1UzWi67y4y6Cb2Pok8i9N5BI0ijv/AG + Oc3+/jYi0tpTyJrOzEJxqrUNQGpSKEEaBjBda00U992VdBEedWNtkXohcPgAvej2yqfP9/76d7/4xadP + aLf/irn2D7EnXQUOYUqtcPhg4zEj4D3/U9+9S1fqmN9NiFNAUYZtljJ6+hh5pFcZDRcNBS2zpAtC+1EZ + UjvkQaNDvTvCewRXsA9l0Pzn+zZV8ZtH63jHvN1bYaYELfMPt1efPdh5uLMBruebtYKopgw2BxnvDpS8 + Vn0mg9QI5pNPjw0e7Gzubq1DnCodV0UwidA2GIQZTHDO91zl1Nsn7Hs0mUx6rKePaFiJNqVoZIRmTnTr + OgIoqUlne1UlGa2GMlksrK30GcwJCDlb6cabbSVslfKhlXAcQzihRtWw1K+7uVq2CQrOpUZTHDBbGsy4 + uYXdgXW81tPHD9+9fXPxIlQiQMhN/YWpZoD0oj2a29g90YCGF9XK4K1x1kpxAgUpWMhcewNCA8XTZy9e + 4yq9Dq146gQMqrGmUT48eeHmiUv3mOJk2tFbGwv77x598dMbm8+3X3x73EX7D7CdJXPeIVdfyz9T2L+j + ENfZRXJB8+T5o/9RKHXIYSY1mnmeNq6UaaaPZRt7rCGg3RGSJSZKPlqwUPcnP63Rp+meR9Wooj8Npqdc + HFOmq16GnG9p8T5NUZyv/Yqa9k5EBDqrl4lHWmmw2Semm3CviEC5LNOEfOfWxGgtg2iWG7R8dZYN0PXm + 2TNut24gqHGdnsfpVT7q6aD5q+Ute6XTVaQpZUI10yxm+nKZxUL5sTWZvvXRN3O123VRXl9bfPv26c7O + WncibQlNWpKmuFQ2bHs768+fPAT2rGzW2yqixcJNum1OxdbG0ievH/3F3/rJF0yc2FvBg43Ey5jSR+uf + WeFwHTh89WT709ePntHMoBFOGl5htt1mSUOCmPmczF+i7a/1/0mG2p1CDfnWoXMd/zRT1+5AhD5BF0rx + z/1iPgWVH61/93SLKbtfPtp4vbfydHsZOpSi4OY69jHLOJ89f/7gH/31X/zq+29lrCMWVLRwgl9Kbdvn + 08ft8lHvbK599urluxfPabqnTcX9EMJc1BVMdhN9rU+Vp1SXbQU08b3TM+ORkAKgFBJP2mwmXkVDB+GI + ggUCg7qv1KjDXvAZ1nTh/fG1X6iKZXpPvbcPZikhQTHZFwGh/W61+QkWHsTrVOKnJYheKHH1uNcFPf61 + lG4aSecS40+0nM+Lhdyia77AoSQ2dd2yBcz6Cy9fYgLa69fP7t8jHXTftRPnMWy25sJTZ09ayfASZOnZ + 8xcYEHPpylVLB1HTWO3QmgsdEemyN+3MiUv3H7z95n/7P/7Nf/Xf/beXVx5fXHj4xwIaLOAWppzmvVVb + tJO8eeaYH0k28rFRmExOlQ+JduwD5Cd/iLes73XuKwEO2+vrG6urs/l0YliDvekOfIMBEfVIAb9eLwTk + oJS5AMSFtujM/ls5h4NoUg/0OihO4r68WjId9A3sQuDa++TNq88/fcOL52ZcwG62MDAwE8PD9IJqjROh + lNHFXLoJoy7CMkHw7iMMrVgShcNYPtpEb68UJkHKxvu7OzuMD2tsVdpcaU5va67vWNi6pAn5be3LDEC0 + GL+TK8vBTGo40zRzTTNoLmuei/hsdKYFsabnhCZVELsrdCtfRRGxSUmzswLwe/PiyeOHO5KNGDxE4TDb + KhbWQZSNJbBwd3t1d3uFufaPt5ef7yy/2V1BkwIIQZaCQMDhu/2N1/sbLwAqV28yCJ68DUsaNDXcpGrR + mPhI9UgNI+0LX++ExuaRhuW37cEmKHlrIHt+8dAqlG8frgPGSHjAY+jQ717ufvvqAS0TjzAKL5OV0MWQ + 4f3851/9X//n//5f/uf/SkKhtExLpxh9IM4YN7PW0jVBwr22svh0f29/d2vJUdCBMHzUmkzUtDOkj9ni + 4g2g3VmmjljSTInGBPT2+WLRHvFTmLk7xx7Eu59dV7qzWoi2suG16WJi7kTWv9nglo/JrI0TEzeZUik0 + IWgjSNVHWD1levtEUXH39sGxa2KQwrXwN/jPrBSSgVy/TP2L5TfiYefFkjcahOhar3x1NLtRrUUCvboo + iejSg0ZwnjpFtYvJj1RMMGZDhqK8oLZSnz13/iK9bWfMPswD/NMnzl4M4ei5a1ZNPHnGfoOF9FRcurP1 + 7N0//k/+xasf/VIE6cdEBTuCJqWZ3e/sul+30WI+eRaPuJPCsUSk9bl8CTD0tbH98PfJq1NAPhJuj/9h + UdcEwmex0EKbM2eWqPjcuWOZ+/v8qKcwYU8JYk0TJ5IZF7xEE8UE+dr5l+VDR8exdjgrGU3Go2FeO/Fb + 8dwCQ+cu7qChvHqlk6L0el68cOUi3S+TUkToRZMITQhUh1Ov/HtPvYzlslkqNHKj11pfLKK5vgBhsd6e + CEcFhxP7j+opI8lDsVGOBurso2hJQ4hl0qykD/dpRSkbAETTvTX+hLmlXGZqo/espiZLX2keRrei8iQp + KuXNRmv51tZydBba8MIlbj6/cJFJ7iRbpFxPdlYw5mZ4E/VCg0NUmshK99d5hMm3lA/pwX+8t/ri8dYL + WuAtI7Q+d7BQ7YY+Jtdw0aBRaMc25Ub9D0r2ISSnd0QwO+IFitCHzFFa/8Jf66uHAKE5o8KFYgUHTfpw + e3kHFNy0Kbu9QXDlHjYuf/Z3fvHppy8A/maWFixoJILAm4lFe9egPhN9mPoYaSvUrF18QTfXlvnwnaw2 + T23iFcZp/cO//7svPnutf3r4In+ZMForSaGP3m3zlfpYiSaTmbGuHUbSOxyGn1EVLRcgnNiqtTkqRHJO + 7ysjtLqAycSKWNRSwLHFqMeOaS7T4TBc7w8YHTp6QgUWCgV1naY+QNc/sHv94lViUcXBvuSQ5+HFYYW6 + LK9MeSdfbVTD8p8WzDuPxephAskSvnP1q6mDW4v+W2+2gwdL7qVLV3ldcNP+AOahmgECSQTPXDphDYhs + dzqwkEZ7TGfO0WW46MIZWg8+3o8PS5pjgc0UJGQ1h7erH3QUR/YefJTD5yNmTtNHBEI7F7yfPQ+PR2xA + 3mVo8ffDv5YdRt6nUEg/ZXbTpMvev/S2VbvjcVK3G+3/5EGiDS4wx84hghvOYz93hYKjWGbaRKHrIdPB + uXUIPdizwDIpJmJYZ0erCk6lQdUUR8ncnKlMs4q7nPo9Y8PdzT6yd4L17h7dFCZ2GOySKyGmtkJz33bS + rKpGswQVOV9zc9YKq7U1U0bWa3CRZTqGxDb61P5JsuLG3NkPAB5YTyGdc9TGXCbz8OEmxUWAwaqG+3Qm + uA2pXLl9kK/DoZzJFmg0JDva3zFByitvMaRKB00KPsGXotskXXvrnQyfPNl++3gLGKOO+NSUNWvP6L4n + O8SqxtvzDR3dDo0/oXyB9nzClvw2axj4zxXmQ721OYLrn9EXuG99Edx4FV4CK7hn29YpT9cjx7O9tQxa + +0Fy5NEsKLfx5kIe0pip5w7poFLAprNFK8R7z7ghjWNsGP2C1RSVCOo33wITtf7pf/D3X754xFzJWtkt + kpnQQLUpgyJFrWacpGjGTGklEyfSkA4GCg5BmLdPqICtM3a0GBUWdplMnPajuahzodVEZrhq5rqsCQtB + Vi6xennqmlVpv9645MHg+/fuwtC2FaBVSZztdKmAMj0eBwVtuK7PIORm4yba4sN9G8DEz+ri8uPdByyJ + 6qJvYHiCYsbW+hoqyzJRdWjzK6tfT5/kRGqSVONLfTyFqUm9cMhhnMYH4BIL8KlzPH7VCFJMShnVdG05 + vGY+CpBoJ7yduVKR+3dp8Vn4AAAQ4flhCPpe78sjl9+XfbaOhNODsgKBXX4OOm8c1qYHmwiaYZJtNvOW + MiPs2OgnRg+uxs7CoprpURjPvX7j2uNHexhq63RMslT5pDblTIefcZq699R7jTAqBMeRjBY2pndNlOlo + wdsI/GC2S4J4ZmHh7ssXT+i1hx5ZXrqfbhqqlGgwW00HoZI42logVG9WoOCMcDSTQq1lABuUZp1QYf3R + bYxALIVhL5mD7APeamd9KUR1D1LcKb0W1V25ra3NsxaJGFNZUzsOJTE1JjAM2NRfj0BmwR1qrMTlyLek + jFCzfAWHTVNqChpSw52t5b3tZeCQ7PDFriEf3QvY0Hz+wOZXQFryW6D46T6zADfgM0kiATbgjZSRDA+p + C4Y13OdmVUbRnvt+Y3ygD4Sil59dfY3xKUDoxtmf0DKP0421yS9hjurlQOdvE6qR+ZDgtoEbcgyQj4z8 + BGqh1D6KSoQ6w8kG+g0i4nUXeWE2SOScZIUmNiTL5KPW8em3qXm6c6QIQbnxV1nr0R3ByAuNlahYOL86 + KKbBNclVqHzlipWoJy7bde6ScLF1CqXFqM+jnnZNNKYkA0cunh5Z9s76dmVZty4XyM72BhdUMDfjGNFS + +/DL3zK/c0hAvZW+h8K1YuIQ6FBoftngn02Z1/TBaB+0B90plMD7/OUX+0/fvXgJ4PX1ilG8p88t3Ly7 + vrhKYNAyvwA+rWx1retJwglWb7deO8HcWfI/s55BOGM3U9BcPH2OMsot1FOn8Sa1LnvY0duGhVcXAgsP + TMWwNLvK1zztFHwvgAmAdKw/8om54HYY4OM0u8vfL0QdeWAfa4PKG/MesYVDUpFvlrfP6TkPFGcp0I6A + 9eQY4bCgYePfBboN6gLz2A5J6otnj+7du92AUF9F/cH04Ozeg+219ZWxWBhxYM3/Jog4SQeLRtT6mST1 + HoXd3QujBLNncN/GRY+i4CfvXu7tbs66zFQU5L5TnZcvWaDd64Wzc3prH4XL/LLGUyR/Pptwop3xNjI3 + HW1S0tkZTJOsQv+E7vvyizcICwHCFNHktKbIVywpDGbPKlhlWhP/RDwJtsWYPUcCdyK1PgrdyK6Qq4CI + DoR2a5ak96WgAXiMKd1aIhuDlny0vfJ0x8qHr3eX3yGosZkPK6apsflHSuNMa2q4CDoCaeb/svZpPLL2 + OZpPtnlEe4Yzn94I8aUVAhmRuPLZQzxiVpmMAf6Bu1kLpE1eI+YNvJuVtjBb9jF6L7xZm7aB+JUpS2FB + F8ahEx+1dIrhDhZoO54l69PL0R8phEnys1kiaOhub4CJYZM2ReQGc7uWF+/xV75xzsBHjxgjvOueMn0y + SRptS2nVh9GHm1oFQpNouela75poHvFSxwwV7npiIw3b3l73ungvEzTHiTlJ4aSbvnqtUbu5ffsmhcl2 + hU4H8CovBAWIQTnUsVbSCoKNDh0QMaJnkj+w0EbS+w1EbPdPXj5zGh3sDVwzeaIvVZZGsTwR0D7ZfvjF + izcUjyZVw7K+5V2tjeSCNsjeIDBupiY1LFRGePbyqfNXzl+5cfbyjWbGRt89qhlGNd0xLERHetAPb5AZ + rVtb6x+QyR0TOUi+ifsZlkRSQZRD9GMznA6waDnmPv9t2YzvT0SfMI1z7uHDnc3NtcTFDHZUF6yJY2MG + 4kGeC+XK9zU3gEo8JLeGcKB6p0cyOyTTfPnsyX/8z/797e0N9tjQTxSo3bgc3O/lDOQpBxwKsW60Zsak + ChXnJoWTy2xs4LUj5zY2UWRDxSCW8WvY2u0tIu7zmHp0PJsU1h6sRjpdRHzX8sLoJszS4Oz6pUUtpwe4 + n2TKBd1q2VOE7CBUI7ZUiNVlxrsd7psH921McdfpM/NEJCZRdCn/3Rtwd6gljcErWChQzAbw/Ydbr149 + TsMwZ1ZBuCXpKgGMzc1lOFLGFkIzOtPI0HZ+m6C0kaVGmVI4VO1wx/Kzpb3NRVoXsGeDtMTb7PXuCvYu + YjVBQdI7FC66Sedize8Oll87WAoFYT4t86P+t2s2b+yHJPIp+Le9sucvxI1X9E5HAzxSK45Q4xXdMTVM + ZNIvhje1tQlxulys1LyZZJoLtu5455OZTU9GKAjMpFB9LPou+EhHSzzP5sFCeYqmUtQdErK/ntr3vbsW + iGCYzvcuYkDNpiMQysB9qDqX6YN9GH1yoWkcU4BwYDikjuF8Ix9102WjQAoE9otF9fV5wWUryYedU1du + Z7Q64UV5/NnT/V/98ic4g0tzICuoVMapLuhZYPxOGsnvFCw8feXUGRxhuF09ZUnhlRPWWU/oz3bazMbW + k3xSkVhfXjHKNPK/XNQzNYy0qi1u8GpgIe5r/GYZ5M7Zk+bEdunEqZYUBiI23zVvqDA1qQtnGGcY663n + bEPShu3/L37+LdHHkdDCE7UKH7ll3YDX40QiclLdymqhAKK9s/faze9940MOKB1ipwfRUvjjHJz2T+i1 + iR3Iwr1J2JEo6BAVjrSZZ3sGaeU9CWvbaTFLjdozgMBf/vTHa6sW+yQK6ikb66tv3zyXKGnkRa3SeeXC + pRuXrnEZcmxcfpr1oSsBMgQVzMO9ndfPn8EczQLhnD7C2lxvwGZXbKsXDtqZ0lbYOVKPjm3q5SiTO9eG + 0UzXDiOXZkLsTpC6oUy9pWQm77TW6asQbg/2NrF/K34iKg0OwwhZbWnmA8w0o0BpItDFyDqSicw/0I42 + mSKijNAxsmR//u71n/36+4d7GOv42MK4xYIuhST7BzCUD4EQ9BiQ/HEfaMwJFdlfXwdWCAjrDUByZtJL + iVQQ1xegKwFFpsALFK3Ut2sTcTG/prDH7a0B5ApJHr+5j+AFIxhqjaoswqDSC8gQDOp/WNs82FgE/6gg + PiRD9czPa5bB1jbLtCA/45hL73yO4BDG1yR4Yh/T8uaSSYtq1hhk/xhJwUHBLz5/892PPifU0FfT64KD + m5pbJdxIdYwFQDzCMeB1RzU39cN8++yfoMfWsjTnK2PoY9aE2ap1Yz8xExg7NLp+fhY4bRwUIzpO5Szj + JvplYlFjNCAZWGbvRIShg5vMYC6jLbNGyF08cShGsA8ud6CXTnYaGu3St4kTqY6J+wqjM3dUUYWROZYO + goLnuF0NODxlWOhpoiDQ/ulFPuf/wlBNwBbCUSlIPSUQTgxSwUwV2l/ZDwZnjoUlNfQE0cZW5MAKo0kv + 37b9+ic1NSpbuH/3s89e379/98jVXEB45GaTDSxaONP6/9/3yX+Q7fmoeV82eXGevAVNCcqg2XSZT4PT + FcLvA45xFnTzEWY5oTQlm2m7PQmtsbxM5TVTvh4u6TyxCE40qP9Q5YZXAauEdg3zjCCNfXrq6Y678Tw2 + 45K5euEyQIhak0cVbPo14DHgafjzyy+ePnr36iVACy5msX0SY84gYptl38fz9kTQXgXziet46Vxpaprw + yxCTmQXCsB51ZzVWnAk7mg0V3Wsm/DuGYYQT13/6KNqgHF/anBfd39v+yXdfvnr5mPKeL4Jmr6XFUeZq + TVtIxnATX7SnTx/s7m6wcDtMXqUESAqSGhlJFiWWyQkVph1duP3s8YOvPnmDdkb1wrKOewHMgZBFX7oP + 7rx8uf/999/Cdi4sWAOGF9X6hKbahG7FNq8aJkaGmoZUzLIxjbAIhzZKdyAiMx/2tpbRs6A1xfYTYMMC + +xHA5hj5ZGuZO3ajMYMZERQdt5chWs312zU1m272Bspiq8YRxkt42bJKQ/OA80FlinwI6SBqFdDWO6hc + 0BtLphPnM3RQs2C7RfuKPlILUzaW85OfuKllD0yzUlO/RLRMkAjiYEC90IUzxovytW5vr9mEek3f9bOl + p4PGz5uzqM6oVp82RtTmTtjcpZg7Af2IW3dyGHPP5JkZvIaL0VzUBvCm+ow7dMSyjMPWSJWWEaeaCHvB + vtlt83bgpSjZSA2XcKhckB/WNS5JB8WAwEgEPSrOH18c0qORFYZ/nzvl/KRhIb8xf3EgtJvzpQJFHzco + hOO/NELIjO0M/he0THBIDQUDEPXPstIKGvWgUabOlHrTvYqFXi8067XT59VoH0wphUPPD472iPmAZf3/ + B09h9C5tP3PJ4RZ3TN8lG5M8gZFz374HDVEwbfePlQKTeDGyLHljngsakJylhCaPR0kkN/gLArqClAqm + Ip5qIi6dvfZsrqk7NwiCr7kTfOhL7RQ+AwqHWU+hRASE1DVPc5pi1VKUZl1y1tqS+kgXf8SmYE+EM35x + doU3IS0WMLCmyv/Sa62WBut9LShVL6NoOn+nJM/WIENTKRfS4yOFDN16rWaKrMvPn+6zDooEM6WoN1b3 + ddPKS4GLIJZ7nsFv3lS+uLx8H+hKpahQsEFgIOJUaNr0HZbQ3DUbmuwydGIQAZo1CSjJk4SkOHEbERpl + tvAmtX+yMTTjm5ePnz7ZCyrSpaRpaR1DjprQRsSp3XwKEjccvbkPQMJwgpRkkDyyDbO6tcxvxJ9S4rx6 + uf/s6R65pu/Q09Dmmp1gnIOFNVgDdjeBEHuBB5sbGMtIBOQ38l05yMyZLCHyM4bO9xGDoQ6ViU+Dxp6m + u0+6ffhJYldn7bQN6l2D19NWxnXCN+004LmY4hpNqipyY0THlsE4zVKuzEkI7G2srjCGkIogT9zd3gC0 + 7IydOOi2KWMZ86VSRrlgNBS1GbytE8lmMLFogFsutI4rS4g4KdtzbctTjetiZWXJTdHmC0cT/9rImUqK + ZnZokDgmhTT1ESOfQ7EpIMQRzbAQmhQUNAgUCpIamtJejt0CQpDs9JkLRmS7lK+kg30pSygsJSRBKSE+ + jeleODSalHb7S+Y147tp7fYynXEg/OP88ahkgBPLSEgi37P97oe8O2HJD9nD5LkMnOIK0Tfqheg5PRvK + sIW+Ge9kqFIjIM4WWhLpyq5Q3TLEqPbVhLGmjwl1ds457EHNP97ZY9paaygspjN+alov4KVLEkrrRFfL + kXH8Pu36oDLhRJM9I5/pMyha6BrZIVemebj7lVyEM4PdvmxlnLO9wKSbpaX7AX4uOnfdQUgPxEdp+oRl + lqWt0KCxoKNNFXeLyOY76h1gqhdq5k6kg2qZ6HBotiOeK1SMBP8mww3qIPvMCLOD7baL+0s2Y3kh4Np6 + 48KbTcMTdHOcGOZRCAXDfsV5xVUB4dbK11+8ffPqSU71syKiD3ISUuak35CxGGVqMKZinpDStS0LO1sr + NBSCdusbC2p+8LqjKXR4Fal16t7svr+EUlLDP1OEsp9VkM9GTTWxKK+yuQaI1owwBDI8C9rZpaHx3tOs + NeRFJYCQ8sgB8pZ9pLWJxbsG+SKoCxJnmCj0Nrai3RtI32DroDc7BaWG1XJWj+isSC2V3NuhwXlucywa + jG05Cak6Y4qEK5ImEfqoQvP8c1/ASyz6vNwMLxq66Ij/GgSOZcLaONEHX7fSQ4fD7MmrF2P2RJWgdj4i + aku/Wnt2yHWK7M5G7EZuGDqDkiqeOXX24qlzl4FDcweFLI1ckIzQgJCSIZe6mUWFoyTrPzmijwDOda12 + 0Y9JRAJhWSTZArLT80KDQ8YwlO41mu5JENVN8Xv94fhpPbl186ZzdSfMW2T+sKE5R+FfRgdCzg2uXzxB + PoCGnd27Jd4Y1r1/S58zulbL/LDPTbFSZmZza6s8SI411w2glgzZCVtuMuF8eVlZZo2YoPcIneWoXrFw + goutImiYR0zJF+S41iEwIzs65RlQBAGpR7jxAW5vYQl2p10SGss4fzBhp0yR3jSrw3YRmgqmlAm9uXCY + GhqXdzZUVN+1zAsBvK3N1dXVxckKEryoxeDX93Y2WfIiO2wGpDGntwGkZjmhDqgt9swWj16xMnCgrpvu + LxMTCXJAgTSlWUSUX0krSvWkUBxp9uCry00GKAaH97A+MRQsJUMfZyi3Um+ocJ/MMB5bcaVlq6iFFadS + LsFSMpOGajnhbxxsVFryjTVVMS9QzRDRRuNSLfv8ExS869y3nM8rf4Bf5JcNXMXW6rm6nwkoRwUEvn76 + +MmDHY2XalxuWKl5UVA+q9Ep+OTR7utXENRGCyOKmZRRY7Jga0HxT3WYr9TS7m4cw9fhnPMdJE58U5wk + lGybc6ywMOyEiq1oh8MqHG1YiMzyzuPHu7DoHl0N7YMWjTkpSoRXe3ta0Hbh9s0bm2uriHou2kj6fhPb + 0dNBN6BPf20m+1QBdlWHejrYfe3Fi0poMwlJx4v3sGvZg+DT1As31lbhpQR13AEIOUgqJpUprTG3lQzP + XvBioWWEzouqocKx8ARx9gXk1LBf7G11dZmuTxmP+MIFNcr9yAtbntD/2dbVYW127QzLIEDIb2v4uklJ + 9/ZtPhanyPAjPW92M7/XH3itLz9/h5iCj4lIgT6w5aWFY75iTX24//rZs7/63Z9ubw7indms8Zg7Z9IT + 8djxMZUDYIW3r8Jbao75KodudiCUGqvpE7zmPt07Yc1GSDS4Iytlvyna3b1+a3tlgwtn8iclX8YahO+o + eNFOkCY0JuDlnZoLCgjv37vNJe1XRbQW6VpSjSFvqjuKb+FZzmFOL8Ks52tGjAtEJ22FSgpRjfdGeyvG + Wmgsxw1LDSsKZk+9j3M7v3DvzrvXL+hBzEpMmdxrwbj7jhLaX2G8OL9VLEwFRC55rLabmyuA0Gi1ZVkg + dCgFQiCq+HFHc2GV5kcu0qafZ1IYy3T4dAcQKtXz+QlVO9N1pOog1CiGmNDkdmtpwqkHU0ej5rwoGapp + DxRMIPQ7RlQavHk9DwDrXqYJh5aZgYKGfKHBiV6Iof4Xu+1AaLlpGbFrbjhryxuWytu70GGIAm2NgyEQ + FeQDnNY64s5qrcNEH8swYrem4DkVuchEY+JSi0ssOlG8srRwl9nOd2zoREsHNY253mZ6aQh3UjUKHPI9 + IqjxcWAx2ERUvPol6CC0OxoT5oMGaxM9LT9gIfykUFBndbtj98VnZPxXxDIhFs06wigc7eM/kY9xFXDA + SYG2Eoa3xseVO6enXviXiSMHyShsrj5VTHrm59SmVxbjTo2tkdmcPANYWjdFg0BlhEaTnqTp8Ayr1mly + 4q++fLe7s9W4MVY5hBc2vElMWSFCUz4ztydb9twkhdbXv7a6/Yuf/fbrr390h9FJbRcn4Ut/rz+8B8hA + sYuP9/f++T/766++/EQ1z/f6YT8QgIuL94hjnEPgXdmbv8kZegWof78f3r7Z+l087vwpXgj+wkxhPigR + rIj+fgc6zJeI7zixvx5LyfP8nMBZ4bR16SWdIOCE26QOwW8/jbq/XwPDdFzT6duJfjvR2z9bmdDp0Xa6 + 18ujAWG/kAg9+dK4YnXhcQ27VDQcDi1cZS7VhQt26Q+y7+47I5FOKxY2l7VRPpdLQ8bR1aqDtQNtLRd/ + LRbaGsSZYMTUJebV/eS7Lyi8iaqKJSwTwTak3rxI3j3//pffgnlqJcyWang2NDIvXuyThWQdsePfOJVi + rolJWFxGdmhpIku8aMBkSk0+47lga6jQYKYcwhCgqLqaZlY0EU3gnzoToDEZGbG1vVKdrHPUn1BT8hZl + cjs7q/CfQtBM74SvrbLochuvOEr/ohdSL6Boz2wN9J0E5qVpHPAG/vEnCpngq6WDPno+BKIDFWyFQ5sv + 0SZYqZJKAz3WdSYQ7fMlegm29kvkfTjR+3dukQgqCyQdvA9L6r3zLhju7rJJijYuVKTolbXlpdXFBYll + BIcKnsq0yz53sE1cMkQUEGa4psYJO3vHkG5SF28Mqsm1BJDjpRHxYksEXRfThdlWILR+p6uXJ1PpGx1K + ED5AYAa1rRpShxEa4mWgLCBUgc/vDh5VWivsx+5YmYtlVX0UPSMkO6R2yOCkMxdOnfFL3oYXabEHRFix + WflhUHluFIsqEzZ3dfXl1yhWfuPC9url5//w3/kPf/X9r0hetb39GXvuP8wPCy9O09//7Lvdnc1Ydt+/ + 44JD5dt99GgXRa/QhW+VD7e+hUNQR99C3ZgjOY5tDc9i4Z4kgjwo5f9H/AA944zq4GS3c7/vxL+qJG5h + jn/HJVPkhDYDjRtIwqZK03bWZu+ED5AOn4hhQm8577tsTMFgRouz7CgIhwZHFcRZsYxkMuR2YKFROkUy + k6VBOcBVOMzrf7JMtNg51pemPgjhzLDoaOq3r0QsW99+8+mf/u1fYLRhqWFYj5YmehtSj7PMZRbQvT0G + Ell7Qy0O8deupDfU7IxotGabsrR1HDoo0kHBqNhvv/kEfWltxk9Bo1oJZ9xKVTLUjHVNLoz6mZoN1GNQ + vUkjTQxYCnAin2NAhDm2CERbM35V3KiYZzC2ukAHCEZuQrLCcxq2+T+ZnXuf8bmTdvgcFuE7MVGMgLmN + mLe9CQhba+At7LyJM+gJsS1z6Hx4hzY2uFdMQ1jrQHiDfI55JGmr7YFFcM6GfBQFNSfZOyWirfDencV7 + 8KK9QJhV3iwQTkhRNQ6KCKWcvAnsU+0bJ5ZcayYMMxOXYu6gwSQ60j4+epDJSDLT6FCrf4ORwYt6/Ie2 + E9j2q6ATJKodjImgIV9OH8w77UqMkkT+02qHCYThpGjXd6pjWhzc8C8WiioijRh6yAKb+C716o5krN7Z + OIHRGgOVHAWjgogS0OYOtTXb5TNhHwMcuqdo/IRYVCtewNs0aWFXBOIXl5c23r55t721UfMxlrqPuIzP + 35Uv7rbyQp7BeImGgx9H/X8Q+3fIMfEd3bxl3PrcbQinqIrNxUIehDwjNqpPpKOAuteHZWwwBCyEmjn8 + sX704Rx+PAK//MpLfVhxU2+1iX83tDRJy5mz+i78heK3S2P0Sz/OabTQLh9tzEdqwzIStNSw9h7NAmH+ + NWsSk+swrlUNiAmFW1Y1kOFcYGoSX1ajTCMEDr2cF0vyxspihjJFMlq1o8YsFUdHZ6jC6VHd8eKvlA52 + NxkP82vfdDTam0TCMsIoH4b5cnOcic6KGOVadPmGgizc21urX37++s9/9/3z5/vezR0ixmRK1TvRTWdy + ruy9W7QWoAwKRWXDQmVUiStpv9kcZ/owP8a7g0wOSDWbDGa1UZQOb2HyEtxppHQiV9uYeGhANTz0ZLEV + KdPsJnLHtUWMdZ7iRuqg2BQ9aZxmOlg6Iz/55Pmjh9u4ipulagP1FAdJIFrUQzKlC3nRRHybAl31yDeZ + 6DWD9v1tXi67CZ0LtW26XrR5yc51kJk1VFMuqN+gFEfu7GgXJKeTA4JoJMWYp8CA9uCsVAST1RA1yoHB + N2T+5w9aaKipLGJKcwZv+qjpelEL/MTIYiocbd0UtcyPLCCZHuWF7UfXfl8Kal5ozxJbNGaEyuHqj68t + sFYQVF4mhCnlpim7diM7vARpyXrEFb14/56PZ2d7c1CjXz6HFsxwYx0Lx/WQxZ+GfczBy4wjXy+paf6g + NVyfzGQXvDkyzVisT5xkQgcaoIp5/AmaUfTmx/1xlf8BfQvu9llnPPHSP2R+r0BrDid97LcEiB7uwV0R + cRYdKyI2aIzHpidc+3dAo6KzBofj+TrLZtgJ3VAw7pTyoQErV/KzZ/srKwvtaul223O1M3Ph0CHQLlpn + SofOelJBm0rqfRTAmMokvYOqja33tePcvdu3NlZWZL1RtQYjAZV8VKBgFmmK4+hoq1asQ+oKWO/beArN + ZmptFbWIKNVMwiGpHjmZOcKsLcLpZeu9Vur7d9HC2OS8qXCmyUBcIIMBZgwhCgo0Og0iHWz5Yoyzb5VC + IzwDgfpU20BQjTcaa4pm8F0HwSeApTxHZT97O634J6lOMcgOiCVf/Prrt99884kUob5ZdEdQW0VgwoFx + 2GDhb7//6Tefv+MNKt9titnsl+8+O6qeQkenwijs00IjGrqYzc3V58/2TYdPLfC2tcZvrFs3Ye0BbdKY + FIsOg7eyCtjLgW7IN/FkEBaaVPgOw3njr4quoiZ96QIVnYVb0LdoLMMCsPL5WRTMdiA20ximGvOJEfXp + 0zd86pxm8GZSWMPKmZaJ3kc432W7Xrm1NNjwr9FAzoQme0Stam97i9qhlscmk9HdXnkpsbgibqvhhV6G + vBAstLzQb2fAQrr4cddbMKGlzR28RO7orjSwnTGqdoKFWuhmVmJxpAhHLZs0nPK5CHxsC3fDWeaIxZs3 + TexRwYwnQKQ/2N5GVDB5Muh6jgEc7TgscHEjMUCIB222wQdV2o6NLye8F/s6q+3xn/I3siUtPpMQ4aDD + KJiXd23bynym30Ki3gQOJ4lg+2emfDpXkx3tJ7GCuzjXC1+aZz/BKVQh5pmqok+UMgdhYU0KW7ga8tFe + 3nC1m8zVWAuwv3n39oWrWuzCVzg8em2fAwL5YHPJqFiYwryqGvWKYKxQZRhTziMMOETRbh7c2VPhCeKE + DbMp9q2tIse3tnZs6ztsWsTQZdTWi+pyAqGHrmfhnk/Ii6GGkpWGKxucKiiyu71OKiaOVEDY5jCUtgoX + lJYZ7n28O/nc9uZK9CDq6Y2KzLKip4OhwUlgM1/TPiPe0Q7x5/qimbptLtMR4a6nhnA1Q402xyWGRoXa + pe0w4Fy2cAAhWMWA4t/88ru3r56I4LU5St4sEYoYT5Sjd9AfH6UxYdMzqQg+ffLgmy8/AVmpAooIVTNo + +xZiAK++QTVL0CdTckGr/yUjau2k1yzi8TabjoX02AgXeRxsZoNWLxQQ9qYdzuGqGrVzsg0OK+mgkG/q + sp2qaXMcdDVpCGQCC2cmLrkqm/3worM6NQtMm+P23Ku1JoJsed6dZ/JBrSBaJYADHPGJWAsEzomtcy1q + /JQJYVw+KgWNDZ03LPReQ2Dv9Cl4vjMnya/OXgQdsdK2DSyPNO2M7y2zwOkiWv/qbCooCKGI0pWujDNU + CEGo9bWDvUbr/jzuMIlRPsinsIIh4r17kyIZr7q8iEHt4mymaBmoNQJ2oxY1Pf4QEGKH9qF3PtCKiDtb + G69ePOPt/ZA9/16fm+9aR062g4fKQcklqRALsKKQ2RxxNheMtK/DoCRV9bf9ezxTY+uCir3cPbIcdsYr + Gyt5oZDSawmjZLSCoqrx+XsuOSMmp2WEzX3bL29WDby2GVFdKoWxRsSQtiBIbSppenAcnBSavjQhUKH6 + BAi1wLVSEIvmtdoxPQChsaNKByFCDeeuS2fhEpvaml11+ZmLDMIZ1a48F8yO+9le+88+ffknv/wp2aTS + PgFh+K2ou7z1F9q0ppDSGCICUZsbyxTzgKsHu5vct6e3KmPrXu8CzpBuaidq248dlhnxS3eATNuts6Oy + /55MiojSYBs+3Brkh4omx0yHIijIHrR94UWja9Ah8DYe3Gwm552mF42GE31WHQUb4WwcKS7nd26aFmZs + GRzaYFq/hDL7DoTXXAXjvRBXgycPVhw3ma6OcZkx29Cls7uznsLRohoNmcxk3NIkYnPJTEhGJ0A400Sf + NUKkJYoaa7+Ehp3ZjVOULlsOSZeeygfZMph3JljYLuGgQ7mIrap+7kLjP0MfkFjIUtNywZ4p5iMpmena + mbb2NCsZKUgd6gLtcCW1LsMTpy9Alsoghh5EjNM8j6SUSGoIZWqdFblCToClrJxsZrobe6LdsRU4WimO + XPSHNMS35pG5UMcbprNkfWWFj2fubiET9TgrM4k+tyNf/ZANOIYKhLyogcoVAjcmNPYDUK5z/BeKstmc + wUfH38dxt+SwOGY40rlP4FOCE7DS7kyCW75ygzkliJM0MT/rRMci3Aos9C9Xn1DvomindSBjS/7szF5d + WXz35gUhc6aJDf8GaXUGjL2Jog05GyCwDdtUHTGLGfViVk+haW3cjyYNNRL/mvVohs8CyIEarZXCSpMW + CIzSYIbwjfLqHpL1kZEU9UZ7a6O+Ti8jbWStatjGUyQckoJUP5riU5oKjmEdd6Y0uwwlA2HpBwnIn9Jp + zLHQO+sX7uxtb2xv0t+pRvvCeZonyx3IWPr/aHhvg20j5VJCGaKVxo6qJT/RMe8Ymm7a+N+WR8bUixTa + NNSMFsCKrw6Q5UV5XTeLUYYHlCLhUbtIOOn4+8qM0MYKLt5B4stbaLxx08tkL2Zz7QmBjGZKFNUu5Vie + q5YJ+eQZFup7iRn0Q78EtD+EB98vfDXVWcp1fiaIFcBNJgSi9mDzKtJuywDebi4z1AVVzL44Jx1UqifJ + TG2iL40THQIbceLsaAPCKpPRhaPyuS60FKAdXuDPZokge/Dd5pq1OqCywCoaGPgkBa/8LiiYSvXo2cpw + XWyUe3D7NCVmR5Aanr6CU6j/09Qx1kd4+mzHQuAQE1GjSb1Z3qqG3AwURZlW4YzDcxjF+R+kQeVGgmh0 + 1/HX62MjyZiLzl/fXUEDm31QSe+4h1W2U4QyA3gnFxdx04gZGhN2d+6rsNguONfyh5ASHfU+eVPLi+jB + 70Ckz2xbkr6xa34ChxYuXECF3GUyM+GYNM0JjcK/xmmkUQQ0xJnT21sMT9jgQqpAWMgT3a0EaW8iFCiO + NcL4Z+rZ8urlQuVCGhsq0l8mB1BEW0WtnSiUTsXd2E2RA2663YxWK+ndFbmzisFrscylfBRdIcMjDgRC + 66Ow7IEy1draklkwey7IqoqOEZKzD7IXd1qm+CpHVFIoIpTEZWBKbaK9lwytN9w2AIQe72+DZJn5JZAA + dU8e7O3vbjtlKk2p6oghSLH+BC/gpay060vbPAcQUR36iYLstmlwwEtDU3CI5K8inAlEnSbVHf/TdF5S + T/L88JKPzaSWnRvmNaOAkubmxPnIAsNwwOliywupnpax8pOaa50EYl/ubRvS6wXC8MkLpWhk8EriAwu5 + j0uDt2rc+t2f/uof/OWfcZ+m+O461OjQ4thXKFA/u5JvSMfRCS9aM8LaO9io0Yjtejoo/qM5q6VAZiYj + 7G4VTbA9KEUVYs6mg7UuWLCwXejhqqFK4dBnlVQThwroak3O9URclCLvXGEyEPc/aKaSKoXmPsONMb/g + b/Ba9Px5Xgh36qmhY6EbivLbENTgLQqBJT0w5T+8JkflC6k1FzbHGdUaD/7hYE2TAKQzHeI0qAUJeWzk + PGqJn80yj3rGYX+nm/DBntnFTjZiDWakgx7Xx2+fAbJVk57OV+ugRqbogHHS3DfLc9VA+kOO9vjPVebd + Ur2e1DrVqfyvsgEBjRUIOVERj2ytrytHbyeiTsdsw7ehyvVPhSPNU9bP5jZ7M8/+CQTWOb1Gqoyd9ZV1 + maVG85p0LDwLIYw2vSlFAwJL11TWCJvdYteO9tRwhnHqbVtp/Diabhu1hSnzgwdbrIBNQXqZHmdrcx5H + VYSUtExnJe0gY2bF9ATRpvuuLC0g6M88o82yT5/SdGgLIExZozueGFSwN8xEuQGHrge5zhSn1y+foDep + s5nut446lQznAGGBQwMYT7PYGNBiV6BXRUSUOAmElXoN6GraVPBSstKmfOm6U6GgK2hs55vry4a+RflS + ej/MNYa/fvLu+aefvuRZmOmkaY6OMwuE6idRuVQZoX6nwraWBq1ZAhO14iYqHZNwsTKiilTYOZQmfyr9 + Er01kC/3m68++dHXn1ETInaZnAyla9A9bL0E2DQyfQx9a6s3sejAjh4gGZ2oY1p10NuNTH8haUxaL0VB + vXRQhLmohlHkRafEUZa/IloOqg4W4WinfNrlH0Co5aJJ6hwXvTPN/5yAVymoYbUZ80Jb806eumC+oC6Z + OXeBNPsaB6slim5A6Wg0gN6bDjMvdESUm5phobLDvlZzRC0XyqRQ28O7nj6Nzb/ZN8/88PmSjiA84S80 + P5AOvwe9ePzF/tAteevAuA3+OHUabR19rnOPgXMCwKPtfbKzmQTR/s5bZlVhr3NfWaKeyRP5J6eO0+XG + MMzd7Ud6x0fvprx6ZUQTE/O8sg357hfu3EU/whnAwZe88JRdFp5H2wd80aYsZVI4AqE9ztsnerBRTe2k + bxLq4EaKorp7yggm515jk3phlXeL5zGVqLXeixfNruHaONWs92sHhXdZtW7C4JTGSqF1UKSnjFCwBexh + JUM3If1naY5VCK5On2KvXBsqBIqslQwiUEO9VQev46RlrdlRKQy/ymDhmrg0tDODAZuL77/5+pNnTx9Y + +nLvDhmhql8d/JrFmkjFNtre6otePAtqMZPCJjy5AxplNZHnAoQ7W2sMoEgGMjSornaZTRwrLnpjvpUG + pTVVXbDdMSC0eqHvf39vSy7htZbJK1rqGenpnefPHzJnkW3SOE1Q3YBQAhm3z66uoZZG24jjbB9sWDhn + 1u76xhIjRDjCHChRlKJXmLH16OGOf32DVUJ2ynOHuurXn7xbX1lKXUybVdIZBUe76JoodejJJN42lVeT + 6Nsw+jE1rGx/Bny9cTD96CvyKY60W+uaIHZnusXSwj2uXzEuPs/henpczK0LNmqnNkv0iz2RL7UCkeG5 + agZCF1cDkLqAXFScZukoCUrHH3jMc7CgeJOeYwLpWStJel/XOW+riFESBodKDV0+46VEoWAiotmqifzE + TYzLMIHQHWoAy7YxL0CX9VwgtIzwIg6NN+mu+pta+lmsYQY5q/hkH23vrS0u60hqJnQ0dMxscWyeN57J + R0HS+XuCwOO/F+Vw9d2U1DBFpLFNnlhKEGlFgiXmi9bjgCIj1LhaAMHtjXWskmZQUHM4I6yj0r6+tsw1 + L0Y0Y8B6tUyM1hrU2R7qlcaLsjcWiLnCGT5k9CY+6bc7y3TXKHdZs1uLgrNk2CqFQ1uheiqs3HLBuFAN + qWjmMs19uw2Ky/idzSBCnTZIUssh0LlTfrc+QvUXRrlIWOiMmYkG662pZtRcYZRp6kstL2mD0VNWCqAC + AMyIAGOy196xzRJEb7TXtMJgEatDt5zYeo3NCdL8ZxTeimO18k727HgTqWRynrPPdUrToLQwrtbUr7qg + tKCJdmwDCu7tbMgd1DoOV+7bPt0Zh12tLt1fowJnr94t0wLaW79gSQflMDDHPhTwE/ZrDGTNAlvyZ9Oy + qI++ffvM7fFifkhtcSFTdGtk+Yu6TNRlUFkPRiazsrz4YHuTNRMgTAgsvHpONQmX0ewdHCvTU8nMhLpo + wZwBoajLsTTYsBC088uhAaF535tqOiZOBAvKg1hKYQsM3CopFDHrF+DUSiaJ0HInuwaz8OH5X1sIxgXB + gJAj4hU8A+uJYFfKTFBvzj/d+srmvdFUdQ5tDrHu2XNm2C3ws1tBxHgE+YyXDKPK6DY0ygjv3bvNeF3M + WHz99MzS6FApSIWah/7wTh7sYfC5am/ogC3ZqyZUfQAgHfkUy2M8EyUjJGZKI5jjg8eRL3HMDf7Ar1gB + r760HvehDzGdy4VPQxbYQoVUihobfPPm9fX1Fa5qoWkmiFxnlP7dyihep3H3BpbEHzYwmYzQzV9EhZTz + frgwFBs67tnjXpDvsrTEQi5aKctTIFNpUtXYeWICoS7yKhC3i78DoZooZEM6ZzCF5Ab8RinA9cDrsq7V + OD1LOLlmsa7du2tUaCntJBBa1thXxqmfSDBpDQWNIC3VprRvHoBQMxDqDKA23dB4PJF75II+L9B412I6 + Gu6jTplGSkQ6WPvNE8mK/ET1tuQb1ZYgBjLdakK0qWxszAvhDzuyCo/ZAPwz7aiPkm9AaGBJX7yB3z0f + o2gdGpYXqgpoj1B99G7IBD/15ts/G6Lnn4qhWveLkbaIpBDGGKGmgFBurpMeQfMx8I2zNCimulmpmdA3 + vRHSUK1OlshYp/KiaUjbaM86dEnKZL/Jz69byWgqbxKkE4vtYDWkcOGYvUdCSWG7Fhr+tQKhIRz03vLC + fTIH5YV5ZWmbST3CL8k5pGgSOVUZLlyc3JI6Sj1deyRkB1pTSpA9JH/+eMwJr81guZzxgrzLiwzevnDl + zIXrJ89fs157VQdbXlhLhjaDN+QzjfOEzTx5ChfvjfW1S5d4MPIoB0IywqRSj2ImvY/5HHnpQUmhJY4X + KIr+XoAwj46vC6vIDxt4e0yo+4DNFATw9o9TPWVjOF4CpdrX74A056OrkqdyYPYt8n3QSECGl4+PSNkr + fxUe+YK4knxyRvxwTiT46SHIFHYu+nSWHbVccOBFJ0XyfpHUoDLxT3mhskARoRPtTBe5nbP4F8x2OBzk + 4Bn86k5bFDr+TdUETXrXgPAWee3Dne2Fe3eFhVe8caLc+vJU+FLlhSEOnO2hLgrSGFLh3RQxnUdd9kOC + 2KSJpV41jHPyx0NBk1MMhRY5V68Poe0thsGd3rs/9JtXalFMo5AvsfA+2/PPho6W6s1wmEmcJjSCatwH + t5i4BELDi8qSzTNCXsVu7YWC1czKX8O2yGjzCHlTsgvPORLJ8doj3VnUmwWLOpT7Nsh3kdEFw2QJTwdF + PpMy4jEIU10bWvTV9BET+tZaLtg99mroI3WoskBHxBok5bnU6XelX/mb585qmPWIWhpE7AvzOOy//nf/ + 7r/+V/8MQ4DRdD7qAhkm+h7CaKK5yUQfxWw9fn5RcGRuRPaoejIXAgspqqpKhsiGFj3/a6tM8p+6M0OH + xjJWVi0tZTbw+zT5H0B4gfGB16gOAoc+ZZcRgxfouLdpSqoX8iBY6DRpATkyP9mNcpM3m+VWhRr9SO4u + B2Hke0GL1t+DnsIifvvmTdbO99pn7pA7Vy5eohj0vqTo4S/HV085afm+maoceWCQq88e7a/cXaqOPtS7 + 4Z+PfG5lg8nhyGxyoFVDQWMs2RUXxpw+ij6kqSePA2vhe6GdUdXEkSaNc5orwouKVmjMa0CYZ1PE7uEX + hbgrKgpOkw4GpBOCNHnRqiPN2gZUOIU6FhqJZRIjyQUd/4a4eAb8EheHGiGMK22IiCo/e/F6Y2lZUoUy + gML/2YL0zA4LX6oKYjcTGeY0NW/Joa2iZxhhOuOFwz7lzlOWmHs36WabBcKsgclXU/KQxhNaSpQd9wFa + Pee7eX/h1uOHO6+ePYacbO13vQmvYWrmhZbzOe4akgVKtfZEHtnaXPn5T796/eoJWPjJu2e/+zu/hMWl + f6PLbXxqktI+8bet4S/yy8p2JsSC3xxbNE2Gn5zNlBdz296vct/eZ5nqGH1iyp5bUqgGCWNBecQ9CmyI + bjMRHUYs1WAlZVD122wBkLfTtLEkfn8yaClNZFqM1XQxnEtU5vjSE/BGSXOgYGIhp/q9e3f+/l/+6T/+ + R3+JGjkjP0msJ4JqziuEWrT5CwXbJaORFP7PMpW+AGHNCON+SkarUsa50IC6CQSOcfOQ/+lPKkZmaqgl + q8Dh4A2SYb3d8ZURKDwJ1JEOOhDKgE3j5n02k0/ZPX0hU0NTnNKDn7QnI3m5AY2t0aKBYq0mHmcNdi7u + 6pWrR+IQx31IbhQ6lHn9eaySlIVyAvvxDuqIrZxWDZkQGEvjEC7zHwWz9cK8U04w4jYCuLl2ObwW7ytf + kfORY7h8jm+o4/1B8D/vOIfHCsbrZDFLHc3xGs4kP5vqmZcB1xCROZXvFcFB7pw0qYOfKM9WIfRcVp31 + YPze7pYqiK18aFseIJMZ2ZhhWn23RrSI2MdUlGlqrWrYSiOtWCgdeeBfuUOdvQfaHB6x/+rC4s7aBlXI + Vim01YpzLx2QCwQOyWLOo8ju6QaE1kymByfrZuHZekbYWymarcmk4773TkRbRVCjXgiMIlmBwEiM1Gvo + 8wuDL3Ucih47EsGvPn3z65//BF8x9RuIX5WyhpiDW+SIal1Qe77rVgyolD7GqKMbz588/Ms//+3bN89A + Ssy4UXuury8FCiaP2tLBSP4cvWoamhltvSOztGogIOO00MiE82rqYjz5cwloIh93lDSrd9CszvxZhEH2 + Obexyen4M6nmHpQL6stNRrQIZKJyLEXVwC4MYZYnhV6lFvM/e9ME6dR5tbyQ+fWWs2qCoDOll7jMOeUm + QEgQDEvETtyqMHwKqXMj+6ocadIw7c4ci7V65aYIju1NqnFeQ5fsKvffLmGxe9kj0ZsleJBnUZQhStbw + uGlSGA6kQ2knF6iI/n1xMyykoZ5EsIlFT+Ayg4nZmWilP8E4CxeaOkCSWgCQdGLQce8JIspSsaZdR1Oz + xqNqhAk1lJF21jdJ8Q8BHwjn+zfv4KrRlDnTbdng4tmLc2de8BS+vI+IUvoQjdFtR6Fv6qNAbOckPceW + c+fsnlnvOXv1p8Pz3eMfFYkWfSzum9oVQ7wEtnZ2pTQnvDEpnG8uw1ED4Zcv2FzNMUCb8KL5z1RCz2FB + Jatx2tOU2VFmOFgyquuQi9kL+1HVn3A4ShCbCq4PF61lkpIdphl3JIIL9+8wiZfVQYuOkA/Mm3Q024No + /EzvHgliM52papp0DwkRBITYRECf/5QBzaS5otSc0o90WJotO/Qbzmk762sqZaVSRthAW/cqJaA2lam6 + qDQgdKVMm9OUgAeQwBySyUlOIkxtKBigqI2zh88reQFdDmA9g9zZXH31/DGVP0BXe0sCs1cimyOanqst + qxw0M7yWLCbGh0dag8MYR5UNEtk7ka0miYJ8XMvL91F+Qs9KIwPM42LKe29ZYHz4XSMzQ1xPohkpfmWl + xtfaTWTcQWa4DRx7iEIz3mrVQRdtcbJ5vTDhcHQKHFrpdXXIU5vNULw/fbqPCrQAYVwavbjgyR8bMF8a + HJ1XGhzaeWcD1kKKKva1PjwkdSbg79GwcUi/+fVPX79+1rBwQEFWIabNf/XFO4AQnKYZFwSprGli3rw7 + fVHs0OgN9SEcdRTkE7FVnYzQ2VGlifyTKunq2hLeKjaVHhSMP5EaRl5oshpDR88UTVZzvB/vf7fqUceA + maWfVZXSAGHTBBMc5NxfwAZvWOnyeK/5R7GVAp+5IJd0aOb5k80yM2MnBItuINATxLlvLwHV+ITxAxe0 + oyS+euEyrSzRSOh74du5ZEoR93RtKaBvP1WQ1hOO7wMUZLqLgFBYKEyMfwVHmkypkr346YGhfUYRIRK6 + PtzbXrh7J3nRg/JCXZwEWLStz61hdDo0kkI5RYVGrk+faUwpehl1Gaq+wiqzvb62u72pANyXoZ4d1jWo + 6BfY4DyCQBrFWO9EnPZEsIwRaCMFaq3IHEY8NRxsSCW1qNoZlQxFhObqDAqStBmnd+v67sbG1tqKO6GY + 4kNd9roZ5BQ6tPfMNcFIA5tBUNPyyJYyCgWbc2lVnAqoDMzUtKBehcwdW65pyR8JXwE2k4AGm9oJUlU0 + Q+HSIFPoqzQxj0FvKqFRoC4JTHnvGsTBrEH7EDg2UaBCwdTFQA9iHcdmyS2TtrKNmlVGOBzH7RYr0YqF + PAW9ZXXQDgIgzodxuERn10cgLKcfUddNBFvWFNaLgrU0ONNQb8IZ3iAXF6c35CeVEc8Iu1g0S+m6avKC + qnRo1iBqbf4AzmburInUkEcczCrBkPo/+zu/YoKuh+BWzWs/kfyZ8/ONa/hfUJXfWV+/fumqgWpZpmbu + R9Qua5hsEfC0UHpPMO8Co32vXLu+ubO9uLzMu7Up8x0FbWDFzt7mV9+8I9I0ylRAqHyR31ZB5Hemj8oU + 3/+HtwpzbXYnY4KVkxfrLtnm7p3bGxsrfIXv/1LW8wd+HKcC9wE7P/IpHDwhD+frZEuyFGzkOJH1OK0A + CDIJ8Q7aIV+fay/tFDjyRbUBkMk5NEk0HauMokyI1caN+0zYqylgnE8FAucQEVnZHiGwp4BZDC+S0UTE + 08i6Lp+/BDxzfTMtEpwQo6JKe/5OlVoRs4U6nHzS2nub41q7niMdjKkUYR81dA13RBzm9FpMbZnfxQi6 + J1WZEQh7vsjjXLfwhCltaO32MWHc/hnCmcGSrZrOsE30UbSZFak8jP5CyzACHb2zwrSLvqCbywxcllBQ + Ko/aIR5w2Ow0I190YhA88w68SN3EBwZwWpfh9PHizOIJYlq0qCuj9CamVrPkl0MSmdiW7YlNBRpT47Oc + mcOSYp+MjOgTlBpkWqe8IDBkLyr7WVKLex1dsXeug22ui3H+0yZYuUxUKXURGelBgd/N0MhEB0v7IjoW + Jvh5y8Qgk9EevE/GYp3WOy/9VE8KOWcEt+JIi0BGHTsWZum0FCcxsqNzCtulI/YCBKPoUDkOjqRI2qoJ + Ai13tNZg04kOXMtEnlZRMAPWyQXbUsNOAumyr+uAe4y4ntz/lCF1LnjcQcYjCXoJuGtYnhF8X53qUtmg + U9G9vdStO7efPH++srEBFwa8NaXMee8DP2F+sFg0w5HKnjRZU2869FsBQv55yA8fNx/l7AYCQvqsJsv0 + 3F3xAQGZJMh8PsfEgNyM94PIi4ZdAv33fe5H2d6+P7o5Z3w+Wa85KzMOYAwK7o5zP6uPchjDTjzhqx+R + A53D4eg1o+2KKHmQyUxSwxEIg9/IPcSp7yd5XgblSjh9+fzF6xevEonqsoEGMXa0a2oCDqtS1OPTKCLO + zQgzsA0n7uY4miXDqiAdmwhjxves3ahSQ2JqOK6MwXNJKqlhVAfnFH5ink516I42fGGhTCb7SloKh7n4 + OtppBnoR0XiLYazani/ayHU8sWlpbPLIaBXwVEmZkGGA/1X+nykrBYpssoTBhiqLVVnT88usNWauKWY1 + Oxa0gROb0aExKell5bIpP6s1aOdgi9KnmaLRcd3SXKV62pXSQc2IyJyPO9v46bx+wu9SQRwEohY3jH4x + 2YXS0sGwQZ/V8U5Lg2K2505ZajKZAofRKQ9I//i7z5mRwt6q8GqkHCb4lyyojCCsUjDTBRR2o6oRtmaJ + 9JpIWXUnSEFBfMvv3UJSF/YxeYk18AMgrXdiZh59t49J4Zuo0HorWGiLhFogcnFILBwwr+WBkzLhCIae + 8rl7Cdym6/6GH6WFLVmkNnmGMmFKRq002CcLsiqedllpA7zScVFaL0gWfYODfjgaWlIOMoN+r/X9OHh5 + 0A6JI1zq+d4g+l5H+AM3tnPrGKrRw18l36PSvgZCKgX2p/Ja9lenQ+sfZllQnS/+M6SAVSMze7+FdPY0 + oy6vWZVeh1R+Qio9Xh5xtXDlwfpQsScywHXYLkSb3Nv7JUoc6l1Mbf5n6khD80Yw6+q4ppfpNUKPiGu7 + fWdE05sxPYtr3K1KDPo6gmt1aCwv3XeJQSaO6UHaCoTTwo89XvQyHRFBTUDrm68+ffJoL4tJVUGT6y8v + Sh1r9OZ2HX/HQksEN9aWX+zvr68sVjFkrYdl9nP7jqWDXv8L7zG8QHGlQW/ZpKQ3GH9ngNqSLcEJmLey + dH9rfYUmceVYoY5pfRpssLay2PZsKEUvf6CjvxbeMUyu7/rS0e8mjycLe3qkEbwN9twmLbC28cBdDur5 + rgYWUvyzIx9stYMabbLbtNKmwuo+rgBkczAYZ0p406e465ICTkRPTQkViWDpnZcnkSeFnuEtLtz76su3 + T58+FK8+3FqJuo2enzrCq9u1dU1MRk/Xx8vEwbnD6E0yCpl0lh5Y0FglduBO19SEHZ3wopn8uTY8/BGL + NCYucNYBVfelrWt6mTSgqaqZQR1jWx6ja4I98lFgKCZhfFv9YilrwX0AokjR5jtqQMgrnD/Pl3Xj3Hk6 + KwImgzhVOnj6YqsaApMtO5xbAHO2zWjJWQRS5fQHIoeergX/o+zq4+6Edz2XjE2w+SgvdxC6+3nWJhvP + RAA8i+Dg9dNnj/cejJblDfRayFSPdhJYTaBxzA5TOHNibXX5t3/y86VFm1qZp7uzIjKXiSGFM3AY+d/d + 27coj3PNcHmjGue3rrQKhDNJYa/hN+Vbi3M7KLbxTL2VYtpHb3oEn83brLejN4vukrbi2OKyvHj/+eP9 + VNPwJ0Lpaovc+qBTPhp3gFJUiMmM+eJoiLi8eI+JiXR2CwhFpk1UM/yTdIf58vxOJ7Zq8az0hVQP30sy + QvLCo4Ewxha2VO8OZU668e42W86QWZK0MUgBjjGyLucbt9dXH+/u7m1tWpHyrkGOsFB1RDbgTekpSbdm + HknqtrGxtLu74UCYE5H8jqqAGhzfHEEzmWuGcNEFwUcRklfZhxac86zXEmgpTnua2OYrYSjamgWDTO79 + 8jI0b+XYMRG8DATyCDukqQb7sVlGdL4YqnUQdragTdz1crLhpdLBBEL8XGo5kHOD8ye0o6XPtcVwHfYS + F7P4rUKAOQ52giQyQkGdO4hGK33in9cdSuduiz6TofHihWns405cpNVQphqt2ePWk+GWjeJDqRPRSGYd + 1cW+X1F1SxAZAGiXfhMgzKxJJWr3RaajT4vmuy7Cw3vrq2BUb5fJkNudvoCa8Aqjl28jJoImJV09Gzmf + FRFhUC9eunrz7MXrAYHWWeFYOLd0x3HwGc1FQWz4+K4no94/ABh4n3inMV/uw2qHx3xFPndOgPdNKGH2 + sB8zrrxJNJVduVMfLq4/9IdzbnVl6fbtmx+2oxvXrv3062+ePtzPrDGDpiQNgj7o5cM87Y4gSH276KDg + C2JwB19QSQi7KiypUT9r7XJQXdAD2wvmSgPsGNBZ8EhTx1gpnG9pMUkKk89hn1SacfuTO0ZxX+t2o40d + tXWEtQagMlTzUkkuMZpTmDeWLVgPpYPUb9j21rXriBKEhSWi74PspY9XliANfRYRhXkyNAmpvfIMuZKm + N7enIDOa0lHN6ECI5mjBh+eldjRTwJCYtnqY4GFyywfFjm5trHz7xaefvX3V4MRkOKCU2ZsZzsmxU85t + g27Fnt4zts5hBrwJ6qoExrUwdG40GA5f7Cp+yWJhHPPM8Uc6GJbZE28BO/L8WFIpk42YqYtpE68CIGun + INuQKfItIMR99+o59lkkhdkDM2mWmDQONiui6iAT/IGfS9E7P00KqRHalMFzqLHWl5dhI4Rz2T5f5w76 + yRyTVbprRGkQEk3aNDISV9uF9mh/95e/+HZleUGlh7iCBGwORB5fzoybKBBYq/sTOnT8Z1kKTp26fpWA + w/q8CxAKAX1BcThUa3F39JgDhaK/BHMhjmmrt/23Bfc16Oe+yWdKze8iVUPequCzAyF1xDMXnjx59Od/ + /tt7i0umJvVJ9yYZ5Q7HN7scg6Wk/LP4YWDAV/cxwICP7BGtzW/esGh+GB7ks7zHkbnB0157jlaEHFty + GrC4ze2DFONXj8HjHZO5Xjhz/ur5K3QmeEp03LkTR0YJ7HxzYxXm+ZhkaUugI3s2sIEZDIs15db6CZFV + R8Guu5ojkGknaD1Zp81AvqtaAOitFLMXiZ3rp0/p4lRoWSvtY7A5tBiOvM2QFOpPQBQxE8lRBrxNLxAe + 3DV2bosL57Cld2rAanUXEVBDGSabK3iV63TLNjlfLGTqux97wiQlFeBVuQT/RF6I6BShObsKgvQa/Yth + vTZtty+WpNnZZuv4LYDw2t3bIJCZoWSfXFNIxrD7To3WqqFnV5nz6Q7g92R/96vP3m5vWWOGYVJmXeME + 4KwI9j3Yxh1la5JXoTdFpIGmXd0a1T5tnIRnsqaIg0oRNBE9/ULllxY3jRK0g9fHIplMKQ3WpsxsnJeJ + q7ogNBUEf2382OzzxN+ccMNHDJZOwd4y6AazahYMGlwBECuknWC03Dg1mu2nI/7ZSciZwOCSVC9zBxRk + s1ILNEfcelrWXtg2aykEMnKc6e67XjvQ0HjCzV99/x3d95yByYJmcJkoaC+FM8WMuZrXAiMpnBQF85+K + epXqNV603k/leZYMc3npCNgAMhYlnm9DZK9edR5O69jAFCaDVda6EEDE2niKUYXBkboHNx0UNnQ3MFJV + wNMA5PnHjx988skrrn8f59vaCg0O5/3MYsMPxKrZp3OMLDjMMpmF2/d9LT4+EvO5iN6mFdnw2/u3784l + PGkGn/Uc194MKg72lpt7nJSurp2/CoIeAocf/JYD7toLz/wzxaL90BztzBGiIWWcZw07+3/HemEQpAo8 + 9SedFSkfzUuipoaTgoGyQMWYNdKsBGnlZyaqtp4RnifJw3HNfHNYL7SIZKTcFAQDQVqWErlVDeA3Ua7X + xYuGkvZPn2KfKHjpgqd3MV5HupgkRfkTSKYHIYQxMIlcsKWD9Z8lI7Tq1MR9zdoHVdnSnVEGWQxo+jhZ + AQmDIBjYSzY2D1dueEfEbZtMNAHCcfavVQ0X7xuBim7F8bL1b/AS4dtS5Sq63wWlpREioTReUT0e8XIB + eHmoVRCkJzrq6zZ8CL12WB63jyUKgaELTS2SHNRkMSP+k98UaGGn2VXL3YPELkmheSwY5pmDmn5XIBxG + LKlM2FyKxuqgdw2y0HMi9a7BxkxM6FD7p05UN87NE7s0y2aaqAFM/cbFAmTSXwjTe1DvYFxf84y2O2HT + sTCv3Lij6z+rhk0dY5iXxcLWJpjaUXtAMfck8u4P4ml1xX56CulAGMvNTJGwhfeRA0TcD03aRhVGNyHQ + aO5rTSxziln2pIkurbAZv4xe8oxQHfcf9sO++NznYs9BO5ys2h/2uh/8LP965pc2xXTXPRMrsdB+AFzx + lMvnLt2+dPOiWRsc+MM5gdtgGohPtsvXnXsAhzyoP9m37HvU+QMdcfU8gx7UNV9FpPGFJBJWcl8Pcvob + c8jopUZuVCzM7TNalF7U6NAOfpEXJgrqUlSlfRYOJyX9BEJyNRI1e9I5Y1wJr1lTcgxb82CsC4e6j6uI + ZhhSqEJOdjH3cg6zwpvMfQjtL9tUNLjKmwCXOZT2qRTKO5m+RPmt4aIbUY5eM2JTp83aQkH73bopYmCe + xqYPAFBcuSMjdBdpeMjbiGVAjq++evujbz8DwJJKrcJLpU2zwFMRCLaTouT+xvaDtU03JOvSTfYvX7SO + fJaZGQqitdnd2shGCOGiSnpF9tl7IewVm5N4zRHrkSj3tWMeRnNommBgeSsN2iP6cMZ0cLB4bXJc67jn + wJKaLvrekgX2WbvZIzGMlajmtOnDoAdrFFUFybNWMnb62a0rRe2kDWlojhvrStGJ3faYFHpe6PV45mOg + 0h9I0ebxWwPNevXNi1ZrUdCu4hEFh7C46EUT8NSPrLh5IplJl+1cgiKCrwkfixX5CYjOcZYVcioejIww + l7woGaKCISk859ZrZIreO2jNgprK5OmjANKMSQ9VjR4OOVYBUkv/oT+xwckTLHqsDB9xHv0HI+Jxnqjs + 5zhbzm5jOhKUSzYBC6bi0ly0s9FXt2+mWehRL6Qcbs5WFTIbCkbqFn86eQJvnUvnLpKnIksKzqGKSEuq + p7OyMvge6OkSiN0WIOw60hYhnqSwir5GJ0a7tLrjqHJDSoYEx1T7RJ+KrrHfB8tHVfzPikjXCxSCqMGe + KKPp8EIWlwKKMYxi1uYxi4XtjmqHCvB96AT8VgT+vb/CH4m5S61eGC2G6S9TOLc5Tmzi65QXjmWtKRD2 + 6pcv+qDFq1dPNFeI+xo9X2uKPXlyRUkKTwJmqvay5YXKCJfoeSqMJU9cXrr3l3/vt7/9k5+pPZ8REyld + AQhRlkpN43VBMzlD5PnlZ2+ePNwzYM4XKhjWIdlBUYfEizJ5sbbDqxewdVXG7MYGk0ZsRsRgzKdl5ErN + u/iIj9RVo/qQNzdWmPJI6jxGJB6gNNeYqpERB565YIin5giJ7QxRRjghG+I08w7CuM0RyAzugOUcrhPH + rCLoWeBgseSmo71HgvtWCwjJzBk3k4AF5fqyC8310gYtM7fs+p1cuRHIJv0zZoRtPehLRCwLETqX5aQS + TrHU9LUmAveWLEVwrny3JIRZI4zFcF5W4L6jZy6cZmYTriOWD5g3W3pwY7p24qSrRg0I1WLo7fYf9qMV + 8/DnckqgI6KIamucT9P4gBzrww7vj+FZEDLPnuzPKmK8L+W6OYK+51Ee/ullYgcsccXwW/jpSeL8AqEV + /4ygvszsWM73nhoOaBiiLwUH+aMMb3J5cAVCAGV1cEZNKid7K7VqXMnkaswccTYvrBd/pYNKN31CoDUX + l9jZIutSQazCmeijr6G6xA6IGuzWOVJb4ODoyOouxbSKdOu2P02stpQO5lKbC2uTkk6NSRMIY1RhI/FY + voseMo1RfK6v04D8lTYJuhcAISV8NVsKpJk0mPe62rTMpvRxUsnTTtgz+e4/+Ks/+9lPvjK4Iuebsb1O + IGR72jZ+8fOv/+W/+Cd/8oufgKxzjmqeAsg3MwqXnStrzKTQ35ryYBeCDqRopIPAJ/rVtbXFiSjG98ZY + VgNCGFFKg3JmmV8R9FxQPYJ84w8ebIHofNRSRfFNybRsNKQdZ82X0fMZSA09PG2+RJHJWCKYJcPCiPaT + uZ726SPT3LfP+qimm25Snx30JnTQJE4POmG5zq8uLSIim1x6EaCWKUvAKO+QS0HhbMa1fvknEZqLQV0Z + EginorxZIMwFZ3Jn0jBWwv22nvkTlD7OW0RZ064u3LvfGrvZhnph9dd2lzXDP7Gm3mtYf4xl9qaxyd55 + xPRHp5gLeNzVm6fw8aMvxVHvg7Or90SKP67N+TDBwtm0D3Pin3779d27dz7W4U6+LyFWQ8AU0ijm6kKs + rD9zupsBYKMv7Kkt/9OektyPKM/TRNNkXrZvNiPELBJ0/Iu8MAAvMkL/j3E4hR2d1POzzp9zJ5QUWkQ8 + z1ZDjYZuwN3hUElk3oxx6kxpdNzP9bVK7UylRgn2Wf5cHD9VkMqGbRYL04k7FtZoxJ4z2UeQWWg9K2ih + dxCEcOvGmDEzCCC01vtKnyaXOFtTnDwyW3KLZLElhVJ7RmbZ0jVgRscjuK3saxYd1Qso9SnN73/x579+ + /uxhbtxS0hgWqH/mC9WjEnGqAwhC2LE/+c92DIbQuvEh08z+P/0P/81Pvvvc3dXdMsaZZ3168U//qFUp + DLJ6TASrkRB4+flnr16+fMT2YgLwWnvx7BEubh4PiRW4YPfHfgk/c8JBO9nRycnmki4JZDAgi6FLBQtz + xErUAlsf/dRWTZcGzlYvnj2+eeN61ciYyuzyJY6Z3wo6hYgZgFZE9KvS6g5atzeXVgmuPIWpRUFvnHAF + ol/mqYipFKgtH6mSq9TohCYVnE0gLR9s2WFP/oRLBRfngxEbcPzV8MTnLiGNqVjYSoNZQczlmLcCZ8W3 + MneBRnl77vS54wPhx1rl/wD7+QO/Kdz5tjc3atNI/cqPSrP75zGeQHFO1Kfn/XZu1bwwZTWtrOgb1TJh + oUMLy9/iQRMPu7C2BYwRNvqkT4WRIlWGH12BPG4J1s3ryY7mldmSQrO9kPhbHcETOkgygeosgxMxGgET + 0xQsLGqamhRGc6EaCrOtcNJZkWuZLWQuc2DdZBQOC7etcVoHfcicJho2SX1vtw+phXNrc2+VONX83tB3 + XLu8ubny/S++e/H80dbmKgiUQFj6DufkRpE/leIiZtPMiGBYYEPNYczhRIljDRuMyfUefAMhY1NNq9LL + dV5ipIN+EQJ2HslZs0lrRlyI3g+h5gB1pf+hAd78d2QuPJ4aJi2sTyM65VtpEGDDQOCv/u5v93Y2rCsm + RDGXzWorbjl0N4jo0MWkj7YLnawKTPuM53/SAKdlmtSeJgm+c9Mp0AiJyDVtYL1XnWdvk9JgV4q6drOI + mRt732h85YUR//Ux9IOtREaKSNBJVQ3EYmbZWRhRqvtoZ/ALzAtN42Pscmt8jHK+hEn2w/vimsNRjreo + 6Davce5wRMiGGBmvXnrHQqFgEp0nSMW21te319ep69cwumR+NKmbvFzEVS6ADRcTIHNZ0yOxguUieNBq + mQjZUHOSFDZEJC+kj1A0admpveHmYTMFIIH3HwCW3vcl+AIITz446Yz86W/urXG6M1Sl9nXUkIeTdCY7 + r19ZhksZK5WTajhN+vlW0sKUL0f5ehSO1lzQcc7nitnp69sVzVhcCVyDXN30O1RSNOlQs5txKwpFpgfp + ZWpIa6tADJQZsLBQQyYcB88YW7qysljkA0LEKjTo606BwOjiKnA4zMeJYqGRpZb2MdSGxXGSKbaqYcdC + rbC13X4Ewmm/mnKUaJ+4brkLvfBGyu1tMTXJMSAwsg6VzcwsAKYRhvn4zZtX3r55+he/+w3QxWLdxai3 + gnGdpIYg7v7DbdwAMhecZGnsAZj8za9/8ubNU8vDZvLCCoRzUz3boR8nLgGicxv12lsg8kW1AduzlBu3 + 2d1h5B0awplsnxfV6RRopIPsHK+fwfEuMsJAx3SNUSGQ3pJPP3klp1l9fTmuUpmi4x8dES0XNEXoBVAQ + EHJzmcG0di4vyoOgaXN7iJYJnaghEx3k0GkxX+eRDVioMFHGFBk4gojmp3/BZq2wZ8e5sJUhO+RkDiws + 5QlFrIpEQxrjl6qu08RCXscP8FxTz3QgzNWDKx0gxFjTK3zxM1KjpghVJF3QcbJGzfKSB3GhBz7edmHt + hD6SF7HMAXlhTuybRSCOkY8k1+X3hagjt58kv0duP3cDog8itPT55Htcc1mYWDsW0j9yhQ6L+Pb2+sL9 + u7Ofs3VzXpp2c46JYOcNRBqMsZViqCkjWrecnIWzEmedqfrNoS4vLRAzZnEgo0WlhnzUqHJ6jbDM74Vx + IX8qnEy35K78THKkqRetSWFYbzeatCSLtqBk7CwGdVSch4i0qdV7z9ZQvCkqBq1iQZOalLSbd3OftUzm + IE0xGESZtBU+spy5TtZ8lgUnlZ1mb0LBAMKAw6s3XDuTiv/aX5GQaXCCRoZJe45JadJd0QtApWbWCcas + scXQ9vBkCZby7g0ySNzUqOzPsqlKy6wf8dGu2eLcuYFAZm15EXlLbqwqY9QmrQfffEonu6JFUlM1kmUt + GaE3hCCFvXsTPQtHoopgymWzL1DDjbNkKCyspVZ9YvsPdt69eU6bYM8Lx/FYhp1hpW2wh06HT8CBqhtq + 8xVztPsPtvET9upgH+askEiPpEamcqFVOKPkj3MGPyOAcygQttRwtNKeuIkOzRI6+Y+8TbgWC7tv27zr + iYpbeWH7HeV/nsv1vrOzwbsoutCIeusjWiKST1IcfADC2cNsCvS7UKDnkTN54VQaU4o787HiKKjSSHoN + XeJOIqI31CO0ndtmzodCkx/H+mH4dOSzEC+tLC+xemnLg0CRw8BR5Ma16wftkA1AQc9l7QfN3LdffL62 + smwfN6ZzAOHxhtpzWsEi0NVw5JHPbsAx3Lx54/BB82aL1N5s3QPnxLOn+0+ePJhNav0tVHJg0mQ67Tmd + YOHsBzuempYFTxoqJvFZKxDGKc61Z9ajmrfSf7rRmuGiMsfmMlOuLksjxZrmgzPSNV3YYX7Bd4HmraFd + Dt3ud1QadHQc7GYaO5om/dl0P2tnPPh6zNX1tbi+B/useowC4MJJiaATpGqo6IngbOFQj0ywcAS5khqG + 72hvfcstlReqFyLbDZXwJXIol3LZyGV7sBXYKnhkibHd6R0OE0GKoFSQph3u723/8rtvP3nxnFW9Vg0j + jfOcb3tjFYs4JY7RBRH9kYltdgeWVaCYNxpCmPTLrkYIBOqiFzAqfx4rtIzw2p1bTO0wK/P8oMinkcaw + n2Shs2s+K4X8Keyzr6op/nyWCZPxBtG/ePcaNz5PCmeNY1JaHAGTxFZ5OvESd28bmyoq3tJQThfzeRia + fEroNmkEmkJgQ8FuPSHi5CBc1IVWK/G6EtsFmCWMKAcq/+Ov9+7ephlDU04Fb+3HrnRWb6neGgTGQuHr + TJJMI8ixgCUAABxFSURBVCL6v2xMzSVaoExkUCt/BQtrTH8EEzmLfwcgIvsBbkA0ftvY3gKHl4zPnfs0 + PjWC4NnV+SCcsLYPC5yPCyTkOpDxov6EWKxps++YJY6ricjwSHySxgOwYQEth31cOhcYe/po/86tW0e+ + 0OwGYC2dA5ydBz2XdXp3Z4tYbHYDZVqT52YSNm/7iBvqn2o5MB/P3LHemdzXKTsvdovCgB9JC/iaZ26S + oq1CEEFirRfqyhkRMVSjugKzMlGD1rySWRRuuZlfPtJgL652/bPdsmRorJHpYqZzagZJnjcsT8ozhpGT + MmFVzbT759Vur1yQZZFcgZU3/9n4tOwy7GN6yA6vWwO+mboBEkR3WpQ7EJb7lvoExdc2GP4aApAGewUC + hzxpQBd1Eegp+IpZc31LEPWgyoEp1wzkU8XRUVCP2AZ3bjx9tPd3//Zv3rx4ikBmBMKoKQIeMkoVVvlr + 9bQ172e+2IGwiYBilERIZFsBtWTPSpoFhLzO6v3FZRxOiZr7R9d1MZMOltrTObHKExBm14TiGxJi/6Jb + OqhcMIqCw5xLywIbCsaeGc903adDR+bnARnzmJxrTUnzBAhrdbD0zts5z4oha8AZ5BtcmRL86p3Gdsr7 + KX8GE6gMVf36zeBVWNiDYI4AP0KW6FIl8b82tcHswiLIZDcaS+erjyirjnxjXtTRiXsoY5eXF5XbzBYI + 5yHiZAUlX7LyHz9UdCl3YJXWcsR5izfHxXfOdKHjDFVgFZfWVFz5AWjcX4Z9YucAXAkFreXu1GlihIP6 + MY4DZewKffRhnXla8g/+4W+cGccHfu2JTwkLjiMNSHnLXAkHddBPDkpwXuW7Bx25zh2dNy3/q//qmJjZ + Yckas/g8Bwi5CJeXF0CihoGDPKyd37Jem6BgXCe63rzgkJ25ygXjkjM9WilRZO9E1ggVH8wGuRURZ2dT + 8CROcLdV62PbiiqhNxSm9UwzXcv+wu4AORCkTQoBpIkKA9UcCBHQRjpYVPV9ur28uNgSWy/Vq2SclkDY + spOxsz69SYvcw9sNpS9N1WgkUoUqrKlh7zFPzADVmNkEDVifIjCrWs1GqAJ++pM6NGyAMNMzYC/XVhZA + 0wQwQVruITG1ZXWd4Yyn3Aj9i54oPLND0ltrihieHhqiNkq+dUcUCwI3Dr2HrwBrlhVZhX99rGDxixnY + aeloGhBG1MKXxSuiiEmxqEqDXh28KPArntpJFehOZ9TZZun+/ft3Gc4uXWj6qNnJyWr55PEetW0TakZH + rPxFh1srh+esJbsiUDUiDePESzfR1jUxTfsyF8zrS128HI8i0RaVEpsmNRrXaWF9+l2PbkM9x32D00IO + NQ6pdtDXNDHC7lysShSeq9C0mpMrGjtivgdEt4DjsMX8KMzgU/32m89//cuf3rqJep8E8YAxf3w+Tx4+ + fPn06ZHUKAznz3/6zf7DHQ5LH8jhh8hfUaFvra1trePQf/XIjY+5Aa/LCXIIYAC9sCbH12Qe83VZS7Y3 + NshAjrN94tbcjTkTOav0Dc6a3czFN941PqhGTPBlmqwk3FYLQNrpJYddsaAFCAe96CQvBILu3r0tMPaf + UMfEP06ddBQxRrqwIm0up8vMuLwJTfhdhTN+7VlKNzcpnFsgFBBWBc0EGo0UKqMKSxOFLShyYqt+bK2z + fra5sKtJSQ2Fcyx8ky5D0244zTVKZqSU6ZL6NJ8UHaq1FWzQdAInSMNoRvpGx0Kt7D0FrE3f+lOR1TRK + MJK8yBElpxwFli19bGKTRMTcLJK27uGSFGugLETlg71N1SOtEHj7hgOVErKed6YdmuWO+LF5ijmmer7D + ciTayQCE3SAmGODaF6gS6UzRNGqE+hh9rERpU7GPeuoaI/CjQKjGFTXG5JfFg7wXfrfIxtskphXBGUbU + uybqCUNJ0a3VhpknOgM5kfZ2N9DyVIK02kFUhl9neMqnebr1ybuMZXLz68vEaBrDVKoPppYxno+GNnfA + 163EqZ0XzWu28To13lUfIYhrBlJuHtMWiSags6e3vLD/raSJHDcrjDLCDOXzbq51dT3X2uVL3Uf4Yc9k + li+fP+E7dn3oAbvlzaFAuXPr9pHAhgPkZ5++QqR7/KPj4wNfOfUm6SafLOvmka94/BfKLdknPBsl8IOe + yxKOOyjFqffdOR/okeGJ9skxcOYeVLBkP1BIdFbUb3oW15X++Yni++TV3c0dVpnVT4lpObHsvuXK1685 + pLU/acCztQ0Ncy+V3pUTNzWl07YKtmJ6BrdWM5hcJxYPcUmzAnBI2YfExhzJ9uY6MWnNBSdBa1zkkQv2 + CPdQHU3abeTwwrkWMxFra4mZ6bIPslQKUlbAxXt3OWmcMo3VzdCR1XMUyte1svRUtLaKobPC2NRk3khT + NAYvh+FpfW986dBxWPAy4aHlhYU8bORnwGQDDGVaEweyloE58CS96WKW6Q0qFYagYl7VsDi29f5Cck0m + WmBMqgQxM8sbZbdd9tLQNFtEclhxhfMJ8pVPSTqjFMuYmpRkS5MldGtymI6FzS/GskO2h79lJ7Wmq+qg + Ipiuh2qUwMCIhvdQTwRbv2BO3E1o1AlmvCiW19k7WJt8ajpYwzv5riUQzq0FtmDRBKI81/XNAXhNC9o7 + eisKFo50YitjF/JYGrQVgkeAUvJRiUK99n8Ghk8qULu0+V9bScqKEusJG9Ai+2BzG3KyxeWx7k6Ufbka + d8YLHvMS1wueAEdnXO+7mP/g7T8GSPNWN5iL9uhBymd+8GG9xw7cKfvKRZyy5+WMfLukR9S332OP46Z+ + utgpclDOyua8cZBSG+hcOU5lVK9j3PKZs6zPaNom9UJ2qPxSGSEnEMOV7t+9h6QAOgo6RIFYcho6s2ei + vI6RyvsBM0UtjR2FJLGGXPEks9VB8TAQV0w3lPHNqJSJJl+uWLGRdqk3wXeyOoUIsjYpZ06zZBiqmbFq + mA31vT2Z/bP2sQIWarT1NZfJqGymaauTjND/2a3XUl4/Gk5aanjlSugJ23paXZsvYt4dyzRSUk9K0CtC + +7Aiwzdy01o/sSetlqQVS8ZxhgYGPEJOY7JS78DLRKrNuEhQDFjNpLBTlBM47NXHngUWkjYeJAsECHnd + Jq7xjLCpe8Y+kOwJiTRR4Br7bPCWHSOzqqIaQNhmHkbA2jJecW0J4+keSTg12kQxfXKWFf/UdN86XoZ+ + UIU4Kgnn76FTsEqLx1NFotA8eQSBapMQ2eCnVnD4wj+dzNI8g5QK19wp4pyGX0oaZtscQxoTQ5fOMKHQ + rhN+k7RwDBOFmgqAwYtG728Hv46CrTSoS9s8pK5c5ki0UPAKS3cXSP61ICRvpMVk/DE4ZO24cxM3VLNP + q5G3VrN5CUDXDMIjQn/rZSbM2c72xrdff85fP3ihPtYT7YX9Yzhka3vnuIB/0A+KRFbJHzKVicZjElkO + sb4+B3zGPHEO+/Hqrplxzt0Iiu/Xv/rJ3t7W5K86jz/ovU6fxId2BkP09sOpiQENXO7BO59zqJSuoD3q + UwR+7q4UqTbX4oO9nZXFRa5TbuNpaqfgCIFxWus/eY6Xcz2AkCvt5pXrsEdFVzaHaXGglHa0A2GSn5X/ + zPJ+lbrlllzZLCMJhM4apXami0XTv9+D6+i1Z53d2V6nV0yrz1g+ND8qHtFip4WsLmcpn0kpaUrnM29o + Upo+l6ekjDG+IOFNd0BKjorJXCReS0v38Q6liTBQMDi9YYQhK37VRgohDAai3TDSI9Dowe6mwFW6EjUz + lHlPQ3tiE5oKIzvXalKUuzdpmVBrfyKlF9JsVGHU9pr5mYlc1PA+Fv8y5zPruJuhd9UL2aTilcX1FcbP + W2Wu62PHbK9mzIlzkR02ILx/9/bOxjpyxzEd7KXBKoQJmjo6W5LfzkQwgXBSF8zwaGALCuzVenOYNhgK + ct5eRHJ8DSdXM0VD2HP1qjQyrCRYwPDtW75YqH5VwZMIzVN9hhEdR+9GQcFrCh5QgsJ0waqc4VgYBcIJ + NZopYKt6pFLUFn9f/0MukBv4mn+SC4WrsELgBAAVcOu38K6tJyGWmYuC2kmuafWfAsIk5Lj/4x999df/ + 4O9RAf0oa/KBOzFEOT1nWm99Ah+6iz8/JEnk/ZIxUHQ8ztuwMMTXSG3MsbEsbq6urS4uT4CQLYlmjrPP + g7ZhaeO6mmAeVCvQSJD1Q/acz4WV5YSffG6TyOhwlVSyCpPziRNXnRuKYDx8s6vOvHfPninx2BzJTI3v + BIQ1BWy5oLiR01cukMdZqld/SoFw0J5NwtLZf3YitOSFg3ameyqqoXjacc/6SAGG726ivmPts/bnK2SE + fcBbhUPWqcePd2H7azg/mxdKFpGlo0wUUl6fbdcVCMW5BRCWpDCX9dXVBV6dvvXWZTGbFBZH6bFalmbT + ShChBxG2kBcKP2QKk0hz44Z72TSkyWqfEZgzJCoZKl6jrpysAHmF6w2AbAgX4JcM6gwQBn5LiuKmLYHK + i/fv7hIILBn72lHQ30XCZxZQa6pX4XD+Bt04prcGVruDxoIWD4RinJYK4TpxXt+793LgwzJwBmMKKBO1 + uHHWff7pm5fPHpsHjcfQPvnSPLEFda9ePvnss9csKfILrHAYp3dLGUE1WTslHGYQmZeSt9gH0VKvr5YC + RnWwlQm7kG32ErYU8Oz5Gxev8Vuxcr0ZU3rxIvn2LB2am1VRDKsQx337Jov9DckaJvKF2RU11p0DJB6t + fIguAXq29+PN7mc21/zw1Vs530FQpzz4g/eudfaQpyPA43oB8/iGTYepqpjziia94ss/hlrngw+vPpHr + h2ayw/Pjj/JCB+1kBiaHz62w7akOtdNXe+Pg8VE0bU78VMnWXF70JOnvtWtYp06k0vPQER8mGdA0jWiJ + OpOHGSSjh+DikAXaqpF0aGmiUh+FNxQGoXT2LKJBMKCaVFX1weDl4SF5MqWspza99s4NPZJJYaaGFfNy + HUyH7qqq0IrZmiuip2JWwTihQL1eVcWNkzH32XExDDKMvLAMXlD1sWpwrFznNKmaJXrm53hTRTQdU6/j + 5nzdjHuW7yfgJTgJ6jLFbMVFe5VWEYyhiYbN3hPSeNrgZsXZ8qDvp7cAJqoJC5X2TW6TpsDMFzvnPDhr + D3Y/WQVs3ni9AbRIf6f98v7VG5fCs169ePKzH3/NdcTJU+Mk/qoyc3FvsMuB0s/f+tXPnuzvzRQFY7Im + ZCNfiodu06iusaYe8J09y1dHfz/rT6+vO+hVXJx/TWXnUtChk+4Ig8NJUqiL9/L5i9cvXgWdbZktY+iV + lpHF37hqPhsTSqkmhTVAZ3lAbE872VyBxSQL5InEHE+f7uOn+je43g7rMBDIpD1ulf8UXAvnDxKD8HgW + wA5a2Y0e9MEZB25w6uTW1vqb18+tg/7UaUIxIqT++f4AAP6BiKVsyWvU53yA1mHv4r1ea25UUd/oQffb + q3RBFCcfPgNqieGL0inY+IoIyuqJm6GfpdSnT8G8UyjN8vgQFXZfCTsT2DmhLqvAeFF1OlTkjP/4ndLb + KxHNKKUJyagnslZiqQzqsEAMnYVpUjq4NQqhqzavW1uN9v8tkJ9So+qJ7oWiej/FFJcv0mzAOhXamRjt + OwBhFKUsKWxzKnzVhn60BnCvDk5uDmxJG3Y4bOKaRpAOipupwaZwZWdrnWbzmnvR5+cKz45GDk4mEFVm + yZ2GjpU49fS09f4nEFonlStWAlydtk1Iy4Jll8hG5lfkoM0aeywNBhyWYCKGSAj8EgsbRtog5ZyvVNok + XLLUpimlLsYa+0IgE6rg2Yw/fdSIyN+9fUGW3MlzwM+59Lk3ckpTkPpfyxnYBVxZIxxzwamVBNcu+1lc + uA9g57UA65qXxpF0S2kgVC9TNjgNDfVCxCR+uIvRDEpLAuK2OESqxp+K7eJkFbE1jP9zeIqk9VwrYbpm + gsi2tYrFYpVAaK/u1jOECMhHtrfWj1wP32t1/fCNEeszeNbct5PoPXnSRlxdpjPxkD68YOcOTxZBQaNV + D04IebqKvXoDhEW3btAR8eEJ6Id/EDPPJExT5Ztz9Jg60vd69QPOgP6w7vHSiH3T1kAqGD4x7tjJ9ODB + ztYmp/Lq6pI+RpESLS1MyUwCZOdAJEVrtH7Vl+pSydTQLy2vJvjttHF0t1C0NpdRlwMIBQPwhImtajii + YOjcah1xFghbgXCiHa2T2zTRsIxqGru1cmGq+Jf9hUoKJ/LRyAXLqKaSKV5kTi/kKqtq09xPnUgD5Czz + E+bZbz6rp0/2mNhARjXXki3TOy36hRisaWLIUG2D1KD2fnwT5tCFBm9cpDdXoGRpcwS6KvDAXkJacjB6 + uZKxSX3TELG1NKTclA6ThTtE/G7/5lOlMsXMzLW8kO9cO8kh8kXzWREuAS9jBSKJxMWD6oKNC+3DdVvr + Z0pDmwdCqHxj3mTtk7EAyM327kDqYbFUtDBNKaqTZLArSlCsnn/eL2jQxY+CM93mYaG6JvpfLd1ozqK+ + PXNPLfASLmaOOBcO47rryNcvwxn+JlPDWATYYHV1ERssqiqJdSmsm8jrRjC0pY6sbm1thQ+wxd+2XrGq + kBli0qQm8rqWs16R9vBXLV96oRK7/40u+xyMdY6UEiCH4/q9wzQjs6nue2HA7MZ8LnCk1vF97aN1Iv7A + Q/oDP53zlxanbORPPOSCWVy8n92fik64dIU6iM22Ntd+8uOvYLoItXoy3X1K51QKZ9NEPVKZkEwQMwtU + rMg/QcGlpQUvUlpUuL+7+2hvjzCw5YVBzrREsItoJohYqoaDfUbo6LyPkkDk7q1bt2/CalYUdL60rTV1 + PSrQ2F2PC6PVo/uqmpmVkg5KQs8LlXxwhxxL89BdR0p1MPQytYmiZn7gE1658mVuUsa20EefeDCECWOB + DcV6ZkIhOiLmQIbo0BjyyBtXaXhgypIs2XqmKPArlcgiT43sbbbJLxoZoyN+0sihZ/WDCf7WMl2rWU7o + Tdb3laWFqqBRuMCwEcqWB+XNAYfF6DU/4dIsmIMkE/O6YSyble90MI4hqYMduW4KzCE2anSoeNHslIj7 + SbwL/9pJGKQoGtFWKTQpqcNeNAJNRDHGi0gGWjoIeYprSkXJzQ7d7SxLiz6rkC3C0MaIRrEwK/21ZMh9 + XoWXUA0rUbAtCLkmZMDc6yy+/2It6qsPD3huA4UWa1hiIUCICpQclDd10Or6w5MgQzRXzn+cBdw/oJBj + TPbY9bEfpKCZe3zEY198/vb162ekXwe9gZWVpZcvnmb6+HHe5x/NXhzewponD0q53WhPajIizr/8orkC + +fS46hIFJ7Fb/WdRh8bD7fLITDG4kSKcSZlZZIReuogUEIR+tLe7u7mpBFE3Xbr1fr2Y517bdRXIuTM8 + SNF++f4CPnkCwgylW8QdGoTSrdXHUzSJabeemRBctQ4U8lHvo0gpqQByAooIQcm0WLtTlNGKUhp9PqgZ + W1d+tyQVdmqK7Cy8QWYCVAXSDhx2WJ+bzeYzmDdHjDphJmeb2Wc3sAJhM0KTxLTC23C/859hsppprgBv + f3fnuy8+31pfGdtI6DC5w8SoWfZ4Un+NaMPdtHHD8XBkSAFL90v0C6bodza4se+3SGPEcJZcsJKiQ4Ew + TqQoRXc7+F7SduQj+nn0cBcCkBdKzr+e3mAQGRVMGM3ychYVOzJoYUCpclm1i0ujl+YIue3Ca10TjQuN + ELZSo40jjQi4rANo8k/Rfobcr6PfHIu17G/ubJPgJ6UuqcRsj1sPtK9dvXeiZpM/fDHmgC+do/Z57fzp + kNj80H1yuG7MWnSuDfbMRxTK832G+h55NKzm0C6H+5qCgj/98dcfsVx35FEdZwN322Im5HG2nbPNMSOX + ZDvbLvL1hhe2umY4/nV2FJZ7a3WNIlVBxJ4mViZkJEPmEKSzZEu7YiV77ijoj3u5sBtezJlfnwTpCIQ9 + OraFybu1AvlG05kkoBwmVSyc32gI+SOTNg/kh7xwgMMYZzjV0Nc1tDaoKR2h2PbyxROMBRwI3YM7Otus + akVs15ru0/HSwHIKhFcvIbwEZYEcOUpXgJmz/RwclZQmiojSv3jyd5mUmsTavcpitm2mcRU77X6t5NVh + UlER7O0ZjdIMz5cEvFmCt77TtZWl/d1tPjHVR5sKJocoTZPm/EiVLMYnefUSLfNgp7w9RwOE/s+J7nci + E40op1hpk/gS4vD56wwpApluY1sSwVlaPs5SO80cCFH/vXj6eG9niwwvZKIzFoNsTI8UJ3ktFiQWcl5D + Q3iFPtskBgcZSRny6pu9QusjLUdshcAmCHc2SCG3/Z+AE0Hp1fOXlVq1n2kvlj/eUVAQqAd5AeprdZSu + Hm/Buv1Xu/3AdfOAp4FNACFHDlU8f5O0D/2AFyZSuXGFduWLAewnThoKfuz3cOSB/T4+uCNf9PANWPh/ + 9M3nP/vpt7PwrBLjkZ9S3WCy8eT95j/b+deoBz9E/RUUYGVQIKbvh1P9webOb376s+2NNWPAxx+lfdVu + jSuKU8WDSrs2MmzM0HK80uxKgvGAmCXFySKi+BaWJ0l4jBEtkplGkEbY2wnSwVzKWF+LnVHS9Bb7wZWb + tYN1MJu0mmpmgEP377AYn6IFLa3aPm+DMrDUh7SwTlLDzA4x2WKcLzye5SKuyyc1+erzdw92t7JwxaoN + CPFPtvGhslYglJpD2FmBLdMgapB0LygjnL3VstnhuCjpSqUlad++jRCw1BcdaHmViovpDGeunp1NVevF + 7HT4Yns24T9LpXMqDc13ASwDzzqkLK9aPq3bVeaw32bgVOtoNFsZgWIIZMp4yGYWE82CNl+3t8G0mm74 + qndHhcqHc0rwlr/88u2Pf/wF4QjnUuSFVAdL2FR1WHTZZR1aRH2hJYK35xGuDnK+HEMtOJywo+ZcUXLB + ioJrC0u//f4X//yf/PXPvvuGdroaVnKVETCuLi7tb+/y3bYR88GLThBRVzoPgqw0gLT2QQW7/rvp41gh + uKpJdc6fMT05PxO+tC4hvkFSUbEQkRWwR+sG8RaAXJ1yURJe/sC1d+7TTZxzuCaFtjkusw96eeusvH3t + Jt/77+PQ/63eJ2fM7vYmYyjK6RDueXbNnP/wT4xlmAieE/fw0KmCpc5gO8X7qWpam7Wl5Yd7OwSVejii + wbZNKQwYv8/k2K++fIc8sl0ATqo0Zxk9V9dY0iz0d7948ZjlXsCZeSEXfP1nIGIbKFolALkuVGnAJEdU + vaSngADtJaJWs/Mokjz1WtThvUFbbawuf/PFZ0uLC9llMaoh0j3rHGkTkHYPfmKkSZMj5VJ69/YljdJh + 2WxTzg3q2jJtMwuZGshMSiSaLIPWYHf3ZvzV5x5Uui8FkGIOZ1HQN66K02hDTCycgGJ4vDW1y4RBHSnN + yDvnkbRduSNYNUdWDLBdeiOUHfY8D7nrBmnEmqh/8/o1PuqWEQb4ZWs8m1FY3dkxn4StrbXlpXuzibjS + wXT5meSFpJs+YNK6I1LflDnihBVn0WYK9OvXT3m5WjxO8qBAYHdsmBDytZknqfvCiIbLdjxy6IglYSEn + 90+//frf/K//8//7//zf/8v/+N+/fvFUV6IEMlxu9G3+6c++/8vf/OnexpZMt/XXMfNr16wvDiRMDKN3 + 61BDOMXrcnVO2BNiTQ1kxoHyLlY4g4EP1HLN85QXZuo3izj1EW2Yi9gHwdOBAPL/AbYzCLUOCazNAAAA + AElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/Step07.csproj b/Source Code updated 08-12-05/Spacewar3D/Step07/Step07.csproj new file mode 100644 index 0000000..0af2a33 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/Step07.csproj @@ -0,0 +1,340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/Step07.sln b/Source Code updated 08-12-05/Spacewar3D/Step07/Step07.sln new file mode 100644 index 0000000..e4f04b9 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/Step07.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Step07", "Step07.csproj", "{DE8FEF2E-6E28-4456-9712-68437802A747}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.ActiveCfg = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.Build.0 = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.ActiveCfg = Release|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/WorldPosition.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/WorldPosition.cs new file mode 100644 index 0000000..35c2919 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/WorldPosition.cs @@ -0,0 +1,210 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + +[Serializable] +public class WorldPosition { + public float XPos {get { return xPos; } set { xPos = value; } } + public float YPos {get { return yPos; } set { yPos = value; } } + public float ZPos {get { return zPos; } set { zPos = value; } } + + public float XRotation { get { return xRotation; } set { xRotation = value; } } + public float YRotation { get { return yRotation; } set { yRotation = value; } } + public float ZRotation { get { return zRotation; } set { zRotation = value; } } + + public float XScale { get { return xScale; } set { xScale = value; } } + public float YScale { get { return yScale; } set { yScale = value; } } + public float ZScale { get { return zScale; } set { zScale = value; } } + + + public Matrix WorldMatrix { get { Update(); return worldMatrix; } + set { + worldMatrix = value; + Location = Vector3.TransformCoordinate(new Vector3(0,0,0), worldMatrix); + Point(Location, Location+Direction); + Roll(Location, Location+Up); + } + } + + public Vector3 Direction { + get { + Vector3 directionVector= new Vector3(0,0,1); + return Vector3.TransformNormal(directionVector, worldMatrix); + } + } + + public Vector3 Up { + get { + Vector3 upVector = new Vector3(0,1,0); + return Vector3.TransformNormal(upVector,worldMatrix); + } + } + public Vector3 Right { + get { + Vector3 rightVector = new Vector3(1,0,0); + return Vector3.TransformNormal(rightVector,worldMatrix); + } + } + + public Vector3 Location { + get { + return new Vector3( xPos, yPos, zPos ); + } + set { + Move(value); + } + } + + public Vector3 Rotation { + get { + return new Vector3( xRotation, yRotation, zRotation); + } + set { + Rotate(value); + } + } + + + + private float xPos, yPos, zPos = 0.0f; + private float xRotation, yRotation, zRotation = 0.0f; + private float xScale, yScale, zScale = 0.0f; + + private Matrix worldMatrix, scaleMatrix, rotationMatrix = Matrix.Identity; + private Matrix translationMatrix = Matrix.Identity; + private Matrix combineMatrix1, combineMatrix2; + + public Matrix CombineMatrix1 { get { return combineMatrix1; } set { combineMatrix1 = value; } } + public Matrix CombineMatrix2 { get { return combineMatrix2; } set { combineMatrix2 = value; } } + + + public WorldPosition() { + + Move(0.0f, 0.0f, 0.0f); + Rotate(0.0f, 0.0f, 0.0f); + Scale(1.0f, 1.0f, 1.0f); + combineMatrix1 = combineMatrix2 = Matrix.Zero; + + Update(); + + } + + public Vector3 CombinedLocation { + get { + Update(); + return new Vector3(worldMatrix.M41,worldMatrix.M42,worldMatrix.M43); + } + } + + public void Move( Vector3 newPosition ) { + Move( newPosition.X, newPosition.Y, newPosition.Z ); + } + + public void Move( float x, float y, float z ) { + xPos = x; + yPos = y; + zPos = z; + + translationMatrix = Matrix.Translation( xPos, yPos, zPos ); + } + + public void MoveRel( float x, float y, float z ) { + Move(xPos + x, yPos + y, zPos + z ); + } + + public void Rotate( Vector3 newDirection ) { + Rotate(newDirection.X, newDirection.Y, newDirection.Z); + } + + public void Point(Vector3 pointAtLocation) { + Point(xPos, yPos, zPos, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(Vector3 currentLocation, Vector3 pointAtLocation) { + Point(currentLocation.X, currentLocation.Y, currentLocation.Z, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } + + public void Roll(Vector3 Location, Vector3 UpVector) { + float xDiff, yDiff; + xDiff = Location.X - UpVector.X; + yDiff = Location.Y - UpVector.Y; + zRotation = (float) Math.Atan2(xDiff, yDiff); + } + + + + + public void Rotate( float x, float y, float z ) { + xRotation = x; + yRotation = y; + zRotation = z; + + rotationMatrix = Matrix.RotationYawPitchRoll( yRotation, xRotation, zRotation ); + } + + public void RotateRel( float x, float y, float z ) { + Rotate( xRotation + x, yRotation + y, zRotation + z ); + } + + //YawPitchRoll rotates an object relative to its own orthonormal basis vectors + public void YawPitchRoll( float yaw, float pitch, float roll) { + + Matrix yawMatrix = Matrix.RotationAxis(this.Up, yaw); + Matrix pitchMatrix = Matrix.RotationAxis(this.Right, pitch); + Matrix rollMatrix = Matrix.RotationAxis(this.Direction, roll); + + Matrix ypr = yawMatrix * pitchMatrix * rollMatrix; + rotationMatrix *= ypr; + + + } + + public void Scale( float x, float y, float z ) { + xScale = x; + yScale = y; + zScale = z; + + scaleMatrix = Matrix.Scaling( xScale, yScale, zScale ); + + } + + public void ScaleRel( float x, float y, float z ) { + Scale( xScale + x, yScale + y, zScale + z ); + } + + + public void Update() { + + Matrix m; + + + + m = scaleMatrix; + m *= rotationMatrix; + m *= translationMatrix; + if (combineMatrix1 != Matrix.Zero) + m *= combineMatrix1; + if (combineMatrix2 != Matrix.Zero) + m *= combineMatrix2; + + worldMatrix = m; + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/d3dapp.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/d3dapp.cs new file mode 100644 index 0000000..9384434 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/d3dapp.cs @@ -0,0 +1,1517 @@ +//----------------------------------------------------------------------------- +// File: D3DApp.cs +// +// Desc: Application class for the Direct3D samples framework library. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + +/// +/// The base class for all the graphics (D3D) samples, it derives from windows forms +/// +public class GraphicsSample : System.Windows.Forms.Form { + #region Menu Information + // The menu items that *all* samples will need + protected System.Windows.Forms.MainMenu mnuMain; + protected System.Windows.Forms.MenuItem mnuFile; + private System.Windows.Forms.MenuItem mnuGo; + private System.Windows.Forms.MenuItem mnuSingle; + private System.Windows.Forms.MenuItem mnuBreak1; + private System.Windows.Forms.MenuItem mnuChange; + private System.Windows.Forms.MenuItem mnuBreak2; + protected System.Windows.Forms.MenuItem mnuExit; + #endregion + + // The window we will render too + private System.Windows.Forms.Control ourRenderTarget; + // Should we use the default windows + protected bool isUsingMenus = true; + + // We need to keep track of our enumeration settings + protected D3DEnumeration enumerationSettings = new D3DEnumeration(); + protected D3DSettings graphicsSettings = new D3DSettings(); + private bool isMaximized = false; // Are we maximized? + private bool isHandlingSizeChanges = true; // Are we handling size changes? + private bool isClosing = false; // Are we closing? + private bool isChangingFormStyle = false; // Are we changing the forms style? + private bool isWindowActive = true; // Are we waiting for got focus? + + private float lastTime = 0.0f; // The last time + private int frames = 0; // Number of frames since our last update + private int appPausedCount = 0; // How many times has the app been paused (and when can it resume)? + + // Internal variables for the state of the app + protected bool windowed; + protected bool active; + protected bool ready; + protected bool hasFocus; + protected bool isMultiThreaded = false; + + // Internal variables used for timing + protected bool frameMoving; + protected bool singleStep; + // Main objects used for creating and rendering the 3D scene + protected PresentParameters presentParams = new PresentParameters(); // Parameters for CreateDevice/Reset + protected Device device; // The rendering device + protected RenderStateManager renderState; + protected SamplerStateManagerCollection sampleState; + protected TextureStateManagerCollection textureStates; + private Caps graphicsCaps; // Caps for the device + protected Caps Caps { get { return graphicsCaps; } } + private CreateFlags behavior; // Indicate sw or hw vertex processing + protected BehaviorFlags BehaviorFlags { get { return new BehaviorFlags(behavior); } } + protected System.Windows.Forms.Control RenderTarget { get { return ourRenderTarget; } set { ourRenderTarget = value; } } + + // Variables for timing + protected float appTime; // Current time in seconds + protected float elapsedTime; // Time elapsed since last frame + protected float framePerSecond; // Instanteous frame rate + protected string deviceStats;// String to hold D3D device stats + protected string frameStats; // String to hold frame stats + + private bool deviceLost = false; + + // Overridable variables for the app + private int minDepthBits; // Minimum number of bits needed in depth buffer + protected int MinDepthBits { get { return minDepthBits; } set { minDepthBits = value; enumerationSettings.AppMinDepthBits = value;} } + private int minStencilBits; // Minimum number of bits needed in stencil buffer + protected int MinStencilBits { get { return minStencilBits; } set { minStencilBits = value; enumerationSettings.AppMinStencilBits = value;} } + protected bool showCursorWhenFullscreen; // Whether to show cursor when fullscreen + protected bool clipCursorWhenFullscreen; // Whether to limit cursor pos when fullscreen + protected bool startFullscreen; // Whether to start up the app in fullscreen mode + + private System.Drawing.Size storedSize; + private System.Drawing.Point storedLocation; + + // Overridable functions for the 3D scene created by the app + protected virtual bool ConfirmDevice(Caps caps, VertexProcessingType vertexProcessingType, + Format adapterFormat, Format backBufferFormat) { return true; } + protected virtual void OneTimeSceneInitialization() { /* Do Nothing */ } + protected virtual void InitializeDeviceObjects() { /* Do Nothing */ } + protected virtual void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void FrameMove() { /* Do Nothing */ } + protected virtual void Render() { /* Do Nothing */ } + protected virtual void InvalidateDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void DeleteDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + + + + + /// + /// Constructor + /// + public GraphicsSample() { + device = null; + active = false; + ready = false; + hasFocus = false; + behavior = 0; + + ourRenderTarget = this; + frameMoving = true; + singleStep = false; + framePerSecond = 0.0f; + deviceStats = null; + frameStats = null; + + this.Text = "D3D9 Sample"; + this.ClientSize = new System.Drawing.Size(400,300); + this.KeyPreview = true; + + minDepthBits = 16; + minStencilBits = 0; + showCursorWhenFullscreen = false; + startFullscreen = false; + + // When clipCursorWhenFullscreen is TRUE, the cursor is limited to + // the device window when the app goes fullscreen. This prevents users + // from accidentally clicking outside the app window on a multimon system. + // This flag is turned off by default for debug builds, since it makes + // multimon debugging difficult. +#if (DEBUG) + clipCursorWhenFullscreen = false; +#else + clipCursorWhenFullscreen = true; +#endif + InitializeComponent(); + } + + + + + /// + /// Picks the best graphics device, and initializes it + /// + /// true if a good device was found, false otherwise + public bool CreateGraphicsSample() { + enumerationSettings.ConfirmDeviceCallback = new D3DEnumeration.ConfirmDeviceCallbackType(this.ConfirmDevice); + enumerationSettings.Enumerate(); + + if (ourRenderTarget.Cursor == null) { + // Set up a default cursor + ourRenderTarget.Cursor = System.Windows.Forms.Cursors.Default; + } + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + + try { + ChooseInitialSettings(); + + // Initialize the application timer + DXUtil.Timer(DirectXTimer.Start); + // Initialize the app's custom scene stuff + OneTimeSceneInitialization(); + // Initialize the 3D environment for the app + InitializeEnvironment(); + } + catch (SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + return false; + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + return false; + } + + // The app is ready to go + ready = true; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available windowed mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestWindowedMode(bool doesRequireHardware, bool doesRequireReference) { + // Get display mode of primary adapter (which is assumed to be where the window + // will appear) + DisplayMode primaryDesktopDisplayMode = Manager.Adapters[0].CurrentDisplayMode; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + if (!deviceCombo.IsWindowed) + continue; + if (deviceCombo.AdapterFormat != primaryDesktopDisplayMode.Format) + continue; + + // If we haven't found a compatible DeviceCombo yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + deviceCombo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + // This windowed device combo looks great -- take it + goto EndWindowedDeviceComboSearch; + } + // Otherwise keep looking for a better windowed device combo + } + } + } + } + + EndWindowedDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + graphicsSettings.WindowedAdapterInfo = bestAdapterInfo; + graphicsSettings.WindowedDeviceInfo = bestDeviceInfo; + graphicsSettings.WindowedDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = true; + graphicsSettings.WindowedDisplayMode = primaryDesktopDisplayMode; + graphicsSettings.WindowedWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + graphicsSettings.WindowedHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.WindowedDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.WindowedMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.WindowedMultisampleQuality = 0; + graphicsSettings.WindowedVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.WindowedPresentInterval = (PresentInterval)bestDeviceCombo.PresentIntervalList[0]; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available fullscreen mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestFullscreenMode(bool doesRequireHardware, bool doesRequireReference) { + // For fullscreen, default to first HAL DeviceCombo that supports the current desktop + // display mode, or any display mode if HAL is not compatible with the desktop mode, or + // non-HAL if no HAL is available + DisplayMode adapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestAdapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestDisplayMode = new DisplayMode(); + bestAdapterDesktopDisplayMode.Width = 0; + bestAdapterDesktopDisplayMode.Height = 0; + bestAdapterDesktopDisplayMode.Format = 0; + bestAdapterDesktopDisplayMode.RefreshRate = 0; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + adapterDesktopDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + bool adapterMatchesDesktop = (deviceCombo.AdapterFormat == adapterDesktopDisplayMode.Format); + if (deviceCombo.IsWindowed) + continue; + + // If we haven't found a compatible set yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + bestDeviceCombo.DevType == DeviceType.Hardware && bestDeviceCombo.AdapterFormat != adapterDesktopDisplayMode.Format && adapterMatchesDesktop || + bestDeviceCombo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + bestAdapterDesktopDisplayMode = adapterDesktopDisplayMode; + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + // This fullscreen device combo looks great -- take it + goto EndFullscreenDeviceComboSearch; + } + // Otherwise keep looking for a better fullscreen device combo + } + } + } + } + + EndFullscreenDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + // Need to find a display mode on the best adapter that uses pBestDeviceCombo->AdapterFormat + // and is as close to bestAdapterDesktopDisplayMode's res as possible + bestDisplayMode.Width = 0; + bestDisplayMode.Height = 0; + bestDisplayMode.Format = 0; + bestDisplayMode.RefreshRate = 0; + foreach (DisplayMode displayMode in bestAdapterInfo.DisplayModeList) { + if (displayMode.Format != bestDeviceCombo.AdapterFormat) + continue; + if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate == bestAdapterDesktopDisplayMode.RefreshRate) { + // found a perfect match, so stop + bestDisplayMode = displayMode; + break; + } + else if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate > bestDisplayMode.RefreshRate) { + // refresh rate doesn't match, but width/height match, so keep this + // and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == bestAdapterDesktopDisplayMode.Width) { + // width matches, so keep this and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == 0) { + // we don't have anything better yet, so keep this and keep looking + bestDisplayMode = displayMode; + } + } + + graphicsSettings.FullscreenAdapterInfo = bestAdapterInfo; + graphicsSettings.FullscreenDeviceInfo = bestDeviceInfo; + graphicsSettings.FullscreenDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = false; + graphicsSettings.FullscreenDisplayMode = bestDisplayMode; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.FullscreenDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.FullscreenMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.FullscreenMultisampleQuality = 0; + graphicsSettings.FullscreenVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.FullscreenPresentInterval = PresentInterval.Default; + + return true; + } + + + + + /// + /// Choose the initial settings for the application + /// + /// true if the settings were initialized + public bool ChooseInitialSettings() { + bool foundFullscreenMode = FindBestFullscreenMode(false, false); + bool foundWindowedMode = FindBestWindowedMode(false, false); + if (startFullscreen && foundFullscreenMode) + graphicsSettings.IsWindowed = false; + + if (!foundFullscreenMode && !foundWindowedMode) + throw new NoCompatibleDevicesException(); + + return (foundFullscreenMode || foundWindowedMode); + } + + + + + /// + /// Build presentation parameters from the current settings + /// + public void BuildPresentParamsFromSettings() { + presentParams.Windowed = graphicsSettings.IsWindowed; + presentParams.BackBufferCount = 1; + presentParams.MultiSample = graphicsSettings.MultisampleType; + presentParams.MultiSampleQuality = graphicsSettings.MultisampleQuality; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.EnableAutoDepthStencil = enumerationSettings.AppUsesDepthBuffer; + presentParams.AutoDepthStencilFormat = graphicsSettings.DepthStencilBufferFormat; + presentParams.PresentFlag = PresentFlag.None; + + if (windowed) { + presentParams.BackBufferWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + presentParams.BackBufferHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = 0; + presentParams.PresentationInterval = PresentInterval.Immediate; + presentParams.DeviceWindow = ourRenderTarget; + } + else { + presentParams.BackBufferWidth = graphicsSettings.DisplayMode.Width; + presentParams.BackBufferHeight = graphicsSettings.DisplayMode.Height; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = graphicsSettings.DisplayMode.RefreshRate; + presentParams.PresentationInterval = graphicsSettings.PresentInterval; + presentParams.DeviceWindow = this; + } + } + + + + + /// + /// Initialize the graphics environment + /// + public void InitializeEnvironment() { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + GraphicsDeviceInfo deviceInfo = graphicsSettings.DeviceInfo; + + windowed = graphicsSettings.IsWindowed; + + // Set up the presentation parameters + BuildPresentParamsFromSettings(); + + if (deviceInfo.Caps.PrimitiveMiscCaps.IsNullReference) { + // Warn user about null ref device that can't render anything + HandleSampleException(new NullReferenceDeviceException(), ApplicationMessage.None); + } + + CreateFlags createFlags = new CreateFlags(); + if (graphicsSettings.VertexProcessingType == VertexProcessingType.Software) + createFlags = CreateFlags.SoftwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Mixed) + createFlags = CreateFlags.MixedVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Hardware) + createFlags = CreateFlags.HardwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.PureHardware) { + createFlags = CreateFlags.HardwareVertexProcessing; + } + else + throw new ApplicationException(); +#if (DX9) +#else + // Make sure to allow multithreaded apps if we need them + presentParams.ForceNoMultiThreadedFlag = !isMultiThreaded; +#endif + try { + // Create the device + device = new Device(graphicsSettings.AdapterOrdinal, graphicsSettings.DevType, + windowed ? ourRenderTarget : this , createFlags, presentParams); + + // Cache our local objects + renderState = device.RenderState; + sampleState = device.SamplerState; + textureStates = device.TextureState; + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after recreating the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + if (windowed) { + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + } + + // Store device Caps + graphicsCaps = device.DeviceCaps; + behavior = createFlags; + + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + // Store device description + if (deviceInfo.DevType == DeviceType.Reference) + sb.Append("REF"); + else if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append("HAL"); + else if (deviceInfo.DevType == DeviceType.Software) + sb.Append("SW"); + + BehaviorFlags behaviorFlags = new BehaviorFlags(createFlags); + if ((behaviorFlags.HardwareVertexProcessing) && + (behaviorFlags.PureDevice)) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (pure hw vp)"); + else + sb.Append(" (simulated pure hw vp)"); + } + else if (behaviorFlags.HardwareVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (hw vp)"); + else + sb.Append(" (simulated hw vp)"); + } + else if (behaviorFlags.MixedVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (mixed vp)"); + else + sb.Append(" (simulated mixed vp)"); + } + else if (behaviorFlags.SoftwareVertexProcessing) { + sb.Append(" (sw vp)"); + } + + if (deviceInfo.DevType == DeviceType.Hardware) { + sb.Append(": "); + sb.Append(adapterInfo.AdapterDetails.Description); + } + + // Set device stats string + deviceStats = sb.ToString(); + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // Confine cursor to fullscreen window + if (clipCursorWhenFullscreen) { + if (!windowed) { + System.Drawing.Rectangle rcWindow = this.ClientRectangle; + } + } + + // Setup the event handlers for our device + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + device.Disposing += new System.EventHandler(this.DeleteDeviceObjects); + device.DeviceResizing += new System.ComponentModel.CancelEventHandler(this.EnvironmentResized); + + // Initialize the app's device-dependent objects + try { + InitializeDeviceObjects(); + RestoreDeviceObjects(null, null); + active = true; + return; + } + catch { + // Cleanup before we try again + InvalidateDeviceObjects(null, null); + DeleteDeviceObjects(null, null); + device.Dispose(); + device = null; + if (this.Disposing) + return; + } + } + catch { + // If that failed, fall back to the reference rasterizer + if (deviceInfo.DevType == DeviceType.Hardware) { + if (FindBestWindowedMode(false, true)) { + windowed = true; + + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + + // Let the user know we are switching from HAL to the reference rasterizer + HandleSampleException(null, ApplicationMessage.WarnSwitchToRef); + + InitializeEnvironment(); + } + } + } + } + + + + + /// + /// Displays sample exceptions to the user + /// + /// The exception that was thrown + /// Extra information on how to handle the exception + public void HandleSampleException(SampleException e, ApplicationMessage Type) { + // Build a message to display to the user + string strMsg = string.Empty; + if (e != null) + strMsg = e.Message; + + if (ApplicationMessage.ApplicationMustExit == Type) { + strMsg += "\n\nThis sample will now exit."; + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + + // Close the window, which shuts down the app + if (this.IsHandleCreated) + this.Close(); + } + else { + if (ApplicationMessage.WarnSwitchToRef == Type) + strMsg = "\n\nSwitching to the reference rasterizer,\n"; + strMsg += "a software device that implements the entire\n"; + strMsg += "Direct3D feature set, but runs very slowly."; + + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + } + } + + + + + /// + /// Fired when our environment was resized + /// + /// the device that's resizing our environment + /// Set the cancel member to true to turn off automatic device reset + public void EnvironmentResized(object sender, System.ComponentModel.CancelEventArgs e) { + // Check to see if we're closing or changing the form style + if ((isClosing) || (isChangingFormStyle)) { + // We are, cancel our reset, and exit + e.Cancel = true; + return; + } + + // Check to see if we're minimizing and our rendering object + // is not the form, if so, cancel the resize + if ((ourRenderTarget != this) && (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)) + e.Cancel = true; + + if (!isWindowActive) + e.Cancel = true; + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + } + + + + + /// + /// Called when user toggles between fullscreen mode and windowed mode + /// + public void ToggleFullscreen() { + int AdapterOrdinalOld = graphicsSettings.AdapterOrdinal; + DeviceType DevTypeOld = graphicsSettings.DevType; + + isHandlingSizeChanges = false; + isChangingFormStyle = true; + ready = false; + + // Toggle the windowed state + windowed = !windowed; + + // Save our maximized settings.. + if (!windowed && isMaximized) + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + + graphicsSettings.IsWindowed = windowed; + + // If AdapterOrdinal and DevType are the same, we can just do a Reset(). + // If they've changed, we need to do a complete device teardown/rebuild. + if (graphicsSettings.AdapterOrdinal == AdapterOrdinalOld && + graphicsSettings.DevType == DevTypeOld) { + BuildPresentParamsFromSettings(); + // Resize the 3D device + RETRY: + try { + device.Reset(presentParams); + } + catch { + if (windowed) + ForceWindowed(); + else { + // Sit in a loop until the device passes Reset() + try { + device.TestCooperativeLevel(); + } + catch(DeviceNotResetException) { + // Device still needs to be Reset. Try again. + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + goto RETRY; + } + } + } + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + else { + device.Dispose(); + device = null; + InitializeEnvironment(); + } + + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after resetting the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + + if (windowed) { + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; + isChangingFormStyle = false; + + // We were maximized, restore that state + if (isMaximized) { + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + } + this.SendToBack(); + this.BringToFront(); + this.ClientSize = storedSize; + this.Location = storedLocation; + } + else { + if (this.Menu != null) + this.Menu = null; + + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + isChangingFormStyle = false; + } + isHandlingSizeChanges = true; + ready = true; + } + + + + + /// + /// Switch to a windowed mode, even if that means picking a new device and/or adapter + /// + public void ForceWindowed() { + if (windowed) + return; + + if (!FindBestWindowedMode(false, false)) { + return; + } + windowed = true; + + // Now destroy the current 3D device objects, then reinitialize + + ready = false; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Create the new device + try { + InitializeEnvironment(); + } + catch (SampleException e) { + HandleSampleException(e,ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(),ApplicationMessage.ApplicationMustExit); + } + ready = true; + } + + + + + /// + /// Called when our sample has nothing else to do, and it's time to render + /// + private void FullRender() { + // Render a frame during idle time (no messages are waiting) + if (active && ready) { + try { + if ((deviceLost) || (System.Windows.Forms.Form.ActiveForm != this)) { + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + } + // Render a frame during idle time + if (active) { + Render3DEnvironment(); + } + } + catch (Exception ee) { + System.Windows.Forms.MessageBox.Show("An exception has occurred. This sample must exit.\r\n\r\n" + ee.ToString(), "Exception", + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + this.Close(); + } + } + } + + + + + /// + /// Run the simulation + /// + public void Run() { + // Now we're ready to recieve and process Windows messages. + System.Windows.Forms.Control mainWindow = this; + + // If the render target is a form and *not* this form, use that form instead, + // otherwise, use the main form. + if ((ourRenderTarget is System.Windows.Forms.Form) && (ourRenderTarget != this)) + mainWindow = ourRenderTarget; + + mainWindow.Show(); + while (mainWindow.Created) { + FullRender(); + System.Windows.Forms.Application.DoEvents(); + } + } + + + + + /// + /// Draws the scene + /// + public void Render3DEnvironment() { + if (deviceLost) { + try { + // Test the cooperative level to see if it's okay to render + device.TestCooperativeLevel(); + } + catch (DeviceLostException) { + // If the device was lost, do not render until we get it back + isHandlingSizeChanges = false; + isWindowActive = false; + return; + } + catch (DeviceNotResetException) { + // Check if the device needs to be resized. + + // If we are windowed, read the desktop mode and use the same format for + // the back buffer + if (windowed) { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + graphicsSettings.WindowedDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + presentParams.BackBufferFormat = graphicsSettings.WindowedDisplayMode.Format; + } + + // Reset the device and resize it + device.Reset(device.PresentationParameters); + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + deviceLost = false; + } + + // Get the app's time, in seconds. Skip rendering if no time elapsed + float fAppTime = DXUtil.Timer(DirectXTimer.GetApplicationTime); + float fElapsedAppTime = DXUtil.Timer(DirectXTimer.GetElapsedTime); + if ((0.0f == fElapsedAppTime) && frameMoving) + return; + + // FrameMove (animate) the scene + if (frameMoving || singleStep) { + // Store the time for the app + appTime = fAppTime; + elapsedTime = fElapsedAppTime; + + // Frame move the scene + FrameMove(); + + singleStep = false; + } + + // Render the scene as normal + Render(); + + UpdateStats(); + + try { + // Show the frame on the primary surface. + device.Present(); + } + catch(DeviceLostException) { + deviceLost = true; + } + } + + + + + /// + /// Update the various statistics the simulation keeps track of + /// + public void UpdateStats() { + // Keep track of the frame count + float time = DXUtil.Timer(DirectXTimer.GetAbsoluteTime); + ++frames; + + // Update the scene stats once per second + if (time - lastTime > 1.0f) { + framePerSecond = frames / (time - lastTime); + lastTime = time; + frames = 0; + + string strFmt; + Format fmtAdapter = graphicsSettings.DisplayMode.Format; + if (fmtAdapter == device.PresentationParameters.BackBufferFormat) { + strFmt = fmtAdapter.ToString(); + } + else { + strFmt = String.Format("backbuf {0}, adapter {1}", + device.PresentationParameters.BackBufferFormat.ToString(), fmtAdapter.ToString()); + } + + string strDepthFmt; + if (enumerationSettings.AppUsesDepthBuffer) { + strDepthFmt = String.Format(" ({0})", + graphicsSettings.DepthStencilBufferFormat.ToString()); + } + else { + // No depth buffer + strDepthFmt = ""; + } + + string strMultiSample; + switch (graphicsSettings.MultisampleType) { + case Direct3D.MultiSampleType.NonMaskable: strMultiSample = " (NonMaskable Multisample)"; break; + case Direct3D.MultiSampleType.TwoSamples: strMultiSample = " (2x Multisample)"; break; + case Direct3D.MultiSampleType.ThreeSamples: strMultiSample = " (3x Multisample)"; break; + case Direct3D.MultiSampleType.FourSamples: strMultiSample = " (4x Multisample)"; break; + case Direct3D.MultiSampleType.FiveSamples: strMultiSample = " (5x Multisample)"; break; + case Direct3D.MultiSampleType.SixSamples: strMultiSample = " (6x Multisample)"; break; + case Direct3D.MultiSampleType.SevenSamples: strMultiSample = " (7x Multisample)"; break; + case Direct3D.MultiSampleType.EightSamples: strMultiSample = " (8x Multisample)"; break; + case Direct3D.MultiSampleType.NineSamples: strMultiSample = " (9x Multisample)"; break; + case Direct3D.MultiSampleType.TenSamples: strMultiSample = " (10x Multisample)"; break; + case Direct3D.MultiSampleType.ElevenSamples: strMultiSample = " (11x Multisample)"; break; + case Direct3D.MultiSampleType.TwelveSamples: strMultiSample = " (12x Multisample)"; break; + case Direct3D.MultiSampleType.ThirteenSamples: strMultiSample = " (13x Multisample)"; break; + case Direct3D.MultiSampleType.FourteenSamples: strMultiSample = " (14x Multisample)"; break; + case Direct3D.MultiSampleType.FifteenSamples: strMultiSample = " (15x Multisample)"; break; + case Direct3D.MultiSampleType.SixteenSamples: strMultiSample = " (16x Multisample)"; break; + default: strMultiSample = string.Empty; break; + } + frameStats = String.Format("{0} fps ({1}x{2}), {3}{4}{5}", framePerSecond.ToString("f2"), + device.PresentationParameters.BackBufferWidth, device.PresentationParameters.BackBufferHeight, + strFmt, strDepthFmt, strMultiSample); + } + } + + + + + /// + /// Called in to toggle the pause state of the app. + /// + /// true if the simulation should pause + public void Pause(bool pause) { + appPausedCount += (int)(pause ? +1 : -1); + ready = ((appPausedCount > 0) ? false : true); + + // Handle the first pause request (of many, nestable pause requests) + if (pause && (1 == appPausedCount)) { + // Stop the scene from animating + if (frameMoving) + DXUtil.Timer(DirectXTimer.Stop); + } + + if (0 == appPausedCount) { + // Restart the timers + if (frameMoving) + DXUtil.Timer(DirectXTimer.Start); + } + } + + + + + /// + /// Set our variables to not active and not ready + /// + public void CleanupEnvironment() { + active = false; + ready = false; + if (device != null) + device.Dispose(); + + device = null; + } + #region Menu EventHandlers + + + + + /// + /// Prepares the simulation for a new device being selected + /// + public void UserSelectNewDevice(object sender, EventArgs e) { + // Prompt the user to select a new device or mode + if (active && ready) { + Pause(true); + DoSelectNewDevice(); + Pause(false); + } + } + + + + + /// + /// Displays a dialog so the user can select a new adapter, device, or + /// display mode, and then recreates the 3D environment if needed + /// + private void DoSelectNewDevice() { + isHandlingSizeChanges = false; + // Can't display dialogs in fullscreen mode + if (windowed == false) { + try { + ToggleFullscreen(); + isHandlingSizeChanges = false; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + return; + } + } + + // Make sure the main form is in the background + this.SendToBack(); + D3DSettingsForm settingsForm = new D3DSettingsForm(enumerationSettings, graphicsSettings); + System.Windows.Forms.DialogResult result = settingsForm.ShowDialog(null); + if (result != System.Windows.Forms.DialogResult.OK) { + isHandlingSizeChanges = true; + return; + } + graphicsSettings = settingsForm.settings; + + windowed = graphicsSettings.IsWindowed; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Inform the display class of the change. It will internally + // re-create valid surfaces, a d3ddevice, etc. + try { + InitializeEnvironment(); + } + catch(SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + isHandlingSizeChanges = true; + } + + + + + /// + /// Will start (or stop) simulation + /// + private void ToggleStart(object sender, EventArgs e) { + //Toggle frame movement + frameMoving = !frameMoving; + DXUtil.Timer(frameMoving ? DirectXTimer.Start : DirectXTimer.Stop); + } + + + + + /// + /// Will single step the simulation + /// + private void SingleStep(object sender, EventArgs e) { + // Single-step frame movement + if (false == frameMoving) + DXUtil.Timer(DirectXTimer.Advance); + else + DXUtil.Timer(DirectXTimer.Stop); + frameMoving = false; + singleStep = true; + } + + + + + /// + /// Will end the simulation + /// + private void ExitSample(object sender, EventArgs e) { + this.Close(); + } + #endregion + + + + + #region WinForms Overrides + /// + /// Clean up any resources + /// + protected override void Dispose(bool disposing) { + CleanupEnvironment(); + mnuMain.Dispose(); + base.Dispose(disposing); + } + + + + + /// + /// Handle any key presses + /// + protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) { + // Check for our shortcut keys (Return to start or stop) + if (e.KeyChar == '\r') { + mnuGo.PerformClick(); + e.Handled = true; + } + + // Check for our shortcut keys (Escape to quit) + if ((byte)e.KeyChar == (byte)(int)System.Windows.Forms.Keys.Escape) { + mnuExit.PerformClick(); + e.Handled = true; + } + + // Allow the control to handle the keystroke now + base.OnKeyPress(e); + } + + + + + /// + /// Handle system keystrokes (ie, alt-enter) + /// + protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e) { + if ((e.Alt) && (e.KeyCode == System.Windows.Forms.Keys.Return)) { + // Toggle the fullscreen/window mode + if (active && ready) { + Pause(true); + + try { + ToggleFullscreen(); + Pause(false); + return; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + } + finally { + e.Handled = true; + } + } + } + // Allow the control to handle the keystroke now + base.OnKeyDown(e); + } + + + + + /// + /// Winforms generated code for initializing the form + /// + private void InitializeComponent() { + // + // GraphicsSample + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.MinimumSize = new System.Drawing.Size(100, 100); + #region MenuCreation/etc + this.mnuMain = new System.Windows.Forms.MainMenu(); + this.mnuFile = new System.Windows.Forms.MenuItem(); + this.mnuGo = new System.Windows.Forms.MenuItem(); + this.mnuSingle = new System.Windows.Forms.MenuItem(); + this.mnuBreak1 = new System.Windows.Forms.MenuItem(); + this.mnuChange = new System.Windows.Forms.MenuItem(); + this.mnuBreak2 = new System.Windows.Forms.MenuItem(); + this.mnuExit = new System.Windows.Forms.MenuItem(); + // + // mainMenu1 + // + this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuFile}); + // + // mnuFile + // + this.mnuFile.Index = 0; + this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuGo, + this.mnuSingle, + this.mnuBreak1, + this.mnuChange, + this.mnuBreak2, + this.mnuExit}); + this.mnuFile.Text = "&File"; + // + // mnuGo + // + this.mnuGo.Index = 0; + this.mnuGo.Text = "&Go/stop\tEnter"; + this.mnuGo.Click += new System.EventHandler(this.ToggleStart); + // + // mnuSingle + // + this.mnuSingle.Index = 1; + this.mnuSingle.Text = "&Single step\tSpace"; + this.mnuSingle.Click += new System.EventHandler(this.SingleStep); + // + // mnuBreak1 + // + this.mnuBreak1.Index = 2; + this.mnuBreak1.Text = "-"; + // + // mnuChange + // + this.mnuChange.Index = 3; + this.mnuChange.Shortcut = System.Windows.Forms.Shortcut.F2; + this.mnuChange.ShowShortcut = true; + this.mnuChange.Text = "&Change Device..."; + this.mnuChange.Click += new System.EventHandler(this.UserSelectNewDevice); + // + // mnuBreak2 + // + this.mnuBreak2.Index = 4; + this.mnuBreak2.Text = "-"; + // + // mnuExit + // + this.mnuExit.Index = 5; + this.mnuExit.Text = "E&xit\tESC"; + this.mnuExit.Click += new System.EventHandler(this.ExitSample); + #endregion + } + + + + + /// + /// When the menu is starting pause our simulation + /// + protected override void OnMenuStart(System.EventArgs e) { + Pause(true); // Pause the simulation while the menu starts + } + + + + + /// + /// When the menu is complete our simulation can continue + /// + protected override void OnMenuComplete(System.EventArgs e) { + Pause(false); // Unpause the simulation + } + + + + + /// + /// Make sure our graphics cursor (if available) moves with the cursor + /// + protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e) { + if ((device != null) && (!device.Disposed)) { + // Move the D3D cursor + device.SetCursorPosition(e.X, e.Y, false); + } + // Let the control handle the mouse now + base.OnMouseMove(e); + } + + + + + /// + /// Handle size changed events + /// + protected override void OnSizeChanged(System.EventArgs e) { + this.OnResize(e); + base.OnSizeChanged(e); + } + + + + + /// + /// Handle resize events + /// + protected override void OnResize(System.EventArgs e) { + if (isHandlingSizeChanges) { + // Are we maximized? + isMaximized = (this.WindowState == System.Windows.Forms.FormWindowState.Maximized); + if (!isMaximized) { + storedSize = this.ClientSize; + storedLocation = this.Location; + } + } + active = !(this.WindowState == System.Windows.Forms.FormWindowState.Minimized || this.Visible == false); + base.OnResize(e); + } + + + + + /// + /// Once the form has focus again, we can continue to handle our resize + /// and resets.. + /// + protected override void OnGotFocus(System.EventArgs e) { + isHandlingSizeChanges = true; + isWindowActive = true; + base.OnGotFocus (e); + } + + + + + /// + /// Handle move events + /// + protected override void OnMove(System.EventArgs e) { + if (isHandlingSizeChanges) { + storedLocation = this.Location; + } + base.OnMove(e); + } + + + + + /// + /// Handle closing event + /// + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { + isClosing = true; + base.OnClosing(e); + } + #endregion + + +} + +#region Enums for D3D Applications +/// +/// Messages that can be used when displaying an error +/// +public enum ApplicationMessage { + None, + ApplicationMustExit, + WarnSwitchToRef +}; +#endregion + + + + +#region Various SampleExceptions +/// +/// The default sample exception type +/// +public class SampleException : System.ApplicationException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + + strMsg = "Generic application error. Enable\n"; + strMsg += "debug output for detailed information."; + + return strMsg; + } + } +} + + + + +/// +/// Exception informing user no compatible devices were found +/// +public class NoCompatibleDevicesException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "This sample cannot run in a desktop\n"; + strMsg += "window with the current display settings.\n"; + strMsg += "Please change your desktop settings to a\n"; + strMsg += "16- or 32-bit display mode and re-run this\n"; + strMsg += "sample."; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when the ReferenceDevice is null +/// +public class NullReferenceDeviceException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Warning: Nothing will be rendered.\n"; + strMsg += "The reference rendering device was selected, but your\n"; + strMsg += "computer only has a reduced-functionality reference device\n"; + strMsg += "installed. Install the DirectX SDK to get the full\n"; + strMsg += "reference device.\n"; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when reset fails +/// +public class ResetFailedException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not reset the Direct3D device."; + + return strMsg; + } + } +} + + + + +/// +/// The exception thrown when media couldn't be found +/// +public class MediaNotFoundException : SampleException { + private string mediaFile; + public MediaNotFoundException(string filename) : base() { + mediaFile = filename; + } + public MediaNotFoundException() : base() { + mediaFile = string.Empty; + } + + + + + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not load required media."; + if (mediaFile.Length > 0) + strMsg += string.Format("\r\nFile: {0}", mediaFile); + + return strMsg; + } + } +} +#endregion + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/d3dapp.resx b/Source Code updated 08-12-05/Spacewar3D/Step07/d3dapp.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/d3dapp.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/d3denumeration.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/d3denumeration.cs new file mode 100644 index 0000000..47c1c6a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/d3denumeration.cs @@ -0,0 +1,449 @@ +//----------------------------------------------------------------------------- +// File: D3DEnumeration.cs +// +// Desc: Enumerates D3D adapters, devices, modes, etc. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + + + +/// +/// Enumeration of all possible D3D vertex processing types +/// +public enum VertexProcessingType { + Software, + Mixed, + Hardware, + PureHardware +} + + + + +/// +/// Info about a display adapter +/// +public class GraphicsAdapterInfo { + public int AdapterOrdinal; + public AdapterDetails AdapterDetails; + public ArrayList DisplayModeList = new ArrayList(); // List of D3DDISPLAYMODEs + public ArrayList DeviceInfoList = new ArrayList(); // List of D3DDeviceInfos + public override string ToString() { return AdapterDetails.Description; } +} + + + + +/// +/// Info about a D3D device, including a list of DeviceCombos (see below) +/// that work with the device +/// +public class GraphicsDeviceInfo { + public int AdapterOrdinal; + public DeviceType DevType; + public Caps Caps; + public ArrayList DeviceComboList = new ArrayList(); // List of D3DDeviceCombos + public override string ToString() { return DevType.ToString(); } +} + + + + +/// +/// Info about a depth/stencil buffer format that is incompatible with a +/// multisample type +/// +public class DepthStencilMultiSampleConflict { + public DepthFormat DepthStencilFormat; + public MultiSampleType MultiSampleType; +} + + + + +/// +/// A combination of adapter format, back buffer format, and windowed/fullscreen +/// that is compatible with a particular D3D device (and the app) +/// +public class DeviceCombo { + public int AdapterOrdinal; + public DeviceType DevType; + public Format AdapterFormat; + public Format BackBufferFormat; + public bool IsWindowed; + public ArrayList DepthStencilFormatList = new ArrayList(); // List of D3DFORMATs + public ArrayList MultiSampleTypeList = new ArrayList(); // List of D3DMULTISAMPLE_TYPEs + public ArrayList MultiSampleQualityList = new ArrayList(); // List of ints (maxQuality per multisample type) + public ArrayList DepthStencilMultiSampleConflictList = new ArrayList(); // List of DepthStencilMultiSampleConflicts + public ArrayList VertexProcessingTypeList = new ArrayList(); // List of VertexProcessingTypes + public ArrayList PresentIntervalList = new ArrayList(); // List of D3DPRESENT_INTERVALs +} + + + + +/// +/// Used to sort Displaymodes +/// +class DisplayModeComparer : System.Collections.IComparer { + /// + /// Compare two display modes + /// + public int Compare(object x, object y) { + DisplayMode dx = (DisplayMode)x; + DisplayMode dy = (DisplayMode)y; + + if (dx.Width > dy.Width) + return 1; + if (dx.Width < dy.Width) + return -1; + if (dx.Height > dy.Height) + return 1; + if (dx.Height < dy.Height) + return -1; + if (dx.Format > dy.Format) + return 1; + if (dx.Format < dy.Format) + return -1; + if (dx.RefreshRate > dy.RefreshRate) + return 1; + if (dx.RefreshRate < dy.RefreshRate) + return -1; + return 0; + } +} + + + + +/// +/// Enumerates available adapters, devices, modes, etc. +/// +public class D3DEnumeration { + /// + /// The confirm device delegate which is used to determine if a device + /// meets the needs of the simulation + /// + public delegate bool ConfirmDeviceCallbackType(Caps caps, + VertexProcessingType vertexProcessingType, Format adapterFormat, + Format backBufferFormat); + + public ConfirmDeviceCallbackType ConfirmDeviceCallback; + public ArrayList AdapterInfoList = new ArrayList(); // List of D3DAdapterInfos + + // The following variables can be used to limit what modes, formats, + // etc. are enumerated. Set them to the values you want before calling + // Enumerate(). + public int AppMinFullscreenWidth = 640; + public int AppMinFullscreenHeight = 480; + public int AppMinColorChannelBits = 5; // min color bits per channel in adapter format + public int AppMinAlphaChannelBits = 0; // min alpha bits per pixel in back buffer format + public int AppMinDepthBits = 15; + public int AppMinStencilBits = 0; + public bool AppUsesDepthBuffer = true; + public bool AppUsesMixedVP = false; // whether app can take advantage of mixed vp mode + public bool AppRequiresWindowed = false; + public bool AppRequiresFullscreen = false; + + + + + /// + /// Enumerates available D3D adapters, devices, modes, etc. + /// + public void Enumerate() { + foreach (AdapterInformation ai in Manager.Adapters) { + ArrayList adapterFormatList = new ArrayList(); + GraphicsAdapterInfo adapterInfo = new GraphicsAdapterInfo(); + adapterInfo.AdapterOrdinal = ai.Adapter; + adapterInfo.AdapterDetails = ai.Information; + + // Get list of all display modes on this adapter. + // Also build a temporary list of all display adapter formats. + foreach (DisplayMode displayMode in ai.SupportedDisplayModes) { + if (displayMode.Width < AppMinFullscreenWidth) + continue; + if (displayMode.Height < AppMinFullscreenHeight) + continue; + if (GraphicsUtility.GetColorChannelBits(displayMode.Format) < AppMinColorChannelBits) + continue; + adapterInfo.DisplayModeList.Add(displayMode); + if (!adapterFormatList.Contains(displayMode.Format)) + adapterFormatList.Add(displayMode.Format); + } + + // Sort displaymode list + DisplayModeComparer dmc = new DisplayModeComparer(); + adapterInfo.DisplayModeList.Sort(dmc); + + // Get info for each device on this adapter + EnumerateDevices(adapterInfo, adapterFormatList); + + // If at least one device on this adapter is available and compatible + // with the app, add the adapterInfo to the list + if (adapterInfo.DeviceInfoList.Count == 0) + continue; + AdapterInfoList.Add(adapterInfo); + } + } + + + + + /// + /// Enumerates D3D devices for a particular adapter + /// + protected void EnumerateDevices(GraphicsAdapterInfo adapterInfo, ArrayList adapterFormatList) { + DeviceType[] devTypeArray = new DeviceType[] { + DeviceType.Hardware, DeviceType.Software, DeviceType.Reference }; + + foreach (DeviceType devType in devTypeArray) { + GraphicsDeviceInfo deviceInfo = new GraphicsDeviceInfo(); + deviceInfo.AdapterOrdinal = adapterInfo.AdapterOrdinal; + deviceInfo.DevType = devType; + try { + deviceInfo.Caps = Manager.GetDeviceCaps(adapterInfo.AdapterOrdinal, devType); + } + catch (DirectXException) { + continue; + } + + // Get info for each devicecombo on this device + EnumerateDeviceCombos(deviceInfo, adapterFormatList); + + // If at least one devicecombo for this device is found, + // add the deviceInfo to the list + if (deviceInfo.DeviceComboList.Count == 0) + continue; + adapterInfo.DeviceInfoList.Add(deviceInfo); + } + } + + + + + /// + /// Enumerates DeviceCombos for a particular device + /// + protected void EnumerateDeviceCombos(GraphicsDeviceInfo deviceInfo, ArrayList adapterFormatList) { + Format[] backBufferFormatArray = new Format[] { + Format.A8R8G8B8, Format.X8R8G8B8, Format.A2R10G10B10, + Format.R5G6B5, Format.A1R5G5B5, Format.X1R5G5B5, + }; + bool[] isWindowedArray = new bool[] { false, true }; + + // See which adapter formats are supported by this device + foreach (Format adapterFormat in adapterFormatList) { + foreach (Format backBufferFormat in backBufferFormatArray) { + if (GraphicsUtility.GetAlphaChannelBits(backBufferFormat) < AppMinAlphaChannelBits) + continue; + foreach (bool isWindowed in isWindowedArray) { + if (!isWindowed && AppRequiresWindowed) + continue; + if (isWindowed && AppRequiresFullscreen) + continue; + if (!Manager.CheckDeviceType(deviceInfo.AdapterOrdinal, deviceInfo.DevType, adapterFormat, backBufferFormat, isWindowed)) { + continue; + } + + // At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed + // DeviceCombo that is supported by the system. We still need to confirm that it's + // compatible with the app, and find one or more suitable depth/stencil buffer format, + // multisample type, vertex processing type, and present interval. + DeviceCombo deviceCombo = new DeviceCombo(); + deviceCombo.AdapterOrdinal = deviceInfo.AdapterOrdinal; + deviceCombo.DevType = deviceInfo.DevType; + deviceCombo.AdapterFormat = adapterFormat; + deviceCombo.BackBufferFormat = backBufferFormat; + deviceCombo.IsWindowed = isWindowed; + if (AppUsesDepthBuffer) { + BuildDepthStencilFormatList(deviceCombo); + if (deviceCombo.DepthStencilFormatList.Count == 0) + continue; + } + BuildMultiSampleTypeList(deviceCombo); + if (deviceCombo.MultiSampleTypeList.Count == 0) + continue; + BuildDepthStencilMultiSampleConflictList(deviceCombo); + BuildVertexProcessingTypeList(deviceInfo, deviceCombo); + if (deviceCombo.VertexProcessingTypeList.Count == 0) + continue; + BuildPresentIntervalList(deviceInfo, deviceCombo); + if (deviceCombo.PresentIntervalList.Count == 0) + continue; + + deviceInfo.DeviceComboList.Add(deviceCombo); + } + } + } + } + + + + + /// + /// Adds all depth/stencil formats that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildDepthStencilFormatList(DeviceCombo deviceCombo) { + DepthFormat[] depthStencilFormatArray = { + DepthFormat.D16, + DepthFormat.D15S1, + DepthFormat.D24X8, + DepthFormat.D24S8, + DepthFormat.D24X4S4, + DepthFormat.D32, + }; + + foreach (DepthFormat depthStencilFmt in depthStencilFormatArray) { + if (GraphicsUtility.GetDepthBits(depthStencilFmt) < AppMinDepthBits) + continue; + if (GraphicsUtility.GetStencilBits(depthStencilFmt) < AppMinStencilBits) + continue; + if (Manager.CheckDeviceFormat(deviceCombo.AdapterOrdinal, deviceCombo.DevType, deviceCombo.AdapterFormat, + Usage.DepthStencil, ResourceType.Surface, depthStencilFmt)) { + if (Manager.CheckDepthStencilMatch(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat, depthStencilFmt)) { + deviceCombo.DepthStencilFormatList.Add(depthStencilFmt); + } + } + } + } + + + + + /// + /// Adds all multisample types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildMultiSampleTypeList(DeviceCombo deviceCombo) { + MultiSampleType[] msTypeArray = { + MultiSampleType.None, + MultiSampleType.NonMaskable, + MultiSampleType.TwoSamples, + MultiSampleType.ThreeSamples, + MultiSampleType.FourSamples, + MultiSampleType.FiveSamples, + MultiSampleType.SixSamples, + MultiSampleType.SevenSamples, + MultiSampleType.EightSamples, + MultiSampleType.NineSamples, + MultiSampleType.TenSamples, + MultiSampleType.ElevenSamples, + MultiSampleType.TwelveSamples, + MultiSampleType.ThirteenSamples, + MultiSampleType.FourteenSamples, + MultiSampleType.FifteenSamples, + MultiSampleType.SixteenSamples, + }; + + foreach (MultiSampleType msType in msTypeArray) { + int result; + int qualityLevels = 0; + if (Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.BackBufferFormat, deviceCombo.IsWindowed, msType, out result, out qualityLevels)) { + deviceCombo.MultiSampleTypeList.Add(msType); + deviceCombo.MultiSampleQualityList.Add(qualityLevels); + } + } + } + + + + + /// + /// Finds any depthstencil formats that are incompatible with multisample types and + /// builds a list of them. + /// + public void BuildDepthStencilMultiSampleConflictList(DeviceCombo deviceCombo) { + DepthStencilMultiSampleConflict DSMSConflict; + + foreach (DepthFormat dsFmt in deviceCombo.DepthStencilFormatList) { + foreach (MultiSampleType msType in deviceCombo.MultiSampleTypeList) { + if (!Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, + deviceCombo.DevType, (Format)dsFmt, deviceCombo.IsWindowed, msType)) { + DSMSConflict = new DepthStencilMultiSampleConflict(); + DSMSConflict.DepthStencilFormat = dsFmt; + DSMSConflict.MultiSampleType = msType; + deviceCombo.DepthStencilMultiSampleConflictList.Add(DSMSConflict); + } + } + } + } + + + + + /// + /// Adds all vertex processing types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildVertexProcessingTypeList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + if (deviceInfo.Caps.DeviceCaps.SupportsHardwareTransformAndLight) { + if (deviceInfo.Caps.DeviceCaps.SupportsPureDevice) { + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.PureHardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.PureHardware); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Hardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Hardware); + } + if (AppUsesMixedVP && (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Mixed, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat))) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Mixed); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Software, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Software); + } + } + + + + + /// + /// Adds all present intervals that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildPresentIntervalList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + PresentInterval[] piArray = { + PresentInterval.Immediate, + PresentInterval.Default, + PresentInterval.One, + PresentInterval.Two, + PresentInterval.Three, + PresentInterval.Four, + }; + + foreach (PresentInterval pi in piArray) { + if (deviceCombo.IsWindowed) { + if (pi == PresentInterval.Two || + pi == PresentInterval.Three || + pi == PresentInterval.Four) { + // These intervals are not supported in windowed mode. + continue; + } + } + // Note that PresentInterval.Default is zero, so you + // can't do a caps check for it -- it is always available. + if (pi == PresentInterval.Default || + (deviceInfo.Caps.PresentationIntervals & pi) != (PresentInterval)0) { + deviceCombo.PresentIntervalList.Add(pi); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/d3dfont.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/d3dfont.cs new file mode 100644 index 0000000..2b374eb --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/d3dfont.cs @@ -0,0 +1,666 @@ +//----------------------------------------------------------------------------- +// File: D3DFont.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// A generic font class +/// +public class GraphicsFont { + public const int MaxNumfontVertices = 50*6; + + // Font rendering flags + [System.Flags] + public enum RenderFlags { + Centered = 0x0001, + TwoSided = 0x0002, + Filtered = 0x0004, + } + private System.Drawing.Font systemFont; + + private bool isZEnable = false; + public bool ZBufferEnable { get { return isZEnable; } set { isZEnable = value; } } + string ourFontName; // Font properties + int ourFontHeight; + + private Direct3D.Device device; + private TextureStateManager textureState0; + private TextureStateManager textureState1; + private SamplerStateManager samplerState0; + private RenderStateManager renderState; + private Direct3D.Texture fontTexture; + private Direct3D.VertexBuffer vertexBuffer; + private CustomVertex.TransformedColoredTextured[] fontVertices = new CustomVertex.TransformedColoredTextured[MaxNumfontVertices]; + + private int textureWidth; // Texture dimensions + private int textureHeight; + private float textureScale; + private int spacingPerChar; + private float[,] textureCoords = new float[128-32,4]; + + // Stateblocks for setting and restoring render states + private StateBlock savedStateBlock; + private StateBlock drawTextStateBlock; + + + + + /// + /// Create a new font object + /// + /// The font to use + public GraphicsFont(System.Drawing.Font f) { + ourFontName = f.Name; + ourFontHeight = (int)f.Size; + systemFont = f; + } + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName) : this(fontName, FontStyle.Regular, 12) { + } + + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName, FontStyle style) : this(fontName, style, 12) { + } + + + + + /// + /// Create a new font object + /// + /// The name of the font + /// The style + /// Size of the font + public GraphicsFont(string fontName, FontStyle style, int size) { + ourFontName = fontName; + ourFontHeight = size; + systemFont = new System.Drawing.Font(fontName, ourFontHeight, style); + } + + + + + /// + /// Attempt to draw the systemFont alphabet onto the provided texture + /// graphics. + /// + /// Graphics object on which to draw and measure the letters + /// If set, the method will test to see if the alphabet will fit without actually drawing + public void PaintAlphabet(Graphics g, bool measureOnly) { + string str; + float x = 0; + float y = 0; + Point p = new Point(0, 0); + Size size = new Size(0,0); + + // Calculate the spacing between characters based on line height + size = g.MeasureString(" ", systemFont).ToSize(); + x = spacingPerChar = (int) Math.Ceiling(size.Height * 0.3); + + for (char c = (char)32; c < (char)127; c++) { + str = c.ToString(); + // We need to do some things here to get the right sizes. The default implemententation of MeasureString + // will return a resolution independant size. For our height, this is what we want. However, for our width, we + // want a resolution dependant size. + Size resSize = g.MeasureString(str, systemFont).ToSize(); + size.Height = resSize.Height + 1; + + // Now the Resolution independent width + if (c != ' ') { // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + resSize = g.MeasureString(str, systemFont, p, StringFormat.GenericTypographic).ToSize(); + size.Width = resSize.Width; + } + else + size.Width = resSize.Width; + + if ((x + size.Width + spacingPerChar) > textureWidth) { + x = spacingPerChar; + y += size.Height; + } + + // Make sure we have room for the current character + if ((y + size.Height) > textureHeight) + throw new System.InvalidOperationException("Texture too small for alphabet"); + + if (!measureOnly) { + if (c != ' ') // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y), StringFormat.GenericTypographic); + else + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y)); + textureCoords[c-32,0] = ((float) (x + 0 - spacingPerChar)) / textureWidth; + textureCoords[c-32,1] = ((float) (y + 0 + 0)) / textureHeight; + textureCoords[c-32,2] = ((float) (x + size.Width + spacingPerChar)) / textureWidth; + textureCoords[c-32,3] = ((float) (y + size.Height + 0)) / textureHeight; + } + + x += size.Width + (2 * spacingPerChar); + } + + } + + + + + /// + /// Initialize the device objects + /// + /// The grpahics device used to initialize + public void InitializeDeviceObjects(Device dev) { + if (dev != null) { + // Set up our events + dev.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Keep a local copy of the device + device = dev; + textureState0 = device.TextureState[0]; + textureState1 = device.TextureState[1]; + samplerState0 = device.SamplerState[0]; + renderState = device.RenderState; + + // Create a bitmap on which to measure the alphabet + Bitmap bmp = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Graphics g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Establish the font and texture size + textureScale = 1.0f; // Draw fonts into texture without scaling + + // Calculate the dimensions for the smallest power-of-two texture which + // can hold all the printable characters + textureWidth = textureHeight = 128; + for (;;) { + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // Scale up the texture size and try again + textureWidth *= 2; + textureHeight *= 2; + continue; + } + + break; + } + + // If requested texture is too big, use a smaller texture and smaller font, + // and scale up when rendering. + Direct3D.Caps d3dCaps = device.DeviceCaps; + + // If the needed texture is too large for the video card... + if (textureWidth > d3dCaps.MaxTextureWidth) { + // Scale the font size down to fit on the largest possible texture + textureScale = (float)d3dCaps.MaxTextureWidth / (float)textureWidth; + textureWidth = textureHeight = d3dCaps.MaxTextureWidth; + + for(;;) { + // Create a new, smaller font + ourFontHeight = (int) Math.Floor(ourFontHeight * textureScale); + systemFont = new System.Drawing.Font(systemFont.Name, ourFontHeight, systemFont.Style); + + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // If that still doesn't fit, scale down again and continue + textureScale *= 0.9F; + continue; + } + + break; + } + } + + // Release the bitmap used for measuring and create one for drawing + bmp.Dispose(); + bmp = new Bitmap(textureWidth, textureHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Draw the alphabet + PaintAlphabet(g, false); + + // Create a new texture for the font from the bitmap we just created + fontTexture = Texture.FromBitmap(device, bmp, 0, Pool.Managed); + RestoreDeviceObjects(null, null); + } + + + + + /// + /// Restore the font after a device has been reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColoredTextured), MaxNumfontVertices, + device, Usage.WriteOnly | Usage.Dynamic, 0, Pool.Default); + + Surface surf = device.GetRenderTarget( 0 ); + bool bSupportsAlphaBlend = Manager.CheckDeviceFormat(device.DeviceCaps.AdapterOrdinal, + device.DeviceCaps.DeviceType, device.DisplayMode.Format, + Usage.RenderTarget | Usage.QueryPostPixelShaderBlending, ResourceType.Surface, + surf.Description.Format ); + + // Create the state blocks for rendering text + for (int which=0; which < 2; which++) { + device.BeginStateBlock(); + device.SetTexture(0, fontTexture); + + if (isZEnable) + renderState.ZBufferEnable = true; + else + renderState.ZBufferEnable = false; + + if( bSupportsAlphaBlend ) { + renderState.AlphaBlendEnable = true; + renderState.SourceBlend = Blend.SourceAlpha; + renderState.DestinationBlend = Blend.InvSourceAlpha; + } + else { + renderState.AlphaBlendEnable = false; + } + renderState.AlphaTestEnable = true; + renderState.ReferenceAlpha = 0x08; + renderState.AlphaFunction = Compare.GreaterEqual; + renderState.FillMode = FillMode.Solid; + renderState.CullMode = Cull.CounterClockwise; + renderState.StencilEnable = false; + renderState.Clipping = true; + device.ClipPlanes.DisableAll(); + renderState.VertexBlend = VertexBlend.Disable; + renderState.IndexedVertexBlendEnable = false; + renderState.FogEnable = false; + renderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; + textureState0.ColorOperation = TextureOperation.Modulate; + textureState0.ColorArgument1 = TextureArgument.TextureColor; + textureState0.ColorArgument2 = TextureArgument.Diffuse; + textureState0.AlphaOperation = TextureOperation.Modulate; + textureState0.AlphaArgument1 = TextureArgument.TextureColor; + textureState0.AlphaArgument2 = TextureArgument.Diffuse; + textureState0.TextureCoordinateIndex = 0; + textureState0.TextureTransform = TextureTransform.Disable; // REVIEW + textureState1.ColorOperation = TextureOperation.Disable; + textureState1.AlphaOperation = TextureOperation.Disable; + samplerState0.MinFilter = TextureFilter.Point; + samplerState0.MagFilter = TextureFilter.Point; + samplerState0.MipFilter = TextureFilter.None; + + if (which==0) + savedStateBlock = device.EndStateBlock(); + else + drawTextStateBlock = device.EndStateBlock(); + } + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text) { + DrawText(xpos, ypos, color, text, RenderFlags.Filtered); + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text, RenderFlags flags) { + if (text == null) + return; + + // Setup renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.SetTexture(0, fontTexture); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Adjust for character spacing + xpos -= spacingPerChar; + float fStartX = xpos; + + // Fill vertex buffer + int iv = 0; + int dwNumTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / textureScale; + float h = (ty2-ty1) * textureHeight / textureScale; + + int intColor = color.ToArgb(); + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + dwNumTriangles += 2; + + if (dwNumTriangles*3 > (MaxNumfontVertices-6)) { + // Set the data for the vertexbuffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + dwNumTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar); + } + + // Set the data for the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (dwNumTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + Viewport vp = device.Viewport; + float xpos = (x+1.0f)*vp.Width/2; + float ypos = (y+1.0f)*vp.Height/2; + float sz = z; + float rhw = 1.0f; + float fLineHeight = (textureCoords[0,3] - textureCoords[0,1]) * textureHeight; + + // Adjust for character spacing + xpos -= spacingPerChar * (fXScale*vp.Height)/fLineHeight; + float fStartX = xpos; + + // Fill vertex buffer + int numTriangles = 0; + int realColor = color.ToArgb(); + int iv = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += fYScale*vp.Height; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1)*textureWidth; + float h = (ty2-ty1)*textureHeight; + + w *= (fXScale*vp.Height)/fLineHeight; + h *= (fYScale*vp.Height)/fLineHeight; + + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + numTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar) * (fXScale*vp.Height)/fLineHeight; + } + + // Unlock and render the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text) { + this.DrawTextScaled(x,y,z,fXScale, fYScale, color, text, 0); + } + + + + + /// + /// Renders 3D text + /// + public void Render3DText(string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.PositionNormalTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0, VertexInformation.GetFormatSize(CustomVertex.PositionNormalTextured.Format)); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Position for each text element + float x = 0.0f; + float y = 0.0f; + + // Center the text block at the origin + if ((flags & RenderFlags.Centered) != 0) { + System.Drawing.SizeF sz = GetTextExtent(text); + x = -(((float)sz.Width)/10.0f)/2.0f; + y = -(((float)sz.Height)/10.0f)/2.0f; + } + + // Turn off culling for two-sided text + if ((flags & RenderFlags.TwoSided) != 0) + renderState.CullMode = Cull.None; + + // Adjust for character spacing + x -= spacingPerChar / 10.0f; + float fStartX = x; + + // Fill vertex buffer + GraphicsStream strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + int numTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + x = fStartX; + y -= (textureCoords[0,3]-textureCoords[0,1])*textureHeight/10.0f; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / (10.0f * textureScale); + float h = (ty2-ty1) * textureHeight / (10.0f * textureScale); + + if (c != ' ') { + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+0,0), new Vector3(0,0,-1), tx1, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+h,0), new Vector3(0,0,-1), tx2, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.Unlock(); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + numTriangles = 0; + } + } + + x += w - (2 * spacingPerChar) / 10.0f; + } + + // Unlock and render the vertex buffer + vertexBuffer.Unlock(); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Get the dimensions of a text string + /// + private System.Drawing.SizeF GetTextExtent(string text) { + if (null == text || text == string.Empty) + throw new System.ArgumentNullException(); + + float fRowWidth = 0.0f; + float fRowHeight = (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + float fWidth = 0.0f; + float fHeight = fRowHeight; + + foreach (char c in text) { + if (c == '\n') { + fRowWidth = 0.0f; + fHeight += fRowHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float tx2 = textureCoords[c-32,2]; + + fRowWidth += (tx2-tx1)*textureWidth - 2*spacingPerChar; + + if (fRowWidth > fWidth) + fWidth = fRowWidth; + } + + return new System.Drawing.SizeF(fWidth, fHeight); + } + + + + + /// + /// Cleanup any resources being used + /// + public void Dispose(object sender, EventArgs e) { + if (systemFont != null) + systemFont.Dispose(); + + systemFont = null; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/d3dutil.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/d3dutil.cs new file mode 100644 index 0000000..ea2d5a3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/d3dutil.cs @@ -0,0 +1,928 @@ +//----------------------------------------------------------------------------- +// File: D3DUtil.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Windows.Forms; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// Various helper functions for graphics samples +/// +public class GraphicsUtility { + /// + /// Private Constructor + /// + private GraphicsUtility() { + } + + + + /// + /// Initializes a Material structure, setting the diffuse and ambient + /// colors. It does not set emissive or specular colors. + /// + /// The ambient and diffuse color + /// A defined material + public static Direct3D.Material InitMaterial(System.Drawing.Color c) { + Material mtrl = new Material(); + mtrl.Ambient = mtrl.Diffuse = c; + return mtrl; + } + + + + + /// + /// Initializes a light, setting the light position. The + /// diffuse color is set to white; specular and ambient are left as black. + /// + /// Which light to initialize + /// The type + public static void InitLight(Light light, LightType ltType, float x, float y, float z) { + light.Type = ltType; + light.Diffuse = System.Drawing.Color.White; + light.Position = new Vector3(x,y,z); + light.Direction = Vector3.Normalize(light.Position); + light.Range = 1000.0f; + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename, Format format) { + // Get the path to the texture + string path = DXUtil.FindMediaFile(null, textureFilename); + + // Create the texture using D3DX + return TextureLoader.FromFile(device, path, D3DX.Default, D3DX.Default, D3DX.Default, 0, format, + Pool.Managed, Filter.Triangle|Filter.Mirror, + Filter.Triangle|Filter.Mirror, 0); + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename) { + return GraphicsUtility.CreateTexture(device, textureFilename, Format.Unknown); + } + + + + + + /// + /// Returns a view matrix for rendering to a face of a cubemap. + /// + public static Matrix GetCubeMapViewMatrix(CubeMapFace face) { + Vector3 vEyePt = new Vector3(0.0f, 0.0f, 0.0f); + Vector3 vLookDir = new Vector3(); + Vector3 vUpDir = new Vector3(); + + switch (face) { + case CubeMapFace.PositiveX: + vLookDir = new Vector3(1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeX: + vLookDir = new Vector3(-1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.PositiveY: + vLookDir = new Vector3(0.0f, 1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f,-1.0f); + break; + case CubeMapFace.NegativeY: + vLookDir = new Vector3(0.0f,-1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f, 1.0f); + break; + case CubeMapFace.PositiveZ: + vLookDir = new Vector3(0.0f, 0.0f, 1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeZ: + vLookDir = new Vector3(0.0f, 0.0f,-1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + } + + // Set the view transform for this cubemap surface + Matrix matView = Matrix.LookAtLH(vEyePt, vLookDir, vUpDir); + return matView; + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control, float fTrackBallRadius) { + System.Drawing.Point pt = System.Windows.Forms.Cursor.Position; + System.Drawing.Rectangle rc = control.ClientRectangle; + pt = control.PointToClient(pt); + float xpos = (((2.0f * pt.X) / (rc.Right-rc.Left)) - 1); + float ypos = (((2.0f * pt.Y) / (rc.Bottom-rc.Top)) - 1); + float sz; + + if (xpos == 0.0f && ypos == 0.0f) + return new Quaternion(0.0f, 0.0f, 0.0f, 1.0f); + + float d2 = (float)Math.Sqrt(xpos*xpos + ypos*ypos); + + if (d2 < fTrackBallRadius * 0.70710678118654752440) // Inside sphere + sz = (float)Math.Sqrt(fTrackBallRadius*fTrackBallRadius - d2*d2); + else // On hyperbola + sz = (fTrackBallRadius*fTrackBallRadius) / (2.0f*d2); + + // Get two points on trackball's sphere + Vector3 p1 = new Vector3(xpos, ypos, sz); + Vector3 p2 = new Vector3(0.0f, 0.0f, fTrackBallRadius); + + // Get axis of rotation, which is cross product of p1 and p2 + Vector3 axis = Vector3.Cross(p1,p2); + + // Calculate angle for the rotation about that axis + float t = Vector3.Length(Vector3.Subtract(p2,p1)) / (2.0f*fTrackBallRadius); + if (t > +1.0f) t = +1.0f; + if (t < -1.0f) t = -1.0f; + float fAngle = (float)(2.0f * Math.Asin(t)); + + // Convert axis to quaternion + return Quaternion.RotationAxis(axis, fAngle); + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control) { + return GetRotationFromCursor(control, 1.0f); + } + + + + + /// + /// Axis to axis quaternion double angle (no normalization) + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by 2*THETA. + /// + public static Quaternion D3DXQuaternionUnitAxisToUnitAxis2(Vector3 fromVector, Vector3 toVector) { + Vector3 axis = Vector3.Cross(fromVector, toVector); // proportional to sin(theta) + return new Quaternion(axis.X, axis.Y, axis.Z, Vector3.Dot(fromVector, toVector)); + } + + + + + /// + /// Axis to axis quaternion + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by theta. + /// + public static Quaternion D3DXQuaternionAxisToAxis(Vector3 fromVector, Vector3 toVector) { + Vector3 vA = Vector3.Normalize(fromVector), vB = Vector3.Normalize(toVector); + Vector3 vHalf = Vector3.Add(vA,vB); + vHalf = Vector3.Normalize(vHalf); + return GraphicsUtility.D3DXQuaternionUnitAxisToUnitAxis2(vA, vHalf); + } + + + + + /// + /// Gets the number of ColorChanelBits from a format + /// + static public int GetColorChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 8; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 8; + case Format.R5G6B5: + return 5; + case Format.X1R5G5B5: + return 5; + case Format.A1R5G5B5: + return 5; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 2; + case Format.A8R3G3B2: + return 2; + case Format.X4R4G4B4: + return 4; + case Format.A2B10G10R10: + return 10; + case Format.A2R10G10B10: + return 10; + default: + return 0; + } + } + + + + + /// + /// Gets the number of alpha channel bits + /// + static public int GetAlphaChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 0; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 0; + case Format.R5G6B5: + return 0; + case Format.X1R5G5B5: + return 0; + case Format.A1R5G5B5: + return 1; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 0; + case Format.A8R3G3B2: + return 8; + case Format.X4R4G4B4: + return 0; + case Format.A2B10G10R10: + return 2; + case Format.A2R10G10B10: + return 2; + default: + return 0; + } + } + + + + + /// + /// Gets the number of depth bits + /// + static public int GetDepthBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 16; + case DepthFormat.D15S1: + return 15; + case DepthFormat.D24X8: + return 24; + case DepthFormat.D24S8: + return 24; + case DepthFormat.D24X4S4: + return 24; + case DepthFormat.D32: + return 32; + default: + return 0; + } + } + + + + + /// + /// Gets the number of stencil bits + /// + static public int GetStencilBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 0; + case DepthFormat.D15S1: + return 1; + case DepthFormat.D24X8: + return 0; + case DepthFormat.D24S8: + return 8; + case DepthFormat.D24X4S4: + return 4; + case DepthFormat.D32: + return 0; + default: + return 0; + } + } + + + + + /// + /// Assembles and creates a file-based vertex shader + /// + public static VertexShader CreateVertexShader(Device device, string filename) { + GraphicsStream code = null; + string path = null; + + // Get the path to the vertex shader file + path = DXUtil.FindMediaFile(null, filename); + + // Assemble the vertex shader file + code = ShaderLoader.FromFile(path, null, 0); + + // Create the vertex shader + return new VertexShader(device, code); + } + +} + + + + +/// +/// An arc ball class +/// +public class GraphicsArcBall { + private int internalWidth; // ArcBall's window width + private int internalHeight; // ArcBall's window height + private float internalradius; // ArcBall's radius in screen coords + private float internalradiusTranslation; // ArcBall's radius for translating the target + + private Quaternion internaldownQuat; // Quaternion before button down + private Quaternion internalnowQuat; // Composite quaternion for current drag + private Matrix internalrotationMatrix; // Matrix for arcball's orientation + private Matrix internalrotationDelta; // Matrix for arcball's orientation + private Matrix internaltranslationMatrix; // Matrix for arcball's position + private Matrix internaltranslationDelta; // Matrix for arcball's position + private bool internaldragging; // Whether user is dragging arcball + private bool internaluseRightHanded; // Whether to use RH coordinate system + private int saveMouseX = 0; // Saved mouse position + private int saveMouseY = 0; + private Vector3 internalvectorDown; // Button down vector + System.Windows.Forms.Control parent; // parent + + + + + /// + /// Constructor + /// + public GraphicsArcBall(System.Windows.Forms.Control p) { + internaldownQuat = Quaternion.Identity; + internalnowQuat = Quaternion.Identity; + internalrotationMatrix = Matrix.Identity; + internalrotationDelta = Matrix.Identity; + internaltranslationMatrix = Matrix.Identity; + internaltranslationDelta = Matrix.Identity; + internaldragging = false; + internalradiusTranslation = 1.0f; + internaluseRightHanded = false; + + parent = p; + // Hook the events + p.MouseDown += new MouseEventHandler(this.OnContainerMouseDown); + p.MouseUp += new MouseEventHandler(this.OnContainerMouseUp); + p.MouseMove += new MouseEventHandler(this.OnContainerMouseMove); + } + + + + + /// + /// Set the window dimensions + /// + public void SetWindow(int width, int height, float radius) { + // Set ArcBall info + internalWidth = width; + internalHeight = height; + internalradius = radius; + } + + + + + /// + /// Screen coords to a vector + /// + private Vector3 ScreenToVector(int xpos, int ypos) { + // Scale to screen + float x = -(xpos - internalWidth/2) / (internalradius*internalWidth/2); + float y = (ypos - internalHeight/2) / (internalradius*internalHeight/2); + + if (internaluseRightHanded) { + x = -x; + y = -y; + } + + float z = 0.0f; + float mag = x*x + y*y; + + if (mag > 1.0f) { + float scale = 1.0f/(float)Math.Sqrt(mag); + x *= scale; + y *= scale; + } + else + z = (float)Math.Sqrt(1.0f - mag); + + // Return vector + return new Vector3(x, y, z); + } + + + + + /// + /// Fired when the containers mouse button is down + /// + private void OnContainerMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { + // Store off the position of the cursor when the button is pressed + saveMouseX = e.X; + saveMouseY = e.Y; + + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // Start drag mode + internaldragging = true; + internalvectorDown = ScreenToVector(e.X, e.Y); + internaldownQuat = internalnowQuat; + } + } + + + + + /// + /// Fired when the containers mouse button has been released + /// + private void OnContainerMouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // End drag mode + internaldragging = false; + } + } + + + + + /// + /// Fired when the containers mouse is moving + /// + private void OnContainerMouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + if (internaldragging) { + // recompute nowQuat + Vector3 vCur = ScreenToVector(e.X, e.Y); + Quaternion qAxisToAxis = GraphicsUtility.D3DXQuaternionAxisToAxis(internalvectorDown, vCur); + internalnowQuat = internaldownQuat; + internalnowQuat = Quaternion.Multiply(internalnowQuat,qAxisToAxis); + internalrotationDelta = Matrix.RotationQuaternion(qAxisToAxis); + } + else + internalrotationDelta = Matrix.Identity; + + internalrotationMatrix = Matrix.RotationQuaternion(internalnowQuat); + internaldragging = true; + } + + if ((e.Button == System.Windows.Forms.MouseButtons.Right) || (e.Button == System.Windows.Forms.MouseButtons.Middle)) { + // Normalize based on size of window and bounding sphere radius + float fDeltaX = (saveMouseX-e.X) * internalradiusTranslation / internalWidth; + float fDeltaY = (saveMouseY-e.Y) * internalradiusTranslation / internalHeight; + + if (e.Button == System.Windows.Forms.MouseButtons.Right) { + internaltranslationDelta = Matrix.Translation(-2 * fDeltaX, 2 * fDeltaY, 0.0f); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + if (e.Button == System.Windows.Forms.MouseButtons.Middle) { + internaltranslationDelta = Matrix.Translation(0.0f, 0.0f, 5 * fDeltaY); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + + // Store mouse coordinate + saveMouseX = e.X; + saveMouseY = e.Y; + } + } + + #region Various properties of the class + public float Radius { + set { + internalradiusTranslation = value; } + } + public bool RightHanded { + get { return internaluseRightHanded; } + set { internaluseRightHanded = value; } + } + public Matrix RotationMatrix { + get { return internalrotationMatrix; } + } + public Matrix RotationDeltaMatrix { + get { return internalrotationDelta; } + } + public Matrix TranslationMatrix { + get { return internaltranslationMatrix; } + } + public Matrix TranslationDeltaMatrix { + get { return internaltranslationDelta; } + } + public bool IsBeingDragged { + get { return internaldragging; } + } + #endregion +} + + + + +/// +/// Handles our meshes +/// +public class GraphicsMesh : IDisposable { + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + + + + + /// + /// Constructor + /// + /// The initial filename + public GraphicsMesh(string filename) { + fileName = filename; + } + public GraphicsMesh() : this ("CD3DFile_Mesh") {} + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + string strPath = null; + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Find the path for the file, and convert it to ANSI (for the D3DX API) + strPath = DXUtil.FindMediaFile(null, filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(strPath, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + } + + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. Note: because we are passing in + // no flags, the default behavior is to clone into local memory. + localMemoryMesh = systemMemoryMesh.Clone(0, systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(Device device, bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render(Device device) { + Render(device, true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/dinput.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/dinput.cs new file mode 100644 index 0000000..f0829a0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/dinput.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + +/// +/// This class is where the DirectInput routines +/// for the application resides. +/// +public class InputClass { + + private Control owner = null; + private Device localDevice = null; + + public InputClass(Control owner) { + this.owner = owner; + + localDevice = new Device(SystemGuid.Keyboard); + localDevice.SetDataFormat(DeviceDataFormat.Keyboard); + localDevice.SetCooperativeLevel(owner, CooperativeLevelFlags.Foreground | CooperativeLevelFlags.NonExclusive); + } + + public KeyboardState GetInputState() { + KeyboardState kbState = null; + + try { + kbState = localDevice.GetCurrentKeyboardState(); + } + catch(InputException) { + do { + Application.DoEvents(); + try{ localDevice.Acquire(); } + catch (InputLostException) { + continue; } + catch(OtherApplicationHasPriorityException) { + continue; } + + break; + + }while( true ); + } + return kbState; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/dplay.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/dplay.cs new file mode 100644 index 0000000..be86825 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/dplay.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + +/// +/// The class that houses DirectPlay code for the application. +/// +public class PlayClass : IDisposable { + private MessageDelegate message = null; + + private GameClass parent = null; + + public Peer peerObject = null; + private ConnectWizard Connect = null; + private ArrayList PlayerList = new ArrayList(); + private int LocalPlayerID = 0; + public Guid AppGuid = new Guid(0x876a3036, 0xffd7, 0x46bc, 0x92, 0x9, 0xb4, 0x2f, 0x61, 0x7b, 0x9b, 0xF1); + + public struct Players { + public int dpnID; + public string Name; + public Players(int id, string n) { + dpnID = id; Name = n; } + } + + public void Dispose() { + peerObject.Dispose(); + } + + public PlayClass(GameClass parent) { + this.parent = parent; + this.peerObject = peerObject; + this.message = new MessageDelegate(parent.MessageArrived); + + peerObject = new Peer(); + // First set up our event handlers (We only need events for the ones we care about) + peerObject.PlayerCreated += new PlayerCreatedEventHandler(this.PlayerCreated); + peerObject.PlayerDestroyed += new PlayerDestroyedEventHandler(this.PlayerDestroyed); + peerObject.HostMigrated += new HostMigratedEventHandler(this.HostMigrated); + peerObject.Receive += new ReceiveEventHandler(this.DataReceived); + peerObject.SessionTerminated += new SessionTerminatedEventHandler(this.SessionTerminated); + + Connect = new ConnectWizard(peerObject, AppGuid, "Step2"); + if (!Connect.StartWizard()) { + MessageBox.Show("DirectPlay initialization was incomplete. Application will terminate."); + throw new DirectXException(); + } + } + + public void WriteMessage(byte msg) { + NetworkPacket packet = new NetworkPacket(); + + packet.Write(msg); + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.Guaranteed); + } + + #region DirectPlayEvents + /// + // These are the events the app will handle + // when DPlay fires them. + /// + private void PlayerCreated(object sender, PlayerCreatedEventArgs dpMessage) { + // Get the PlayerInformation and store it + PlayerInformation dpPeer = peerObject.GetPeerInformation(dpMessage.Message.PlayerID); + Players oPlayer = new Players(dpMessage.Message.PlayerID,dpPeer.Name); + // We lock the data here since it is shared across multiple threads. + lock (PlayerList) { + PlayerList.Add(oPlayer); + } + // Save this player id if it's ourselves + if (dpPeer.Local) + LocalPlayerID = dpMessage.Message.PlayerID; + + } + private void PlayerDestroyed(object sender, PlayerDestroyedEventArgs dpMessage) { + // Remove this player from our list + // We lock the data here since it is shared across multiple threads. + lock (PlayerList) { + foreach (Players player in PlayerList) { + if (dpMessage.Message.PlayerID == player.dpnID) { + PlayerList.Remove(player); + break; + } + } + } + } + private void HostMigrated(object sender, HostMigratedEventArgs dpMessage) { + if (LocalPlayerID == dpMessage.Message.NewHostID) { + // This application instance is the new host, update the UI + parent.Text += " (HOST)"; + } + } + private void DataReceived(object sender, ReceiveEventArgs dpMessage) { + lock(this) { + byte data = (byte)dpMessage.Message.ReceiveData.Read(typeof(byte)); + message(data); + } + } + private void SessionTerminated(object sender, SessionTerminatedEventArgs dpMessage) { + // This session is being terminated, let the user know + if (dpMessage.Message.ResultCode == ResultCode.HostTerminatedSession) + MessageBox.Show("The Host has terminated this session. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + else + MessageBox.Show("The session has been lost. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + + // This will post a message on the main thread to shut down our form + parent.BeginInvoke(new PeerCloseCallback(parent.PeerClose)); + } + #endregion +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step07/main.cs b/Source Code updated 08-12-05/Spacewar3D/Step07/main.cs new file mode 100644 index 0000000..1ed0210 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step07/main.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Container = System.ComponentModel.Container; + + + /// + /// The main windows form for the application. + /// +public class MainClass { + + private GameClass game = null; + private SplashScreen splash = null; + private bool enableNetwork = false; + public bool EnableNetwork { get { return enableNetwork; } set { enableNetwork = value; } } + + private Size gameFormSize; + public Size GameFormSize { get { return gameFormSize; } set { gameFormSize = value; } } + + private bool fullScreen = false; + public bool FullScreen { get { return fullScreen; } set { fullScreen = value; } } + + /// + // Main entry point of the application. + /// + public static void Main() { + MainClass m = new MainClass(); + } + + public MainClass() { + + //display the splash screen and determine network status + splash = new SplashScreen(this); + splash.ShowDialog(); + + try { + game = new GameClass(fullScreen, gameFormSize, enableNetwork); + } + catch(DirectXException) { + return; + } + if( game.CreateGraphicsSample() ) + game.Run(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/App.config b/Source Code updated 08-12-05/Spacewar3D/Step08/App.config new file mode 100644 index 0000000..5bbb96b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/BGPointer.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/BGPointer.cs new file mode 100644 index 0000000..4ad563f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/BGPointer.cs @@ -0,0 +1,36 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// Summary description for BGPointer. + /// +public class BGPointer { + private PositionedMesh arrowMesh; + private Device device; + + + public BGPointer(Device device) { + this.device = device; + arrowMesh = new PositionedMesh(device,"arrow-yel.x"); + arrowMesh.Position.Scale(2.0f, 2.0f, 2.0f); + } + + public void Render() { + arrowMesh.Render(); + } + + public void Point(WorldPosition ourPosition, WorldPosition opponentWorldPosition) { + arrowMesh.Position.Move(ourPosition.Location.X, ourPosition.Location.Y, + ourPosition.Location.Z); + Vector3 pointVector = opponentWorldPosition.Location - ourPosition.Location; + + float XRot, YRot; + XRot = (float) Math.Atan2(-pointVector.Y, Math.Sqrt(pointVector.X * pointVector.X + + pointVector.Z * pointVector.Z)); + YRot = (float) Math.Atan2(pointVector.X, pointVector.Z); + arrowMesh.Position.Rotate(XRot, YRot, 0.0f); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/Camera.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/Camera.cs new file mode 100644 index 0000000..c8e3944 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/Camera.cs @@ -0,0 +1,119 @@ +using System; +using Microsoft.DirectX; + + + /// + /// Summary description for Camera. + /// +public class Camera { + + protected float velocity; + + + protected float xPos, yPos, zPos; + protected float xRot, yRot, zRot; + + protected float startXPos, startYPos, startZPos; + protected float startXRot, startYRot, startZRot; + + protected float endXPos, endYPos, endZPos; + protected float endXRot, endYRot, endZRot; + + protected Matrix viewMatrix; + protected Matrix translationMatrix; + protected Matrix rotationMatrix; + + public float XPosition { get { return xPos; } } + public float YPosition { get { return yPos; } } + public float ZPosition { get { return zPos; } } + + public float XRotation { get { return xRot; } } + public float YRotation { get { return yRot; } } + public float ZRotation { get { return zRot; } } + + + public Vector3 Loc { + get { + return new Vector3(xPos,yPos,zPos); + } + set { + Vector3 loc = value; + xPos = loc.X; + yPos = loc.Y; + zPos = loc.Z; + } + + } + + public Matrix ViewMatrix { + get { + Update(); + return viewMatrix; + } + set { + viewMatrix = value; + } + + } + + + public Camera() { + Move(0.0f,0.0f,0.0f); + Rotate(0.0f,0.0f,0.0f); + Update(); + } + + + public void Update() { // Update transformation matrix + viewMatrix = translationMatrix * rotationMatrix; + } + + public void Move(float XPos, float YPos, float ZPos) { + xPos = XPos; + yPos = YPos; + zPos = ZPos; + translationMatrix = Matrix.Translation( -xPos, -yPos, -zPos ); + } + + public void MoveRel(float XAdd, float YAdd, float ZAdd) { + Move (xPos + XAdd, yPos + YAdd, zPos + ZAdd); + + } + + public void Rotate(float XRot, float YRot, float ZRot) { + Matrix xRotation, yRotation, zRotation; + + xRot = XRot; + yRot = YRot; + zRot = ZRot; + + xRotation = Matrix.RotationX( - xRot ); + yRotation = Matrix.RotationY( - yRot ); + zRotation = Matrix.RotationZ( - zRot ); + + rotationMatrix = zRotation; + rotationMatrix *= yRotation; + rotationMatrix *= xRotation; + + } + + public void RotateRel(float XAdd, float YAdd, float ZAdd) { + Rotate (xRot + XAdd, yRot + YAdd, zRot + ZAdd); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/CameraMode.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/CameraMode.cs new file mode 100644 index 0000000..fc8f03a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/CameraMode.cs @@ -0,0 +1,9 @@ +using System; + + +public enum CameraMode { + ChaseMode, + CockpitMode, + Fixed +}; + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/Constants.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/Constants.cs new file mode 100644 index 0000000..22d420a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/Constants.cs @@ -0,0 +1,39 @@ +using System; +using Microsoft.DirectX.Direct3D; +using Microsoft.DirectX; + + + /// + /// GamePlay constants. You can tune the game by adjusting these values. + /// +sealed public class Constants { + static public Random random = new Random((int) DateTime.Now.Ticks); + + public const float EngineThrust = 0.3f; + public const float DyingCycle = 2; + public const float DeadCycleWait = 2; + public const float HyperChargeWait = 3; + public const float HyperCycleWait = 2; + public const float HyperSuccessFactor = 0.8f; // initial success factor + public const float HyperSuccessDegradation = 0.1f; // degradation per use... + public const float ShipCollisionLimit = 15f; + public const float MaxVelocity = 125.0f; + public const float ThrustPower = 1.001f; + + public const int ShotLifetime = 4; + public const int NumShots = 12; + public const float ShotVelocity = 350f; + public const float ShotDeltaTime = 0.10f; + public const int ShotInitialMove = 3; // times to update shot so it shows up outside the ship... + public const int ShotCollisionLimit = 10; + + + public const float StatusMessageDisplayTime = 5.0f; + + + + public const long RemoteTickTimeout = 5; // five seconds... + + private Constants() { + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/D3DSettingsForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/D3DSettingsForm.cs new file mode 100644 index 0000000..889162a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/D3DSettingsForm.cs @@ -0,0 +1,1037 @@ +//----------------------------------------------------------------------------- +// File: D3DSettingsForm.cs +// +// Desc: Application form for setting up user defined display settings +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + + + + + +/// +/// A form to allow the user to change the current D3D settings. +/// +public class D3DSettingsForm : System.Windows.Forms.Form { + private D3DEnumeration enumeration; + public D3DSettings settings; // Potential new D3D settings + + private System.Windows.Forms.GroupBox adapterDeviceGroupBox; + private System.Windows.Forms.Label displayAdapterLabel; + private System.Windows.Forms.ComboBox adapterComboBox; + private System.Windows.Forms.Label deviceLabel; + private System.Windows.Forms.ComboBox deviceComboBox; + private System.Windows.Forms.GroupBox modeSettingsGroupBox; + private System.Windows.Forms.RadioButton windowedRadioButton; + private System.Windows.Forms.RadioButton fullscreenRadioButton; + private System.Windows.Forms.Label adapterFormatLabel; + private System.Windows.Forms.ComboBox adapterFormatComboBox; + private System.Windows.Forms.Label resolutionLabel; + private System.Windows.Forms.ComboBox resolutionComboBox; + private System.Windows.Forms.Label refreshRateLabel; + private System.Windows.Forms.ComboBox refreshRateComboBox; + private System.Windows.Forms.GroupBox otherSettingsGroupBox; + private System.Windows.Forms.Label backBufferFormatLabel; + private System.Windows.Forms.ComboBox backBufferFormatComboBox; + private System.Windows.Forms.Label depthStencilBufferLabel; + private System.Windows.Forms.ComboBox depthStencilBufferComboBox; + private System.Windows.Forms.Label multisampleLabel; + private System.Windows.Forms.ComboBox multisampleComboBox; + private System.Windows.Forms.Label vertexProcLabel; + private System.Windows.Forms.ComboBox vertexProcComboBox; + private System.Windows.Forms.Label presentIntervalLabel; + private System.Windows.Forms.ComboBox presentIntervalComboBox; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.ComboBox multisampleQualityComboBox; + private System.Windows.Forms.Label multisampleQualityLabel; + + + + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + + /// + /// Constructor. Pass in an enumeration and the current D3D settings. + /// + public D3DSettingsForm(D3DEnumeration enumerationParam, D3DSettings settingsParam) { + enumeration = enumerationParam; + settings = settingsParam.Clone(); + + // Required for Windows Form Designer support + InitializeComponent(); + + // Fill adapter combo box. Updating the selected adapter will trigger + // updates of the rest of the dialog. + foreach (GraphicsAdapterInfo adapterInfo in enumeration.AdapterInfoList) { + adapterComboBox.Items.Add(adapterInfo); + if (adapterInfo.AdapterOrdinal == settings.AdapterOrdinal) + adapterComboBox.SelectedItem = adapterInfo; + } + if (adapterComboBox.SelectedItem == null && adapterComboBox.Items.Count > 0) + adapterComboBox.SelectedIndex = 0; + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + if (components != null) + components.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.adapterDeviceGroupBox = new System.Windows.Forms.GroupBox(); + this.deviceComboBox = new System.Windows.Forms.ComboBox(); + this.deviceLabel = new System.Windows.Forms.Label(); + this.adapterComboBox = new System.Windows.Forms.ComboBox(); + this.displayAdapterLabel = new System.Windows.Forms.Label(); + this.fullscreenRadioButton = new System.Windows.Forms.RadioButton(); + this.cancelButton = new System.Windows.Forms.Button(); + this.otherSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.multisampleQualityComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleQualityLabel = new System.Windows.Forms.Label(); + this.multisampleComboBox = new System.Windows.Forms.ComboBox(); + this.backBufferFormatComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferLabel = new System.Windows.Forms.Label(); + this.backBufferFormatLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcLabel = new System.Windows.Forms.Label(); + this.presentIntervalComboBox = new System.Windows.Forms.ComboBox(); + this.presentIntervalLabel = new System.Windows.Forms.Label(); + this.resolutionComboBox = new System.Windows.Forms.ComboBox(); + this.windowedRadioButton = new System.Windows.Forms.RadioButton(); + this.resolutionLabel = new System.Windows.Forms.Label(); + this.refreshRateComboBox = new System.Windows.Forms.ComboBox(); + this.adapterFormatLabel = new System.Windows.Forms.Label(); + this.refreshRateLabel = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.modeSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.adapterFormatComboBox = new System.Windows.Forms.ComboBox(); + this.adapterDeviceGroupBox.SuspendLayout(); + this.otherSettingsGroupBox.SuspendLayout(); + this.modeSettingsGroupBox.SuspendLayout(); + this.SuspendLayout(); + // + // adapterDeviceGroupBox + // + this.adapterDeviceGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.deviceComboBox, + this.deviceLabel, + this.adapterComboBox, + this.displayAdapterLabel}); + this.adapterDeviceGroupBox.Location = new System.Drawing.Point(16, 8); + this.adapterDeviceGroupBox.Name = "adapterDeviceGroupBox"; + this.adapterDeviceGroupBox.Size = new System.Drawing.Size(400, 80); + this.adapterDeviceGroupBox.TabIndex = 0; + this.adapterDeviceGroupBox.TabStop = false; + this.adapterDeviceGroupBox.Text = "Adapter and device"; + // + // deviceComboBox + // + this.deviceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.deviceComboBox.DropDownWidth = 121; + this.deviceComboBox.Location = new System.Drawing.Point(160, 48); + this.deviceComboBox.Name = "deviceComboBox"; + this.deviceComboBox.Size = new System.Drawing.Size(232, 21); + this.deviceComboBox.TabIndex = 3; + this.deviceComboBox.SelectedIndexChanged += new System.EventHandler(this.DeviceChanged); + // + // deviceLabel + // + this.deviceLabel.Location = new System.Drawing.Point(8, 48); + this.deviceLabel.Name = "deviceLabel"; + this.deviceLabel.Size = new System.Drawing.Size(152, 23); + this.deviceLabel.TabIndex = 2; + this.deviceLabel.Text = "Render &Device:"; + // + // adapterComboBox + // + this.adapterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterComboBox.DropDownWidth = 121; + this.adapterComboBox.Location = new System.Drawing.Point(160, 24); + this.adapterComboBox.Name = "adapterComboBox"; + this.adapterComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterComboBox.TabIndex = 1; + this.adapterComboBox.SelectedIndexChanged += new System.EventHandler(this.AdapterChanged); + // + // displayAdapterLabel + // + this.displayAdapterLabel.Location = new System.Drawing.Point(8, 24); + this.displayAdapterLabel.Name = "displayAdapterLabel"; + this.displayAdapterLabel.Size = new System.Drawing.Size(152, 23); + this.displayAdapterLabel.TabIndex = 0; + this.displayAdapterLabel.Text = "Display &Adapter:"; + // + // fullscreenRadioButton + // + this.fullscreenRadioButton.Location = new System.Drawing.Point(9, 38); + this.fullscreenRadioButton.Name = "fullscreenRadioButton"; + this.fullscreenRadioButton.Size = new System.Drawing.Size(152, 24); + this.fullscreenRadioButton.TabIndex = 1; + this.fullscreenRadioButton.Text = "&Fullscreen"; + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(248, 464); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.TabIndex = 4; + this.cancelButton.Text = "Cancel"; + // + // otherSettingsGroupBox + // + this.otherSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.multisampleQualityComboBox, + this.multisampleQualityLabel, + this.multisampleComboBox, + this.backBufferFormatComboBox, + this.multisampleLabel, + this.depthStencilBufferLabel, + this.backBufferFormatLabel, + this.depthStencilBufferComboBox, + this.vertexProcComboBox, + this.vertexProcLabel, + this.presentIntervalComboBox, + this.presentIntervalLabel}); + this.otherSettingsGroupBox.Location = new System.Drawing.Point(16, 264); + this.otherSettingsGroupBox.Name = "otherSettingsGroupBox"; + this.otherSettingsGroupBox.Size = new System.Drawing.Size(400, 176); + this.otherSettingsGroupBox.TabIndex = 2; + this.otherSettingsGroupBox.TabStop = false; + this.otherSettingsGroupBox.Text = "Device settings"; + // + // multisampleQualityComboBox + // + this.multisampleQualityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleQualityComboBox.DropDownWidth = 144; + this.multisampleQualityComboBox.Location = new System.Drawing.Point(160, 96); + this.multisampleQualityComboBox.Name = "multisampleQualityComboBox"; + this.multisampleQualityComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleQualityComboBox.TabIndex = 7; + this.multisampleQualityComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleQualityChanged); + // + // multisampleQualityLabel + // + this.multisampleQualityLabel.Location = new System.Drawing.Point(8, 96); + this.multisampleQualityLabel.Name = "multisampleQualityLabel"; + this.multisampleQualityLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleQualityLabel.TabIndex = 6; + this.multisampleQualityLabel.Text = "Multisample &Quality:"; + // + // multisampleComboBox + // + this.multisampleComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleComboBox.DropDownWidth = 144; + this.multisampleComboBox.Location = new System.Drawing.Point(160, 72); + this.multisampleComboBox.Name = "multisampleComboBox"; + this.multisampleComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleComboBox.TabIndex = 5; + this.multisampleComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleTypeChanged); + // + // backBufferFormatComboBox + // + this.backBufferFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.backBufferFormatComboBox.DropDownWidth = 144; + this.backBufferFormatComboBox.Location = new System.Drawing.Point(160, 24); + this.backBufferFormatComboBox.Name = "backBufferFormatComboBox"; + this.backBufferFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.backBufferFormatComboBox.TabIndex = 1; + this.backBufferFormatComboBox.SelectedIndexChanged += new System.EventHandler(this.BackBufferFormatChanged); + // + // multisampleLabel + // + this.multisampleLabel.Location = new System.Drawing.Point(8, 72); + this.multisampleLabel.Name = "multisampleLabel"; + this.multisampleLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleLabel.TabIndex = 4; + this.multisampleLabel.Text = "&Multisample Type:"; + // + // depthStencilBufferLabel + // + this.depthStencilBufferLabel.Location = new System.Drawing.Point(8, 48); + this.depthStencilBufferLabel.Name = "depthStencilBufferLabel"; + this.depthStencilBufferLabel.Size = new System.Drawing.Size(152, 23); + this.depthStencilBufferLabel.TabIndex = 2; + this.depthStencilBufferLabel.Text = "De&pth/Stencil Buffer Format:"; + // + // backBufferFormatLabel + // + this.backBufferFormatLabel.Location = new System.Drawing.Point(8, 24); + this.backBufferFormatLabel.Name = "backBufferFormatLabel"; + this.backBufferFormatLabel.Size = new System.Drawing.Size(152, 23); + this.backBufferFormatLabel.TabIndex = 0; + this.backBufferFormatLabel.Text = "&Back Buffer Format:"; + // + // depthStencilBufferComboBox + // + this.depthStencilBufferComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.depthStencilBufferComboBox.DropDownWidth = 144; + this.depthStencilBufferComboBox.Location = new System.Drawing.Point(160, 48); + this.depthStencilBufferComboBox.Name = "depthStencilBufferComboBox"; + this.depthStencilBufferComboBox.Size = new System.Drawing.Size(232, 21); + this.depthStencilBufferComboBox.TabIndex = 3; + this.depthStencilBufferComboBox.SelectedIndexChanged += new System.EventHandler(this.DepthStencilBufferFormatChanged); + // + // vertexProcComboBox + // + this.vertexProcComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.vertexProcComboBox.DropDownWidth = 121; + this.vertexProcComboBox.Location = new System.Drawing.Point(160, 120); + this.vertexProcComboBox.Name = "vertexProcComboBox"; + this.vertexProcComboBox.Size = new System.Drawing.Size(232, 21); + this.vertexProcComboBox.TabIndex = 9; + this.vertexProcComboBox.SelectedIndexChanged += new System.EventHandler(this.VertexProcessingChanged); + // + // vertexProcLabel + // + this.vertexProcLabel.Location = new System.Drawing.Point(8, 120); + this.vertexProcLabel.Name = "vertexProcLabel"; + this.vertexProcLabel.Size = new System.Drawing.Size(152, 23); + this.vertexProcLabel.TabIndex = 8; + this.vertexProcLabel.Text = "&Vertex Processing:"; + // + // presentIntervalComboBox + // + this.presentIntervalComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.presentIntervalComboBox.DropDownWidth = 121; + this.presentIntervalComboBox.Location = new System.Drawing.Point(160, 144); + this.presentIntervalComboBox.Name = "presentIntervalComboBox"; + this.presentIntervalComboBox.Size = new System.Drawing.Size(232, 21); + this.presentIntervalComboBox.TabIndex = 11; + this.presentIntervalComboBox.SelectedValueChanged += new System.EventHandler(this.PresentIntervalChanged); + // + // presentIntervalLabel + // + this.presentIntervalLabel.Location = new System.Drawing.Point(8, 144); + this.presentIntervalLabel.Name = "presentIntervalLabel"; + this.presentIntervalLabel.Size = new System.Drawing.Size(152, 23); + this.presentIntervalLabel.TabIndex = 10; + this.presentIntervalLabel.Text = "Present &Interval:"; + // + // resolutionComboBox + // + this.resolutionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.resolutionComboBox.DropDownWidth = 144; + this.resolutionComboBox.Location = new System.Drawing.Point(161, 94); + this.resolutionComboBox.MaxDropDownItems = 14; + this.resolutionComboBox.Name = "resolutionComboBox"; + this.resolutionComboBox.Size = new System.Drawing.Size(232, 21); + this.resolutionComboBox.TabIndex = 5; + this.resolutionComboBox.SelectedIndexChanged += new System.EventHandler(this.ResolutionChanged); + // + // windowedRadioButton + // + this.windowedRadioButton.Location = new System.Drawing.Point(9, 14); + this.windowedRadioButton.Name = "windowedRadioButton"; + this.windowedRadioButton.Size = new System.Drawing.Size(152, 24); + this.windowedRadioButton.TabIndex = 0; + this.windowedRadioButton.Text = "&Windowed"; + this.windowedRadioButton.CheckedChanged += new System.EventHandler(this.WindowedFullscreenChanged); + // + // resolutionLabel + // + this.resolutionLabel.Location = new System.Drawing.Point(8, 94); + this.resolutionLabel.Name = "resolutionLabel"; + this.resolutionLabel.Size = new System.Drawing.Size(152, 23); + this.resolutionLabel.TabIndex = 4; + this.resolutionLabel.Text = "&Resolution:"; + // + // refreshRateComboBox + // + this.refreshRateComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.refreshRateComboBox.DropDownWidth = 144; + this.refreshRateComboBox.Location = new System.Drawing.Point(161, 118); + this.refreshRateComboBox.MaxDropDownItems = 14; + this.refreshRateComboBox.Name = "refreshRateComboBox"; + this.refreshRateComboBox.Size = new System.Drawing.Size(232, 21); + this.refreshRateComboBox.TabIndex = 7; + this.refreshRateComboBox.SelectedIndexChanged += new System.EventHandler(this.RefreshRateChanged); + // + // adapterFormatLabel + // + this.adapterFormatLabel.Location = new System.Drawing.Point(8, 72); + this.adapterFormatLabel.Name = "adapterFormatLabel"; + this.adapterFormatLabel.Size = new System.Drawing.Size(152, 23); + this.adapterFormatLabel.TabIndex = 2; + this.adapterFormatLabel.Text = "Adapter F&ormat:"; + // + // refreshRateLabel + // + this.refreshRateLabel.Location = new System.Drawing.Point(8, 118); + this.refreshRateLabel.Name = "refreshRateLabel"; + this.refreshRateLabel.Size = new System.Drawing.Size(152, 23); + this.refreshRateLabel.TabIndex = 6; + this.refreshRateLabel.Text = "R&efresh Rate:"; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(112, 464); + this.okButton.Name = "okButton"; + this.okButton.TabIndex = 3; + this.okButton.Text = "OK"; + // + // modeSettingsGroupBox + // + this.modeSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.adapterFormatLabel, + this.refreshRateLabel, + this.resolutionComboBox, + this.adapterFormatComboBox, + this.resolutionLabel, + this.refreshRateComboBox, + this.windowedRadioButton, + this.fullscreenRadioButton}); + this.modeSettingsGroupBox.Location = new System.Drawing.Point(16, 96); + this.modeSettingsGroupBox.Name = "modeSettingsGroupBox"; + this.modeSettingsGroupBox.Size = new System.Drawing.Size(400, 160); + this.modeSettingsGroupBox.TabIndex = 1; + this.modeSettingsGroupBox.TabStop = false; + this.modeSettingsGroupBox.Text = "Display mode settings"; + // + // adapterFormatComboBox + // + this.adapterFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterFormatComboBox.DropDownWidth = 121; + this.adapterFormatComboBox.Location = new System.Drawing.Point(161, 70); + this.adapterFormatComboBox.MaxDropDownItems = 14; + this.adapterFormatComboBox.Name = "adapterFormatComboBox"; + this.adapterFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterFormatComboBox.TabIndex = 3; + this.adapterFormatComboBox.SelectedValueChanged += new System.EventHandler(this.AdapterFormatChanged); + // + // D3DSettingsForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(438, 512); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.cancelButton, + this.okButton, + this.adapterDeviceGroupBox, + this.modeSettingsGroupBox, + this.otherSettingsGroupBox}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.Name = "D3DSettingsForm"; + this.Text = "Direct3D Settings"; + this.adapterDeviceGroupBox.ResumeLayout(false); + this.otherSettingsGroupBox.ResumeLayout(false); + this.modeSettingsGroupBox.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// Respond to a change of selected adapter by rebuilding the device + /// list. Updating the selected device will trigger updates of the + /// rest of the dialog. + /// + private void AdapterChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + settings.AdapterInfo = adapterInfo; + + // Update device combo box + deviceComboBox.Items.Clear(); + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + deviceComboBox.Items.Add(deviceInfo); + if (deviceInfo.DevType == settings.DevType) + deviceComboBox.SelectedItem = deviceInfo; + } + if (deviceComboBox.SelectedItem == null && deviceComboBox.Items.Count > 0) + deviceComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected device by resetting the + /// fullscreen/windowed radio buttons. Updating these buttons + /// will trigger updates of the rest of the dialog. + /// + private void DeviceChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + settings.DeviceInfo = deviceInfo; + + // Update fullscreen/windowed radio buttons + bool HasWindowedDeviceCombo = false; + bool HasFullscreenDeviceCombo = false; + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + HasWindowedDeviceCombo = true; + else + HasFullscreenDeviceCombo = true; + } + windowedRadioButton.Enabled = HasWindowedDeviceCombo; + fullscreenRadioButton.Enabled = HasFullscreenDeviceCombo; + if (settings.IsWindowed && HasWindowedDeviceCombo) { + windowedRadioButton.Checked = true; + } + else { + fullscreenRadioButton.Checked = true; + } + WindowedFullscreenChanged(null, null); + } + + + + + /// + /// Respond to a change of windowed/fullscreen state by rebuilding the + /// adapter format list, resolution list, and refresh rate list. + /// Updating the selected adapter format will trigger updates of the + /// rest of the dialog. + /// + private void WindowedFullscreenChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + if (windowedRadioButton.Checked) { + settings.IsWindowed = true; + settings.WindowedAdapterInfo = adapterInfo; + settings.WindowedDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + adapterFormatComboBox.Items.Add(settings.WindowedDisplayMode.Format); + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = false; + + // Update resolution combo box + resolutionComboBox.Items.Clear(); + resolutionComboBox.Items.Add(FormatResolution(settings.WindowedDisplayMode.Width, + settings.WindowedDisplayMode.Height)); + resolutionComboBox.SelectedIndex = 0; + resolutionComboBox.Enabled = false; + + // Update refresh rate combo box + refreshRateComboBox.Items.Clear(); + refreshRateComboBox.Items.Add(FormatRefreshRate(settings.WindowedDisplayMode.RefreshRate)); + refreshRateComboBox.SelectedIndex = 0; + refreshRateComboBox.Enabled = false; + } + else { + settings.IsWindowed = false; + settings.FullscreenAdapterInfo = adapterInfo; + settings.FullscreenDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + continue; + if (!adapterFormatComboBox.Items.Contains(deviceCombo.AdapterFormat)) { + adapterFormatComboBox.Items.Add(deviceCombo.AdapterFormat); + if (deviceCombo.AdapterFormat == (settings.IsWindowed ? + settings.WindowedDisplayMode.Format : settings.FullscreenDisplayMode.Format)) { + adapterFormatComboBox.SelectedItem = deviceCombo.AdapterFormat; + } + } + } + if (adapterFormatComboBox.SelectedItem == null && adapterFormatComboBox.Items.Count > 0) + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = true; + + // Update resolution combo box + resolutionComboBox.Enabled = true; + + // Update refresh rate combo box + refreshRateComboBox.Enabled = true; + } + } + + + + + /// + /// Converts the given width and height into a formatted string + /// + private string FormatResolution(int width, int height) { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} by {1}", width, height); + return sb.ToString(); + } + + + + + /// + /// Converts the given refresh rate into a formatted string + /// + private string FormatRefreshRate(int refreshRate) { + if (refreshRate == 0) { + return "Default Rate"; + } + else { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} Hz", refreshRate); + return sb.ToString(); + } + } + + + + + /// + /// Respond to a change of selected adapter format by rebuilding the + /// resolution list and back buffer format list. Updating the selected + /// resolution and back buffer format will trigger updates of the rest + /// of the dialog. + /// + private void AdapterFormatChanged(object sender, System.EventArgs e) { + if (!windowedRadioButton.Checked) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + settings.FullscreenDisplayMode.Format = adapterFormat; + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + + resolutionComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat) { + string resolutionString = FormatResolution(displayMode.Width, displayMode.Height); + if (!resolutionComboBox.Items.Contains(resolutionString)) { + resolutionComboBox.Items.Add(resolutionString); + if (settings.FullscreenDisplayMode.Width == displayMode.Width && + settings.FullscreenDisplayMode.Height == displayMode.Height) { + resolutionComboBox.SelectedItem = resolutionString; + } + } + } + } + if (resolutionComboBox.SelectedItem == null && resolutionComboBox.Items.Count > 0) + resolutionComboBox.SelectedIndex = 0; + } + + // Update backbuffer format combo box + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + backBufferFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == settings.DisplayMode.Format) { + if (!backBufferFormatComboBox.Items.Contains(deviceCombo.BackBufferFormat)) { + backBufferFormatComboBox.Items.Add(deviceCombo.BackBufferFormat); + if (deviceCombo.BackBufferFormat == settings.BackBufferFormat) + backBufferFormatComboBox.SelectedItem = deviceCombo.BackBufferFormat; + } + } + } + if (backBufferFormatComboBox.SelectedItem == null && backBufferFormatComboBox.Items.Count > 0) + backBufferFormatComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected resolution by rebuilding the + /// refresh rate list. + /// + private void ResolutionChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + + // Update settings with new resolution + string resolution = (string)resolutionComboBox.SelectedItem; + string[] resolutionSplitStringArray = resolution.Split(); + int width = int.Parse(resolutionSplitStringArray[0]); + int height = int.Parse(resolutionSplitStringArray[2]); + settings.FullscreenDisplayMode.Width = width; + settings.FullscreenDisplayMode.Height = height; + + // Update refresh rate list based on new resolution + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + refreshRateComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat && + displayMode.Width == width && + displayMode.Height == height) { + string refreshRateString = FormatRefreshRate(displayMode.RefreshRate); + if (!refreshRateComboBox.Items.Contains(refreshRateString)) { + refreshRateComboBox.Items.Add(refreshRateString); + if (settings.FullscreenDisplayMode.RefreshRate == displayMode.RefreshRate) + refreshRateComboBox.SelectedItem = refreshRateString; + } + } + } + if (refreshRateComboBox.SelectedItem == null && refreshRateComboBox.Items.Count > 0) + refreshRateComboBox.SelectedIndex = refreshRateComboBox.Items.Count - 1; + } + + + + + /// + /// Respond to a change of selected refresh rate. + /// + private void RefreshRateChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + // Update settings with new refresh rate + string refreshRateString = (string)refreshRateComboBox.SelectedItem; + int refreshRate = 0; + if (refreshRateString != "Default Rate") { + string[] refreshRateSplitStringArray = refreshRateString.Split(); + refreshRate = int.Parse(refreshRateSplitStringArray[0]); + } + settings.FullscreenDisplayMode.RefreshRate = refreshRate; + } + + + + + /// + /// Respond to a change of selected back buffer format by rebuilding + /// the depth/stencil format list, multisample type list, and vertex + /// processing type list. + /// + private void BackBufferFormatChanged(object sender, System.EventArgs e) { + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + Format backBufferFormat = (Format)backBufferFormatComboBox.SelectedItem; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == adapterFormat && + deviceCombo.BackBufferFormat == backBufferFormat) { + deviceCombo.BackBufferFormat = backBufferFormat; + settings.DeviceCombo = deviceCombo; + + depthStencilBufferComboBox.Items.Clear(); + if (enumeration.AppUsesDepthBuffer) { + foreach (DepthFormat format in deviceCombo.DepthStencilFormatList) { + depthStencilBufferComboBox.Items.Add(format); + if (format == settings.DepthStencilBufferFormat) + depthStencilBufferComboBox.SelectedItem = format; + } + if (depthStencilBufferComboBox.SelectedItem == null && depthStencilBufferComboBox.Items.Count > 0) + depthStencilBufferComboBox.SelectedIndex = 0; + } + else { + depthStencilBufferComboBox.Enabled = false; + depthStencilBufferComboBox.Items.Add("(not used)"); + depthStencilBufferComboBox.SelectedIndex = 0; + } + + vertexProcComboBox.Items.Clear(); + foreach (VertexProcessingType vpt in deviceCombo.VertexProcessingTypeList) { + vertexProcComboBox.Items.Add(vpt); + if (vpt == settings.VertexProcessingType) + vertexProcComboBox.SelectedItem = vpt; + } + if (vertexProcComboBox.SelectedItem == null && vertexProcComboBox.Items.Count > 0) + vertexProcComboBox.SelectedIndex = 0; + + presentIntervalComboBox.Items.Clear(); + foreach (PresentInterval pi in deviceCombo.PresentIntervalList) { + presentIntervalComboBox.Items.Add(pi); + if (pi == settings.PresentInterval) + presentIntervalComboBox.SelectedItem = pi; + } + if (presentIntervalComboBox.SelectedItem == null && presentIntervalComboBox.Items.Count > 0) + presentIntervalComboBox.SelectedIndex = 0; + + break; + } + } + } + + + + + /// + /// Respond to a change of selected depth/stencil buffer format. + /// + private void DepthStencilBufferFormatChanged(object sender, System.EventArgs e) { + if (enumeration.AppUsesDepthBuffer) + settings.DepthStencilBufferFormat = (DepthFormat)depthStencilBufferComboBox.SelectedItem; + + multisampleComboBox.Items.Clear(); + foreach (MultiSampleType msType in settings.DeviceCombo.MultiSampleTypeList) { + // Check for DS/MS conflict + bool conflictFound = false; + foreach (DepthStencilMultiSampleConflict DSMSConflict in settings.DeviceCombo.DepthStencilMultiSampleConflictList) { + if (DSMSConflict.DepthStencilFormat == settings.DepthStencilBufferFormat && + DSMSConflict.MultiSampleType == msType) { + conflictFound = true; + break; + } + } + if (!conflictFound) { + multisampleComboBox.Items.Add(msType); + if (msType == settings.MultisampleType) + multisampleComboBox.SelectedItem = msType; + } + } + if (multisampleComboBox.SelectedItem == null && multisampleComboBox.Items.Count > 0) + multisampleComboBox.SelectedIndex = 0; + + } + + + + + /// + /// Respond to a change of selected multisample type. + /// + private void MultisampleTypeChanged(object sender, System.EventArgs e) { + settings.MultisampleType = (MultiSampleType)multisampleComboBox.SelectedItem; + + // Find current max multisample quality + int maxQuality = 0; + DeviceCombo deviceCombo = settings.DeviceCombo; + for (int i = 0; i < deviceCombo.MultiSampleQualityList.Count; i++) { + if ((MultiSampleType)deviceCombo.MultiSampleTypeList[i] == settings.MultisampleType) { + maxQuality = (int)deviceCombo.MultiSampleQualityList[i]; + break; + } + } + + // Update multisample quality list based on new type + multisampleQualityComboBox.Items.Clear(); + for (int iLevel = 0; iLevel < maxQuality; iLevel++) { + multisampleQualityComboBox.Items.Add(iLevel); + if (settings.MultisampleQuality == iLevel) + multisampleQualityComboBox.SelectedItem = iLevel; + } + if (multisampleQualityComboBox.SelectedItem == null && multisampleQualityComboBox.Items.Count > 0) + multisampleQualityComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected multisample quality. + /// + private void MultisampleQualityChanged(object sender, System.EventArgs e) { + settings.MultisampleQuality = (int)multisampleQualityComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void VertexProcessingChanged(object sender, System.EventArgs e) { + settings.VertexProcessingType = (VertexProcessingType)vertexProcComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void PresentIntervalChanged(object sender, System.EventArgs e) { + settings.PresentInterval = (PresentInterval)presentIntervalComboBox.SelectedItem; + } +} + + +/// +/// Current D3D settings: adapter, device, mode, formats, etc. +/// +public class D3DSettings { + public bool IsWindowed; + + public GraphicsAdapterInfo WindowedAdapterInfo; + public GraphicsDeviceInfo WindowedDeviceInfo; + public DeviceCombo WindowedDeviceCombo; + public DisplayMode WindowedDisplayMode; // not changable by the user + public DepthFormat WindowedDepthStencilBufferFormat; + public MultiSampleType WindowedMultisampleType; + public int WindowedMultisampleQuality; + public VertexProcessingType WindowedVertexProcessingType; + public PresentInterval WindowedPresentInterval; + public int WindowedWidth; + public int WindowedHeight; + + public GraphicsAdapterInfo FullscreenAdapterInfo; + public GraphicsDeviceInfo FullscreenDeviceInfo; + public DeviceCombo FullscreenDeviceCombo; + public DisplayMode FullscreenDisplayMode; // changable by the user + public DepthFormat FullscreenDepthStencilBufferFormat; + public MultiSampleType FullscreenMultisampleType; + public int FullscreenMultisampleQuality; + public VertexProcessingType FullscreenVertexProcessingType; + public PresentInterval FullscreenPresentInterval; + + + + + /// + /// The adapter information + /// + public GraphicsAdapterInfo AdapterInfo { + get { return IsWindowed ? WindowedAdapterInfo : FullscreenAdapterInfo; } + set { if (IsWindowed) WindowedAdapterInfo = value; else FullscreenAdapterInfo = value; } + } + + + + + /// + /// The device information + /// + public GraphicsDeviceInfo DeviceInfo { + get { return IsWindowed ? WindowedDeviceInfo : FullscreenDeviceInfo; } + set { if (IsWindowed) WindowedDeviceInfo = value; else FullscreenDeviceInfo = value; } + } + + + + + /// + /// The device combo + /// + public DeviceCombo DeviceCombo { + get { return IsWindowed ? WindowedDeviceCombo : FullscreenDeviceCombo; } + set { if (IsWindowed) WindowedDeviceCombo = value; else FullscreenDeviceCombo = value; } + } + + + + + /// + /// The adapters ordinal + /// + public int AdapterOrdinal { + get { return DeviceCombo.AdapterOrdinal; } + } + + + + + /// + /// The type of device this is + /// + public DeviceType DevType { + get { return DeviceCombo.DevType; } + } + + + + + /// + /// The back buffers format + /// + public Format BackBufferFormat { + get { return DeviceCombo.BackBufferFormat; } + } + + + + + /// + /// The display mode + /// + public DisplayMode DisplayMode { + get { return IsWindowed ? WindowedDisplayMode : FullscreenDisplayMode; } + set { if (IsWindowed) WindowedDisplayMode = value; else FullscreenDisplayMode = value; } + } + + + + + /// + /// The Depth stencils format + /// + public DepthFormat DepthStencilBufferFormat { + get { return IsWindowed ? WindowedDepthStencilBufferFormat : FullscreenDepthStencilBufferFormat; } + set { if (IsWindowed) WindowedDepthStencilBufferFormat = value; else FullscreenDepthStencilBufferFormat = value; } + } + + + + + /// + /// The multisample type + /// + public MultiSampleType MultisampleType { + get { return IsWindowed ? WindowedMultisampleType : FullscreenMultisampleType; } + set { if (IsWindowed) WindowedMultisampleType = value; else FullscreenMultisampleType = value; } + } + + + + + /// + /// The multisample quality + /// + public int MultisampleQuality { + get { return IsWindowed ? WindowedMultisampleQuality : FullscreenMultisampleQuality; } + set { if (IsWindowed) WindowedMultisampleQuality = value; else FullscreenMultisampleQuality = value; } + } + + + + + /// + /// The vertex processing type + /// + public VertexProcessingType VertexProcessingType { + get { return IsWindowed ? WindowedVertexProcessingType : FullscreenVertexProcessingType; } + set { if (IsWindowed) WindowedVertexProcessingType = value; else FullscreenVertexProcessingType = value; } + } + + + + + /// + /// The presentation interval + /// + public PresentInterval PresentInterval { + get { return IsWindowed ? WindowedPresentInterval : FullscreenPresentInterval; } + set { if (IsWindowed) WindowedPresentInterval = value; else FullscreenPresentInterval = value; } + } + + + + + /// + /// Clone the d3d settings class + /// + public D3DSettings Clone() { + return (D3DSettings)MemberwiseClone(); + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/D3DSettingsForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step08/D3DSettingsForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/D3DSettingsForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect.cs new file mode 100644 index 0000000..e0e11ae --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect.cs @@ -0,0 +1,254 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; +using System.Runtime.InteropServices; + + + + +/// +/// The connection wizard will allow our users to pick a service provider, +/// and then connect to an existing application, or create a new one as the host. +/// +public class ConnectWizard { + private Peer peerObject; + private Address deviceAddress; + + private ChooseServiceProviderForm serviceProviderForm; + private CreateJoinForm createJoinForm; + + private Guid serviceProviderGuid; + private string username; + private string samplename; + private bool isInSession = false; + private bool isHost = false; + private int port = 0; + + private Guid applicationGuid; + + + + + /// + /// Constructor + /// + /// + /// + /// + public ConnectWizard(Peer peer, Guid application, string sampleName) { + peerObject = peer; + applicationGuid = application; + samplename = sampleName; + } + + + + + /// + /// The guid for the current service provider + /// + public Guid ServiceProvider { + get { + return serviceProviderGuid; } + set { + serviceProviderGuid = value; } + } + + + + + /// + /// The game's default port number + /// + public int DefaultPort { + get { + return port; } + set { + port = value; } + } + + + + + /// + /// Am I the host + /// + public bool IsHost { + get { + return isHost; } + set { + isHost = value; } + } + + + + + /// + /// The username + /// + public string Username { + get { + return username; } + set { + username = value; } + } + + + + + /// + /// The sample name + /// + public string SampleName { + get { + return samplename; } + } + + + + + /// + /// The applications guid + /// + public Guid ApplicationGuid { + get { + return applicationGuid; } + } + + + + + /// + /// Are we in a session + /// + public bool InSession { + get { return isInSession; } + set { isInSession = value; } + } + + + + + /// + /// Returns true if the given provider requires a port component + /// + /// ServiceProvider Guid + /// + static public bool ProviderRequiresPort(Guid provider) { + return (provider != Address.ServiceProviderSerial && + provider != Address.ServiceProviderModem && + provider != Address.ServiceProviderBlueTooth); + } + + + + + /// + /// Handler for when our form is disposed + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createJoinForm) + createJoinForm = null; + + if (sender == serviceProviderForm) + serviceProviderForm = null; + } + + + + + /// + /// Set the user information + /// + public void SetUserInfo() { + //Before we call host, let's actually call SetPeerInformation + PlayerInformation myinformation = new PlayerInformation(); + myinformation.Name = username; + + peerObject.SetPeerInformation(myinformation, SyncFlags.PeerInformation); + } + + + + + /// + /// Show the service providers form + /// + /// True if a service provider was picked, false otherwise + public bool DoShowServiceProviders() { + if (serviceProviderForm == null) { + username = null; + serviceProviderForm = new ChooseServiceProviderForm(peerObject,this); + serviceProviderForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (serviceProviderForm.ShowDialog() == DialogResult.OK) + return true; + + // The didn't hit ok + return false; + } + + + + + /// + /// Show the create or join screen + /// + /// True if we will be in a session, false otherwise + public bool DoCreateJoinGame() { + if (deviceAddress != null) + deviceAddress.Dispose(); + + deviceAddress = new Address(); + + if (createJoinForm != null) + createJoinForm.Dispose(); + + createJoinForm = new CreateJoinForm(peerObject, deviceAddress, this); + createJoinForm.Disposed += new System.EventHandler(this.FormDisposed); + + //Set the address's service provider (this will be the device address) + deviceAddress.ServiceProvider = serviceProviderGuid; + DialogResult drCreateJoin = createJoinForm.ShowDialog(); + if (drCreateJoin == DialogResult.Cancel) + return false; + + this.isHost = (drCreateJoin == DialogResult.Yes); + return true; + + } + + + + + /// + /// Start the wizard + /// + /// True if we are in a session, false otherwise + public bool StartWizard() { + isInSession = false; + + while (this.DoShowServiceProviders()) { + //Now let's create a game or join a session + if (this.DoCreateJoinGame()) { + // A game has been created or joined now, set our flag + isInSession = true; + break; + } + } + return isInSession; + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_AddressForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_AddressForm.cs new file mode 100644 index 0000000..181fc48 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_AddressForm.cs @@ -0,0 +1,207 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_AddressForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// Summary description for AddressForm. +/// +public class AddressForm : System.Windows.Forms.Form { + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox hostnameTextBox; + private System.Windows.Forms.TextBox portTextBox; + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + /// + /// Constructor + /// + public AddressForm( int defaultPort ) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // Set default port value + Port = defaultPort; + } + + + + + /// + /// The remote port on which to connect + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(portTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + portTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Remote hostname + /// + public string Hostname { + get { + return hostnameTextBox.Text; } + set { + hostnameTextBox.Text = value; } + } + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.label1 = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.hostnameTextBox = new System.Windows.Forms.TextBox(); + this.portTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(248, 48); + this.label1.TabIndex = 0; + this.label1.Text = "Please enter the optional components of the remote session address. If set blank," + + " DirectPlay will attempt to search the local network."; + // + // okButton + // + this.okButton.Location = new System.Drawing.Point(104, 144); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(72, 24); + this.okButton.TabIndex = 1; + this.okButton.Text = "&OK"; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(184, 144); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(72, 24); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "&Cancel"; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(32, 80); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(100, 16); + this.label2.TabIndex = 3; + this.label2.Text = "Hostname"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(160, 80); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 16); + this.label3.TabIndex = 4; + this.label3.Text = "Port"; + // + // hostnameTextBox + // + this.hostnameTextBox.Location = new System.Drawing.Point(32, 96); + this.hostnameTextBox.Name = "hostnameTextBox"; + this.hostnameTextBox.Size = new System.Drawing.Size(120, 20); + this.hostnameTextBox.TabIndex = 5; + this.hostnameTextBox.Text = ""; + // + // portTextBox + // + this.portTextBox.Location = new System.Drawing.Point(160, 96); + this.portTextBox.Name = "portTextBox"; + this.portTextBox.Size = new System.Drawing.Size(56, 20); + this.portTextBox.TabIndex = 6; + this.portTextBox.Text = ""; + // + // AddressForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(264, 176); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.portTextBox, + this.hostnameTextBox, + this.label3, + this.label2, + this.cancelButton, + this.okButton, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AddressForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Remote Address"; + this.ResumeLayout(false); + + } + #endregion + + private void okButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.OK; + } + + private void cancelButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.Cancel; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_AddressForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_AddressForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_AddressForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_CreateForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_CreateForm.cs new file mode 100644 index 0000000..c321e80 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_CreateForm.cs @@ -0,0 +1,346 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_CreateForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will allow you to create a new session, and set certain properties +/// of the session. +/// +public class CreateSessionForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.TextBox txtSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton notSignedRadio; + private System.Windows.Forms.RadioButton fullSignedRadio; + private System.Windows.Forms.RadioButton fastSignedRadio; + private System.Windows.Forms.CheckBox migrateHostCheckBox; + private System.Windows.Forms.CheckBox useDPNSVRCheckBox; + private System.Windows.Forms.TextBox localPortTextBox; + private System.Windows.Forms.Label localPortLabel; + private System.Windows.Forms.Button btnCancel; + + + + /// + /// Constructor + /// + public CreateSessionForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + peer = peerObject; + this.connectionWizard = connectionWizard; + deviceAddress = addressObject; + txtSession.Text = null; + this.Text = connectionWizard.SampleName + " - " + this.Text; + //Get the default session from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + // Get session name + txtSession.Text = (string)regKey.GetValue("DirectPlaySessionName", null); + + // Get host migration option + if (regKey.GetValue("DirectPlayMigrateHost",null) != null) { + migrateHostCheckBox.Checked = ((int)regKey.GetValue("DirectPlayMigrateHost",1)==1); + } + + + // Get session signing option + if (regKey.GetValue("DirectPlaySessionSigning",null) != null) { + if ("Full" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fullSignedRadio.Checked = true; + else if ("Fast" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fastSignedRadio.Checked = true; + else + notSignedRadio.Checked = true; + } + + regKey.Close(); + } + + // Set default port value and hide port UI if provider doesn't use them + Port = connectionWizard.DefaultPort; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + localPortTextBox.Hide(); + localPortLabel.Hide(); + } + } + + + + /// + /// The port on which to host + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(localPortTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + localPortTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.txtSession = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.fullSignedRadio = new System.Windows.Forms.RadioButton(); + this.fastSignedRadio = new System.Windows.Forms.RadioButton(); + this.notSignedRadio = new System.Windows.Forms.RadioButton(); + this.migrateHostCheckBox = new System.Windows.Forms.CheckBox(); + this.useDPNSVRCheckBox = new System.Windows.Forms.CheckBox(); + this.localPortLabel = new System.Windows.Forms.Label(); + this.localPortTextBox = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // txtSession + // + this.txtSession.Location = new System.Drawing.Point(96, 24); + this.txtSession.Name = "txtSession"; + this.txtSession.Size = new System.Drawing.Size(176, 20); + this.txtSession.TabIndex = 3; + this.txtSession.Text = ""; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(288, 12); + this.label1.TabIndex = 2; + this.label1.Text = "Session Name:"; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(128, 168); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(208, 168); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + // + // groupBox1 + // + this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] { + this.fullSignedRadio, + this.fastSignedRadio, + this.notSignedRadio}); + this.groupBox1.Location = new System.Drawing.Point(16, 64); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(112, 88); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Session Signing"; + // + // fullSignedRadio + // + this.fullSignedRadio.Location = new System.Drawing.Point(18, 22); + this.fullSignedRadio.Name = "fullSignedRadio"; + this.fullSignedRadio.Size = new System.Drawing.Size(80, 16); + this.fullSignedRadio.TabIndex = 9; + this.fullSignedRadio.Text = "Full signed"; + // + // fastSignedRadio + // + this.fastSignedRadio.Checked = true; + this.fastSignedRadio.Location = new System.Drawing.Point(18, 41); + this.fastSignedRadio.Name = "fastSignedRadio"; + this.fastSignedRadio.Size = new System.Drawing.Size(88, 16); + this.fastSignedRadio.TabIndex = 8; + this.fastSignedRadio.TabStop = true; + this.fastSignedRadio.Text = "Fast signed"; + // + // notSignedRadio + // + this.notSignedRadio.Location = new System.Drawing.Point(18, 55); + this.notSignedRadio.Name = "notSignedRadio"; + this.notSignedRadio.Size = new System.Drawing.Size(72, 24); + this.notSignedRadio.TabIndex = 10; + this.notSignedRadio.Text = "Disabled"; + // + // migrateHostCheckBox + // + this.migrateHostCheckBox.Checked = true; + this.migrateHostCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.migrateHostCheckBox.Location = new System.Drawing.Point(144, 64); + this.migrateHostCheckBox.Name = "migrateHostCheckBox"; + this.migrateHostCheckBox.Size = new System.Drawing.Size(136, 24); + this.migrateHostCheckBox.TabIndex = 11; + this.migrateHostCheckBox.Text = "Enable Host Migration"; + // + // useDPNSVRCheckBox + // + this.useDPNSVRCheckBox.Location = new System.Drawing.Point(144, 84); + this.useDPNSVRCheckBox.Name = "useDPNSVRCheckBox"; + this.useDPNSVRCheckBox.Size = new System.Drawing.Size(136, 24); + this.useDPNSVRCheckBox.TabIndex = 12; + this.useDPNSVRCheckBox.Text = "Use DPNSVR"; + // + // localPortLabel + // + this.localPortLabel.Location = new System.Drawing.Point(152, 122); + this.localPortLabel.Name = "localPortLabel"; + this.localPortLabel.Size = new System.Drawing.Size(64, 17); + this.localPortLabel.TabIndex = 13; + this.localPortLabel.Text = "Local Port:"; + // + // localPortTextBox + // + this.localPortTextBox.Location = new System.Drawing.Point(216, 120); + this.localPortTextBox.Name = "localPortTextBox"; + this.localPortTextBox.Size = new System.Drawing.Size(56, 20); + this.localPortTextBox.TabIndex = 14; + this.localPortTextBox.Text = ""; + // + // CreateSessionForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(290, 200); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.localPortTextBox, + this.localPortLabel, + this.useDPNSVRCheckBox, + this.migrateHostCheckBox, + this.txtSession, + this.label1, + this.groupBox1, + this.btnOK, + this.btnCancel}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.HelpButton = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateSessionForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Create a Session"; + this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.CreateSessionForm_HelpRequested); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// We are ready to create a session. Ensure the data is valid + /// then create the session + /// + private void btnOK_Click(object sender, System.EventArgs e) { + ApplicationDescription dpApp; + if ((txtSession.Text == null) || (txtSession.Text == "")) { + MessageBox.Show(this,"Please enter a session name before clicking OK.","No sessionname",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlaySessionName", txtSession.Text); + if (migrateHostCheckBox.Checked) + regKey.SetValue("DirectPlayMigrateHost",1); + else + regKey.SetValue("DirectPlayMigrateHost",0); + + if (fastSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Fast"); + else if (fullSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Full"); + else + regKey.SetValue("DirectPlaySessionSigning","Disabled"); + regKey.Close(); + } + + dpApp = new ApplicationDescription(); + dpApp.GuidApplication = connectionWizard.ApplicationGuid; + dpApp.SessionName = txtSession.Text; + dpApp.Flags = 0; + + if (migrateHostCheckBox.Checked) + dpApp.Flags |= SessionFlags.MigrateHost; + + if (!useDPNSVRCheckBox.Checked) + dpApp.Flags |= SessionFlags.NoDpnServer; + + if (fastSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FastSigned; + else if (fullSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FullSigned; + + // Specify the port number if available + if (ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + if (Port > 0) + deviceAddress.AddComponent(Address.KeyPort, Port); + } + + connectionWizard.SetUserInfo(); + // Host a game on deviceAddress as described by dpApp + // HostFlags.OkToQueryForAddressing allows DirectPlay to prompt the user + // using a dialog box for any device address information that is missing + peer.Host(dpApp,deviceAddress,HostFlags.OkToQueryForAddressing); + this.DialogResult = DialogResult.OK; + } + + private void CreateSessionForm_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent) { + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_CreateForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_CreateForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_CreateForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_JoinForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_JoinForm.cs new file mode 100644 index 0000000..a86efa7 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_JoinForm.cs @@ -0,0 +1,481 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_JoinForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will search for existing running samples and allow you to join them or will +/// allow you to create your own session as a host +/// +public class CreateJoinForm : System.Windows.Forms.Form { + private const int EnumExpireThreshold = 2000; + private bool amJoining = false; + + + + + /// + /// Hold our information of hosts we found + /// + private struct FindHostsResponseInformation { + public int LastFoundTime; + public ApplicationDescription ApplicationDesc; + public int RoundTripLatencyMs; + public Address sender; + public Address device; + public override string ToString() { + if (ApplicationDesc.MaxPlayers > 0) + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + "/" + ApplicationDesc.MaxPlayers + ") (" + RoundTripLatencyMs + "ms)"; + else + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + ") (" + RoundTripLatencyMs + "ms)"; + } + }; + + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + private Address hostAddress = null; + private bool isSearching = false; + private int findHostHandle = 0; + private CreateSessionForm createSessionForm = null; + private ResultCode resultCode; + private ArrayList foundHosts = new ArrayList(); + private bool isConnected = false; + private ManualResetEvent connectEvent = null; + private System.Timers.Timer updateListTimer = null; + private System.Timers.Timer connectTimer = null; + + private System.Windows.Forms.ListBox lstSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnSearch; + private System.Windows.Forms.Button btnJoin; + private System.Windows.Forms.Button btnCreate; + + + + + /// + /// Constructor + /// + public CreateJoinForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + deviceAddress = addressObject; + + //Set up the event handlers + peer.FindHostResponse += new FindHostResponseEventHandler(FindHostResponseMessage); + peer.ConnectComplete += new ConnectCompleteEventHandler(ConnectResult); + peer.AsyncOperationComplete += new AsyncOperationCompleteEventHandler(CancelAsync); + + //Set up our timer + updateListTimer = new System.Timers.Timer(300); // A 300 ms interval + updateListTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.UpdateTimer); + updateListTimer.SynchronizingObject = this; + updateListTimer.Start(); + //Set up our connect timer + connectTimer = new System.Timers.Timer(100); // A 100ms interval + connectTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.ConnectTimer); + connectTimer.SynchronizingObject = this; + // Set up our connect event + connectEvent = new ManualResetEvent(false); + + } + + + + + /// + /// An asynchronous operation was cancelled + /// + private void CancelAsync(object sender, AsyncOperationCompleteEventArgs e) { + if (e.Message.AsyncOperationHandle == findHostHandle) { + findHostHandle = 0; + btnSearch.Text = "Start Search"; + isSearching = false; + btnCreate.Enabled = true; + btnSearch.Enabled = true; + } + } + + + + + /// + /// A host was found and responded to our query + /// + private void FindHostResponseMessage(object sender, FindHostResponseEventArgs dpMessage) { + // Now we need to add this to our list of available sessions + SessionAdd(dpMessage.Message); + } + + + + + /// + /// Add this session to our list + /// + /// + private void SessionAdd(FindHostsResponseMessage dpMessage) { + FindHostsResponseInformation dpInfo = new FindHostsResponseInformation(); + + dpInfo.ApplicationDesc = dpMessage.ApplicationDescription; + dpInfo.device = dpMessage.AddressDevice; + dpInfo.sender = dpMessage.AddressSender; + dpInfo.RoundTripLatencyMs = dpMessage.RoundTripLatencyMs; + dpInfo.LastFoundTime = Environment.TickCount; + + // Let's check the items first and see if this one already exists + bool isFound = false; + + lock (foundHosts) { + for (int i = 0; i < lstSession.Items.Count; i++) { + if (dpInfo.ApplicationDesc.GuidInstance == ((FindHostsResponseInformation)lstSession.Items[i]).ApplicationDesc.GuidInstance) { + foundHosts[i] = dpInfo; + lstSession.Items[i] = dpInfo; + isFound = true; + } + } + if (!isFound) { + lstSession.Items.Add(dpInfo); + foundHosts.Add(dpInfo); + } + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + + if (isSearching) { + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + isSearching = !isSearching; + } + if (connectTimer != null) + connectTimer.Dispose(); + + if (updateListTimer != null) + updateListTimer.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.btnJoin = new System.Windows.Forms.Button(); + this.lstSession = new System.Windows.Forms.ListBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnCreate = new System.Windows.Forms.Button(); + this.btnSearch = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnJoin + // + this.btnJoin.Enabled = false; + this.btnJoin.Location = new System.Drawing.Point(7, 227); + this.btnJoin.Name = "btnJoin"; + this.btnJoin.Size = new System.Drawing.Size(74, 27); + this.btnJoin.TabIndex = 2; + this.btnJoin.Text = "Join"; + this.btnJoin.Click += new System.EventHandler(this.btnJoin_Click); + // + // lstSession + // + this.lstSession.Location = new System.Drawing.Point(5, 37); + this.lstSession.Name = "lstSession"; + this.lstSession.Size = new System.Drawing.Size(400, 186); + this.lstSession.TabIndex = 1; + this.lstSession.DoubleClick += new System.EventHandler(this.btnJoin_Click); + this.lstSession.SelectedValueChanged += new System.EventHandler(this.SelectedChange); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(5, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(312, 16); + this.label1.TabIndex = 0; + this.label1.Text = "Select session to join, or click Create to start a new session."; + // + // btnCreate + // + this.btnCreate.DialogResult = System.Windows.Forms.DialogResult.Yes; + this.btnCreate.Location = new System.Drawing.Point(84, 227); + this.btnCreate.Name = "btnCreate"; + this.btnCreate.Size = new System.Drawing.Size(74, 27); + this.btnCreate.TabIndex = 2; + this.btnCreate.Text = "Create"; + this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click); + // + // btnSearch + // + this.btnSearch.Location = new System.Drawing.Point(319, 7); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(86, 27); + this.btnSearch.TabIndex = 2; + this.btnSearch.Text = "Start Search"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(333, 227); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + // + // CreateJoinForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(411, 264); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.btnCreate, + this.btnJoin, + this.btnSearch, + this.btnCancel, + this.lstSession, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateJoinForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Join or create a session"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// The selected session was changed. + /// + private void SelectedChange(object sender, System.EventArgs e) { + if (amJoining) + return; // Do nothing if we are already joining a session + + btnJoin.Enabled = (lstSession.SelectedItem != null); + } + + + + + /// + /// We either want to start or stop searching + /// + private void btnSearch_Click(object sender, System.EventArgs e) { + if (!isSearching) { + if( hostAddress != null ) + hostAddress.Dispose(); + + hostAddress = new Address(); + hostAddress.ServiceProvider = deviceAddress.ServiceProvider; + + // See if we should prompt the user for the remote address + if (ConnectWizard.ProviderRequiresPort(hostAddress.ServiceProvider)) { + AddressForm addressDialog = new AddressForm(connectionWizard.DefaultPort); + addressDialog.ShowDialog(this); + + // If the user cancelled the address form, abort the search + if (addressDialog.DialogResult != DialogResult.OK) + return; + + // If a port was specified, add the component + if (addressDialog.Hostname != "") + hostAddress.AddComponent(Address.KeyHostname, addressDialog.Hostname); + + // If a hostname was specified, add the component + if (addressDialog.Port > 0) + hostAddress.AddComponent(Address.KeyPort, addressDialog.Port); + } + + //Time to enum our hosts + ApplicationDescription desc = new ApplicationDescription(); + desc.GuidApplication = connectionWizard.ApplicationGuid; + + // If the user was not already asked for address information, DirectPlay + // should prompt with native UI + FindHostsFlags flags = 0; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + flags = FindHostsFlags.OkToQueryForAddressing; + + peer.FindHosts(desc,hostAddress,deviceAddress,null,Timeout.Infinite,0,Timeout.Infinite, flags, out findHostHandle); + isSearching = true; + btnCreate.Enabled = false; + btnSearch.Text = "Stop Search"; + } + else { + btnSearch.Text = "Stopping..."; + btnSearch.Enabled = false; + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + } + } + + + + + /// + /// A form was disposed + /// + /// + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createSessionForm) + createSessionForm = null; + } + + + + + /// + /// We should create a new session. Display a dialog allowing the user to set + /// certain options + /// + private void btnCreate_Click(object sender, System.EventArgs e) { + this.DialogResult = DialogResult.None; + ((Button)sender).DialogResult = DialogResult.None; + if (createSessionForm == null) { + createSessionForm = new CreateSessionForm(peer,deviceAddress,connectionWizard); + createSessionForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (createSessionForm.ShowDialog(this) != DialogResult.Cancel) { + ((Button)sender).DialogResult = DialogResult.Yes; + this.DialogResult = DialogResult.Yes; + } + } + + + + + /// + /// Determine if we need to expire any of our currently listed servers + /// + private void UpdateTimer(object sender, System.Timers.ElapsedEventArgs e) { + lock (foundHosts) { + for (int i = 0; i< foundHosts.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)foundHosts[i]).LastFoundTime > EnumExpireThreshold) { + foundHosts.RemoveAt(i); + break; + } + } + for (int i = 0; i< lstSession.Items.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)lstSession.Items[i]).LastFoundTime > EnumExpireThreshold) { + lstSession.Items.RemoveAt(i); + break; + } + } + } + } + + + + + /// + /// Wait for a connect to complete + /// + private void ConnectTimer(object sender, System.Timers.ElapsedEventArgs e) { + if (connectEvent.WaitOne(0,false)) { // Wait for the Connect event to be fired + if (isConnected) { // Are we connected? + // Get rid of the timer + if (updateListTimer != null) + updateListTimer.Stop(); + + if (connectTimer != null) + connectTimer.Stop(); + + this.DialogResult = DialogResult.OK; + this.Close(); + return; + } + else { + MessageBox.Show(this,"Failed to connect. The error code was: \n" + resultCode.ToString() ,"Failed to connect",MessageBoxButtons.OK,MessageBoxIcon.Information); + // Restart our timer + updateListTimer.Start(); + } + } + } + + + + + /// + /// Fired when a connect complete message is received from DirectPlay. Fire + /// our event to notify the sample we've connected + /// + private void ConnectResult(object sender, ConnectCompleteEventArgs e) { + if (e.Message.ResultCode == 0) { + isConnected = true; + } + else + isConnected = false; + + resultCode = e.Message.ResultCode; + // Notify the timer that we've connected. + connectEvent.Set(); + } + + + + + /// + /// Join an existing session + /// + private void btnJoin_Click(object sender, System.EventArgs e) { + FindHostsResponseInformation dpInfo; + if (lstSession.SelectedItem == null) { + MessageBox.Show(this,"Please select a session before clicking join.","No session",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + // Turn off all buttons + btnCreate.Enabled = false; + btnCancel.Enabled = false; + btnJoin.Enabled = false; + btnSearch.Enabled = false; + amJoining = true; + // Stop our secondary timer + updateListTimer.Stop(); + dpInfo = ((FindHostsResponseInformation)lstSession.SelectedItem); + connectionWizard.SetUserInfo(); + peer.Connect(dpInfo.ApplicationDesc,dpInfo.sender, dpInfo.device,null,ConnectFlags.OkToQueryForAddressing); + // Now start our 'Connect' timer + connectTimer.Start(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_JoinForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_JoinForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_JoinForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_ServiceProviderForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_ServiceProviderForm.cs new file mode 100644 index 0000000..4884d84 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_ServiceProviderForm.cs @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_ServiceProviderForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +/// +/// This form allows you to choose a service provider and username for your +/// sample +/// +public class ChooseServiceProviderForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListBox lstSP; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtUser; + private System.Windows.Forms.Button btnCancel; + + + + + /// + /// Constructor + /// + public ChooseServiceProviderForm(Peer peerObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + // Fill up our listbox with the service providers + ServiceProviderInformation[] serviceProviders = peer.GetServiceProviders(false); + foreach (ServiceProviderInformation info in serviceProviders) + lstSP.Items.Add(info); + + txtUser.Text = null; + //Get the default username from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + try { + txtUser.Text = (string)regKey.GetValue("DirectPlayUserName", null); + lstSP.SelectedIndex = (int)regKey.GetValue("DirectPlaySPIndex", 0); + regKey.Close(); + } + catch { + txtUser.Text = null; + lstSP.SelectedIndex = 0; + } + } + else + lstSP.SelectedIndex = 0; + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + txtUser.Text = SystemInformation.UserName; + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.lstSP = new System.Windows.Forms.ListBox(); + this.txtUser = new System.Windows.Forms.TextBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lstSP + // + this.lstSP.Location = new System.Drawing.Point(12, 63); + this.lstSP.Name = "lstSP"; + this.lstSP.Size = new System.Drawing.Size(324, 147); + this.lstSP.TabIndex = 1; + this.lstSP.DoubleClick += new System.EventHandler(this.lstSP_DoubleClick); + // + // txtUser + // + this.txtUser.Location = new System.Drawing.Point(13, 20); + this.txtUser.MaxLength = 30; + this.txtUser.Name = "txtUser"; + this.txtUser.Size = new System.Drawing.Size(326, 20); + this.txtUser.TabIndex = 5; + this.txtUser.Text = ""; + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(181, 215); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 2; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(260, 215); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(11, 44); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(376, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Please pick your service provider:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(10, 5); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(327, 12); + this.label2.TabIndex = 4; + this.label2.Text = "User Name:"; + // + // ChooseServiceProviderForm + // + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(343, 246); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.txtUser, + this.label2, + this.btnCancel, + this.btnOK, + this.lstSP, + this.label1}); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChooseServiceProviderForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Choose Service Provider"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// They don't want to run this sample + /// + private void btnCancel_Click(object sender, System.EventArgs e) { + this.Dispose(); + } + + + + + /// + /// Same as clicking ok + /// + private void lstSP_DoubleClick(object sender, System.EventArgs e) { + // Call the ok button click handler + object[] parameters = new object[] { sender, e }; + this.BeginInvoke(new System.EventHandler(btnOK_Click), parameters); + } + + + + + /// + /// Select this username and service provider if valid, then continue the wizard + /// + private void btnOK_Click(object sender, System.EventArgs e) { + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + MessageBox.Show(this,"Please enter a username before clicking OK.","No Username",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + try { + connectionWizard.ServiceProvider = ((ServiceProviderInformation)lstSP.SelectedItem).Guid; + connectionWizard.Username = txtUser.Text; + } + catch { // We assume if we got here there was no selected item. + MessageBox.Show(this,"Please select a service provider before clicking OK.","No Service Provider",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlayUserName", txtUser.Text); + regKey.SetValue("DirectPlaySPIndex", lstSP.SelectedIndex); + regKey.Close(); + } + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_ServiceProviderForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_ServiceProviderForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/DPlayConnect_ServiceProviderForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/DXUtil.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/DXUtil.cs new file mode 100644 index 0000000..5d0f0e5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/DXUtil.cs @@ -0,0 +1,285 @@ +//----------------------------------------------------------------------------- +// File: DXUtil.cs +// +// Desc: Shortcut macros and functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.IO; +using System.Runtime.InteropServices; + + + + +/// +/// Enumeration for various actions our timer can perform +/// +public enum DirectXTimer { + Reset, + Start, + Stop, + Advance, + GetAbsoluteTime, + GetApplicationTime, + GetElapsedTime +}; + + + + +/// +/// Generic utility functions for our samples +/// +public class DXUtil { + #region Timer Internal Stuff + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceCounter(ref long PerformanceCount); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("winmm.dll")] + public static extern int timeGetTime(); + private static bool isTimerInitialized = false; + private static bool m_bUsingQPF = false; + private static bool m_bTimerStopped = true; + private static long m_llQPFTicksPerSec = 0; + private static long m_llStopTime = 0; + private static long m_llLastElapsedTime = 0; + private static long m_llBaseTime = 0; + private static double m_fLastElapsedTime = 0.0; + private static double m_fBaseTime = 0.0; + private static double m_fStopTime = 0.0; + #endregion + + // Constants for SDK Path registry keys + private const string sdkPath = "Software\\Microsoft\\DirectX SDK"; + private const string sdkKey = "DX9J3SDK Samples Path"; + + private DXUtil() { /* Private Constructor */ } + + + + + /// + /// Returns the DirectX SDK media path + /// + public static string SdkMediaPath { + get { + Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sdkPath); + string sReg = string.Empty; + if (rKey != null) { + sReg = (string)rKey.GetValue(sdkKey); + rKey.Close(); + } + if (sReg != null) + sReg += @"\Media\"; + else + return string.Empty; + + return sReg; + } + } + + + + + /// + /// Performs timer opertations. Use the following commands: + /// + /// DirectXTimer.Reset - to reset the timer + /// DirectXTimer.Start - to start the timer + /// DirectXTimer.Stop - to stop (or pause) the timer + /// DirectXTimer.Advance - to advance the timer by 0.1 seconds + /// DirectXTimer.GetAbsoluteTime - to get the absolute system time + /// DirectXTimer.GetApplicationTime - to get the current time + /// DirectXTimer.GetElapsedTime - to get the time that elapsed between TIMER_GETELAPSEDTIME calls + /// + /// + public static float Timer(DirectXTimer command) { + if (!isTimerInitialized) { + isTimerInitialized = true; + + // Use QueryPerformanceFrequency() to get frequency of timer. If QPF is + // not supported, we will timeGetTime() which returns milliseconds. + long qwTicksPerSec = 0; + m_bUsingQPF = QueryPerformanceFrequency(ref qwTicksPerSec); + if (m_bUsingQPF) + m_llQPFTicksPerSec = qwTicksPerSec; + } + if (m_bUsingQPF) { + double time; + double fElapsedTime; + long qwTime = 0; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_llStopTime != 0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + qwTime = m_llStopTime; + else + QueryPerformanceCounter(ref qwTime); + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (qwTime - m_llLastElapsedTime) / (double) m_llQPFTicksPerSec; + m_llLastElapsedTime = qwTime; + return (float)fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + double fAppTime = (double) (qwTime - m_llBaseTime) / (double) m_llQPFTicksPerSec; + return (float)fAppTime; + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_llBaseTime = qwTime; + m_llLastElapsedTime = qwTime; + m_llStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_llBaseTime += qwTime - m_llStopTime; + m_llStopTime = 0; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_llStopTime = qwTime; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_llStopTime += m_llQPFTicksPerSec/10; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + time = qwTime / (double) m_llQPFTicksPerSec; + return (float)time; + } + + return -1.0f; // Invalid command specified + } + else { + // Get the time using timeGetTime() + double time; + double fElapsedTime; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_fStopTime != 0.0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + time = m_fStopTime; + else + time = timeGetTime() * 0.001; + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (time - m_fLastElapsedTime); + m_fLastElapsedTime = time; + return (float) fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + return (float) (time - m_fBaseTime); + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_fBaseTime = time; + m_fLastElapsedTime = time; + m_fStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_fBaseTime += time - m_fStopTime; + m_fStopTime = 0.0f; + m_fLastElapsedTime = time; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_fStopTime = time; + m_fLastElapsedTime = time; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_fStopTime += 0.1f; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + return (float) time; + } + + return -1.0f; // Invalid command specified + } + } + + + + + /// + /// Returns a valid path to a DXSDK media file + /// + /// Initial path to search + /// Filename we're searching for + /// Full path to the file + public static string FindMediaFile(string path, string filename) { + // First try to load the file in the full path + if (path != null) { + if (File.Exists(AppendDirectorySeparator(path) + filename)) + return AppendDirectorySeparator(path) + filename; + } + + // if not try to find the filename in the current folder. + if (File.Exists(filename)) + return AppendDirectorySeparator(Directory.GetCurrentDirectory()) + filename; + + // last, check if the file exists in the media directory + if (File.Exists(AppendDirectorySeparator(SdkMediaPath) + filename)) + return AppendDirectorySeparator(SdkMediaPath) + filename; + + throw new FileNotFoundException("Could not find this file.", filename); + } + + + + + /// + /// Returns a valid string with a directory separator at the end. + /// + private static string AppendDirectorySeparator(string filename) { + if (!filename.EndsWith(@"\")) + return filename + @"\"; + + return filename; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/GameClass.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/GameClass.cs new file mode 100644 index 0000000..e9df94b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/GameClass.cs @@ -0,0 +1,387 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public delegate void MessageDelegate(byte message); // Delegate for messages arriving via DirectPlay. +public delegate void AudioDelegate(); // Delegate to handle audio playback. +public delegate void PeerCloseCallback(); // This delegate will be called when the session terminated event is fired. + +public class GameClass : GraphicsSample { + private GraphicsFont drawingFont = null; + private Point destination = new Point(0, 0); + private InputClass input = null; + private MouseInput mouseInput = null; + + private PlayClass play = null; + private bool networkEnabled; + private PlayClass peer = null; + private PositionedMesh spaceSphere = null; + private Ship playerShip = null; + private Ship opponentShip = null; + private Camera camera = null; + private CameraMode cameraMode = CameraMode.ChaseMode; + private Matrix viewMatrix; + private Vector2 screenCenter; + private Vector2 mouseLoc; + private SoundHandler soundHandler = null; + private bool kbThrust = false; + private bool cPressed = false; + private bool f5Pressed = false; + private bool f6Pressed = false; + private bool f7Pressed = false; + private bool f8Pressed = false; + private bool f9Pressed = false; + private bool f10Pressed = false; + private bool spacePressed = false; + + private Texture bgPointerTexture = null; + private Texture vectorPanel = null; + private RenderToSurface rts = null; + private Surface renderSurface = null; + private BGPointer bgPointer = null; + private int range = 0; + + + + private string debugText; + public string DebugText { get { return debugText; } set { debugText = value; } } + private bool debugging = true; + + public GameClass(bool startFullScreen, Size size, bool enableNetwork) { + this.startFullscreen = startFullScreen; + this.Size = size; + this.networkEnabled = enableNetwork; + this.Text = "SpaceWar3D-Step08"; + + drawingFont = new GraphicsFont( "Verdana", System.Drawing.FontStyle.Regular); + + input = new InputClass(this); + mouseInput = new MouseInput(this); + this.MouseMove +=new MouseEventHandler(GameClass_MouseMove); + this.Cursor = Cursors.NoMove2D; + + + camera = new Camera(); + soundHandler = new SoundHandler(this); + + if (networkEnabled) { + peer = new PlayClass(this); + } + + } + + private void ProcessInput() { + //Get input + KeyboardState kbState = input.GetInputState(); + if (kbState == null) + return; + if (kbState[Key.W] || kbState[Key.Up]) { + kbThrust = true; + } + else { + kbThrust = false; + } + if (kbState[Key.C] && !cPressed) { + cPressed = true; + SelectNextCameraMode(); + } + if (!kbState[Key.C]) { + cPressed = false; + } + + if (kbState[Key.F5] && !f5Pressed) { + f5Pressed = true; + playerShip.Sounds |= Sounds.Taunt; + } + if (!kbState[Key.F5]) { + f5Pressed = false; + } + if (kbState[Key.F6] && !f6Pressed) { + f6Pressed = true; + playerShip.Sounds |= Sounds.Dude1; + } + if (!kbState[Key.F6]) { + f6Pressed = false; + } + if (kbState[Key.F7] && !f7Pressed) { + f7Pressed = true; + playerShip.Sounds |= Sounds.Dude2; + } + if (!kbState[Key.F7]) { + f7Pressed = false; + } + if (kbState[Key.F8] && !f8Pressed) { + f8Pressed = true; + playerShip.Sounds |= Sounds.Dude3; + } + if (!kbState[Key.F8]) { + f8Pressed = false; + } + if (kbState[Key.F9] && !f9Pressed) { + f9Pressed = true; + playerShip.Sounds |= Sounds.Dude4; + } + if (!kbState[Key.F9]) { + f9Pressed = false; + } + if (kbState[Key.F10] && !f10Pressed) { + f10Pressed = true; + playerShip.Sounds |= Sounds.Dude1; + } + if (!kbState[Key.F10]) { + f10Pressed = false; + } + if (kbState[Key.Space] && !spacePressed) { + spacePressed = true; + playerShip.EnterHyper(); + } + if (!kbState[Key.Space]) { + spacePressed = false; + } + } + + protected override void FrameMove() { + int fps = (int) framePerSecond; + debugText = "FPS: " + fps.ToString() + "\r\n"; + debugText += "CameraMode: " + cameraMode.ToString()+"\r\n"; + debugText += "Use the mouse to rotate your ship, and W or the \r\n" + + "up arrow to thrust forward. The C key changes the camera views. F5-F10 for sounds \r\n\r\n"; + ProcessInput(); + MouseControlValues v = mouseInput.Values; + if (v.FireButtonPushed) + playerShip.Shoot(); + + float yawAmount = mouseLoc.X - screenCenter.X; + float pitchAmount = mouseLoc.Y - screenCenter.Y; + + playerShip.YawPitchRoll(yawAmount, pitchAmount, elapsedTime); + playerShip.SetThrust(v.ThrustButtonPushed | kbThrust, elapsedTime); + playerShip.UpdatePosition(elapsedTime); + playerShip.TestShip(opponentShip); + + opponentShip.SetThrust(true, elapsedTime); + opponentShip.YawPitchRoll(250,0,elapsedTime); + opponentShip.TestShip(playerShip); + opponentShip.UpdatePosition(elapsedTime); + opponentShip.UpdateState(elapsedTime); + + /*Here we set up the view matrix and space dome location. The space dome moves but not rotates with the player + * and is alway drawn first, so it looks like it is infinitely distant. + * + * In chase mode, the chaseMatrix determines the offset from the ship. If you want to move our viewpoint + * back from the ship more, increase the negative z value. + * + * The fixed mode camera sits at the origin and always tracks the player ship. Very hard to control from + * this viewpoint, but cool to watch. + */ + + Vector3 spaceSphereLocation = new Vector3(0, 0, 0); + switch (cameraMode) { + case CameraMode.ChaseMode: { + Matrix chaseMatrix = Matrix.Translation(0, 6, -14); + chaseMatrix *= playerShip.Position.WorldMatrix; + viewMatrix = Matrix.Invert(chaseMatrix); + spaceSphereLocation = playerShip.Position.Location; + break; + } + case CameraMode.CockpitMode: { + viewMatrix = Matrix.Invert(playerShip.Position.WorldMatrix); + spaceSphereLocation = playerShip.Position.Location; + break; + } + case CameraMode.Fixed: { + camera.Point(0,0,0, + playerShip.Position.XPos, + playerShip.Position.YPos, + playerShip.Position.ZPos); + viewMatrix = camera.ViewMatrix; + spaceSphereLocation = new Vector3(0, 0, 0); + break; + } + } + device.Transform.View = viewMatrix; + spaceSphere.Position.Location = spaceSphereLocation; + + //rotate space very slowly for that nice twinkly star effect + spaceSphere.Position.RotateRel(-.001f * elapsedTime,-0.0001f * elapsedTime, 0); + + //Calculate range and direction to target + range = (int) Vector3.Length( + playerShip.Position.Location - opponentShip.Position.Location); + bgPointer.Point(playerShip.Position, opponentShip.Position); + + //Play the sounds + soundHandler.Play(opponentShip.Sounds | playerShip.Sounds); + opponentShip.Sounds = (Sounds) 0; + playerShip.Sounds = (Sounds) 0; + } + + + /// + /// Called once per frame, the call is the entry point for 3d rendering. This + /// function sets up render states, clears the viewport, and renders the scene. + /// + protected override void Render() { + RenderBGPointer(); + + //Clear the backbuffer to a Blue color + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + + //Set the view matrix + device.Transform.View = viewMatrix; + + //Begin the scene + device.BeginScene(); + device.RenderState.ZBufferEnable = false; + device.RenderState.Lighting = false; + spaceSphere.Render(); + device.RenderState.Lighting = true; + device.RenderState.ZBufferEnable = true; + + device.Transform.World = playerShip.Position.WorldMatrix; + playerShip.Render(); + opponentShip.Render(); + + //Render our targeting pointer + using (Sprite pointerSprite = new Sprite(device)) { + pointerSprite.Begin(SpriteFlags.AlphaBlend); + + pointerSprite.Draw(bgPointerTexture, new Rectangle(0, 0, 128, 128), + new Vector3(0, 0, 0), new Vector3(42, this.Height - 250, 0), Color.White); + pointerSprite.Transform = Matrix.Identity; + pointerSprite.Draw(vectorPanel,new Rectangle(0,0,193,173), + new Vector3(0,0,0), new Vector3(10, this.Height- 282, 0), Color.White); + pointerSprite.End(); + } + + if (debugging) { + drawingFont.DrawText(5,5,Color.Yellow,debugText); + } + device.EndScene(); + } + + private void RenderBGPointer() { + Viewport view = new Viewport(); + view.Width = 128; + view.Height = 128; + view.MaxZ = 1.0f; + + Matrix currentViewMatrix = device.Transform.View; + rts.BeginScene(renderSurface, view); + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); + if (playerShip.State == ShipState.Normal && + opponentShip.State == ShipState.Normal) { + Matrix pointerViewMatrix = Matrix.Translation(0, 2, -15); + pointerViewMatrix *= playerShip.Position.WorldMatrix; + device.Transform.View = Matrix.Invert(pointerViewMatrix); + + bgPointer.Render(); + drawingFont.DrawText(2,2,Color.LimeGreen, "Range: " + range.ToString()); + } + rts.EndScene(Filter.Linear); + device.Transform.View = currentViewMatrix; + } + + /// + /// Initialize scene objects. + /// + protected override void InitializeDeviceObjects() { + drawingFont.InitializeDeviceObjects(device); + + spaceSphere = new PositionedMesh(device, "SpaceSphere.x"); + + HullColors hullColor = HullColors.White; + playerShip = new Ship(device, this, hullColor); + if (playerShip.HostName == null) + playerShip.HostName = "Player"; + playerShip.State = ShipState.Normal; + + HullColors opponentHullColor; + if (hullColor == HullColors.Red) + opponentHullColor = HullColors.White; + else + opponentHullColor = HullColors.Red; + + opponentShip = new Ship(device, this, opponentHullColor); + if (opponentShip.HostName == null) + opponentShip.HostName = "Opponent"; + opponentShip.State = ShipState.Normal; + + bgPointer = new BGPointer(device); + vectorPanel = TextureLoader.FromFile(device, MediaUtilities.FindFile("vectorPanel.png")); + rts = new RenderToSurface(device, 128, 128, Format.X8R8G8B8, true, DepthFormat.D16); + + + } + + /// + /// Called when a device needs to be restored. + /// + protected override void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { + device.RenderState.Ambient = Color.FromArgb(150,150,150); + device.RenderState.SpecularEnable = true; + device.Lights[0].Type = LightType.Directional; + device.Lights[0].Direction = new Vector3(0,-1, -1); + device.Lights[0].Diffuse = Color.White; + device.Lights[0].Specular = Color.White; + device.Lights[0].Enabled = true; + device.RenderState.Lighting = true; + + device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, + (presentParams.BackBufferWidth/presentParams.BackBufferHeight), + 1.5f, 20000.0f ); + + device.Transform.View = camera.ViewMatrix; + + screenCenter = new Vector2( + presentParams.BackBufferWidth / 2, + presentParams.BackBufferHeight / 2); + + if (bgPointerTexture != null) + bgPointerTexture.Dispose(); + bgPointerTexture = new Texture(device, 128, 128, 1, Usage.RenderTarget, + Format.X8R8G8B8, Pool.Default); + renderSurface = bgPointerTexture.GetSurfaceLevel(0); + + + } + + protected override void Dispose(bool disposing) { + if (networkEnabled) + play.Dispose(); + base.Dispose(disposing); + } + + public void MessageArrived(byte message) { + + } + public void SendPoint() { + + } + + /// + // When the peer closes, the code here is executed. + /// + public void PeerClose() { + // The session was terminated, go ahead and shut down + this.Dispose(); + } + + private void SelectNextCameraMode() { + int mode = (int) cameraMode; + mode++; + if (mode > 2) + mode = 0; + cameraMode = (CameraMode) mode; + } + + private void GameClass_MouseMove(object sender, MouseEventArgs e) { + mouseLoc.X = e.X; + mouseLoc.Y = e.Y; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/GameClass.resx b/Source Code updated 08-12-05/Spacewar3D/Step08/GameClass.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/GameClass.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/HelpScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/HelpScreen.cs new file mode 100644 index 0000000..7d54363 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/HelpScreen.cs @@ -0,0 +1,113 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.IO; + + + /// + /// Summary description for HelpScreen. + /// +public class HelpScreen : System.Windows.Forms.Form { + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.TextBox helpText; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public HelpScreen() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + string helpFile = MediaUtilities.FindFile("Help.txt"); + if (File.Exists(helpFile)) { + StreamReader sr; + try { + sr = new StreamReader(helpFile); + helpText.Text = sr.ReadToEnd(); + sr.Close(); + } + catch ( Exception e ) { + helpText.Text = e.ToString(); + } + + } + else { + helpText.Text = "Unable to locate " + helpFile.ToString(); + } + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.closeButton = new System.Windows.Forms.Button(); + this.helpText = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // closeButton + // + this.closeButton.BackColor = System.Drawing.Color.Black; + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.Dock = System.Windows.Forms.DockStyle.Bottom; + this.closeButton.ForeColor = System.Drawing.Color.Red; + this.closeButton.Location = new System.Drawing.Point(0, 615); + this.closeButton.Name = "closeButton"; + this.closeButton.Size = new System.Drawing.Size(616, 23); + this.closeButton.TabIndex = 0; + this.closeButton.Text = "Close"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // helpText + // + this.helpText.BackColor = System.Drawing.Color.Black; + this.helpText.Dock = System.Windows.Forms.DockStyle.Fill; + this.helpText.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.helpText.ForeColor = System.Drawing.Color.Red; + this.helpText.Location = new System.Drawing.Point(0, 0); + this.helpText.Multiline = true; + this.helpText.Name = "helpText"; + this.helpText.ReadOnly = true; + this.helpText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.helpText.Size = new System.Drawing.Size(616, 615); + this.helpText.TabIndex = 1; + this.helpText.TabStop = false; + this.helpText.Text = ""; + // + // HelpScreen + // + this.AcceptButton = this.closeButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(616, 638); + this.Controls.Add(this.helpText); + this.Controls.Add(this.closeButton); + this.Name = "HelpScreen"; + this.Text = "SpaceWar! Help"; + this.ResumeLayout(false); + + } + #endregion + + private void closeButton_Click(object sender, System.EventArgs e) { + this.Close(); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/HelpScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step08/HelpScreen.resx new file mode 100644 index 0000000..a4f535a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/HelpScreen.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + HelpScreen + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/MediaUtilities.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/MediaUtilities.cs new file mode 100644 index 0000000..685a63d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/MediaUtilities.cs @@ -0,0 +1,35 @@ +using System; +using System.IO; +using System.Configuration; + + + /// + /// Summary description for MediaUtilities. + /// +public class MediaUtilities { + // private static string defaultPath = @"..\..\media\"; + private static string mediaPath = ConfigurationSettings.AppSettings.Get("MediaPath"); + + public MediaUtilities() { + } + + public static string FindFile(string filename) { + return FindFile(mediaPath, filename); + } + + public static string FindFile(string path, string filename) { + // First try to load the file in the full path + string fullName = AppendDirectorySeparator(path) + filename; + if (File.Exists(fullName)) + return fullName; + else + throw new FileNotFoundException("Could not find this file.", filename); + } + + private static string AppendDirectorySeparator(string pathname) { + if (!pathname.EndsWith(@"\")) + return pathname + @"\"; + else + return pathname; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/MouseInput.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/MouseInput.cs new file mode 100644 index 0000000..55a295e --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/MouseInput.cs @@ -0,0 +1,55 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + + + +public struct MouseControlValues { + public int Yaw; + public int Pitch; + public bool FireButtonPushed; + public bool ThrustButtonPushed; +} + + /// + /// Summary description for MouseInput. + /// +public class MouseInput { + private Device device = null; + private MouseControlValues values; + public MouseControlValues Values { + get { + UpdateInput(); + return values; + } + } + + public MouseInput(Control parent) { + // Create our mouse device + device = new Device(SystemGuid.Mouse); + device.SetCooperativeLevel(parent, CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive); + device.Properties.AxisModeAbsolute = false; + device.Acquire(); + } + + + public void UpdateInput() { + MouseState state = device.CurrentMouseState; + values.Yaw = state.X; + values.Pitch = state.Y; + + byte [] buttonStatus = state.GetMouseButtons(); + if (buttonStatus[0]!=0) + values.FireButtonPushed = true; + else + values.FireButtonPushed = false; + + if (buttonStatus[1]!=0) + values.ThrustButtonPushed = true; + else + values.ThrustButtonPushed = false; + + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/Photon.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/Photon.cs new file mode 100644 index 0000000..39efb40 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/Photon.cs @@ -0,0 +1,95 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// Summary description for Photon. + /// +public class Photon : IDisposable { + + private const float maxLife = 5; + public Vector3 Location { + get { + + return photonMesh.Position.Location; + } set { + photonMesh.Position.Location = value; + } + } + + private Vector3 launchVector; + private PositionedMesh photonMesh; + private Device device; + private float age; + public float Age { get { return age; } set { age = value; } } + private bool alive = false; + public bool Alive { get { return alive; } set { alive = value; } } + + private bool disposing = false; + + public Photon(Device device) { + this.device = device; + + photonMesh = new PositionedMesh(device, "photon.x"); + + alive = false; + age = 0; + } + + public void SetShot(Vector3 position, Vector3 launchVector) { + age = 0; + alive = true; + photonMesh.Position.Location = position; + this.launchVector = launchVector; + } + + public void UpdatePosition(float elapsedtime) { + if (disposing) + return; + age += elapsedtime; + if (age >= Constants.ShotLifetime ) { + this.alive = false; + } + else { + photonMesh.Position.RotateRel(0, elapsedtime*10,0); + Vector3 moveVector = elapsedtime * Constants.ShotVelocity * launchVector; + photonMesh.Position.MoveRel(moveVector.X, moveVector.Y, moveVector.Z); + } + + } + + public void Render() { + if (disposing | !alive) + return; + + device.RenderState.Lighting = false; + + device.RenderState.AlphaBlendEnable = true; + device.RenderState.AlphaBlendOperation = BlendOperation.Add; + device.RenderState.AlphaSourceBlend = Blend.One; + device.RenderState.DestinationBlend = Blend.One; + device.Transform.World = photonMesh.Position.WorldMatrix; + photonMesh.Render(); + device.RenderState.AlphaBlendEnable = false; + device.RenderState.Lighting = true; + } + + public void RestoreDeviceObjects() { + + } + #region IDisposable Members + + public void Dispose() { + disposing = true; + + if (photonMesh != null) + photonMesh.Dispose(); + + } + + #endregion +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/PositionedMesh.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/PositionedMesh.cs new file mode 100644 index 0000000..7f5f278 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/PositionedMesh.cs @@ -0,0 +1,435 @@ +using System; +using System.Drawing; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public class PositionedMesh : IDisposable { + private Device device = null; + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + private Sphere boundingSphere; + + + private WorldPosition worldPosition; + public WorldPosition Position { get { return worldPosition; } set { worldPosition = value; } } + + private float velocity; + public float Velocity { get { return velocity; } set { velocity = value; } } + + /// + /// Constructor + /// + /// The initial filename + public PositionedMesh(string filename) { + fileName = filename; + } + public PositionedMesh() : this ("PositionedMesh") {} + + public PositionedMesh(Device device, string filename) { + Create(device, filename); + } + + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + /// + ///The bounding sphere + /// + public Sphere BoundingSphere { + get { return boundingSphere; } + } + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + worldPosition = new WorldPosition(); + + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + this.device = device; + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + + + + filename = MediaUtilities.FindFile(filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(filename, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + + Mesh tempMesh = null; + string errorString; + tempMesh = Mesh.Clean(CleanType.Optimization, systemMemoryMesh, adjacencyBuffer, adjacencyBuffer, out errorString); + if (tempMesh != systemMemoryMesh) { + systemMemoryMesh.Dispose(); + systemMemoryMesh = tempMesh; + } + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + + // Setup bounding volumes + VertexBuffer vb = systemMemoryMesh.VertexBuffer; + GraphicsStream vertexData = vb.Lock(0, 0, LockFlags.NoSystemLock); + boundingSphere.Radius = Geometry.ComputeBoundingSphere(vertexData,systemMemoryMesh.NumberVertices,systemMemoryMesh.VertexFormat, out boundingSphere.CenterPoint); + vb.Unlock(); + vb.Dispose(); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + + + } + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. + localMemoryMesh = systemMemoryMesh.Clone(MeshFlags.VbWriteOnly | MeshFlags.IbWriteOnly, + systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + // Set the world transform + device.Transform.World = worldPosition.WorldMatrix; + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render() { + Render(true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/Ship.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/Ship.cs new file mode 100644 index 0000000..cdd2605 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/Ship.cs @@ -0,0 +1,410 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// This class handles the drawing and collision detection routines for our ship. + /// +public class Ship { + private Shots shots; + private ShipState state = ShipState.Dead; // current state + public ShipState State { get { lock(this){return state;} } set { lock(this){ state = value; }}} + + private Device device; + private PositionedMesh shipMesh; + + private GameClass game; + + private float velocity; + + private string hostName; + + private float waitCount = 6.0f; // wait count before state transition. + public float WaitCount { get { lock(this){return waitCount; }} set { lock(this){ waitCount = value; }}} + private int score; // our score + + private int deathCount; // # of times we've died... + private float hyperSuccess = Constants.HyperSuccessFactor; // chance of a hyper being successful... + + private Sounds sounds; + private Vector3 startingPosition; + + public Shots ShotHandler { + get { + lock(this) { + return shots; + } + } + } + public int DeathCount { + get { + lock(this) { + return deathCount; + } + } + set { + lock(this) { + deathCount = value; + } + } + } + + public int Score { + get { + lock(this) { + return score; + } + } + set { + lock(this) { + score = value; + } + } + } + + public string HostName { + get { + lock(this) { + return hostName; + } + } + set { + lock(this) { + hostName = value; + } + } + } + + public Vector3 Location { + get { + lock (this) { + return shipMesh.Position.Location; + } + } + set { + lock (this) { + shipMesh.Position.Location = value; + } + } + } + + public Vector3 Rotation { + get { + lock(this) { + return shipMesh.Position.Rotation; + } + } + set { + lock(this) { + shipMesh.Position.Rotation = value; + } + } + } + + public WorldPosition Position { + get { + lock (this) { + return shipMesh.Position; + } + } + set { + lock(this) { + shipMesh.Position=value; + } + } + } + + public float Velocity { + get { + lock (this) { + return velocity; + } + } + set { + lock(this) { + velocity = value; + } + } + } + + + + public Sounds Sounds { + get { + lock(this) { + return sounds; + } + } + set { + lock(this) { + sounds = value; + } + } + } + + public Ship(Device device, GameClass gameClass, HullColors hullColor) { + + this.device = device; + this.game = gameClass; + shots = new Shots(device); + if (hullColor == HullColors.White) { + shipMesh = new PositionedMesh(device, "WhiteShip.x"); + startingPosition = new Vector3(10, 0, 10); + } + else { + shipMesh = new PositionedMesh(device, "RedShip.x"); + startingPosition = new Vector3(-50, 0, -150); + } + + SetRandomPosition(true); + + } + + + public void Shoot() { + if (this.state != ShipState.Normal) { + return; + } + + // find out the location of the front of the ship... + + bool shot = shots.Shoot(this.Position.CombinedLocation, this.Position.Direction); + if (shot) { + sounds |= Sounds.ShipFire; + } + } + + public void SetThrust(bool thrust, float elapsedTime) { + + if (thrust && (state == ShipState.Normal)) { + + if (velocity < Constants.MaxVelocity * 0.1f) + velocity = Constants.MaxVelocity * 0.1f; + if (velocity < Constants.MaxVelocity) + velocity += velocity * Constants.ThrustPower; + if (velocity > Constants.MaxVelocity) + velocity = Constants.MaxVelocity; + sounds |= Sounds.ShipThrust; + } + + else { + velocity -= velocity * elapsedTime * 2; + if (velocity < 0.00005f) + velocity = 0.0f; + + if ((sounds & Sounds.ShipThrust) != 0) + sounds ^= Sounds.ShipThrust; + } + } + + + public void EnterHyper() { + if (state != ShipState.Normal) + return; + + SetState(ShipState.HyperCharge); + } + + public void SetRandomPosition(bool setOriginal) { + if (setOriginal) { + shipMesh.Position.Move(startingPosition); + } + else { + shipMesh.Position.RotateRel(0,Constants.random.Next(100),0); + shipMesh.Position.Move( + Constants.random.Next(1000)-500, + Constants.random.Next(1000)-500, + Constants.random.Next(1000)-500); + } + } + + public void SetState(ShipState newState) { + if (newState == state) + return; + + lock(this) { + + switch (newState) { + case ShipState.Dying: + deathCount++; + waitCount = Constants.DyingCycle; + sounds |= Sounds.ShipExplode; + break; + + case ShipState.Dead: + waitCount = Constants.DeadCycleWait; + shipMesh.Position.Move(this.startingPosition); + + break; + + case ShipState.Normal: + if (state == ShipState.Hyper) { + SetRandomPosition(false); + } + else { + shipMesh.Position.Move(startingPosition); + velocity = 0.0f; + } + hyperSuccess = Constants.HyperSuccessFactor; + shots.Clear(); + sounds |= Sounds.ShipAppear; + break; + + case ShipState.HyperCharge: + sounds |= Sounds.ShipHyper; + waitCount = Constants.HyperChargeWait; + break; + + case ShipState.Hyper: + waitCount = Constants.HyperCycleWait; + break; + } + state = newState; + } + } + + + public void YawPitchRoll(float yawAmount, float pitchAmount, float elapsedTime) { + float absYaw = Math.Abs(yawAmount); + if ( (0 <= absYaw) & (absYaw <= 30)) { + yawAmount = 0; + } + else if ((31 <= absYaw) & (absYaw <= 150)) { + yawAmount *= 1; + } + else { + yawAmount *= 1.2f; + } + + const float sensitivity = 0.002f; + + float yaw = yawAmount * elapsedTime * sensitivity; + + float absPitch = Math.Abs(pitchAmount); + + if ( (0 <= absPitch) & (absPitch <= 30)) { + pitchAmount = 0; + } + else if ((31 <= absPitch) & (absPitch <= 150)) { + pitchAmount *= 1; + } + else { + pitchAmount *= 1.2f; + } + + float pitch = pitchAmount * elapsedTime * sensitivity; + float roll = 0; + + + this.Position.YawPitchRoll(yaw, pitch, roll); + + } + + public void UpdatePosition(float elapsedTime) { + shots.UpdatePosition(elapsedTime); + + if (state == ShipState.Dying) { + return; + } + + + if ((state != ShipState.Normal) && + (state != ShipState.HyperCharge)) + return; + + float xAdd = (elapsedTime * velocity * Position.Direction.X); + float yAdd = (elapsedTime * velocity * Position.Direction.Y); + float zAdd = (elapsedTime * velocity * Position.Direction.Z); + + this.Position.MoveRel(xAdd, yAdd, zAdd); + + } + + public void UpdateState(float elapsedTime) { + if (state == ShipState.Dying) { + this.waitCount -= elapsedTime; + if (waitCount <= 0) { + SetState(ShipState.Dead); + } + } + + if (state == ShipState.Dead) { + this.waitCount -= elapsedTime; + if (waitCount <= 0) { + SetState(ShipState.Normal); + } + } + + if (state == ShipState.HyperCharge) { + this.waitCount -= elapsedTime; + shipMesh.Position.RotateRel(0,-elapsedTime * Constants.HyperCycleWait *6.0f, 0); + + if (waitCount <= 0) { + // if we didn't make it, we're dying... + double randValue = Constants.random.NextDouble(); + if (hyperSuccess < randValue) { + SetState(ShipState.Dying); + game.SendPoint(); + } + else { + SetState(ShipState.Hyper); + } + } + } + if (state == ShipState.Hyper) { + this.waitCount -= elapsedTime; + shipMesh.Position.RotateRel(0, -elapsedTime * this.waitCount * 6.0f, 0); + if (waitCount <= 0) { + hyperSuccess -= Constants.HyperSuccessDegradation; + float save = this.hyperSuccess; + SetState(ShipState.Normal); + hyperSuccess = save; + } + } + + } + public void TestShip(Ship otherShip) { + + // if we're not alive, don't do any tests... + if (state != ShipState.Normal) + return; + + // Test if their shots are close enough to us. + if (otherShip.shots.TestShots(this)) { + SetState(ShipState.Dying); + game.SendPoint(); + } + + //Test for collision with ship or it's death explosion + if ((otherShip.state == ShipState.Normal) | (otherShip.state == ShipState.Dying)) { + Vector3 delta = this.Position.Location - otherShip.Position.Location; + if (Vector3.Length(delta) < Constants.ShipCollisionLimit) { + SetState(ShipState.Dying); + game.SendPoint(); + } + } + } + + public void Render() { + switch (this.state) { + case ShipState.Normal: { + device.RenderState.Lighting = true; + device.RenderState.ZBufferEnable = true; + device.Transform.World = shipMesh.Position.WorldMatrix; + shipMesh.Render(); + shots.Render(); + break; + } + case ShipState.Dying: { + break; + } + default: { + return; + } + } + } + +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/ShipSkins.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/ShipSkins.cs new file mode 100644 index 0000000..42b4546 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/ShipSkins.cs @@ -0,0 +1,5 @@ +public enum HullColors { + Red, + White +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/ShipState.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/ShipState.cs new file mode 100644 index 0000000..827eb64 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/ShipState.cs @@ -0,0 +1,12 @@ +using System; + + +public enum ShipState { + Normal, + Dying, + Dead, + Hyper, + HyperCharge, +}; + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/Shots.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/Shots.cs new file mode 100644 index 0000000..d1aed11 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/Shots.cs @@ -0,0 +1,101 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + /// + /// Handles the collision detection and returns the array of shots for sending to other players + /// +[Serializable] +public class Shots { + + Photon[] shots; + [NonSerialized] + float timeSinceShot = 0; + [NonSerialized] + Rectangle screenBounds; + + + public Shots(Device device) { + shots = new Photon[Constants.NumShots]; + for (int count = 0; count < Constants.NumShots; count++) { + shots[count] = new Photon(device); + } + } + + public Rectangle ScreenBounds { + get { + return screenBounds; + } + set { + screenBounds = value; + } + } + public Photon[] GetShotArray() { + lock(this) { + return shots; + } + } + + public void SetShotArray(Photon[] shotArray) { + lock(this) { + this.shots = shotArray; + } + } + + public bool Shoot(Vector3 position, Vector3 launchVector) { + if (timeSinceShot < Constants.ShotDeltaTime) + return false; + + timeSinceShot = 0; + + + foreach (Photon shot in shots) { + if (!shot.Alive) { + shot.SetShot(position, launchVector); + return true; + } + } + return false; + } + + public void UpdatePosition(float elapsedTime) { + timeSinceShot += elapsedTime; + + foreach (Photon shot in shots) { + shot.UpdatePosition(elapsedTime); + } + } + + public void Clear() { + foreach (Photon shot in shots) { + shot.Alive = false; + } + } + public bool TestShots(Ship ship) { + foreach (Photon shot in shots) { + if (shot.Alive) { + float distance = Vector3.Length(shot.Location - ship.Position.Location); + if (distance < Constants.ShotCollisionLimit) { + shot.Alive = false; + return true; + } + } + } + return false; + } + + public void Render() { + foreach (Photon shot in shots) { + shot.Render(); + } + } + + public void RestoreDeviceObjects() { + foreach (Photon shot in shots) { + shot.RestoreDeviceObjects(); + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/SoundBuffer.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/SoundBuffer.cs new file mode 100644 index 0000000..75c3d53 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/SoundBuffer.cs @@ -0,0 +1,71 @@ +using System; +using Microsoft.DirectX.DirectSound; + + + /// + /// A single sound buffer for use by the SoundHandler class. + /// +public class SoundBuffer { + Microsoft.DirectX.DirectSound.Buffer buffer; + Sounds thisSound; + bool looping; + bool lastValue; + + public SoundBuffer(Microsoft.DirectX.DirectSound.Device soundDevice, string filename, Sounds thisSound, bool looping) { + this.thisSound = thisSound; + this.looping = looping; + + BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + try { + buffer = new Microsoft.DirectX.DirectSound.Buffer( + filename, + bufferDesc, + soundDevice); + } + catch (Exception e) { + throw new Exception( + String.Format("Error opening {0}; ", + filename), e); + } + } + + public Sounds Sound { + get { + return thisSound; + } + } + + public int Volume { + get { + return buffer.Volume; + } + set { + buffer.Volume = value; + } + } + + public void Play(bool on) { + // looping sounds don't get restarted + if (looping) { + if (on) { + if (!lastValue) { + buffer.SetCurrentPosition(1000); + buffer.Play(0,BufferPlayFlags.Looping); + } + } + else { + buffer.Stop(); + } + lastValue = on; + } + else { + if (on) { + buffer.SetCurrentPosition(0); + buffer.Play(0,BufferPlayFlags.Default); + } + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/SoundHandler.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/SoundHandler.cs new file mode 100644 index 0000000..1782d3f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/SoundHandler.cs @@ -0,0 +1,86 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX.DirectSound; +using System.Collections; + + + /// + /// This class handles loading and playing our sounds. + /// +public class SoundHandler { + Device soundDevice; + ArrayList sounds = new ArrayList(); + + Sounds lastSound; + + const int VolumeEngine = -1000; + const int VolumeOtherShot = -2000; + const int VolumeHaHa = -3000; + + + public SoundHandler(Control owner) { + soundDevice = new Device(); + soundDevice.SetCooperativeLevel(owner,CooperativeLevel.Normal); + CreateSoundBuffers(); + } + + Microsoft.DirectX.DirectSound.Buffer LoadFile(string filename) { + + Microsoft.DirectX.DirectSound.BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + Microsoft.DirectX.DirectSound.Buffer buffer; + buffer = new Microsoft.DirectX.DirectSound.Buffer(filename, bufferDesc, soundDevice); + + + return buffer; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping, int volume) { + SoundBuffer buffer; + + buffer = new SoundBuffer( + soundDevice, + filename, + thisSound, + looping); + sounds.Add(buffer); + buffer.Volume = volume; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping) { + AddBuffer(filename, thisSound, looping, 0); + } + + void CreateSoundBuffers() { + AddBuffer(MediaUtilities.FindFile("hypercharge.wav"), Sounds.ShipHyper, false); + AddBuffer(MediaUtilities.FindFile("sci fi bass.wav"), Sounds.ShipAppear, false); + AddBuffer(MediaUtilities.FindFile("laser2.wav"), Sounds.ShipFire, false); + AddBuffer(MediaUtilities.FindFile("explode.wav"), Sounds.ShipExplode, false); + + AddBuffer(MediaUtilities.FindFile("engine.wav"), Sounds.ShipThrust, true, VolumeEngine); + AddBuffer(MediaUtilities.FindFile("laser2_other.wav"), Sounds.OtherShipFire, false, VolumeOtherShot); + AddBuffer(MediaUtilities.FindFile("explode_other.wav"), Sounds.OtherShipExplode, false); + AddBuffer(MediaUtilities.FindFile("engine_other.wav"), Sounds.OtherShipThrust, true, VolumeEngine); + + AddBuffer(MediaUtilities.FindFile("sci fi bass.wav"), Sounds.OtherShipAppear, false); + AddBuffer(MediaUtilities.FindFile("haha.wav"), Sounds.Taunt, false, VolumeHaHa); + + AddBuffer(MediaUtilities.FindFile("dude_quest1.wav"), Sounds.Dude1, false); + AddBuffer(MediaUtilities.FindFile("dude_quest2.wav"), Sounds.Dude2, false); + AddBuffer(MediaUtilities.FindFile("dude_quest3.wav"), Sounds.Dude3, false); + AddBuffer(MediaUtilities.FindFile("dude_quest4.wav"), Sounds.Dude4, false); + AddBuffer(MediaUtilities.FindFile("dude_quest5.wav"), Sounds.Dude5, false); + } + + public void Play(Sounds soundsToPlay) { + // check each enum value. If that value + // is set, play the sound... + foreach (SoundBuffer buffer in sounds) { + bool on = ((buffer.Sound & soundsToPlay) != 0); + buffer.Play(on); + + } + lastSound = soundsToPlay; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/Sounds.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/Sounds.cs new file mode 100644 index 0000000..0f3b6ac --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/Sounds.cs @@ -0,0 +1,21 @@ +using System; + + +[Flags] +public enum Sounds { + ShipAppear = 0x00000001, + ShipHyper = 0x00000002, + ShipFire = 0x00000004, + ShipExplode = 0x00000008, + ShipThrust = 0x00000010, + OtherShipThrust = 0x00000020, + OtherShipExplode = 0x00000040, + OtherShipFire = 0x00000080, + OtherShipAppear = 0x00000100, + Taunt = 0x00000200, + Dude1 = 0x00000400, + Dude2 = 0x00000800, + Dude3 = 0x00001000, + Dude4 = 0x00002000, + Dude5 = 0x00004000, +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/SpaceWar3D.ico b/Source Code updated 08-12-05/Spacewar3D/Step08/SpaceWar3D.ico new file mode 100644 index 0000000..5db9a4d Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Step08/SpaceWar3D.ico differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/SphereStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/SphereStruct.cs new file mode 100644 index 0000000..90d9d6f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/SphereStruct.cs @@ -0,0 +1,6 @@ +using Microsoft.DirectX; + +public struct Sphere { + public Vector3 CenterPoint; + public float Radius; +}; \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/SplashScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/SplashScreen.cs new file mode 100644 index 0000000..512a86b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/SplashScreen.cs @@ -0,0 +1,236 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + + + /// + /// Spacewar Splashscreen + /// +public class SplashScreen : System.Windows.Forms.Form { + private MainClass mainClass; + private System.Windows.Forms.Button helpButton; + private System.Windows.Forms.Button startButton; + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.Button soloButton; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.CheckBox checkBox1; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + public SplashScreen(MainClass main) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + this.mainClass = main; + radioButton3.Checked = true; + checkBox1.Checked = true; + mainClass.GameFormSize = new Size(1024,768); + mainClass.FullScreen = true; + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(SplashScreen)); + this.helpButton = new System.Windows.Forms.Button(); + this.startButton = new System.Windows.Forms.Button(); + this.closeButton = new System.Windows.Forms.Button(); + this.soloButton = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // helpButton + // + this.helpButton.ForeColor = System.Drawing.Color.White; + this.helpButton.Location = new System.Drawing.Point(440, 280); + this.helpButton.Name = "helpButton"; + this.helpButton.Size = new System.Drawing.Size(136, 32); + this.helpButton.TabIndex = 5; + this.helpButton.Text = "Show Help"; + this.helpButton.Click += new System.EventHandler(this.helpButton_Click); + // + // startButton + // + this.startButton.ForeColor = System.Drawing.Color.White; + this.startButton.Location = new System.Drawing.Point(440, 364); + this.startButton.Name = "startButton"; + this.startButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.startButton.Size = new System.Drawing.Size(136, 32); + this.startButton.TabIndex = 7; + this.startButton.Text = "Network Play"; + this.startButton.Click += new System.EventHandler(this.startButton_Click); + // + // closeButton + // + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.ForeColor = System.Drawing.Color.White; + this.closeButton.Location = new System.Drawing.Point(440, 406); + this.closeButton.Name = "closeButton"; + this.closeButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.closeButton.Size = new System.Drawing.Size(136, 32); + this.closeButton.TabIndex = 8; + this.closeButton.Text = "Exit"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // soloButton + // + this.soloButton.ForeColor = System.Drawing.Color.White; + this.soloButton.Location = new System.Drawing.Point(440, 322); + this.soloButton.Name = "soloButton"; + this.soloButton.Size = new System.Drawing.Size(136, 32); + this.soloButton.TabIndex = 6; + this.soloButton.Text = "Solo Play"; + this.soloButton.Click += new System.EventHandler(this.soloButton_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.radioButton3); + this.groupBox1.Controls.Add(this.radioButton2); + this.groupBox1.Controls.Add(this.radioButton1); + this.groupBox1.ForeColor = System.Drawing.Color.White; + this.groupBox1.Location = new System.Drawing.Point(16, 320); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(128, 128); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Screen Resolution"; + // + // checkBox1 + // + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(16, 96); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.TabIndex = 3; + this.checkBox1.Text = "Full Screen"; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // radioButton3 + // + this.radioButton3.Checked = true; + this.radioButton3.ForeColor = System.Drawing.Color.White; + this.radioButton3.Location = new System.Drawing.Point(16, 72); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(80, 24); + this.radioButton3.TabIndex = 2; + this.radioButton3.TabStop = true; + this.radioButton3.Text = "1024 x 768"; + this.radioButton3.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton2 + // + this.radioButton2.ForeColor = System.Drawing.Color.White; + this.radioButton2.Location = new System.Drawing.Point(16, 48); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(72, 24); + this.radioButton2.TabIndex = 1; + this.radioButton2.Text = "800 x 600"; + this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton1 + // + this.radioButton1.ForeColor = System.Drawing.Color.White; + this.radioButton1.Location = new System.Drawing.Point(16, 24); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(72, 24); + this.radioButton1.TabIndex = 0; + this.radioButton1.Text = "640 x 480"; + this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // SplashScreen + // + this.AcceptButton = this.soloButton; + this.AutoScale = false; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.Black; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(594, 454); + this.ControlBox = false; + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.soloButton); + this.Controls.Add(this.closeButton); + this.Controls.Add(this.startButton); + this.Controls.Add(this.helpButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(600, 460); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(600, 460); + this.Name = "SplashScreen"; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + private void helpButton_Click(object sender, System.EventArgs e) { + HelpScreen helpScreen = new HelpScreen(); + helpScreen.ShowDialog(); + } + + private void startButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = true; + this.Close(); + } + + private void closeButton_Click(object sender, System.EventArgs e) { + Environment.Exit(0); + } + + private void soloButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = false; + this.Close(); + } + + private void radioButton_CheckedChanged(object sender, System.EventArgs e) { + RadioButton btn = (RadioButton)sender; + if (btn.Checked) { + if (btn == radioButton1) + mainClass.GameFormSize = new Size(640,480); + if (btn == radioButton2) + mainClass.GameFormSize = new Size(800, 600); + if (btn == radioButton3) + mainClass.GameFormSize = new Size(1024, 768); + } + } + + private void checkBox1_CheckedChanged(object sender, System.EventArgs e) { + mainClass.FullScreen = checkBox1.Checked; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/SplashScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step08/SplashScreen.resx new file mode 100644 index 0000000..18fad73 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/SplashScreen.resx @@ -0,0 +1,4715 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + False + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + False + + + 80 + + + True + + + Private + + + SplashScreen + + + + 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 + AElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/Step08.csproj b/Source Code updated 08-12-05/Spacewar3D/Step08/Step08.csproj new file mode 100644 index 0000000..a9594ee --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/Step08.csproj @@ -0,0 +1,345 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/Step08.sln b/Source Code updated 08-12-05/Spacewar3D/Step08/Step08.sln new file mode 100644 index 0000000..2065813 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/Step08.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Step08", "Step08.csproj", "{DE8FEF2E-6E28-4456-9712-68437802A747}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.ActiveCfg = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.Build.0 = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.ActiveCfg = Release|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/WorldPosition.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/WorldPosition.cs new file mode 100644 index 0000000..35c2919 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/WorldPosition.cs @@ -0,0 +1,210 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + +[Serializable] +public class WorldPosition { + public float XPos {get { return xPos; } set { xPos = value; } } + public float YPos {get { return yPos; } set { yPos = value; } } + public float ZPos {get { return zPos; } set { zPos = value; } } + + public float XRotation { get { return xRotation; } set { xRotation = value; } } + public float YRotation { get { return yRotation; } set { yRotation = value; } } + public float ZRotation { get { return zRotation; } set { zRotation = value; } } + + public float XScale { get { return xScale; } set { xScale = value; } } + public float YScale { get { return yScale; } set { yScale = value; } } + public float ZScale { get { return zScale; } set { zScale = value; } } + + + public Matrix WorldMatrix { get { Update(); return worldMatrix; } + set { + worldMatrix = value; + Location = Vector3.TransformCoordinate(new Vector3(0,0,0), worldMatrix); + Point(Location, Location+Direction); + Roll(Location, Location+Up); + } + } + + public Vector3 Direction { + get { + Vector3 directionVector= new Vector3(0,0,1); + return Vector3.TransformNormal(directionVector, worldMatrix); + } + } + + public Vector3 Up { + get { + Vector3 upVector = new Vector3(0,1,0); + return Vector3.TransformNormal(upVector,worldMatrix); + } + } + public Vector3 Right { + get { + Vector3 rightVector = new Vector3(1,0,0); + return Vector3.TransformNormal(rightVector,worldMatrix); + } + } + + public Vector3 Location { + get { + return new Vector3( xPos, yPos, zPos ); + } + set { + Move(value); + } + } + + public Vector3 Rotation { + get { + return new Vector3( xRotation, yRotation, zRotation); + } + set { + Rotate(value); + } + } + + + + private float xPos, yPos, zPos = 0.0f; + private float xRotation, yRotation, zRotation = 0.0f; + private float xScale, yScale, zScale = 0.0f; + + private Matrix worldMatrix, scaleMatrix, rotationMatrix = Matrix.Identity; + private Matrix translationMatrix = Matrix.Identity; + private Matrix combineMatrix1, combineMatrix2; + + public Matrix CombineMatrix1 { get { return combineMatrix1; } set { combineMatrix1 = value; } } + public Matrix CombineMatrix2 { get { return combineMatrix2; } set { combineMatrix2 = value; } } + + + public WorldPosition() { + + Move(0.0f, 0.0f, 0.0f); + Rotate(0.0f, 0.0f, 0.0f); + Scale(1.0f, 1.0f, 1.0f); + combineMatrix1 = combineMatrix2 = Matrix.Zero; + + Update(); + + } + + public Vector3 CombinedLocation { + get { + Update(); + return new Vector3(worldMatrix.M41,worldMatrix.M42,worldMatrix.M43); + } + } + + public void Move( Vector3 newPosition ) { + Move( newPosition.X, newPosition.Y, newPosition.Z ); + } + + public void Move( float x, float y, float z ) { + xPos = x; + yPos = y; + zPos = z; + + translationMatrix = Matrix.Translation( xPos, yPos, zPos ); + } + + public void MoveRel( float x, float y, float z ) { + Move(xPos + x, yPos + y, zPos + z ); + } + + public void Rotate( Vector3 newDirection ) { + Rotate(newDirection.X, newDirection.Y, newDirection.Z); + } + + public void Point(Vector3 pointAtLocation) { + Point(xPos, yPos, zPos, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(Vector3 currentLocation, Vector3 pointAtLocation) { + Point(currentLocation.X, currentLocation.Y, currentLocation.Z, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } + + public void Roll(Vector3 Location, Vector3 UpVector) { + float xDiff, yDiff; + xDiff = Location.X - UpVector.X; + yDiff = Location.Y - UpVector.Y; + zRotation = (float) Math.Atan2(xDiff, yDiff); + } + + + + + public void Rotate( float x, float y, float z ) { + xRotation = x; + yRotation = y; + zRotation = z; + + rotationMatrix = Matrix.RotationYawPitchRoll( yRotation, xRotation, zRotation ); + } + + public void RotateRel( float x, float y, float z ) { + Rotate( xRotation + x, yRotation + y, zRotation + z ); + } + + //YawPitchRoll rotates an object relative to its own orthonormal basis vectors + public void YawPitchRoll( float yaw, float pitch, float roll) { + + Matrix yawMatrix = Matrix.RotationAxis(this.Up, yaw); + Matrix pitchMatrix = Matrix.RotationAxis(this.Right, pitch); + Matrix rollMatrix = Matrix.RotationAxis(this.Direction, roll); + + Matrix ypr = yawMatrix * pitchMatrix * rollMatrix; + rotationMatrix *= ypr; + + + } + + public void Scale( float x, float y, float z ) { + xScale = x; + yScale = y; + zScale = z; + + scaleMatrix = Matrix.Scaling( xScale, yScale, zScale ); + + } + + public void ScaleRel( float x, float y, float z ) { + Scale( xScale + x, yScale + y, zScale + z ); + } + + + public void Update() { + + Matrix m; + + + + m = scaleMatrix; + m *= rotationMatrix; + m *= translationMatrix; + if (combineMatrix1 != Matrix.Zero) + m *= combineMatrix1; + if (combineMatrix2 != Matrix.Zero) + m *= combineMatrix2; + + worldMatrix = m; + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/d3dapp.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/d3dapp.cs new file mode 100644 index 0000000..9384434 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/d3dapp.cs @@ -0,0 +1,1517 @@ +//----------------------------------------------------------------------------- +// File: D3DApp.cs +// +// Desc: Application class for the Direct3D samples framework library. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + +/// +/// The base class for all the graphics (D3D) samples, it derives from windows forms +/// +public class GraphicsSample : System.Windows.Forms.Form { + #region Menu Information + // The menu items that *all* samples will need + protected System.Windows.Forms.MainMenu mnuMain; + protected System.Windows.Forms.MenuItem mnuFile; + private System.Windows.Forms.MenuItem mnuGo; + private System.Windows.Forms.MenuItem mnuSingle; + private System.Windows.Forms.MenuItem mnuBreak1; + private System.Windows.Forms.MenuItem mnuChange; + private System.Windows.Forms.MenuItem mnuBreak2; + protected System.Windows.Forms.MenuItem mnuExit; + #endregion + + // The window we will render too + private System.Windows.Forms.Control ourRenderTarget; + // Should we use the default windows + protected bool isUsingMenus = true; + + // We need to keep track of our enumeration settings + protected D3DEnumeration enumerationSettings = new D3DEnumeration(); + protected D3DSettings graphicsSettings = new D3DSettings(); + private bool isMaximized = false; // Are we maximized? + private bool isHandlingSizeChanges = true; // Are we handling size changes? + private bool isClosing = false; // Are we closing? + private bool isChangingFormStyle = false; // Are we changing the forms style? + private bool isWindowActive = true; // Are we waiting for got focus? + + private float lastTime = 0.0f; // The last time + private int frames = 0; // Number of frames since our last update + private int appPausedCount = 0; // How many times has the app been paused (and when can it resume)? + + // Internal variables for the state of the app + protected bool windowed; + protected bool active; + protected bool ready; + protected bool hasFocus; + protected bool isMultiThreaded = false; + + // Internal variables used for timing + protected bool frameMoving; + protected bool singleStep; + // Main objects used for creating and rendering the 3D scene + protected PresentParameters presentParams = new PresentParameters(); // Parameters for CreateDevice/Reset + protected Device device; // The rendering device + protected RenderStateManager renderState; + protected SamplerStateManagerCollection sampleState; + protected TextureStateManagerCollection textureStates; + private Caps graphicsCaps; // Caps for the device + protected Caps Caps { get { return graphicsCaps; } } + private CreateFlags behavior; // Indicate sw or hw vertex processing + protected BehaviorFlags BehaviorFlags { get { return new BehaviorFlags(behavior); } } + protected System.Windows.Forms.Control RenderTarget { get { return ourRenderTarget; } set { ourRenderTarget = value; } } + + // Variables for timing + protected float appTime; // Current time in seconds + protected float elapsedTime; // Time elapsed since last frame + protected float framePerSecond; // Instanteous frame rate + protected string deviceStats;// String to hold D3D device stats + protected string frameStats; // String to hold frame stats + + private bool deviceLost = false; + + // Overridable variables for the app + private int minDepthBits; // Minimum number of bits needed in depth buffer + protected int MinDepthBits { get { return minDepthBits; } set { minDepthBits = value; enumerationSettings.AppMinDepthBits = value;} } + private int minStencilBits; // Minimum number of bits needed in stencil buffer + protected int MinStencilBits { get { return minStencilBits; } set { minStencilBits = value; enumerationSettings.AppMinStencilBits = value;} } + protected bool showCursorWhenFullscreen; // Whether to show cursor when fullscreen + protected bool clipCursorWhenFullscreen; // Whether to limit cursor pos when fullscreen + protected bool startFullscreen; // Whether to start up the app in fullscreen mode + + private System.Drawing.Size storedSize; + private System.Drawing.Point storedLocation; + + // Overridable functions for the 3D scene created by the app + protected virtual bool ConfirmDevice(Caps caps, VertexProcessingType vertexProcessingType, + Format adapterFormat, Format backBufferFormat) { return true; } + protected virtual void OneTimeSceneInitialization() { /* Do Nothing */ } + protected virtual void InitializeDeviceObjects() { /* Do Nothing */ } + protected virtual void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void FrameMove() { /* Do Nothing */ } + protected virtual void Render() { /* Do Nothing */ } + protected virtual void InvalidateDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void DeleteDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + + + + + /// + /// Constructor + /// + public GraphicsSample() { + device = null; + active = false; + ready = false; + hasFocus = false; + behavior = 0; + + ourRenderTarget = this; + frameMoving = true; + singleStep = false; + framePerSecond = 0.0f; + deviceStats = null; + frameStats = null; + + this.Text = "D3D9 Sample"; + this.ClientSize = new System.Drawing.Size(400,300); + this.KeyPreview = true; + + minDepthBits = 16; + minStencilBits = 0; + showCursorWhenFullscreen = false; + startFullscreen = false; + + // When clipCursorWhenFullscreen is TRUE, the cursor is limited to + // the device window when the app goes fullscreen. This prevents users + // from accidentally clicking outside the app window on a multimon system. + // This flag is turned off by default for debug builds, since it makes + // multimon debugging difficult. +#if (DEBUG) + clipCursorWhenFullscreen = false; +#else + clipCursorWhenFullscreen = true; +#endif + InitializeComponent(); + } + + + + + /// + /// Picks the best graphics device, and initializes it + /// + /// true if a good device was found, false otherwise + public bool CreateGraphicsSample() { + enumerationSettings.ConfirmDeviceCallback = new D3DEnumeration.ConfirmDeviceCallbackType(this.ConfirmDevice); + enumerationSettings.Enumerate(); + + if (ourRenderTarget.Cursor == null) { + // Set up a default cursor + ourRenderTarget.Cursor = System.Windows.Forms.Cursors.Default; + } + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + + try { + ChooseInitialSettings(); + + // Initialize the application timer + DXUtil.Timer(DirectXTimer.Start); + // Initialize the app's custom scene stuff + OneTimeSceneInitialization(); + // Initialize the 3D environment for the app + InitializeEnvironment(); + } + catch (SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + return false; + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + return false; + } + + // The app is ready to go + ready = true; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available windowed mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestWindowedMode(bool doesRequireHardware, bool doesRequireReference) { + // Get display mode of primary adapter (which is assumed to be where the window + // will appear) + DisplayMode primaryDesktopDisplayMode = Manager.Adapters[0].CurrentDisplayMode; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + if (!deviceCombo.IsWindowed) + continue; + if (deviceCombo.AdapterFormat != primaryDesktopDisplayMode.Format) + continue; + + // If we haven't found a compatible DeviceCombo yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + deviceCombo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + // This windowed device combo looks great -- take it + goto EndWindowedDeviceComboSearch; + } + // Otherwise keep looking for a better windowed device combo + } + } + } + } + + EndWindowedDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + graphicsSettings.WindowedAdapterInfo = bestAdapterInfo; + graphicsSettings.WindowedDeviceInfo = bestDeviceInfo; + graphicsSettings.WindowedDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = true; + graphicsSettings.WindowedDisplayMode = primaryDesktopDisplayMode; + graphicsSettings.WindowedWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + graphicsSettings.WindowedHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.WindowedDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.WindowedMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.WindowedMultisampleQuality = 0; + graphicsSettings.WindowedVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.WindowedPresentInterval = (PresentInterval)bestDeviceCombo.PresentIntervalList[0]; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available fullscreen mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestFullscreenMode(bool doesRequireHardware, bool doesRequireReference) { + // For fullscreen, default to first HAL DeviceCombo that supports the current desktop + // display mode, or any display mode if HAL is not compatible with the desktop mode, or + // non-HAL if no HAL is available + DisplayMode adapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestAdapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestDisplayMode = new DisplayMode(); + bestAdapterDesktopDisplayMode.Width = 0; + bestAdapterDesktopDisplayMode.Height = 0; + bestAdapterDesktopDisplayMode.Format = 0; + bestAdapterDesktopDisplayMode.RefreshRate = 0; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + adapterDesktopDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + bool adapterMatchesDesktop = (deviceCombo.AdapterFormat == adapterDesktopDisplayMode.Format); + if (deviceCombo.IsWindowed) + continue; + + // If we haven't found a compatible set yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + bestDeviceCombo.DevType == DeviceType.Hardware && bestDeviceCombo.AdapterFormat != adapterDesktopDisplayMode.Format && adapterMatchesDesktop || + bestDeviceCombo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + bestAdapterDesktopDisplayMode = adapterDesktopDisplayMode; + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + // This fullscreen device combo looks great -- take it + goto EndFullscreenDeviceComboSearch; + } + // Otherwise keep looking for a better fullscreen device combo + } + } + } + } + + EndFullscreenDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + // Need to find a display mode on the best adapter that uses pBestDeviceCombo->AdapterFormat + // and is as close to bestAdapterDesktopDisplayMode's res as possible + bestDisplayMode.Width = 0; + bestDisplayMode.Height = 0; + bestDisplayMode.Format = 0; + bestDisplayMode.RefreshRate = 0; + foreach (DisplayMode displayMode in bestAdapterInfo.DisplayModeList) { + if (displayMode.Format != bestDeviceCombo.AdapterFormat) + continue; + if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate == bestAdapterDesktopDisplayMode.RefreshRate) { + // found a perfect match, so stop + bestDisplayMode = displayMode; + break; + } + else if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate > bestDisplayMode.RefreshRate) { + // refresh rate doesn't match, but width/height match, so keep this + // and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == bestAdapterDesktopDisplayMode.Width) { + // width matches, so keep this and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == 0) { + // we don't have anything better yet, so keep this and keep looking + bestDisplayMode = displayMode; + } + } + + graphicsSettings.FullscreenAdapterInfo = bestAdapterInfo; + graphicsSettings.FullscreenDeviceInfo = bestDeviceInfo; + graphicsSettings.FullscreenDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = false; + graphicsSettings.FullscreenDisplayMode = bestDisplayMode; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.FullscreenDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.FullscreenMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.FullscreenMultisampleQuality = 0; + graphicsSettings.FullscreenVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.FullscreenPresentInterval = PresentInterval.Default; + + return true; + } + + + + + /// + /// Choose the initial settings for the application + /// + /// true if the settings were initialized + public bool ChooseInitialSettings() { + bool foundFullscreenMode = FindBestFullscreenMode(false, false); + bool foundWindowedMode = FindBestWindowedMode(false, false); + if (startFullscreen && foundFullscreenMode) + graphicsSettings.IsWindowed = false; + + if (!foundFullscreenMode && !foundWindowedMode) + throw new NoCompatibleDevicesException(); + + return (foundFullscreenMode || foundWindowedMode); + } + + + + + /// + /// Build presentation parameters from the current settings + /// + public void BuildPresentParamsFromSettings() { + presentParams.Windowed = graphicsSettings.IsWindowed; + presentParams.BackBufferCount = 1; + presentParams.MultiSample = graphicsSettings.MultisampleType; + presentParams.MultiSampleQuality = graphicsSettings.MultisampleQuality; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.EnableAutoDepthStencil = enumerationSettings.AppUsesDepthBuffer; + presentParams.AutoDepthStencilFormat = graphicsSettings.DepthStencilBufferFormat; + presentParams.PresentFlag = PresentFlag.None; + + if (windowed) { + presentParams.BackBufferWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + presentParams.BackBufferHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = 0; + presentParams.PresentationInterval = PresentInterval.Immediate; + presentParams.DeviceWindow = ourRenderTarget; + } + else { + presentParams.BackBufferWidth = graphicsSettings.DisplayMode.Width; + presentParams.BackBufferHeight = graphicsSettings.DisplayMode.Height; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = graphicsSettings.DisplayMode.RefreshRate; + presentParams.PresentationInterval = graphicsSettings.PresentInterval; + presentParams.DeviceWindow = this; + } + } + + + + + /// + /// Initialize the graphics environment + /// + public void InitializeEnvironment() { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + GraphicsDeviceInfo deviceInfo = graphicsSettings.DeviceInfo; + + windowed = graphicsSettings.IsWindowed; + + // Set up the presentation parameters + BuildPresentParamsFromSettings(); + + if (deviceInfo.Caps.PrimitiveMiscCaps.IsNullReference) { + // Warn user about null ref device that can't render anything + HandleSampleException(new NullReferenceDeviceException(), ApplicationMessage.None); + } + + CreateFlags createFlags = new CreateFlags(); + if (graphicsSettings.VertexProcessingType == VertexProcessingType.Software) + createFlags = CreateFlags.SoftwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Mixed) + createFlags = CreateFlags.MixedVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Hardware) + createFlags = CreateFlags.HardwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.PureHardware) { + createFlags = CreateFlags.HardwareVertexProcessing; + } + else + throw new ApplicationException(); +#if (DX9) +#else + // Make sure to allow multithreaded apps if we need them + presentParams.ForceNoMultiThreadedFlag = !isMultiThreaded; +#endif + try { + // Create the device + device = new Device(graphicsSettings.AdapterOrdinal, graphicsSettings.DevType, + windowed ? ourRenderTarget : this , createFlags, presentParams); + + // Cache our local objects + renderState = device.RenderState; + sampleState = device.SamplerState; + textureStates = device.TextureState; + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after recreating the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + if (windowed) { + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + } + + // Store device Caps + graphicsCaps = device.DeviceCaps; + behavior = createFlags; + + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + // Store device description + if (deviceInfo.DevType == DeviceType.Reference) + sb.Append("REF"); + else if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append("HAL"); + else if (deviceInfo.DevType == DeviceType.Software) + sb.Append("SW"); + + BehaviorFlags behaviorFlags = new BehaviorFlags(createFlags); + if ((behaviorFlags.HardwareVertexProcessing) && + (behaviorFlags.PureDevice)) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (pure hw vp)"); + else + sb.Append(" (simulated pure hw vp)"); + } + else if (behaviorFlags.HardwareVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (hw vp)"); + else + sb.Append(" (simulated hw vp)"); + } + else if (behaviorFlags.MixedVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (mixed vp)"); + else + sb.Append(" (simulated mixed vp)"); + } + else if (behaviorFlags.SoftwareVertexProcessing) { + sb.Append(" (sw vp)"); + } + + if (deviceInfo.DevType == DeviceType.Hardware) { + sb.Append(": "); + sb.Append(adapterInfo.AdapterDetails.Description); + } + + // Set device stats string + deviceStats = sb.ToString(); + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // Confine cursor to fullscreen window + if (clipCursorWhenFullscreen) { + if (!windowed) { + System.Drawing.Rectangle rcWindow = this.ClientRectangle; + } + } + + // Setup the event handlers for our device + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + device.Disposing += new System.EventHandler(this.DeleteDeviceObjects); + device.DeviceResizing += new System.ComponentModel.CancelEventHandler(this.EnvironmentResized); + + // Initialize the app's device-dependent objects + try { + InitializeDeviceObjects(); + RestoreDeviceObjects(null, null); + active = true; + return; + } + catch { + // Cleanup before we try again + InvalidateDeviceObjects(null, null); + DeleteDeviceObjects(null, null); + device.Dispose(); + device = null; + if (this.Disposing) + return; + } + } + catch { + // If that failed, fall back to the reference rasterizer + if (deviceInfo.DevType == DeviceType.Hardware) { + if (FindBestWindowedMode(false, true)) { + windowed = true; + + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + + // Let the user know we are switching from HAL to the reference rasterizer + HandleSampleException(null, ApplicationMessage.WarnSwitchToRef); + + InitializeEnvironment(); + } + } + } + } + + + + + /// + /// Displays sample exceptions to the user + /// + /// The exception that was thrown + /// Extra information on how to handle the exception + public void HandleSampleException(SampleException e, ApplicationMessage Type) { + // Build a message to display to the user + string strMsg = string.Empty; + if (e != null) + strMsg = e.Message; + + if (ApplicationMessage.ApplicationMustExit == Type) { + strMsg += "\n\nThis sample will now exit."; + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + + // Close the window, which shuts down the app + if (this.IsHandleCreated) + this.Close(); + } + else { + if (ApplicationMessage.WarnSwitchToRef == Type) + strMsg = "\n\nSwitching to the reference rasterizer,\n"; + strMsg += "a software device that implements the entire\n"; + strMsg += "Direct3D feature set, but runs very slowly."; + + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + } + } + + + + + /// + /// Fired when our environment was resized + /// + /// the device that's resizing our environment + /// Set the cancel member to true to turn off automatic device reset + public void EnvironmentResized(object sender, System.ComponentModel.CancelEventArgs e) { + // Check to see if we're closing or changing the form style + if ((isClosing) || (isChangingFormStyle)) { + // We are, cancel our reset, and exit + e.Cancel = true; + return; + } + + // Check to see if we're minimizing and our rendering object + // is not the form, if so, cancel the resize + if ((ourRenderTarget != this) && (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)) + e.Cancel = true; + + if (!isWindowActive) + e.Cancel = true; + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + } + + + + + /// + /// Called when user toggles between fullscreen mode and windowed mode + /// + public void ToggleFullscreen() { + int AdapterOrdinalOld = graphicsSettings.AdapterOrdinal; + DeviceType DevTypeOld = graphicsSettings.DevType; + + isHandlingSizeChanges = false; + isChangingFormStyle = true; + ready = false; + + // Toggle the windowed state + windowed = !windowed; + + // Save our maximized settings.. + if (!windowed && isMaximized) + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + + graphicsSettings.IsWindowed = windowed; + + // If AdapterOrdinal and DevType are the same, we can just do a Reset(). + // If they've changed, we need to do a complete device teardown/rebuild. + if (graphicsSettings.AdapterOrdinal == AdapterOrdinalOld && + graphicsSettings.DevType == DevTypeOld) { + BuildPresentParamsFromSettings(); + // Resize the 3D device + RETRY: + try { + device.Reset(presentParams); + } + catch { + if (windowed) + ForceWindowed(); + else { + // Sit in a loop until the device passes Reset() + try { + device.TestCooperativeLevel(); + } + catch(DeviceNotResetException) { + // Device still needs to be Reset. Try again. + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + goto RETRY; + } + } + } + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + else { + device.Dispose(); + device = null; + InitializeEnvironment(); + } + + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after resetting the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + + if (windowed) { + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; + isChangingFormStyle = false; + + // We were maximized, restore that state + if (isMaximized) { + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + } + this.SendToBack(); + this.BringToFront(); + this.ClientSize = storedSize; + this.Location = storedLocation; + } + else { + if (this.Menu != null) + this.Menu = null; + + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + isChangingFormStyle = false; + } + isHandlingSizeChanges = true; + ready = true; + } + + + + + /// + /// Switch to a windowed mode, even if that means picking a new device and/or adapter + /// + public void ForceWindowed() { + if (windowed) + return; + + if (!FindBestWindowedMode(false, false)) { + return; + } + windowed = true; + + // Now destroy the current 3D device objects, then reinitialize + + ready = false; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Create the new device + try { + InitializeEnvironment(); + } + catch (SampleException e) { + HandleSampleException(e,ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(),ApplicationMessage.ApplicationMustExit); + } + ready = true; + } + + + + + /// + /// Called when our sample has nothing else to do, and it's time to render + /// + private void FullRender() { + // Render a frame during idle time (no messages are waiting) + if (active && ready) { + try { + if ((deviceLost) || (System.Windows.Forms.Form.ActiveForm != this)) { + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + } + // Render a frame during idle time + if (active) { + Render3DEnvironment(); + } + } + catch (Exception ee) { + System.Windows.Forms.MessageBox.Show("An exception has occurred. This sample must exit.\r\n\r\n" + ee.ToString(), "Exception", + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + this.Close(); + } + } + } + + + + + /// + /// Run the simulation + /// + public void Run() { + // Now we're ready to recieve and process Windows messages. + System.Windows.Forms.Control mainWindow = this; + + // If the render target is a form and *not* this form, use that form instead, + // otherwise, use the main form. + if ((ourRenderTarget is System.Windows.Forms.Form) && (ourRenderTarget != this)) + mainWindow = ourRenderTarget; + + mainWindow.Show(); + while (mainWindow.Created) { + FullRender(); + System.Windows.Forms.Application.DoEvents(); + } + } + + + + + /// + /// Draws the scene + /// + public void Render3DEnvironment() { + if (deviceLost) { + try { + // Test the cooperative level to see if it's okay to render + device.TestCooperativeLevel(); + } + catch (DeviceLostException) { + // If the device was lost, do not render until we get it back + isHandlingSizeChanges = false; + isWindowActive = false; + return; + } + catch (DeviceNotResetException) { + // Check if the device needs to be resized. + + // If we are windowed, read the desktop mode and use the same format for + // the back buffer + if (windowed) { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + graphicsSettings.WindowedDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + presentParams.BackBufferFormat = graphicsSettings.WindowedDisplayMode.Format; + } + + // Reset the device and resize it + device.Reset(device.PresentationParameters); + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + deviceLost = false; + } + + // Get the app's time, in seconds. Skip rendering if no time elapsed + float fAppTime = DXUtil.Timer(DirectXTimer.GetApplicationTime); + float fElapsedAppTime = DXUtil.Timer(DirectXTimer.GetElapsedTime); + if ((0.0f == fElapsedAppTime) && frameMoving) + return; + + // FrameMove (animate) the scene + if (frameMoving || singleStep) { + // Store the time for the app + appTime = fAppTime; + elapsedTime = fElapsedAppTime; + + // Frame move the scene + FrameMove(); + + singleStep = false; + } + + // Render the scene as normal + Render(); + + UpdateStats(); + + try { + // Show the frame on the primary surface. + device.Present(); + } + catch(DeviceLostException) { + deviceLost = true; + } + } + + + + + /// + /// Update the various statistics the simulation keeps track of + /// + public void UpdateStats() { + // Keep track of the frame count + float time = DXUtil.Timer(DirectXTimer.GetAbsoluteTime); + ++frames; + + // Update the scene stats once per second + if (time - lastTime > 1.0f) { + framePerSecond = frames / (time - lastTime); + lastTime = time; + frames = 0; + + string strFmt; + Format fmtAdapter = graphicsSettings.DisplayMode.Format; + if (fmtAdapter == device.PresentationParameters.BackBufferFormat) { + strFmt = fmtAdapter.ToString(); + } + else { + strFmt = String.Format("backbuf {0}, adapter {1}", + device.PresentationParameters.BackBufferFormat.ToString(), fmtAdapter.ToString()); + } + + string strDepthFmt; + if (enumerationSettings.AppUsesDepthBuffer) { + strDepthFmt = String.Format(" ({0})", + graphicsSettings.DepthStencilBufferFormat.ToString()); + } + else { + // No depth buffer + strDepthFmt = ""; + } + + string strMultiSample; + switch (graphicsSettings.MultisampleType) { + case Direct3D.MultiSampleType.NonMaskable: strMultiSample = " (NonMaskable Multisample)"; break; + case Direct3D.MultiSampleType.TwoSamples: strMultiSample = " (2x Multisample)"; break; + case Direct3D.MultiSampleType.ThreeSamples: strMultiSample = " (3x Multisample)"; break; + case Direct3D.MultiSampleType.FourSamples: strMultiSample = " (4x Multisample)"; break; + case Direct3D.MultiSampleType.FiveSamples: strMultiSample = " (5x Multisample)"; break; + case Direct3D.MultiSampleType.SixSamples: strMultiSample = " (6x Multisample)"; break; + case Direct3D.MultiSampleType.SevenSamples: strMultiSample = " (7x Multisample)"; break; + case Direct3D.MultiSampleType.EightSamples: strMultiSample = " (8x Multisample)"; break; + case Direct3D.MultiSampleType.NineSamples: strMultiSample = " (9x Multisample)"; break; + case Direct3D.MultiSampleType.TenSamples: strMultiSample = " (10x Multisample)"; break; + case Direct3D.MultiSampleType.ElevenSamples: strMultiSample = " (11x Multisample)"; break; + case Direct3D.MultiSampleType.TwelveSamples: strMultiSample = " (12x Multisample)"; break; + case Direct3D.MultiSampleType.ThirteenSamples: strMultiSample = " (13x Multisample)"; break; + case Direct3D.MultiSampleType.FourteenSamples: strMultiSample = " (14x Multisample)"; break; + case Direct3D.MultiSampleType.FifteenSamples: strMultiSample = " (15x Multisample)"; break; + case Direct3D.MultiSampleType.SixteenSamples: strMultiSample = " (16x Multisample)"; break; + default: strMultiSample = string.Empty; break; + } + frameStats = String.Format("{0} fps ({1}x{2}), {3}{4}{5}", framePerSecond.ToString("f2"), + device.PresentationParameters.BackBufferWidth, device.PresentationParameters.BackBufferHeight, + strFmt, strDepthFmt, strMultiSample); + } + } + + + + + /// + /// Called in to toggle the pause state of the app. + /// + /// true if the simulation should pause + public void Pause(bool pause) { + appPausedCount += (int)(pause ? +1 : -1); + ready = ((appPausedCount > 0) ? false : true); + + // Handle the first pause request (of many, nestable pause requests) + if (pause && (1 == appPausedCount)) { + // Stop the scene from animating + if (frameMoving) + DXUtil.Timer(DirectXTimer.Stop); + } + + if (0 == appPausedCount) { + // Restart the timers + if (frameMoving) + DXUtil.Timer(DirectXTimer.Start); + } + } + + + + + /// + /// Set our variables to not active and not ready + /// + public void CleanupEnvironment() { + active = false; + ready = false; + if (device != null) + device.Dispose(); + + device = null; + } + #region Menu EventHandlers + + + + + /// + /// Prepares the simulation for a new device being selected + /// + public void UserSelectNewDevice(object sender, EventArgs e) { + // Prompt the user to select a new device or mode + if (active && ready) { + Pause(true); + DoSelectNewDevice(); + Pause(false); + } + } + + + + + /// + /// Displays a dialog so the user can select a new adapter, device, or + /// display mode, and then recreates the 3D environment if needed + /// + private void DoSelectNewDevice() { + isHandlingSizeChanges = false; + // Can't display dialogs in fullscreen mode + if (windowed == false) { + try { + ToggleFullscreen(); + isHandlingSizeChanges = false; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + return; + } + } + + // Make sure the main form is in the background + this.SendToBack(); + D3DSettingsForm settingsForm = new D3DSettingsForm(enumerationSettings, graphicsSettings); + System.Windows.Forms.DialogResult result = settingsForm.ShowDialog(null); + if (result != System.Windows.Forms.DialogResult.OK) { + isHandlingSizeChanges = true; + return; + } + graphicsSettings = settingsForm.settings; + + windowed = graphicsSettings.IsWindowed; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Inform the display class of the change. It will internally + // re-create valid surfaces, a d3ddevice, etc. + try { + InitializeEnvironment(); + } + catch(SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + isHandlingSizeChanges = true; + } + + + + + /// + /// Will start (or stop) simulation + /// + private void ToggleStart(object sender, EventArgs e) { + //Toggle frame movement + frameMoving = !frameMoving; + DXUtil.Timer(frameMoving ? DirectXTimer.Start : DirectXTimer.Stop); + } + + + + + /// + /// Will single step the simulation + /// + private void SingleStep(object sender, EventArgs e) { + // Single-step frame movement + if (false == frameMoving) + DXUtil.Timer(DirectXTimer.Advance); + else + DXUtil.Timer(DirectXTimer.Stop); + frameMoving = false; + singleStep = true; + } + + + + + /// + /// Will end the simulation + /// + private void ExitSample(object sender, EventArgs e) { + this.Close(); + } + #endregion + + + + + #region WinForms Overrides + /// + /// Clean up any resources + /// + protected override void Dispose(bool disposing) { + CleanupEnvironment(); + mnuMain.Dispose(); + base.Dispose(disposing); + } + + + + + /// + /// Handle any key presses + /// + protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) { + // Check for our shortcut keys (Return to start or stop) + if (e.KeyChar == '\r') { + mnuGo.PerformClick(); + e.Handled = true; + } + + // Check for our shortcut keys (Escape to quit) + if ((byte)e.KeyChar == (byte)(int)System.Windows.Forms.Keys.Escape) { + mnuExit.PerformClick(); + e.Handled = true; + } + + // Allow the control to handle the keystroke now + base.OnKeyPress(e); + } + + + + + /// + /// Handle system keystrokes (ie, alt-enter) + /// + protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e) { + if ((e.Alt) && (e.KeyCode == System.Windows.Forms.Keys.Return)) { + // Toggle the fullscreen/window mode + if (active && ready) { + Pause(true); + + try { + ToggleFullscreen(); + Pause(false); + return; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + } + finally { + e.Handled = true; + } + } + } + // Allow the control to handle the keystroke now + base.OnKeyDown(e); + } + + + + + /// + /// Winforms generated code for initializing the form + /// + private void InitializeComponent() { + // + // GraphicsSample + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.MinimumSize = new System.Drawing.Size(100, 100); + #region MenuCreation/etc + this.mnuMain = new System.Windows.Forms.MainMenu(); + this.mnuFile = new System.Windows.Forms.MenuItem(); + this.mnuGo = new System.Windows.Forms.MenuItem(); + this.mnuSingle = new System.Windows.Forms.MenuItem(); + this.mnuBreak1 = new System.Windows.Forms.MenuItem(); + this.mnuChange = new System.Windows.Forms.MenuItem(); + this.mnuBreak2 = new System.Windows.Forms.MenuItem(); + this.mnuExit = new System.Windows.Forms.MenuItem(); + // + // mainMenu1 + // + this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuFile}); + // + // mnuFile + // + this.mnuFile.Index = 0; + this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuGo, + this.mnuSingle, + this.mnuBreak1, + this.mnuChange, + this.mnuBreak2, + this.mnuExit}); + this.mnuFile.Text = "&File"; + // + // mnuGo + // + this.mnuGo.Index = 0; + this.mnuGo.Text = "&Go/stop\tEnter"; + this.mnuGo.Click += new System.EventHandler(this.ToggleStart); + // + // mnuSingle + // + this.mnuSingle.Index = 1; + this.mnuSingle.Text = "&Single step\tSpace"; + this.mnuSingle.Click += new System.EventHandler(this.SingleStep); + // + // mnuBreak1 + // + this.mnuBreak1.Index = 2; + this.mnuBreak1.Text = "-"; + // + // mnuChange + // + this.mnuChange.Index = 3; + this.mnuChange.Shortcut = System.Windows.Forms.Shortcut.F2; + this.mnuChange.ShowShortcut = true; + this.mnuChange.Text = "&Change Device..."; + this.mnuChange.Click += new System.EventHandler(this.UserSelectNewDevice); + // + // mnuBreak2 + // + this.mnuBreak2.Index = 4; + this.mnuBreak2.Text = "-"; + // + // mnuExit + // + this.mnuExit.Index = 5; + this.mnuExit.Text = "E&xit\tESC"; + this.mnuExit.Click += new System.EventHandler(this.ExitSample); + #endregion + } + + + + + /// + /// When the menu is starting pause our simulation + /// + protected override void OnMenuStart(System.EventArgs e) { + Pause(true); // Pause the simulation while the menu starts + } + + + + + /// + /// When the menu is complete our simulation can continue + /// + protected override void OnMenuComplete(System.EventArgs e) { + Pause(false); // Unpause the simulation + } + + + + + /// + /// Make sure our graphics cursor (if available) moves with the cursor + /// + protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e) { + if ((device != null) && (!device.Disposed)) { + // Move the D3D cursor + device.SetCursorPosition(e.X, e.Y, false); + } + // Let the control handle the mouse now + base.OnMouseMove(e); + } + + + + + /// + /// Handle size changed events + /// + protected override void OnSizeChanged(System.EventArgs e) { + this.OnResize(e); + base.OnSizeChanged(e); + } + + + + + /// + /// Handle resize events + /// + protected override void OnResize(System.EventArgs e) { + if (isHandlingSizeChanges) { + // Are we maximized? + isMaximized = (this.WindowState == System.Windows.Forms.FormWindowState.Maximized); + if (!isMaximized) { + storedSize = this.ClientSize; + storedLocation = this.Location; + } + } + active = !(this.WindowState == System.Windows.Forms.FormWindowState.Minimized || this.Visible == false); + base.OnResize(e); + } + + + + + /// + /// Once the form has focus again, we can continue to handle our resize + /// and resets.. + /// + protected override void OnGotFocus(System.EventArgs e) { + isHandlingSizeChanges = true; + isWindowActive = true; + base.OnGotFocus (e); + } + + + + + /// + /// Handle move events + /// + protected override void OnMove(System.EventArgs e) { + if (isHandlingSizeChanges) { + storedLocation = this.Location; + } + base.OnMove(e); + } + + + + + /// + /// Handle closing event + /// + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { + isClosing = true; + base.OnClosing(e); + } + #endregion + + +} + +#region Enums for D3D Applications +/// +/// Messages that can be used when displaying an error +/// +public enum ApplicationMessage { + None, + ApplicationMustExit, + WarnSwitchToRef +}; +#endregion + + + + +#region Various SampleExceptions +/// +/// The default sample exception type +/// +public class SampleException : System.ApplicationException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + + strMsg = "Generic application error. Enable\n"; + strMsg += "debug output for detailed information."; + + return strMsg; + } + } +} + + + + +/// +/// Exception informing user no compatible devices were found +/// +public class NoCompatibleDevicesException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "This sample cannot run in a desktop\n"; + strMsg += "window with the current display settings.\n"; + strMsg += "Please change your desktop settings to a\n"; + strMsg += "16- or 32-bit display mode and re-run this\n"; + strMsg += "sample."; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when the ReferenceDevice is null +/// +public class NullReferenceDeviceException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Warning: Nothing will be rendered.\n"; + strMsg += "The reference rendering device was selected, but your\n"; + strMsg += "computer only has a reduced-functionality reference device\n"; + strMsg += "installed. Install the DirectX SDK to get the full\n"; + strMsg += "reference device.\n"; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when reset fails +/// +public class ResetFailedException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not reset the Direct3D device."; + + return strMsg; + } + } +} + + + + +/// +/// The exception thrown when media couldn't be found +/// +public class MediaNotFoundException : SampleException { + private string mediaFile; + public MediaNotFoundException(string filename) : base() { + mediaFile = filename; + } + public MediaNotFoundException() : base() { + mediaFile = string.Empty; + } + + + + + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not load required media."; + if (mediaFile.Length > 0) + strMsg += string.Format("\r\nFile: {0}", mediaFile); + + return strMsg; + } + } +} +#endregion + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/d3dapp.resx b/Source Code updated 08-12-05/Spacewar3D/Step08/d3dapp.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/d3dapp.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/d3denumeration.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/d3denumeration.cs new file mode 100644 index 0000000..47c1c6a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/d3denumeration.cs @@ -0,0 +1,449 @@ +//----------------------------------------------------------------------------- +// File: D3DEnumeration.cs +// +// Desc: Enumerates D3D adapters, devices, modes, etc. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + + + +/// +/// Enumeration of all possible D3D vertex processing types +/// +public enum VertexProcessingType { + Software, + Mixed, + Hardware, + PureHardware +} + + + + +/// +/// Info about a display adapter +/// +public class GraphicsAdapterInfo { + public int AdapterOrdinal; + public AdapterDetails AdapterDetails; + public ArrayList DisplayModeList = new ArrayList(); // List of D3DDISPLAYMODEs + public ArrayList DeviceInfoList = new ArrayList(); // List of D3DDeviceInfos + public override string ToString() { return AdapterDetails.Description; } +} + + + + +/// +/// Info about a D3D device, including a list of DeviceCombos (see below) +/// that work with the device +/// +public class GraphicsDeviceInfo { + public int AdapterOrdinal; + public DeviceType DevType; + public Caps Caps; + public ArrayList DeviceComboList = new ArrayList(); // List of D3DDeviceCombos + public override string ToString() { return DevType.ToString(); } +} + + + + +/// +/// Info about a depth/stencil buffer format that is incompatible with a +/// multisample type +/// +public class DepthStencilMultiSampleConflict { + public DepthFormat DepthStencilFormat; + public MultiSampleType MultiSampleType; +} + + + + +/// +/// A combination of adapter format, back buffer format, and windowed/fullscreen +/// that is compatible with a particular D3D device (and the app) +/// +public class DeviceCombo { + public int AdapterOrdinal; + public DeviceType DevType; + public Format AdapterFormat; + public Format BackBufferFormat; + public bool IsWindowed; + public ArrayList DepthStencilFormatList = new ArrayList(); // List of D3DFORMATs + public ArrayList MultiSampleTypeList = new ArrayList(); // List of D3DMULTISAMPLE_TYPEs + public ArrayList MultiSampleQualityList = new ArrayList(); // List of ints (maxQuality per multisample type) + public ArrayList DepthStencilMultiSampleConflictList = new ArrayList(); // List of DepthStencilMultiSampleConflicts + public ArrayList VertexProcessingTypeList = new ArrayList(); // List of VertexProcessingTypes + public ArrayList PresentIntervalList = new ArrayList(); // List of D3DPRESENT_INTERVALs +} + + + + +/// +/// Used to sort Displaymodes +/// +class DisplayModeComparer : System.Collections.IComparer { + /// + /// Compare two display modes + /// + public int Compare(object x, object y) { + DisplayMode dx = (DisplayMode)x; + DisplayMode dy = (DisplayMode)y; + + if (dx.Width > dy.Width) + return 1; + if (dx.Width < dy.Width) + return -1; + if (dx.Height > dy.Height) + return 1; + if (dx.Height < dy.Height) + return -1; + if (dx.Format > dy.Format) + return 1; + if (dx.Format < dy.Format) + return -1; + if (dx.RefreshRate > dy.RefreshRate) + return 1; + if (dx.RefreshRate < dy.RefreshRate) + return -1; + return 0; + } +} + + + + +/// +/// Enumerates available adapters, devices, modes, etc. +/// +public class D3DEnumeration { + /// + /// The confirm device delegate which is used to determine if a device + /// meets the needs of the simulation + /// + public delegate bool ConfirmDeviceCallbackType(Caps caps, + VertexProcessingType vertexProcessingType, Format adapterFormat, + Format backBufferFormat); + + public ConfirmDeviceCallbackType ConfirmDeviceCallback; + public ArrayList AdapterInfoList = new ArrayList(); // List of D3DAdapterInfos + + // The following variables can be used to limit what modes, formats, + // etc. are enumerated. Set them to the values you want before calling + // Enumerate(). + public int AppMinFullscreenWidth = 640; + public int AppMinFullscreenHeight = 480; + public int AppMinColorChannelBits = 5; // min color bits per channel in adapter format + public int AppMinAlphaChannelBits = 0; // min alpha bits per pixel in back buffer format + public int AppMinDepthBits = 15; + public int AppMinStencilBits = 0; + public bool AppUsesDepthBuffer = true; + public bool AppUsesMixedVP = false; // whether app can take advantage of mixed vp mode + public bool AppRequiresWindowed = false; + public bool AppRequiresFullscreen = false; + + + + + /// + /// Enumerates available D3D adapters, devices, modes, etc. + /// + public void Enumerate() { + foreach (AdapterInformation ai in Manager.Adapters) { + ArrayList adapterFormatList = new ArrayList(); + GraphicsAdapterInfo adapterInfo = new GraphicsAdapterInfo(); + adapterInfo.AdapterOrdinal = ai.Adapter; + adapterInfo.AdapterDetails = ai.Information; + + // Get list of all display modes on this adapter. + // Also build a temporary list of all display adapter formats. + foreach (DisplayMode displayMode in ai.SupportedDisplayModes) { + if (displayMode.Width < AppMinFullscreenWidth) + continue; + if (displayMode.Height < AppMinFullscreenHeight) + continue; + if (GraphicsUtility.GetColorChannelBits(displayMode.Format) < AppMinColorChannelBits) + continue; + adapterInfo.DisplayModeList.Add(displayMode); + if (!adapterFormatList.Contains(displayMode.Format)) + adapterFormatList.Add(displayMode.Format); + } + + // Sort displaymode list + DisplayModeComparer dmc = new DisplayModeComparer(); + adapterInfo.DisplayModeList.Sort(dmc); + + // Get info for each device on this adapter + EnumerateDevices(adapterInfo, adapterFormatList); + + // If at least one device on this adapter is available and compatible + // with the app, add the adapterInfo to the list + if (adapterInfo.DeviceInfoList.Count == 0) + continue; + AdapterInfoList.Add(adapterInfo); + } + } + + + + + /// + /// Enumerates D3D devices for a particular adapter + /// + protected void EnumerateDevices(GraphicsAdapterInfo adapterInfo, ArrayList adapterFormatList) { + DeviceType[] devTypeArray = new DeviceType[] { + DeviceType.Hardware, DeviceType.Software, DeviceType.Reference }; + + foreach (DeviceType devType in devTypeArray) { + GraphicsDeviceInfo deviceInfo = new GraphicsDeviceInfo(); + deviceInfo.AdapterOrdinal = adapterInfo.AdapterOrdinal; + deviceInfo.DevType = devType; + try { + deviceInfo.Caps = Manager.GetDeviceCaps(adapterInfo.AdapterOrdinal, devType); + } + catch (DirectXException) { + continue; + } + + // Get info for each devicecombo on this device + EnumerateDeviceCombos(deviceInfo, adapterFormatList); + + // If at least one devicecombo for this device is found, + // add the deviceInfo to the list + if (deviceInfo.DeviceComboList.Count == 0) + continue; + adapterInfo.DeviceInfoList.Add(deviceInfo); + } + } + + + + + /// + /// Enumerates DeviceCombos for a particular device + /// + protected void EnumerateDeviceCombos(GraphicsDeviceInfo deviceInfo, ArrayList adapterFormatList) { + Format[] backBufferFormatArray = new Format[] { + Format.A8R8G8B8, Format.X8R8G8B8, Format.A2R10G10B10, + Format.R5G6B5, Format.A1R5G5B5, Format.X1R5G5B5, + }; + bool[] isWindowedArray = new bool[] { false, true }; + + // See which adapter formats are supported by this device + foreach (Format adapterFormat in adapterFormatList) { + foreach (Format backBufferFormat in backBufferFormatArray) { + if (GraphicsUtility.GetAlphaChannelBits(backBufferFormat) < AppMinAlphaChannelBits) + continue; + foreach (bool isWindowed in isWindowedArray) { + if (!isWindowed && AppRequiresWindowed) + continue; + if (isWindowed && AppRequiresFullscreen) + continue; + if (!Manager.CheckDeviceType(deviceInfo.AdapterOrdinal, deviceInfo.DevType, adapterFormat, backBufferFormat, isWindowed)) { + continue; + } + + // At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed + // DeviceCombo that is supported by the system. We still need to confirm that it's + // compatible with the app, and find one or more suitable depth/stencil buffer format, + // multisample type, vertex processing type, and present interval. + DeviceCombo deviceCombo = new DeviceCombo(); + deviceCombo.AdapterOrdinal = deviceInfo.AdapterOrdinal; + deviceCombo.DevType = deviceInfo.DevType; + deviceCombo.AdapterFormat = adapterFormat; + deviceCombo.BackBufferFormat = backBufferFormat; + deviceCombo.IsWindowed = isWindowed; + if (AppUsesDepthBuffer) { + BuildDepthStencilFormatList(deviceCombo); + if (deviceCombo.DepthStencilFormatList.Count == 0) + continue; + } + BuildMultiSampleTypeList(deviceCombo); + if (deviceCombo.MultiSampleTypeList.Count == 0) + continue; + BuildDepthStencilMultiSampleConflictList(deviceCombo); + BuildVertexProcessingTypeList(deviceInfo, deviceCombo); + if (deviceCombo.VertexProcessingTypeList.Count == 0) + continue; + BuildPresentIntervalList(deviceInfo, deviceCombo); + if (deviceCombo.PresentIntervalList.Count == 0) + continue; + + deviceInfo.DeviceComboList.Add(deviceCombo); + } + } + } + } + + + + + /// + /// Adds all depth/stencil formats that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildDepthStencilFormatList(DeviceCombo deviceCombo) { + DepthFormat[] depthStencilFormatArray = { + DepthFormat.D16, + DepthFormat.D15S1, + DepthFormat.D24X8, + DepthFormat.D24S8, + DepthFormat.D24X4S4, + DepthFormat.D32, + }; + + foreach (DepthFormat depthStencilFmt in depthStencilFormatArray) { + if (GraphicsUtility.GetDepthBits(depthStencilFmt) < AppMinDepthBits) + continue; + if (GraphicsUtility.GetStencilBits(depthStencilFmt) < AppMinStencilBits) + continue; + if (Manager.CheckDeviceFormat(deviceCombo.AdapterOrdinal, deviceCombo.DevType, deviceCombo.AdapterFormat, + Usage.DepthStencil, ResourceType.Surface, depthStencilFmt)) { + if (Manager.CheckDepthStencilMatch(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat, depthStencilFmt)) { + deviceCombo.DepthStencilFormatList.Add(depthStencilFmt); + } + } + } + } + + + + + /// + /// Adds all multisample types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildMultiSampleTypeList(DeviceCombo deviceCombo) { + MultiSampleType[] msTypeArray = { + MultiSampleType.None, + MultiSampleType.NonMaskable, + MultiSampleType.TwoSamples, + MultiSampleType.ThreeSamples, + MultiSampleType.FourSamples, + MultiSampleType.FiveSamples, + MultiSampleType.SixSamples, + MultiSampleType.SevenSamples, + MultiSampleType.EightSamples, + MultiSampleType.NineSamples, + MultiSampleType.TenSamples, + MultiSampleType.ElevenSamples, + MultiSampleType.TwelveSamples, + MultiSampleType.ThirteenSamples, + MultiSampleType.FourteenSamples, + MultiSampleType.FifteenSamples, + MultiSampleType.SixteenSamples, + }; + + foreach (MultiSampleType msType in msTypeArray) { + int result; + int qualityLevels = 0; + if (Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.BackBufferFormat, deviceCombo.IsWindowed, msType, out result, out qualityLevels)) { + deviceCombo.MultiSampleTypeList.Add(msType); + deviceCombo.MultiSampleQualityList.Add(qualityLevels); + } + } + } + + + + + /// + /// Finds any depthstencil formats that are incompatible with multisample types and + /// builds a list of them. + /// + public void BuildDepthStencilMultiSampleConflictList(DeviceCombo deviceCombo) { + DepthStencilMultiSampleConflict DSMSConflict; + + foreach (DepthFormat dsFmt in deviceCombo.DepthStencilFormatList) { + foreach (MultiSampleType msType in deviceCombo.MultiSampleTypeList) { + if (!Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, + deviceCombo.DevType, (Format)dsFmt, deviceCombo.IsWindowed, msType)) { + DSMSConflict = new DepthStencilMultiSampleConflict(); + DSMSConflict.DepthStencilFormat = dsFmt; + DSMSConflict.MultiSampleType = msType; + deviceCombo.DepthStencilMultiSampleConflictList.Add(DSMSConflict); + } + } + } + } + + + + + /// + /// Adds all vertex processing types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildVertexProcessingTypeList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + if (deviceInfo.Caps.DeviceCaps.SupportsHardwareTransformAndLight) { + if (deviceInfo.Caps.DeviceCaps.SupportsPureDevice) { + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.PureHardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.PureHardware); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Hardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Hardware); + } + if (AppUsesMixedVP && (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Mixed, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat))) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Mixed); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Software, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Software); + } + } + + + + + /// + /// Adds all present intervals that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildPresentIntervalList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + PresentInterval[] piArray = { + PresentInterval.Immediate, + PresentInterval.Default, + PresentInterval.One, + PresentInterval.Two, + PresentInterval.Three, + PresentInterval.Four, + }; + + foreach (PresentInterval pi in piArray) { + if (deviceCombo.IsWindowed) { + if (pi == PresentInterval.Two || + pi == PresentInterval.Three || + pi == PresentInterval.Four) { + // These intervals are not supported in windowed mode. + continue; + } + } + // Note that PresentInterval.Default is zero, so you + // can't do a caps check for it -- it is always available. + if (pi == PresentInterval.Default || + (deviceInfo.Caps.PresentationIntervals & pi) != (PresentInterval)0) { + deviceCombo.PresentIntervalList.Add(pi); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/d3dfont.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/d3dfont.cs new file mode 100644 index 0000000..2b374eb --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/d3dfont.cs @@ -0,0 +1,666 @@ +//----------------------------------------------------------------------------- +// File: D3DFont.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// A generic font class +/// +public class GraphicsFont { + public const int MaxNumfontVertices = 50*6; + + // Font rendering flags + [System.Flags] + public enum RenderFlags { + Centered = 0x0001, + TwoSided = 0x0002, + Filtered = 0x0004, + } + private System.Drawing.Font systemFont; + + private bool isZEnable = false; + public bool ZBufferEnable { get { return isZEnable; } set { isZEnable = value; } } + string ourFontName; // Font properties + int ourFontHeight; + + private Direct3D.Device device; + private TextureStateManager textureState0; + private TextureStateManager textureState1; + private SamplerStateManager samplerState0; + private RenderStateManager renderState; + private Direct3D.Texture fontTexture; + private Direct3D.VertexBuffer vertexBuffer; + private CustomVertex.TransformedColoredTextured[] fontVertices = new CustomVertex.TransformedColoredTextured[MaxNumfontVertices]; + + private int textureWidth; // Texture dimensions + private int textureHeight; + private float textureScale; + private int spacingPerChar; + private float[,] textureCoords = new float[128-32,4]; + + // Stateblocks for setting and restoring render states + private StateBlock savedStateBlock; + private StateBlock drawTextStateBlock; + + + + + /// + /// Create a new font object + /// + /// The font to use + public GraphicsFont(System.Drawing.Font f) { + ourFontName = f.Name; + ourFontHeight = (int)f.Size; + systemFont = f; + } + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName) : this(fontName, FontStyle.Regular, 12) { + } + + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName, FontStyle style) : this(fontName, style, 12) { + } + + + + + /// + /// Create a new font object + /// + /// The name of the font + /// The style + /// Size of the font + public GraphicsFont(string fontName, FontStyle style, int size) { + ourFontName = fontName; + ourFontHeight = size; + systemFont = new System.Drawing.Font(fontName, ourFontHeight, style); + } + + + + + /// + /// Attempt to draw the systemFont alphabet onto the provided texture + /// graphics. + /// + /// Graphics object on which to draw and measure the letters + /// If set, the method will test to see if the alphabet will fit without actually drawing + public void PaintAlphabet(Graphics g, bool measureOnly) { + string str; + float x = 0; + float y = 0; + Point p = new Point(0, 0); + Size size = new Size(0,0); + + // Calculate the spacing between characters based on line height + size = g.MeasureString(" ", systemFont).ToSize(); + x = spacingPerChar = (int) Math.Ceiling(size.Height * 0.3); + + for (char c = (char)32; c < (char)127; c++) { + str = c.ToString(); + // We need to do some things here to get the right sizes. The default implemententation of MeasureString + // will return a resolution independant size. For our height, this is what we want. However, for our width, we + // want a resolution dependant size. + Size resSize = g.MeasureString(str, systemFont).ToSize(); + size.Height = resSize.Height + 1; + + // Now the Resolution independent width + if (c != ' ') { // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + resSize = g.MeasureString(str, systemFont, p, StringFormat.GenericTypographic).ToSize(); + size.Width = resSize.Width; + } + else + size.Width = resSize.Width; + + if ((x + size.Width + spacingPerChar) > textureWidth) { + x = spacingPerChar; + y += size.Height; + } + + // Make sure we have room for the current character + if ((y + size.Height) > textureHeight) + throw new System.InvalidOperationException("Texture too small for alphabet"); + + if (!measureOnly) { + if (c != ' ') // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y), StringFormat.GenericTypographic); + else + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y)); + textureCoords[c-32,0] = ((float) (x + 0 - spacingPerChar)) / textureWidth; + textureCoords[c-32,1] = ((float) (y + 0 + 0)) / textureHeight; + textureCoords[c-32,2] = ((float) (x + size.Width + spacingPerChar)) / textureWidth; + textureCoords[c-32,3] = ((float) (y + size.Height + 0)) / textureHeight; + } + + x += size.Width + (2 * spacingPerChar); + } + + } + + + + + /// + /// Initialize the device objects + /// + /// The grpahics device used to initialize + public void InitializeDeviceObjects(Device dev) { + if (dev != null) { + // Set up our events + dev.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Keep a local copy of the device + device = dev; + textureState0 = device.TextureState[0]; + textureState1 = device.TextureState[1]; + samplerState0 = device.SamplerState[0]; + renderState = device.RenderState; + + // Create a bitmap on which to measure the alphabet + Bitmap bmp = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Graphics g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Establish the font and texture size + textureScale = 1.0f; // Draw fonts into texture without scaling + + // Calculate the dimensions for the smallest power-of-two texture which + // can hold all the printable characters + textureWidth = textureHeight = 128; + for (;;) { + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // Scale up the texture size and try again + textureWidth *= 2; + textureHeight *= 2; + continue; + } + + break; + } + + // If requested texture is too big, use a smaller texture and smaller font, + // and scale up when rendering. + Direct3D.Caps d3dCaps = device.DeviceCaps; + + // If the needed texture is too large for the video card... + if (textureWidth > d3dCaps.MaxTextureWidth) { + // Scale the font size down to fit on the largest possible texture + textureScale = (float)d3dCaps.MaxTextureWidth / (float)textureWidth; + textureWidth = textureHeight = d3dCaps.MaxTextureWidth; + + for(;;) { + // Create a new, smaller font + ourFontHeight = (int) Math.Floor(ourFontHeight * textureScale); + systemFont = new System.Drawing.Font(systemFont.Name, ourFontHeight, systemFont.Style); + + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // If that still doesn't fit, scale down again and continue + textureScale *= 0.9F; + continue; + } + + break; + } + } + + // Release the bitmap used for measuring and create one for drawing + bmp.Dispose(); + bmp = new Bitmap(textureWidth, textureHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Draw the alphabet + PaintAlphabet(g, false); + + // Create a new texture for the font from the bitmap we just created + fontTexture = Texture.FromBitmap(device, bmp, 0, Pool.Managed); + RestoreDeviceObjects(null, null); + } + + + + + /// + /// Restore the font after a device has been reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColoredTextured), MaxNumfontVertices, + device, Usage.WriteOnly | Usage.Dynamic, 0, Pool.Default); + + Surface surf = device.GetRenderTarget( 0 ); + bool bSupportsAlphaBlend = Manager.CheckDeviceFormat(device.DeviceCaps.AdapterOrdinal, + device.DeviceCaps.DeviceType, device.DisplayMode.Format, + Usage.RenderTarget | Usage.QueryPostPixelShaderBlending, ResourceType.Surface, + surf.Description.Format ); + + // Create the state blocks for rendering text + for (int which=0; which < 2; which++) { + device.BeginStateBlock(); + device.SetTexture(0, fontTexture); + + if (isZEnable) + renderState.ZBufferEnable = true; + else + renderState.ZBufferEnable = false; + + if( bSupportsAlphaBlend ) { + renderState.AlphaBlendEnable = true; + renderState.SourceBlend = Blend.SourceAlpha; + renderState.DestinationBlend = Blend.InvSourceAlpha; + } + else { + renderState.AlphaBlendEnable = false; + } + renderState.AlphaTestEnable = true; + renderState.ReferenceAlpha = 0x08; + renderState.AlphaFunction = Compare.GreaterEqual; + renderState.FillMode = FillMode.Solid; + renderState.CullMode = Cull.CounterClockwise; + renderState.StencilEnable = false; + renderState.Clipping = true; + device.ClipPlanes.DisableAll(); + renderState.VertexBlend = VertexBlend.Disable; + renderState.IndexedVertexBlendEnable = false; + renderState.FogEnable = false; + renderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; + textureState0.ColorOperation = TextureOperation.Modulate; + textureState0.ColorArgument1 = TextureArgument.TextureColor; + textureState0.ColorArgument2 = TextureArgument.Diffuse; + textureState0.AlphaOperation = TextureOperation.Modulate; + textureState0.AlphaArgument1 = TextureArgument.TextureColor; + textureState0.AlphaArgument2 = TextureArgument.Diffuse; + textureState0.TextureCoordinateIndex = 0; + textureState0.TextureTransform = TextureTransform.Disable; // REVIEW + textureState1.ColorOperation = TextureOperation.Disable; + textureState1.AlphaOperation = TextureOperation.Disable; + samplerState0.MinFilter = TextureFilter.Point; + samplerState0.MagFilter = TextureFilter.Point; + samplerState0.MipFilter = TextureFilter.None; + + if (which==0) + savedStateBlock = device.EndStateBlock(); + else + drawTextStateBlock = device.EndStateBlock(); + } + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text) { + DrawText(xpos, ypos, color, text, RenderFlags.Filtered); + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text, RenderFlags flags) { + if (text == null) + return; + + // Setup renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.SetTexture(0, fontTexture); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Adjust for character spacing + xpos -= spacingPerChar; + float fStartX = xpos; + + // Fill vertex buffer + int iv = 0; + int dwNumTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / textureScale; + float h = (ty2-ty1) * textureHeight / textureScale; + + int intColor = color.ToArgb(); + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + dwNumTriangles += 2; + + if (dwNumTriangles*3 > (MaxNumfontVertices-6)) { + // Set the data for the vertexbuffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + dwNumTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar); + } + + // Set the data for the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (dwNumTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + Viewport vp = device.Viewport; + float xpos = (x+1.0f)*vp.Width/2; + float ypos = (y+1.0f)*vp.Height/2; + float sz = z; + float rhw = 1.0f; + float fLineHeight = (textureCoords[0,3] - textureCoords[0,1]) * textureHeight; + + // Adjust for character spacing + xpos -= spacingPerChar * (fXScale*vp.Height)/fLineHeight; + float fStartX = xpos; + + // Fill vertex buffer + int numTriangles = 0; + int realColor = color.ToArgb(); + int iv = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += fYScale*vp.Height; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1)*textureWidth; + float h = (ty2-ty1)*textureHeight; + + w *= (fXScale*vp.Height)/fLineHeight; + h *= (fYScale*vp.Height)/fLineHeight; + + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + numTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar) * (fXScale*vp.Height)/fLineHeight; + } + + // Unlock and render the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text) { + this.DrawTextScaled(x,y,z,fXScale, fYScale, color, text, 0); + } + + + + + /// + /// Renders 3D text + /// + public void Render3DText(string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.PositionNormalTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0, VertexInformation.GetFormatSize(CustomVertex.PositionNormalTextured.Format)); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Position for each text element + float x = 0.0f; + float y = 0.0f; + + // Center the text block at the origin + if ((flags & RenderFlags.Centered) != 0) { + System.Drawing.SizeF sz = GetTextExtent(text); + x = -(((float)sz.Width)/10.0f)/2.0f; + y = -(((float)sz.Height)/10.0f)/2.0f; + } + + // Turn off culling for two-sided text + if ((flags & RenderFlags.TwoSided) != 0) + renderState.CullMode = Cull.None; + + // Adjust for character spacing + x -= spacingPerChar / 10.0f; + float fStartX = x; + + // Fill vertex buffer + GraphicsStream strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + int numTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + x = fStartX; + y -= (textureCoords[0,3]-textureCoords[0,1])*textureHeight/10.0f; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / (10.0f * textureScale); + float h = (ty2-ty1) * textureHeight / (10.0f * textureScale); + + if (c != ' ') { + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+0,0), new Vector3(0,0,-1), tx1, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+h,0), new Vector3(0,0,-1), tx2, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.Unlock(); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + numTriangles = 0; + } + } + + x += w - (2 * spacingPerChar) / 10.0f; + } + + // Unlock and render the vertex buffer + vertexBuffer.Unlock(); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Get the dimensions of a text string + /// + private System.Drawing.SizeF GetTextExtent(string text) { + if (null == text || text == string.Empty) + throw new System.ArgumentNullException(); + + float fRowWidth = 0.0f; + float fRowHeight = (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + float fWidth = 0.0f; + float fHeight = fRowHeight; + + foreach (char c in text) { + if (c == '\n') { + fRowWidth = 0.0f; + fHeight += fRowHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float tx2 = textureCoords[c-32,2]; + + fRowWidth += (tx2-tx1)*textureWidth - 2*spacingPerChar; + + if (fRowWidth > fWidth) + fWidth = fRowWidth; + } + + return new System.Drawing.SizeF(fWidth, fHeight); + } + + + + + /// + /// Cleanup any resources being used + /// + public void Dispose(object sender, EventArgs e) { + if (systemFont != null) + systemFont.Dispose(); + + systemFont = null; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/d3dutil.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/d3dutil.cs new file mode 100644 index 0000000..ea2d5a3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/d3dutil.cs @@ -0,0 +1,928 @@ +//----------------------------------------------------------------------------- +// File: D3DUtil.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Windows.Forms; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// Various helper functions for graphics samples +/// +public class GraphicsUtility { + /// + /// Private Constructor + /// + private GraphicsUtility() { + } + + + + /// + /// Initializes a Material structure, setting the diffuse and ambient + /// colors. It does not set emissive or specular colors. + /// + /// The ambient and diffuse color + /// A defined material + public static Direct3D.Material InitMaterial(System.Drawing.Color c) { + Material mtrl = new Material(); + mtrl.Ambient = mtrl.Diffuse = c; + return mtrl; + } + + + + + /// + /// Initializes a light, setting the light position. The + /// diffuse color is set to white; specular and ambient are left as black. + /// + /// Which light to initialize + /// The type + public static void InitLight(Light light, LightType ltType, float x, float y, float z) { + light.Type = ltType; + light.Diffuse = System.Drawing.Color.White; + light.Position = new Vector3(x,y,z); + light.Direction = Vector3.Normalize(light.Position); + light.Range = 1000.0f; + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename, Format format) { + // Get the path to the texture + string path = DXUtil.FindMediaFile(null, textureFilename); + + // Create the texture using D3DX + return TextureLoader.FromFile(device, path, D3DX.Default, D3DX.Default, D3DX.Default, 0, format, + Pool.Managed, Filter.Triangle|Filter.Mirror, + Filter.Triangle|Filter.Mirror, 0); + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename) { + return GraphicsUtility.CreateTexture(device, textureFilename, Format.Unknown); + } + + + + + + /// + /// Returns a view matrix for rendering to a face of a cubemap. + /// + public static Matrix GetCubeMapViewMatrix(CubeMapFace face) { + Vector3 vEyePt = new Vector3(0.0f, 0.0f, 0.0f); + Vector3 vLookDir = new Vector3(); + Vector3 vUpDir = new Vector3(); + + switch (face) { + case CubeMapFace.PositiveX: + vLookDir = new Vector3(1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeX: + vLookDir = new Vector3(-1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.PositiveY: + vLookDir = new Vector3(0.0f, 1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f,-1.0f); + break; + case CubeMapFace.NegativeY: + vLookDir = new Vector3(0.0f,-1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f, 1.0f); + break; + case CubeMapFace.PositiveZ: + vLookDir = new Vector3(0.0f, 0.0f, 1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeZ: + vLookDir = new Vector3(0.0f, 0.0f,-1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + } + + // Set the view transform for this cubemap surface + Matrix matView = Matrix.LookAtLH(vEyePt, vLookDir, vUpDir); + return matView; + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control, float fTrackBallRadius) { + System.Drawing.Point pt = System.Windows.Forms.Cursor.Position; + System.Drawing.Rectangle rc = control.ClientRectangle; + pt = control.PointToClient(pt); + float xpos = (((2.0f * pt.X) / (rc.Right-rc.Left)) - 1); + float ypos = (((2.0f * pt.Y) / (rc.Bottom-rc.Top)) - 1); + float sz; + + if (xpos == 0.0f && ypos == 0.0f) + return new Quaternion(0.0f, 0.0f, 0.0f, 1.0f); + + float d2 = (float)Math.Sqrt(xpos*xpos + ypos*ypos); + + if (d2 < fTrackBallRadius * 0.70710678118654752440) // Inside sphere + sz = (float)Math.Sqrt(fTrackBallRadius*fTrackBallRadius - d2*d2); + else // On hyperbola + sz = (fTrackBallRadius*fTrackBallRadius) / (2.0f*d2); + + // Get two points on trackball's sphere + Vector3 p1 = new Vector3(xpos, ypos, sz); + Vector3 p2 = new Vector3(0.0f, 0.0f, fTrackBallRadius); + + // Get axis of rotation, which is cross product of p1 and p2 + Vector3 axis = Vector3.Cross(p1,p2); + + // Calculate angle for the rotation about that axis + float t = Vector3.Length(Vector3.Subtract(p2,p1)) / (2.0f*fTrackBallRadius); + if (t > +1.0f) t = +1.0f; + if (t < -1.0f) t = -1.0f; + float fAngle = (float)(2.0f * Math.Asin(t)); + + // Convert axis to quaternion + return Quaternion.RotationAxis(axis, fAngle); + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control) { + return GetRotationFromCursor(control, 1.0f); + } + + + + + /// + /// Axis to axis quaternion double angle (no normalization) + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by 2*THETA. + /// + public static Quaternion D3DXQuaternionUnitAxisToUnitAxis2(Vector3 fromVector, Vector3 toVector) { + Vector3 axis = Vector3.Cross(fromVector, toVector); // proportional to sin(theta) + return new Quaternion(axis.X, axis.Y, axis.Z, Vector3.Dot(fromVector, toVector)); + } + + + + + /// + /// Axis to axis quaternion + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by theta. + /// + public static Quaternion D3DXQuaternionAxisToAxis(Vector3 fromVector, Vector3 toVector) { + Vector3 vA = Vector3.Normalize(fromVector), vB = Vector3.Normalize(toVector); + Vector3 vHalf = Vector3.Add(vA,vB); + vHalf = Vector3.Normalize(vHalf); + return GraphicsUtility.D3DXQuaternionUnitAxisToUnitAxis2(vA, vHalf); + } + + + + + /// + /// Gets the number of ColorChanelBits from a format + /// + static public int GetColorChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 8; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 8; + case Format.R5G6B5: + return 5; + case Format.X1R5G5B5: + return 5; + case Format.A1R5G5B5: + return 5; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 2; + case Format.A8R3G3B2: + return 2; + case Format.X4R4G4B4: + return 4; + case Format.A2B10G10R10: + return 10; + case Format.A2R10G10B10: + return 10; + default: + return 0; + } + } + + + + + /// + /// Gets the number of alpha channel bits + /// + static public int GetAlphaChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 0; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 0; + case Format.R5G6B5: + return 0; + case Format.X1R5G5B5: + return 0; + case Format.A1R5G5B5: + return 1; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 0; + case Format.A8R3G3B2: + return 8; + case Format.X4R4G4B4: + return 0; + case Format.A2B10G10R10: + return 2; + case Format.A2R10G10B10: + return 2; + default: + return 0; + } + } + + + + + /// + /// Gets the number of depth bits + /// + static public int GetDepthBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 16; + case DepthFormat.D15S1: + return 15; + case DepthFormat.D24X8: + return 24; + case DepthFormat.D24S8: + return 24; + case DepthFormat.D24X4S4: + return 24; + case DepthFormat.D32: + return 32; + default: + return 0; + } + } + + + + + /// + /// Gets the number of stencil bits + /// + static public int GetStencilBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 0; + case DepthFormat.D15S1: + return 1; + case DepthFormat.D24X8: + return 0; + case DepthFormat.D24S8: + return 8; + case DepthFormat.D24X4S4: + return 4; + case DepthFormat.D32: + return 0; + default: + return 0; + } + } + + + + + /// + /// Assembles and creates a file-based vertex shader + /// + public static VertexShader CreateVertexShader(Device device, string filename) { + GraphicsStream code = null; + string path = null; + + // Get the path to the vertex shader file + path = DXUtil.FindMediaFile(null, filename); + + // Assemble the vertex shader file + code = ShaderLoader.FromFile(path, null, 0); + + // Create the vertex shader + return new VertexShader(device, code); + } + +} + + + + +/// +/// An arc ball class +/// +public class GraphicsArcBall { + private int internalWidth; // ArcBall's window width + private int internalHeight; // ArcBall's window height + private float internalradius; // ArcBall's radius in screen coords + private float internalradiusTranslation; // ArcBall's radius for translating the target + + private Quaternion internaldownQuat; // Quaternion before button down + private Quaternion internalnowQuat; // Composite quaternion for current drag + private Matrix internalrotationMatrix; // Matrix for arcball's orientation + private Matrix internalrotationDelta; // Matrix for arcball's orientation + private Matrix internaltranslationMatrix; // Matrix for arcball's position + private Matrix internaltranslationDelta; // Matrix for arcball's position + private bool internaldragging; // Whether user is dragging arcball + private bool internaluseRightHanded; // Whether to use RH coordinate system + private int saveMouseX = 0; // Saved mouse position + private int saveMouseY = 0; + private Vector3 internalvectorDown; // Button down vector + System.Windows.Forms.Control parent; // parent + + + + + /// + /// Constructor + /// + public GraphicsArcBall(System.Windows.Forms.Control p) { + internaldownQuat = Quaternion.Identity; + internalnowQuat = Quaternion.Identity; + internalrotationMatrix = Matrix.Identity; + internalrotationDelta = Matrix.Identity; + internaltranslationMatrix = Matrix.Identity; + internaltranslationDelta = Matrix.Identity; + internaldragging = false; + internalradiusTranslation = 1.0f; + internaluseRightHanded = false; + + parent = p; + // Hook the events + p.MouseDown += new MouseEventHandler(this.OnContainerMouseDown); + p.MouseUp += new MouseEventHandler(this.OnContainerMouseUp); + p.MouseMove += new MouseEventHandler(this.OnContainerMouseMove); + } + + + + + /// + /// Set the window dimensions + /// + public void SetWindow(int width, int height, float radius) { + // Set ArcBall info + internalWidth = width; + internalHeight = height; + internalradius = radius; + } + + + + + /// + /// Screen coords to a vector + /// + private Vector3 ScreenToVector(int xpos, int ypos) { + // Scale to screen + float x = -(xpos - internalWidth/2) / (internalradius*internalWidth/2); + float y = (ypos - internalHeight/2) / (internalradius*internalHeight/2); + + if (internaluseRightHanded) { + x = -x; + y = -y; + } + + float z = 0.0f; + float mag = x*x + y*y; + + if (mag > 1.0f) { + float scale = 1.0f/(float)Math.Sqrt(mag); + x *= scale; + y *= scale; + } + else + z = (float)Math.Sqrt(1.0f - mag); + + // Return vector + return new Vector3(x, y, z); + } + + + + + /// + /// Fired when the containers mouse button is down + /// + private void OnContainerMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { + // Store off the position of the cursor when the button is pressed + saveMouseX = e.X; + saveMouseY = e.Y; + + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // Start drag mode + internaldragging = true; + internalvectorDown = ScreenToVector(e.X, e.Y); + internaldownQuat = internalnowQuat; + } + } + + + + + /// + /// Fired when the containers mouse button has been released + /// + private void OnContainerMouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // End drag mode + internaldragging = false; + } + } + + + + + /// + /// Fired when the containers mouse is moving + /// + private void OnContainerMouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + if (internaldragging) { + // recompute nowQuat + Vector3 vCur = ScreenToVector(e.X, e.Y); + Quaternion qAxisToAxis = GraphicsUtility.D3DXQuaternionAxisToAxis(internalvectorDown, vCur); + internalnowQuat = internaldownQuat; + internalnowQuat = Quaternion.Multiply(internalnowQuat,qAxisToAxis); + internalrotationDelta = Matrix.RotationQuaternion(qAxisToAxis); + } + else + internalrotationDelta = Matrix.Identity; + + internalrotationMatrix = Matrix.RotationQuaternion(internalnowQuat); + internaldragging = true; + } + + if ((e.Button == System.Windows.Forms.MouseButtons.Right) || (e.Button == System.Windows.Forms.MouseButtons.Middle)) { + // Normalize based on size of window and bounding sphere radius + float fDeltaX = (saveMouseX-e.X) * internalradiusTranslation / internalWidth; + float fDeltaY = (saveMouseY-e.Y) * internalradiusTranslation / internalHeight; + + if (e.Button == System.Windows.Forms.MouseButtons.Right) { + internaltranslationDelta = Matrix.Translation(-2 * fDeltaX, 2 * fDeltaY, 0.0f); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + if (e.Button == System.Windows.Forms.MouseButtons.Middle) { + internaltranslationDelta = Matrix.Translation(0.0f, 0.0f, 5 * fDeltaY); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + + // Store mouse coordinate + saveMouseX = e.X; + saveMouseY = e.Y; + } + } + + #region Various properties of the class + public float Radius { + set { + internalradiusTranslation = value; } + } + public bool RightHanded { + get { return internaluseRightHanded; } + set { internaluseRightHanded = value; } + } + public Matrix RotationMatrix { + get { return internalrotationMatrix; } + } + public Matrix RotationDeltaMatrix { + get { return internalrotationDelta; } + } + public Matrix TranslationMatrix { + get { return internaltranslationMatrix; } + } + public Matrix TranslationDeltaMatrix { + get { return internaltranslationDelta; } + } + public bool IsBeingDragged { + get { return internaldragging; } + } + #endregion +} + + + + +/// +/// Handles our meshes +/// +public class GraphicsMesh : IDisposable { + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + + + + + /// + /// Constructor + /// + /// The initial filename + public GraphicsMesh(string filename) { + fileName = filename; + } + public GraphicsMesh() : this ("CD3DFile_Mesh") {} + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + string strPath = null; + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Find the path for the file, and convert it to ANSI (for the D3DX API) + strPath = DXUtil.FindMediaFile(null, filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(strPath, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + } + + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. Note: because we are passing in + // no flags, the default behavior is to clone into local memory. + localMemoryMesh = systemMemoryMesh.Clone(0, systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(Device device, bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render(Device device) { + Render(device, true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/dinput.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/dinput.cs new file mode 100644 index 0000000..f0829a0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/dinput.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + +/// +/// This class is where the DirectInput routines +/// for the application resides. +/// +public class InputClass { + + private Control owner = null; + private Device localDevice = null; + + public InputClass(Control owner) { + this.owner = owner; + + localDevice = new Device(SystemGuid.Keyboard); + localDevice.SetDataFormat(DeviceDataFormat.Keyboard); + localDevice.SetCooperativeLevel(owner, CooperativeLevelFlags.Foreground | CooperativeLevelFlags.NonExclusive); + } + + public KeyboardState GetInputState() { + KeyboardState kbState = null; + + try { + kbState = localDevice.GetCurrentKeyboardState(); + } + catch(InputException) { + do { + Application.DoEvents(); + try{ localDevice.Acquire(); } + catch (InputLostException) { + continue; } + catch(OtherApplicationHasPriorityException) { + continue; } + + break; + + }while( true ); + } + return kbState; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/dplay.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/dplay.cs new file mode 100644 index 0000000..be86825 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/dplay.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + +/// +/// The class that houses DirectPlay code for the application. +/// +public class PlayClass : IDisposable { + private MessageDelegate message = null; + + private GameClass parent = null; + + public Peer peerObject = null; + private ConnectWizard Connect = null; + private ArrayList PlayerList = new ArrayList(); + private int LocalPlayerID = 0; + public Guid AppGuid = new Guid(0x876a3036, 0xffd7, 0x46bc, 0x92, 0x9, 0xb4, 0x2f, 0x61, 0x7b, 0x9b, 0xF1); + + public struct Players { + public int dpnID; + public string Name; + public Players(int id, string n) { + dpnID = id; Name = n; } + } + + public void Dispose() { + peerObject.Dispose(); + } + + public PlayClass(GameClass parent) { + this.parent = parent; + this.peerObject = peerObject; + this.message = new MessageDelegate(parent.MessageArrived); + + peerObject = new Peer(); + // First set up our event handlers (We only need events for the ones we care about) + peerObject.PlayerCreated += new PlayerCreatedEventHandler(this.PlayerCreated); + peerObject.PlayerDestroyed += new PlayerDestroyedEventHandler(this.PlayerDestroyed); + peerObject.HostMigrated += new HostMigratedEventHandler(this.HostMigrated); + peerObject.Receive += new ReceiveEventHandler(this.DataReceived); + peerObject.SessionTerminated += new SessionTerminatedEventHandler(this.SessionTerminated); + + Connect = new ConnectWizard(peerObject, AppGuid, "Step2"); + if (!Connect.StartWizard()) { + MessageBox.Show("DirectPlay initialization was incomplete. Application will terminate."); + throw new DirectXException(); + } + } + + public void WriteMessage(byte msg) { + NetworkPacket packet = new NetworkPacket(); + + packet.Write(msg); + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.Guaranteed); + } + + #region DirectPlayEvents + /// + // These are the events the app will handle + // when DPlay fires them. + /// + private void PlayerCreated(object sender, PlayerCreatedEventArgs dpMessage) { + // Get the PlayerInformation and store it + PlayerInformation dpPeer = peerObject.GetPeerInformation(dpMessage.Message.PlayerID); + Players oPlayer = new Players(dpMessage.Message.PlayerID,dpPeer.Name); + // We lock the data here since it is shared across multiple threads. + lock (PlayerList) { + PlayerList.Add(oPlayer); + } + // Save this player id if it's ourselves + if (dpPeer.Local) + LocalPlayerID = dpMessage.Message.PlayerID; + + } + private void PlayerDestroyed(object sender, PlayerDestroyedEventArgs dpMessage) { + // Remove this player from our list + // We lock the data here since it is shared across multiple threads. + lock (PlayerList) { + foreach (Players player in PlayerList) { + if (dpMessage.Message.PlayerID == player.dpnID) { + PlayerList.Remove(player); + break; + } + } + } + } + private void HostMigrated(object sender, HostMigratedEventArgs dpMessage) { + if (LocalPlayerID == dpMessage.Message.NewHostID) { + // This application instance is the new host, update the UI + parent.Text += " (HOST)"; + } + } + private void DataReceived(object sender, ReceiveEventArgs dpMessage) { + lock(this) { + byte data = (byte)dpMessage.Message.ReceiveData.Read(typeof(byte)); + message(data); + } + } + private void SessionTerminated(object sender, SessionTerminatedEventArgs dpMessage) { + // This session is being terminated, let the user know + if (dpMessage.Message.ResultCode == ResultCode.HostTerminatedSession) + MessageBox.Show("The Host has terminated this session. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + else + MessageBox.Show("The session has been lost. This sample will now exit.", "Exiting", MessageBoxButtons.OK, MessageBoxIcon.Information); + + // This will post a message on the main thread to shut down our form + parent.BeginInvoke(new PeerCloseCallback(parent.PeerClose)); + } + #endregion +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step08/main.cs b/Source Code updated 08-12-05/Spacewar3D/Step08/main.cs new file mode 100644 index 0000000..1ed0210 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step08/main.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Container = System.ComponentModel.Container; + + + /// + /// The main windows form for the application. + /// +public class MainClass { + + private GameClass game = null; + private SplashScreen splash = null; + private bool enableNetwork = false; + public bool EnableNetwork { get { return enableNetwork; } set { enableNetwork = value; } } + + private Size gameFormSize; + public Size GameFormSize { get { return gameFormSize; } set { gameFormSize = value; } } + + private bool fullScreen = false; + public bool FullScreen { get { return fullScreen; } set { fullScreen = value; } } + + /// + // Main entry point of the application. + /// + public static void Main() { + MainClass m = new MainClass(); + } + + public MainClass() { + + //display the splash screen and determine network status + splash = new SplashScreen(this); + splash.ShowDialog(); + + try { + game = new GameClass(fullScreen, gameFormSize, enableNetwork); + } + catch(DirectXException) { + return; + } + if( game.CreateGraphicsSample() ) + game.Run(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/App.config b/Source Code updated 08-12-05/Spacewar3D/Step09/App.config new file mode 100644 index 0000000..5bbb96b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/BGPointer.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/BGPointer.cs new file mode 100644 index 0000000..dd4b54c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/BGPointer.cs @@ -0,0 +1,39 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// Summary description for BGPointer. + /// +public class BGPointer { + private PositionedMesh arrowMesh; + private Device device; + + + public BGPointer(Device device) { + this.device = device; + arrowMesh = new PositionedMesh(device,"arrow-yel.x"); + arrowMesh.Position.Scale(2.0f, 2.0f, 2.0f); + } + + public void Render() { + arrowMesh.Render(); + } + + public void Point(WorldPosition ourPosition, WorldPosition opponentWorldPosition) { + arrowMesh.Position.Move(ourPosition.Location.X, ourPosition.Location.Y, + ourPosition.Location.Z); + Vector3 pointVector = opponentWorldPosition.Location - ourPosition.Location; + + + float XRot, YRot; + + XRot = (float) Math.Atan2(-pointVector.Y, Math.Sqrt(pointVector.X * pointVector.X + + pointVector.Z * pointVector.Z)); + YRot = (float) Math.Atan2(pointVector.X, pointVector.Z); + + arrowMesh.Position.Rotate(XRot, YRot, 0.0f); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/Camera.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/Camera.cs new file mode 100644 index 0000000..c8e3944 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/Camera.cs @@ -0,0 +1,119 @@ +using System; +using Microsoft.DirectX; + + + /// + /// Summary description for Camera. + /// +public class Camera { + + protected float velocity; + + + protected float xPos, yPos, zPos; + protected float xRot, yRot, zRot; + + protected float startXPos, startYPos, startZPos; + protected float startXRot, startYRot, startZRot; + + protected float endXPos, endYPos, endZPos; + protected float endXRot, endYRot, endZRot; + + protected Matrix viewMatrix; + protected Matrix translationMatrix; + protected Matrix rotationMatrix; + + public float XPosition { get { return xPos; } } + public float YPosition { get { return yPos; } } + public float ZPosition { get { return zPos; } } + + public float XRotation { get { return xRot; } } + public float YRotation { get { return yRot; } } + public float ZRotation { get { return zRot; } } + + + public Vector3 Loc { + get { + return new Vector3(xPos,yPos,zPos); + } + set { + Vector3 loc = value; + xPos = loc.X; + yPos = loc.Y; + zPos = loc.Z; + } + + } + + public Matrix ViewMatrix { + get { + Update(); + return viewMatrix; + } + set { + viewMatrix = value; + } + + } + + + public Camera() { + Move(0.0f,0.0f,0.0f); + Rotate(0.0f,0.0f,0.0f); + Update(); + } + + + public void Update() { // Update transformation matrix + viewMatrix = translationMatrix * rotationMatrix; + } + + public void Move(float XPos, float YPos, float ZPos) { + xPos = XPos; + yPos = YPos; + zPos = ZPos; + translationMatrix = Matrix.Translation( -xPos, -yPos, -zPos ); + } + + public void MoveRel(float XAdd, float YAdd, float ZAdd) { + Move (xPos + XAdd, yPos + YAdd, zPos + ZAdd); + + } + + public void Rotate(float XRot, float YRot, float ZRot) { + Matrix xRotation, yRotation, zRotation; + + xRot = XRot; + yRot = YRot; + zRot = ZRot; + + xRotation = Matrix.RotationX( - xRot ); + yRotation = Matrix.RotationY( - yRot ); + zRotation = Matrix.RotationZ( - zRot ); + + rotationMatrix = zRotation; + rotationMatrix *= yRotation; + rotationMatrix *= xRotation; + + } + + public void RotateRel(float XAdd, float YAdd, float ZAdd) { + Rotate (xRot + XAdd, yRot + YAdd, zRot + ZAdd); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/CameraMode.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/CameraMode.cs new file mode 100644 index 0000000..fc8f03a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/CameraMode.cs @@ -0,0 +1,9 @@ +using System; + + +public enum CameraMode { + ChaseMode, + CockpitMode, + Fixed +}; + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/Constants.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/Constants.cs new file mode 100644 index 0000000..22d420a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/Constants.cs @@ -0,0 +1,39 @@ +using System; +using Microsoft.DirectX.Direct3D; +using Microsoft.DirectX; + + + /// + /// GamePlay constants. You can tune the game by adjusting these values. + /// +sealed public class Constants { + static public Random random = new Random((int) DateTime.Now.Ticks); + + public const float EngineThrust = 0.3f; + public const float DyingCycle = 2; + public const float DeadCycleWait = 2; + public const float HyperChargeWait = 3; + public const float HyperCycleWait = 2; + public const float HyperSuccessFactor = 0.8f; // initial success factor + public const float HyperSuccessDegradation = 0.1f; // degradation per use... + public const float ShipCollisionLimit = 15f; + public const float MaxVelocity = 125.0f; + public const float ThrustPower = 1.001f; + + public const int ShotLifetime = 4; + public const int NumShots = 12; + public const float ShotVelocity = 350f; + public const float ShotDeltaTime = 0.10f; + public const int ShotInitialMove = 3; // times to update shot so it shows up outside the ship... + public const int ShotCollisionLimit = 10; + + + public const float StatusMessageDisplayTime = 5.0f; + + + + public const long RemoteTickTimeout = 5; // five seconds... + + private Constants() { + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/D3DSettingsForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/D3DSettingsForm.cs new file mode 100644 index 0000000..889162a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/D3DSettingsForm.cs @@ -0,0 +1,1037 @@ +//----------------------------------------------------------------------------- +// File: D3DSettingsForm.cs +// +// Desc: Application form for setting up user defined display settings +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + + + + + +/// +/// A form to allow the user to change the current D3D settings. +/// +public class D3DSettingsForm : System.Windows.Forms.Form { + private D3DEnumeration enumeration; + public D3DSettings settings; // Potential new D3D settings + + private System.Windows.Forms.GroupBox adapterDeviceGroupBox; + private System.Windows.Forms.Label displayAdapterLabel; + private System.Windows.Forms.ComboBox adapterComboBox; + private System.Windows.Forms.Label deviceLabel; + private System.Windows.Forms.ComboBox deviceComboBox; + private System.Windows.Forms.GroupBox modeSettingsGroupBox; + private System.Windows.Forms.RadioButton windowedRadioButton; + private System.Windows.Forms.RadioButton fullscreenRadioButton; + private System.Windows.Forms.Label adapterFormatLabel; + private System.Windows.Forms.ComboBox adapterFormatComboBox; + private System.Windows.Forms.Label resolutionLabel; + private System.Windows.Forms.ComboBox resolutionComboBox; + private System.Windows.Forms.Label refreshRateLabel; + private System.Windows.Forms.ComboBox refreshRateComboBox; + private System.Windows.Forms.GroupBox otherSettingsGroupBox; + private System.Windows.Forms.Label backBufferFormatLabel; + private System.Windows.Forms.ComboBox backBufferFormatComboBox; + private System.Windows.Forms.Label depthStencilBufferLabel; + private System.Windows.Forms.ComboBox depthStencilBufferComboBox; + private System.Windows.Forms.Label multisampleLabel; + private System.Windows.Forms.ComboBox multisampleComboBox; + private System.Windows.Forms.Label vertexProcLabel; + private System.Windows.Forms.ComboBox vertexProcComboBox; + private System.Windows.Forms.Label presentIntervalLabel; + private System.Windows.Forms.ComboBox presentIntervalComboBox; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.ComboBox multisampleQualityComboBox; + private System.Windows.Forms.Label multisampleQualityLabel; + + + + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + + /// + /// Constructor. Pass in an enumeration and the current D3D settings. + /// + public D3DSettingsForm(D3DEnumeration enumerationParam, D3DSettings settingsParam) { + enumeration = enumerationParam; + settings = settingsParam.Clone(); + + // Required for Windows Form Designer support + InitializeComponent(); + + // Fill adapter combo box. Updating the selected adapter will trigger + // updates of the rest of the dialog. + foreach (GraphicsAdapterInfo adapterInfo in enumeration.AdapterInfoList) { + adapterComboBox.Items.Add(adapterInfo); + if (adapterInfo.AdapterOrdinal == settings.AdapterOrdinal) + adapterComboBox.SelectedItem = adapterInfo; + } + if (adapterComboBox.SelectedItem == null && adapterComboBox.Items.Count > 0) + adapterComboBox.SelectedIndex = 0; + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + if (components != null) + components.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.adapterDeviceGroupBox = new System.Windows.Forms.GroupBox(); + this.deviceComboBox = new System.Windows.Forms.ComboBox(); + this.deviceLabel = new System.Windows.Forms.Label(); + this.adapterComboBox = new System.Windows.Forms.ComboBox(); + this.displayAdapterLabel = new System.Windows.Forms.Label(); + this.fullscreenRadioButton = new System.Windows.Forms.RadioButton(); + this.cancelButton = new System.Windows.Forms.Button(); + this.otherSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.multisampleQualityComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleQualityLabel = new System.Windows.Forms.Label(); + this.multisampleComboBox = new System.Windows.Forms.ComboBox(); + this.backBufferFormatComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferLabel = new System.Windows.Forms.Label(); + this.backBufferFormatLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcLabel = new System.Windows.Forms.Label(); + this.presentIntervalComboBox = new System.Windows.Forms.ComboBox(); + this.presentIntervalLabel = new System.Windows.Forms.Label(); + this.resolutionComboBox = new System.Windows.Forms.ComboBox(); + this.windowedRadioButton = new System.Windows.Forms.RadioButton(); + this.resolutionLabel = new System.Windows.Forms.Label(); + this.refreshRateComboBox = new System.Windows.Forms.ComboBox(); + this.adapterFormatLabel = new System.Windows.Forms.Label(); + this.refreshRateLabel = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.modeSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.adapterFormatComboBox = new System.Windows.Forms.ComboBox(); + this.adapterDeviceGroupBox.SuspendLayout(); + this.otherSettingsGroupBox.SuspendLayout(); + this.modeSettingsGroupBox.SuspendLayout(); + this.SuspendLayout(); + // + // adapterDeviceGroupBox + // + this.adapterDeviceGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.deviceComboBox, + this.deviceLabel, + this.adapterComboBox, + this.displayAdapterLabel}); + this.adapterDeviceGroupBox.Location = new System.Drawing.Point(16, 8); + this.adapterDeviceGroupBox.Name = "adapterDeviceGroupBox"; + this.adapterDeviceGroupBox.Size = new System.Drawing.Size(400, 80); + this.adapterDeviceGroupBox.TabIndex = 0; + this.adapterDeviceGroupBox.TabStop = false; + this.adapterDeviceGroupBox.Text = "Adapter and device"; + // + // deviceComboBox + // + this.deviceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.deviceComboBox.DropDownWidth = 121; + this.deviceComboBox.Location = new System.Drawing.Point(160, 48); + this.deviceComboBox.Name = "deviceComboBox"; + this.deviceComboBox.Size = new System.Drawing.Size(232, 21); + this.deviceComboBox.TabIndex = 3; + this.deviceComboBox.SelectedIndexChanged += new System.EventHandler(this.DeviceChanged); + // + // deviceLabel + // + this.deviceLabel.Location = new System.Drawing.Point(8, 48); + this.deviceLabel.Name = "deviceLabel"; + this.deviceLabel.Size = new System.Drawing.Size(152, 23); + this.deviceLabel.TabIndex = 2; + this.deviceLabel.Text = "Render &Device:"; + // + // adapterComboBox + // + this.adapterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterComboBox.DropDownWidth = 121; + this.adapterComboBox.Location = new System.Drawing.Point(160, 24); + this.adapterComboBox.Name = "adapterComboBox"; + this.adapterComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterComboBox.TabIndex = 1; + this.adapterComboBox.SelectedIndexChanged += new System.EventHandler(this.AdapterChanged); + // + // displayAdapterLabel + // + this.displayAdapterLabel.Location = new System.Drawing.Point(8, 24); + this.displayAdapterLabel.Name = "displayAdapterLabel"; + this.displayAdapterLabel.Size = new System.Drawing.Size(152, 23); + this.displayAdapterLabel.TabIndex = 0; + this.displayAdapterLabel.Text = "Display &Adapter:"; + // + // fullscreenRadioButton + // + this.fullscreenRadioButton.Location = new System.Drawing.Point(9, 38); + this.fullscreenRadioButton.Name = "fullscreenRadioButton"; + this.fullscreenRadioButton.Size = new System.Drawing.Size(152, 24); + this.fullscreenRadioButton.TabIndex = 1; + this.fullscreenRadioButton.Text = "&Fullscreen"; + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(248, 464); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.TabIndex = 4; + this.cancelButton.Text = "Cancel"; + // + // otherSettingsGroupBox + // + this.otherSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.multisampleQualityComboBox, + this.multisampleQualityLabel, + this.multisampleComboBox, + this.backBufferFormatComboBox, + this.multisampleLabel, + this.depthStencilBufferLabel, + this.backBufferFormatLabel, + this.depthStencilBufferComboBox, + this.vertexProcComboBox, + this.vertexProcLabel, + this.presentIntervalComboBox, + this.presentIntervalLabel}); + this.otherSettingsGroupBox.Location = new System.Drawing.Point(16, 264); + this.otherSettingsGroupBox.Name = "otherSettingsGroupBox"; + this.otherSettingsGroupBox.Size = new System.Drawing.Size(400, 176); + this.otherSettingsGroupBox.TabIndex = 2; + this.otherSettingsGroupBox.TabStop = false; + this.otherSettingsGroupBox.Text = "Device settings"; + // + // multisampleQualityComboBox + // + this.multisampleQualityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleQualityComboBox.DropDownWidth = 144; + this.multisampleQualityComboBox.Location = new System.Drawing.Point(160, 96); + this.multisampleQualityComboBox.Name = "multisampleQualityComboBox"; + this.multisampleQualityComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleQualityComboBox.TabIndex = 7; + this.multisampleQualityComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleQualityChanged); + // + // multisampleQualityLabel + // + this.multisampleQualityLabel.Location = new System.Drawing.Point(8, 96); + this.multisampleQualityLabel.Name = "multisampleQualityLabel"; + this.multisampleQualityLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleQualityLabel.TabIndex = 6; + this.multisampleQualityLabel.Text = "Multisample &Quality:"; + // + // multisampleComboBox + // + this.multisampleComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleComboBox.DropDownWidth = 144; + this.multisampleComboBox.Location = new System.Drawing.Point(160, 72); + this.multisampleComboBox.Name = "multisampleComboBox"; + this.multisampleComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleComboBox.TabIndex = 5; + this.multisampleComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleTypeChanged); + // + // backBufferFormatComboBox + // + this.backBufferFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.backBufferFormatComboBox.DropDownWidth = 144; + this.backBufferFormatComboBox.Location = new System.Drawing.Point(160, 24); + this.backBufferFormatComboBox.Name = "backBufferFormatComboBox"; + this.backBufferFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.backBufferFormatComboBox.TabIndex = 1; + this.backBufferFormatComboBox.SelectedIndexChanged += new System.EventHandler(this.BackBufferFormatChanged); + // + // multisampleLabel + // + this.multisampleLabel.Location = new System.Drawing.Point(8, 72); + this.multisampleLabel.Name = "multisampleLabel"; + this.multisampleLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleLabel.TabIndex = 4; + this.multisampleLabel.Text = "&Multisample Type:"; + // + // depthStencilBufferLabel + // + this.depthStencilBufferLabel.Location = new System.Drawing.Point(8, 48); + this.depthStencilBufferLabel.Name = "depthStencilBufferLabel"; + this.depthStencilBufferLabel.Size = new System.Drawing.Size(152, 23); + this.depthStencilBufferLabel.TabIndex = 2; + this.depthStencilBufferLabel.Text = "De&pth/Stencil Buffer Format:"; + // + // backBufferFormatLabel + // + this.backBufferFormatLabel.Location = new System.Drawing.Point(8, 24); + this.backBufferFormatLabel.Name = "backBufferFormatLabel"; + this.backBufferFormatLabel.Size = new System.Drawing.Size(152, 23); + this.backBufferFormatLabel.TabIndex = 0; + this.backBufferFormatLabel.Text = "&Back Buffer Format:"; + // + // depthStencilBufferComboBox + // + this.depthStencilBufferComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.depthStencilBufferComboBox.DropDownWidth = 144; + this.depthStencilBufferComboBox.Location = new System.Drawing.Point(160, 48); + this.depthStencilBufferComboBox.Name = "depthStencilBufferComboBox"; + this.depthStencilBufferComboBox.Size = new System.Drawing.Size(232, 21); + this.depthStencilBufferComboBox.TabIndex = 3; + this.depthStencilBufferComboBox.SelectedIndexChanged += new System.EventHandler(this.DepthStencilBufferFormatChanged); + // + // vertexProcComboBox + // + this.vertexProcComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.vertexProcComboBox.DropDownWidth = 121; + this.vertexProcComboBox.Location = new System.Drawing.Point(160, 120); + this.vertexProcComboBox.Name = "vertexProcComboBox"; + this.vertexProcComboBox.Size = new System.Drawing.Size(232, 21); + this.vertexProcComboBox.TabIndex = 9; + this.vertexProcComboBox.SelectedIndexChanged += new System.EventHandler(this.VertexProcessingChanged); + // + // vertexProcLabel + // + this.vertexProcLabel.Location = new System.Drawing.Point(8, 120); + this.vertexProcLabel.Name = "vertexProcLabel"; + this.vertexProcLabel.Size = new System.Drawing.Size(152, 23); + this.vertexProcLabel.TabIndex = 8; + this.vertexProcLabel.Text = "&Vertex Processing:"; + // + // presentIntervalComboBox + // + this.presentIntervalComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.presentIntervalComboBox.DropDownWidth = 121; + this.presentIntervalComboBox.Location = new System.Drawing.Point(160, 144); + this.presentIntervalComboBox.Name = "presentIntervalComboBox"; + this.presentIntervalComboBox.Size = new System.Drawing.Size(232, 21); + this.presentIntervalComboBox.TabIndex = 11; + this.presentIntervalComboBox.SelectedValueChanged += new System.EventHandler(this.PresentIntervalChanged); + // + // presentIntervalLabel + // + this.presentIntervalLabel.Location = new System.Drawing.Point(8, 144); + this.presentIntervalLabel.Name = "presentIntervalLabel"; + this.presentIntervalLabel.Size = new System.Drawing.Size(152, 23); + this.presentIntervalLabel.TabIndex = 10; + this.presentIntervalLabel.Text = "Present &Interval:"; + // + // resolutionComboBox + // + this.resolutionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.resolutionComboBox.DropDownWidth = 144; + this.resolutionComboBox.Location = new System.Drawing.Point(161, 94); + this.resolutionComboBox.MaxDropDownItems = 14; + this.resolutionComboBox.Name = "resolutionComboBox"; + this.resolutionComboBox.Size = new System.Drawing.Size(232, 21); + this.resolutionComboBox.TabIndex = 5; + this.resolutionComboBox.SelectedIndexChanged += new System.EventHandler(this.ResolutionChanged); + // + // windowedRadioButton + // + this.windowedRadioButton.Location = new System.Drawing.Point(9, 14); + this.windowedRadioButton.Name = "windowedRadioButton"; + this.windowedRadioButton.Size = new System.Drawing.Size(152, 24); + this.windowedRadioButton.TabIndex = 0; + this.windowedRadioButton.Text = "&Windowed"; + this.windowedRadioButton.CheckedChanged += new System.EventHandler(this.WindowedFullscreenChanged); + // + // resolutionLabel + // + this.resolutionLabel.Location = new System.Drawing.Point(8, 94); + this.resolutionLabel.Name = "resolutionLabel"; + this.resolutionLabel.Size = new System.Drawing.Size(152, 23); + this.resolutionLabel.TabIndex = 4; + this.resolutionLabel.Text = "&Resolution:"; + // + // refreshRateComboBox + // + this.refreshRateComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.refreshRateComboBox.DropDownWidth = 144; + this.refreshRateComboBox.Location = new System.Drawing.Point(161, 118); + this.refreshRateComboBox.MaxDropDownItems = 14; + this.refreshRateComboBox.Name = "refreshRateComboBox"; + this.refreshRateComboBox.Size = new System.Drawing.Size(232, 21); + this.refreshRateComboBox.TabIndex = 7; + this.refreshRateComboBox.SelectedIndexChanged += new System.EventHandler(this.RefreshRateChanged); + // + // adapterFormatLabel + // + this.adapterFormatLabel.Location = new System.Drawing.Point(8, 72); + this.adapterFormatLabel.Name = "adapterFormatLabel"; + this.adapterFormatLabel.Size = new System.Drawing.Size(152, 23); + this.adapterFormatLabel.TabIndex = 2; + this.adapterFormatLabel.Text = "Adapter F&ormat:"; + // + // refreshRateLabel + // + this.refreshRateLabel.Location = new System.Drawing.Point(8, 118); + this.refreshRateLabel.Name = "refreshRateLabel"; + this.refreshRateLabel.Size = new System.Drawing.Size(152, 23); + this.refreshRateLabel.TabIndex = 6; + this.refreshRateLabel.Text = "R&efresh Rate:"; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(112, 464); + this.okButton.Name = "okButton"; + this.okButton.TabIndex = 3; + this.okButton.Text = "OK"; + // + // modeSettingsGroupBox + // + this.modeSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.adapterFormatLabel, + this.refreshRateLabel, + this.resolutionComboBox, + this.adapterFormatComboBox, + this.resolutionLabel, + this.refreshRateComboBox, + this.windowedRadioButton, + this.fullscreenRadioButton}); + this.modeSettingsGroupBox.Location = new System.Drawing.Point(16, 96); + this.modeSettingsGroupBox.Name = "modeSettingsGroupBox"; + this.modeSettingsGroupBox.Size = new System.Drawing.Size(400, 160); + this.modeSettingsGroupBox.TabIndex = 1; + this.modeSettingsGroupBox.TabStop = false; + this.modeSettingsGroupBox.Text = "Display mode settings"; + // + // adapterFormatComboBox + // + this.adapterFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterFormatComboBox.DropDownWidth = 121; + this.adapterFormatComboBox.Location = new System.Drawing.Point(161, 70); + this.adapterFormatComboBox.MaxDropDownItems = 14; + this.adapterFormatComboBox.Name = "adapterFormatComboBox"; + this.adapterFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterFormatComboBox.TabIndex = 3; + this.adapterFormatComboBox.SelectedValueChanged += new System.EventHandler(this.AdapterFormatChanged); + // + // D3DSettingsForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(438, 512); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.cancelButton, + this.okButton, + this.adapterDeviceGroupBox, + this.modeSettingsGroupBox, + this.otherSettingsGroupBox}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.Name = "D3DSettingsForm"; + this.Text = "Direct3D Settings"; + this.adapterDeviceGroupBox.ResumeLayout(false); + this.otherSettingsGroupBox.ResumeLayout(false); + this.modeSettingsGroupBox.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// Respond to a change of selected adapter by rebuilding the device + /// list. Updating the selected device will trigger updates of the + /// rest of the dialog. + /// + private void AdapterChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + settings.AdapterInfo = adapterInfo; + + // Update device combo box + deviceComboBox.Items.Clear(); + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + deviceComboBox.Items.Add(deviceInfo); + if (deviceInfo.DevType == settings.DevType) + deviceComboBox.SelectedItem = deviceInfo; + } + if (deviceComboBox.SelectedItem == null && deviceComboBox.Items.Count > 0) + deviceComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected device by resetting the + /// fullscreen/windowed radio buttons. Updating these buttons + /// will trigger updates of the rest of the dialog. + /// + private void DeviceChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + settings.DeviceInfo = deviceInfo; + + // Update fullscreen/windowed radio buttons + bool HasWindowedDeviceCombo = false; + bool HasFullscreenDeviceCombo = false; + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + HasWindowedDeviceCombo = true; + else + HasFullscreenDeviceCombo = true; + } + windowedRadioButton.Enabled = HasWindowedDeviceCombo; + fullscreenRadioButton.Enabled = HasFullscreenDeviceCombo; + if (settings.IsWindowed && HasWindowedDeviceCombo) { + windowedRadioButton.Checked = true; + } + else { + fullscreenRadioButton.Checked = true; + } + WindowedFullscreenChanged(null, null); + } + + + + + /// + /// Respond to a change of windowed/fullscreen state by rebuilding the + /// adapter format list, resolution list, and refresh rate list. + /// Updating the selected adapter format will trigger updates of the + /// rest of the dialog. + /// + private void WindowedFullscreenChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + if (windowedRadioButton.Checked) { + settings.IsWindowed = true; + settings.WindowedAdapterInfo = adapterInfo; + settings.WindowedDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + adapterFormatComboBox.Items.Add(settings.WindowedDisplayMode.Format); + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = false; + + // Update resolution combo box + resolutionComboBox.Items.Clear(); + resolutionComboBox.Items.Add(FormatResolution(settings.WindowedDisplayMode.Width, + settings.WindowedDisplayMode.Height)); + resolutionComboBox.SelectedIndex = 0; + resolutionComboBox.Enabled = false; + + // Update refresh rate combo box + refreshRateComboBox.Items.Clear(); + refreshRateComboBox.Items.Add(FormatRefreshRate(settings.WindowedDisplayMode.RefreshRate)); + refreshRateComboBox.SelectedIndex = 0; + refreshRateComboBox.Enabled = false; + } + else { + settings.IsWindowed = false; + settings.FullscreenAdapterInfo = adapterInfo; + settings.FullscreenDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + continue; + if (!adapterFormatComboBox.Items.Contains(deviceCombo.AdapterFormat)) { + adapterFormatComboBox.Items.Add(deviceCombo.AdapterFormat); + if (deviceCombo.AdapterFormat == (settings.IsWindowed ? + settings.WindowedDisplayMode.Format : settings.FullscreenDisplayMode.Format)) { + adapterFormatComboBox.SelectedItem = deviceCombo.AdapterFormat; + } + } + } + if (adapterFormatComboBox.SelectedItem == null && adapterFormatComboBox.Items.Count > 0) + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = true; + + // Update resolution combo box + resolutionComboBox.Enabled = true; + + // Update refresh rate combo box + refreshRateComboBox.Enabled = true; + } + } + + + + + /// + /// Converts the given width and height into a formatted string + /// + private string FormatResolution(int width, int height) { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} by {1}", width, height); + return sb.ToString(); + } + + + + + /// + /// Converts the given refresh rate into a formatted string + /// + private string FormatRefreshRate(int refreshRate) { + if (refreshRate == 0) { + return "Default Rate"; + } + else { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} Hz", refreshRate); + return sb.ToString(); + } + } + + + + + /// + /// Respond to a change of selected adapter format by rebuilding the + /// resolution list and back buffer format list. Updating the selected + /// resolution and back buffer format will trigger updates of the rest + /// of the dialog. + /// + private void AdapterFormatChanged(object sender, System.EventArgs e) { + if (!windowedRadioButton.Checked) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + settings.FullscreenDisplayMode.Format = adapterFormat; + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + + resolutionComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat) { + string resolutionString = FormatResolution(displayMode.Width, displayMode.Height); + if (!resolutionComboBox.Items.Contains(resolutionString)) { + resolutionComboBox.Items.Add(resolutionString); + if (settings.FullscreenDisplayMode.Width == displayMode.Width && + settings.FullscreenDisplayMode.Height == displayMode.Height) { + resolutionComboBox.SelectedItem = resolutionString; + } + } + } + } + if (resolutionComboBox.SelectedItem == null && resolutionComboBox.Items.Count > 0) + resolutionComboBox.SelectedIndex = 0; + } + + // Update backbuffer format combo box + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + backBufferFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == settings.DisplayMode.Format) { + if (!backBufferFormatComboBox.Items.Contains(deviceCombo.BackBufferFormat)) { + backBufferFormatComboBox.Items.Add(deviceCombo.BackBufferFormat); + if (deviceCombo.BackBufferFormat == settings.BackBufferFormat) + backBufferFormatComboBox.SelectedItem = deviceCombo.BackBufferFormat; + } + } + } + if (backBufferFormatComboBox.SelectedItem == null && backBufferFormatComboBox.Items.Count > 0) + backBufferFormatComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected resolution by rebuilding the + /// refresh rate list. + /// + private void ResolutionChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + + // Update settings with new resolution + string resolution = (string)resolutionComboBox.SelectedItem; + string[] resolutionSplitStringArray = resolution.Split(); + int width = int.Parse(resolutionSplitStringArray[0]); + int height = int.Parse(resolutionSplitStringArray[2]); + settings.FullscreenDisplayMode.Width = width; + settings.FullscreenDisplayMode.Height = height; + + // Update refresh rate list based on new resolution + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + refreshRateComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat && + displayMode.Width == width && + displayMode.Height == height) { + string refreshRateString = FormatRefreshRate(displayMode.RefreshRate); + if (!refreshRateComboBox.Items.Contains(refreshRateString)) { + refreshRateComboBox.Items.Add(refreshRateString); + if (settings.FullscreenDisplayMode.RefreshRate == displayMode.RefreshRate) + refreshRateComboBox.SelectedItem = refreshRateString; + } + } + } + if (refreshRateComboBox.SelectedItem == null && refreshRateComboBox.Items.Count > 0) + refreshRateComboBox.SelectedIndex = refreshRateComboBox.Items.Count - 1; + } + + + + + /// + /// Respond to a change of selected refresh rate. + /// + private void RefreshRateChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + // Update settings with new refresh rate + string refreshRateString = (string)refreshRateComboBox.SelectedItem; + int refreshRate = 0; + if (refreshRateString != "Default Rate") { + string[] refreshRateSplitStringArray = refreshRateString.Split(); + refreshRate = int.Parse(refreshRateSplitStringArray[0]); + } + settings.FullscreenDisplayMode.RefreshRate = refreshRate; + } + + + + + /// + /// Respond to a change of selected back buffer format by rebuilding + /// the depth/stencil format list, multisample type list, and vertex + /// processing type list. + /// + private void BackBufferFormatChanged(object sender, System.EventArgs e) { + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + Format backBufferFormat = (Format)backBufferFormatComboBox.SelectedItem; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == adapterFormat && + deviceCombo.BackBufferFormat == backBufferFormat) { + deviceCombo.BackBufferFormat = backBufferFormat; + settings.DeviceCombo = deviceCombo; + + depthStencilBufferComboBox.Items.Clear(); + if (enumeration.AppUsesDepthBuffer) { + foreach (DepthFormat format in deviceCombo.DepthStencilFormatList) { + depthStencilBufferComboBox.Items.Add(format); + if (format == settings.DepthStencilBufferFormat) + depthStencilBufferComboBox.SelectedItem = format; + } + if (depthStencilBufferComboBox.SelectedItem == null && depthStencilBufferComboBox.Items.Count > 0) + depthStencilBufferComboBox.SelectedIndex = 0; + } + else { + depthStencilBufferComboBox.Enabled = false; + depthStencilBufferComboBox.Items.Add("(not used)"); + depthStencilBufferComboBox.SelectedIndex = 0; + } + + vertexProcComboBox.Items.Clear(); + foreach (VertexProcessingType vpt in deviceCombo.VertexProcessingTypeList) { + vertexProcComboBox.Items.Add(vpt); + if (vpt == settings.VertexProcessingType) + vertexProcComboBox.SelectedItem = vpt; + } + if (vertexProcComboBox.SelectedItem == null && vertexProcComboBox.Items.Count > 0) + vertexProcComboBox.SelectedIndex = 0; + + presentIntervalComboBox.Items.Clear(); + foreach (PresentInterval pi in deviceCombo.PresentIntervalList) { + presentIntervalComboBox.Items.Add(pi); + if (pi == settings.PresentInterval) + presentIntervalComboBox.SelectedItem = pi; + } + if (presentIntervalComboBox.SelectedItem == null && presentIntervalComboBox.Items.Count > 0) + presentIntervalComboBox.SelectedIndex = 0; + + break; + } + } + } + + + + + /// + /// Respond to a change of selected depth/stencil buffer format. + /// + private void DepthStencilBufferFormatChanged(object sender, System.EventArgs e) { + if (enumeration.AppUsesDepthBuffer) + settings.DepthStencilBufferFormat = (DepthFormat)depthStencilBufferComboBox.SelectedItem; + + multisampleComboBox.Items.Clear(); + foreach (MultiSampleType msType in settings.DeviceCombo.MultiSampleTypeList) { + // Check for DS/MS conflict + bool conflictFound = false; + foreach (DepthStencilMultiSampleConflict DSMSConflict in settings.DeviceCombo.DepthStencilMultiSampleConflictList) { + if (DSMSConflict.DepthStencilFormat == settings.DepthStencilBufferFormat && + DSMSConflict.MultiSampleType == msType) { + conflictFound = true; + break; + } + } + if (!conflictFound) { + multisampleComboBox.Items.Add(msType); + if (msType == settings.MultisampleType) + multisampleComboBox.SelectedItem = msType; + } + } + if (multisampleComboBox.SelectedItem == null && multisampleComboBox.Items.Count > 0) + multisampleComboBox.SelectedIndex = 0; + + } + + + + + /// + /// Respond to a change of selected multisample type. + /// + private void MultisampleTypeChanged(object sender, System.EventArgs e) { + settings.MultisampleType = (MultiSampleType)multisampleComboBox.SelectedItem; + + // Find current max multisample quality + int maxQuality = 0; + DeviceCombo deviceCombo = settings.DeviceCombo; + for (int i = 0; i < deviceCombo.MultiSampleQualityList.Count; i++) { + if ((MultiSampleType)deviceCombo.MultiSampleTypeList[i] == settings.MultisampleType) { + maxQuality = (int)deviceCombo.MultiSampleQualityList[i]; + break; + } + } + + // Update multisample quality list based on new type + multisampleQualityComboBox.Items.Clear(); + for (int iLevel = 0; iLevel < maxQuality; iLevel++) { + multisampleQualityComboBox.Items.Add(iLevel); + if (settings.MultisampleQuality == iLevel) + multisampleQualityComboBox.SelectedItem = iLevel; + } + if (multisampleQualityComboBox.SelectedItem == null && multisampleQualityComboBox.Items.Count > 0) + multisampleQualityComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected multisample quality. + /// + private void MultisampleQualityChanged(object sender, System.EventArgs e) { + settings.MultisampleQuality = (int)multisampleQualityComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void VertexProcessingChanged(object sender, System.EventArgs e) { + settings.VertexProcessingType = (VertexProcessingType)vertexProcComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void PresentIntervalChanged(object sender, System.EventArgs e) { + settings.PresentInterval = (PresentInterval)presentIntervalComboBox.SelectedItem; + } +} + + +/// +/// Current D3D settings: adapter, device, mode, formats, etc. +/// +public class D3DSettings { + public bool IsWindowed; + + public GraphicsAdapterInfo WindowedAdapterInfo; + public GraphicsDeviceInfo WindowedDeviceInfo; + public DeviceCombo WindowedDeviceCombo; + public DisplayMode WindowedDisplayMode; // not changable by the user + public DepthFormat WindowedDepthStencilBufferFormat; + public MultiSampleType WindowedMultisampleType; + public int WindowedMultisampleQuality; + public VertexProcessingType WindowedVertexProcessingType; + public PresentInterval WindowedPresentInterval; + public int WindowedWidth; + public int WindowedHeight; + + public GraphicsAdapterInfo FullscreenAdapterInfo; + public GraphicsDeviceInfo FullscreenDeviceInfo; + public DeviceCombo FullscreenDeviceCombo; + public DisplayMode FullscreenDisplayMode; // changable by the user + public DepthFormat FullscreenDepthStencilBufferFormat; + public MultiSampleType FullscreenMultisampleType; + public int FullscreenMultisampleQuality; + public VertexProcessingType FullscreenVertexProcessingType; + public PresentInterval FullscreenPresentInterval; + + + + + /// + /// The adapter information + /// + public GraphicsAdapterInfo AdapterInfo { + get { return IsWindowed ? WindowedAdapterInfo : FullscreenAdapterInfo; } + set { if (IsWindowed) WindowedAdapterInfo = value; else FullscreenAdapterInfo = value; } + } + + + + + /// + /// The device information + /// + public GraphicsDeviceInfo DeviceInfo { + get { return IsWindowed ? WindowedDeviceInfo : FullscreenDeviceInfo; } + set { if (IsWindowed) WindowedDeviceInfo = value; else FullscreenDeviceInfo = value; } + } + + + + + /// + /// The device combo + /// + public DeviceCombo DeviceCombo { + get { return IsWindowed ? WindowedDeviceCombo : FullscreenDeviceCombo; } + set { if (IsWindowed) WindowedDeviceCombo = value; else FullscreenDeviceCombo = value; } + } + + + + + /// + /// The adapters ordinal + /// + public int AdapterOrdinal { + get { return DeviceCombo.AdapterOrdinal; } + } + + + + + /// + /// The type of device this is + /// + public DeviceType DevType { + get { return DeviceCombo.DevType; } + } + + + + + /// + /// The back buffers format + /// + public Format BackBufferFormat { + get { return DeviceCombo.BackBufferFormat; } + } + + + + + /// + /// The display mode + /// + public DisplayMode DisplayMode { + get { return IsWindowed ? WindowedDisplayMode : FullscreenDisplayMode; } + set { if (IsWindowed) WindowedDisplayMode = value; else FullscreenDisplayMode = value; } + } + + + + + /// + /// The Depth stencils format + /// + public DepthFormat DepthStencilBufferFormat { + get { return IsWindowed ? WindowedDepthStencilBufferFormat : FullscreenDepthStencilBufferFormat; } + set { if (IsWindowed) WindowedDepthStencilBufferFormat = value; else FullscreenDepthStencilBufferFormat = value; } + } + + + + + /// + /// The multisample type + /// + public MultiSampleType MultisampleType { + get { return IsWindowed ? WindowedMultisampleType : FullscreenMultisampleType; } + set { if (IsWindowed) WindowedMultisampleType = value; else FullscreenMultisampleType = value; } + } + + + + + /// + /// The multisample quality + /// + public int MultisampleQuality { + get { return IsWindowed ? WindowedMultisampleQuality : FullscreenMultisampleQuality; } + set { if (IsWindowed) WindowedMultisampleQuality = value; else FullscreenMultisampleQuality = value; } + } + + + + + /// + /// The vertex processing type + /// + public VertexProcessingType VertexProcessingType { + get { return IsWindowed ? WindowedVertexProcessingType : FullscreenVertexProcessingType; } + set { if (IsWindowed) WindowedVertexProcessingType = value; else FullscreenVertexProcessingType = value; } + } + + + + + /// + /// The presentation interval + /// + public PresentInterval PresentInterval { + get { return IsWindowed ? WindowedPresentInterval : FullscreenPresentInterval; } + set { if (IsWindowed) WindowedPresentInterval = value; else FullscreenPresentInterval = value; } + } + + + + + /// + /// Clone the d3d settings class + /// + public D3DSettings Clone() { + return (D3DSettings)MemberwiseClone(); + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/D3DSettingsForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step09/D3DSettingsForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/D3DSettingsForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect.cs new file mode 100644 index 0000000..e0e11ae --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect.cs @@ -0,0 +1,254 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; +using System.Runtime.InteropServices; + + + + +/// +/// The connection wizard will allow our users to pick a service provider, +/// and then connect to an existing application, or create a new one as the host. +/// +public class ConnectWizard { + private Peer peerObject; + private Address deviceAddress; + + private ChooseServiceProviderForm serviceProviderForm; + private CreateJoinForm createJoinForm; + + private Guid serviceProviderGuid; + private string username; + private string samplename; + private bool isInSession = false; + private bool isHost = false; + private int port = 0; + + private Guid applicationGuid; + + + + + /// + /// Constructor + /// + /// + /// + /// + public ConnectWizard(Peer peer, Guid application, string sampleName) { + peerObject = peer; + applicationGuid = application; + samplename = sampleName; + } + + + + + /// + /// The guid for the current service provider + /// + public Guid ServiceProvider { + get { + return serviceProviderGuid; } + set { + serviceProviderGuid = value; } + } + + + + + /// + /// The game's default port number + /// + public int DefaultPort { + get { + return port; } + set { + port = value; } + } + + + + + /// + /// Am I the host + /// + public bool IsHost { + get { + return isHost; } + set { + isHost = value; } + } + + + + + /// + /// The username + /// + public string Username { + get { + return username; } + set { + username = value; } + } + + + + + /// + /// The sample name + /// + public string SampleName { + get { + return samplename; } + } + + + + + /// + /// The applications guid + /// + public Guid ApplicationGuid { + get { + return applicationGuid; } + } + + + + + /// + /// Are we in a session + /// + public bool InSession { + get { return isInSession; } + set { isInSession = value; } + } + + + + + /// + /// Returns true if the given provider requires a port component + /// + /// ServiceProvider Guid + /// + static public bool ProviderRequiresPort(Guid provider) { + return (provider != Address.ServiceProviderSerial && + provider != Address.ServiceProviderModem && + provider != Address.ServiceProviderBlueTooth); + } + + + + + /// + /// Handler for when our form is disposed + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createJoinForm) + createJoinForm = null; + + if (sender == serviceProviderForm) + serviceProviderForm = null; + } + + + + + /// + /// Set the user information + /// + public void SetUserInfo() { + //Before we call host, let's actually call SetPeerInformation + PlayerInformation myinformation = new PlayerInformation(); + myinformation.Name = username; + + peerObject.SetPeerInformation(myinformation, SyncFlags.PeerInformation); + } + + + + + /// + /// Show the service providers form + /// + /// True if a service provider was picked, false otherwise + public bool DoShowServiceProviders() { + if (serviceProviderForm == null) { + username = null; + serviceProviderForm = new ChooseServiceProviderForm(peerObject,this); + serviceProviderForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (serviceProviderForm.ShowDialog() == DialogResult.OK) + return true; + + // The didn't hit ok + return false; + } + + + + + /// + /// Show the create or join screen + /// + /// True if we will be in a session, false otherwise + public bool DoCreateJoinGame() { + if (deviceAddress != null) + deviceAddress.Dispose(); + + deviceAddress = new Address(); + + if (createJoinForm != null) + createJoinForm.Dispose(); + + createJoinForm = new CreateJoinForm(peerObject, deviceAddress, this); + createJoinForm.Disposed += new System.EventHandler(this.FormDisposed); + + //Set the address's service provider (this will be the device address) + deviceAddress.ServiceProvider = serviceProviderGuid; + DialogResult drCreateJoin = createJoinForm.ShowDialog(); + if (drCreateJoin == DialogResult.Cancel) + return false; + + this.isHost = (drCreateJoin == DialogResult.Yes); + return true; + + } + + + + + /// + /// Start the wizard + /// + /// True if we are in a session, false otherwise + public bool StartWizard() { + isInSession = false; + + while (this.DoShowServiceProviders()) { + //Now let's create a game or join a session + if (this.DoCreateJoinGame()) { + // A game has been created or joined now, set our flag + isInSession = true; + break; + } + } + return isInSession; + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_AddressForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_AddressForm.cs new file mode 100644 index 0000000..bdf380d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_AddressForm.cs @@ -0,0 +1,207 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_AddressForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// Summary description for AddressForm. +/// +public class AddressForm : System.Windows.Forms.Form { + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox hostnameTextBox; + private System.Windows.Forms.TextBox portTextBox; + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + /// + /// Constructor + /// + public AddressForm( int defaultPort ) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // Set default port value + Port = defaultPort; + } + + + + + /// + /// The remote port on which to connect + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(portTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + portTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Remote hostname + /// + public string Hostname { + get { + return hostnameTextBox.Text; } + set { + hostnameTextBox.Text = value; } + } + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.label1 = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.hostnameTextBox = new System.Windows.Forms.TextBox(); + this.portTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(248, 48); + this.label1.TabIndex = 0; + this.label1.Text = "Please enter the optional components of the remote session address. If set blank," + + " DirectPlay will attempt to search the local network."; + // + // okButton + // + this.okButton.Location = new System.Drawing.Point(104, 144); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(72, 24); + this.okButton.TabIndex = 1; + this.okButton.Text = "&OK"; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(184, 144); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(72, 24); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "&Cancel"; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(32, 80); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(100, 16); + this.label2.TabIndex = 3; + this.label2.Text = "Hostname"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(160, 80); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 16); + this.label3.TabIndex = 4; + this.label3.Text = "Port"; + // + // hostnameTextBox + // + this.hostnameTextBox.Location = new System.Drawing.Point(32, 96); + this.hostnameTextBox.Name = "hostnameTextBox"; + this.hostnameTextBox.Size = new System.Drawing.Size(120, 20); + this.hostnameTextBox.TabIndex = 5; + this.hostnameTextBox.Text = ""; + // + // portTextBox + // + this.portTextBox.Location = new System.Drawing.Point(160, 96); + this.portTextBox.Name = "portTextBox"; + this.portTextBox.Size = new System.Drawing.Size(56, 20); + this.portTextBox.TabIndex = 6; + this.portTextBox.Text = "2580"; + // + // AddressForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(264, 176); + this.Controls.Add(this.portTextBox); + this.Controls.Add(this.hostnameTextBox); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.okButton); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AddressForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Remote Address"; + this.ResumeLayout(false); + + } + #endregion + + private void okButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.OK; + } + + private void cancelButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.Cancel; + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_AddressForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_AddressForm.resx new file mode 100644 index 0000000..a899c39 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_AddressForm.resx @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + AddressForm + + + 8, 8 + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_CreateForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_CreateForm.cs new file mode 100644 index 0000000..72e8505 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_CreateForm.cs @@ -0,0 +1,346 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_CreateForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will allow you to create a new session, and set certain properties +/// of the session. +/// +public class CreateSessionForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.TextBox txtSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton notSignedRadio; + private System.Windows.Forms.RadioButton fullSignedRadio; + private System.Windows.Forms.RadioButton fastSignedRadio; + private System.Windows.Forms.CheckBox migrateHostCheckBox; + private System.Windows.Forms.CheckBox useDPNSVRCheckBox; + private System.Windows.Forms.TextBox localPortTextBox; + private System.Windows.Forms.Label localPortLabel; + private System.Windows.Forms.Button btnCancel; + + + + /// + /// Constructor + /// + public CreateSessionForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + peer = peerObject; + this.connectionWizard = connectionWizard; + deviceAddress = addressObject; + txtSession.Text = null; + this.Text = connectionWizard.SampleName + " - " + this.Text; + //Get the default session from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + // Get session name + txtSession.Text = (string)regKey.GetValue("DirectPlaySessionName", null); + + // Get host migration option + if (regKey.GetValue("DirectPlayMigrateHost",null) != null) { + migrateHostCheckBox.Checked = ((int)regKey.GetValue("DirectPlayMigrateHost",1)==1); + } + + + // Get session signing option + if (regKey.GetValue("DirectPlaySessionSigning",null) != null) { + if ("Full" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fullSignedRadio.Checked = true; + else if ("Fast" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fastSignedRadio.Checked = true; + else + notSignedRadio.Checked = true; + } + + regKey.Close(); + } + + // Set default port value and hide port UI if provider doesn't use them + Port = connectionWizard.DefaultPort; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + localPortTextBox.Hide(); + localPortLabel.Hide(); + } + } + + + + /// + /// The port on which to host + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(localPortTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + localPortTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.txtSession = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.fullSignedRadio = new System.Windows.Forms.RadioButton(); + this.fastSignedRadio = new System.Windows.Forms.RadioButton(); + this.notSignedRadio = new System.Windows.Forms.RadioButton(); + this.migrateHostCheckBox = new System.Windows.Forms.CheckBox(); + this.useDPNSVRCheckBox = new System.Windows.Forms.CheckBox(); + this.localPortLabel = new System.Windows.Forms.Label(); + this.localPortTextBox = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // txtSession + // + this.txtSession.Location = new System.Drawing.Point(96, 24); + this.txtSession.Name = "txtSession"; + this.txtSession.Size = new System.Drawing.Size(176, 20); + this.txtSession.TabIndex = 3; + this.txtSession.Text = "SpaceWar"; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(288, 12); + this.label1.TabIndex = 2; + this.label1.Text = "Session Name:"; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(128, 168); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(208, 168); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.fullSignedRadio); + this.groupBox1.Controls.Add(this.fastSignedRadio); + this.groupBox1.Controls.Add(this.notSignedRadio); + this.groupBox1.Location = new System.Drawing.Point(16, 64); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(112, 88); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Session Signing"; + this.groupBox1.Visible = false; + // + // fullSignedRadio + // + this.fullSignedRadio.Location = new System.Drawing.Point(18, 22); + this.fullSignedRadio.Name = "fullSignedRadio"; + this.fullSignedRadio.Size = new System.Drawing.Size(80, 16); + this.fullSignedRadio.TabIndex = 9; + this.fullSignedRadio.Text = "Full signed"; + // + // fastSignedRadio + // + this.fastSignedRadio.Checked = true; + this.fastSignedRadio.Location = new System.Drawing.Point(18, 41); + this.fastSignedRadio.Name = "fastSignedRadio"; + this.fastSignedRadio.Size = new System.Drawing.Size(88, 16); + this.fastSignedRadio.TabIndex = 8; + this.fastSignedRadio.TabStop = true; + this.fastSignedRadio.Text = "Fast signed"; + // + // notSignedRadio + // + this.notSignedRadio.Location = new System.Drawing.Point(18, 55); + this.notSignedRadio.Name = "notSignedRadio"; + this.notSignedRadio.Size = new System.Drawing.Size(72, 24); + this.notSignedRadio.TabIndex = 10; + this.notSignedRadio.Text = "Disabled"; + // + // migrateHostCheckBox + // + this.migrateHostCheckBox.Location = new System.Drawing.Point(144, 64); + this.migrateHostCheckBox.Name = "migrateHostCheckBox"; + this.migrateHostCheckBox.Size = new System.Drawing.Size(136, 24); + this.migrateHostCheckBox.TabIndex = 11; + this.migrateHostCheckBox.Text = "Enable Host Migration"; + this.migrateHostCheckBox.Visible = false; + // + // useDPNSVRCheckBox + // + this.useDPNSVRCheckBox.Location = new System.Drawing.Point(144, 84); + this.useDPNSVRCheckBox.Name = "useDPNSVRCheckBox"; + this.useDPNSVRCheckBox.Size = new System.Drawing.Size(136, 24); + this.useDPNSVRCheckBox.TabIndex = 12; + this.useDPNSVRCheckBox.Text = "Use DPNSVR"; + this.useDPNSVRCheckBox.Visible = false; + // + // localPortLabel + // + this.localPortLabel.Location = new System.Drawing.Point(152, 122); + this.localPortLabel.Name = "localPortLabel"; + this.localPortLabel.Size = new System.Drawing.Size(64, 17); + this.localPortLabel.TabIndex = 13; + this.localPortLabel.Text = "Local Port:"; + // + // localPortTextBox + // + this.localPortTextBox.Location = new System.Drawing.Point(216, 120); + this.localPortTextBox.Name = "localPortTextBox"; + this.localPortTextBox.Size = new System.Drawing.Size(56, 20); + this.localPortTextBox.TabIndex = 14; + this.localPortTextBox.Text = "2580"; + // + // CreateSessionForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(290, 200); + this.ControlBox = false; + this.Controls.Add(this.localPortTextBox); + this.Controls.Add(this.localPortLabel); + this.Controls.Add(this.useDPNSVRCheckBox); + this.Controls.Add(this.migrateHostCheckBox); + this.Controls.Add(this.txtSession); + this.Controls.Add(this.label1); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.btnCancel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.HelpButton = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateSessionForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Create a Session"; + this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.CreateSessionForm_HelpRequested); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// We are ready to create a session. Ensure the data is valid + /// then create the session + /// + private void btnOK_Click(object sender, System.EventArgs e) { + ApplicationDescription dpApp; + if ((txtSession.Text == null) || (txtSession.Text == "")) { + MessageBox.Show(this,"Please enter a session name before clicking OK.","No sessionname",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlaySessionName", txtSession.Text); + if (migrateHostCheckBox.Checked) + regKey.SetValue("DirectPlayMigrateHost",1); + else + regKey.SetValue("DirectPlayMigrateHost",0); + + if (fastSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Fast"); + else if (fullSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Full"); + else + regKey.SetValue("DirectPlaySessionSigning","Disabled"); + regKey.Close(); + } + + dpApp = new ApplicationDescription(); + dpApp.GuidApplication = connectionWizard.ApplicationGuid; + dpApp.SessionName = txtSession.Text; + dpApp.Flags = 0; + dpApp.MaxPlayers = 2; + + if (migrateHostCheckBox.Checked) + dpApp.Flags |= SessionFlags.MigrateHost; + + if (!useDPNSVRCheckBox.Checked) + dpApp.Flags |= SessionFlags.NoDpnServer; + + if (fastSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FastSigned; + else if (fullSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FullSigned; + + // Specify the port number if available + if (ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + if (Port > 0) + deviceAddress.AddComponent(Address.KeyPort, Port); + } + + connectionWizard.SetUserInfo(); + // Host a game on deviceAddress as described by dpApp + // HostFlags.OkToQueryForAddressing allows DirectPlay to prompt the user + // using a dialog box for any device address information that is missing + peer.Host(dpApp,deviceAddress,HostFlags.OkToQueryForAddressing); + this.DialogResult = DialogResult.OK; + } + + private void CreateSessionForm_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent) { + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_CreateForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_CreateForm.resx new file mode 100644 index 0000000..3e4ebdd --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_CreateForm.resx @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Private + + + Private + + + False + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + CreateSessionForm + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_JoinForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_JoinForm.cs new file mode 100644 index 0000000..a86efa7 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_JoinForm.cs @@ -0,0 +1,481 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_JoinForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will search for existing running samples and allow you to join them or will +/// allow you to create your own session as a host +/// +public class CreateJoinForm : System.Windows.Forms.Form { + private const int EnumExpireThreshold = 2000; + private bool amJoining = false; + + + + + /// + /// Hold our information of hosts we found + /// + private struct FindHostsResponseInformation { + public int LastFoundTime; + public ApplicationDescription ApplicationDesc; + public int RoundTripLatencyMs; + public Address sender; + public Address device; + public override string ToString() { + if (ApplicationDesc.MaxPlayers > 0) + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + "/" + ApplicationDesc.MaxPlayers + ") (" + RoundTripLatencyMs + "ms)"; + else + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + ") (" + RoundTripLatencyMs + "ms)"; + } + }; + + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + private Address hostAddress = null; + private bool isSearching = false; + private int findHostHandle = 0; + private CreateSessionForm createSessionForm = null; + private ResultCode resultCode; + private ArrayList foundHosts = new ArrayList(); + private bool isConnected = false; + private ManualResetEvent connectEvent = null; + private System.Timers.Timer updateListTimer = null; + private System.Timers.Timer connectTimer = null; + + private System.Windows.Forms.ListBox lstSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnSearch; + private System.Windows.Forms.Button btnJoin; + private System.Windows.Forms.Button btnCreate; + + + + + /// + /// Constructor + /// + public CreateJoinForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + deviceAddress = addressObject; + + //Set up the event handlers + peer.FindHostResponse += new FindHostResponseEventHandler(FindHostResponseMessage); + peer.ConnectComplete += new ConnectCompleteEventHandler(ConnectResult); + peer.AsyncOperationComplete += new AsyncOperationCompleteEventHandler(CancelAsync); + + //Set up our timer + updateListTimer = new System.Timers.Timer(300); // A 300 ms interval + updateListTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.UpdateTimer); + updateListTimer.SynchronizingObject = this; + updateListTimer.Start(); + //Set up our connect timer + connectTimer = new System.Timers.Timer(100); // A 100ms interval + connectTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.ConnectTimer); + connectTimer.SynchronizingObject = this; + // Set up our connect event + connectEvent = new ManualResetEvent(false); + + } + + + + + /// + /// An asynchronous operation was cancelled + /// + private void CancelAsync(object sender, AsyncOperationCompleteEventArgs e) { + if (e.Message.AsyncOperationHandle == findHostHandle) { + findHostHandle = 0; + btnSearch.Text = "Start Search"; + isSearching = false; + btnCreate.Enabled = true; + btnSearch.Enabled = true; + } + } + + + + + /// + /// A host was found and responded to our query + /// + private void FindHostResponseMessage(object sender, FindHostResponseEventArgs dpMessage) { + // Now we need to add this to our list of available sessions + SessionAdd(dpMessage.Message); + } + + + + + /// + /// Add this session to our list + /// + /// + private void SessionAdd(FindHostsResponseMessage dpMessage) { + FindHostsResponseInformation dpInfo = new FindHostsResponseInformation(); + + dpInfo.ApplicationDesc = dpMessage.ApplicationDescription; + dpInfo.device = dpMessage.AddressDevice; + dpInfo.sender = dpMessage.AddressSender; + dpInfo.RoundTripLatencyMs = dpMessage.RoundTripLatencyMs; + dpInfo.LastFoundTime = Environment.TickCount; + + // Let's check the items first and see if this one already exists + bool isFound = false; + + lock (foundHosts) { + for (int i = 0; i < lstSession.Items.Count; i++) { + if (dpInfo.ApplicationDesc.GuidInstance == ((FindHostsResponseInformation)lstSession.Items[i]).ApplicationDesc.GuidInstance) { + foundHosts[i] = dpInfo; + lstSession.Items[i] = dpInfo; + isFound = true; + } + } + if (!isFound) { + lstSession.Items.Add(dpInfo); + foundHosts.Add(dpInfo); + } + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + + if (isSearching) { + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + isSearching = !isSearching; + } + if (connectTimer != null) + connectTimer.Dispose(); + + if (updateListTimer != null) + updateListTimer.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.btnJoin = new System.Windows.Forms.Button(); + this.lstSession = new System.Windows.Forms.ListBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnCreate = new System.Windows.Forms.Button(); + this.btnSearch = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnJoin + // + this.btnJoin.Enabled = false; + this.btnJoin.Location = new System.Drawing.Point(7, 227); + this.btnJoin.Name = "btnJoin"; + this.btnJoin.Size = new System.Drawing.Size(74, 27); + this.btnJoin.TabIndex = 2; + this.btnJoin.Text = "Join"; + this.btnJoin.Click += new System.EventHandler(this.btnJoin_Click); + // + // lstSession + // + this.lstSession.Location = new System.Drawing.Point(5, 37); + this.lstSession.Name = "lstSession"; + this.lstSession.Size = new System.Drawing.Size(400, 186); + this.lstSession.TabIndex = 1; + this.lstSession.DoubleClick += new System.EventHandler(this.btnJoin_Click); + this.lstSession.SelectedValueChanged += new System.EventHandler(this.SelectedChange); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(5, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(312, 16); + this.label1.TabIndex = 0; + this.label1.Text = "Select session to join, or click Create to start a new session."; + // + // btnCreate + // + this.btnCreate.DialogResult = System.Windows.Forms.DialogResult.Yes; + this.btnCreate.Location = new System.Drawing.Point(84, 227); + this.btnCreate.Name = "btnCreate"; + this.btnCreate.Size = new System.Drawing.Size(74, 27); + this.btnCreate.TabIndex = 2; + this.btnCreate.Text = "Create"; + this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click); + // + // btnSearch + // + this.btnSearch.Location = new System.Drawing.Point(319, 7); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(86, 27); + this.btnSearch.TabIndex = 2; + this.btnSearch.Text = "Start Search"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(333, 227); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + // + // CreateJoinForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(411, 264); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.btnCreate, + this.btnJoin, + this.btnSearch, + this.btnCancel, + this.lstSession, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateJoinForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Join or create a session"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// The selected session was changed. + /// + private void SelectedChange(object sender, System.EventArgs e) { + if (amJoining) + return; // Do nothing if we are already joining a session + + btnJoin.Enabled = (lstSession.SelectedItem != null); + } + + + + + /// + /// We either want to start or stop searching + /// + private void btnSearch_Click(object sender, System.EventArgs e) { + if (!isSearching) { + if( hostAddress != null ) + hostAddress.Dispose(); + + hostAddress = new Address(); + hostAddress.ServiceProvider = deviceAddress.ServiceProvider; + + // See if we should prompt the user for the remote address + if (ConnectWizard.ProviderRequiresPort(hostAddress.ServiceProvider)) { + AddressForm addressDialog = new AddressForm(connectionWizard.DefaultPort); + addressDialog.ShowDialog(this); + + // If the user cancelled the address form, abort the search + if (addressDialog.DialogResult != DialogResult.OK) + return; + + // If a port was specified, add the component + if (addressDialog.Hostname != "") + hostAddress.AddComponent(Address.KeyHostname, addressDialog.Hostname); + + // If a hostname was specified, add the component + if (addressDialog.Port > 0) + hostAddress.AddComponent(Address.KeyPort, addressDialog.Port); + } + + //Time to enum our hosts + ApplicationDescription desc = new ApplicationDescription(); + desc.GuidApplication = connectionWizard.ApplicationGuid; + + // If the user was not already asked for address information, DirectPlay + // should prompt with native UI + FindHostsFlags flags = 0; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + flags = FindHostsFlags.OkToQueryForAddressing; + + peer.FindHosts(desc,hostAddress,deviceAddress,null,Timeout.Infinite,0,Timeout.Infinite, flags, out findHostHandle); + isSearching = true; + btnCreate.Enabled = false; + btnSearch.Text = "Stop Search"; + } + else { + btnSearch.Text = "Stopping..."; + btnSearch.Enabled = false; + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + } + } + + + + + /// + /// A form was disposed + /// + /// + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createSessionForm) + createSessionForm = null; + } + + + + + /// + /// We should create a new session. Display a dialog allowing the user to set + /// certain options + /// + private void btnCreate_Click(object sender, System.EventArgs e) { + this.DialogResult = DialogResult.None; + ((Button)sender).DialogResult = DialogResult.None; + if (createSessionForm == null) { + createSessionForm = new CreateSessionForm(peer,deviceAddress,connectionWizard); + createSessionForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (createSessionForm.ShowDialog(this) != DialogResult.Cancel) { + ((Button)sender).DialogResult = DialogResult.Yes; + this.DialogResult = DialogResult.Yes; + } + } + + + + + /// + /// Determine if we need to expire any of our currently listed servers + /// + private void UpdateTimer(object sender, System.Timers.ElapsedEventArgs e) { + lock (foundHosts) { + for (int i = 0; i< foundHosts.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)foundHosts[i]).LastFoundTime > EnumExpireThreshold) { + foundHosts.RemoveAt(i); + break; + } + } + for (int i = 0; i< lstSession.Items.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)lstSession.Items[i]).LastFoundTime > EnumExpireThreshold) { + lstSession.Items.RemoveAt(i); + break; + } + } + } + } + + + + + /// + /// Wait for a connect to complete + /// + private void ConnectTimer(object sender, System.Timers.ElapsedEventArgs e) { + if (connectEvent.WaitOne(0,false)) { // Wait for the Connect event to be fired + if (isConnected) { // Are we connected? + // Get rid of the timer + if (updateListTimer != null) + updateListTimer.Stop(); + + if (connectTimer != null) + connectTimer.Stop(); + + this.DialogResult = DialogResult.OK; + this.Close(); + return; + } + else { + MessageBox.Show(this,"Failed to connect. The error code was: \n" + resultCode.ToString() ,"Failed to connect",MessageBoxButtons.OK,MessageBoxIcon.Information); + // Restart our timer + updateListTimer.Start(); + } + } + } + + + + + /// + /// Fired when a connect complete message is received from DirectPlay. Fire + /// our event to notify the sample we've connected + /// + private void ConnectResult(object sender, ConnectCompleteEventArgs e) { + if (e.Message.ResultCode == 0) { + isConnected = true; + } + else + isConnected = false; + + resultCode = e.Message.ResultCode; + // Notify the timer that we've connected. + connectEvent.Set(); + } + + + + + /// + /// Join an existing session + /// + private void btnJoin_Click(object sender, System.EventArgs e) { + FindHostsResponseInformation dpInfo; + if (lstSession.SelectedItem == null) { + MessageBox.Show(this,"Please select a session before clicking join.","No session",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + // Turn off all buttons + btnCreate.Enabled = false; + btnCancel.Enabled = false; + btnJoin.Enabled = false; + btnSearch.Enabled = false; + amJoining = true; + // Stop our secondary timer + updateListTimer.Stop(); + dpInfo = ((FindHostsResponseInformation)lstSession.SelectedItem); + connectionWizard.SetUserInfo(); + peer.Connect(dpInfo.ApplicationDesc,dpInfo.sender, dpInfo.device,null,ConnectFlags.OkToQueryForAddressing); + // Now start our 'Connect' timer + connectTimer.Start(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_JoinForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_JoinForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_JoinForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_ServiceProviderForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_ServiceProviderForm.cs new file mode 100644 index 0000000..4884d84 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_ServiceProviderForm.cs @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_ServiceProviderForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +/// +/// This form allows you to choose a service provider and username for your +/// sample +/// +public class ChooseServiceProviderForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListBox lstSP; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtUser; + private System.Windows.Forms.Button btnCancel; + + + + + /// + /// Constructor + /// + public ChooseServiceProviderForm(Peer peerObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + // Fill up our listbox with the service providers + ServiceProviderInformation[] serviceProviders = peer.GetServiceProviders(false); + foreach (ServiceProviderInformation info in serviceProviders) + lstSP.Items.Add(info); + + txtUser.Text = null; + //Get the default username from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + try { + txtUser.Text = (string)regKey.GetValue("DirectPlayUserName", null); + lstSP.SelectedIndex = (int)regKey.GetValue("DirectPlaySPIndex", 0); + regKey.Close(); + } + catch { + txtUser.Text = null; + lstSP.SelectedIndex = 0; + } + } + else + lstSP.SelectedIndex = 0; + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + txtUser.Text = SystemInformation.UserName; + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.lstSP = new System.Windows.Forms.ListBox(); + this.txtUser = new System.Windows.Forms.TextBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lstSP + // + this.lstSP.Location = new System.Drawing.Point(12, 63); + this.lstSP.Name = "lstSP"; + this.lstSP.Size = new System.Drawing.Size(324, 147); + this.lstSP.TabIndex = 1; + this.lstSP.DoubleClick += new System.EventHandler(this.lstSP_DoubleClick); + // + // txtUser + // + this.txtUser.Location = new System.Drawing.Point(13, 20); + this.txtUser.MaxLength = 30; + this.txtUser.Name = "txtUser"; + this.txtUser.Size = new System.Drawing.Size(326, 20); + this.txtUser.TabIndex = 5; + this.txtUser.Text = ""; + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(181, 215); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 2; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(260, 215); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(11, 44); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(376, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Please pick your service provider:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(10, 5); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(327, 12); + this.label2.TabIndex = 4; + this.label2.Text = "User Name:"; + // + // ChooseServiceProviderForm + // + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(343, 246); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.txtUser, + this.label2, + this.btnCancel, + this.btnOK, + this.lstSP, + this.label1}); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChooseServiceProviderForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Choose Service Provider"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// They don't want to run this sample + /// + private void btnCancel_Click(object sender, System.EventArgs e) { + this.Dispose(); + } + + + + + /// + /// Same as clicking ok + /// + private void lstSP_DoubleClick(object sender, System.EventArgs e) { + // Call the ok button click handler + object[] parameters = new object[] { sender, e }; + this.BeginInvoke(new System.EventHandler(btnOK_Click), parameters); + } + + + + + /// + /// Select this username and service provider if valid, then continue the wizard + /// + private void btnOK_Click(object sender, System.EventArgs e) { + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + MessageBox.Show(this,"Please enter a username before clicking OK.","No Username",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + try { + connectionWizard.ServiceProvider = ((ServiceProviderInformation)lstSP.SelectedItem).Guid; + connectionWizard.Username = txtUser.Text; + } + catch { // We assume if we got here there was no selected item. + MessageBox.Show(this,"Please select a service provider before clicking OK.","No Service Provider",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlayUserName", txtUser.Text); + regKey.SetValue("DirectPlaySPIndex", lstSP.SelectedIndex); + regKey.Close(); + } + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_ServiceProviderForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_ServiceProviderForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/DPlayConnect_ServiceProviderForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/DXUtil.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/DXUtil.cs new file mode 100644 index 0000000..5d0f0e5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/DXUtil.cs @@ -0,0 +1,285 @@ +//----------------------------------------------------------------------------- +// File: DXUtil.cs +// +// Desc: Shortcut macros and functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.IO; +using System.Runtime.InteropServices; + + + + +/// +/// Enumeration for various actions our timer can perform +/// +public enum DirectXTimer { + Reset, + Start, + Stop, + Advance, + GetAbsoluteTime, + GetApplicationTime, + GetElapsedTime +}; + + + + +/// +/// Generic utility functions for our samples +/// +public class DXUtil { + #region Timer Internal Stuff + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceCounter(ref long PerformanceCount); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("winmm.dll")] + public static extern int timeGetTime(); + private static bool isTimerInitialized = false; + private static bool m_bUsingQPF = false; + private static bool m_bTimerStopped = true; + private static long m_llQPFTicksPerSec = 0; + private static long m_llStopTime = 0; + private static long m_llLastElapsedTime = 0; + private static long m_llBaseTime = 0; + private static double m_fLastElapsedTime = 0.0; + private static double m_fBaseTime = 0.0; + private static double m_fStopTime = 0.0; + #endregion + + // Constants for SDK Path registry keys + private const string sdkPath = "Software\\Microsoft\\DirectX SDK"; + private const string sdkKey = "DX9J3SDK Samples Path"; + + private DXUtil() { /* Private Constructor */ } + + + + + /// + /// Returns the DirectX SDK media path + /// + public static string SdkMediaPath { + get { + Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sdkPath); + string sReg = string.Empty; + if (rKey != null) { + sReg = (string)rKey.GetValue(sdkKey); + rKey.Close(); + } + if (sReg != null) + sReg += @"\Media\"; + else + return string.Empty; + + return sReg; + } + } + + + + + /// + /// Performs timer opertations. Use the following commands: + /// + /// DirectXTimer.Reset - to reset the timer + /// DirectXTimer.Start - to start the timer + /// DirectXTimer.Stop - to stop (or pause) the timer + /// DirectXTimer.Advance - to advance the timer by 0.1 seconds + /// DirectXTimer.GetAbsoluteTime - to get the absolute system time + /// DirectXTimer.GetApplicationTime - to get the current time + /// DirectXTimer.GetElapsedTime - to get the time that elapsed between TIMER_GETELAPSEDTIME calls + /// + /// + public static float Timer(DirectXTimer command) { + if (!isTimerInitialized) { + isTimerInitialized = true; + + // Use QueryPerformanceFrequency() to get frequency of timer. If QPF is + // not supported, we will timeGetTime() which returns milliseconds. + long qwTicksPerSec = 0; + m_bUsingQPF = QueryPerformanceFrequency(ref qwTicksPerSec); + if (m_bUsingQPF) + m_llQPFTicksPerSec = qwTicksPerSec; + } + if (m_bUsingQPF) { + double time; + double fElapsedTime; + long qwTime = 0; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_llStopTime != 0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + qwTime = m_llStopTime; + else + QueryPerformanceCounter(ref qwTime); + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (qwTime - m_llLastElapsedTime) / (double) m_llQPFTicksPerSec; + m_llLastElapsedTime = qwTime; + return (float)fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + double fAppTime = (double) (qwTime - m_llBaseTime) / (double) m_llQPFTicksPerSec; + return (float)fAppTime; + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_llBaseTime = qwTime; + m_llLastElapsedTime = qwTime; + m_llStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_llBaseTime += qwTime - m_llStopTime; + m_llStopTime = 0; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_llStopTime = qwTime; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_llStopTime += m_llQPFTicksPerSec/10; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + time = qwTime / (double) m_llQPFTicksPerSec; + return (float)time; + } + + return -1.0f; // Invalid command specified + } + else { + // Get the time using timeGetTime() + double time; + double fElapsedTime; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_fStopTime != 0.0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + time = m_fStopTime; + else + time = timeGetTime() * 0.001; + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (time - m_fLastElapsedTime); + m_fLastElapsedTime = time; + return (float) fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + return (float) (time - m_fBaseTime); + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_fBaseTime = time; + m_fLastElapsedTime = time; + m_fStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_fBaseTime += time - m_fStopTime; + m_fStopTime = 0.0f; + m_fLastElapsedTime = time; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_fStopTime = time; + m_fLastElapsedTime = time; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_fStopTime += 0.1f; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + return (float) time; + } + + return -1.0f; // Invalid command specified + } + } + + + + + /// + /// Returns a valid path to a DXSDK media file + /// + /// Initial path to search + /// Filename we're searching for + /// Full path to the file + public static string FindMediaFile(string path, string filename) { + // First try to load the file in the full path + if (path != null) { + if (File.Exists(AppendDirectorySeparator(path) + filename)) + return AppendDirectorySeparator(path) + filename; + } + + // if not try to find the filename in the current folder. + if (File.Exists(filename)) + return AppendDirectorySeparator(Directory.GetCurrentDirectory()) + filename; + + // last, check if the file exists in the media directory + if (File.Exists(AppendDirectorySeparator(SdkMediaPath) + filename)) + return AppendDirectorySeparator(SdkMediaPath) + filename; + + throw new FileNotFoundException("Could not find this file.", filename); + } + + + + + /// + /// Returns a valid string with a directory separator at the end. + /// + private static string AppendDirectorySeparator(string filename) { + if (!filename.EndsWith(@"\")) + return filename + @"\"; + + return filename; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/GameClass.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/GameClass.cs new file mode 100644 index 0000000..05d2ad0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/GameClass.cs @@ -0,0 +1,524 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; +using Microsoft.DirectX.DirectPlay; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public delegate void MessageDelegate(byte message); // Delegate for messages arriving via DirectPlay. +public delegate void AudioDelegate(); // Delegate to handle audio playback. +public delegate void PeerCloseCallback(); // This delegate will be called when the session terminated event is fired. + +public class GameClass : GraphicsSample { + private GraphicsFont drawingFont = null; + private Point destination = new Point(0, 0); + private InputClass input = null; + private MouseInput mouseInput = null; + + private bool networkEnabled; + private PlayClass peer = null; + private bool remotePlayerActive = false; + private string statusMessage; + private float statusMessageTimer; + private PositionedMesh spaceSphere = null; + private Ship playerShip = null; + private Ship opponentShip = null; + private HullColors hullColor = HullColors.White; + private Camera camera = null; + private CameraMode cameraMode = CameraMode.ChaseMode; + private Matrix viewMatrix; + private Vector2 screenCenter; + private Vector2 mouseLoc; + private SoundHandler soundHandler = null; + private bool kbThrust = false; + private bool cPressed = false; + private bool f5Pressed = false; + private bool f6Pressed = false; + private bool f7Pressed = false; + private bool f8Pressed = false; + private bool f9Pressed = false; + private bool f10Pressed = false; + private bool spacePressed = false; + + private Texture bgPointerTexture = null; + private Texture vectorPanel = null; + private RenderToSurface rts = null; + private Surface renderSurface = null; + private BGPointer bgPointer = null; + private int range = 0; + + private GameStates gameState; + public GameStates GameState { get { return gameState; } set { gameState = value; } } + + private string debugText; + public string DebugText { get { return debugText; } set { debugText = value; } } + private bool debugging = true; + + public GameClass(bool startFullScreen, Size size, bool enableNetwork) { + this.startFullscreen = startFullScreen; + this.Size = size; + this.networkEnabled = enableNetwork; + this.Text = "SpaceWar3D-Step09"; + statusMessageTimer = Constants.StatusMessageDisplayTime; + + drawingFont = new GraphicsFont( "Verdana", System.Drawing.FontStyle.Regular); + + input = new InputClass(this); + mouseInput = new MouseInput(this); + this.MouseMove +=new MouseEventHandler(GameClass_MouseMove); + this.Cursor = Cursors.NoMove2D; + + camera = new Camera(); + soundHandler = new SoundHandler(this); + + if (networkEnabled) { + peer = new PlayClass(this); + if (peer.IsHost) { + hullColor = HullColors.Red; + } + } + + } + + private void ProcessInput() { + //Get input + KeyboardState kbState = input.GetInputState(); + if (kbState == null) + return; + if (kbState[Key.W] || kbState[Key.Up]) { + kbThrust = true; + } + else { + kbThrust = false; + } + if (kbState[Key.C] && !cPressed) { + cPressed = true; + SelectNextCameraMode(); + } + if (!kbState[Key.C]) { + cPressed = false; + } + + if (kbState[Key.F5] && !f5Pressed) { + f5Pressed = true; + playerShip.Sounds |= Sounds.Taunt; + } + if (!kbState[Key.F5]) { + f5Pressed = false; + } + if (kbState[Key.F6] && !f6Pressed) { + f6Pressed = true; + playerShip.Sounds |= Sounds.Dude1; + } + if (!kbState[Key.F6]) { + f6Pressed = false; + } + if (kbState[Key.F7] && !f7Pressed) { + f7Pressed = true; + playerShip.Sounds |= Sounds.Dude2; + } + if (!kbState[Key.F7]) { + f7Pressed = false; + } + if (kbState[Key.F8] && !f8Pressed) { + f8Pressed = true; + playerShip.Sounds |= Sounds.Dude3; + } + if (!kbState[Key.F8]) { + f8Pressed = false; + } + if (kbState[Key.F9] && !f9Pressed) { + f9Pressed = true; + playerShip.Sounds |= Sounds.Dude4; + } + if (!kbState[Key.F9]) { + f9Pressed = false; + } + if (kbState[Key.F10] && !f10Pressed) { + f10Pressed = true; + playerShip.Sounds |= Sounds.Dude1; + } + if (!kbState[Key.F10]) { + f10Pressed = false; + } + if (kbState[Key.Space] && !spacePressed) { + spacePressed = true; + playerShip.EnterHyper(); + } + if (!kbState[Key.Space]) { + spacePressed = false; + } + } + + protected override void FrameMove() { + statusMessageTimer += elapsedTime; + + int fps = (int) framePerSecond; + debugText = "FPS: " + fps.ToString() + "\r\n"; + ProcessInput(); + MouseControlValues v = mouseInput.Values; + if (v.FireButtonPushed) + playerShip.Shoot(); + + float yawAmount = mouseLoc.X - screenCenter.X; + float pitchAmount = mouseLoc.Y - screenCenter.Y; + + playerShip.YawPitchRoll(yawAmount, pitchAmount, elapsedTime); + playerShip.SetThrust(v.ThrustButtonPushed | kbThrust, elapsedTime); + playerShip.UpdatePosition(elapsedTime); + playerShip.UpdateState(elapsedTime); + playerShip.TestShip(opponentShip); + //Send our ship update to the remote player + SendMyPlayerUpdate(); + + // If there is no remote player, fly the o ther ship around in a circle for target practice. + // Ideally, we would derive an AI controlled ship from the ship class and use it instead. + if (!remotePlayerActive) { + opponentShip.SetThrust(true, elapsedTime); + opponentShip.YawPitchRoll(250,0,elapsedTime); + opponentShip.TestShip(playerShip); + } + opponentShip.UpdatePosition(elapsedTime); + opponentShip.UpdateState(elapsedTime); + + /*Here we set up the view matrix and space dome location. The space dome moves but not rotates with the player + * and is alway drawn first, so it looks like it is infinitely distant. + * + * In chase mode, the chaseMatrix determines the offset from the ship. If you want to move our viewpoint + * back from the ship more, increase the negative z value. + * + * The fixed mode camera sits at the origin and always tracks the player ship. Very hard to control from + * this viewpoint, but cool to watch. + */ + + Vector3 spaceSphereLocation = new Vector3(0, 0, 0); + switch (cameraMode) { + case CameraMode.ChaseMode: { + Matrix chaseMatrix = Matrix.Translation(0, 6, -14); + chaseMatrix *= playerShip.Position.WorldMatrix; + viewMatrix = Matrix.Invert(chaseMatrix); + spaceSphereLocation = playerShip.Position.Location; + break; + } + case CameraMode.CockpitMode: { + viewMatrix = Matrix.Invert(playerShip.Position.WorldMatrix); + spaceSphereLocation = playerShip.Position.Location; + break; + } + case CameraMode.Fixed: { + camera.Point(0,0,0, + playerShip.Position.XPos, + playerShip.Position.YPos, + playerShip.Position.ZPos); + viewMatrix = camera.ViewMatrix; + spaceSphereLocation = new Vector3(0, 0, 0); + break; + } + } + device.Transform.View = viewMatrix; + spaceSphere.Position.Location = spaceSphereLocation; + + //rotate space very slowly for that nice twinkly star effect + spaceSphere.Position.RotateRel(-.001f * elapsedTime,-0.0001f * elapsedTime, 0); + + //Calculate range and direction to target + range = (int) Vector3.Length( + playerShip.Position.Location - opponentShip.Position.Location); + bgPointer.Point(playerShip.Position, opponentShip.Position); + + //Play the sounds + soundHandler.Play(opponentShip.Sounds | playerShip.Sounds); + opponentShip.Sounds = (Sounds) 0; + playerShip.Sounds = (Sounds) 0; + } + + + /// + /// Called once per frame, the call is the entry point for 3d rendering. This + /// function sets up render states, clears the viewport, and renders the scene. + /// + protected override void Render() { + RenderBGPointer(); + + //Clear the backbuffer to a Blue color + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + + //Set the view matrix + device.Transform.View = viewMatrix; + + //Begin the scene + device.BeginScene(); + device.RenderState.ZBufferEnable = false; + device.RenderState.Lighting = false; + spaceSphere.Render(); + device.RenderState.Lighting = true; + device.RenderState.ZBufferEnable = true; + + device.Transform.World = playerShip.Position.WorldMatrix; + playerShip.Render(); + opponentShip.Render(); + + //Render our targeting pointer + using (Sprite pointerSprite = new Sprite(device)) { + pointerSprite.Begin(SpriteFlags.AlphaBlend); + + pointerSprite.Draw(bgPointerTexture, new Rectangle(0, 0, 128, 128), + new Vector3(0, 0, 0), new Vector3(42, this.Height - 250, 0), Color.White); + pointerSprite.Transform = Matrix.Identity; + pointerSprite.Draw(vectorPanel,new Rectangle(0,0,193,173), + new Vector3(0,0,0), new Vector3(10, this.Height- 282, 0), Color.White); + + pointerSprite.End(); + } + //Output the scores + drawingFont.DrawText(5, 20, Color.Red, playerShip.HostName.ToString() + ":"); + drawingFont.DrawText(100,20,Color.Red,playerShip.Score.ToString()); + if (remotePlayerActive) { + drawingFont.DrawText(5,45,Color.White, peer.RemotePlayer.Name + ":"); + drawingFont.DrawText(100,45, Color.White, opponentShip.Score.ToString()); + } + + //Display any status messages + if (statusMessageTimer < Constants.StatusMessageDisplayTime) { + drawingFont.DrawText(200, screenCenter.Y, Color.FromArgb(200,220,220,255), statusMessage); + } + + if (debugging) { + drawingFont.DrawText(5,5,Color.Yellow,debugText); + } + device.EndScene(); + } + + private void RenderBGPointer() { + Viewport view = new Viewport(); + view.Width = 128; + view.Height = 128; + view.MaxZ = 1.0f; + + Matrix currentViewMatrix = device.Transform.View; + + rts.BeginScene(renderSurface, view); + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); + + if (playerShip.State == ShipState.Normal && + opponentShip.State == ShipState.Normal) { + Matrix pointerViewMatrix = Matrix.Translation(0, 2, -15); + pointerViewMatrix *= playerShip.Position.WorldMatrix; + device.Transform.View = Matrix.Invert(pointerViewMatrix); + + bgPointer.Render(); + drawingFont.DrawText(2,2,Color.LimeGreen, "Range: " + range.ToString()); + } + + rts.EndScene(Filter.Linear); + device.Transform.View = currentViewMatrix; + + } + + /// + /// Initialize scene objects. + /// + protected override void InitializeDeviceObjects() { + drawingFont.InitializeDeviceObjects(device); + + spaceSphere = new PositionedMesh(device, "SpaceSphere.x"); + + playerShip = new Ship(device, this, hullColor); + if (playerShip.HostName == null) + playerShip.HostName = "Player"; + playerShip.State = ShipState.Normal; + + HullColors opponentHullColor; + if (hullColor == HullColors.Red) + opponentHullColor = HullColors.White; + else + opponentHullColor = HullColors.Red; + + opponentShip = new Ship(device, this, opponentHullColor); + if (opponentShip.HostName == null) + opponentShip.HostName = "Opponent"; + opponentShip.State = ShipState.Normal; + + bgPointer = new BGPointer(device); + vectorPanel = TextureLoader.FromFile(device, MediaUtilities.FindFile("vectorPanel.png")); + + rts = new RenderToSurface(device, 128, 128, Format.X8R8G8B8, true, DepthFormat.D16); + + + } + + /// + /// Called when a device needs to be restored. + /// + protected override void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { + device.RenderState.Ambient = Color.FromArgb(150,150,150); + device.RenderState.SpecularEnable = true; + device.Lights[0].Type = LightType.Directional; + device.Lights[0].Direction = new Vector3(0,-1, -1); + device.Lights[0].Diffuse = Color.White; + device.Lights[0].Specular = Color.White; + device.Lights[0].Enabled = true; + device.RenderState.Lighting = true; + + device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, + (presentParams.BackBufferWidth/presentParams.BackBufferHeight), + 1.5f, 20000.0f ); + + device.Transform.View = camera.ViewMatrix; + + screenCenter = new Vector2( + presentParams.BackBufferWidth / 2, + presentParams.BackBufferHeight / 2); + + if (bgPointerTexture != null) + bgPointerTexture.Dispose(); + bgPointerTexture = new Texture(device, 128, 128, 1, Usage.RenderTarget, + Format.X8R8G8B8, Pool.Default); + renderSurface = bgPointerTexture.GetSurfaceLevel(0); + + gameState = GameStates.Running; + + } + + public void RemotePlayerJoined(string playerName) { + remotePlayerActive = true; + statusMessage = playerName + " has joined the game."; + statusMessageTimer = 0; + + } + + public void RemotePlayerLeft(string playerName) { + remotePlayerActive = false; + statusMessage = playerName + " has left the game."; + statusMessageTimer = 0; + } + + public void DataReceived(object sender, ReceiveEventArgs rea) { + + int senderID = rea.Message.SenderID; + + //Ignore messages received before we are initialized + if ((gameState == GameStates.Loading) || (gameState == GameStates.Config)) { + rea.Message.ReceiveData.Dispose(); + return; + } + + byte mType = (byte)rea.Message.ReceiveData.Read(typeof(byte)); + MessageType messageType = (MessageType)mType; + + switch (messageType) { + case MessageType.PlayerUpdateID: { + PlayerUpdate update = (PlayerUpdate)rea.Message.ReceiveData.Read(typeof(PlayerUpdate)); + ShotUpdate shotUpdate = new ShotUpdate(); + shotUpdate.ShotPosition = new Vector3[Constants.NumShots]; + shotUpdate.ShotAge = new float[Constants.NumShots]; + shotUpdate.ShotAlive = new bool[Constants.NumShots]; + + for (int i = 0; i < Constants.NumShots; i++) { + shotUpdate.ShotPosition[i] = (Vector3)rea.Message.ReceiveData.Read(typeof(Vector3)); + shotUpdate.ShotAge[i] = (int)rea.Message.ReceiveData.Read(typeof(int)); + shotUpdate.ShotAlive[i] = (bool)rea.Message.ReceiveData.Read(typeof(bool)); + } + + rea.Message.ReceiveData.Dispose(); + lock(opponentShip) { + opponentShip.Position.WorldMatrix = update.WorldMatrix; + opponentShip.Score = update.Score; + opponentShip.Sounds = (Sounds)update.Sounds; + opponentShip.WaitCount = update.WaitCount; + opponentShip.SetState((ShipState)update.State); + + Photon[] shotArray = opponentShip.ShotHandler.GetShotArray(); + for (int i = 0; i < Constants.NumShots; i++) { + shotArray[i].Location = shotUpdate.ShotPosition[i]; + shotArray[i].Age = shotUpdate.ShotAge[i]; + shotArray[i].Alive = shotUpdate.ShotAlive[i]; + } + opponentShip.ShotHandler.SetShotArray(shotArray); + } + + break; + } + + case MessageType.Add1ToScore: { + rea.Message.ReceiveData.Dispose(); + playerShip.Score += 1; + break; + } + + case MessageType.GamePaused: { + rea.Message.ReceiveData.Dispose(); + gameState = GameStates.Paused; + break; + } + case MessageType.GameRunning: { + rea.Message.ReceiveData.Dispose(); + if (gameState == GameStates.Paused) + gameState = GameStates.Running; + + break; + } + } + } + + public void SendPoint() { + if (!remotePlayerActive) { + playerShip.Score += 1; + return; + } + + peer.SendScorePoint(); + } + + public void SendMyPlayerUpdate() { + if (!networkEnabled) + return; + + PlayerUpdate update = new PlayerUpdate(); + update.WorldMatrix = playerShip.Position.WorldMatrix; + update.State = (int)playerShip.State; + update.WaitCount = playerShip.WaitCount; + update.DeathCount = playerShip.DeathCount; + update.Sounds = (int)playerShip.Sounds; + update.Score = playerShip.Score; + + ShotUpdate shotUpdate = new ShotUpdate(); + shotUpdate.ShotAge = new float[Constants.NumShots]; + shotUpdate.ShotPosition = new Vector3[Constants.NumShots]; + shotUpdate.ShotAlive = new bool[Constants.NumShots]; + + Photon[] shotArray = playerShip.ShotHandler.GetShotArray(); + for (int i = 0; i < Constants.NumShots; i++) { + shotUpdate.ShotPosition[i] = shotArray[i].Location; + shotUpdate.ShotAge[i] = shotArray[i].Age; + shotUpdate.ShotAlive[i] = shotArray[i].Alive; + } + peer.SendPlayerUpdate(update, shotUpdate); + } + + + + /// + // When the peer closes, the code here is executed. + /// + public void PeerClose() { + // The session was terminated, go ahead and shut down + this.Dispose(); + } + + private void SelectNextCameraMode() { + int mode = (int) cameraMode; + mode++; + if (mode > 2) + mode = 0; + cameraMode = (CameraMode) mode; + } + + private void GameClass_MouseMove(object sender, MouseEventArgs e) { + mouseLoc.X = e.X; + mouseLoc.Y = e.Y; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/GameClass.resx b/Source Code updated 08-12-05/Spacewar3D/Step09/GameClass.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/GameClass.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/GameStates.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/GameStates.cs new file mode 100644 index 0000000..e0cbe79 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/GameStates.cs @@ -0,0 +1,11 @@ +using System; + +public enum GameStates { + Loading, + Running, + Config, + Paused, + HelpScreen, + Exiting +} + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/HelpScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/HelpScreen.cs new file mode 100644 index 0000000..7d54363 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/HelpScreen.cs @@ -0,0 +1,113 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.IO; + + + /// + /// Summary description for HelpScreen. + /// +public class HelpScreen : System.Windows.Forms.Form { + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.TextBox helpText; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public HelpScreen() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + string helpFile = MediaUtilities.FindFile("Help.txt"); + if (File.Exists(helpFile)) { + StreamReader sr; + try { + sr = new StreamReader(helpFile); + helpText.Text = sr.ReadToEnd(); + sr.Close(); + } + catch ( Exception e ) { + helpText.Text = e.ToString(); + } + + } + else { + helpText.Text = "Unable to locate " + helpFile.ToString(); + } + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.closeButton = new System.Windows.Forms.Button(); + this.helpText = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // closeButton + // + this.closeButton.BackColor = System.Drawing.Color.Black; + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.Dock = System.Windows.Forms.DockStyle.Bottom; + this.closeButton.ForeColor = System.Drawing.Color.Red; + this.closeButton.Location = new System.Drawing.Point(0, 615); + this.closeButton.Name = "closeButton"; + this.closeButton.Size = new System.Drawing.Size(616, 23); + this.closeButton.TabIndex = 0; + this.closeButton.Text = "Close"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // helpText + // + this.helpText.BackColor = System.Drawing.Color.Black; + this.helpText.Dock = System.Windows.Forms.DockStyle.Fill; + this.helpText.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.helpText.ForeColor = System.Drawing.Color.Red; + this.helpText.Location = new System.Drawing.Point(0, 0); + this.helpText.Multiline = true; + this.helpText.Name = "helpText"; + this.helpText.ReadOnly = true; + this.helpText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.helpText.Size = new System.Drawing.Size(616, 615); + this.helpText.TabIndex = 1; + this.helpText.TabStop = false; + this.helpText.Text = ""; + // + // HelpScreen + // + this.AcceptButton = this.closeButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(616, 638); + this.Controls.Add(this.helpText); + this.Controls.Add(this.closeButton); + this.Name = "HelpScreen"; + this.Text = "SpaceWar! Help"; + this.ResumeLayout(false); + + } + #endregion + + private void closeButton_Click(object sender, System.EventArgs e) { + this.Close(); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/HelpScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step09/HelpScreen.resx new file mode 100644 index 0000000..a4f535a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/HelpScreen.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + HelpScreen + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/MediaUtilities.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/MediaUtilities.cs new file mode 100644 index 0000000..685a63d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/MediaUtilities.cs @@ -0,0 +1,35 @@ +using System; +using System.IO; +using System.Configuration; + + + /// + /// Summary description for MediaUtilities. + /// +public class MediaUtilities { + // private static string defaultPath = @"..\..\media\"; + private static string mediaPath = ConfigurationSettings.AppSettings.Get("MediaPath"); + + public MediaUtilities() { + } + + public static string FindFile(string filename) { + return FindFile(mediaPath, filename); + } + + public static string FindFile(string path, string filename) { + // First try to load the file in the full path + string fullName = AppendDirectorySeparator(path) + filename; + if (File.Exists(fullName)) + return fullName; + else + throw new FileNotFoundException("Could not find this file.", filename); + } + + private static string AppendDirectorySeparator(string pathname) { + if (!pathname.EndsWith(@"\")) + return pathname + @"\"; + else + return pathname; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/MessageType.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/MessageType.cs new file mode 100644 index 0000000..c3a73b2 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/MessageType.cs @@ -0,0 +1,10 @@ +using System; + +public enum MessageType { + PlayerUpdateID, + GameParamUpdateID, + GamePaused, + GameRunning, + Add1ToScore, + Add2ToScore +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/MouseInput.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/MouseInput.cs new file mode 100644 index 0000000..55a295e --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/MouseInput.cs @@ -0,0 +1,55 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + + + +public struct MouseControlValues { + public int Yaw; + public int Pitch; + public bool FireButtonPushed; + public bool ThrustButtonPushed; +} + + /// + /// Summary description for MouseInput. + /// +public class MouseInput { + private Device device = null; + private MouseControlValues values; + public MouseControlValues Values { + get { + UpdateInput(); + return values; + } + } + + public MouseInput(Control parent) { + // Create our mouse device + device = new Device(SystemGuid.Mouse); + device.SetCooperativeLevel(parent, CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive); + device.Properties.AxisModeAbsolute = false; + device.Acquire(); + } + + + public void UpdateInput() { + MouseState state = device.CurrentMouseState; + values.Yaw = state.X; + values.Pitch = state.Y; + + byte [] buttonStatus = state.GetMouseButtons(); + if (buttonStatus[0]!=0) + values.FireButtonPushed = true; + else + values.FireButtonPushed = false; + + if (buttonStatus[1]!=0) + values.ThrustButtonPushed = true; + else + values.ThrustButtonPushed = false; + + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/Photon.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/Photon.cs new file mode 100644 index 0000000..39efb40 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/Photon.cs @@ -0,0 +1,95 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// Summary description for Photon. + /// +public class Photon : IDisposable { + + private const float maxLife = 5; + public Vector3 Location { + get { + + return photonMesh.Position.Location; + } set { + photonMesh.Position.Location = value; + } + } + + private Vector3 launchVector; + private PositionedMesh photonMesh; + private Device device; + private float age; + public float Age { get { return age; } set { age = value; } } + private bool alive = false; + public bool Alive { get { return alive; } set { alive = value; } } + + private bool disposing = false; + + public Photon(Device device) { + this.device = device; + + photonMesh = new PositionedMesh(device, "photon.x"); + + alive = false; + age = 0; + } + + public void SetShot(Vector3 position, Vector3 launchVector) { + age = 0; + alive = true; + photonMesh.Position.Location = position; + this.launchVector = launchVector; + } + + public void UpdatePosition(float elapsedtime) { + if (disposing) + return; + age += elapsedtime; + if (age >= Constants.ShotLifetime ) { + this.alive = false; + } + else { + photonMesh.Position.RotateRel(0, elapsedtime*10,0); + Vector3 moveVector = elapsedtime * Constants.ShotVelocity * launchVector; + photonMesh.Position.MoveRel(moveVector.X, moveVector.Y, moveVector.Z); + } + + } + + public void Render() { + if (disposing | !alive) + return; + + device.RenderState.Lighting = false; + + device.RenderState.AlphaBlendEnable = true; + device.RenderState.AlphaBlendOperation = BlendOperation.Add; + device.RenderState.AlphaSourceBlend = Blend.One; + device.RenderState.DestinationBlend = Blend.One; + device.Transform.World = photonMesh.Position.WorldMatrix; + photonMesh.Render(); + device.RenderState.AlphaBlendEnable = false; + device.RenderState.Lighting = true; + } + + public void RestoreDeviceObjects() { + + } + #region IDisposable Members + + public void Dispose() { + disposing = true; + + if (photonMesh != null) + photonMesh.Dispose(); + + } + + #endregion +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/PlayerUpdateStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/PlayerUpdateStruct.cs new file mode 100644 index 0000000..e8a0525 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/PlayerUpdateStruct.cs @@ -0,0 +1,13 @@ +using System; +using Microsoft.DirectX; + +[Serializable] +public struct PlayerUpdate { + public Vector3 Location; + public Matrix WorldMatrix; + public int State; + public float WaitCount; + public int DeathCount; + public int Sounds; + public int Score; +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/PositionedMesh.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/PositionedMesh.cs new file mode 100644 index 0000000..7f5f278 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/PositionedMesh.cs @@ -0,0 +1,435 @@ +using System; +using System.Drawing; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public class PositionedMesh : IDisposable { + private Device device = null; + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + private Sphere boundingSphere; + + + private WorldPosition worldPosition; + public WorldPosition Position { get { return worldPosition; } set { worldPosition = value; } } + + private float velocity; + public float Velocity { get { return velocity; } set { velocity = value; } } + + /// + /// Constructor + /// + /// The initial filename + public PositionedMesh(string filename) { + fileName = filename; + } + public PositionedMesh() : this ("PositionedMesh") {} + + public PositionedMesh(Device device, string filename) { + Create(device, filename); + } + + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + /// + ///The bounding sphere + /// + public Sphere BoundingSphere { + get { return boundingSphere; } + } + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + worldPosition = new WorldPosition(); + + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + this.device = device; + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + + + + filename = MediaUtilities.FindFile(filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(filename, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + + Mesh tempMesh = null; + string errorString; + tempMesh = Mesh.Clean(CleanType.Optimization, systemMemoryMesh, adjacencyBuffer, adjacencyBuffer, out errorString); + if (tempMesh != systemMemoryMesh) { + systemMemoryMesh.Dispose(); + systemMemoryMesh = tempMesh; + } + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + + // Setup bounding volumes + VertexBuffer vb = systemMemoryMesh.VertexBuffer; + GraphicsStream vertexData = vb.Lock(0, 0, LockFlags.NoSystemLock); + boundingSphere.Radius = Geometry.ComputeBoundingSphere(vertexData,systemMemoryMesh.NumberVertices,systemMemoryMesh.VertexFormat, out boundingSphere.CenterPoint); + vb.Unlock(); + vb.Dispose(); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + + + } + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. + localMemoryMesh = systemMemoryMesh.Clone(MeshFlags.VbWriteOnly | MeshFlags.IbWriteOnly, + systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + // Set the world transform + device.Transform.World = worldPosition.WorldMatrix; + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render() { + Render(true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/RemotePlayer.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/RemotePlayer.cs new file mode 100644 index 0000000..8d7af6d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/RemotePlayer.cs @@ -0,0 +1,69 @@ +using System; +using Microsoft.DirectX; + + + /// + /// Holds information about the other players in the game. + /// +public class RemotePlayer { + int playerID; + string hostName; + Vector3 startingPosition; + DateTime updateTime; // last tick count at update + bool active = true; // is this player active + + public RemotePlayer(int playerID, string hostName) { + this.playerID = playerID; + this.hostName = hostName; + } + + public override string ToString() { + return hostName; + } + + public Vector3 StartingPosition { + get { + return startingPosition; + } + set { + startingPosition = value; + } + } + + public string HostName { + get { + return hostName; + } + set { + hostName = value; + } + } + + public int PlayerID { + get { + return playerID; + } + set { + playerID = value; + } + } + + public DateTime UpdateTime { + get { + return updateTime; + } + set { + updateTime = value; + } + } + + public bool Active { + get { + return active; + } + set { + active = value; + } + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/Ship.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/Ship.cs new file mode 100644 index 0000000..5e98d71 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/Ship.cs @@ -0,0 +1,409 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// This class handles the drawing and collision detection routines for our ship. + /// +public class Ship { + private Shots shots; + private ShipState state = ShipState.Dead; // current state + public ShipState State { get { lock(this){return state;} } set { lock(this){ state = value; }}} + + private Device device; + private PositionedMesh shipMesh; + + private GameClass game; + + private float velocity; + + private string hostName; + + private float waitCount = 6.0f; // wait count before state transition. + public float WaitCount { get { lock(this){return waitCount; }} set { lock(this){ waitCount = value; }}} + private int score; // our score + + private int deathCount; // # of times we've died... + private float hyperSuccess = Constants.HyperSuccessFactor; // chance of a hyper being successful... + + private Sounds sounds; + private Vector3 startingPosition; + + public Shots ShotHandler { + get { + lock(this) { + return shots; + } + } + } + public int DeathCount { + get { + lock(this) { + return deathCount; + } + } + set { + lock(this) { + deathCount = value; + } + } + } + + public int Score { + get { + lock(this) { + return score; + } + } + set { + lock(this) { + score = value; + } + } + } + + public string HostName { + get { + lock(this) { + return hostName; + } + } + set { + lock(this) { + hostName = value; + } + } + } + + public Vector3 Location { + get { + lock (this) { + return shipMesh.Position.Location; + } + } + set { + lock (this) { + shipMesh.Position.Location = value; + } + } + } + + public Vector3 Rotation { + get { + lock(this) { + return shipMesh.Position.Rotation; + } + } + set { + lock(this) { + shipMesh.Position.Rotation = value; + } + } + } + + public WorldPosition Position { + get { + lock (this) { + return shipMesh.Position; + } + } + set { + lock(this) { + shipMesh.Position=value; + } + } + } + + public float Velocity { + get { + lock (this) { + return velocity; + } + } + set { + lock(this) { + velocity = value; + } + } + } + + + + public Sounds Sounds { + get { + lock(this) { + return sounds; + } + } + set { + lock(this) { + sounds = value; + } + } + } + + public Ship(Device device, GameClass gameClass, HullColors hullColor) { + + this.device = device; + this.game = gameClass; + shots = new Shots(device); + if (hullColor == HullColors.White) { + shipMesh = new PositionedMesh(device, "WhiteShip.x"); + startingPosition = new Vector3(10, 0, 10); + } + else { + shipMesh = new PositionedMesh(device, "RedShip.x"); + startingPosition = new Vector3(-50, 0, -150); + } + + SetRandomPosition(true); + + } + + + public void Shoot() { + if (this.state != ShipState.Normal) { + return; + } + + // find out the location of the front of the ship... + + bool shot = shots.Shoot(this.Position.CombinedLocation, this.Position.Direction); + if (shot) { + sounds |= Sounds.ShipFire; + } + } + + public void SetThrust(bool thrust, float elapsedTime) { + + if (thrust && (state == ShipState.Normal)) { + + if (velocity < Constants.MaxVelocity * 0.1f) + velocity = Constants.MaxVelocity * 0.1f; + if (velocity < Constants.MaxVelocity) + velocity += velocity * Constants.ThrustPower; + if (velocity > Constants.MaxVelocity) + velocity = Constants.MaxVelocity; + sounds |= Sounds.ShipThrust; + } + + else { + velocity -= velocity * elapsedTime * 2; + if (velocity < 0.00005f) + velocity = 0.0f; + + if ((sounds & Sounds.ShipThrust) != 0) + sounds ^= Sounds.ShipThrust; + } + } + + + public void EnterHyper() { + if (state != ShipState.Normal) + return; + + SetState(ShipState.HyperCharge); + } + + public void SetRandomPosition(bool setOriginal) { + if (setOriginal) { + shipMesh.Position.Move(startingPosition); + } + else { + shipMesh.Position.RotateRel(0,Constants.random.Next(100),0); + shipMesh.Position.Move( + Constants.random.Next(1000)-500, + Constants.random.Next(1000)-500, + Constants.random.Next(1000)-500); + } + } + + public void SetState(ShipState newState) { + if (newState == state) + return; + + lock(this) { + + switch (newState) { + case ShipState.Dying: + deathCount++; + waitCount = Constants.DyingCycle; + sounds |= Sounds.ShipExplode; + break; + + case ShipState.Dead: + waitCount = Constants.DeadCycleWait; + shipMesh.Position.Move(this.startingPosition); + break; + + case ShipState.Normal: + if (state == ShipState.Hyper) { + SetRandomPosition(false); + } + else { + shipMesh.Position.Move(startingPosition); + velocity = 0.0f; + } + hyperSuccess = Constants.HyperSuccessFactor; + shots.Clear(); + sounds |= Sounds.ShipAppear; + break; + + case ShipState.HyperCharge: + sounds |= Sounds.ShipHyper; + waitCount = Constants.HyperChargeWait; + break; + + case ShipState.Hyper: + waitCount = Constants.HyperCycleWait; + break; + } + state = newState; + } + } + + + public void YawPitchRoll(float yawAmount, float pitchAmount, float elapsedTime) { + float absYaw = Math.Abs(yawAmount); + if ( (0 <= absYaw) & (absYaw <= 30)) { + yawAmount = 0; + } + else if ((31 <= absYaw) & (absYaw <= 150)) { + yawAmount *= 1; + } + else { + yawAmount *= 1.2f; + } + + const float sensitivity = 0.002f; + + float yaw = yawAmount * elapsedTime * sensitivity; + + float absPitch = Math.Abs(pitchAmount); + + if ( (0 <= absPitch) & (absPitch <= 30)) { + pitchAmount = 0; + } + else if ((31 <= absPitch) & (absPitch <= 150)) { + pitchAmount *= 1; + } + else { + pitchAmount *= 1.2f; + } + + float pitch = pitchAmount * elapsedTime * sensitivity; + float roll = 0; + + + this.Position.YawPitchRoll(yaw, pitch, roll); + + } + + public void UpdatePosition(float elapsedTime) { + shots.UpdatePosition(elapsedTime); + + if (state == ShipState.Dying) { + return; + } + + + if ((state != ShipState.Normal) && + (state != ShipState.HyperCharge)) + return; + + float xAdd = (elapsedTime * velocity * Position.Direction.X); + float yAdd = (elapsedTime * velocity * Position.Direction.Y); + float zAdd = (elapsedTime * velocity * Position.Direction.Z); + + this.Position.MoveRel(xAdd, yAdd, zAdd); + + } + + public void UpdateState(float elapsedTime) { + if (state == ShipState.Dying) { + this.waitCount -= elapsedTime; + if (waitCount <= 0) { + SetState(ShipState.Dead); + } + } + + if (state == ShipState.Dead) { + this.waitCount -= elapsedTime; + if (waitCount <= 0) { + SetState(ShipState.Normal); + } + } + + if (state == ShipState.HyperCharge) { + this.waitCount -= elapsedTime; + shipMesh.Position.RotateRel(0,-elapsedTime * Constants.HyperCycleWait *6.0f, 0); + + if (waitCount <= 0) { + // if we didn't make it, we're dying... + double randValue = Constants.random.NextDouble(); + if (hyperSuccess < randValue) { + SetState(ShipState.Dying); + game.SendPoint(); + } + else { + SetState(ShipState.Hyper); + } + } + } + if (state == ShipState.Hyper) { + this.waitCount -= elapsedTime; + shipMesh.Position.RotateRel(0, -elapsedTime * this.waitCount * 6.0f, 0); + if (waitCount <= 0) { + hyperSuccess -= Constants.HyperSuccessDegradation; + float save = this.hyperSuccess; + SetState(ShipState.Normal); + hyperSuccess = save; + } + } + + } + public void TestShip(Ship otherShip) { + + // if we're not alive, don't do any tests... + if (state != ShipState.Normal) + return; + + // Test if their shots are close enough to us. + if (otherShip.shots.TestShots(this)) { + SetState(ShipState.Dying); + game.SendPoint(); + } + + //Test for collision with ship or it's death explosion + if ((otherShip.state == ShipState.Normal) | (otherShip.state == ShipState.Dying)) { + Vector3 delta = this.Position.Location - otherShip.Position.Location; + if (Vector3.Length(delta) < Constants.ShipCollisionLimit) { + SetState(ShipState.Dying); + game.SendPoint(); + } + } + } + + public void Render() { + switch (this.state) { + case ShipState.Normal: { + device.RenderState.Lighting = true; + device.RenderState.ZBufferEnable = true; + device.Transform.World = shipMesh.Position.WorldMatrix; + shipMesh.Render(); + shots.Render(); + break; + } + case ShipState.Dying: { + break; + } + default: { + return; + } + } + } + +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/ShipSkins.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/ShipSkins.cs new file mode 100644 index 0000000..42b4546 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/ShipSkins.cs @@ -0,0 +1,5 @@ +public enum HullColors { + Red, + White +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/ShipState.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/ShipState.cs new file mode 100644 index 0000000..827eb64 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/ShipState.cs @@ -0,0 +1,12 @@ +using System; + + +public enum ShipState { + Normal, + Dying, + Dead, + Hyper, + HyperCharge, +}; + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/ShotUpdateStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/ShotUpdateStruct.cs new file mode 100644 index 0000000..908fe7b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/ShotUpdateStruct.cs @@ -0,0 +1,9 @@ +using System; +using Microsoft.DirectX; + + +public struct ShotUpdate { + public Vector3[] ShotPosition; + public float[] ShotAge; + public bool [] ShotAlive; +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/Shots.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/Shots.cs new file mode 100644 index 0000000..d1aed11 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/Shots.cs @@ -0,0 +1,101 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + /// + /// Handles the collision detection and returns the array of shots for sending to other players + /// +[Serializable] +public class Shots { + + Photon[] shots; + [NonSerialized] + float timeSinceShot = 0; + [NonSerialized] + Rectangle screenBounds; + + + public Shots(Device device) { + shots = new Photon[Constants.NumShots]; + for (int count = 0; count < Constants.NumShots; count++) { + shots[count] = new Photon(device); + } + } + + public Rectangle ScreenBounds { + get { + return screenBounds; + } + set { + screenBounds = value; + } + } + public Photon[] GetShotArray() { + lock(this) { + return shots; + } + } + + public void SetShotArray(Photon[] shotArray) { + lock(this) { + this.shots = shotArray; + } + } + + public bool Shoot(Vector3 position, Vector3 launchVector) { + if (timeSinceShot < Constants.ShotDeltaTime) + return false; + + timeSinceShot = 0; + + + foreach (Photon shot in shots) { + if (!shot.Alive) { + shot.SetShot(position, launchVector); + return true; + } + } + return false; + } + + public void UpdatePosition(float elapsedTime) { + timeSinceShot += elapsedTime; + + foreach (Photon shot in shots) { + shot.UpdatePosition(elapsedTime); + } + } + + public void Clear() { + foreach (Photon shot in shots) { + shot.Alive = false; + } + } + public bool TestShots(Ship ship) { + foreach (Photon shot in shots) { + if (shot.Alive) { + float distance = Vector3.Length(shot.Location - ship.Position.Location); + if (distance < Constants.ShotCollisionLimit) { + shot.Alive = false; + return true; + } + } + } + return false; + } + + public void Render() { + foreach (Photon shot in shots) { + shot.Render(); + } + } + + public void RestoreDeviceObjects() { + foreach (Photon shot in shots) { + shot.RestoreDeviceObjects(); + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/SoundBuffer.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/SoundBuffer.cs new file mode 100644 index 0000000..75c3d53 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/SoundBuffer.cs @@ -0,0 +1,71 @@ +using System; +using Microsoft.DirectX.DirectSound; + + + /// + /// A single sound buffer for use by the SoundHandler class. + /// +public class SoundBuffer { + Microsoft.DirectX.DirectSound.Buffer buffer; + Sounds thisSound; + bool looping; + bool lastValue; + + public SoundBuffer(Microsoft.DirectX.DirectSound.Device soundDevice, string filename, Sounds thisSound, bool looping) { + this.thisSound = thisSound; + this.looping = looping; + + BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + try { + buffer = new Microsoft.DirectX.DirectSound.Buffer( + filename, + bufferDesc, + soundDevice); + } + catch (Exception e) { + throw new Exception( + String.Format("Error opening {0}; ", + filename), e); + } + } + + public Sounds Sound { + get { + return thisSound; + } + } + + public int Volume { + get { + return buffer.Volume; + } + set { + buffer.Volume = value; + } + } + + public void Play(bool on) { + // looping sounds don't get restarted + if (looping) { + if (on) { + if (!lastValue) { + buffer.SetCurrentPosition(1000); + buffer.Play(0,BufferPlayFlags.Looping); + } + } + else { + buffer.Stop(); + } + lastValue = on; + } + else { + if (on) { + buffer.SetCurrentPosition(0); + buffer.Play(0,BufferPlayFlags.Default); + } + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/SoundHandler.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/SoundHandler.cs new file mode 100644 index 0000000..1782d3f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/SoundHandler.cs @@ -0,0 +1,86 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX.DirectSound; +using System.Collections; + + + /// + /// This class handles loading and playing our sounds. + /// +public class SoundHandler { + Device soundDevice; + ArrayList sounds = new ArrayList(); + + Sounds lastSound; + + const int VolumeEngine = -1000; + const int VolumeOtherShot = -2000; + const int VolumeHaHa = -3000; + + + public SoundHandler(Control owner) { + soundDevice = new Device(); + soundDevice.SetCooperativeLevel(owner,CooperativeLevel.Normal); + CreateSoundBuffers(); + } + + Microsoft.DirectX.DirectSound.Buffer LoadFile(string filename) { + + Microsoft.DirectX.DirectSound.BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + Microsoft.DirectX.DirectSound.Buffer buffer; + buffer = new Microsoft.DirectX.DirectSound.Buffer(filename, bufferDesc, soundDevice); + + + return buffer; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping, int volume) { + SoundBuffer buffer; + + buffer = new SoundBuffer( + soundDevice, + filename, + thisSound, + looping); + sounds.Add(buffer); + buffer.Volume = volume; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping) { + AddBuffer(filename, thisSound, looping, 0); + } + + void CreateSoundBuffers() { + AddBuffer(MediaUtilities.FindFile("hypercharge.wav"), Sounds.ShipHyper, false); + AddBuffer(MediaUtilities.FindFile("sci fi bass.wav"), Sounds.ShipAppear, false); + AddBuffer(MediaUtilities.FindFile("laser2.wav"), Sounds.ShipFire, false); + AddBuffer(MediaUtilities.FindFile("explode.wav"), Sounds.ShipExplode, false); + + AddBuffer(MediaUtilities.FindFile("engine.wav"), Sounds.ShipThrust, true, VolumeEngine); + AddBuffer(MediaUtilities.FindFile("laser2_other.wav"), Sounds.OtherShipFire, false, VolumeOtherShot); + AddBuffer(MediaUtilities.FindFile("explode_other.wav"), Sounds.OtherShipExplode, false); + AddBuffer(MediaUtilities.FindFile("engine_other.wav"), Sounds.OtherShipThrust, true, VolumeEngine); + + AddBuffer(MediaUtilities.FindFile("sci fi bass.wav"), Sounds.OtherShipAppear, false); + AddBuffer(MediaUtilities.FindFile("haha.wav"), Sounds.Taunt, false, VolumeHaHa); + + AddBuffer(MediaUtilities.FindFile("dude_quest1.wav"), Sounds.Dude1, false); + AddBuffer(MediaUtilities.FindFile("dude_quest2.wav"), Sounds.Dude2, false); + AddBuffer(MediaUtilities.FindFile("dude_quest3.wav"), Sounds.Dude3, false); + AddBuffer(MediaUtilities.FindFile("dude_quest4.wav"), Sounds.Dude4, false); + AddBuffer(MediaUtilities.FindFile("dude_quest5.wav"), Sounds.Dude5, false); + } + + public void Play(Sounds soundsToPlay) { + // check each enum value. If that value + // is set, play the sound... + foreach (SoundBuffer buffer in sounds) { + bool on = ((buffer.Sound & soundsToPlay) != 0); + buffer.Play(on); + + } + lastSound = soundsToPlay; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/Sounds.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/Sounds.cs new file mode 100644 index 0000000..0f3b6ac --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/Sounds.cs @@ -0,0 +1,21 @@ +using System; + + +[Flags] +public enum Sounds { + ShipAppear = 0x00000001, + ShipHyper = 0x00000002, + ShipFire = 0x00000004, + ShipExplode = 0x00000008, + ShipThrust = 0x00000010, + OtherShipThrust = 0x00000020, + OtherShipExplode = 0x00000040, + OtherShipFire = 0x00000080, + OtherShipAppear = 0x00000100, + Taunt = 0x00000200, + Dude1 = 0x00000400, + Dude2 = 0x00000800, + Dude3 = 0x00001000, + Dude4 = 0x00002000, + Dude5 = 0x00004000, +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/SpaceWar3D.ico b/Source Code updated 08-12-05/Spacewar3D/Step09/SpaceWar3D.ico new file mode 100644 index 0000000..5db9a4d Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Step09/SpaceWar3D.ico differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/Spacewar3D.suo b/Source Code updated 08-12-05/Spacewar3D/Step09/Spacewar3D.suo new file mode 100644 index 0000000..8b71896 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Step09/Spacewar3D.suo differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/SphereStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/SphereStruct.cs new file mode 100644 index 0000000..90d9d6f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/SphereStruct.cs @@ -0,0 +1,6 @@ +using Microsoft.DirectX; + +public struct Sphere { + public Vector3 CenterPoint; + public float Radius; +}; \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/SplashScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/SplashScreen.cs new file mode 100644 index 0000000..9ffea2c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/SplashScreen.cs @@ -0,0 +1,237 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + + + /// + /// Spacewar Splashscreen + /// +public class SplashScreen : System.Windows.Forms.Form { + private MainClass mainClass; + private System.Windows.Forms.Button helpButton; + private System.Windows.Forms.Button startButton; + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.Button soloButton; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.CheckBox checkBox1; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + public SplashScreen(MainClass main) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + this.mainClass = main; + radioButton3.Checked = true; + checkBox1.Checked = true; + mainClass.GameFormSize = new Size(1024,768); + mainClass.FullScreen = true; + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(SplashScreen)); + this.helpButton = new System.Windows.Forms.Button(); + this.startButton = new System.Windows.Forms.Button(); + this.closeButton = new System.Windows.Forms.Button(); + this.soloButton = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // helpButton + // + this.helpButton.ForeColor = System.Drawing.Color.White; + this.helpButton.Location = new System.Drawing.Point(440, 280); + this.helpButton.Name = "helpButton"; + this.helpButton.Size = new System.Drawing.Size(136, 32); + this.helpButton.TabIndex = 5; + this.helpButton.Text = "Show Help"; + this.helpButton.Click += new System.EventHandler(this.helpButton_Click); + // + // startButton + // + this.startButton.ForeColor = System.Drawing.Color.White; + this.startButton.Location = new System.Drawing.Point(440, 364); + this.startButton.Name = "startButton"; + this.startButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.startButton.Size = new System.Drawing.Size(136, 32); + this.startButton.TabIndex = 7; + this.startButton.Text = "Network Play"; + this.startButton.Click += new System.EventHandler(this.startButton_Click); + // + // closeButton + // + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.ForeColor = System.Drawing.Color.White; + this.closeButton.Location = new System.Drawing.Point(440, 406); + this.closeButton.Name = "closeButton"; + this.closeButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.closeButton.Size = new System.Drawing.Size(136, 32); + this.closeButton.TabIndex = 8; + this.closeButton.Text = "Exit"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // soloButton + // + this.soloButton.ForeColor = System.Drawing.Color.White; + this.soloButton.Location = new System.Drawing.Point(440, 322); + this.soloButton.Name = "soloButton"; + this.soloButton.Size = new System.Drawing.Size(136, 32); + this.soloButton.TabIndex = 6; + this.soloButton.Text = "Solo Play"; + this.soloButton.Click += new System.EventHandler(this.soloButton_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.radioButton3); + this.groupBox1.Controls.Add(this.radioButton2); + this.groupBox1.Controls.Add(this.radioButton1); + this.groupBox1.ForeColor = System.Drawing.Color.White; + this.groupBox1.Location = new System.Drawing.Point(16, 320); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(128, 128); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Screen Resolution"; + // + // checkBox1 + // + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(16, 96); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.TabIndex = 3; + this.checkBox1.Text = "Full Screen"; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // radioButton3 + // + this.radioButton3.Checked = true; + this.radioButton3.ForeColor = System.Drawing.Color.White; + this.radioButton3.Location = new System.Drawing.Point(16, 72); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(80, 24); + this.radioButton3.TabIndex = 2; + this.radioButton3.TabStop = true; + this.radioButton3.Text = "1024 x 768"; + this.radioButton3.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton2 + // + this.radioButton2.ForeColor = System.Drawing.Color.White; + this.radioButton2.Location = new System.Drawing.Point(16, 48); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(72, 24); + this.radioButton2.TabIndex = 1; + this.radioButton2.Text = "800 x 600"; + this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton1 + // + this.radioButton1.ForeColor = System.Drawing.Color.White; + this.radioButton1.Location = new System.Drawing.Point(16, 24); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(72, 24); + this.radioButton1.TabIndex = 0; + this.radioButton1.Text = "640 x 480"; + this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // SplashScreen + // + this.AcceptButton = this.soloButton; + this.AutoScale = false; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.Black; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(594, 454); + this.ControlBox = false; + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.soloButton); + this.Controls.Add(this.closeButton); + this.Controls.Add(this.startButton); + this.Controls.Add(this.helpButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(600, 460); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(600, 460); + this.Name = "SplashScreen"; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + private void helpButton_Click(object sender, System.EventArgs e) { + HelpScreen helpScreen = new HelpScreen(); + helpScreen.ShowDialog(); + } + + private void startButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = true; + this.Close(); + } + + private void closeButton_Click(object sender, System.EventArgs e) { + Environment.Exit(0); + } + + private void soloButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = false; + this.Close(); + } + + private void radioButton_CheckedChanged(object sender, System.EventArgs e) { + RadioButton btn = (RadioButton)sender; + Console.WriteLine(btn.ToString()); + if (btn.Checked) { + if (btn == radioButton1) + mainClass.GameFormSize = new Size(640,480); + if (btn == radioButton2) + mainClass.GameFormSize = new Size(800, 600); + if (btn == radioButton3) + mainClass.GameFormSize = new Size(1024, 768); + } + } + + private void checkBox1_CheckedChanged(object sender, System.EventArgs e) { + mainClass.FullScreen = checkBox1.Checked; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/SplashScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step09/SplashScreen.resx new file mode 100644 index 0000000..18fad73 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/SplashScreen.resx @@ -0,0 +1,4715 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + False + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + False + + + 80 + + + True + + + Private + + + SplashScreen + + + + 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 + AElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/Step09.csproj b/Source Code updated 08-12-05/Spacewar3D/Step09/Step09.csproj new file mode 100644 index 0000000..9ed5902 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/Step09.csproj @@ -0,0 +1,370 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/Step09.sln b/Source Code updated 08-12-05/Spacewar3D/Step09/Step09.sln new file mode 100644 index 0000000..2be3ab8 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/Step09.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Step09", "Step09.csproj", "{DE8FEF2E-6E28-4456-9712-68437802A747}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.ActiveCfg = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.Build.0 = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.ActiveCfg = Release|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/WorldPosition.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/WorldPosition.cs new file mode 100644 index 0000000..35c2919 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/WorldPosition.cs @@ -0,0 +1,210 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + +[Serializable] +public class WorldPosition { + public float XPos {get { return xPos; } set { xPos = value; } } + public float YPos {get { return yPos; } set { yPos = value; } } + public float ZPos {get { return zPos; } set { zPos = value; } } + + public float XRotation { get { return xRotation; } set { xRotation = value; } } + public float YRotation { get { return yRotation; } set { yRotation = value; } } + public float ZRotation { get { return zRotation; } set { zRotation = value; } } + + public float XScale { get { return xScale; } set { xScale = value; } } + public float YScale { get { return yScale; } set { yScale = value; } } + public float ZScale { get { return zScale; } set { zScale = value; } } + + + public Matrix WorldMatrix { get { Update(); return worldMatrix; } + set { + worldMatrix = value; + Location = Vector3.TransformCoordinate(new Vector3(0,0,0), worldMatrix); + Point(Location, Location+Direction); + Roll(Location, Location+Up); + } + } + + public Vector3 Direction { + get { + Vector3 directionVector= new Vector3(0,0,1); + return Vector3.TransformNormal(directionVector, worldMatrix); + } + } + + public Vector3 Up { + get { + Vector3 upVector = new Vector3(0,1,0); + return Vector3.TransformNormal(upVector,worldMatrix); + } + } + public Vector3 Right { + get { + Vector3 rightVector = new Vector3(1,0,0); + return Vector3.TransformNormal(rightVector,worldMatrix); + } + } + + public Vector3 Location { + get { + return new Vector3( xPos, yPos, zPos ); + } + set { + Move(value); + } + } + + public Vector3 Rotation { + get { + return new Vector3( xRotation, yRotation, zRotation); + } + set { + Rotate(value); + } + } + + + + private float xPos, yPos, zPos = 0.0f; + private float xRotation, yRotation, zRotation = 0.0f; + private float xScale, yScale, zScale = 0.0f; + + private Matrix worldMatrix, scaleMatrix, rotationMatrix = Matrix.Identity; + private Matrix translationMatrix = Matrix.Identity; + private Matrix combineMatrix1, combineMatrix2; + + public Matrix CombineMatrix1 { get { return combineMatrix1; } set { combineMatrix1 = value; } } + public Matrix CombineMatrix2 { get { return combineMatrix2; } set { combineMatrix2 = value; } } + + + public WorldPosition() { + + Move(0.0f, 0.0f, 0.0f); + Rotate(0.0f, 0.0f, 0.0f); + Scale(1.0f, 1.0f, 1.0f); + combineMatrix1 = combineMatrix2 = Matrix.Zero; + + Update(); + + } + + public Vector3 CombinedLocation { + get { + Update(); + return new Vector3(worldMatrix.M41,worldMatrix.M42,worldMatrix.M43); + } + } + + public void Move( Vector3 newPosition ) { + Move( newPosition.X, newPosition.Y, newPosition.Z ); + } + + public void Move( float x, float y, float z ) { + xPos = x; + yPos = y; + zPos = z; + + translationMatrix = Matrix.Translation( xPos, yPos, zPos ); + } + + public void MoveRel( float x, float y, float z ) { + Move(xPos + x, yPos + y, zPos + z ); + } + + public void Rotate( Vector3 newDirection ) { + Rotate(newDirection.X, newDirection.Y, newDirection.Z); + } + + public void Point(Vector3 pointAtLocation) { + Point(xPos, yPos, zPos, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(Vector3 currentLocation, Vector3 pointAtLocation) { + Point(currentLocation.X, currentLocation.Y, currentLocation.Z, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } + + public void Roll(Vector3 Location, Vector3 UpVector) { + float xDiff, yDiff; + xDiff = Location.X - UpVector.X; + yDiff = Location.Y - UpVector.Y; + zRotation = (float) Math.Atan2(xDiff, yDiff); + } + + + + + public void Rotate( float x, float y, float z ) { + xRotation = x; + yRotation = y; + zRotation = z; + + rotationMatrix = Matrix.RotationYawPitchRoll( yRotation, xRotation, zRotation ); + } + + public void RotateRel( float x, float y, float z ) { + Rotate( xRotation + x, yRotation + y, zRotation + z ); + } + + //YawPitchRoll rotates an object relative to its own orthonormal basis vectors + public void YawPitchRoll( float yaw, float pitch, float roll) { + + Matrix yawMatrix = Matrix.RotationAxis(this.Up, yaw); + Matrix pitchMatrix = Matrix.RotationAxis(this.Right, pitch); + Matrix rollMatrix = Matrix.RotationAxis(this.Direction, roll); + + Matrix ypr = yawMatrix * pitchMatrix * rollMatrix; + rotationMatrix *= ypr; + + + } + + public void Scale( float x, float y, float z ) { + xScale = x; + yScale = y; + zScale = z; + + scaleMatrix = Matrix.Scaling( xScale, yScale, zScale ); + + } + + public void ScaleRel( float x, float y, float z ) { + Scale( xScale + x, yScale + y, zScale + z ); + } + + + public void Update() { + + Matrix m; + + + + m = scaleMatrix; + m *= rotationMatrix; + m *= translationMatrix; + if (combineMatrix1 != Matrix.Zero) + m *= combineMatrix1; + if (combineMatrix2 != Matrix.Zero) + m *= combineMatrix2; + + worldMatrix = m; + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/d3dapp.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/d3dapp.cs new file mode 100644 index 0000000..9384434 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/d3dapp.cs @@ -0,0 +1,1517 @@ +//----------------------------------------------------------------------------- +// File: D3DApp.cs +// +// Desc: Application class for the Direct3D samples framework library. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + +/// +/// The base class for all the graphics (D3D) samples, it derives from windows forms +/// +public class GraphicsSample : System.Windows.Forms.Form { + #region Menu Information + // The menu items that *all* samples will need + protected System.Windows.Forms.MainMenu mnuMain; + protected System.Windows.Forms.MenuItem mnuFile; + private System.Windows.Forms.MenuItem mnuGo; + private System.Windows.Forms.MenuItem mnuSingle; + private System.Windows.Forms.MenuItem mnuBreak1; + private System.Windows.Forms.MenuItem mnuChange; + private System.Windows.Forms.MenuItem mnuBreak2; + protected System.Windows.Forms.MenuItem mnuExit; + #endregion + + // The window we will render too + private System.Windows.Forms.Control ourRenderTarget; + // Should we use the default windows + protected bool isUsingMenus = true; + + // We need to keep track of our enumeration settings + protected D3DEnumeration enumerationSettings = new D3DEnumeration(); + protected D3DSettings graphicsSettings = new D3DSettings(); + private bool isMaximized = false; // Are we maximized? + private bool isHandlingSizeChanges = true; // Are we handling size changes? + private bool isClosing = false; // Are we closing? + private bool isChangingFormStyle = false; // Are we changing the forms style? + private bool isWindowActive = true; // Are we waiting for got focus? + + private float lastTime = 0.0f; // The last time + private int frames = 0; // Number of frames since our last update + private int appPausedCount = 0; // How many times has the app been paused (and when can it resume)? + + // Internal variables for the state of the app + protected bool windowed; + protected bool active; + protected bool ready; + protected bool hasFocus; + protected bool isMultiThreaded = false; + + // Internal variables used for timing + protected bool frameMoving; + protected bool singleStep; + // Main objects used for creating and rendering the 3D scene + protected PresentParameters presentParams = new PresentParameters(); // Parameters for CreateDevice/Reset + protected Device device; // The rendering device + protected RenderStateManager renderState; + protected SamplerStateManagerCollection sampleState; + protected TextureStateManagerCollection textureStates; + private Caps graphicsCaps; // Caps for the device + protected Caps Caps { get { return graphicsCaps; } } + private CreateFlags behavior; // Indicate sw or hw vertex processing + protected BehaviorFlags BehaviorFlags { get { return new BehaviorFlags(behavior); } } + protected System.Windows.Forms.Control RenderTarget { get { return ourRenderTarget; } set { ourRenderTarget = value; } } + + // Variables for timing + protected float appTime; // Current time in seconds + protected float elapsedTime; // Time elapsed since last frame + protected float framePerSecond; // Instanteous frame rate + protected string deviceStats;// String to hold D3D device stats + protected string frameStats; // String to hold frame stats + + private bool deviceLost = false; + + // Overridable variables for the app + private int minDepthBits; // Minimum number of bits needed in depth buffer + protected int MinDepthBits { get { return minDepthBits; } set { minDepthBits = value; enumerationSettings.AppMinDepthBits = value;} } + private int minStencilBits; // Minimum number of bits needed in stencil buffer + protected int MinStencilBits { get { return minStencilBits; } set { minStencilBits = value; enumerationSettings.AppMinStencilBits = value;} } + protected bool showCursorWhenFullscreen; // Whether to show cursor when fullscreen + protected bool clipCursorWhenFullscreen; // Whether to limit cursor pos when fullscreen + protected bool startFullscreen; // Whether to start up the app in fullscreen mode + + private System.Drawing.Size storedSize; + private System.Drawing.Point storedLocation; + + // Overridable functions for the 3D scene created by the app + protected virtual bool ConfirmDevice(Caps caps, VertexProcessingType vertexProcessingType, + Format adapterFormat, Format backBufferFormat) { return true; } + protected virtual void OneTimeSceneInitialization() { /* Do Nothing */ } + protected virtual void InitializeDeviceObjects() { /* Do Nothing */ } + protected virtual void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void FrameMove() { /* Do Nothing */ } + protected virtual void Render() { /* Do Nothing */ } + protected virtual void InvalidateDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void DeleteDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + + + + + /// + /// Constructor + /// + public GraphicsSample() { + device = null; + active = false; + ready = false; + hasFocus = false; + behavior = 0; + + ourRenderTarget = this; + frameMoving = true; + singleStep = false; + framePerSecond = 0.0f; + deviceStats = null; + frameStats = null; + + this.Text = "D3D9 Sample"; + this.ClientSize = new System.Drawing.Size(400,300); + this.KeyPreview = true; + + minDepthBits = 16; + minStencilBits = 0; + showCursorWhenFullscreen = false; + startFullscreen = false; + + // When clipCursorWhenFullscreen is TRUE, the cursor is limited to + // the device window when the app goes fullscreen. This prevents users + // from accidentally clicking outside the app window on a multimon system. + // This flag is turned off by default for debug builds, since it makes + // multimon debugging difficult. +#if (DEBUG) + clipCursorWhenFullscreen = false; +#else + clipCursorWhenFullscreen = true; +#endif + InitializeComponent(); + } + + + + + /// + /// Picks the best graphics device, and initializes it + /// + /// true if a good device was found, false otherwise + public bool CreateGraphicsSample() { + enumerationSettings.ConfirmDeviceCallback = new D3DEnumeration.ConfirmDeviceCallbackType(this.ConfirmDevice); + enumerationSettings.Enumerate(); + + if (ourRenderTarget.Cursor == null) { + // Set up a default cursor + ourRenderTarget.Cursor = System.Windows.Forms.Cursors.Default; + } + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + + try { + ChooseInitialSettings(); + + // Initialize the application timer + DXUtil.Timer(DirectXTimer.Start); + // Initialize the app's custom scene stuff + OneTimeSceneInitialization(); + // Initialize the 3D environment for the app + InitializeEnvironment(); + } + catch (SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + return false; + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + return false; + } + + // The app is ready to go + ready = true; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available windowed mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestWindowedMode(bool doesRequireHardware, bool doesRequireReference) { + // Get display mode of primary adapter (which is assumed to be where the window + // will appear) + DisplayMode primaryDesktopDisplayMode = Manager.Adapters[0].CurrentDisplayMode; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + if (!deviceCombo.IsWindowed) + continue; + if (deviceCombo.AdapterFormat != primaryDesktopDisplayMode.Format) + continue; + + // If we haven't found a compatible DeviceCombo yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + deviceCombo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + // This windowed device combo looks great -- take it + goto EndWindowedDeviceComboSearch; + } + // Otherwise keep looking for a better windowed device combo + } + } + } + } + + EndWindowedDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + graphicsSettings.WindowedAdapterInfo = bestAdapterInfo; + graphicsSettings.WindowedDeviceInfo = bestDeviceInfo; + graphicsSettings.WindowedDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = true; + graphicsSettings.WindowedDisplayMode = primaryDesktopDisplayMode; + graphicsSettings.WindowedWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + graphicsSettings.WindowedHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.WindowedDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.WindowedMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.WindowedMultisampleQuality = 0; + graphicsSettings.WindowedVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.WindowedPresentInterval = (PresentInterval)bestDeviceCombo.PresentIntervalList[0]; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available fullscreen mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestFullscreenMode(bool doesRequireHardware, bool doesRequireReference) { + // For fullscreen, default to first HAL DeviceCombo that supports the current desktop + // display mode, or any display mode if HAL is not compatible with the desktop mode, or + // non-HAL if no HAL is available + DisplayMode adapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestAdapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestDisplayMode = new DisplayMode(); + bestAdapterDesktopDisplayMode.Width = 0; + bestAdapterDesktopDisplayMode.Height = 0; + bestAdapterDesktopDisplayMode.Format = 0; + bestAdapterDesktopDisplayMode.RefreshRate = 0; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + adapterDesktopDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + bool adapterMatchesDesktop = (deviceCombo.AdapterFormat == adapterDesktopDisplayMode.Format); + if (deviceCombo.IsWindowed) + continue; + + // If we haven't found a compatible set yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + bestDeviceCombo.DevType == DeviceType.Hardware && bestDeviceCombo.AdapterFormat != adapterDesktopDisplayMode.Format && adapterMatchesDesktop || + bestDeviceCombo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + bestAdapterDesktopDisplayMode = adapterDesktopDisplayMode; + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + // This fullscreen device combo looks great -- take it + goto EndFullscreenDeviceComboSearch; + } + // Otherwise keep looking for a better fullscreen device combo + } + } + } + } + + EndFullscreenDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + // Need to find a display mode on the best adapter that uses pBestDeviceCombo->AdapterFormat + // and is as close to bestAdapterDesktopDisplayMode's res as possible + bestDisplayMode.Width = 0; + bestDisplayMode.Height = 0; + bestDisplayMode.Format = 0; + bestDisplayMode.RefreshRate = 0; + foreach (DisplayMode displayMode in bestAdapterInfo.DisplayModeList) { + if (displayMode.Format != bestDeviceCombo.AdapterFormat) + continue; + if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate == bestAdapterDesktopDisplayMode.RefreshRate) { + // found a perfect match, so stop + bestDisplayMode = displayMode; + break; + } + else if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate > bestDisplayMode.RefreshRate) { + // refresh rate doesn't match, but width/height match, so keep this + // and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == bestAdapterDesktopDisplayMode.Width) { + // width matches, so keep this and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == 0) { + // we don't have anything better yet, so keep this and keep looking + bestDisplayMode = displayMode; + } + } + + graphicsSettings.FullscreenAdapterInfo = bestAdapterInfo; + graphicsSettings.FullscreenDeviceInfo = bestDeviceInfo; + graphicsSettings.FullscreenDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = false; + graphicsSettings.FullscreenDisplayMode = bestDisplayMode; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.FullscreenDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.FullscreenMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.FullscreenMultisampleQuality = 0; + graphicsSettings.FullscreenVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.FullscreenPresentInterval = PresentInterval.Default; + + return true; + } + + + + + /// + /// Choose the initial settings for the application + /// + /// true if the settings were initialized + public bool ChooseInitialSettings() { + bool foundFullscreenMode = FindBestFullscreenMode(false, false); + bool foundWindowedMode = FindBestWindowedMode(false, false); + if (startFullscreen && foundFullscreenMode) + graphicsSettings.IsWindowed = false; + + if (!foundFullscreenMode && !foundWindowedMode) + throw new NoCompatibleDevicesException(); + + return (foundFullscreenMode || foundWindowedMode); + } + + + + + /// + /// Build presentation parameters from the current settings + /// + public void BuildPresentParamsFromSettings() { + presentParams.Windowed = graphicsSettings.IsWindowed; + presentParams.BackBufferCount = 1; + presentParams.MultiSample = graphicsSettings.MultisampleType; + presentParams.MultiSampleQuality = graphicsSettings.MultisampleQuality; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.EnableAutoDepthStencil = enumerationSettings.AppUsesDepthBuffer; + presentParams.AutoDepthStencilFormat = graphicsSettings.DepthStencilBufferFormat; + presentParams.PresentFlag = PresentFlag.None; + + if (windowed) { + presentParams.BackBufferWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + presentParams.BackBufferHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = 0; + presentParams.PresentationInterval = PresentInterval.Immediate; + presentParams.DeviceWindow = ourRenderTarget; + } + else { + presentParams.BackBufferWidth = graphicsSettings.DisplayMode.Width; + presentParams.BackBufferHeight = graphicsSettings.DisplayMode.Height; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = graphicsSettings.DisplayMode.RefreshRate; + presentParams.PresentationInterval = graphicsSettings.PresentInterval; + presentParams.DeviceWindow = this; + } + } + + + + + /// + /// Initialize the graphics environment + /// + public void InitializeEnvironment() { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + GraphicsDeviceInfo deviceInfo = graphicsSettings.DeviceInfo; + + windowed = graphicsSettings.IsWindowed; + + // Set up the presentation parameters + BuildPresentParamsFromSettings(); + + if (deviceInfo.Caps.PrimitiveMiscCaps.IsNullReference) { + // Warn user about null ref device that can't render anything + HandleSampleException(new NullReferenceDeviceException(), ApplicationMessage.None); + } + + CreateFlags createFlags = new CreateFlags(); + if (graphicsSettings.VertexProcessingType == VertexProcessingType.Software) + createFlags = CreateFlags.SoftwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Mixed) + createFlags = CreateFlags.MixedVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Hardware) + createFlags = CreateFlags.HardwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.PureHardware) { + createFlags = CreateFlags.HardwareVertexProcessing; + } + else + throw new ApplicationException(); +#if (DX9) +#else + // Make sure to allow multithreaded apps if we need them + presentParams.ForceNoMultiThreadedFlag = !isMultiThreaded; +#endif + try { + // Create the device + device = new Device(graphicsSettings.AdapterOrdinal, graphicsSettings.DevType, + windowed ? ourRenderTarget : this , createFlags, presentParams); + + // Cache our local objects + renderState = device.RenderState; + sampleState = device.SamplerState; + textureStates = device.TextureState; + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after recreating the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + if (windowed) { + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + } + + // Store device Caps + graphicsCaps = device.DeviceCaps; + behavior = createFlags; + + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + // Store device description + if (deviceInfo.DevType == DeviceType.Reference) + sb.Append("REF"); + else if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append("HAL"); + else if (deviceInfo.DevType == DeviceType.Software) + sb.Append("SW"); + + BehaviorFlags behaviorFlags = new BehaviorFlags(createFlags); + if ((behaviorFlags.HardwareVertexProcessing) && + (behaviorFlags.PureDevice)) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (pure hw vp)"); + else + sb.Append(" (simulated pure hw vp)"); + } + else if (behaviorFlags.HardwareVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (hw vp)"); + else + sb.Append(" (simulated hw vp)"); + } + else if (behaviorFlags.MixedVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (mixed vp)"); + else + sb.Append(" (simulated mixed vp)"); + } + else if (behaviorFlags.SoftwareVertexProcessing) { + sb.Append(" (sw vp)"); + } + + if (deviceInfo.DevType == DeviceType.Hardware) { + sb.Append(": "); + sb.Append(adapterInfo.AdapterDetails.Description); + } + + // Set device stats string + deviceStats = sb.ToString(); + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // Confine cursor to fullscreen window + if (clipCursorWhenFullscreen) { + if (!windowed) { + System.Drawing.Rectangle rcWindow = this.ClientRectangle; + } + } + + // Setup the event handlers for our device + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + device.Disposing += new System.EventHandler(this.DeleteDeviceObjects); + device.DeviceResizing += new System.ComponentModel.CancelEventHandler(this.EnvironmentResized); + + // Initialize the app's device-dependent objects + try { + InitializeDeviceObjects(); + RestoreDeviceObjects(null, null); + active = true; + return; + } + catch { + // Cleanup before we try again + InvalidateDeviceObjects(null, null); + DeleteDeviceObjects(null, null); + device.Dispose(); + device = null; + if (this.Disposing) + return; + } + } + catch { + // If that failed, fall back to the reference rasterizer + if (deviceInfo.DevType == DeviceType.Hardware) { + if (FindBestWindowedMode(false, true)) { + windowed = true; + + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + + // Let the user know we are switching from HAL to the reference rasterizer + HandleSampleException(null, ApplicationMessage.WarnSwitchToRef); + + InitializeEnvironment(); + } + } + } + } + + + + + /// + /// Displays sample exceptions to the user + /// + /// The exception that was thrown + /// Extra information on how to handle the exception + public void HandleSampleException(SampleException e, ApplicationMessage Type) { + // Build a message to display to the user + string strMsg = string.Empty; + if (e != null) + strMsg = e.Message; + + if (ApplicationMessage.ApplicationMustExit == Type) { + strMsg += "\n\nThis sample will now exit."; + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + + // Close the window, which shuts down the app + if (this.IsHandleCreated) + this.Close(); + } + else { + if (ApplicationMessage.WarnSwitchToRef == Type) + strMsg = "\n\nSwitching to the reference rasterizer,\n"; + strMsg += "a software device that implements the entire\n"; + strMsg += "Direct3D feature set, but runs very slowly."; + + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + } + } + + + + + /// + /// Fired when our environment was resized + /// + /// the device that's resizing our environment + /// Set the cancel member to true to turn off automatic device reset + public void EnvironmentResized(object sender, System.ComponentModel.CancelEventArgs e) { + // Check to see if we're closing or changing the form style + if ((isClosing) || (isChangingFormStyle)) { + // We are, cancel our reset, and exit + e.Cancel = true; + return; + } + + // Check to see if we're minimizing and our rendering object + // is not the form, if so, cancel the resize + if ((ourRenderTarget != this) && (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)) + e.Cancel = true; + + if (!isWindowActive) + e.Cancel = true; + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + } + + + + + /// + /// Called when user toggles between fullscreen mode and windowed mode + /// + public void ToggleFullscreen() { + int AdapterOrdinalOld = graphicsSettings.AdapterOrdinal; + DeviceType DevTypeOld = graphicsSettings.DevType; + + isHandlingSizeChanges = false; + isChangingFormStyle = true; + ready = false; + + // Toggle the windowed state + windowed = !windowed; + + // Save our maximized settings.. + if (!windowed && isMaximized) + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + + graphicsSettings.IsWindowed = windowed; + + // If AdapterOrdinal and DevType are the same, we can just do a Reset(). + // If they've changed, we need to do a complete device teardown/rebuild. + if (graphicsSettings.AdapterOrdinal == AdapterOrdinalOld && + graphicsSettings.DevType == DevTypeOld) { + BuildPresentParamsFromSettings(); + // Resize the 3D device + RETRY: + try { + device.Reset(presentParams); + } + catch { + if (windowed) + ForceWindowed(); + else { + // Sit in a loop until the device passes Reset() + try { + device.TestCooperativeLevel(); + } + catch(DeviceNotResetException) { + // Device still needs to be Reset. Try again. + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + goto RETRY; + } + } + } + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + else { + device.Dispose(); + device = null; + InitializeEnvironment(); + } + + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after resetting the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + + if (windowed) { + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; + isChangingFormStyle = false; + + // We were maximized, restore that state + if (isMaximized) { + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + } + this.SendToBack(); + this.BringToFront(); + this.ClientSize = storedSize; + this.Location = storedLocation; + } + else { + if (this.Menu != null) + this.Menu = null; + + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + isChangingFormStyle = false; + } + isHandlingSizeChanges = true; + ready = true; + } + + + + + /// + /// Switch to a windowed mode, even if that means picking a new device and/or adapter + /// + public void ForceWindowed() { + if (windowed) + return; + + if (!FindBestWindowedMode(false, false)) { + return; + } + windowed = true; + + // Now destroy the current 3D device objects, then reinitialize + + ready = false; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Create the new device + try { + InitializeEnvironment(); + } + catch (SampleException e) { + HandleSampleException(e,ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(),ApplicationMessage.ApplicationMustExit); + } + ready = true; + } + + + + + /// + /// Called when our sample has nothing else to do, and it's time to render + /// + private void FullRender() { + // Render a frame during idle time (no messages are waiting) + if (active && ready) { + try { + if ((deviceLost) || (System.Windows.Forms.Form.ActiveForm != this)) { + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + } + // Render a frame during idle time + if (active) { + Render3DEnvironment(); + } + } + catch (Exception ee) { + System.Windows.Forms.MessageBox.Show("An exception has occurred. This sample must exit.\r\n\r\n" + ee.ToString(), "Exception", + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + this.Close(); + } + } + } + + + + + /// + /// Run the simulation + /// + public void Run() { + // Now we're ready to recieve and process Windows messages. + System.Windows.Forms.Control mainWindow = this; + + // If the render target is a form and *not* this form, use that form instead, + // otherwise, use the main form. + if ((ourRenderTarget is System.Windows.Forms.Form) && (ourRenderTarget != this)) + mainWindow = ourRenderTarget; + + mainWindow.Show(); + while (mainWindow.Created) { + FullRender(); + System.Windows.Forms.Application.DoEvents(); + } + } + + + + + /// + /// Draws the scene + /// + public void Render3DEnvironment() { + if (deviceLost) { + try { + // Test the cooperative level to see if it's okay to render + device.TestCooperativeLevel(); + } + catch (DeviceLostException) { + // If the device was lost, do not render until we get it back + isHandlingSizeChanges = false; + isWindowActive = false; + return; + } + catch (DeviceNotResetException) { + // Check if the device needs to be resized. + + // If we are windowed, read the desktop mode and use the same format for + // the back buffer + if (windowed) { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + graphicsSettings.WindowedDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + presentParams.BackBufferFormat = graphicsSettings.WindowedDisplayMode.Format; + } + + // Reset the device and resize it + device.Reset(device.PresentationParameters); + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + deviceLost = false; + } + + // Get the app's time, in seconds. Skip rendering if no time elapsed + float fAppTime = DXUtil.Timer(DirectXTimer.GetApplicationTime); + float fElapsedAppTime = DXUtil.Timer(DirectXTimer.GetElapsedTime); + if ((0.0f == fElapsedAppTime) && frameMoving) + return; + + // FrameMove (animate) the scene + if (frameMoving || singleStep) { + // Store the time for the app + appTime = fAppTime; + elapsedTime = fElapsedAppTime; + + // Frame move the scene + FrameMove(); + + singleStep = false; + } + + // Render the scene as normal + Render(); + + UpdateStats(); + + try { + // Show the frame on the primary surface. + device.Present(); + } + catch(DeviceLostException) { + deviceLost = true; + } + } + + + + + /// + /// Update the various statistics the simulation keeps track of + /// + public void UpdateStats() { + // Keep track of the frame count + float time = DXUtil.Timer(DirectXTimer.GetAbsoluteTime); + ++frames; + + // Update the scene stats once per second + if (time - lastTime > 1.0f) { + framePerSecond = frames / (time - lastTime); + lastTime = time; + frames = 0; + + string strFmt; + Format fmtAdapter = graphicsSettings.DisplayMode.Format; + if (fmtAdapter == device.PresentationParameters.BackBufferFormat) { + strFmt = fmtAdapter.ToString(); + } + else { + strFmt = String.Format("backbuf {0}, adapter {1}", + device.PresentationParameters.BackBufferFormat.ToString(), fmtAdapter.ToString()); + } + + string strDepthFmt; + if (enumerationSettings.AppUsesDepthBuffer) { + strDepthFmt = String.Format(" ({0})", + graphicsSettings.DepthStencilBufferFormat.ToString()); + } + else { + // No depth buffer + strDepthFmt = ""; + } + + string strMultiSample; + switch (graphicsSettings.MultisampleType) { + case Direct3D.MultiSampleType.NonMaskable: strMultiSample = " (NonMaskable Multisample)"; break; + case Direct3D.MultiSampleType.TwoSamples: strMultiSample = " (2x Multisample)"; break; + case Direct3D.MultiSampleType.ThreeSamples: strMultiSample = " (3x Multisample)"; break; + case Direct3D.MultiSampleType.FourSamples: strMultiSample = " (4x Multisample)"; break; + case Direct3D.MultiSampleType.FiveSamples: strMultiSample = " (5x Multisample)"; break; + case Direct3D.MultiSampleType.SixSamples: strMultiSample = " (6x Multisample)"; break; + case Direct3D.MultiSampleType.SevenSamples: strMultiSample = " (7x Multisample)"; break; + case Direct3D.MultiSampleType.EightSamples: strMultiSample = " (8x Multisample)"; break; + case Direct3D.MultiSampleType.NineSamples: strMultiSample = " (9x Multisample)"; break; + case Direct3D.MultiSampleType.TenSamples: strMultiSample = " (10x Multisample)"; break; + case Direct3D.MultiSampleType.ElevenSamples: strMultiSample = " (11x Multisample)"; break; + case Direct3D.MultiSampleType.TwelveSamples: strMultiSample = " (12x Multisample)"; break; + case Direct3D.MultiSampleType.ThirteenSamples: strMultiSample = " (13x Multisample)"; break; + case Direct3D.MultiSampleType.FourteenSamples: strMultiSample = " (14x Multisample)"; break; + case Direct3D.MultiSampleType.FifteenSamples: strMultiSample = " (15x Multisample)"; break; + case Direct3D.MultiSampleType.SixteenSamples: strMultiSample = " (16x Multisample)"; break; + default: strMultiSample = string.Empty; break; + } + frameStats = String.Format("{0} fps ({1}x{2}), {3}{4}{5}", framePerSecond.ToString("f2"), + device.PresentationParameters.BackBufferWidth, device.PresentationParameters.BackBufferHeight, + strFmt, strDepthFmt, strMultiSample); + } + } + + + + + /// + /// Called in to toggle the pause state of the app. + /// + /// true if the simulation should pause + public void Pause(bool pause) { + appPausedCount += (int)(pause ? +1 : -1); + ready = ((appPausedCount > 0) ? false : true); + + // Handle the first pause request (of many, nestable pause requests) + if (pause && (1 == appPausedCount)) { + // Stop the scene from animating + if (frameMoving) + DXUtil.Timer(DirectXTimer.Stop); + } + + if (0 == appPausedCount) { + // Restart the timers + if (frameMoving) + DXUtil.Timer(DirectXTimer.Start); + } + } + + + + + /// + /// Set our variables to not active and not ready + /// + public void CleanupEnvironment() { + active = false; + ready = false; + if (device != null) + device.Dispose(); + + device = null; + } + #region Menu EventHandlers + + + + + /// + /// Prepares the simulation for a new device being selected + /// + public void UserSelectNewDevice(object sender, EventArgs e) { + // Prompt the user to select a new device or mode + if (active && ready) { + Pause(true); + DoSelectNewDevice(); + Pause(false); + } + } + + + + + /// + /// Displays a dialog so the user can select a new adapter, device, or + /// display mode, and then recreates the 3D environment if needed + /// + private void DoSelectNewDevice() { + isHandlingSizeChanges = false; + // Can't display dialogs in fullscreen mode + if (windowed == false) { + try { + ToggleFullscreen(); + isHandlingSizeChanges = false; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + return; + } + } + + // Make sure the main form is in the background + this.SendToBack(); + D3DSettingsForm settingsForm = new D3DSettingsForm(enumerationSettings, graphicsSettings); + System.Windows.Forms.DialogResult result = settingsForm.ShowDialog(null); + if (result != System.Windows.Forms.DialogResult.OK) { + isHandlingSizeChanges = true; + return; + } + graphicsSettings = settingsForm.settings; + + windowed = graphicsSettings.IsWindowed; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Inform the display class of the change. It will internally + // re-create valid surfaces, a d3ddevice, etc. + try { + InitializeEnvironment(); + } + catch(SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + isHandlingSizeChanges = true; + } + + + + + /// + /// Will start (or stop) simulation + /// + private void ToggleStart(object sender, EventArgs e) { + //Toggle frame movement + frameMoving = !frameMoving; + DXUtil.Timer(frameMoving ? DirectXTimer.Start : DirectXTimer.Stop); + } + + + + + /// + /// Will single step the simulation + /// + private void SingleStep(object sender, EventArgs e) { + // Single-step frame movement + if (false == frameMoving) + DXUtil.Timer(DirectXTimer.Advance); + else + DXUtil.Timer(DirectXTimer.Stop); + frameMoving = false; + singleStep = true; + } + + + + + /// + /// Will end the simulation + /// + private void ExitSample(object sender, EventArgs e) { + this.Close(); + } + #endregion + + + + + #region WinForms Overrides + /// + /// Clean up any resources + /// + protected override void Dispose(bool disposing) { + CleanupEnvironment(); + mnuMain.Dispose(); + base.Dispose(disposing); + } + + + + + /// + /// Handle any key presses + /// + protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) { + // Check for our shortcut keys (Return to start or stop) + if (e.KeyChar == '\r') { + mnuGo.PerformClick(); + e.Handled = true; + } + + // Check for our shortcut keys (Escape to quit) + if ((byte)e.KeyChar == (byte)(int)System.Windows.Forms.Keys.Escape) { + mnuExit.PerformClick(); + e.Handled = true; + } + + // Allow the control to handle the keystroke now + base.OnKeyPress(e); + } + + + + + /// + /// Handle system keystrokes (ie, alt-enter) + /// + protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e) { + if ((e.Alt) && (e.KeyCode == System.Windows.Forms.Keys.Return)) { + // Toggle the fullscreen/window mode + if (active && ready) { + Pause(true); + + try { + ToggleFullscreen(); + Pause(false); + return; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + } + finally { + e.Handled = true; + } + } + } + // Allow the control to handle the keystroke now + base.OnKeyDown(e); + } + + + + + /// + /// Winforms generated code for initializing the form + /// + private void InitializeComponent() { + // + // GraphicsSample + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.MinimumSize = new System.Drawing.Size(100, 100); + #region MenuCreation/etc + this.mnuMain = new System.Windows.Forms.MainMenu(); + this.mnuFile = new System.Windows.Forms.MenuItem(); + this.mnuGo = new System.Windows.Forms.MenuItem(); + this.mnuSingle = new System.Windows.Forms.MenuItem(); + this.mnuBreak1 = new System.Windows.Forms.MenuItem(); + this.mnuChange = new System.Windows.Forms.MenuItem(); + this.mnuBreak2 = new System.Windows.Forms.MenuItem(); + this.mnuExit = new System.Windows.Forms.MenuItem(); + // + // mainMenu1 + // + this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuFile}); + // + // mnuFile + // + this.mnuFile.Index = 0; + this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuGo, + this.mnuSingle, + this.mnuBreak1, + this.mnuChange, + this.mnuBreak2, + this.mnuExit}); + this.mnuFile.Text = "&File"; + // + // mnuGo + // + this.mnuGo.Index = 0; + this.mnuGo.Text = "&Go/stop\tEnter"; + this.mnuGo.Click += new System.EventHandler(this.ToggleStart); + // + // mnuSingle + // + this.mnuSingle.Index = 1; + this.mnuSingle.Text = "&Single step\tSpace"; + this.mnuSingle.Click += new System.EventHandler(this.SingleStep); + // + // mnuBreak1 + // + this.mnuBreak1.Index = 2; + this.mnuBreak1.Text = "-"; + // + // mnuChange + // + this.mnuChange.Index = 3; + this.mnuChange.Shortcut = System.Windows.Forms.Shortcut.F2; + this.mnuChange.ShowShortcut = true; + this.mnuChange.Text = "&Change Device..."; + this.mnuChange.Click += new System.EventHandler(this.UserSelectNewDevice); + // + // mnuBreak2 + // + this.mnuBreak2.Index = 4; + this.mnuBreak2.Text = "-"; + // + // mnuExit + // + this.mnuExit.Index = 5; + this.mnuExit.Text = "E&xit\tESC"; + this.mnuExit.Click += new System.EventHandler(this.ExitSample); + #endregion + } + + + + + /// + /// When the menu is starting pause our simulation + /// + protected override void OnMenuStart(System.EventArgs e) { + Pause(true); // Pause the simulation while the menu starts + } + + + + + /// + /// When the menu is complete our simulation can continue + /// + protected override void OnMenuComplete(System.EventArgs e) { + Pause(false); // Unpause the simulation + } + + + + + /// + /// Make sure our graphics cursor (if available) moves with the cursor + /// + protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e) { + if ((device != null) && (!device.Disposed)) { + // Move the D3D cursor + device.SetCursorPosition(e.X, e.Y, false); + } + // Let the control handle the mouse now + base.OnMouseMove(e); + } + + + + + /// + /// Handle size changed events + /// + protected override void OnSizeChanged(System.EventArgs e) { + this.OnResize(e); + base.OnSizeChanged(e); + } + + + + + /// + /// Handle resize events + /// + protected override void OnResize(System.EventArgs e) { + if (isHandlingSizeChanges) { + // Are we maximized? + isMaximized = (this.WindowState == System.Windows.Forms.FormWindowState.Maximized); + if (!isMaximized) { + storedSize = this.ClientSize; + storedLocation = this.Location; + } + } + active = !(this.WindowState == System.Windows.Forms.FormWindowState.Minimized || this.Visible == false); + base.OnResize(e); + } + + + + + /// + /// Once the form has focus again, we can continue to handle our resize + /// and resets.. + /// + protected override void OnGotFocus(System.EventArgs e) { + isHandlingSizeChanges = true; + isWindowActive = true; + base.OnGotFocus (e); + } + + + + + /// + /// Handle move events + /// + protected override void OnMove(System.EventArgs e) { + if (isHandlingSizeChanges) { + storedLocation = this.Location; + } + base.OnMove(e); + } + + + + + /// + /// Handle closing event + /// + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { + isClosing = true; + base.OnClosing(e); + } + #endregion + + +} + +#region Enums for D3D Applications +/// +/// Messages that can be used when displaying an error +/// +public enum ApplicationMessage { + None, + ApplicationMustExit, + WarnSwitchToRef +}; +#endregion + + + + +#region Various SampleExceptions +/// +/// The default sample exception type +/// +public class SampleException : System.ApplicationException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + + strMsg = "Generic application error. Enable\n"; + strMsg += "debug output for detailed information."; + + return strMsg; + } + } +} + + + + +/// +/// Exception informing user no compatible devices were found +/// +public class NoCompatibleDevicesException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "This sample cannot run in a desktop\n"; + strMsg += "window with the current display settings.\n"; + strMsg += "Please change your desktop settings to a\n"; + strMsg += "16- or 32-bit display mode and re-run this\n"; + strMsg += "sample."; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when the ReferenceDevice is null +/// +public class NullReferenceDeviceException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Warning: Nothing will be rendered.\n"; + strMsg += "The reference rendering device was selected, but your\n"; + strMsg += "computer only has a reduced-functionality reference device\n"; + strMsg += "installed. Install the DirectX SDK to get the full\n"; + strMsg += "reference device.\n"; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when reset fails +/// +public class ResetFailedException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not reset the Direct3D device."; + + return strMsg; + } + } +} + + + + +/// +/// The exception thrown when media couldn't be found +/// +public class MediaNotFoundException : SampleException { + private string mediaFile; + public MediaNotFoundException(string filename) : base() { + mediaFile = filename; + } + public MediaNotFoundException() : base() { + mediaFile = string.Empty; + } + + + + + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not load required media."; + if (mediaFile.Length > 0) + strMsg += string.Format("\r\nFile: {0}", mediaFile); + + return strMsg; + } + } +} +#endregion + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/d3dapp.resx b/Source Code updated 08-12-05/Spacewar3D/Step09/d3dapp.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/d3dapp.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/d3denumeration.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/d3denumeration.cs new file mode 100644 index 0000000..47c1c6a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/d3denumeration.cs @@ -0,0 +1,449 @@ +//----------------------------------------------------------------------------- +// File: D3DEnumeration.cs +// +// Desc: Enumerates D3D adapters, devices, modes, etc. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + + + +/// +/// Enumeration of all possible D3D vertex processing types +/// +public enum VertexProcessingType { + Software, + Mixed, + Hardware, + PureHardware +} + + + + +/// +/// Info about a display adapter +/// +public class GraphicsAdapterInfo { + public int AdapterOrdinal; + public AdapterDetails AdapterDetails; + public ArrayList DisplayModeList = new ArrayList(); // List of D3DDISPLAYMODEs + public ArrayList DeviceInfoList = new ArrayList(); // List of D3DDeviceInfos + public override string ToString() { return AdapterDetails.Description; } +} + + + + +/// +/// Info about a D3D device, including a list of DeviceCombos (see below) +/// that work with the device +/// +public class GraphicsDeviceInfo { + public int AdapterOrdinal; + public DeviceType DevType; + public Caps Caps; + public ArrayList DeviceComboList = new ArrayList(); // List of D3DDeviceCombos + public override string ToString() { return DevType.ToString(); } +} + + + + +/// +/// Info about a depth/stencil buffer format that is incompatible with a +/// multisample type +/// +public class DepthStencilMultiSampleConflict { + public DepthFormat DepthStencilFormat; + public MultiSampleType MultiSampleType; +} + + + + +/// +/// A combination of adapter format, back buffer format, and windowed/fullscreen +/// that is compatible with a particular D3D device (and the app) +/// +public class DeviceCombo { + public int AdapterOrdinal; + public DeviceType DevType; + public Format AdapterFormat; + public Format BackBufferFormat; + public bool IsWindowed; + public ArrayList DepthStencilFormatList = new ArrayList(); // List of D3DFORMATs + public ArrayList MultiSampleTypeList = new ArrayList(); // List of D3DMULTISAMPLE_TYPEs + public ArrayList MultiSampleQualityList = new ArrayList(); // List of ints (maxQuality per multisample type) + public ArrayList DepthStencilMultiSampleConflictList = new ArrayList(); // List of DepthStencilMultiSampleConflicts + public ArrayList VertexProcessingTypeList = new ArrayList(); // List of VertexProcessingTypes + public ArrayList PresentIntervalList = new ArrayList(); // List of D3DPRESENT_INTERVALs +} + + + + +/// +/// Used to sort Displaymodes +/// +class DisplayModeComparer : System.Collections.IComparer { + /// + /// Compare two display modes + /// + public int Compare(object x, object y) { + DisplayMode dx = (DisplayMode)x; + DisplayMode dy = (DisplayMode)y; + + if (dx.Width > dy.Width) + return 1; + if (dx.Width < dy.Width) + return -1; + if (dx.Height > dy.Height) + return 1; + if (dx.Height < dy.Height) + return -1; + if (dx.Format > dy.Format) + return 1; + if (dx.Format < dy.Format) + return -1; + if (dx.RefreshRate > dy.RefreshRate) + return 1; + if (dx.RefreshRate < dy.RefreshRate) + return -1; + return 0; + } +} + + + + +/// +/// Enumerates available adapters, devices, modes, etc. +/// +public class D3DEnumeration { + /// + /// The confirm device delegate which is used to determine if a device + /// meets the needs of the simulation + /// + public delegate bool ConfirmDeviceCallbackType(Caps caps, + VertexProcessingType vertexProcessingType, Format adapterFormat, + Format backBufferFormat); + + public ConfirmDeviceCallbackType ConfirmDeviceCallback; + public ArrayList AdapterInfoList = new ArrayList(); // List of D3DAdapterInfos + + // The following variables can be used to limit what modes, formats, + // etc. are enumerated. Set them to the values you want before calling + // Enumerate(). + public int AppMinFullscreenWidth = 640; + public int AppMinFullscreenHeight = 480; + public int AppMinColorChannelBits = 5; // min color bits per channel in adapter format + public int AppMinAlphaChannelBits = 0; // min alpha bits per pixel in back buffer format + public int AppMinDepthBits = 15; + public int AppMinStencilBits = 0; + public bool AppUsesDepthBuffer = true; + public bool AppUsesMixedVP = false; // whether app can take advantage of mixed vp mode + public bool AppRequiresWindowed = false; + public bool AppRequiresFullscreen = false; + + + + + /// + /// Enumerates available D3D adapters, devices, modes, etc. + /// + public void Enumerate() { + foreach (AdapterInformation ai in Manager.Adapters) { + ArrayList adapterFormatList = new ArrayList(); + GraphicsAdapterInfo adapterInfo = new GraphicsAdapterInfo(); + adapterInfo.AdapterOrdinal = ai.Adapter; + adapterInfo.AdapterDetails = ai.Information; + + // Get list of all display modes on this adapter. + // Also build a temporary list of all display adapter formats. + foreach (DisplayMode displayMode in ai.SupportedDisplayModes) { + if (displayMode.Width < AppMinFullscreenWidth) + continue; + if (displayMode.Height < AppMinFullscreenHeight) + continue; + if (GraphicsUtility.GetColorChannelBits(displayMode.Format) < AppMinColorChannelBits) + continue; + adapterInfo.DisplayModeList.Add(displayMode); + if (!adapterFormatList.Contains(displayMode.Format)) + adapterFormatList.Add(displayMode.Format); + } + + // Sort displaymode list + DisplayModeComparer dmc = new DisplayModeComparer(); + adapterInfo.DisplayModeList.Sort(dmc); + + // Get info for each device on this adapter + EnumerateDevices(adapterInfo, adapterFormatList); + + // If at least one device on this adapter is available and compatible + // with the app, add the adapterInfo to the list + if (adapterInfo.DeviceInfoList.Count == 0) + continue; + AdapterInfoList.Add(adapterInfo); + } + } + + + + + /// + /// Enumerates D3D devices for a particular adapter + /// + protected void EnumerateDevices(GraphicsAdapterInfo adapterInfo, ArrayList adapterFormatList) { + DeviceType[] devTypeArray = new DeviceType[] { + DeviceType.Hardware, DeviceType.Software, DeviceType.Reference }; + + foreach (DeviceType devType in devTypeArray) { + GraphicsDeviceInfo deviceInfo = new GraphicsDeviceInfo(); + deviceInfo.AdapterOrdinal = adapterInfo.AdapterOrdinal; + deviceInfo.DevType = devType; + try { + deviceInfo.Caps = Manager.GetDeviceCaps(adapterInfo.AdapterOrdinal, devType); + } + catch (DirectXException) { + continue; + } + + // Get info for each devicecombo on this device + EnumerateDeviceCombos(deviceInfo, adapterFormatList); + + // If at least one devicecombo for this device is found, + // add the deviceInfo to the list + if (deviceInfo.DeviceComboList.Count == 0) + continue; + adapterInfo.DeviceInfoList.Add(deviceInfo); + } + } + + + + + /// + /// Enumerates DeviceCombos for a particular device + /// + protected void EnumerateDeviceCombos(GraphicsDeviceInfo deviceInfo, ArrayList adapterFormatList) { + Format[] backBufferFormatArray = new Format[] { + Format.A8R8G8B8, Format.X8R8G8B8, Format.A2R10G10B10, + Format.R5G6B5, Format.A1R5G5B5, Format.X1R5G5B5, + }; + bool[] isWindowedArray = new bool[] { false, true }; + + // See which adapter formats are supported by this device + foreach (Format adapterFormat in adapterFormatList) { + foreach (Format backBufferFormat in backBufferFormatArray) { + if (GraphicsUtility.GetAlphaChannelBits(backBufferFormat) < AppMinAlphaChannelBits) + continue; + foreach (bool isWindowed in isWindowedArray) { + if (!isWindowed && AppRequiresWindowed) + continue; + if (isWindowed && AppRequiresFullscreen) + continue; + if (!Manager.CheckDeviceType(deviceInfo.AdapterOrdinal, deviceInfo.DevType, adapterFormat, backBufferFormat, isWindowed)) { + continue; + } + + // At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed + // DeviceCombo that is supported by the system. We still need to confirm that it's + // compatible with the app, and find one or more suitable depth/stencil buffer format, + // multisample type, vertex processing type, and present interval. + DeviceCombo deviceCombo = new DeviceCombo(); + deviceCombo.AdapterOrdinal = deviceInfo.AdapterOrdinal; + deviceCombo.DevType = deviceInfo.DevType; + deviceCombo.AdapterFormat = adapterFormat; + deviceCombo.BackBufferFormat = backBufferFormat; + deviceCombo.IsWindowed = isWindowed; + if (AppUsesDepthBuffer) { + BuildDepthStencilFormatList(deviceCombo); + if (deviceCombo.DepthStencilFormatList.Count == 0) + continue; + } + BuildMultiSampleTypeList(deviceCombo); + if (deviceCombo.MultiSampleTypeList.Count == 0) + continue; + BuildDepthStencilMultiSampleConflictList(deviceCombo); + BuildVertexProcessingTypeList(deviceInfo, deviceCombo); + if (deviceCombo.VertexProcessingTypeList.Count == 0) + continue; + BuildPresentIntervalList(deviceInfo, deviceCombo); + if (deviceCombo.PresentIntervalList.Count == 0) + continue; + + deviceInfo.DeviceComboList.Add(deviceCombo); + } + } + } + } + + + + + /// + /// Adds all depth/stencil formats that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildDepthStencilFormatList(DeviceCombo deviceCombo) { + DepthFormat[] depthStencilFormatArray = { + DepthFormat.D16, + DepthFormat.D15S1, + DepthFormat.D24X8, + DepthFormat.D24S8, + DepthFormat.D24X4S4, + DepthFormat.D32, + }; + + foreach (DepthFormat depthStencilFmt in depthStencilFormatArray) { + if (GraphicsUtility.GetDepthBits(depthStencilFmt) < AppMinDepthBits) + continue; + if (GraphicsUtility.GetStencilBits(depthStencilFmt) < AppMinStencilBits) + continue; + if (Manager.CheckDeviceFormat(deviceCombo.AdapterOrdinal, deviceCombo.DevType, deviceCombo.AdapterFormat, + Usage.DepthStencil, ResourceType.Surface, depthStencilFmt)) { + if (Manager.CheckDepthStencilMatch(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat, depthStencilFmt)) { + deviceCombo.DepthStencilFormatList.Add(depthStencilFmt); + } + } + } + } + + + + + /// + /// Adds all multisample types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildMultiSampleTypeList(DeviceCombo deviceCombo) { + MultiSampleType[] msTypeArray = { + MultiSampleType.None, + MultiSampleType.NonMaskable, + MultiSampleType.TwoSamples, + MultiSampleType.ThreeSamples, + MultiSampleType.FourSamples, + MultiSampleType.FiveSamples, + MultiSampleType.SixSamples, + MultiSampleType.SevenSamples, + MultiSampleType.EightSamples, + MultiSampleType.NineSamples, + MultiSampleType.TenSamples, + MultiSampleType.ElevenSamples, + MultiSampleType.TwelveSamples, + MultiSampleType.ThirteenSamples, + MultiSampleType.FourteenSamples, + MultiSampleType.FifteenSamples, + MultiSampleType.SixteenSamples, + }; + + foreach (MultiSampleType msType in msTypeArray) { + int result; + int qualityLevels = 0; + if (Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.BackBufferFormat, deviceCombo.IsWindowed, msType, out result, out qualityLevels)) { + deviceCombo.MultiSampleTypeList.Add(msType); + deviceCombo.MultiSampleQualityList.Add(qualityLevels); + } + } + } + + + + + /// + /// Finds any depthstencil formats that are incompatible with multisample types and + /// builds a list of them. + /// + public void BuildDepthStencilMultiSampleConflictList(DeviceCombo deviceCombo) { + DepthStencilMultiSampleConflict DSMSConflict; + + foreach (DepthFormat dsFmt in deviceCombo.DepthStencilFormatList) { + foreach (MultiSampleType msType in deviceCombo.MultiSampleTypeList) { + if (!Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, + deviceCombo.DevType, (Format)dsFmt, deviceCombo.IsWindowed, msType)) { + DSMSConflict = new DepthStencilMultiSampleConflict(); + DSMSConflict.DepthStencilFormat = dsFmt; + DSMSConflict.MultiSampleType = msType; + deviceCombo.DepthStencilMultiSampleConflictList.Add(DSMSConflict); + } + } + } + } + + + + + /// + /// Adds all vertex processing types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildVertexProcessingTypeList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + if (deviceInfo.Caps.DeviceCaps.SupportsHardwareTransformAndLight) { + if (deviceInfo.Caps.DeviceCaps.SupportsPureDevice) { + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.PureHardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.PureHardware); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Hardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Hardware); + } + if (AppUsesMixedVP && (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Mixed, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat))) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Mixed); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Software, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Software); + } + } + + + + + /// + /// Adds all present intervals that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildPresentIntervalList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + PresentInterval[] piArray = { + PresentInterval.Immediate, + PresentInterval.Default, + PresentInterval.One, + PresentInterval.Two, + PresentInterval.Three, + PresentInterval.Four, + }; + + foreach (PresentInterval pi in piArray) { + if (deviceCombo.IsWindowed) { + if (pi == PresentInterval.Two || + pi == PresentInterval.Three || + pi == PresentInterval.Four) { + // These intervals are not supported in windowed mode. + continue; + } + } + // Note that PresentInterval.Default is zero, so you + // can't do a caps check for it -- it is always available. + if (pi == PresentInterval.Default || + (deviceInfo.Caps.PresentationIntervals & pi) != (PresentInterval)0) { + deviceCombo.PresentIntervalList.Add(pi); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/d3dfont.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/d3dfont.cs new file mode 100644 index 0000000..2b374eb --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/d3dfont.cs @@ -0,0 +1,666 @@ +//----------------------------------------------------------------------------- +// File: D3DFont.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// A generic font class +/// +public class GraphicsFont { + public const int MaxNumfontVertices = 50*6; + + // Font rendering flags + [System.Flags] + public enum RenderFlags { + Centered = 0x0001, + TwoSided = 0x0002, + Filtered = 0x0004, + } + private System.Drawing.Font systemFont; + + private bool isZEnable = false; + public bool ZBufferEnable { get { return isZEnable; } set { isZEnable = value; } } + string ourFontName; // Font properties + int ourFontHeight; + + private Direct3D.Device device; + private TextureStateManager textureState0; + private TextureStateManager textureState1; + private SamplerStateManager samplerState0; + private RenderStateManager renderState; + private Direct3D.Texture fontTexture; + private Direct3D.VertexBuffer vertexBuffer; + private CustomVertex.TransformedColoredTextured[] fontVertices = new CustomVertex.TransformedColoredTextured[MaxNumfontVertices]; + + private int textureWidth; // Texture dimensions + private int textureHeight; + private float textureScale; + private int spacingPerChar; + private float[,] textureCoords = new float[128-32,4]; + + // Stateblocks for setting and restoring render states + private StateBlock savedStateBlock; + private StateBlock drawTextStateBlock; + + + + + /// + /// Create a new font object + /// + /// The font to use + public GraphicsFont(System.Drawing.Font f) { + ourFontName = f.Name; + ourFontHeight = (int)f.Size; + systemFont = f; + } + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName) : this(fontName, FontStyle.Regular, 12) { + } + + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName, FontStyle style) : this(fontName, style, 12) { + } + + + + + /// + /// Create a new font object + /// + /// The name of the font + /// The style + /// Size of the font + public GraphicsFont(string fontName, FontStyle style, int size) { + ourFontName = fontName; + ourFontHeight = size; + systemFont = new System.Drawing.Font(fontName, ourFontHeight, style); + } + + + + + /// + /// Attempt to draw the systemFont alphabet onto the provided texture + /// graphics. + /// + /// Graphics object on which to draw and measure the letters + /// If set, the method will test to see if the alphabet will fit without actually drawing + public void PaintAlphabet(Graphics g, bool measureOnly) { + string str; + float x = 0; + float y = 0; + Point p = new Point(0, 0); + Size size = new Size(0,0); + + // Calculate the spacing between characters based on line height + size = g.MeasureString(" ", systemFont).ToSize(); + x = spacingPerChar = (int) Math.Ceiling(size.Height * 0.3); + + for (char c = (char)32; c < (char)127; c++) { + str = c.ToString(); + // We need to do some things here to get the right sizes. The default implemententation of MeasureString + // will return a resolution independant size. For our height, this is what we want. However, for our width, we + // want a resolution dependant size. + Size resSize = g.MeasureString(str, systemFont).ToSize(); + size.Height = resSize.Height + 1; + + // Now the Resolution independent width + if (c != ' ') { // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + resSize = g.MeasureString(str, systemFont, p, StringFormat.GenericTypographic).ToSize(); + size.Width = resSize.Width; + } + else + size.Width = resSize.Width; + + if ((x + size.Width + spacingPerChar) > textureWidth) { + x = spacingPerChar; + y += size.Height; + } + + // Make sure we have room for the current character + if ((y + size.Height) > textureHeight) + throw new System.InvalidOperationException("Texture too small for alphabet"); + + if (!measureOnly) { + if (c != ' ') // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y), StringFormat.GenericTypographic); + else + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y)); + textureCoords[c-32,0] = ((float) (x + 0 - spacingPerChar)) / textureWidth; + textureCoords[c-32,1] = ((float) (y + 0 + 0)) / textureHeight; + textureCoords[c-32,2] = ((float) (x + size.Width + spacingPerChar)) / textureWidth; + textureCoords[c-32,3] = ((float) (y + size.Height + 0)) / textureHeight; + } + + x += size.Width + (2 * spacingPerChar); + } + + } + + + + + /// + /// Initialize the device objects + /// + /// The grpahics device used to initialize + public void InitializeDeviceObjects(Device dev) { + if (dev != null) { + // Set up our events + dev.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Keep a local copy of the device + device = dev; + textureState0 = device.TextureState[0]; + textureState1 = device.TextureState[1]; + samplerState0 = device.SamplerState[0]; + renderState = device.RenderState; + + // Create a bitmap on which to measure the alphabet + Bitmap bmp = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Graphics g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Establish the font and texture size + textureScale = 1.0f; // Draw fonts into texture without scaling + + // Calculate the dimensions for the smallest power-of-two texture which + // can hold all the printable characters + textureWidth = textureHeight = 128; + for (;;) { + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // Scale up the texture size and try again + textureWidth *= 2; + textureHeight *= 2; + continue; + } + + break; + } + + // If requested texture is too big, use a smaller texture and smaller font, + // and scale up when rendering. + Direct3D.Caps d3dCaps = device.DeviceCaps; + + // If the needed texture is too large for the video card... + if (textureWidth > d3dCaps.MaxTextureWidth) { + // Scale the font size down to fit on the largest possible texture + textureScale = (float)d3dCaps.MaxTextureWidth / (float)textureWidth; + textureWidth = textureHeight = d3dCaps.MaxTextureWidth; + + for(;;) { + // Create a new, smaller font + ourFontHeight = (int) Math.Floor(ourFontHeight * textureScale); + systemFont = new System.Drawing.Font(systemFont.Name, ourFontHeight, systemFont.Style); + + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // If that still doesn't fit, scale down again and continue + textureScale *= 0.9F; + continue; + } + + break; + } + } + + // Release the bitmap used for measuring and create one for drawing + bmp.Dispose(); + bmp = new Bitmap(textureWidth, textureHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Draw the alphabet + PaintAlphabet(g, false); + + // Create a new texture for the font from the bitmap we just created + fontTexture = Texture.FromBitmap(device, bmp, 0, Pool.Managed); + RestoreDeviceObjects(null, null); + } + + + + + /// + /// Restore the font after a device has been reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColoredTextured), MaxNumfontVertices, + device, Usage.WriteOnly | Usage.Dynamic, 0, Pool.Default); + + Surface surf = device.GetRenderTarget( 0 ); + bool bSupportsAlphaBlend = Manager.CheckDeviceFormat(device.DeviceCaps.AdapterOrdinal, + device.DeviceCaps.DeviceType, device.DisplayMode.Format, + Usage.RenderTarget | Usage.QueryPostPixelShaderBlending, ResourceType.Surface, + surf.Description.Format ); + + // Create the state blocks for rendering text + for (int which=0; which < 2; which++) { + device.BeginStateBlock(); + device.SetTexture(0, fontTexture); + + if (isZEnable) + renderState.ZBufferEnable = true; + else + renderState.ZBufferEnable = false; + + if( bSupportsAlphaBlend ) { + renderState.AlphaBlendEnable = true; + renderState.SourceBlend = Blend.SourceAlpha; + renderState.DestinationBlend = Blend.InvSourceAlpha; + } + else { + renderState.AlphaBlendEnable = false; + } + renderState.AlphaTestEnable = true; + renderState.ReferenceAlpha = 0x08; + renderState.AlphaFunction = Compare.GreaterEqual; + renderState.FillMode = FillMode.Solid; + renderState.CullMode = Cull.CounterClockwise; + renderState.StencilEnable = false; + renderState.Clipping = true; + device.ClipPlanes.DisableAll(); + renderState.VertexBlend = VertexBlend.Disable; + renderState.IndexedVertexBlendEnable = false; + renderState.FogEnable = false; + renderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; + textureState0.ColorOperation = TextureOperation.Modulate; + textureState0.ColorArgument1 = TextureArgument.TextureColor; + textureState0.ColorArgument2 = TextureArgument.Diffuse; + textureState0.AlphaOperation = TextureOperation.Modulate; + textureState0.AlphaArgument1 = TextureArgument.TextureColor; + textureState0.AlphaArgument2 = TextureArgument.Diffuse; + textureState0.TextureCoordinateIndex = 0; + textureState0.TextureTransform = TextureTransform.Disable; // REVIEW + textureState1.ColorOperation = TextureOperation.Disable; + textureState1.AlphaOperation = TextureOperation.Disable; + samplerState0.MinFilter = TextureFilter.Point; + samplerState0.MagFilter = TextureFilter.Point; + samplerState0.MipFilter = TextureFilter.None; + + if (which==0) + savedStateBlock = device.EndStateBlock(); + else + drawTextStateBlock = device.EndStateBlock(); + } + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text) { + DrawText(xpos, ypos, color, text, RenderFlags.Filtered); + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text, RenderFlags flags) { + if (text == null) + return; + + // Setup renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.SetTexture(0, fontTexture); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Adjust for character spacing + xpos -= spacingPerChar; + float fStartX = xpos; + + // Fill vertex buffer + int iv = 0; + int dwNumTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / textureScale; + float h = (ty2-ty1) * textureHeight / textureScale; + + int intColor = color.ToArgb(); + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + dwNumTriangles += 2; + + if (dwNumTriangles*3 > (MaxNumfontVertices-6)) { + // Set the data for the vertexbuffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + dwNumTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar); + } + + // Set the data for the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (dwNumTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + Viewport vp = device.Viewport; + float xpos = (x+1.0f)*vp.Width/2; + float ypos = (y+1.0f)*vp.Height/2; + float sz = z; + float rhw = 1.0f; + float fLineHeight = (textureCoords[0,3] - textureCoords[0,1]) * textureHeight; + + // Adjust for character spacing + xpos -= spacingPerChar * (fXScale*vp.Height)/fLineHeight; + float fStartX = xpos; + + // Fill vertex buffer + int numTriangles = 0; + int realColor = color.ToArgb(); + int iv = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += fYScale*vp.Height; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1)*textureWidth; + float h = (ty2-ty1)*textureHeight; + + w *= (fXScale*vp.Height)/fLineHeight; + h *= (fYScale*vp.Height)/fLineHeight; + + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + numTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar) * (fXScale*vp.Height)/fLineHeight; + } + + // Unlock and render the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text) { + this.DrawTextScaled(x,y,z,fXScale, fYScale, color, text, 0); + } + + + + + /// + /// Renders 3D text + /// + public void Render3DText(string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.PositionNormalTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0, VertexInformation.GetFormatSize(CustomVertex.PositionNormalTextured.Format)); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Position for each text element + float x = 0.0f; + float y = 0.0f; + + // Center the text block at the origin + if ((flags & RenderFlags.Centered) != 0) { + System.Drawing.SizeF sz = GetTextExtent(text); + x = -(((float)sz.Width)/10.0f)/2.0f; + y = -(((float)sz.Height)/10.0f)/2.0f; + } + + // Turn off culling for two-sided text + if ((flags & RenderFlags.TwoSided) != 0) + renderState.CullMode = Cull.None; + + // Adjust for character spacing + x -= spacingPerChar / 10.0f; + float fStartX = x; + + // Fill vertex buffer + GraphicsStream strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + int numTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + x = fStartX; + y -= (textureCoords[0,3]-textureCoords[0,1])*textureHeight/10.0f; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / (10.0f * textureScale); + float h = (ty2-ty1) * textureHeight / (10.0f * textureScale); + + if (c != ' ') { + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+0,0), new Vector3(0,0,-1), tx1, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+h,0), new Vector3(0,0,-1), tx2, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.Unlock(); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + numTriangles = 0; + } + } + + x += w - (2 * spacingPerChar) / 10.0f; + } + + // Unlock and render the vertex buffer + vertexBuffer.Unlock(); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Get the dimensions of a text string + /// + private System.Drawing.SizeF GetTextExtent(string text) { + if (null == text || text == string.Empty) + throw new System.ArgumentNullException(); + + float fRowWidth = 0.0f; + float fRowHeight = (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + float fWidth = 0.0f; + float fHeight = fRowHeight; + + foreach (char c in text) { + if (c == '\n') { + fRowWidth = 0.0f; + fHeight += fRowHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float tx2 = textureCoords[c-32,2]; + + fRowWidth += (tx2-tx1)*textureWidth - 2*spacingPerChar; + + if (fRowWidth > fWidth) + fWidth = fRowWidth; + } + + return new System.Drawing.SizeF(fWidth, fHeight); + } + + + + + /// + /// Cleanup any resources being used + /// + public void Dispose(object sender, EventArgs e) { + if (systemFont != null) + systemFont.Dispose(); + + systemFont = null; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/d3dutil.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/d3dutil.cs new file mode 100644 index 0000000..ea2d5a3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/d3dutil.cs @@ -0,0 +1,928 @@ +//----------------------------------------------------------------------------- +// File: D3DUtil.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Windows.Forms; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// Various helper functions for graphics samples +/// +public class GraphicsUtility { + /// + /// Private Constructor + /// + private GraphicsUtility() { + } + + + + /// + /// Initializes a Material structure, setting the diffuse and ambient + /// colors. It does not set emissive or specular colors. + /// + /// The ambient and diffuse color + /// A defined material + public static Direct3D.Material InitMaterial(System.Drawing.Color c) { + Material mtrl = new Material(); + mtrl.Ambient = mtrl.Diffuse = c; + return mtrl; + } + + + + + /// + /// Initializes a light, setting the light position. The + /// diffuse color is set to white; specular and ambient are left as black. + /// + /// Which light to initialize + /// The type + public static void InitLight(Light light, LightType ltType, float x, float y, float z) { + light.Type = ltType; + light.Diffuse = System.Drawing.Color.White; + light.Position = new Vector3(x,y,z); + light.Direction = Vector3.Normalize(light.Position); + light.Range = 1000.0f; + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename, Format format) { + // Get the path to the texture + string path = DXUtil.FindMediaFile(null, textureFilename); + + // Create the texture using D3DX + return TextureLoader.FromFile(device, path, D3DX.Default, D3DX.Default, D3DX.Default, 0, format, + Pool.Managed, Filter.Triangle|Filter.Mirror, + Filter.Triangle|Filter.Mirror, 0); + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename) { + return GraphicsUtility.CreateTexture(device, textureFilename, Format.Unknown); + } + + + + + + /// + /// Returns a view matrix for rendering to a face of a cubemap. + /// + public static Matrix GetCubeMapViewMatrix(CubeMapFace face) { + Vector3 vEyePt = new Vector3(0.0f, 0.0f, 0.0f); + Vector3 vLookDir = new Vector3(); + Vector3 vUpDir = new Vector3(); + + switch (face) { + case CubeMapFace.PositiveX: + vLookDir = new Vector3(1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeX: + vLookDir = new Vector3(-1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.PositiveY: + vLookDir = new Vector3(0.0f, 1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f,-1.0f); + break; + case CubeMapFace.NegativeY: + vLookDir = new Vector3(0.0f,-1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f, 1.0f); + break; + case CubeMapFace.PositiveZ: + vLookDir = new Vector3(0.0f, 0.0f, 1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeZ: + vLookDir = new Vector3(0.0f, 0.0f,-1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + } + + // Set the view transform for this cubemap surface + Matrix matView = Matrix.LookAtLH(vEyePt, vLookDir, vUpDir); + return matView; + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control, float fTrackBallRadius) { + System.Drawing.Point pt = System.Windows.Forms.Cursor.Position; + System.Drawing.Rectangle rc = control.ClientRectangle; + pt = control.PointToClient(pt); + float xpos = (((2.0f * pt.X) / (rc.Right-rc.Left)) - 1); + float ypos = (((2.0f * pt.Y) / (rc.Bottom-rc.Top)) - 1); + float sz; + + if (xpos == 0.0f && ypos == 0.0f) + return new Quaternion(0.0f, 0.0f, 0.0f, 1.0f); + + float d2 = (float)Math.Sqrt(xpos*xpos + ypos*ypos); + + if (d2 < fTrackBallRadius * 0.70710678118654752440) // Inside sphere + sz = (float)Math.Sqrt(fTrackBallRadius*fTrackBallRadius - d2*d2); + else // On hyperbola + sz = (fTrackBallRadius*fTrackBallRadius) / (2.0f*d2); + + // Get two points on trackball's sphere + Vector3 p1 = new Vector3(xpos, ypos, sz); + Vector3 p2 = new Vector3(0.0f, 0.0f, fTrackBallRadius); + + // Get axis of rotation, which is cross product of p1 and p2 + Vector3 axis = Vector3.Cross(p1,p2); + + // Calculate angle for the rotation about that axis + float t = Vector3.Length(Vector3.Subtract(p2,p1)) / (2.0f*fTrackBallRadius); + if (t > +1.0f) t = +1.0f; + if (t < -1.0f) t = -1.0f; + float fAngle = (float)(2.0f * Math.Asin(t)); + + // Convert axis to quaternion + return Quaternion.RotationAxis(axis, fAngle); + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control) { + return GetRotationFromCursor(control, 1.0f); + } + + + + + /// + /// Axis to axis quaternion double angle (no normalization) + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by 2*THETA. + /// + public static Quaternion D3DXQuaternionUnitAxisToUnitAxis2(Vector3 fromVector, Vector3 toVector) { + Vector3 axis = Vector3.Cross(fromVector, toVector); // proportional to sin(theta) + return new Quaternion(axis.X, axis.Y, axis.Z, Vector3.Dot(fromVector, toVector)); + } + + + + + /// + /// Axis to axis quaternion + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by theta. + /// + public static Quaternion D3DXQuaternionAxisToAxis(Vector3 fromVector, Vector3 toVector) { + Vector3 vA = Vector3.Normalize(fromVector), vB = Vector3.Normalize(toVector); + Vector3 vHalf = Vector3.Add(vA,vB); + vHalf = Vector3.Normalize(vHalf); + return GraphicsUtility.D3DXQuaternionUnitAxisToUnitAxis2(vA, vHalf); + } + + + + + /// + /// Gets the number of ColorChanelBits from a format + /// + static public int GetColorChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 8; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 8; + case Format.R5G6B5: + return 5; + case Format.X1R5G5B5: + return 5; + case Format.A1R5G5B5: + return 5; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 2; + case Format.A8R3G3B2: + return 2; + case Format.X4R4G4B4: + return 4; + case Format.A2B10G10R10: + return 10; + case Format.A2R10G10B10: + return 10; + default: + return 0; + } + } + + + + + /// + /// Gets the number of alpha channel bits + /// + static public int GetAlphaChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 0; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 0; + case Format.R5G6B5: + return 0; + case Format.X1R5G5B5: + return 0; + case Format.A1R5G5B5: + return 1; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 0; + case Format.A8R3G3B2: + return 8; + case Format.X4R4G4B4: + return 0; + case Format.A2B10G10R10: + return 2; + case Format.A2R10G10B10: + return 2; + default: + return 0; + } + } + + + + + /// + /// Gets the number of depth bits + /// + static public int GetDepthBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 16; + case DepthFormat.D15S1: + return 15; + case DepthFormat.D24X8: + return 24; + case DepthFormat.D24S8: + return 24; + case DepthFormat.D24X4S4: + return 24; + case DepthFormat.D32: + return 32; + default: + return 0; + } + } + + + + + /// + /// Gets the number of stencil bits + /// + static public int GetStencilBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 0; + case DepthFormat.D15S1: + return 1; + case DepthFormat.D24X8: + return 0; + case DepthFormat.D24S8: + return 8; + case DepthFormat.D24X4S4: + return 4; + case DepthFormat.D32: + return 0; + default: + return 0; + } + } + + + + + /// + /// Assembles and creates a file-based vertex shader + /// + public static VertexShader CreateVertexShader(Device device, string filename) { + GraphicsStream code = null; + string path = null; + + // Get the path to the vertex shader file + path = DXUtil.FindMediaFile(null, filename); + + // Assemble the vertex shader file + code = ShaderLoader.FromFile(path, null, 0); + + // Create the vertex shader + return new VertexShader(device, code); + } + +} + + + + +/// +/// An arc ball class +/// +public class GraphicsArcBall { + private int internalWidth; // ArcBall's window width + private int internalHeight; // ArcBall's window height + private float internalradius; // ArcBall's radius in screen coords + private float internalradiusTranslation; // ArcBall's radius for translating the target + + private Quaternion internaldownQuat; // Quaternion before button down + private Quaternion internalnowQuat; // Composite quaternion for current drag + private Matrix internalrotationMatrix; // Matrix for arcball's orientation + private Matrix internalrotationDelta; // Matrix for arcball's orientation + private Matrix internaltranslationMatrix; // Matrix for arcball's position + private Matrix internaltranslationDelta; // Matrix for arcball's position + private bool internaldragging; // Whether user is dragging arcball + private bool internaluseRightHanded; // Whether to use RH coordinate system + private int saveMouseX = 0; // Saved mouse position + private int saveMouseY = 0; + private Vector3 internalvectorDown; // Button down vector + System.Windows.Forms.Control parent; // parent + + + + + /// + /// Constructor + /// + public GraphicsArcBall(System.Windows.Forms.Control p) { + internaldownQuat = Quaternion.Identity; + internalnowQuat = Quaternion.Identity; + internalrotationMatrix = Matrix.Identity; + internalrotationDelta = Matrix.Identity; + internaltranslationMatrix = Matrix.Identity; + internaltranslationDelta = Matrix.Identity; + internaldragging = false; + internalradiusTranslation = 1.0f; + internaluseRightHanded = false; + + parent = p; + // Hook the events + p.MouseDown += new MouseEventHandler(this.OnContainerMouseDown); + p.MouseUp += new MouseEventHandler(this.OnContainerMouseUp); + p.MouseMove += new MouseEventHandler(this.OnContainerMouseMove); + } + + + + + /// + /// Set the window dimensions + /// + public void SetWindow(int width, int height, float radius) { + // Set ArcBall info + internalWidth = width; + internalHeight = height; + internalradius = radius; + } + + + + + /// + /// Screen coords to a vector + /// + private Vector3 ScreenToVector(int xpos, int ypos) { + // Scale to screen + float x = -(xpos - internalWidth/2) / (internalradius*internalWidth/2); + float y = (ypos - internalHeight/2) / (internalradius*internalHeight/2); + + if (internaluseRightHanded) { + x = -x; + y = -y; + } + + float z = 0.0f; + float mag = x*x + y*y; + + if (mag > 1.0f) { + float scale = 1.0f/(float)Math.Sqrt(mag); + x *= scale; + y *= scale; + } + else + z = (float)Math.Sqrt(1.0f - mag); + + // Return vector + return new Vector3(x, y, z); + } + + + + + /// + /// Fired when the containers mouse button is down + /// + private void OnContainerMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { + // Store off the position of the cursor when the button is pressed + saveMouseX = e.X; + saveMouseY = e.Y; + + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // Start drag mode + internaldragging = true; + internalvectorDown = ScreenToVector(e.X, e.Y); + internaldownQuat = internalnowQuat; + } + } + + + + + /// + /// Fired when the containers mouse button has been released + /// + private void OnContainerMouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // End drag mode + internaldragging = false; + } + } + + + + + /// + /// Fired when the containers mouse is moving + /// + private void OnContainerMouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + if (internaldragging) { + // recompute nowQuat + Vector3 vCur = ScreenToVector(e.X, e.Y); + Quaternion qAxisToAxis = GraphicsUtility.D3DXQuaternionAxisToAxis(internalvectorDown, vCur); + internalnowQuat = internaldownQuat; + internalnowQuat = Quaternion.Multiply(internalnowQuat,qAxisToAxis); + internalrotationDelta = Matrix.RotationQuaternion(qAxisToAxis); + } + else + internalrotationDelta = Matrix.Identity; + + internalrotationMatrix = Matrix.RotationQuaternion(internalnowQuat); + internaldragging = true; + } + + if ((e.Button == System.Windows.Forms.MouseButtons.Right) || (e.Button == System.Windows.Forms.MouseButtons.Middle)) { + // Normalize based on size of window and bounding sphere radius + float fDeltaX = (saveMouseX-e.X) * internalradiusTranslation / internalWidth; + float fDeltaY = (saveMouseY-e.Y) * internalradiusTranslation / internalHeight; + + if (e.Button == System.Windows.Forms.MouseButtons.Right) { + internaltranslationDelta = Matrix.Translation(-2 * fDeltaX, 2 * fDeltaY, 0.0f); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + if (e.Button == System.Windows.Forms.MouseButtons.Middle) { + internaltranslationDelta = Matrix.Translation(0.0f, 0.0f, 5 * fDeltaY); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + + // Store mouse coordinate + saveMouseX = e.X; + saveMouseY = e.Y; + } + } + + #region Various properties of the class + public float Radius { + set { + internalradiusTranslation = value; } + } + public bool RightHanded { + get { return internaluseRightHanded; } + set { internaluseRightHanded = value; } + } + public Matrix RotationMatrix { + get { return internalrotationMatrix; } + } + public Matrix RotationDeltaMatrix { + get { return internalrotationDelta; } + } + public Matrix TranslationMatrix { + get { return internaltranslationMatrix; } + } + public Matrix TranslationDeltaMatrix { + get { return internaltranslationDelta; } + } + public bool IsBeingDragged { + get { return internaldragging; } + } + #endregion +} + + + + +/// +/// Handles our meshes +/// +public class GraphicsMesh : IDisposable { + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + + + + + /// + /// Constructor + /// + /// The initial filename + public GraphicsMesh(string filename) { + fileName = filename; + } + public GraphicsMesh() : this ("CD3DFile_Mesh") {} + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + string strPath = null; + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Find the path for the file, and convert it to ANSI (for the D3DX API) + strPath = DXUtil.FindMediaFile(null, filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(strPath, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + } + + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. Note: because we are passing in + // no flags, the default behavior is to clone into local memory. + localMemoryMesh = systemMemoryMesh.Clone(0, systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(Device device, bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render(Device device) { + Render(device, true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/dinput.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/dinput.cs new file mode 100644 index 0000000..f0829a0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/dinput.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + +/// +/// This class is where the DirectInput routines +/// for the application resides. +/// +public class InputClass { + + private Control owner = null; + private Device localDevice = null; + + public InputClass(Control owner) { + this.owner = owner; + + localDevice = new Device(SystemGuid.Keyboard); + localDevice.SetDataFormat(DeviceDataFormat.Keyboard); + localDevice.SetCooperativeLevel(owner, CooperativeLevelFlags.Foreground | CooperativeLevelFlags.NonExclusive); + } + + public KeyboardState GetInputState() { + KeyboardState kbState = null; + + try { + kbState = localDevice.GetCurrentKeyboardState(); + } + catch(InputException) { + do { + Application.DoEvents(); + try{ localDevice.Acquire(); } + catch (InputLostException) { + continue; } + catch(OtherApplicationHasPriorityException) { + continue; } + + break; + + }while( true ); + } + return kbState; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/dplay.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/dplay.cs new file mode 100644 index 0000000..5004530 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/dplay.cs @@ -0,0 +1,165 @@ +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +public struct Players { + public bool Active; + public int dpnID; + public string Name; + public Players(int id, string n, bool active) { + dpnID = id; Name = n; Active = active;} +} + + /// + /// The class that houses DirectPlay code for the application. + /// +public class PlayClass { + #region Fields and Properties + private GameClass game = null; + + private Peer peerObject = null; + + private bool isHost = false; + public bool IsHost { get { return isHost; } } + + private bool inSession = false; + public bool InSession { get { return inSession; } } + + private int localPlayerID = 0; + + + private Players remotePlayer; + public Players RemotePlayer { get {return remotePlayer; } } + + private ConnectWizard Connect = null; + + #endregion + + #region About Application Guids + // This guid allows DirectPlay to find other instances of the same game on + // the network, so it must be unique for every game, and the same for + // every instance of that game. You can use the guidgen.exe program to + // generate a new guid. + #endregion + private Guid AppGuid = new Guid( 0xc134dcd4, 0xff30, 0x4c86, 0x9a, 0x2e, 0xe0, 0x46, 0xa2, 0x21, 0xe3, 0x86 ); + + #region Constructor + + public PlayClass(GameClass Game) { + this.game = Game; + + //Initialize our peer to peer network object + peerObject = new Peer(); + + + // Set up our event handlers (We only need events for the ones we care about) + peerObject.PlayerCreated += new PlayerCreatedEventHandler(PlayerCreated); + peerObject.PlayerDestroyed += new PlayerDestroyedEventHandler(PlayerDestroyed); + peerObject.Receive += new ReceiveEventHandler(game.DataReceived); + peerObject.SessionTerminated += new SessionTerminatedEventHandler(SessionTerminated); + + // use the DirectPlay connection wizard to create our join sessions + Connect = new ConnectWizard(peerObject, AppGuid, "Spacewar3D"); + Connect.StartWizard(); + + inSession = Connect.InSession; + + if (inSession) { + isHost = Connect.IsHost; + } + + } + #endregion //Constructor + + #region Network Message functions + // These routines handle the communication between the game peers. + + + private void PlayerCreated(object sender, PlayerCreatedEventArgs dpMessage) { + // Get the PlayerInformation and store it + int playerID = dpMessage.Message.PlayerID; + PlayerInformation dpPeer = peerObject.GetPeerInformation(playerID); + Players oPlayer = new Players(playerID, dpPeer.Name.ToUpper(), true); + // Save this player id if it's ourselves + if (dpPeer.Local) + localPlayerID = dpMessage.Message.PlayerID; + else { + // We lock the data here since it is shared across multiple threads. + lock (this) { + remotePlayer = oPlayer; + } + game.RemotePlayerJoined(oPlayer.Name); + } + + + } + private void PlayerDestroyed(object sender, PlayerDestroyedEventArgs dpMessage) { + // Remove this player from our list + // We lock the data here since it is shared across multiple threads. + lock (this) { + remotePlayer.Active = false; + } + game.RemotePlayerLeft(remotePlayer.Name); + } + + + public void SendPlayerUpdate(PlayerUpdate update, ShotUpdate shotUpdate) { + if (inSession) { + NetworkPacket packet = new NetworkPacket(); + packet.Write((byte)MessageType.PlayerUpdateID); + packet.Write(update); + + for (int i = 0; i < Constants.NumShots; i++) { + packet.Write(shotUpdate.ShotPosition[i]); + packet.Write(shotUpdate.ShotAge[i]); + packet.Write(shotUpdate.ShotAlive[i]); + } + + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.NoComplete | SendFlags.NoLoopback); + } + } + + public void SendGameState(GameStates gameState) { + if (inSession) { + byte messageType; + switch (gameState) { + case GameStates.Paused: { + messageType = (byte)MessageType.GamePaused; + break; + } + case GameStates.Running: { + messageType = (byte)MessageType.GameRunning; + break; + } + default: { + return; + } + } + NetworkPacket packet = new NetworkPacket(); + packet.Write(messageType); + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.Guaranteed | SendFlags.NoLoopback); + } + } + + public void SendScorePoint() { + if (inSession) { + NetworkPacket packet = new NetworkPacket(); + packet.Write((byte)MessageType.Add1ToScore); + peerObject.SendTo(remotePlayer.dpnID, packet, 0, SendFlags.Guaranteed | SendFlags.NoLoopback); + } + } + + #endregion // Network message functions + + #region Cleanup + private void SessionTerminated(object sender, SessionTerminatedEventArgs stea) { + inSession = false; + isHost = false; + } + + #endregion //Cleanup +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step09/main.cs b/Source Code updated 08-12-05/Spacewar3D/Step09/main.cs new file mode 100644 index 0000000..1ed0210 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step09/main.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Container = System.ComponentModel.Container; + + + /// + /// The main windows form for the application. + /// +public class MainClass { + + private GameClass game = null; + private SplashScreen splash = null; + private bool enableNetwork = false; + public bool EnableNetwork { get { return enableNetwork; } set { enableNetwork = value; } } + + private Size gameFormSize; + public Size GameFormSize { get { return gameFormSize; } set { gameFormSize = value; } } + + private bool fullScreen = false; + public bool FullScreen { get { return fullScreen; } set { fullScreen = value; } } + + /// + // Main entry point of the application. + /// + public static void Main() { + MainClass m = new MainClass(); + } + + public MainClass() { + + //display the splash screen and determine network status + splash = new SplashScreen(this); + splash.ShowDialog(); + + try { + game = new GameClass(fullScreen, gameFormSize, enableNetwork); + } + catch(DirectXException) { + return; + } + if( game.CreateGraphicsSample() ) + game.Run(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/App.config b/Source Code updated 08-12-05/Spacewar3D/Step10/App.config new file mode 100644 index 0000000..5bbb96b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/BGPointer.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/BGPointer.cs new file mode 100644 index 0000000..dd4b54c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/BGPointer.cs @@ -0,0 +1,39 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// Summary description for BGPointer. + /// +public class BGPointer { + private PositionedMesh arrowMesh; + private Device device; + + + public BGPointer(Device device) { + this.device = device; + arrowMesh = new PositionedMesh(device,"arrow-yel.x"); + arrowMesh.Position.Scale(2.0f, 2.0f, 2.0f); + } + + public void Render() { + arrowMesh.Render(); + } + + public void Point(WorldPosition ourPosition, WorldPosition opponentWorldPosition) { + arrowMesh.Position.Move(ourPosition.Location.X, ourPosition.Location.Y, + ourPosition.Location.Z); + Vector3 pointVector = opponentWorldPosition.Location - ourPosition.Location; + + + float XRot, YRot; + + XRot = (float) Math.Atan2(-pointVector.Y, Math.Sqrt(pointVector.X * pointVector.X + + pointVector.Z * pointVector.Z)); + YRot = (float) Math.Atan2(pointVector.X, pointVector.Z); + + arrowMesh.Position.Rotate(XRot, YRot, 0.0f); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/Camera.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/Camera.cs new file mode 100644 index 0000000..c8e3944 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/Camera.cs @@ -0,0 +1,119 @@ +using System; +using Microsoft.DirectX; + + + /// + /// Summary description for Camera. + /// +public class Camera { + + protected float velocity; + + + protected float xPos, yPos, zPos; + protected float xRot, yRot, zRot; + + protected float startXPos, startYPos, startZPos; + protected float startXRot, startYRot, startZRot; + + protected float endXPos, endYPos, endZPos; + protected float endXRot, endYRot, endZRot; + + protected Matrix viewMatrix; + protected Matrix translationMatrix; + protected Matrix rotationMatrix; + + public float XPosition { get { return xPos; } } + public float YPosition { get { return yPos; } } + public float ZPosition { get { return zPos; } } + + public float XRotation { get { return xRot; } } + public float YRotation { get { return yRot; } } + public float ZRotation { get { return zRot; } } + + + public Vector3 Loc { + get { + return new Vector3(xPos,yPos,zPos); + } + set { + Vector3 loc = value; + xPos = loc.X; + yPos = loc.Y; + zPos = loc.Z; + } + + } + + public Matrix ViewMatrix { + get { + Update(); + return viewMatrix; + } + set { + viewMatrix = value; + } + + } + + + public Camera() { + Move(0.0f,0.0f,0.0f); + Rotate(0.0f,0.0f,0.0f); + Update(); + } + + + public void Update() { // Update transformation matrix + viewMatrix = translationMatrix * rotationMatrix; + } + + public void Move(float XPos, float YPos, float ZPos) { + xPos = XPos; + yPos = YPos; + zPos = ZPos; + translationMatrix = Matrix.Translation( -xPos, -yPos, -zPos ); + } + + public void MoveRel(float XAdd, float YAdd, float ZAdd) { + Move (xPos + XAdd, yPos + YAdd, zPos + ZAdd); + + } + + public void Rotate(float XRot, float YRot, float ZRot) { + Matrix xRotation, yRotation, zRotation; + + xRot = XRot; + yRot = YRot; + zRot = ZRot; + + xRotation = Matrix.RotationX( - xRot ); + yRotation = Matrix.RotationY( - yRot ); + zRotation = Matrix.RotationZ( - zRot ); + + rotationMatrix = zRotation; + rotationMatrix *= yRotation; + rotationMatrix *= xRotation; + + } + + public void RotateRel(float XAdd, float YAdd, float ZAdd) { + Rotate (xRot + XAdd, yRot + YAdd, zRot + ZAdd); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/CameraMode.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/CameraMode.cs new file mode 100644 index 0000000..fc8f03a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/CameraMode.cs @@ -0,0 +1,9 @@ +using System; + + +public enum CameraMode { + ChaseMode, + CockpitMode, + Fixed +}; + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/Constants.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/Constants.cs new file mode 100644 index 0000000..22d420a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/Constants.cs @@ -0,0 +1,39 @@ +using System; +using Microsoft.DirectX.Direct3D; +using Microsoft.DirectX; + + + /// + /// GamePlay constants. You can tune the game by adjusting these values. + /// +sealed public class Constants { + static public Random random = new Random((int) DateTime.Now.Ticks); + + public const float EngineThrust = 0.3f; + public const float DyingCycle = 2; + public const float DeadCycleWait = 2; + public const float HyperChargeWait = 3; + public const float HyperCycleWait = 2; + public const float HyperSuccessFactor = 0.8f; // initial success factor + public const float HyperSuccessDegradation = 0.1f; // degradation per use... + public const float ShipCollisionLimit = 15f; + public const float MaxVelocity = 125.0f; + public const float ThrustPower = 1.001f; + + public const int ShotLifetime = 4; + public const int NumShots = 12; + public const float ShotVelocity = 350f; + public const float ShotDeltaTime = 0.10f; + public const int ShotInitialMove = 3; // times to update shot so it shows up outside the ship... + public const int ShotCollisionLimit = 10; + + + public const float StatusMessageDisplayTime = 5.0f; + + + + public const long RemoteTickTimeout = 5; // five seconds... + + private Constants() { + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/D3DSettingsForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/D3DSettingsForm.cs new file mode 100644 index 0000000..889162a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/D3DSettingsForm.cs @@ -0,0 +1,1037 @@ +//----------------------------------------------------------------------------- +// File: D3DSettingsForm.cs +// +// Desc: Application form for setting up user defined display settings +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + + + + + +/// +/// A form to allow the user to change the current D3D settings. +/// +public class D3DSettingsForm : System.Windows.Forms.Form { + private D3DEnumeration enumeration; + public D3DSettings settings; // Potential new D3D settings + + private System.Windows.Forms.GroupBox adapterDeviceGroupBox; + private System.Windows.Forms.Label displayAdapterLabel; + private System.Windows.Forms.ComboBox adapterComboBox; + private System.Windows.Forms.Label deviceLabel; + private System.Windows.Forms.ComboBox deviceComboBox; + private System.Windows.Forms.GroupBox modeSettingsGroupBox; + private System.Windows.Forms.RadioButton windowedRadioButton; + private System.Windows.Forms.RadioButton fullscreenRadioButton; + private System.Windows.Forms.Label adapterFormatLabel; + private System.Windows.Forms.ComboBox adapterFormatComboBox; + private System.Windows.Forms.Label resolutionLabel; + private System.Windows.Forms.ComboBox resolutionComboBox; + private System.Windows.Forms.Label refreshRateLabel; + private System.Windows.Forms.ComboBox refreshRateComboBox; + private System.Windows.Forms.GroupBox otherSettingsGroupBox; + private System.Windows.Forms.Label backBufferFormatLabel; + private System.Windows.Forms.ComboBox backBufferFormatComboBox; + private System.Windows.Forms.Label depthStencilBufferLabel; + private System.Windows.Forms.ComboBox depthStencilBufferComboBox; + private System.Windows.Forms.Label multisampleLabel; + private System.Windows.Forms.ComboBox multisampleComboBox; + private System.Windows.Forms.Label vertexProcLabel; + private System.Windows.Forms.ComboBox vertexProcComboBox; + private System.Windows.Forms.Label presentIntervalLabel; + private System.Windows.Forms.ComboBox presentIntervalComboBox; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.ComboBox multisampleQualityComboBox; + private System.Windows.Forms.Label multisampleQualityLabel; + + + + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + + /// + /// Constructor. Pass in an enumeration and the current D3D settings. + /// + public D3DSettingsForm(D3DEnumeration enumerationParam, D3DSettings settingsParam) { + enumeration = enumerationParam; + settings = settingsParam.Clone(); + + // Required for Windows Form Designer support + InitializeComponent(); + + // Fill adapter combo box. Updating the selected adapter will trigger + // updates of the rest of the dialog. + foreach (GraphicsAdapterInfo adapterInfo in enumeration.AdapterInfoList) { + adapterComboBox.Items.Add(adapterInfo); + if (adapterInfo.AdapterOrdinal == settings.AdapterOrdinal) + adapterComboBox.SelectedItem = adapterInfo; + } + if (adapterComboBox.SelectedItem == null && adapterComboBox.Items.Count > 0) + adapterComboBox.SelectedIndex = 0; + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + if (components != null) + components.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.adapterDeviceGroupBox = new System.Windows.Forms.GroupBox(); + this.deviceComboBox = new System.Windows.Forms.ComboBox(); + this.deviceLabel = new System.Windows.Forms.Label(); + this.adapterComboBox = new System.Windows.Forms.ComboBox(); + this.displayAdapterLabel = new System.Windows.Forms.Label(); + this.fullscreenRadioButton = new System.Windows.Forms.RadioButton(); + this.cancelButton = new System.Windows.Forms.Button(); + this.otherSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.multisampleQualityComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleQualityLabel = new System.Windows.Forms.Label(); + this.multisampleComboBox = new System.Windows.Forms.ComboBox(); + this.backBufferFormatComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferLabel = new System.Windows.Forms.Label(); + this.backBufferFormatLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcLabel = new System.Windows.Forms.Label(); + this.presentIntervalComboBox = new System.Windows.Forms.ComboBox(); + this.presentIntervalLabel = new System.Windows.Forms.Label(); + this.resolutionComboBox = new System.Windows.Forms.ComboBox(); + this.windowedRadioButton = new System.Windows.Forms.RadioButton(); + this.resolutionLabel = new System.Windows.Forms.Label(); + this.refreshRateComboBox = new System.Windows.Forms.ComboBox(); + this.adapterFormatLabel = new System.Windows.Forms.Label(); + this.refreshRateLabel = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.modeSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.adapterFormatComboBox = new System.Windows.Forms.ComboBox(); + this.adapterDeviceGroupBox.SuspendLayout(); + this.otherSettingsGroupBox.SuspendLayout(); + this.modeSettingsGroupBox.SuspendLayout(); + this.SuspendLayout(); + // + // adapterDeviceGroupBox + // + this.adapterDeviceGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.deviceComboBox, + this.deviceLabel, + this.adapterComboBox, + this.displayAdapterLabel}); + this.adapterDeviceGroupBox.Location = new System.Drawing.Point(16, 8); + this.adapterDeviceGroupBox.Name = "adapterDeviceGroupBox"; + this.adapterDeviceGroupBox.Size = new System.Drawing.Size(400, 80); + this.adapterDeviceGroupBox.TabIndex = 0; + this.adapterDeviceGroupBox.TabStop = false; + this.adapterDeviceGroupBox.Text = "Adapter and device"; + // + // deviceComboBox + // + this.deviceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.deviceComboBox.DropDownWidth = 121; + this.deviceComboBox.Location = new System.Drawing.Point(160, 48); + this.deviceComboBox.Name = "deviceComboBox"; + this.deviceComboBox.Size = new System.Drawing.Size(232, 21); + this.deviceComboBox.TabIndex = 3; + this.deviceComboBox.SelectedIndexChanged += new System.EventHandler(this.DeviceChanged); + // + // deviceLabel + // + this.deviceLabel.Location = new System.Drawing.Point(8, 48); + this.deviceLabel.Name = "deviceLabel"; + this.deviceLabel.Size = new System.Drawing.Size(152, 23); + this.deviceLabel.TabIndex = 2; + this.deviceLabel.Text = "Render &Device:"; + // + // adapterComboBox + // + this.adapterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterComboBox.DropDownWidth = 121; + this.adapterComboBox.Location = new System.Drawing.Point(160, 24); + this.adapterComboBox.Name = "adapterComboBox"; + this.adapterComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterComboBox.TabIndex = 1; + this.adapterComboBox.SelectedIndexChanged += new System.EventHandler(this.AdapterChanged); + // + // displayAdapterLabel + // + this.displayAdapterLabel.Location = new System.Drawing.Point(8, 24); + this.displayAdapterLabel.Name = "displayAdapterLabel"; + this.displayAdapterLabel.Size = new System.Drawing.Size(152, 23); + this.displayAdapterLabel.TabIndex = 0; + this.displayAdapterLabel.Text = "Display &Adapter:"; + // + // fullscreenRadioButton + // + this.fullscreenRadioButton.Location = new System.Drawing.Point(9, 38); + this.fullscreenRadioButton.Name = "fullscreenRadioButton"; + this.fullscreenRadioButton.Size = new System.Drawing.Size(152, 24); + this.fullscreenRadioButton.TabIndex = 1; + this.fullscreenRadioButton.Text = "&Fullscreen"; + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(248, 464); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.TabIndex = 4; + this.cancelButton.Text = "Cancel"; + // + // otherSettingsGroupBox + // + this.otherSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.multisampleQualityComboBox, + this.multisampleQualityLabel, + this.multisampleComboBox, + this.backBufferFormatComboBox, + this.multisampleLabel, + this.depthStencilBufferLabel, + this.backBufferFormatLabel, + this.depthStencilBufferComboBox, + this.vertexProcComboBox, + this.vertexProcLabel, + this.presentIntervalComboBox, + this.presentIntervalLabel}); + this.otherSettingsGroupBox.Location = new System.Drawing.Point(16, 264); + this.otherSettingsGroupBox.Name = "otherSettingsGroupBox"; + this.otherSettingsGroupBox.Size = new System.Drawing.Size(400, 176); + this.otherSettingsGroupBox.TabIndex = 2; + this.otherSettingsGroupBox.TabStop = false; + this.otherSettingsGroupBox.Text = "Device settings"; + // + // multisampleQualityComboBox + // + this.multisampleQualityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleQualityComboBox.DropDownWidth = 144; + this.multisampleQualityComboBox.Location = new System.Drawing.Point(160, 96); + this.multisampleQualityComboBox.Name = "multisampleQualityComboBox"; + this.multisampleQualityComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleQualityComboBox.TabIndex = 7; + this.multisampleQualityComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleQualityChanged); + // + // multisampleQualityLabel + // + this.multisampleQualityLabel.Location = new System.Drawing.Point(8, 96); + this.multisampleQualityLabel.Name = "multisampleQualityLabel"; + this.multisampleQualityLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleQualityLabel.TabIndex = 6; + this.multisampleQualityLabel.Text = "Multisample &Quality:"; + // + // multisampleComboBox + // + this.multisampleComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleComboBox.DropDownWidth = 144; + this.multisampleComboBox.Location = new System.Drawing.Point(160, 72); + this.multisampleComboBox.Name = "multisampleComboBox"; + this.multisampleComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleComboBox.TabIndex = 5; + this.multisampleComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleTypeChanged); + // + // backBufferFormatComboBox + // + this.backBufferFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.backBufferFormatComboBox.DropDownWidth = 144; + this.backBufferFormatComboBox.Location = new System.Drawing.Point(160, 24); + this.backBufferFormatComboBox.Name = "backBufferFormatComboBox"; + this.backBufferFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.backBufferFormatComboBox.TabIndex = 1; + this.backBufferFormatComboBox.SelectedIndexChanged += new System.EventHandler(this.BackBufferFormatChanged); + // + // multisampleLabel + // + this.multisampleLabel.Location = new System.Drawing.Point(8, 72); + this.multisampleLabel.Name = "multisampleLabel"; + this.multisampleLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleLabel.TabIndex = 4; + this.multisampleLabel.Text = "&Multisample Type:"; + // + // depthStencilBufferLabel + // + this.depthStencilBufferLabel.Location = new System.Drawing.Point(8, 48); + this.depthStencilBufferLabel.Name = "depthStencilBufferLabel"; + this.depthStencilBufferLabel.Size = new System.Drawing.Size(152, 23); + this.depthStencilBufferLabel.TabIndex = 2; + this.depthStencilBufferLabel.Text = "De&pth/Stencil Buffer Format:"; + // + // backBufferFormatLabel + // + this.backBufferFormatLabel.Location = new System.Drawing.Point(8, 24); + this.backBufferFormatLabel.Name = "backBufferFormatLabel"; + this.backBufferFormatLabel.Size = new System.Drawing.Size(152, 23); + this.backBufferFormatLabel.TabIndex = 0; + this.backBufferFormatLabel.Text = "&Back Buffer Format:"; + // + // depthStencilBufferComboBox + // + this.depthStencilBufferComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.depthStencilBufferComboBox.DropDownWidth = 144; + this.depthStencilBufferComboBox.Location = new System.Drawing.Point(160, 48); + this.depthStencilBufferComboBox.Name = "depthStencilBufferComboBox"; + this.depthStencilBufferComboBox.Size = new System.Drawing.Size(232, 21); + this.depthStencilBufferComboBox.TabIndex = 3; + this.depthStencilBufferComboBox.SelectedIndexChanged += new System.EventHandler(this.DepthStencilBufferFormatChanged); + // + // vertexProcComboBox + // + this.vertexProcComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.vertexProcComboBox.DropDownWidth = 121; + this.vertexProcComboBox.Location = new System.Drawing.Point(160, 120); + this.vertexProcComboBox.Name = "vertexProcComboBox"; + this.vertexProcComboBox.Size = new System.Drawing.Size(232, 21); + this.vertexProcComboBox.TabIndex = 9; + this.vertexProcComboBox.SelectedIndexChanged += new System.EventHandler(this.VertexProcessingChanged); + // + // vertexProcLabel + // + this.vertexProcLabel.Location = new System.Drawing.Point(8, 120); + this.vertexProcLabel.Name = "vertexProcLabel"; + this.vertexProcLabel.Size = new System.Drawing.Size(152, 23); + this.vertexProcLabel.TabIndex = 8; + this.vertexProcLabel.Text = "&Vertex Processing:"; + // + // presentIntervalComboBox + // + this.presentIntervalComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.presentIntervalComboBox.DropDownWidth = 121; + this.presentIntervalComboBox.Location = new System.Drawing.Point(160, 144); + this.presentIntervalComboBox.Name = "presentIntervalComboBox"; + this.presentIntervalComboBox.Size = new System.Drawing.Size(232, 21); + this.presentIntervalComboBox.TabIndex = 11; + this.presentIntervalComboBox.SelectedValueChanged += new System.EventHandler(this.PresentIntervalChanged); + // + // presentIntervalLabel + // + this.presentIntervalLabel.Location = new System.Drawing.Point(8, 144); + this.presentIntervalLabel.Name = "presentIntervalLabel"; + this.presentIntervalLabel.Size = new System.Drawing.Size(152, 23); + this.presentIntervalLabel.TabIndex = 10; + this.presentIntervalLabel.Text = "Present &Interval:"; + // + // resolutionComboBox + // + this.resolutionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.resolutionComboBox.DropDownWidth = 144; + this.resolutionComboBox.Location = new System.Drawing.Point(161, 94); + this.resolutionComboBox.MaxDropDownItems = 14; + this.resolutionComboBox.Name = "resolutionComboBox"; + this.resolutionComboBox.Size = new System.Drawing.Size(232, 21); + this.resolutionComboBox.TabIndex = 5; + this.resolutionComboBox.SelectedIndexChanged += new System.EventHandler(this.ResolutionChanged); + // + // windowedRadioButton + // + this.windowedRadioButton.Location = new System.Drawing.Point(9, 14); + this.windowedRadioButton.Name = "windowedRadioButton"; + this.windowedRadioButton.Size = new System.Drawing.Size(152, 24); + this.windowedRadioButton.TabIndex = 0; + this.windowedRadioButton.Text = "&Windowed"; + this.windowedRadioButton.CheckedChanged += new System.EventHandler(this.WindowedFullscreenChanged); + // + // resolutionLabel + // + this.resolutionLabel.Location = new System.Drawing.Point(8, 94); + this.resolutionLabel.Name = "resolutionLabel"; + this.resolutionLabel.Size = new System.Drawing.Size(152, 23); + this.resolutionLabel.TabIndex = 4; + this.resolutionLabel.Text = "&Resolution:"; + // + // refreshRateComboBox + // + this.refreshRateComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.refreshRateComboBox.DropDownWidth = 144; + this.refreshRateComboBox.Location = new System.Drawing.Point(161, 118); + this.refreshRateComboBox.MaxDropDownItems = 14; + this.refreshRateComboBox.Name = "refreshRateComboBox"; + this.refreshRateComboBox.Size = new System.Drawing.Size(232, 21); + this.refreshRateComboBox.TabIndex = 7; + this.refreshRateComboBox.SelectedIndexChanged += new System.EventHandler(this.RefreshRateChanged); + // + // adapterFormatLabel + // + this.adapterFormatLabel.Location = new System.Drawing.Point(8, 72); + this.adapterFormatLabel.Name = "adapterFormatLabel"; + this.adapterFormatLabel.Size = new System.Drawing.Size(152, 23); + this.adapterFormatLabel.TabIndex = 2; + this.adapterFormatLabel.Text = "Adapter F&ormat:"; + // + // refreshRateLabel + // + this.refreshRateLabel.Location = new System.Drawing.Point(8, 118); + this.refreshRateLabel.Name = "refreshRateLabel"; + this.refreshRateLabel.Size = new System.Drawing.Size(152, 23); + this.refreshRateLabel.TabIndex = 6; + this.refreshRateLabel.Text = "R&efresh Rate:"; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(112, 464); + this.okButton.Name = "okButton"; + this.okButton.TabIndex = 3; + this.okButton.Text = "OK"; + // + // modeSettingsGroupBox + // + this.modeSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.adapterFormatLabel, + this.refreshRateLabel, + this.resolutionComboBox, + this.adapterFormatComboBox, + this.resolutionLabel, + this.refreshRateComboBox, + this.windowedRadioButton, + this.fullscreenRadioButton}); + this.modeSettingsGroupBox.Location = new System.Drawing.Point(16, 96); + this.modeSettingsGroupBox.Name = "modeSettingsGroupBox"; + this.modeSettingsGroupBox.Size = new System.Drawing.Size(400, 160); + this.modeSettingsGroupBox.TabIndex = 1; + this.modeSettingsGroupBox.TabStop = false; + this.modeSettingsGroupBox.Text = "Display mode settings"; + // + // adapterFormatComboBox + // + this.adapterFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterFormatComboBox.DropDownWidth = 121; + this.adapterFormatComboBox.Location = new System.Drawing.Point(161, 70); + this.adapterFormatComboBox.MaxDropDownItems = 14; + this.adapterFormatComboBox.Name = "adapterFormatComboBox"; + this.adapterFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterFormatComboBox.TabIndex = 3; + this.adapterFormatComboBox.SelectedValueChanged += new System.EventHandler(this.AdapterFormatChanged); + // + // D3DSettingsForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(438, 512); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.cancelButton, + this.okButton, + this.adapterDeviceGroupBox, + this.modeSettingsGroupBox, + this.otherSettingsGroupBox}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.Name = "D3DSettingsForm"; + this.Text = "Direct3D Settings"; + this.adapterDeviceGroupBox.ResumeLayout(false); + this.otherSettingsGroupBox.ResumeLayout(false); + this.modeSettingsGroupBox.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// Respond to a change of selected adapter by rebuilding the device + /// list. Updating the selected device will trigger updates of the + /// rest of the dialog. + /// + private void AdapterChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + settings.AdapterInfo = adapterInfo; + + // Update device combo box + deviceComboBox.Items.Clear(); + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + deviceComboBox.Items.Add(deviceInfo); + if (deviceInfo.DevType == settings.DevType) + deviceComboBox.SelectedItem = deviceInfo; + } + if (deviceComboBox.SelectedItem == null && deviceComboBox.Items.Count > 0) + deviceComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected device by resetting the + /// fullscreen/windowed radio buttons. Updating these buttons + /// will trigger updates of the rest of the dialog. + /// + private void DeviceChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + settings.DeviceInfo = deviceInfo; + + // Update fullscreen/windowed radio buttons + bool HasWindowedDeviceCombo = false; + bool HasFullscreenDeviceCombo = false; + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + HasWindowedDeviceCombo = true; + else + HasFullscreenDeviceCombo = true; + } + windowedRadioButton.Enabled = HasWindowedDeviceCombo; + fullscreenRadioButton.Enabled = HasFullscreenDeviceCombo; + if (settings.IsWindowed && HasWindowedDeviceCombo) { + windowedRadioButton.Checked = true; + } + else { + fullscreenRadioButton.Checked = true; + } + WindowedFullscreenChanged(null, null); + } + + + + + /// + /// Respond to a change of windowed/fullscreen state by rebuilding the + /// adapter format list, resolution list, and refresh rate list. + /// Updating the selected adapter format will trigger updates of the + /// rest of the dialog. + /// + private void WindowedFullscreenChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + if (windowedRadioButton.Checked) { + settings.IsWindowed = true; + settings.WindowedAdapterInfo = adapterInfo; + settings.WindowedDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + adapterFormatComboBox.Items.Add(settings.WindowedDisplayMode.Format); + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = false; + + // Update resolution combo box + resolutionComboBox.Items.Clear(); + resolutionComboBox.Items.Add(FormatResolution(settings.WindowedDisplayMode.Width, + settings.WindowedDisplayMode.Height)); + resolutionComboBox.SelectedIndex = 0; + resolutionComboBox.Enabled = false; + + // Update refresh rate combo box + refreshRateComboBox.Items.Clear(); + refreshRateComboBox.Items.Add(FormatRefreshRate(settings.WindowedDisplayMode.RefreshRate)); + refreshRateComboBox.SelectedIndex = 0; + refreshRateComboBox.Enabled = false; + } + else { + settings.IsWindowed = false; + settings.FullscreenAdapterInfo = adapterInfo; + settings.FullscreenDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + continue; + if (!adapterFormatComboBox.Items.Contains(deviceCombo.AdapterFormat)) { + adapterFormatComboBox.Items.Add(deviceCombo.AdapterFormat); + if (deviceCombo.AdapterFormat == (settings.IsWindowed ? + settings.WindowedDisplayMode.Format : settings.FullscreenDisplayMode.Format)) { + adapterFormatComboBox.SelectedItem = deviceCombo.AdapterFormat; + } + } + } + if (adapterFormatComboBox.SelectedItem == null && adapterFormatComboBox.Items.Count > 0) + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = true; + + // Update resolution combo box + resolutionComboBox.Enabled = true; + + // Update refresh rate combo box + refreshRateComboBox.Enabled = true; + } + } + + + + + /// + /// Converts the given width and height into a formatted string + /// + private string FormatResolution(int width, int height) { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} by {1}", width, height); + return sb.ToString(); + } + + + + + /// + /// Converts the given refresh rate into a formatted string + /// + private string FormatRefreshRate(int refreshRate) { + if (refreshRate == 0) { + return "Default Rate"; + } + else { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} Hz", refreshRate); + return sb.ToString(); + } + } + + + + + /// + /// Respond to a change of selected adapter format by rebuilding the + /// resolution list and back buffer format list. Updating the selected + /// resolution and back buffer format will trigger updates of the rest + /// of the dialog. + /// + private void AdapterFormatChanged(object sender, System.EventArgs e) { + if (!windowedRadioButton.Checked) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + settings.FullscreenDisplayMode.Format = adapterFormat; + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + + resolutionComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat) { + string resolutionString = FormatResolution(displayMode.Width, displayMode.Height); + if (!resolutionComboBox.Items.Contains(resolutionString)) { + resolutionComboBox.Items.Add(resolutionString); + if (settings.FullscreenDisplayMode.Width == displayMode.Width && + settings.FullscreenDisplayMode.Height == displayMode.Height) { + resolutionComboBox.SelectedItem = resolutionString; + } + } + } + } + if (resolutionComboBox.SelectedItem == null && resolutionComboBox.Items.Count > 0) + resolutionComboBox.SelectedIndex = 0; + } + + // Update backbuffer format combo box + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + backBufferFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == settings.DisplayMode.Format) { + if (!backBufferFormatComboBox.Items.Contains(deviceCombo.BackBufferFormat)) { + backBufferFormatComboBox.Items.Add(deviceCombo.BackBufferFormat); + if (deviceCombo.BackBufferFormat == settings.BackBufferFormat) + backBufferFormatComboBox.SelectedItem = deviceCombo.BackBufferFormat; + } + } + } + if (backBufferFormatComboBox.SelectedItem == null && backBufferFormatComboBox.Items.Count > 0) + backBufferFormatComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected resolution by rebuilding the + /// refresh rate list. + /// + private void ResolutionChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + + // Update settings with new resolution + string resolution = (string)resolutionComboBox.SelectedItem; + string[] resolutionSplitStringArray = resolution.Split(); + int width = int.Parse(resolutionSplitStringArray[0]); + int height = int.Parse(resolutionSplitStringArray[2]); + settings.FullscreenDisplayMode.Width = width; + settings.FullscreenDisplayMode.Height = height; + + // Update refresh rate list based on new resolution + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + refreshRateComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat && + displayMode.Width == width && + displayMode.Height == height) { + string refreshRateString = FormatRefreshRate(displayMode.RefreshRate); + if (!refreshRateComboBox.Items.Contains(refreshRateString)) { + refreshRateComboBox.Items.Add(refreshRateString); + if (settings.FullscreenDisplayMode.RefreshRate == displayMode.RefreshRate) + refreshRateComboBox.SelectedItem = refreshRateString; + } + } + } + if (refreshRateComboBox.SelectedItem == null && refreshRateComboBox.Items.Count > 0) + refreshRateComboBox.SelectedIndex = refreshRateComboBox.Items.Count - 1; + } + + + + + /// + /// Respond to a change of selected refresh rate. + /// + private void RefreshRateChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + // Update settings with new refresh rate + string refreshRateString = (string)refreshRateComboBox.SelectedItem; + int refreshRate = 0; + if (refreshRateString != "Default Rate") { + string[] refreshRateSplitStringArray = refreshRateString.Split(); + refreshRate = int.Parse(refreshRateSplitStringArray[0]); + } + settings.FullscreenDisplayMode.RefreshRate = refreshRate; + } + + + + + /// + /// Respond to a change of selected back buffer format by rebuilding + /// the depth/stencil format list, multisample type list, and vertex + /// processing type list. + /// + private void BackBufferFormatChanged(object sender, System.EventArgs e) { + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + Format backBufferFormat = (Format)backBufferFormatComboBox.SelectedItem; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == adapterFormat && + deviceCombo.BackBufferFormat == backBufferFormat) { + deviceCombo.BackBufferFormat = backBufferFormat; + settings.DeviceCombo = deviceCombo; + + depthStencilBufferComboBox.Items.Clear(); + if (enumeration.AppUsesDepthBuffer) { + foreach (DepthFormat format in deviceCombo.DepthStencilFormatList) { + depthStencilBufferComboBox.Items.Add(format); + if (format == settings.DepthStencilBufferFormat) + depthStencilBufferComboBox.SelectedItem = format; + } + if (depthStencilBufferComboBox.SelectedItem == null && depthStencilBufferComboBox.Items.Count > 0) + depthStencilBufferComboBox.SelectedIndex = 0; + } + else { + depthStencilBufferComboBox.Enabled = false; + depthStencilBufferComboBox.Items.Add("(not used)"); + depthStencilBufferComboBox.SelectedIndex = 0; + } + + vertexProcComboBox.Items.Clear(); + foreach (VertexProcessingType vpt in deviceCombo.VertexProcessingTypeList) { + vertexProcComboBox.Items.Add(vpt); + if (vpt == settings.VertexProcessingType) + vertexProcComboBox.SelectedItem = vpt; + } + if (vertexProcComboBox.SelectedItem == null && vertexProcComboBox.Items.Count > 0) + vertexProcComboBox.SelectedIndex = 0; + + presentIntervalComboBox.Items.Clear(); + foreach (PresentInterval pi in deviceCombo.PresentIntervalList) { + presentIntervalComboBox.Items.Add(pi); + if (pi == settings.PresentInterval) + presentIntervalComboBox.SelectedItem = pi; + } + if (presentIntervalComboBox.SelectedItem == null && presentIntervalComboBox.Items.Count > 0) + presentIntervalComboBox.SelectedIndex = 0; + + break; + } + } + } + + + + + /// + /// Respond to a change of selected depth/stencil buffer format. + /// + private void DepthStencilBufferFormatChanged(object sender, System.EventArgs e) { + if (enumeration.AppUsesDepthBuffer) + settings.DepthStencilBufferFormat = (DepthFormat)depthStencilBufferComboBox.SelectedItem; + + multisampleComboBox.Items.Clear(); + foreach (MultiSampleType msType in settings.DeviceCombo.MultiSampleTypeList) { + // Check for DS/MS conflict + bool conflictFound = false; + foreach (DepthStencilMultiSampleConflict DSMSConflict in settings.DeviceCombo.DepthStencilMultiSampleConflictList) { + if (DSMSConflict.DepthStencilFormat == settings.DepthStencilBufferFormat && + DSMSConflict.MultiSampleType == msType) { + conflictFound = true; + break; + } + } + if (!conflictFound) { + multisampleComboBox.Items.Add(msType); + if (msType == settings.MultisampleType) + multisampleComboBox.SelectedItem = msType; + } + } + if (multisampleComboBox.SelectedItem == null && multisampleComboBox.Items.Count > 0) + multisampleComboBox.SelectedIndex = 0; + + } + + + + + /// + /// Respond to a change of selected multisample type. + /// + private void MultisampleTypeChanged(object sender, System.EventArgs e) { + settings.MultisampleType = (MultiSampleType)multisampleComboBox.SelectedItem; + + // Find current max multisample quality + int maxQuality = 0; + DeviceCombo deviceCombo = settings.DeviceCombo; + for (int i = 0; i < deviceCombo.MultiSampleQualityList.Count; i++) { + if ((MultiSampleType)deviceCombo.MultiSampleTypeList[i] == settings.MultisampleType) { + maxQuality = (int)deviceCombo.MultiSampleQualityList[i]; + break; + } + } + + // Update multisample quality list based on new type + multisampleQualityComboBox.Items.Clear(); + for (int iLevel = 0; iLevel < maxQuality; iLevel++) { + multisampleQualityComboBox.Items.Add(iLevel); + if (settings.MultisampleQuality == iLevel) + multisampleQualityComboBox.SelectedItem = iLevel; + } + if (multisampleQualityComboBox.SelectedItem == null && multisampleQualityComboBox.Items.Count > 0) + multisampleQualityComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected multisample quality. + /// + private void MultisampleQualityChanged(object sender, System.EventArgs e) { + settings.MultisampleQuality = (int)multisampleQualityComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void VertexProcessingChanged(object sender, System.EventArgs e) { + settings.VertexProcessingType = (VertexProcessingType)vertexProcComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void PresentIntervalChanged(object sender, System.EventArgs e) { + settings.PresentInterval = (PresentInterval)presentIntervalComboBox.SelectedItem; + } +} + + +/// +/// Current D3D settings: adapter, device, mode, formats, etc. +/// +public class D3DSettings { + public bool IsWindowed; + + public GraphicsAdapterInfo WindowedAdapterInfo; + public GraphicsDeviceInfo WindowedDeviceInfo; + public DeviceCombo WindowedDeviceCombo; + public DisplayMode WindowedDisplayMode; // not changable by the user + public DepthFormat WindowedDepthStencilBufferFormat; + public MultiSampleType WindowedMultisampleType; + public int WindowedMultisampleQuality; + public VertexProcessingType WindowedVertexProcessingType; + public PresentInterval WindowedPresentInterval; + public int WindowedWidth; + public int WindowedHeight; + + public GraphicsAdapterInfo FullscreenAdapterInfo; + public GraphicsDeviceInfo FullscreenDeviceInfo; + public DeviceCombo FullscreenDeviceCombo; + public DisplayMode FullscreenDisplayMode; // changable by the user + public DepthFormat FullscreenDepthStencilBufferFormat; + public MultiSampleType FullscreenMultisampleType; + public int FullscreenMultisampleQuality; + public VertexProcessingType FullscreenVertexProcessingType; + public PresentInterval FullscreenPresentInterval; + + + + + /// + /// The adapter information + /// + public GraphicsAdapterInfo AdapterInfo { + get { return IsWindowed ? WindowedAdapterInfo : FullscreenAdapterInfo; } + set { if (IsWindowed) WindowedAdapterInfo = value; else FullscreenAdapterInfo = value; } + } + + + + + /// + /// The device information + /// + public GraphicsDeviceInfo DeviceInfo { + get { return IsWindowed ? WindowedDeviceInfo : FullscreenDeviceInfo; } + set { if (IsWindowed) WindowedDeviceInfo = value; else FullscreenDeviceInfo = value; } + } + + + + + /// + /// The device combo + /// + public DeviceCombo DeviceCombo { + get { return IsWindowed ? WindowedDeviceCombo : FullscreenDeviceCombo; } + set { if (IsWindowed) WindowedDeviceCombo = value; else FullscreenDeviceCombo = value; } + } + + + + + /// + /// The adapters ordinal + /// + public int AdapterOrdinal { + get { return DeviceCombo.AdapterOrdinal; } + } + + + + + /// + /// The type of device this is + /// + public DeviceType DevType { + get { return DeviceCombo.DevType; } + } + + + + + /// + /// The back buffers format + /// + public Format BackBufferFormat { + get { return DeviceCombo.BackBufferFormat; } + } + + + + + /// + /// The display mode + /// + public DisplayMode DisplayMode { + get { return IsWindowed ? WindowedDisplayMode : FullscreenDisplayMode; } + set { if (IsWindowed) WindowedDisplayMode = value; else FullscreenDisplayMode = value; } + } + + + + + /// + /// The Depth stencils format + /// + public DepthFormat DepthStencilBufferFormat { + get { return IsWindowed ? WindowedDepthStencilBufferFormat : FullscreenDepthStencilBufferFormat; } + set { if (IsWindowed) WindowedDepthStencilBufferFormat = value; else FullscreenDepthStencilBufferFormat = value; } + } + + + + + /// + /// The multisample type + /// + public MultiSampleType MultisampleType { + get { return IsWindowed ? WindowedMultisampleType : FullscreenMultisampleType; } + set { if (IsWindowed) WindowedMultisampleType = value; else FullscreenMultisampleType = value; } + } + + + + + /// + /// The multisample quality + /// + public int MultisampleQuality { + get { return IsWindowed ? WindowedMultisampleQuality : FullscreenMultisampleQuality; } + set { if (IsWindowed) WindowedMultisampleQuality = value; else FullscreenMultisampleQuality = value; } + } + + + + + /// + /// The vertex processing type + /// + public VertexProcessingType VertexProcessingType { + get { return IsWindowed ? WindowedVertexProcessingType : FullscreenVertexProcessingType; } + set { if (IsWindowed) WindowedVertexProcessingType = value; else FullscreenVertexProcessingType = value; } + } + + + + + /// + /// The presentation interval + /// + public PresentInterval PresentInterval { + get { return IsWindowed ? WindowedPresentInterval : FullscreenPresentInterval; } + set { if (IsWindowed) WindowedPresentInterval = value; else FullscreenPresentInterval = value; } + } + + + + + /// + /// Clone the d3d settings class + /// + public D3DSettings Clone() { + return (D3DSettings)MemberwiseClone(); + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/D3DSettingsForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step10/D3DSettingsForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/D3DSettingsForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect.cs new file mode 100644 index 0000000..e0e11ae --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect.cs @@ -0,0 +1,254 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; +using System.Runtime.InteropServices; + + + + +/// +/// The connection wizard will allow our users to pick a service provider, +/// and then connect to an existing application, or create a new one as the host. +/// +public class ConnectWizard { + private Peer peerObject; + private Address deviceAddress; + + private ChooseServiceProviderForm serviceProviderForm; + private CreateJoinForm createJoinForm; + + private Guid serviceProviderGuid; + private string username; + private string samplename; + private bool isInSession = false; + private bool isHost = false; + private int port = 0; + + private Guid applicationGuid; + + + + + /// + /// Constructor + /// + /// + /// + /// + public ConnectWizard(Peer peer, Guid application, string sampleName) { + peerObject = peer; + applicationGuid = application; + samplename = sampleName; + } + + + + + /// + /// The guid for the current service provider + /// + public Guid ServiceProvider { + get { + return serviceProviderGuid; } + set { + serviceProviderGuid = value; } + } + + + + + /// + /// The game's default port number + /// + public int DefaultPort { + get { + return port; } + set { + port = value; } + } + + + + + /// + /// Am I the host + /// + public bool IsHost { + get { + return isHost; } + set { + isHost = value; } + } + + + + + /// + /// The username + /// + public string Username { + get { + return username; } + set { + username = value; } + } + + + + + /// + /// The sample name + /// + public string SampleName { + get { + return samplename; } + } + + + + + /// + /// The applications guid + /// + public Guid ApplicationGuid { + get { + return applicationGuid; } + } + + + + + /// + /// Are we in a session + /// + public bool InSession { + get { return isInSession; } + set { isInSession = value; } + } + + + + + /// + /// Returns true if the given provider requires a port component + /// + /// ServiceProvider Guid + /// + static public bool ProviderRequiresPort(Guid provider) { + return (provider != Address.ServiceProviderSerial && + provider != Address.ServiceProviderModem && + provider != Address.ServiceProviderBlueTooth); + } + + + + + /// + /// Handler for when our form is disposed + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createJoinForm) + createJoinForm = null; + + if (sender == serviceProviderForm) + serviceProviderForm = null; + } + + + + + /// + /// Set the user information + /// + public void SetUserInfo() { + //Before we call host, let's actually call SetPeerInformation + PlayerInformation myinformation = new PlayerInformation(); + myinformation.Name = username; + + peerObject.SetPeerInformation(myinformation, SyncFlags.PeerInformation); + } + + + + + /// + /// Show the service providers form + /// + /// True if a service provider was picked, false otherwise + public bool DoShowServiceProviders() { + if (serviceProviderForm == null) { + username = null; + serviceProviderForm = new ChooseServiceProviderForm(peerObject,this); + serviceProviderForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (serviceProviderForm.ShowDialog() == DialogResult.OK) + return true; + + // The didn't hit ok + return false; + } + + + + + /// + /// Show the create or join screen + /// + /// True if we will be in a session, false otherwise + public bool DoCreateJoinGame() { + if (deviceAddress != null) + deviceAddress.Dispose(); + + deviceAddress = new Address(); + + if (createJoinForm != null) + createJoinForm.Dispose(); + + createJoinForm = new CreateJoinForm(peerObject, deviceAddress, this); + createJoinForm.Disposed += new System.EventHandler(this.FormDisposed); + + //Set the address's service provider (this will be the device address) + deviceAddress.ServiceProvider = serviceProviderGuid; + DialogResult drCreateJoin = createJoinForm.ShowDialog(); + if (drCreateJoin == DialogResult.Cancel) + return false; + + this.isHost = (drCreateJoin == DialogResult.Yes); + return true; + + } + + + + + /// + /// Start the wizard + /// + /// True if we are in a session, false otherwise + public bool StartWizard() { + isInSession = false; + + while (this.DoShowServiceProviders()) { + //Now let's create a game or join a session + if (this.DoCreateJoinGame()) { + // A game has been created or joined now, set our flag + isInSession = true; + break; + } + } + return isInSession; + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_AddressForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_AddressForm.cs new file mode 100644 index 0000000..bdf380d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_AddressForm.cs @@ -0,0 +1,207 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_AddressForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// Summary description for AddressForm. +/// +public class AddressForm : System.Windows.Forms.Form { + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox hostnameTextBox; + private System.Windows.Forms.TextBox portTextBox; + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + /// + /// Constructor + /// + public AddressForm( int defaultPort ) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // Set default port value + Port = defaultPort; + } + + + + + /// + /// The remote port on which to connect + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(portTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + portTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Remote hostname + /// + public string Hostname { + get { + return hostnameTextBox.Text; } + set { + hostnameTextBox.Text = value; } + } + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.label1 = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.hostnameTextBox = new System.Windows.Forms.TextBox(); + this.portTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(248, 48); + this.label1.TabIndex = 0; + this.label1.Text = "Please enter the optional components of the remote session address. If set blank," + + " DirectPlay will attempt to search the local network."; + // + // okButton + // + this.okButton.Location = new System.Drawing.Point(104, 144); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(72, 24); + this.okButton.TabIndex = 1; + this.okButton.Text = "&OK"; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(184, 144); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(72, 24); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "&Cancel"; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(32, 80); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(100, 16); + this.label2.TabIndex = 3; + this.label2.Text = "Hostname"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(160, 80); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 16); + this.label3.TabIndex = 4; + this.label3.Text = "Port"; + // + // hostnameTextBox + // + this.hostnameTextBox.Location = new System.Drawing.Point(32, 96); + this.hostnameTextBox.Name = "hostnameTextBox"; + this.hostnameTextBox.Size = new System.Drawing.Size(120, 20); + this.hostnameTextBox.TabIndex = 5; + this.hostnameTextBox.Text = ""; + // + // portTextBox + // + this.portTextBox.Location = new System.Drawing.Point(160, 96); + this.portTextBox.Name = "portTextBox"; + this.portTextBox.Size = new System.Drawing.Size(56, 20); + this.portTextBox.TabIndex = 6; + this.portTextBox.Text = "2580"; + // + // AddressForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(264, 176); + this.Controls.Add(this.portTextBox); + this.Controls.Add(this.hostnameTextBox); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.okButton); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AddressForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Remote Address"; + this.ResumeLayout(false); + + } + #endregion + + private void okButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.OK; + } + + private void cancelButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.Cancel; + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_AddressForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_AddressForm.resx new file mode 100644 index 0000000..a899c39 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_AddressForm.resx @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + AddressForm + + + 8, 8 + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_CreateForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_CreateForm.cs new file mode 100644 index 0000000..72e8505 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_CreateForm.cs @@ -0,0 +1,346 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_CreateForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will allow you to create a new session, and set certain properties +/// of the session. +/// +public class CreateSessionForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.TextBox txtSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton notSignedRadio; + private System.Windows.Forms.RadioButton fullSignedRadio; + private System.Windows.Forms.RadioButton fastSignedRadio; + private System.Windows.Forms.CheckBox migrateHostCheckBox; + private System.Windows.Forms.CheckBox useDPNSVRCheckBox; + private System.Windows.Forms.TextBox localPortTextBox; + private System.Windows.Forms.Label localPortLabel; + private System.Windows.Forms.Button btnCancel; + + + + /// + /// Constructor + /// + public CreateSessionForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + peer = peerObject; + this.connectionWizard = connectionWizard; + deviceAddress = addressObject; + txtSession.Text = null; + this.Text = connectionWizard.SampleName + " - " + this.Text; + //Get the default session from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + // Get session name + txtSession.Text = (string)regKey.GetValue("DirectPlaySessionName", null); + + // Get host migration option + if (regKey.GetValue("DirectPlayMigrateHost",null) != null) { + migrateHostCheckBox.Checked = ((int)regKey.GetValue("DirectPlayMigrateHost",1)==1); + } + + + // Get session signing option + if (regKey.GetValue("DirectPlaySessionSigning",null) != null) { + if ("Full" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fullSignedRadio.Checked = true; + else if ("Fast" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fastSignedRadio.Checked = true; + else + notSignedRadio.Checked = true; + } + + regKey.Close(); + } + + // Set default port value and hide port UI if provider doesn't use them + Port = connectionWizard.DefaultPort; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + localPortTextBox.Hide(); + localPortLabel.Hide(); + } + } + + + + /// + /// The port on which to host + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(localPortTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + localPortTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.txtSession = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.fullSignedRadio = new System.Windows.Forms.RadioButton(); + this.fastSignedRadio = new System.Windows.Forms.RadioButton(); + this.notSignedRadio = new System.Windows.Forms.RadioButton(); + this.migrateHostCheckBox = new System.Windows.Forms.CheckBox(); + this.useDPNSVRCheckBox = new System.Windows.Forms.CheckBox(); + this.localPortLabel = new System.Windows.Forms.Label(); + this.localPortTextBox = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // txtSession + // + this.txtSession.Location = new System.Drawing.Point(96, 24); + this.txtSession.Name = "txtSession"; + this.txtSession.Size = new System.Drawing.Size(176, 20); + this.txtSession.TabIndex = 3; + this.txtSession.Text = "SpaceWar"; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(288, 12); + this.label1.TabIndex = 2; + this.label1.Text = "Session Name:"; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(128, 168); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(208, 168); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.fullSignedRadio); + this.groupBox1.Controls.Add(this.fastSignedRadio); + this.groupBox1.Controls.Add(this.notSignedRadio); + this.groupBox1.Location = new System.Drawing.Point(16, 64); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(112, 88); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Session Signing"; + this.groupBox1.Visible = false; + // + // fullSignedRadio + // + this.fullSignedRadio.Location = new System.Drawing.Point(18, 22); + this.fullSignedRadio.Name = "fullSignedRadio"; + this.fullSignedRadio.Size = new System.Drawing.Size(80, 16); + this.fullSignedRadio.TabIndex = 9; + this.fullSignedRadio.Text = "Full signed"; + // + // fastSignedRadio + // + this.fastSignedRadio.Checked = true; + this.fastSignedRadio.Location = new System.Drawing.Point(18, 41); + this.fastSignedRadio.Name = "fastSignedRadio"; + this.fastSignedRadio.Size = new System.Drawing.Size(88, 16); + this.fastSignedRadio.TabIndex = 8; + this.fastSignedRadio.TabStop = true; + this.fastSignedRadio.Text = "Fast signed"; + // + // notSignedRadio + // + this.notSignedRadio.Location = new System.Drawing.Point(18, 55); + this.notSignedRadio.Name = "notSignedRadio"; + this.notSignedRadio.Size = new System.Drawing.Size(72, 24); + this.notSignedRadio.TabIndex = 10; + this.notSignedRadio.Text = "Disabled"; + // + // migrateHostCheckBox + // + this.migrateHostCheckBox.Location = new System.Drawing.Point(144, 64); + this.migrateHostCheckBox.Name = "migrateHostCheckBox"; + this.migrateHostCheckBox.Size = new System.Drawing.Size(136, 24); + this.migrateHostCheckBox.TabIndex = 11; + this.migrateHostCheckBox.Text = "Enable Host Migration"; + this.migrateHostCheckBox.Visible = false; + // + // useDPNSVRCheckBox + // + this.useDPNSVRCheckBox.Location = new System.Drawing.Point(144, 84); + this.useDPNSVRCheckBox.Name = "useDPNSVRCheckBox"; + this.useDPNSVRCheckBox.Size = new System.Drawing.Size(136, 24); + this.useDPNSVRCheckBox.TabIndex = 12; + this.useDPNSVRCheckBox.Text = "Use DPNSVR"; + this.useDPNSVRCheckBox.Visible = false; + // + // localPortLabel + // + this.localPortLabel.Location = new System.Drawing.Point(152, 122); + this.localPortLabel.Name = "localPortLabel"; + this.localPortLabel.Size = new System.Drawing.Size(64, 17); + this.localPortLabel.TabIndex = 13; + this.localPortLabel.Text = "Local Port:"; + // + // localPortTextBox + // + this.localPortTextBox.Location = new System.Drawing.Point(216, 120); + this.localPortTextBox.Name = "localPortTextBox"; + this.localPortTextBox.Size = new System.Drawing.Size(56, 20); + this.localPortTextBox.TabIndex = 14; + this.localPortTextBox.Text = "2580"; + // + // CreateSessionForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(290, 200); + this.ControlBox = false; + this.Controls.Add(this.localPortTextBox); + this.Controls.Add(this.localPortLabel); + this.Controls.Add(this.useDPNSVRCheckBox); + this.Controls.Add(this.migrateHostCheckBox); + this.Controls.Add(this.txtSession); + this.Controls.Add(this.label1); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.btnCancel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.HelpButton = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateSessionForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Create a Session"; + this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.CreateSessionForm_HelpRequested); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// We are ready to create a session. Ensure the data is valid + /// then create the session + /// + private void btnOK_Click(object sender, System.EventArgs e) { + ApplicationDescription dpApp; + if ((txtSession.Text == null) || (txtSession.Text == "")) { + MessageBox.Show(this,"Please enter a session name before clicking OK.","No sessionname",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlaySessionName", txtSession.Text); + if (migrateHostCheckBox.Checked) + regKey.SetValue("DirectPlayMigrateHost",1); + else + regKey.SetValue("DirectPlayMigrateHost",0); + + if (fastSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Fast"); + else if (fullSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Full"); + else + regKey.SetValue("DirectPlaySessionSigning","Disabled"); + regKey.Close(); + } + + dpApp = new ApplicationDescription(); + dpApp.GuidApplication = connectionWizard.ApplicationGuid; + dpApp.SessionName = txtSession.Text; + dpApp.Flags = 0; + dpApp.MaxPlayers = 2; + + if (migrateHostCheckBox.Checked) + dpApp.Flags |= SessionFlags.MigrateHost; + + if (!useDPNSVRCheckBox.Checked) + dpApp.Flags |= SessionFlags.NoDpnServer; + + if (fastSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FastSigned; + else if (fullSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FullSigned; + + // Specify the port number if available + if (ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + if (Port > 0) + deviceAddress.AddComponent(Address.KeyPort, Port); + } + + connectionWizard.SetUserInfo(); + // Host a game on deviceAddress as described by dpApp + // HostFlags.OkToQueryForAddressing allows DirectPlay to prompt the user + // using a dialog box for any device address information that is missing + peer.Host(dpApp,deviceAddress,HostFlags.OkToQueryForAddressing); + this.DialogResult = DialogResult.OK; + } + + private void CreateSessionForm_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent) { + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_CreateForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_CreateForm.resx new file mode 100644 index 0000000..3e4ebdd --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_CreateForm.resx @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Private + + + Private + + + False + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + CreateSessionForm + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_JoinForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_JoinForm.cs new file mode 100644 index 0000000..a86efa7 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_JoinForm.cs @@ -0,0 +1,481 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_JoinForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will search for existing running samples and allow you to join them or will +/// allow you to create your own session as a host +/// +public class CreateJoinForm : System.Windows.Forms.Form { + private const int EnumExpireThreshold = 2000; + private bool amJoining = false; + + + + + /// + /// Hold our information of hosts we found + /// + private struct FindHostsResponseInformation { + public int LastFoundTime; + public ApplicationDescription ApplicationDesc; + public int RoundTripLatencyMs; + public Address sender; + public Address device; + public override string ToString() { + if (ApplicationDesc.MaxPlayers > 0) + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + "/" + ApplicationDesc.MaxPlayers + ") (" + RoundTripLatencyMs + "ms)"; + else + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + ") (" + RoundTripLatencyMs + "ms)"; + } + }; + + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + private Address hostAddress = null; + private bool isSearching = false; + private int findHostHandle = 0; + private CreateSessionForm createSessionForm = null; + private ResultCode resultCode; + private ArrayList foundHosts = new ArrayList(); + private bool isConnected = false; + private ManualResetEvent connectEvent = null; + private System.Timers.Timer updateListTimer = null; + private System.Timers.Timer connectTimer = null; + + private System.Windows.Forms.ListBox lstSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnSearch; + private System.Windows.Forms.Button btnJoin; + private System.Windows.Forms.Button btnCreate; + + + + + /// + /// Constructor + /// + public CreateJoinForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + deviceAddress = addressObject; + + //Set up the event handlers + peer.FindHostResponse += new FindHostResponseEventHandler(FindHostResponseMessage); + peer.ConnectComplete += new ConnectCompleteEventHandler(ConnectResult); + peer.AsyncOperationComplete += new AsyncOperationCompleteEventHandler(CancelAsync); + + //Set up our timer + updateListTimer = new System.Timers.Timer(300); // A 300 ms interval + updateListTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.UpdateTimer); + updateListTimer.SynchronizingObject = this; + updateListTimer.Start(); + //Set up our connect timer + connectTimer = new System.Timers.Timer(100); // A 100ms interval + connectTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.ConnectTimer); + connectTimer.SynchronizingObject = this; + // Set up our connect event + connectEvent = new ManualResetEvent(false); + + } + + + + + /// + /// An asynchronous operation was cancelled + /// + private void CancelAsync(object sender, AsyncOperationCompleteEventArgs e) { + if (e.Message.AsyncOperationHandle == findHostHandle) { + findHostHandle = 0; + btnSearch.Text = "Start Search"; + isSearching = false; + btnCreate.Enabled = true; + btnSearch.Enabled = true; + } + } + + + + + /// + /// A host was found and responded to our query + /// + private void FindHostResponseMessage(object sender, FindHostResponseEventArgs dpMessage) { + // Now we need to add this to our list of available sessions + SessionAdd(dpMessage.Message); + } + + + + + /// + /// Add this session to our list + /// + /// + private void SessionAdd(FindHostsResponseMessage dpMessage) { + FindHostsResponseInformation dpInfo = new FindHostsResponseInformation(); + + dpInfo.ApplicationDesc = dpMessage.ApplicationDescription; + dpInfo.device = dpMessage.AddressDevice; + dpInfo.sender = dpMessage.AddressSender; + dpInfo.RoundTripLatencyMs = dpMessage.RoundTripLatencyMs; + dpInfo.LastFoundTime = Environment.TickCount; + + // Let's check the items first and see if this one already exists + bool isFound = false; + + lock (foundHosts) { + for (int i = 0; i < lstSession.Items.Count; i++) { + if (dpInfo.ApplicationDesc.GuidInstance == ((FindHostsResponseInformation)lstSession.Items[i]).ApplicationDesc.GuidInstance) { + foundHosts[i] = dpInfo; + lstSession.Items[i] = dpInfo; + isFound = true; + } + } + if (!isFound) { + lstSession.Items.Add(dpInfo); + foundHosts.Add(dpInfo); + } + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + + if (isSearching) { + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + isSearching = !isSearching; + } + if (connectTimer != null) + connectTimer.Dispose(); + + if (updateListTimer != null) + updateListTimer.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.btnJoin = new System.Windows.Forms.Button(); + this.lstSession = new System.Windows.Forms.ListBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnCreate = new System.Windows.Forms.Button(); + this.btnSearch = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnJoin + // + this.btnJoin.Enabled = false; + this.btnJoin.Location = new System.Drawing.Point(7, 227); + this.btnJoin.Name = "btnJoin"; + this.btnJoin.Size = new System.Drawing.Size(74, 27); + this.btnJoin.TabIndex = 2; + this.btnJoin.Text = "Join"; + this.btnJoin.Click += new System.EventHandler(this.btnJoin_Click); + // + // lstSession + // + this.lstSession.Location = new System.Drawing.Point(5, 37); + this.lstSession.Name = "lstSession"; + this.lstSession.Size = new System.Drawing.Size(400, 186); + this.lstSession.TabIndex = 1; + this.lstSession.DoubleClick += new System.EventHandler(this.btnJoin_Click); + this.lstSession.SelectedValueChanged += new System.EventHandler(this.SelectedChange); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(5, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(312, 16); + this.label1.TabIndex = 0; + this.label1.Text = "Select session to join, or click Create to start a new session."; + // + // btnCreate + // + this.btnCreate.DialogResult = System.Windows.Forms.DialogResult.Yes; + this.btnCreate.Location = new System.Drawing.Point(84, 227); + this.btnCreate.Name = "btnCreate"; + this.btnCreate.Size = new System.Drawing.Size(74, 27); + this.btnCreate.TabIndex = 2; + this.btnCreate.Text = "Create"; + this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click); + // + // btnSearch + // + this.btnSearch.Location = new System.Drawing.Point(319, 7); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(86, 27); + this.btnSearch.TabIndex = 2; + this.btnSearch.Text = "Start Search"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(333, 227); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + // + // CreateJoinForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(411, 264); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.btnCreate, + this.btnJoin, + this.btnSearch, + this.btnCancel, + this.lstSession, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateJoinForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Join or create a session"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// The selected session was changed. + /// + private void SelectedChange(object sender, System.EventArgs e) { + if (amJoining) + return; // Do nothing if we are already joining a session + + btnJoin.Enabled = (lstSession.SelectedItem != null); + } + + + + + /// + /// We either want to start or stop searching + /// + private void btnSearch_Click(object sender, System.EventArgs e) { + if (!isSearching) { + if( hostAddress != null ) + hostAddress.Dispose(); + + hostAddress = new Address(); + hostAddress.ServiceProvider = deviceAddress.ServiceProvider; + + // See if we should prompt the user for the remote address + if (ConnectWizard.ProviderRequiresPort(hostAddress.ServiceProvider)) { + AddressForm addressDialog = new AddressForm(connectionWizard.DefaultPort); + addressDialog.ShowDialog(this); + + // If the user cancelled the address form, abort the search + if (addressDialog.DialogResult != DialogResult.OK) + return; + + // If a port was specified, add the component + if (addressDialog.Hostname != "") + hostAddress.AddComponent(Address.KeyHostname, addressDialog.Hostname); + + // If a hostname was specified, add the component + if (addressDialog.Port > 0) + hostAddress.AddComponent(Address.KeyPort, addressDialog.Port); + } + + //Time to enum our hosts + ApplicationDescription desc = new ApplicationDescription(); + desc.GuidApplication = connectionWizard.ApplicationGuid; + + // If the user was not already asked for address information, DirectPlay + // should prompt with native UI + FindHostsFlags flags = 0; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + flags = FindHostsFlags.OkToQueryForAddressing; + + peer.FindHosts(desc,hostAddress,deviceAddress,null,Timeout.Infinite,0,Timeout.Infinite, flags, out findHostHandle); + isSearching = true; + btnCreate.Enabled = false; + btnSearch.Text = "Stop Search"; + } + else { + btnSearch.Text = "Stopping..."; + btnSearch.Enabled = false; + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + } + } + + + + + /// + /// A form was disposed + /// + /// + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createSessionForm) + createSessionForm = null; + } + + + + + /// + /// We should create a new session. Display a dialog allowing the user to set + /// certain options + /// + private void btnCreate_Click(object sender, System.EventArgs e) { + this.DialogResult = DialogResult.None; + ((Button)sender).DialogResult = DialogResult.None; + if (createSessionForm == null) { + createSessionForm = new CreateSessionForm(peer,deviceAddress,connectionWizard); + createSessionForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (createSessionForm.ShowDialog(this) != DialogResult.Cancel) { + ((Button)sender).DialogResult = DialogResult.Yes; + this.DialogResult = DialogResult.Yes; + } + } + + + + + /// + /// Determine if we need to expire any of our currently listed servers + /// + private void UpdateTimer(object sender, System.Timers.ElapsedEventArgs e) { + lock (foundHosts) { + for (int i = 0; i< foundHosts.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)foundHosts[i]).LastFoundTime > EnumExpireThreshold) { + foundHosts.RemoveAt(i); + break; + } + } + for (int i = 0; i< lstSession.Items.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)lstSession.Items[i]).LastFoundTime > EnumExpireThreshold) { + lstSession.Items.RemoveAt(i); + break; + } + } + } + } + + + + + /// + /// Wait for a connect to complete + /// + private void ConnectTimer(object sender, System.Timers.ElapsedEventArgs e) { + if (connectEvent.WaitOne(0,false)) { // Wait for the Connect event to be fired + if (isConnected) { // Are we connected? + // Get rid of the timer + if (updateListTimer != null) + updateListTimer.Stop(); + + if (connectTimer != null) + connectTimer.Stop(); + + this.DialogResult = DialogResult.OK; + this.Close(); + return; + } + else { + MessageBox.Show(this,"Failed to connect. The error code was: \n" + resultCode.ToString() ,"Failed to connect",MessageBoxButtons.OK,MessageBoxIcon.Information); + // Restart our timer + updateListTimer.Start(); + } + } + } + + + + + /// + /// Fired when a connect complete message is received from DirectPlay. Fire + /// our event to notify the sample we've connected + /// + private void ConnectResult(object sender, ConnectCompleteEventArgs e) { + if (e.Message.ResultCode == 0) { + isConnected = true; + } + else + isConnected = false; + + resultCode = e.Message.ResultCode; + // Notify the timer that we've connected. + connectEvent.Set(); + } + + + + + /// + /// Join an existing session + /// + private void btnJoin_Click(object sender, System.EventArgs e) { + FindHostsResponseInformation dpInfo; + if (lstSession.SelectedItem == null) { + MessageBox.Show(this,"Please select a session before clicking join.","No session",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + // Turn off all buttons + btnCreate.Enabled = false; + btnCancel.Enabled = false; + btnJoin.Enabled = false; + btnSearch.Enabled = false; + amJoining = true; + // Stop our secondary timer + updateListTimer.Stop(); + dpInfo = ((FindHostsResponseInformation)lstSession.SelectedItem); + connectionWizard.SetUserInfo(); + peer.Connect(dpInfo.ApplicationDesc,dpInfo.sender, dpInfo.device,null,ConnectFlags.OkToQueryForAddressing); + // Now start our 'Connect' timer + connectTimer.Start(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_JoinForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_JoinForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_JoinForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_ServiceProviderForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_ServiceProviderForm.cs new file mode 100644 index 0000000..4884d84 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_ServiceProviderForm.cs @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_ServiceProviderForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +/// +/// This form allows you to choose a service provider and username for your +/// sample +/// +public class ChooseServiceProviderForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListBox lstSP; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtUser; + private System.Windows.Forms.Button btnCancel; + + + + + /// + /// Constructor + /// + public ChooseServiceProviderForm(Peer peerObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + // Fill up our listbox with the service providers + ServiceProviderInformation[] serviceProviders = peer.GetServiceProviders(false); + foreach (ServiceProviderInformation info in serviceProviders) + lstSP.Items.Add(info); + + txtUser.Text = null; + //Get the default username from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + try { + txtUser.Text = (string)regKey.GetValue("DirectPlayUserName", null); + lstSP.SelectedIndex = (int)regKey.GetValue("DirectPlaySPIndex", 0); + regKey.Close(); + } + catch { + txtUser.Text = null; + lstSP.SelectedIndex = 0; + } + } + else + lstSP.SelectedIndex = 0; + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + txtUser.Text = SystemInformation.UserName; + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.lstSP = new System.Windows.Forms.ListBox(); + this.txtUser = new System.Windows.Forms.TextBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lstSP + // + this.lstSP.Location = new System.Drawing.Point(12, 63); + this.lstSP.Name = "lstSP"; + this.lstSP.Size = new System.Drawing.Size(324, 147); + this.lstSP.TabIndex = 1; + this.lstSP.DoubleClick += new System.EventHandler(this.lstSP_DoubleClick); + // + // txtUser + // + this.txtUser.Location = new System.Drawing.Point(13, 20); + this.txtUser.MaxLength = 30; + this.txtUser.Name = "txtUser"; + this.txtUser.Size = new System.Drawing.Size(326, 20); + this.txtUser.TabIndex = 5; + this.txtUser.Text = ""; + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(181, 215); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 2; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(260, 215); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(11, 44); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(376, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Please pick your service provider:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(10, 5); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(327, 12); + this.label2.TabIndex = 4; + this.label2.Text = "User Name:"; + // + // ChooseServiceProviderForm + // + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(343, 246); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.txtUser, + this.label2, + this.btnCancel, + this.btnOK, + this.lstSP, + this.label1}); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChooseServiceProviderForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Choose Service Provider"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// They don't want to run this sample + /// + private void btnCancel_Click(object sender, System.EventArgs e) { + this.Dispose(); + } + + + + + /// + /// Same as clicking ok + /// + private void lstSP_DoubleClick(object sender, System.EventArgs e) { + // Call the ok button click handler + object[] parameters = new object[] { sender, e }; + this.BeginInvoke(new System.EventHandler(btnOK_Click), parameters); + } + + + + + /// + /// Select this username and service provider if valid, then continue the wizard + /// + private void btnOK_Click(object sender, System.EventArgs e) { + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + MessageBox.Show(this,"Please enter a username before clicking OK.","No Username",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + try { + connectionWizard.ServiceProvider = ((ServiceProviderInformation)lstSP.SelectedItem).Guid; + connectionWizard.Username = txtUser.Text; + } + catch { // We assume if we got here there was no selected item. + MessageBox.Show(this,"Please select a service provider before clicking OK.","No Service Provider",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlayUserName", txtUser.Text); + regKey.SetValue("DirectPlaySPIndex", lstSP.SelectedIndex); + regKey.Close(); + } + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_ServiceProviderForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_ServiceProviderForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/DPlayConnect_ServiceProviderForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/DXUtil.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/DXUtil.cs new file mode 100644 index 0000000..5d0f0e5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/DXUtil.cs @@ -0,0 +1,285 @@ +//----------------------------------------------------------------------------- +// File: DXUtil.cs +// +// Desc: Shortcut macros and functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.IO; +using System.Runtime.InteropServices; + + + + +/// +/// Enumeration for various actions our timer can perform +/// +public enum DirectXTimer { + Reset, + Start, + Stop, + Advance, + GetAbsoluteTime, + GetApplicationTime, + GetElapsedTime +}; + + + + +/// +/// Generic utility functions for our samples +/// +public class DXUtil { + #region Timer Internal Stuff + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceCounter(ref long PerformanceCount); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("winmm.dll")] + public static extern int timeGetTime(); + private static bool isTimerInitialized = false; + private static bool m_bUsingQPF = false; + private static bool m_bTimerStopped = true; + private static long m_llQPFTicksPerSec = 0; + private static long m_llStopTime = 0; + private static long m_llLastElapsedTime = 0; + private static long m_llBaseTime = 0; + private static double m_fLastElapsedTime = 0.0; + private static double m_fBaseTime = 0.0; + private static double m_fStopTime = 0.0; + #endregion + + // Constants for SDK Path registry keys + private const string sdkPath = "Software\\Microsoft\\DirectX SDK"; + private const string sdkKey = "DX9J3SDK Samples Path"; + + private DXUtil() { /* Private Constructor */ } + + + + + /// + /// Returns the DirectX SDK media path + /// + public static string SdkMediaPath { + get { + Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sdkPath); + string sReg = string.Empty; + if (rKey != null) { + sReg = (string)rKey.GetValue(sdkKey); + rKey.Close(); + } + if (sReg != null) + sReg += @"\Media\"; + else + return string.Empty; + + return sReg; + } + } + + + + + /// + /// Performs timer opertations. Use the following commands: + /// + /// DirectXTimer.Reset - to reset the timer + /// DirectXTimer.Start - to start the timer + /// DirectXTimer.Stop - to stop (or pause) the timer + /// DirectXTimer.Advance - to advance the timer by 0.1 seconds + /// DirectXTimer.GetAbsoluteTime - to get the absolute system time + /// DirectXTimer.GetApplicationTime - to get the current time + /// DirectXTimer.GetElapsedTime - to get the time that elapsed between TIMER_GETELAPSEDTIME calls + /// + /// + public static float Timer(DirectXTimer command) { + if (!isTimerInitialized) { + isTimerInitialized = true; + + // Use QueryPerformanceFrequency() to get frequency of timer. If QPF is + // not supported, we will timeGetTime() which returns milliseconds. + long qwTicksPerSec = 0; + m_bUsingQPF = QueryPerformanceFrequency(ref qwTicksPerSec); + if (m_bUsingQPF) + m_llQPFTicksPerSec = qwTicksPerSec; + } + if (m_bUsingQPF) { + double time; + double fElapsedTime; + long qwTime = 0; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_llStopTime != 0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + qwTime = m_llStopTime; + else + QueryPerformanceCounter(ref qwTime); + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (qwTime - m_llLastElapsedTime) / (double) m_llQPFTicksPerSec; + m_llLastElapsedTime = qwTime; + return (float)fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + double fAppTime = (double) (qwTime - m_llBaseTime) / (double) m_llQPFTicksPerSec; + return (float)fAppTime; + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_llBaseTime = qwTime; + m_llLastElapsedTime = qwTime; + m_llStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_llBaseTime += qwTime - m_llStopTime; + m_llStopTime = 0; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_llStopTime = qwTime; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_llStopTime += m_llQPFTicksPerSec/10; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + time = qwTime / (double) m_llQPFTicksPerSec; + return (float)time; + } + + return -1.0f; // Invalid command specified + } + else { + // Get the time using timeGetTime() + double time; + double fElapsedTime; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_fStopTime != 0.0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + time = m_fStopTime; + else + time = timeGetTime() * 0.001; + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (time - m_fLastElapsedTime); + m_fLastElapsedTime = time; + return (float) fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + return (float) (time - m_fBaseTime); + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_fBaseTime = time; + m_fLastElapsedTime = time; + m_fStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_fBaseTime += time - m_fStopTime; + m_fStopTime = 0.0f; + m_fLastElapsedTime = time; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_fStopTime = time; + m_fLastElapsedTime = time; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_fStopTime += 0.1f; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + return (float) time; + } + + return -1.0f; // Invalid command specified + } + } + + + + + /// + /// Returns a valid path to a DXSDK media file + /// + /// Initial path to search + /// Filename we're searching for + /// Full path to the file + public static string FindMediaFile(string path, string filename) { + // First try to load the file in the full path + if (path != null) { + if (File.Exists(AppendDirectorySeparator(path) + filename)) + return AppendDirectorySeparator(path) + filename; + } + + // if not try to find the filename in the current folder. + if (File.Exists(filename)) + return AppendDirectorySeparator(Directory.GetCurrentDirectory()) + filename; + + // last, check if the file exists in the media directory + if (File.Exists(AppendDirectorySeparator(SdkMediaPath) + filename)) + return AppendDirectorySeparator(SdkMediaPath) + filename; + + throw new FileNotFoundException("Could not find this file.", filename); + } + + + + + /// + /// Returns a valid string with a directory separator at the end. + /// + private static string AppendDirectorySeparator(string filename) { + if (!filename.EndsWith(@"\")) + return filename + @"\"; + + return filename; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/GameClass.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/GameClass.cs new file mode 100644 index 0000000..7c6e40e --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/GameClass.cs @@ -0,0 +1,524 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; +using Microsoft.DirectX.DirectPlay; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public delegate void MessageDelegate(byte message); // Delegate for messages arriving via DirectPlay. +public delegate void AudioDelegate(); // Delegate to handle audio playback. +public delegate void PeerCloseCallback(); // This delegate will be called when the session terminated event is fired. + +public class GameClass : GraphicsSample { + private GraphicsFont drawingFont = null; + private Point destination = new Point(0, 0); + private InputClass input = null; + private MouseInput mouseInput = null; + + private bool networkEnabled; + private PlayClass peer = null; + private bool remotePlayerActive = false; + private string statusMessage; + private float statusMessageTimer; + private PositionedMesh spaceSphere = null; + private Ship playerShip = null; + private Ship opponentShip = null; + private HullColors hullColor = HullColors.White; + private Camera camera = null; + private CameraMode cameraMode = CameraMode.ChaseMode; + private Matrix viewMatrix; + private Vector2 screenCenter; + private Vector2 mouseLoc; + private SoundHandler soundHandler = null; + private bool kbThrust = false; + private bool cPressed = false; + private bool f5Pressed = false; + private bool f6Pressed = false; + private bool f7Pressed = false; + private bool f8Pressed = false; + private bool f9Pressed = false; + private bool f10Pressed = false; + private bool spacePressed = false; + + private Texture bgPointerTexture = null; + private Texture vectorPanel = null; + private RenderToSurface rts = null; + private Surface renderSurface = null; + private BGPointer bgPointer = null; + private int range = 0; + + private GameStates gameState; + public GameStates GameState { get { return gameState; } set { gameState = value; } } + + private string debugText; + public string DebugText { get { return debugText; } set { debugText = value; } } + private bool debugging = true; + + public GameClass(bool startFullScreen, Size size, bool enableNetwork) { + this.startFullscreen = startFullScreen; + this.Size = size; + this.networkEnabled = enableNetwork; + this.Text = "SpaceWar3D-Step10"; + statusMessageTimer = Constants.StatusMessageDisplayTime; + + drawingFont = new GraphicsFont( "Verdana", System.Drawing.FontStyle.Regular); + + input = new InputClass(this); + mouseInput = new MouseInput(this); + this.MouseMove +=new MouseEventHandler(GameClass_MouseMove); + this.Cursor = Cursors.NoMove2D; + + camera = new Camera(); + soundHandler = new SoundHandler(this); + + if (networkEnabled) { + peer = new PlayClass(this); + if (peer.IsHost) { + hullColor = HullColors.Red; + } + } + + } + + private void ProcessInput() { + //Get input + KeyboardState kbState = input.GetInputState(); + if (kbState == null) + return; + if (kbState[Key.W] || kbState[Key.Up]) { + kbThrust = true; + } + else { + kbThrust = false; + } + if (kbState[Key.C] && !cPressed) { + cPressed = true; + SelectNextCameraMode(); + } + if (!kbState[Key.C]) { + cPressed = false; + } + + if (kbState[Key.F5] && !f5Pressed) { + f5Pressed = true; + playerShip.Sounds |= Sounds.Taunt; + } + if (!kbState[Key.F5]) { + f5Pressed = false; + } + if (kbState[Key.F6] && !f6Pressed) { + f6Pressed = true; + playerShip.Sounds |= Sounds.Dude1; + } + if (!kbState[Key.F6]) { + f6Pressed = false; + } + if (kbState[Key.F7] && !f7Pressed) { + f7Pressed = true; + playerShip.Sounds |= Sounds.Dude2; + } + if (!kbState[Key.F7]) { + f7Pressed = false; + } + if (kbState[Key.F8] && !f8Pressed) { + f8Pressed = true; + playerShip.Sounds |= Sounds.Dude3; + } + if (!kbState[Key.F8]) { + f8Pressed = false; + } + if (kbState[Key.F9] && !f9Pressed) { + f9Pressed = true; + playerShip.Sounds |= Sounds.Dude4; + } + if (!kbState[Key.F9]) { + f9Pressed = false; + } + if (kbState[Key.F10] && !f10Pressed) { + f10Pressed = true; + playerShip.Sounds |= Sounds.Dude1; + } + if (!kbState[Key.F10]) { + f10Pressed = false; + } + if (kbState[Key.Space] && !spacePressed) { + spacePressed = true; + playerShip.EnterHyper(); + } + if (!kbState[Key.Space]) { + spacePressed = false; + } + } + + protected override void FrameMove() { + statusMessageTimer += elapsedTime; + + int fps = (int) framePerSecond; + debugText = "FPS: " + fps.ToString() + "\r\n"; + ProcessInput(); + MouseControlValues v = mouseInput.Values; + if (v.FireButtonPushed) + playerShip.Shoot(); + + float yawAmount = mouseLoc.X - screenCenter.X; + float pitchAmount = mouseLoc.Y - screenCenter.Y; + + playerShip.YawPitchRoll(yawAmount, pitchAmount, elapsedTime); + playerShip.SetThrust(v.ThrustButtonPushed | kbThrust, elapsedTime); + playerShip.UpdatePosition(elapsedTime); + playerShip.UpdateState(elapsedTime); + playerShip.TestShip(opponentShip); + //Send our ship update to the remote player + SendMyPlayerUpdate(); + + // If there is no remote player, fly the o ther ship around in a circle for target practice. + // Ideally, we would derive an AI controlled ship from the ship class and use it instead. + if (!remotePlayerActive) { + opponentShip.SetThrust(true, elapsedTime); + opponentShip.YawPitchRoll(250,0,elapsedTime); + opponentShip.TestShip(playerShip); + } + opponentShip.UpdatePosition(elapsedTime); + opponentShip.UpdateState(elapsedTime); + + /*Here we set up the view matrix and space dome location. The space dome moves but not rotates with the player + * and is alway drawn first, so it looks like it is infinitely distant. + * + * In chase mode, the chaseMatrix determines the offset from the ship. If you want to move our viewpoint + * back from the ship more, increase the negative z value. + * + * The fixed mode camera sits at the origin and always tracks the player ship. Very hard to control from + * this viewpoint, but cool to watch. + */ + + Vector3 spaceSphereLocation = new Vector3(0, 0, 0); + switch (cameraMode) { + case CameraMode.ChaseMode: { + Matrix chaseMatrix = Matrix.Translation(0, 6, -14); + chaseMatrix *= playerShip.Position.WorldMatrix; + viewMatrix = Matrix.Invert(chaseMatrix); + spaceSphereLocation = playerShip.Position.Location; + break; + } + case CameraMode.CockpitMode: { + viewMatrix = Matrix.Invert(playerShip.Position.WorldMatrix); + spaceSphereLocation = playerShip.Position.Location; + break; + } + case CameraMode.Fixed: { + camera.Point(0,0,0, + playerShip.Position.XPos, + playerShip.Position.YPos, + playerShip.Position.ZPos); + viewMatrix = camera.ViewMatrix; + spaceSphereLocation = new Vector3(0, 0, 0); + break; + } + } + device.Transform.View = viewMatrix; + spaceSphere.Position.Location = spaceSphereLocation; + + //rotate space very slowly for that nice twinkly star effect + spaceSphere.Position.RotateRel(-.001f * elapsedTime,-0.0001f * elapsedTime, 0); + + //Calculate range and direction to target + range = (int) Vector3.Length( + playerShip.Position.Location - opponentShip.Position.Location); + bgPointer.Point(playerShip.Position, opponentShip.Position); + + //Play the sounds + soundHandler.Play(opponentShip.Sounds | playerShip.Sounds); + opponentShip.Sounds = (Sounds) 0; + playerShip.Sounds = (Sounds) 0; + } + + + /// + /// Called once per frame, the call is the entry point for 3d rendering. This + /// function sets up render states, clears the viewport, and renders the scene. + /// + protected override void Render() { + RenderBGPointer(); + + //Clear the backbuffer to a Blue color + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + + //Set the view matrix + device.Transform.View = viewMatrix; + + //Begin the scene + device.BeginScene(); + device.RenderState.ZBufferEnable = false; + device.RenderState.Lighting = false; + spaceSphere.Render(); + device.RenderState.Lighting = true; + device.RenderState.ZBufferEnable = true; + + device.Transform.World = playerShip.Position.WorldMatrix; + playerShip.Render(); + opponentShip.Render(); + + //Render our targeting pointer + using (Sprite pointerSprite = new Sprite(device)) { + pointerSprite.Begin(SpriteFlags.AlphaBlend); + + pointerSprite.Draw(bgPointerTexture, new Rectangle(0, 0, 128, 128), + new Vector3(0, 0, 0), new Vector3(42, this.Height - 250, 0), Color.White); + pointerSprite.Transform = Matrix.Identity; + pointerSprite.Draw(vectorPanel,new Rectangle(0,0,193,173), + new Vector3(0,0,0), new Vector3(10, this.Height- 282, 0), Color.White); + + pointerSprite.End(); + } + //Output the scores + drawingFont.DrawText(5, 20, Color.Red, playerShip.HostName.ToString() + ":"); + drawingFont.DrawText(100,20,Color.Red,playerShip.Score.ToString()); + if (remotePlayerActive) { + drawingFont.DrawText(5,45,Color.White, peer.RemotePlayer.Name + ":"); + drawingFont.DrawText(100,45, Color.White, opponentShip.Score.ToString()); + } + + //Display any status messages + if (statusMessageTimer < Constants.StatusMessageDisplayTime) { + drawingFont.DrawText(200, screenCenter.Y, Color.FromArgb(200,220,220,255), statusMessage); + } + + if (debugging) { + drawingFont.DrawText(5,5,Color.Yellow,debugText); + } + device.EndScene(); + } + + private void RenderBGPointer() { + Viewport view = new Viewport(); + view.Width = 128; + view.Height = 128; + view.MaxZ = 1.0f; + + Matrix currentViewMatrix = device.Transform.View; + + rts.BeginScene(renderSurface, view); + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); + + if (playerShip.State == ShipState.Normal && + opponentShip.State == ShipState.Normal) { + Matrix pointerViewMatrix = Matrix.Translation(0, 2, -15); + pointerViewMatrix *= playerShip.Position.WorldMatrix; + device.Transform.View = Matrix.Invert(pointerViewMatrix); + + bgPointer.Render(); + drawingFont.DrawText(2,2,Color.LimeGreen, "Range: " + range.ToString()); + } + + rts.EndScene(Filter.Linear); + device.Transform.View = currentViewMatrix; + + } + + /// + /// Initialize scene objects. + /// + protected override void InitializeDeviceObjects() { + drawingFont.InitializeDeviceObjects(device); + + spaceSphere = new PositionedMesh(device, "SpaceSphere.x"); + + playerShip = new Ship(device, this, hullColor); + if (playerShip.HostName == null) + playerShip.HostName = "Player"; + playerShip.State = ShipState.Normal; + + HullColors opponentHullColor; + if (hullColor == HullColors.Red) + opponentHullColor = HullColors.White; + else + opponentHullColor = HullColors.Red; + + opponentShip = new Ship(device, this, opponentHullColor); + if (opponentShip.HostName == null) + opponentShip.HostName = "Opponent"; + opponentShip.State = ShipState.Normal; + + bgPointer = new BGPointer(device); + vectorPanel = TextureLoader.FromFile(device, MediaUtilities.FindFile("vectorPanel.png")); + + rts = new RenderToSurface(device, 128, 128, Format.X8R8G8B8, true, DepthFormat.D16); + + + } + + /// + /// Called when a device needs to be restored. + /// + protected override void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { + device.RenderState.Ambient = Color.FromArgb(150,150,150); + device.RenderState.SpecularEnable = true; + device.Lights[0].Type = LightType.Directional; + device.Lights[0].Direction = new Vector3(0,-1, -1); + device.Lights[0].Diffuse = Color.White; + device.Lights[0].Specular = Color.White; + device.Lights[0].Enabled = true; + device.RenderState.Lighting = true; + + device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, + (presentParams.BackBufferWidth/presentParams.BackBufferHeight), + 1.5f, 20000.0f ); + + device.Transform.View = camera.ViewMatrix; + + screenCenter = new Vector2( + presentParams.BackBufferWidth / 2, + presentParams.BackBufferHeight / 2); + + if (bgPointerTexture != null) + bgPointerTexture.Dispose(); + bgPointerTexture = new Texture(device, 128, 128, 1, Usage.RenderTarget, + Format.X8R8G8B8, Pool.Default); + renderSurface = bgPointerTexture.GetSurfaceLevel(0); + + gameState = GameStates.Running; + + } + + public void RemotePlayerJoined(string playerName) { + remotePlayerActive = true; + statusMessage = playerName + " has joined the game."; + statusMessageTimer = 0; + + } + + public void RemotePlayerLeft(string playerName) { + remotePlayerActive = false; + statusMessage = playerName + " has left the game."; + statusMessageTimer = 0; + } + + public void DataReceived(object sender, ReceiveEventArgs rea) { + + int senderID = rea.Message.SenderID; + + //Ignore messages received before we are initialized + if ((gameState == GameStates.Loading) || (gameState == GameStates.Config)) { + rea.Message.ReceiveData.Dispose(); + return; + } + + byte mType = (byte)rea.Message.ReceiveData.Read(typeof(byte)); + MessageType messageType = (MessageType)mType; + + switch (messageType) { + case MessageType.PlayerUpdateID: { + PlayerUpdate update = (PlayerUpdate)rea.Message.ReceiveData.Read(typeof(PlayerUpdate)); + ShotUpdate shotUpdate = new ShotUpdate(); + shotUpdate.ShotPosition = new Vector3[Constants.NumShots]; + shotUpdate.ShotAge = new float[Constants.NumShots]; + shotUpdate.ShotAlive = new bool[Constants.NumShots]; + + for (int i = 0; i < Constants.NumShots; i++) { + shotUpdate.ShotPosition[i] = (Vector3)rea.Message.ReceiveData.Read(typeof(Vector3)); + shotUpdate.ShotAge[i] = (int)rea.Message.ReceiveData.Read(typeof(int)); + shotUpdate.ShotAlive[i] = (bool)rea.Message.ReceiveData.Read(typeof(bool)); + } + + rea.Message.ReceiveData.Dispose(); + lock(opponentShip) { + opponentShip.Position.WorldMatrix = update.WorldMatrix; + opponentShip.Score = update.Score; + opponentShip.Sounds = (Sounds)update.Sounds; + opponentShip.WaitCount = update.WaitCount; + opponentShip.SetState((ShipState)update.State); + + Photon[] shotArray = opponentShip.ShotHandler.GetShotArray(); + for (int i = 0; i < Constants.NumShots; i++) { + shotArray[i].Location = shotUpdate.ShotPosition[i]; + shotArray[i].Age = shotUpdate.ShotAge[i]; + shotArray[i].Alive = shotUpdate.ShotAlive[i]; + } + opponentShip.ShotHandler.SetShotArray(shotArray); + } + + break; + } + + case MessageType.Add1ToScore: { + rea.Message.ReceiveData.Dispose(); + playerShip.Score += 1; + break; + } + + case MessageType.GamePaused: { + rea.Message.ReceiveData.Dispose(); + gameState = GameStates.Paused; + break; + } + case MessageType.GameRunning: { + rea.Message.ReceiveData.Dispose(); + if (gameState == GameStates.Paused) + gameState = GameStates.Running; + + break; + } + } + } + + public void SendPoint() { + if (!remotePlayerActive) { + playerShip.Score += 1; + return; + } + + peer.SendScorePoint(); + } + + public void SendMyPlayerUpdate() { + if (!networkEnabled) + return; + + PlayerUpdate update = new PlayerUpdate(); + update.WorldMatrix = playerShip.Position.WorldMatrix; + update.State = (int)playerShip.State; + update.WaitCount = playerShip.WaitCount; + update.DeathCount = playerShip.DeathCount; + update.Sounds = (int)playerShip.Sounds; + update.Score = playerShip.Score; + + ShotUpdate shotUpdate = new ShotUpdate(); + shotUpdate.ShotAge = new float[Constants.NumShots]; + shotUpdate.ShotPosition = new Vector3[Constants.NumShots]; + shotUpdate.ShotAlive = new bool[Constants.NumShots]; + + Photon[] shotArray = playerShip.ShotHandler.GetShotArray(); + for (int i = 0; i < Constants.NumShots; i++) { + shotUpdate.ShotPosition[i] = shotArray[i].Location; + shotUpdate.ShotAge[i] = shotArray[i].Age; + shotUpdate.ShotAlive[i] = shotArray[i].Alive; + } + peer.SendPlayerUpdate(update, shotUpdate); + } + + + + /// + // When the peer closes, the code here is executed. + /// + public void PeerClose() { + // The session was terminated, go ahead and shut down + this.Dispose(); + } + + private void SelectNextCameraMode() { + int mode = (int) cameraMode; + mode++; + if (mode > 2) + mode = 0; + cameraMode = (CameraMode) mode; + } + + private void GameClass_MouseMove(object sender, MouseEventArgs e) { + mouseLoc.X = e.X; + mouseLoc.Y = e.Y; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/GameClass.resx b/Source Code updated 08-12-05/Spacewar3D/Step10/GameClass.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/GameClass.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/GameStates.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/GameStates.cs new file mode 100644 index 0000000..e0cbe79 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/GameStates.cs @@ -0,0 +1,11 @@ +using System; + +public enum GameStates { + Loading, + Running, + Config, + Paused, + HelpScreen, + Exiting +} + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/HelpScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/HelpScreen.cs new file mode 100644 index 0000000..7d54363 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/HelpScreen.cs @@ -0,0 +1,113 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.IO; + + + /// + /// Summary description for HelpScreen. + /// +public class HelpScreen : System.Windows.Forms.Form { + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.TextBox helpText; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public HelpScreen() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + string helpFile = MediaUtilities.FindFile("Help.txt"); + if (File.Exists(helpFile)) { + StreamReader sr; + try { + sr = new StreamReader(helpFile); + helpText.Text = sr.ReadToEnd(); + sr.Close(); + } + catch ( Exception e ) { + helpText.Text = e.ToString(); + } + + } + else { + helpText.Text = "Unable to locate " + helpFile.ToString(); + } + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.closeButton = new System.Windows.Forms.Button(); + this.helpText = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // closeButton + // + this.closeButton.BackColor = System.Drawing.Color.Black; + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.Dock = System.Windows.Forms.DockStyle.Bottom; + this.closeButton.ForeColor = System.Drawing.Color.Red; + this.closeButton.Location = new System.Drawing.Point(0, 615); + this.closeButton.Name = "closeButton"; + this.closeButton.Size = new System.Drawing.Size(616, 23); + this.closeButton.TabIndex = 0; + this.closeButton.Text = "Close"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // helpText + // + this.helpText.BackColor = System.Drawing.Color.Black; + this.helpText.Dock = System.Windows.Forms.DockStyle.Fill; + this.helpText.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.helpText.ForeColor = System.Drawing.Color.Red; + this.helpText.Location = new System.Drawing.Point(0, 0); + this.helpText.Multiline = true; + this.helpText.Name = "helpText"; + this.helpText.ReadOnly = true; + this.helpText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.helpText.Size = new System.Drawing.Size(616, 615); + this.helpText.TabIndex = 1; + this.helpText.TabStop = false; + this.helpText.Text = ""; + // + // HelpScreen + // + this.AcceptButton = this.closeButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(616, 638); + this.Controls.Add(this.helpText); + this.Controls.Add(this.closeButton); + this.Name = "HelpScreen"; + this.Text = "SpaceWar! Help"; + this.ResumeLayout(false); + + } + #endregion + + private void closeButton_Click(object sender, System.EventArgs e) { + this.Close(); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/HelpScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step10/HelpScreen.resx new file mode 100644 index 0000000..a4f535a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/HelpScreen.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + HelpScreen + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/MediaUtilities.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/MediaUtilities.cs new file mode 100644 index 0000000..685a63d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/MediaUtilities.cs @@ -0,0 +1,35 @@ +using System; +using System.IO; +using System.Configuration; + + + /// + /// Summary description for MediaUtilities. + /// +public class MediaUtilities { + // private static string defaultPath = @"..\..\media\"; + private static string mediaPath = ConfigurationSettings.AppSettings.Get("MediaPath"); + + public MediaUtilities() { + } + + public static string FindFile(string filename) { + return FindFile(mediaPath, filename); + } + + public static string FindFile(string path, string filename) { + // First try to load the file in the full path + string fullName = AppendDirectorySeparator(path) + filename; + if (File.Exists(fullName)) + return fullName; + else + throw new FileNotFoundException("Could not find this file.", filename); + } + + private static string AppendDirectorySeparator(string pathname) { + if (!pathname.EndsWith(@"\")) + return pathname + @"\"; + else + return pathname; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/MessageType.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/MessageType.cs new file mode 100644 index 0000000..c3a73b2 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/MessageType.cs @@ -0,0 +1,10 @@ +using System; + +public enum MessageType { + PlayerUpdateID, + GameParamUpdateID, + GamePaused, + GameRunning, + Add1ToScore, + Add2ToScore +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/MouseInput.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/MouseInput.cs new file mode 100644 index 0000000..55a295e --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/MouseInput.cs @@ -0,0 +1,55 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + + + +public struct MouseControlValues { + public int Yaw; + public int Pitch; + public bool FireButtonPushed; + public bool ThrustButtonPushed; +} + + /// + /// Summary description for MouseInput. + /// +public class MouseInput { + private Device device = null; + private MouseControlValues values; + public MouseControlValues Values { + get { + UpdateInput(); + return values; + } + } + + public MouseInput(Control parent) { + // Create our mouse device + device = new Device(SystemGuid.Mouse); + device.SetCooperativeLevel(parent, CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive); + device.Properties.AxisModeAbsolute = false; + device.Acquire(); + } + + + public void UpdateInput() { + MouseState state = device.CurrentMouseState; + values.Yaw = state.X; + values.Pitch = state.Y; + + byte [] buttonStatus = state.GetMouseButtons(); + if (buttonStatus[0]!=0) + values.FireButtonPushed = true; + else + values.FireButtonPushed = false; + + if (buttonStatus[1]!=0) + values.ThrustButtonPushed = true; + else + values.ThrustButtonPushed = false; + + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/ParticleEffects.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/ParticleEffects.cs new file mode 100644 index 0000000..02ebfc3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/ParticleEffects.cs @@ -0,0 +1,221 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using System.Drawing; +public class ParticleEffects { + public struct PointVertex { + public Vector3 v; + public int color; + public static readonly VertexFormats Format = VertexFormats.Position | VertexFormats.Diffuse; + }; + + /// + /// Global data for the particles + /// + public struct Particle { + public Vector3 positionVector; // Current position + public Vector3 velocityVector; // Current velocity + public Vector3 initialPosition; // Initial position + public Vector3 initialVelocity; // Initial velocity + public float creationTime; // Time of creation + public System.Drawing.Color diffuseColor; // Initial diffuse color + public System.Drawing.Color fadeColor; // Faded diffuse color + public float fadeProgression; // Fade progression + }; + + + private float time = 0.0f; + private const int bufferChunkSize = 8192; + private const int maxBufferSize = bufferChunkSize*4; //supports 4 bufferChunkSize buffers before discarding + private int baseParticle = maxBufferSize; + private int particles = 0; + private const int particlesLimit = 2048; + private Vector3 location; + private Vector3 offset; + private System.Collections.ArrayList particlesList = new System.Collections.ArrayList(); + private System.Collections.ArrayList freeParticles = new System.Collections.ArrayList(); + private System.Random rand = new System.Random(); + public Vector3 EmitterLocation {get { return location; } } + public Vector3 EmitterOffset { get { return offset; } set { offset = value; } } + // Geometry + private VertexBuffer vertexBuffer = null; + private Texture particleTexture; + public Texture ParticleTexture { set { particleTexture = value; } } + private Device device = null; + + /// + /// VaporTrail constructor + /// + public ParticleEffects(Device device) { + this.device = device; + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + RestoreDeviceObjects(device, null); + } + + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (vertexBuffer != null) + vertexBuffer.Dispose(); + vertexBuffer = null; + } + + /// + /// Restores the device objects + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + Device device = (Device)sender; + // Create a vertex buffer for the particle system. The size of this buffer + // does not relate to the number of particles that exist. Rather, the + // buffer is used as a communication channel with the device.. we fill in + // a bit, and tell the device to draw. While the device is drawing, we + // fill in the next bit using NOOVERWRITE. We continue doing this until + // we run out of vertex buffer space, and are forced to discard the buffer + // and start over at the beginning. + vertexBuffer = new VertexBuffer(typeof(PointVertex), maxBufferSize, device, Usage.Dynamic | Usage.WriteOnly | Usage.Points, PointVertex.Format, Pool.Default); + } + + /// + /// Updates the thrust effects (vapor trail) + /// + public void UpdateThrustEffect(float ElapsedTime, int NumParticlesToEmit, + System.Drawing.Color EmitColor,System.Drawing.Color FadeColor, Vector3 Position) { + time += ElapsedTime; + location = Position; + for (int i = particlesList.Count-1; i >= 0; i--) { + Particle p = (Particle)particlesList[i]; + // Calculate new position + float fT = time - p.creationTime; + p.fadeProgression -= ElapsedTime * 0.60f; + p.positionVector = p.initialVelocity * fT + p.initialPosition; + p.velocityVector.Z = 0; + if (p.fadeProgression < 0.0f) + p.fadeProgression = 0.0f; + // Kill old particles + if (p.fadeProgression <= 0.0f) { + // Kill particle + freeParticles.Add(p); + particlesList.RemoveAt(i); + particles--; + } + else + particlesList[i] = p; + } + // Emit new particles + int particlesEmit = particles + NumParticlesToEmit; + while(particles < particlesLimit && particles < particlesEmit) { + Particle particle; + if (freeParticles.Count > 0) { + particle = (Particle)freeParticles[0]; + freeParticles.RemoveAt(0); + } + else { + particle = new Particle(); + } + // Emit new particle + particle.initialPosition = Position + offset; + particle.positionVector = particle.initialPosition; + particle.velocityVector = particle.initialVelocity; + particle.diffuseColor = EmitColor; + particle.fadeColor = FadeColor; + particle.fadeProgression = 1.0f; + particle.creationTime = time; + particlesList.Add(particle); + particles++; + } + } + + /// + /// Renders the scene + /// + public void Render() { + // Set the render states for using point sprites + device.RenderState.ZBufferWriteEnable = false; + device.RenderState.AlphaBlendEnable = true; + device.RenderState.SourceBlend = Blend.One; + device.RenderState.DestinationBlend = Blend.One; + bool lightEnabled = device.RenderState.Lighting; + device.RenderState.Lighting = false; + device.SetTexture(0, particleTexture); + device.Transform.World = Matrix.Identity; + device.RenderState.PointSpriteEnable = true; + device.RenderState.PointScaleEnable = true; + device.RenderState.PointSize = 1.0f; + device.RenderState.PointScaleA = 0f; + device.RenderState.PointScaleB = 1.0f; + device.RenderState.PointScaleC = 1.0f; + // Set up the vertex buffer to be rendered + device.SetStreamSource(0, vertexBuffer, 0); + device.VertexFormat = PointVertex.Format; + PointVertex[] vertices = null; + int numParticlesToRender = 0; + // Lock the vertex buffer. We fill the vertex buffer in small + // chunks, using LockFlags.NoOverWrite. When we are done filling + // each chunk, we call DrawPrim, and lock the next chunk. When + // we run out of space in the vertex buffer, we start over at + // the beginning, using LockFlags.Discard. + baseParticle += bufferChunkSize; + if (baseParticle >= maxBufferSize) + baseParticle = 0; + int count = 0; + vertices = (PointVertex[])vertexBuffer.Lock(baseParticle * DXHelp.GetTypeSize(typeof(PointVertex)), typeof(PointVertex), (baseParticle != 0) ? LockFlags.NoOverwrite : LockFlags.Discard, bufferChunkSize); + foreach(Particle p in particlesList) { + Vector3 vPos = p.positionVector; + Vector3 velocityVector = p.velocityVector; + float LengthSq = velocityVector.LengthSq(); + uint steps; + if (LengthSq < 1.0f) steps = 2; + else if (LengthSq < 4.00f) steps = 3; + else if (LengthSq < 9.00f) steps = 4; + else if (LengthSq < 12.25f) steps = 5; + else if (LengthSq < 16.00f) steps = 6; + else if (LengthSq < 20.25f) steps = 7; + else steps = 8; + velocityVector *= -0.01f / (float)steps; + System.Drawing.Color diffuse = ColorOperator.Lerp(p.fadeColor, p.diffuseColor, p.fadeProgression); + // Render each particle a bunch of times to get a blurring effect + for (int i = 0; i < steps; i++) { + vertices[count].v = vPos; + vertices[count].color = diffuse.ToArgb(); + count++; + if (++numParticlesToRender == bufferChunkSize) { + // Done filling this chunk of the vertex buffer. Lets unlock and + // draw this portion so we can begin filling the next chunk. + vertexBuffer.Unlock(); + device.DrawPrimitives(PrimitiveType.PointList, baseParticle, numParticlesToRender); + // Lock the next chunk of the vertex buffer. If we are at the + // end of the vertex buffer, LockFlags.Discard the vertex buffer and start + // at the beginning. Otherwise, specify LockFlags.NoOverWrite, so we can + // continue filling the VB while the previous chunk is drawing. + baseParticle += bufferChunkSize; + if (baseParticle >= maxBufferSize) + baseParticle = 0; + vertices = (PointVertex[])vertexBuffer.Lock(baseParticle * DXHelp.GetTypeSize(typeof(PointVertex)), typeof(PointVertex), (baseParticle != 0) ? LockFlags.NoOverwrite : LockFlags.Discard, bufferChunkSize); + count = 0; + numParticlesToRender = 0; + } + vPos += velocityVector; + } + } + + // Unlock the vertex buffer + vertexBuffer.Unlock(); + // Render any remaining particles + if (numParticlesToRender > 0) + device.DrawPrimitives(PrimitiveType.PointList, baseParticle, numParticlesToRender); + // Reset render states + device.RenderState.PointSpriteEnable = false; + device.RenderState.PointScaleEnable = false; + device.RenderState.Lighting = lightEnabled; + device.RenderState.ZBufferWriteEnable = true; + device.RenderState.AlphaBlendEnable = false; + } + + public void Dispose() { + if (vertexBuffer != null) + vertexBuffer.Dispose(); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/Photon.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/Photon.cs new file mode 100644 index 0000000..39efb40 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/Photon.cs @@ -0,0 +1,95 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// Summary description for Photon. + /// +public class Photon : IDisposable { + + private const float maxLife = 5; + public Vector3 Location { + get { + + return photonMesh.Position.Location; + } set { + photonMesh.Position.Location = value; + } + } + + private Vector3 launchVector; + private PositionedMesh photonMesh; + private Device device; + private float age; + public float Age { get { return age; } set { age = value; } } + private bool alive = false; + public bool Alive { get { return alive; } set { alive = value; } } + + private bool disposing = false; + + public Photon(Device device) { + this.device = device; + + photonMesh = new PositionedMesh(device, "photon.x"); + + alive = false; + age = 0; + } + + public void SetShot(Vector3 position, Vector3 launchVector) { + age = 0; + alive = true; + photonMesh.Position.Location = position; + this.launchVector = launchVector; + } + + public void UpdatePosition(float elapsedtime) { + if (disposing) + return; + age += elapsedtime; + if (age >= Constants.ShotLifetime ) { + this.alive = false; + } + else { + photonMesh.Position.RotateRel(0, elapsedtime*10,0); + Vector3 moveVector = elapsedtime * Constants.ShotVelocity * launchVector; + photonMesh.Position.MoveRel(moveVector.X, moveVector.Y, moveVector.Z); + } + + } + + public void Render() { + if (disposing | !alive) + return; + + device.RenderState.Lighting = false; + + device.RenderState.AlphaBlendEnable = true; + device.RenderState.AlphaBlendOperation = BlendOperation.Add; + device.RenderState.AlphaSourceBlend = Blend.One; + device.RenderState.DestinationBlend = Blend.One; + device.Transform.World = photonMesh.Position.WorldMatrix; + photonMesh.Render(); + device.RenderState.AlphaBlendEnable = false; + device.RenderState.Lighting = true; + } + + public void RestoreDeviceObjects() { + + } + #region IDisposable Members + + public void Dispose() { + disposing = true; + + if (photonMesh != null) + photonMesh.Dispose(); + + } + + #endregion +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/PlayerUpdateStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/PlayerUpdateStruct.cs new file mode 100644 index 0000000..e8a0525 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/PlayerUpdateStruct.cs @@ -0,0 +1,13 @@ +using System; +using Microsoft.DirectX; + +[Serializable] +public struct PlayerUpdate { + public Vector3 Location; + public Matrix WorldMatrix; + public int State; + public float WaitCount; + public int DeathCount; + public int Sounds; + public int Score; +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/PositionedMesh.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/PositionedMesh.cs new file mode 100644 index 0000000..7f5f278 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/PositionedMesh.cs @@ -0,0 +1,435 @@ +using System; +using System.Drawing; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public class PositionedMesh : IDisposable { + private Device device = null; + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + private Sphere boundingSphere; + + + private WorldPosition worldPosition; + public WorldPosition Position { get { return worldPosition; } set { worldPosition = value; } } + + private float velocity; + public float Velocity { get { return velocity; } set { velocity = value; } } + + /// + /// Constructor + /// + /// The initial filename + public PositionedMesh(string filename) { + fileName = filename; + } + public PositionedMesh() : this ("PositionedMesh") {} + + public PositionedMesh(Device device, string filename) { + Create(device, filename); + } + + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + /// + ///The bounding sphere + /// + public Sphere BoundingSphere { + get { return boundingSphere; } + } + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + worldPosition = new WorldPosition(); + + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + this.device = device; + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + + + + filename = MediaUtilities.FindFile(filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(filename, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + + Mesh tempMesh = null; + string errorString; + tempMesh = Mesh.Clean(CleanType.Optimization, systemMemoryMesh, adjacencyBuffer, adjacencyBuffer, out errorString); + if (tempMesh != systemMemoryMesh) { + systemMemoryMesh.Dispose(); + systemMemoryMesh = tempMesh; + } + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + + // Setup bounding volumes + VertexBuffer vb = systemMemoryMesh.VertexBuffer; + GraphicsStream vertexData = vb.Lock(0, 0, LockFlags.NoSystemLock); + boundingSphere.Radius = Geometry.ComputeBoundingSphere(vertexData,systemMemoryMesh.NumberVertices,systemMemoryMesh.VertexFormat, out boundingSphere.CenterPoint); + vb.Unlock(); + vb.Dispose(); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + + + } + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. + localMemoryMesh = systemMemoryMesh.Clone(MeshFlags.VbWriteOnly | MeshFlags.IbWriteOnly, + systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + // Set the world transform + device.Transform.World = worldPosition.WorldMatrix; + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render() { + Render(true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/RemotePlayer.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/RemotePlayer.cs new file mode 100644 index 0000000..8d7af6d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/RemotePlayer.cs @@ -0,0 +1,69 @@ +using System; +using Microsoft.DirectX; + + + /// + /// Holds information about the other players in the game. + /// +public class RemotePlayer { + int playerID; + string hostName; + Vector3 startingPosition; + DateTime updateTime; // last tick count at update + bool active = true; // is this player active + + public RemotePlayer(int playerID, string hostName) { + this.playerID = playerID; + this.hostName = hostName; + } + + public override string ToString() { + return hostName; + } + + public Vector3 StartingPosition { + get { + return startingPosition; + } + set { + startingPosition = value; + } + } + + public string HostName { + get { + return hostName; + } + set { + hostName = value; + } + } + + public int PlayerID { + get { + return playerID; + } + set { + playerID = value; + } + } + + public DateTime UpdateTime { + get { + return updateTime; + } + set { + updateTime = value; + } + } + + public bool Active { + get { + return active; + } + set { + active = value; + } + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/Ship.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/Ship.cs new file mode 100644 index 0000000..01b8c72 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/Ship.cs @@ -0,0 +1,420 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// This class handles the drawing and collision detection routines for our ship. + /// +public class Ship { + private Shots shots; + private ShipState state = ShipState.Dead; // current state + public ShipState State { get { lock(this){return state;} } set { lock(this){ state = value; }}} + + private Device device; + private PositionedMesh shipMesh; + + private GameClass game; + private ParticleEffects vaporTrail; + private float velocity; + + private string hostName; + + private float waitCount = 6.0f; // wait count before state transition. + public float WaitCount { get { lock(this){return waitCount; }} set { lock(this){ waitCount = value; }}} + private int score; // our score + + private int deathCount; // # of times we've died... + private float hyperSuccess = Constants.HyperSuccessFactor; // chance of a hyper being successful... + + private Sounds sounds; + private Vector3 startingPosition; + + public Shots ShotHandler { + get { + lock(this) { + return shots; + } + } + } + public int DeathCount { + get { + lock(this) { + return deathCount; + } + } + set { + lock(this) { + deathCount = value; + } + } + } + + public int Score { + get { + lock(this) { + return score; + } + } + set { + lock(this) { + score = value; + } + } + } + + public string HostName { + get { + lock(this) { + return hostName; + } + } + set { + lock(this) { + hostName = value; + } + } + } + + public Vector3 Location { + get { + lock (this) { + return shipMesh.Position.Location; + } + } + set { + lock (this) { + shipMesh.Position.Location = value; + } + } + } + + public Vector3 Rotation { + get { + lock(this) { + return shipMesh.Position.Rotation; + } + } + set { + lock(this) { + shipMesh.Position.Rotation = value; + } + } + } + + public WorldPosition Position { + get { + lock (this) { + return shipMesh.Position; + } + } + set { + lock(this) { + shipMesh.Position=value; + } + } + } + + public float Velocity { + get { + lock (this) { + return velocity; + } + } + set { + lock(this) { + velocity = value; + } + } + } + + + + public Sounds Sounds { + get { + lock(this) { + return sounds; + } + } + set { + lock(this) { + sounds = value; + } + } + } + + public Ship(Device device, GameClass gameClass, HullColors hullColor) { + + this.device = device; + this.game = gameClass; + shots = new Shots(device); + if (hullColor == HullColors.White) { + shipMesh = new PositionedMesh(device, "WhiteShip.x"); + startingPosition = new Vector3(10, 0, 10); + } + else { + shipMesh = new PositionedMesh(device, "RedShip.x"); + startingPosition = new Vector3(-50, 0, -150); + } + vaporTrail = new ParticleEffects(device); + vaporTrail.ParticleTexture = TextureLoader.FromFile(device, + MediaUtilities.FindFile("particle-blue.bmp")); + + + SetRandomPosition(true); + + } + + + public void Shoot() { + if (this.state != ShipState.Normal) { + return; + } + + // find out the location of the front of the ship... + + bool shot = shots.Shoot(this.Position.CombinedLocation, this.Position.Direction); + if (shot) { + sounds |= Sounds.ShipFire; + } + } + + public void SetThrust(bool thrust, float elapsedTime) { + + if (thrust && (state == ShipState.Normal)) { + + if (velocity < Constants.MaxVelocity * 0.1f) + velocity = Constants.MaxVelocity * 0.1f; + if (velocity < Constants.MaxVelocity) + velocity += velocity * Constants.ThrustPower; + if (velocity > Constants.MaxVelocity) + velocity = Constants.MaxVelocity; + sounds |= Sounds.ShipThrust; + } + + else { + velocity -= velocity * elapsedTime * 2; + if (velocity < 0.00005f) + velocity = 0.0f; + + if ((sounds & Sounds.ShipThrust) != 0) + sounds ^= Sounds.ShipThrust; + } + } + + + public void EnterHyper() { + if (state != ShipState.Normal) + return; + + SetState(ShipState.HyperCharge); + } + + public void SetRandomPosition(bool setOriginal) { + if (setOriginal) { + shipMesh.Position.Move(startingPosition); + } + else { + shipMesh.Position.RotateRel(0,Constants.random.Next(100),0); + shipMesh.Position.Move( + Constants.random.Next(1000)-500, + Constants.random.Next(1000)-500, + Constants.random.Next(1000)-500); + } + } + + public void SetState(ShipState newState) { + if (newState == state) + return; + + lock(this) { + + switch (newState) { + case ShipState.Dying: + deathCount++; + waitCount = Constants.DyingCycle; + sounds |= Sounds.ShipExplode; + break; + + case ShipState.Dead: + waitCount = Constants.DeadCycleWait; + shipMesh.Position.Move(this.startingPosition); + break; + + case ShipState.Normal: + if (state == ShipState.Hyper) { + SetRandomPosition(false); + } + else { + shipMesh.Position.Move(startingPosition); + velocity = 0.0f; + } + hyperSuccess = Constants.HyperSuccessFactor; + shots.Clear(); + sounds |= Sounds.ShipAppear; + break; + + case ShipState.HyperCharge: + sounds |= Sounds.ShipHyper; + waitCount = Constants.HyperChargeWait; + break; + + case ShipState.Hyper: + waitCount = Constants.HyperCycleWait; + break; + } + state = newState; + } + } + + + public void YawPitchRoll(float yawAmount, float pitchAmount, float elapsedTime) { + float absYaw = Math.Abs(yawAmount); + if ( (0 <= absYaw) & (absYaw <= 30)) { + yawAmount = 0; + } + else if ((31 <= absYaw) & (absYaw <= 150)) { + yawAmount *= 1; + } + else { + yawAmount *= 1.2f; + } + + const float sensitivity = 0.002f; + + float yaw = yawAmount * elapsedTime * sensitivity; + + float absPitch = Math.Abs(pitchAmount); + + if ( (0 <= absPitch) & (absPitch <= 30)) { + pitchAmount = 0; + } + else if ((31 <= absPitch) & (absPitch <= 150)) { + pitchAmount *= 1; + } + else { + pitchAmount *= 1.2f; + } + + float pitch = pitchAmount * elapsedTime * sensitivity; + float roll = 0; + + + this.Position.YawPitchRoll(yaw, pitch, roll); + + } + + public void UpdatePosition(float elapsedTime) { + shots.UpdatePosition(elapsedTime); + + if (state == ShipState.Dying) { + vaporTrail.UpdateThrustEffect(elapsedTime,0,Color.White,Color.Black, + this.Position.CombinedLocation); + return; + } + + + if ((state != ShipState.Normal) && + (state != ShipState.HyperCharge)) + return; + + float xAdd = (elapsedTime * velocity * Position.Direction.X); + float yAdd = (elapsedTime * velocity * Position.Direction.Y); + float zAdd = (elapsedTime * velocity * Position.Direction.Z); + + this.Position.MoveRel(xAdd, yAdd, zAdd); + int numTrailParticles = 4; + vaporTrail.UpdateThrustEffect(elapsedTime,numTrailParticles,Color.White,Color.Black, + this.Position.CombinedLocation); + + } + + public void UpdateState(float elapsedTime) { + if (state == ShipState.Dying) { + this.waitCount -= elapsedTime; + if (waitCount <= 0) { + SetState(ShipState.Dead); + } + } + + if (state == ShipState.Dead) { + this.waitCount -= elapsedTime; + if (waitCount <= 0) { + SetState(ShipState.Normal); + } + } + + if (state == ShipState.HyperCharge) { + this.waitCount -= elapsedTime; + shipMesh.Position.RotateRel(0,-elapsedTime * Constants.HyperCycleWait *6.0f, 0); + + if (waitCount <= 0) { + // if we didn't make it, we're dying... + double randValue = Constants.random.NextDouble(); + if (hyperSuccess < randValue) { + SetState(ShipState.Dying); + game.SendPoint(); + } + else { + SetState(ShipState.Hyper); + } + } + } + if (state == ShipState.Hyper) { + this.waitCount -= elapsedTime; + shipMesh.Position.RotateRel(0, -elapsedTime * this.waitCount * 6.0f, 0); + if (waitCount <= 0) { + hyperSuccess -= Constants.HyperSuccessDegradation; + float save = this.hyperSuccess; + SetState(ShipState.Normal); + hyperSuccess = save; + } + } + + } + public void TestShip(Ship otherShip) { + + // if we're not alive, don't do any tests... + if (state != ShipState.Normal) + return; + + // Test if their shots are close enough to us. + if (otherShip.shots.TestShots(this)) { + SetState(ShipState.Dying); + game.SendPoint(); + } + + //Test for collision with ship or it's death explosion + if ((otherShip.state == ShipState.Normal) | (otherShip.state == ShipState.Dying)) { + Vector3 delta = this.Position.Location - otherShip.Position.Location; + if (Vector3.Length(delta) < Constants.ShipCollisionLimit) { + SetState(ShipState.Dying); + game.SendPoint(); + } + } + } + + public void Render() { + switch (this.state) { + case ShipState.Normal: { + device.RenderState.Lighting = true; + device.RenderState.ZBufferEnable = true; + device.Transform.World = shipMesh.Position.WorldMatrix; + shipMesh.Render(); + vaporTrail.Render(); + shots.Render(); + break; + } + case ShipState.Dying: { + vaporTrail.Render(); + break; + } + default: { + return; + } + } + } + +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/ShipSkins.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/ShipSkins.cs new file mode 100644 index 0000000..42b4546 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/ShipSkins.cs @@ -0,0 +1,5 @@ +public enum HullColors { + Red, + White +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/ShipState.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/ShipState.cs new file mode 100644 index 0000000..827eb64 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/ShipState.cs @@ -0,0 +1,12 @@ +using System; + + +public enum ShipState { + Normal, + Dying, + Dead, + Hyper, + HyperCharge, +}; + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/ShotUpdateStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/ShotUpdateStruct.cs new file mode 100644 index 0000000..908fe7b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/ShotUpdateStruct.cs @@ -0,0 +1,9 @@ +using System; +using Microsoft.DirectX; + + +public struct ShotUpdate { + public Vector3[] ShotPosition; + public float[] ShotAge; + public bool [] ShotAlive; +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/Shots.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/Shots.cs new file mode 100644 index 0000000..d1aed11 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/Shots.cs @@ -0,0 +1,101 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + /// + /// Handles the collision detection and returns the array of shots for sending to other players + /// +[Serializable] +public class Shots { + + Photon[] shots; + [NonSerialized] + float timeSinceShot = 0; + [NonSerialized] + Rectangle screenBounds; + + + public Shots(Device device) { + shots = new Photon[Constants.NumShots]; + for (int count = 0; count < Constants.NumShots; count++) { + shots[count] = new Photon(device); + } + } + + public Rectangle ScreenBounds { + get { + return screenBounds; + } + set { + screenBounds = value; + } + } + public Photon[] GetShotArray() { + lock(this) { + return shots; + } + } + + public void SetShotArray(Photon[] shotArray) { + lock(this) { + this.shots = shotArray; + } + } + + public bool Shoot(Vector3 position, Vector3 launchVector) { + if (timeSinceShot < Constants.ShotDeltaTime) + return false; + + timeSinceShot = 0; + + + foreach (Photon shot in shots) { + if (!shot.Alive) { + shot.SetShot(position, launchVector); + return true; + } + } + return false; + } + + public void UpdatePosition(float elapsedTime) { + timeSinceShot += elapsedTime; + + foreach (Photon shot in shots) { + shot.UpdatePosition(elapsedTime); + } + } + + public void Clear() { + foreach (Photon shot in shots) { + shot.Alive = false; + } + } + public bool TestShots(Ship ship) { + foreach (Photon shot in shots) { + if (shot.Alive) { + float distance = Vector3.Length(shot.Location - ship.Position.Location); + if (distance < Constants.ShotCollisionLimit) { + shot.Alive = false; + return true; + } + } + } + return false; + } + + public void Render() { + foreach (Photon shot in shots) { + shot.Render(); + } + } + + public void RestoreDeviceObjects() { + foreach (Photon shot in shots) { + shot.RestoreDeviceObjects(); + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/SoundBuffer.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/SoundBuffer.cs new file mode 100644 index 0000000..75c3d53 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/SoundBuffer.cs @@ -0,0 +1,71 @@ +using System; +using Microsoft.DirectX.DirectSound; + + + /// + /// A single sound buffer for use by the SoundHandler class. + /// +public class SoundBuffer { + Microsoft.DirectX.DirectSound.Buffer buffer; + Sounds thisSound; + bool looping; + bool lastValue; + + public SoundBuffer(Microsoft.DirectX.DirectSound.Device soundDevice, string filename, Sounds thisSound, bool looping) { + this.thisSound = thisSound; + this.looping = looping; + + BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + try { + buffer = new Microsoft.DirectX.DirectSound.Buffer( + filename, + bufferDesc, + soundDevice); + } + catch (Exception e) { + throw new Exception( + String.Format("Error opening {0}; ", + filename), e); + } + } + + public Sounds Sound { + get { + return thisSound; + } + } + + public int Volume { + get { + return buffer.Volume; + } + set { + buffer.Volume = value; + } + } + + public void Play(bool on) { + // looping sounds don't get restarted + if (looping) { + if (on) { + if (!lastValue) { + buffer.SetCurrentPosition(1000); + buffer.Play(0,BufferPlayFlags.Looping); + } + } + else { + buffer.Stop(); + } + lastValue = on; + } + else { + if (on) { + buffer.SetCurrentPosition(0); + buffer.Play(0,BufferPlayFlags.Default); + } + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/SoundHandler.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/SoundHandler.cs new file mode 100644 index 0000000..1782d3f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/SoundHandler.cs @@ -0,0 +1,86 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX.DirectSound; +using System.Collections; + + + /// + /// This class handles loading and playing our sounds. + /// +public class SoundHandler { + Device soundDevice; + ArrayList sounds = new ArrayList(); + + Sounds lastSound; + + const int VolumeEngine = -1000; + const int VolumeOtherShot = -2000; + const int VolumeHaHa = -3000; + + + public SoundHandler(Control owner) { + soundDevice = new Device(); + soundDevice.SetCooperativeLevel(owner,CooperativeLevel.Normal); + CreateSoundBuffers(); + } + + Microsoft.DirectX.DirectSound.Buffer LoadFile(string filename) { + + Microsoft.DirectX.DirectSound.BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + Microsoft.DirectX.DirectSound.Buffer buffer; + buffer = new Microsoft.DirectX.DirectSound.Buffer(filename, bufferDesc, soundDevice); + + + return buffer; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping, int volume) { + SoundBuffer buffer; + + buffer = new SoundBuffer( + soundDevice, + filename, + thisSound, + looping); + sounds.Add(buffer); + buffer.Volume = volume; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping) { + AddBuffer(filename, thisSound, looping, 0); + } + + void CreateSoundBuffers() { + AddBuffer(MediaUtilities.FindFile("hypercharge.wav"), Sounds.ShipHyper, false); + AddBuffer(MediaUtilities.FindFile("sci fi bass.wav"), Sounds.ShipAppear, false); + AddBuffer(MediaUtilities.FindFile("laser2.wav"), Sounds.ShipFire, false); + AddBuffer(MediaUtilities.FindFile("explode.wav"), Sounds.ShipExplode, false); + + AddBuffer(MediaUtilities.FindFile("engine.wav"), Sounds.ShipThrust, true, VolumeEngine); + AddBuffer(MediaUtilities.FindFile("laser2_other.wav"), Sounds.OtherShipFire, false, VolumeOtherShot); + AddBuffer(MediaUtilities.FindFile("explode_other.wav"), Sounds.OtherShipExplode, false); + AddBuffer(MediaUtilities.FindFile("engine_other.wav"), Sounds.OtherShipThrust, true, VolumeEngine); + + AddBuffer(MediaUtilities.FindFile("sci fi bass.wav"), Sounds.OtherShipAppear, false); + AddBuffer(MediaUtilities.FindFile("haha.wav"), Sounds.Taunt, false, VolumeHaHa); + + AddBuffer(MediaUtilities.FindFile("dude_quest1.wav"), Sounds.Dude1, false); + AddBuffer(MediaUtilities.FindFile("dude_quest2.wav"), Sounds.Dude2, false); + AddBuffer(MediaUtilities.FindFile("dude_quest3.wav"), Sounds.Dude3, false); + AddBuffer(MediaUtilities.FindFile("dude_quest4.wav"), Sounds.Dude4, false); + AddBuffer(MediaUtilities.FindFile("dude_quest5.wav"), Sounds.Dude5, false); + } + + public void Play(Sounds soundsToPlay) { + // check each enum value. If that value + // is set, play the sound... + foreach (SoundBuffer buffer in sounds) { + bool on = ((buffer.Sound & soundsToPlay) != 0); + buffer.Play(on); + + } + lastSound = soundsToPlay; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/Sounds.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/Sounds.cs new file mode 100644 index 0000000..0f3b6ac --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/Sounds.cs @@ -0,0 +1,21 @@ +using System; + + +[Flags] +public enum Sounds { + ShipAppear = 0x00000001, + ShipHyper = 0x00000002, + ShipFire = 0x00000004, + ShipExplode = 0x00000008, + ShipThrust = 0x00000010, + OtherShipThrust = 0x00000020, + OtherShipExplode = 0x00000040, + OtherShipFire = 0x00000080, + OtherShipAppear = 0x00000100, + Taunt = 0x00000200, + Dude1 = 0x00000400, + Dude2 = 0x00000800, + Dude3 = 0x00001000, + Dude4 = 0x00002000, + Dude5 = 0x00004000, +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/SpaceWar3D.ico b/Source Code updated 08-12-05/Spacewar3D/Step10/SpaceWar3D.ico new file mode 100644 index 0000000..5db9a4d Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Step10/SpaceWar3D.ico differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/Spacewar3D.suo b/Source Code updated 08-12-05/Spacewar3D/Step10/Spacewar3D.suo new file mode 100644 index 0000000..5778b18 Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Step10/Spacewar3D.suo differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/SphereStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/SphereStruct.cs new file mode 100644 index 0000000..90d9d6f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/SphereStruct.cs @@ -0,0 +1,6 @@ +using Microsoft.DirectX; + +public struct Sphere { + public Vector3 CenterPoint; + public float Radius; +}; \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/SplashScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/SplashScreen.cs new file mode 100644 index 0000000..9ffea2c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/SplashScreen.cs @@ -0,0 +1,237 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + + + /// + /// Spacewar Splashscreen + /// +public class SplashScreen : System.Windows.Forms.Form { + private MainClass mainClass; + private System.Windows.Forms.Button helpButton; + private System.Windows.Forms.Button startButton; + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.Button soloButton; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.CheckBox checkBox1; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + public SplashScreen(MainClass main) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + this.mainClass = main; + radioButton3.Checked = true; + checkBox1.Checked = true; + mainClass.GameFormSize = new Size(1024,768); + mainClass.FullScreen = true; + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(SplashScreen)); + this.helpButton = new System.Windows.Forms.Button(); + this.startButton = new System.Windows.Forms.Button(); + this.closeButton = new System.Windows.Forms.Button(); + this.soloButton = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // helpButton + // + this.helpButton.ForeColor = System.Drawing.Color.White; + this.helpButton.Location = new System.Drawing.Point(440, 280); + this.helpButton.Name = "helpButton"; + this.helpButton.Size = new System.Drawing.Size(136, 32); + this.helpButton.TabIndex = 5; + this.helpButton.Text = "Show Help"; + this.helpButton.Click += new System.EventHandler(this.helpButton_Click); + // + // startButton + // + this.startButton.ForeColor = System.Drawing.Color.White; + this.startButton.Location = new System.Drawing.Point(440, 364); + this.startButton.Name = "startButton"; + this.startButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.startButton.Size = new System.Drawing.Size(136, 32); + this.startButton.TabIndex = 7; + this.startButton.Text = "Network Play"; + this.startButton.Click += new System.EventHandler(this.startButton_Click); + // + // closeButton + // + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.ForeColor = System.Drawing.Color.White; + this.closeButton.Location = new System.Drawing.Point(440, 406); + this.closeButton.Name = "closeButton"; + this.closeButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.closeButton.Size = new System.Drawing.Size(136, 32); + this.closeButton.TabIndex = 8; + this.closeButton.Text = "Exit"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // soloButton + // + this.soloButton.ForeColor = System.Drawing.Color.White; + this.soloButton.Location = new System.Drawing.Point(440, 322); + this.soloButton.Name = "soloButton"; + this.soloButton.Size = new System.Drawing.Size(136, 32); + this.soloButton.TabIndex = 6; + this.soloButton.Text = "Solo Play"; + this.soloButton.Click += new System.EventHandler(this.soloButton_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.radioButton3); + this.groupBox1.Controls.Add(this.radioButton2); + this.groupBox1.Controls.Add(this.radioButton1); + this.groupBox1.ForeColor = System.Drawing.Color.White; + this.groupBox1.Location = new System.Drawing.Point(16, 320); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(128, 128); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Screen Resolution"; + // + // checkBox1 + // + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(16, 96); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.TabIndex = 3; + this.checkBox1.Text = "Full Screen"; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // radioButton3 + // + this.radioButton3.Checked = true; + this.radioButton3.ForeColor = System.Drawing.Color.White; + this.radioButton3.Location = new System.Drawing.Point(16, 72); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(80, 24); + this.radioButton3.TabIndex = 2; + this.radioButton3.TabStop = true; + this.radioButton3.Text = "1024 x 768"; + this.radioButton3.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton2 + // + this.radioButton2.ForeColor = System.Drawing.Color.White; + this.radioButton2.Location = new System.Drawing.Point(16, 48); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(72, 24); + this.radioButton2.TabIndex = 1; + this.radioButton2.Text = "800 x 600"; + this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton1 + // + this.radioButton1.ForeColor = System.Drawing.Color.White; + this.radioButton1.Location = new System.Drawing.Point(16, 24); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(72, 24); + this.radioButton1.TabIndex = 0; + this.radioButton1.Text = "640 x 480"; + this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // SplashScreen + // + this.AcceptButton = this.soloButton; + this.AutoScale = false; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.Black; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(594, 454); + this.ControlBox = false; + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.soloButton); + this.Controls.Add(this.closeButton); + this.Controls.Add(this.startButton); + this.Controls.Add(this.helpButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(600, 460); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(600, 460); + this.Name = "SplashScreen"; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + private void helpButton_Click(object sender, System.EventArgs e) { + HelpScreen helpScreen = new HelpScreen(); + helpScreen.ShowDialog(); + } + + private void startButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = true; + this.Close(); + } + + private void closeButton_Click(object sender, System.EventArgs e) { + Environment.Exit(0); + } + + private void soloButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = false; + this.Close(); + } + + private void radioButton_CheckedChanged(object sender, System.EventArgs e) { + RadioButton btn = (RadioButton)sender; + Console.WriteLine(btn.ToString()); + if (btn.Checked) { + if (btn == radioButton1) + mainClass.GameFormSize = new Size(640,480); + if (btn == radioButton2) + mainClass.GameFormSize = new Size(800, 600); + if (btn == radioButton3) + mainClass.GameFormSize = new Size(1024, 768); + } + } + + private void checkBox1_CheckedChanged(object sender, System.EventArgs e) { + mainClass.FullScreen = checkBox1.Checked; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/SplashScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step10/SplashScreen.resx new file mode 100644 index 0000000..18fad73 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/SplashScreen.resx @@ -0,0 +1,4715 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + False + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + False + + + 80 + + + True + + + Private + + + SplashScreen + + + + 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 + AElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/Step10.csproj b/Source Code updated 08-12-05/Spacewar3D/Step10/Step10.csproj new file mode 100644 index 0000000..6b855b3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/Step10.csproj @@ -0,0 +1,375 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/Step10.sln b/Source Code updated 08-12-05/Spacewar3D/Step10/Step10.sln new file mode 100644 index 0000000..cd129b6 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/Step10.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Step10", "Step10.csproj", "{DE8FEF2E-6E28-4456-9712-68437802A747}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.ActiveCfg = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.Build.0 = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.ActiveCfg = Release|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/WorldPosition.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/WorldPosition.cs new file mode 100644 index 0000000..35c2919 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/WorldPosition.cs @@ -0,0 +1,210 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + +[Serializable] +public class WorldPosition { + public float XPos {get { return xPos; } set { xPos = value; } } + public float YPos {get { return yPos; } set { yPos = value; } } + public float ZPos {get { return zPos; } set { zPos = value; } } + + public float XRotation { get { return xRotation; } set { xRotation = value; } } + public float YRotation { get { return yRotation; } set { yRotation = value; } } + public float ZRotation { get { return zRotation; } set { zRotation = value; } } + + public float XScale { get { return xScale; } set { xScale = value; } } + public float YScale { get { return yScale; } set { yScale = value; } } + public float ZScale { get { return zScale; } set { zScale = value; } } + + + public Matrix WorldMatrix { get { Update(); return worldMatrix; } + set { + worldMatrix = value; + Location = Vector3.TransformCoordinate(new Vector3(0,0,0), worldMatrix); + Point(Location, Location+Direction); + Roll(Location, Location+Up); + } + } + + public Vector3 Direction { + get { + Vector3 directionVector= new Vector3(0,0,1); + return Vector3.TransformNormal(directionVector, worldMatrix); + } + } + + public Vector3 Up { + get { + Vector3 upVector = new Vector3(0,1,0); + return Vector3.TransformNormal(upVector,worldMatrix); + } + } + public Vector3 Right { + get { + Vector3 rightVector = new Vector3(1,0,0); + return Vector3.TransformNormal(rightVector,worldMatrix); + } + } + + public Vector3 Location { + get { + return new Vector3( xPos, yPos, zPos ); + } + set { + Move(value); + } + } + + public Vector3 Rotation { + get { + return new Vector3( xRotation, yRotation, zRotation); + } + set { + Rotate(value); + } + } + + + + private float xPos, yPos, zPos = 0.0f; + private float xRotation, yRotation, zRotation = 0.0f; + private float xScale, yScale, zScale = 0.0f; + + private Matrix worldMatrix, scaleMatrix, rotationMatrix = Matrix.Identity; + private Matrix translationMatrix = Matrix.Identity; + private Matrix combineMatrix1, combineMatrix2; + + public Matrix CombineMatrix1 { get { return combineMatrix1; } set { combineMatrix1 = value; } } + public Matrix CombineMatrix2 { get { return combineMatrix2; } set { combineMatrix2 = value; } } + + + public WorldPosition() { + + Move(0.0f, 0.0f, 0.0f); + Rotate(0.0f, 0.0f, 0.0f); + Scale(1.0f, 1.0f, 1.0f); + combineMatrix1 = combineMatrix2 = Matrix.Zero; + + Update(); + + } + + public Vector3 CombinedLocation { + get { + Update(); + return new Vector3(worldMatrix.M41,worldMatrix.M42,worldMatrix.M43); + } + } + + public void Move( Vector3 newPosition ) { + Move( newPosition.X, newPosition.Y, newPosition.Z ); + } + + public void Move( float x, float y, float z ) { + xPos = x; + yPos = y; + zPos = z; + + translationMatrix = Matrix.Translation( xPos, yPos, zPos ); + } + + public void MoveRel( float x, float y, float z ) { + Move(xPos + x, yPos + y, zPos + z ); + } + + public void Rotate( Vector3 newDirection ) { + Rotate(newDirection.X, newDirection.Y, newDirection.Z); + } + + public void Point(Vector3 pointAtLocation) { + Point(xPos, yPos, zPos, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(Vector3 currentLocation, Vector3 pointAtLocation) { + Point(currentLocation.X, currentLocation.Y, currentLocation.Z, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } + + public void Roll(Vector3 Location, Vector3 UpVector) { + float xDiff, yDiff; + xDiff = Location.X - UpVector.X; + yDiff = Location.Y - UpVector.Y; + zRotation = (float) Math.Atan2(xDiff, yDiff); + } + + + + + public void Rotate( float x, float y, float z ) { + xRotation = x; + yRotation = y; + zRotation = z; + + rotationMatrix = Matrix.RotationYawPitchRoll( yRotation, xRotation, zRotation ); + } + + public void RotateRel( float x, float y, float z ) { + Rotate( xRotation + x, yRotation + y, zRotation + z ); + } + + //YawPitchRoll rotates an object relative to its own orthonormal basis vectors + public void YawPitchRoll( float yaw, float pitch, float roll) { + + Matrix yawMatrix = Matrix.RotationAxis(this.Up, yaw); + Matrix pitchMatrix = Matrix.RotationAxis(this.Right, pitch); + Matrix rollMatrix = Matrix.RotationAxis(this.Direction, roll); + + Matrix ypr = yawMatrix * pitchMatrix * rollMatrix; + rotationMatrix *= ypr; + + + } + + public void Scale( float x, float y, float z ) { + xScale = x; + yScale = y; + zScale = z; + + scaleMatrix = Matrix.Scaling( xScale, yScale, zScale ); + + } + + public void ScaleRel( float x, float y, float z ) { + Scale( xScale + x, yScale + y, zScale + z ); + } + + + public void Update() { + + Matrix m; + + + + m = scaleMatrix; + m *= rotationMatrix; + m *= translationMatrix; + if (combineMatrix1 != Matrix.Zero) + m *= combineMatrix1; + if (combineMatrix2 != Matrix.Zero) + m *= combineMatrix2; + + worldMatrix = m; + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/d3dapp.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/d3dapp.cs new file mode 100644 index 0000000..9384434 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/d3dapp.cs @@ -0,0 +1,1517 @@ +//----------------------------------------------------------------------------- +// File: D3DApp.cs +// +// Desc: Application class for the Direct3D samples framework library. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + +/// +/// The base class for all the graphics (D3D) samples, it derives from windows forms +/// +public class GraphicsSample : System.Windows.Forms.Form { + #region Menu Information + // The menu items that *all* samples will need + protected System.Windows.Forms.MainMenu mnuMain; + protected System.Windows.Forms.MenuItem mnuFile; + private System.Windows.Forms.MenuItem mnuGo; + private System.Windows.Forms.MenuItem mnuSingle; + private System.Windows.Forms.MenuItem mnuBreak1; + private System.Windows.Forms.MenuItem mnuChange; + private System.Windows.Forms.MenuItem mnuBreak2; + protected System.Windows.Forms.MenuItem mnuExit; + #endregion + + // The window we will render too + private System.Windows.Forms.Control ourRenderTarget; + // Should we use the default windows + protected bool isUsingMenus = true; + + // We need to keep track of our enumeration settings + protected D3DEnumeration enumerationSettings = new D3DEnumeration(); + protected D3DSettings graphicsSettings = new D3DSettings(); + private bool isMaximized = false; // Are we maximized? + private bool isHandlingSizeChanges = true; // Are we handling size changes? + private bool isClosing = false; // Are we closing? + private bool isChangingFormStyle = false; // Are we changing the forms style? + private bool isWindowActive = true; // Are we waiting for got focus? + + private float lastTime = 0.0f; // The last time + private int frames = 0; // Number of frames since our last update + private int appPausedCount = 0; // How many times has the app been paused (and when can it resume)? + + // Internal variables for the state of the app + protected bool windowed; + protected bool active; + protected bool ready; + protected bool hasFocus; + protected bool isMultiThreaded = false; + + // Internal variables used for timing + protected bool frameMoving; + protected bool singleStep; + // Main objects used for creating and rendering the 3D scene + protected PresentParameters presentParams = new PresentParameters(); // Parameters for CreateDevice/Reset + protected Device device; // The rendering device + protected RenderStateManager renderState; + protected SamplerStateManagerCollection sampleState; + protected TextureStateManagerCollection textureStates; + private Caps graphicsCaps; // Caps for the device + protected Caps Caps { get { return graphicsCaps; } } + private CreateFlags behavior; // Indicate sw or hw vertex processing + protected BehaviorFlags BehaviorFlags { get { return new BehaviorFlags(behavior); } } + protected System.Windows.Forms.Control RenderTarget { get { return ourRenderTarget; } set { ourRenderTarget = value; } } + + // Variables for timing + protected float appTime; // Current time in seconds + protected float elapsedTime; // Time elapsed since last frame + protected float framePerSecond; // Instanteous frame rate + protected string deviceStats;// String to hold D3D device stats + protected string frameStats; // String to hold frame stats + + private bool deviceLost = false; + + // Overridable variables for the app + private int minDepthBits; // Minimum number of bits needed in depth buffer + protected int MinDepthBits { get { return minDepthBits; } set { minDepthBits = value; enumerationSettings.AppMinDepthBits = value;} } + private int minStencilBits; // Minimum number of bits needed in stencil buffer + protected int MinStencilBits { get { return minStencilBits; } set { minStencilBits = value; enumerationSettings.AppMinStencilBits = value;} } + protected bool showCursorWhenFullscreen; // Whether to show cursor when fullscreen + protected bool clipCursorWhenFullscreen; // Whether to limit cursor pos when fullscreen + protected bool startFullscreen; // Whether to start up the app in fullscreen mode + + private System.Drawing.Size storedSize; + private System.Drawing.Point storedLocation; + + // Overridable functions for the 3D scene created by the app + protected virtual bool ConfirmDevice(Caps caps, VertexProcessingType vertexProcessingType, + Format adapterFormat, Format backBufferFormat) { return true; } + protected virtual void OneTimeSceneInitialization() { /* Do Nothing */ } + protected virtual void InitializeDeviceObjects() { /* Do Nothing */ } + protected virtual void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void FrameMove() { /* Do Nothing */ } + protected virtual void Render() { /* Do Nothing */ } + protected virtual void InvalidateDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void DeleteDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + + + + + /// + /// Constructor + /// + public GraphicsSample() { + device = null; + active = false; + ready = false; + hasFocus = false; + behavior = 0; + + ourRenderTarget = this; + frameMoving = true; + singleStep = false; + framePerSecond = 0.0f; + deviceStats = null; + frameStats = null; + + this.Text = "D3D9 Sample"; + this.ClientSize = new System.Drawing.Size(400,300); + this.KeyPreview = true; + + minDepthBits = 16; + minStencilBits = 0; + showCursorWhenFullscreen = false; + startFullscreen = false; + + // When clipCursorWhenFullscreen is TRUE, the cursor is limited to + // the device window when the app goes fullscreen. This prevents users + // from accidentally clicking outside the app window on a multimon system. + // This flag is turned off by default for debug builds, since it makes + // multimon debugging difficult. +#if (DEBUG) + clipCursorWhenFullscreen = false; +#else + clipCursorWhenFullscreen = true; +#endif + InitializeComponent(); + } + + + + + /// + /// Picks the best graphics device, and initializes it + /// + /// true if a good device was found, false otherwise + public bool CreateGraphicsSample() { + enumerationSettings.ConfirmDeviceCallback = new D3DEnumeration.ConfirmDeviceCallbackType(this.ConfirmDevice); + enumerationSettings.Enumerate(); + + if (ourRenderTarget.Cursor == null) { + // Set up a default cursor + ourRenderTarget.Cursor = System.Windows.Forms.Cursors.Default; + } + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + + try { + ChooseInitialSettings(); + + // Initialize the application timer + DXUtil.Timer(DirectXTimer.Start); + // Initialize the app's custom scene stuff + OneTimeSceneInitialization(); + // Initialize the 3D environment for the app + InitializeEnvironment(); + } + catch (SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + return false; + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + return false; + } + + // The app is ready to go + ready = true; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available windowed mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestWindowedMode(bool doesRequireHardware, bool doesRequireReference) { + // Get display mode of primary adapter (which is assumed to be where the window + // will appear) + DisplayMode primaryDesktopDisplayMode = Manager.Adapters[0].CurrentDisplayMode; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + if (!deviceCombo.IsWindowed) + continue; + if (deviceCombo.AdapterFormat != primaryDesktopDisplayMode.Format) + continue; + + // If we haven't found a compatible DeviceCombo yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + deviceCombo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + // This windowed device combo looks great -- take it + goto EndWindowedDeviceComboSearch; + } + // Otherwise keep looking for a better windowed device combo + } + } + } + } + + EndWindowedDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + graphicsSettings.WindowedAdapterInfo = bestAdapterInfo; + graphicsSettings.WindowedDeviceInfo = bestDeviceInfo; + graphicsSettings.WindowedDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = true; + graphicsSettings.WindowedDisplayMode = primaryDesktopDisplayMode; + graphicsSettings.WindowedWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + graphicsSettings.WindowedHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.WindowedDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.WindowedMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.WindowedMultisampleQuality = 0; + graphicsSettings.WindowedVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.WindowedPresentInterval = (PresentInterval)bestDeviceCombo.PresentIntervalList[0]; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available fullscreen mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestFullscreenMode(bool doesRequireHardware, bool doesRequireReference) { + // For fullscreen, default to first HAL DeviceCombo that supports the current desktop + // display mode, or any display mode if HAL is not compatible with the desktop mode, or + // non-HAL if no HAL is available + DisplayMode adapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestAdapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestDisplayMode = new DisplayMode(); + bestAdapterDesktopDisplayMode.Width = 0; + bestAdapterDesktopDisplayMode.Height = 0; + bestAdapterDesktopDisplayMode.Format = 0; + bestAdapterDesktopDisplayMode.RefreshRate = 0; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + adapterDesktopDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + bool adapterMatchesDesktop = (deviceCombo.AdapterFormat == adapterDesktopDisplayMode.Format); + if (deviceCombo.IsWindowed) + continue; + + // If we haven't found a compatible set yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + bestDeviceCombo.DevType == DeviceType.Hardware && bestDeviceCombo.AdapterFormat != adapterDesktopDisplayMode.Format && adapterMatchesDesktop || + bestDeviceCombo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + bestAdapterDesktopDisplayMode = adapterDesktopDisplayMode; + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + // This fullscreen device combo looks great -- take it + goto EndFullscreenDeviceComboSearch; + } + // Otherwise keep looking for a better fullscreen device combo + } + } + } + } + + EndFullscreenDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + // Need to find a display mode on the best adapter that uses pBestDeviceCombo->AdapterFormat + // and is as close to bestAdapterDesktopDisplayMode's res as possible + bestDisplayMode.Width = 0; + bestDisplayMode.Height = 0; + bestDisplayMode.Format = 0; + bestDisplayMode.RefreshRate = 0; + foreach (DisplayMode displayMode in bestAdapterInfo.DisplayModeList) { + if (displayMode.Format != bestDeviceCombo.AdapterFormat) + continue; + if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate == bestAdapterDesktopDisplayMode.RefreshRate) { + // found a perfect match, so stop + bestDisplayMode = displayMode; + break; + } + else if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate > bestDisplayMode.RefreshRate) { + // refresh rate doesn't match, but width/height match, so keep this + // and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == bestAdapterDesktopDisplayMode.Width) { + // width matches, so keep this and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == 0) { + // we don't have anything better yet, so keep this and keep looking + bestDisplayMode = displayMode; + } + } + + graphicsSettings.FullscreenAdapterInfo = bestAdapterInfo; + graphicsSettings.FullscreenDeviceInfo = bestDeviceInfo; + graphicsSettings.FullscreenDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = false; + graphicsSettings.FullscreenDisplayMode = bestDisplayMode; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.FullscreenDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.FullscreenMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.FullscreenMultisampleQuality = 0; + graphicsSettings.FullscreenVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.FullscreenPresentInterval = PresentInterval.Default; + + return true; + } + + + + + /// + /// Choose the initial settings for the application + /// + /// true if the settings were initialized + public bool ChooseInitialSettings() { + bool foundFullscreenMode = FindBestFullscreenMode(false, false); + bool foundWindowedMode = FindBestWindowedMode(false, false); + if (startFullscreen && foundFullscreenMode) + graphicsSettings.IsWindowed = false; + + if (!foundFullscreenMode && !foundWindowedMode) + throw new NoCompatibleDevicesException(); + + return (foundFullscreenMode || foundWindowedMode); + } + + + + + /// + /// Build presentation parameters from the current settings + /// + public void BuildPresentParamsFromSettings() { + presentParams.Windowed = graphicsSettings.IsWindowed; + presentParams.BackBufferCount = 1; + presentParams.MultiSample = graphicsSettings.MultisampleType; + presentParams.MultiSampleQuality = graphicsSettings.MultisampleQuality; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.EnableAutoDepthStencil = enumerationSettings.AppUsesDepthBuffer; + presentParams.AutoDepthStencilFormat = graphicsSettings.DepthStencilBufferFormat; + presentParams.PresentFlag = PresentFlag.None; + + if (windowed) { + presentParams.BackBufferWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + presentParams.BackBufferHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = 0; + presentParams.PresentationInterval = PresentInterval.Immediate; + presentParams.DeviceWindow = ourRenderTarget; + } + else { + presentParams.BackBufferWidth = graphicsSettings.DisplayMode.Width; + presentParams.BackBufferHeight = graphicsSettings.DisplayMode.Height; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = graphicsSettings.DisplayMode.RefreshRate; + presentParams.PresentationInterval = graphicsSettings.PresentInterval; + presentParams.DeviceWindow = this; + } + } + + + + + /// + /// Initialize the graphics environment + /// + public void InitializeEnvironment() { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + GraphicsDeviceInfo deviceInfo = graphicsSettings.DeviceInfo; + + windowed = graphicsSettings.IsWindowed; + + // Set up the presentation parameters + BuildPresentParamsFromSettings(); + + if (deviceInfo.Caps.PrimitiveMiscCaps.IsNullReference) { + // Warn user about null ref device that can't render anything + HandleSampleException(new NullReferenceDeviceException(), ApplicationMessage.None); + } + + CreateFlags createFlags = new CreateFlags(); + if (graphicsSettings.VertexProcessingType == VertexProcessingType.Software) + createFlags = CreateFlags.SoftwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Mixed) + createFlags = CreateFlags.MixedVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Hardware) + createFlags = CreateFlags.HardwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.PureHardware) { + createFlags = CreateFlags.HardwareVertexProcessing; + } + else + throw new ApplicationException(); +#if (DX9) +#else + // Make sure to allow multithreaded apps if we need them + presentParams.ForceNoMultiThreadedFlag = !isMultiThreaded; +#endif + try { + // Create the device + device = new Device(graphicsSettings.AdapterOrdinal, graphicsSettings.DevType, + windowed ? ourRenderTarget : this , createFlags, presentParams); + + // Cache our local objects + renderState = device.RenderState; + sampleState = device.SamplerState; + textureStates = device.TextureState; + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after recreating the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + if (windowed) { + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + } + + // Store device Caps + graphicsCaps = device.DeviceCaps; + behavior = createFlags; + + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + // Store device description + if (deviceInfo.DevType == DeviceType.Reference) + sb.Append("REF"); + else if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append("HAL"); + else if (deviceInfo.DevType == DeviceType.Software) + sb.Append("SW"); + + BehaviorFlags behaviorFlags = new BehaviorFlags(createFlags); + if ((behaviorFlags.HardwareVertexProcessing) && + (behaviorFlags.PureDevice)) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (pure hw vp)"); + else + sb.Append(" (simulated pure hw vp)"); + } + else if (behaviorFlags.HardwareVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (hw vp)"); + else + sb.Append(" (simulated hw vp)"); + } + else if (behaviorFlags.MixedVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (mixed vp)"); + else + sb.Append(" (simulated mixed vp)"); + } + else if (behaviorFlags.SoftwareVertexProcessing) { + sb.Append(" (sw vp)"); + } + + if (deviceInfo.DevType == DeviceType.Hardware) { + sb.Append(": "); + sb.Append(adapterInfo.AdapterDetails.Description); + } + + // Set device stats string + deviceStats = sb.ToString(); + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // Confine cursor to fullscreen window + if (clipCursorWhenFullscreen) { + if (!windowed) { + System.Drawing.Rectangle rcWindow = this.ClientRectangle; + } + } + + // Setup the event handlers for our device + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + device.Disposing += new System.EventHandler(this.DeleteDeviceObjects); + device.DeviceResizing += new System.ComponentModel.CancelEventHandler(this.EnvironmentResized); + + // Initialize the app's device-dependent objects + try { + InitializeDeviceObjects(); + RestoreDeviceObjects(null, null); + active = true; + return; + } + catch { + // Cleanup before we try again + InvalidateDeviceObjects(null, null); + DeleteDeviceObjects(null, null); + device.Dispose(); + device = null; + if (this.Disposing) + return; + } + } + catch { + // If that failed, fall back to the reference rasterizer + if (deviceInfo.DevType == DeviceType.Hardware) { + if (FindBestWindowedMode(false, true)) { + windowed = true; + + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + + // Let the user know we are switching from HAL to the reference rasterizer + HandleSampleException(null, ApplicationMessage.WarnSwitchToRef); + + InitializeEnvironment(); + } + } + } + } + + + + + /// + /// Displays sample exceptions to the user + /// + /// The exception that was thrown + /// Extra information on how to handle the exception + public void HandleSampleException(SampleException e, ApplicationMessage Type) { + // Build a message to display to the user + string strMsg = string.Empty; + if (e != null) + strMsg = e.Message; + + if (ApplicationMessage.ApplicationMustExit == Type) { + strMsg += "\n\nThis sample will now exit."; + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + + // Close the window, which shuts down the app + if (this.IsHandleCreated) + this.Close(); + } + else { + if (ApplicationMessage.WarnSwitchToRef == Type) + strMsg = "\n\nSwitching to the reference rasterizer,\n"; + strMsg += "a software device that implements the entire\n"; + strMsg += "Direct3D feature set, but runs very slowly."; + + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + } + } + + + + + /// + /// Fired when our environment was resized + /// + /// the device that's resizing our environment + /// Set the cancel member to true to turn off automatic device reset + public void EnvironmentResized(object sender, System.ComponentModel.CancelEventArgs e) { + // Check to see if we're closing or changing the form style + if ((isClosing) || (isChangingFormStyle)) { + // We are, cancel our reset, and exit + e.Cancel = true; + return; + } + + // Check to see if we're minimizing and our rendering object + // is not the form, if so, cancel the resize + if ((ourRenderTarget != this) && (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)) + e.Cancel = true; + + if (!isWindowActive) + e.Cancel = true; + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + } + + + + + /// + /// Called when user toggles between fullscreen mode and windowed mode + /// + public void ToggleFullscreen() { + int AdapterOrdinalOld = graphicsSettings.AdapterOrdinal; + DeviceType DevTypeOld = graphicsSettings.DevType; + + isHandlingSizeChanges = false; + isChangingFormStyle = true; + ready = false; + + // Toggle the windowed state + windowed = !windowed; + + // Save our maximized settings.. + if (!windowed && isMaximized) + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + + graphicsSettings.IsWindowed = windowed; + + // If AdapterOrdinal and DevType are the same, we can just do a Reset(). + // If they've changed, we need to do a complete device teardown/rebuild. + if (graphicsSettings.AdapterOrdinal == AdapterOrdinalOld && + graphicsSettings.DevType == DevTypeOld) { + BuildPresentParamsFromSettings(); + // Resize the 3D device + RETRY: + try { + device.Reset(presentParams); + } + catch { + if (windowed) + ForceWindowed(); + else { + // Sit in a loop until the device passes Reset() + try { + device.TestCooperativeLevel(); + } + catch(DeviceNotResetException) { + // Device still needs to be Reset. Try again. + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + goto RETRY; + } + } + } + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + else { + device.Dispose(); + device = null; + InitializeEnvironment(); + } + + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after resetting the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + + if (windowed) { + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; + isChangingFormStyle = false; + + // We were maximized, restore that state + if (isMaximized) { + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + } + this.SendToBack(); + this.BringToFront(); + this.ClientSize = storedSize; + this.Location = storedLocation; + } + else { + if (this.Menu != null) + this.Menu = null; + + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + isChangingFormStyle = false; + } + isHandlingSizeChanges = true; + ready = true; + } + + + + + /// + /// Switch to a windowed mode, even if that means picking a new device and/or adapter + /// + public void ForceWindowed() { + if (windowed) + return; + + if (!FindBestWindowedMode(false, false)) { + return; + } + windowed = true; + + // Now destroy the current 3D device objects, then reinitialize + + ready = false; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Create the new device + try { + InitializeEnvironment(); + } + catch (SampleException e) { + HandleSampleException(e,ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(),ApplicationMessage.ApplicationMustExit); + } + ready = true; + } + + + + + /// + /// Called when our sample has nothing else to do, and it's time to render + /// + private void FullRender() { + // Render a frame during idle time (no messages are waiting) + if (active && ready) { + try { + if ((deviceLost) || (System.Windows.Forms.Form.ActiveForm != this)) { + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + } + // Render a frame during idle time + if (active) { + Render3DEnvironment(); + } + } + catch (Exception ee) { + System.Windows.Forms.MessageBox.Show("An exception has occurred. This sample must exit.\r\n\r\n" + ee.ToString(), "Exception", + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + this.Close(); + } + } + } + + + + + /// + /// Run the simulation + /// + public void Run() { + // Now we're ready to recieve and process Windows messages. + System.Windows.Forms.Control mainWindow = this; + + // If the render target is a form and *not* this form, use that form instead, + // otherwise, use the main form. + if ((ourRenderTarget is System.Windows.Forms.Form) && (ourRenderTarget != this)) + mainWindow = ourRenderTarget; + + mainWindow.Show(); + while (mainWindow.Created) { + FullRender(); + System.Windows.Forms.Application.DoEvents(); + } + } + + + + + /// + /// Draws the scene + /// + public void Render3DEnvironment() { + if (deviceLost) { + try { + // Test the cooperative level to see if it's okay to render + device.TestCooperativeLevel(); + } + catch (DeviceLostException) { + // If the device was lost, do not render until we get it back + isHandlingSizeChanges = false; + isWindowActive = false; + return; + } + catch (DeviceNotResetException) { + // Check if the device needs to be resized. + + // If we are windowed, read the desktop mode and use the same format for + // the back buffer + if (windowed) { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + graphicsSettings.WindowedDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + presentParams.BackBufferFormat = graphicsSettings.WindowedDisplayMode.Format; + } + + // Reset the device and resize it + device.Reset(device.PresentationParameters); + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + deviceLost = false; + } + + // Get the app's time, in seconds. Skip rendering if no time elapsed + float fAppTime = DXUtil.Timer(DirectXTimer.GetApplicationTime); + float fElapsedAppTime = DXUtil.Timer(DirectXTimer.GetElapsedTime); + if ((0.0f == fElapsedAppTime) && frameMoving) + return; + + // FrameMove (animate) the scene + if (frameMoving || singleStep) { + // Store the time for the app + appTime = fAppTime; + elapsedTime = fElapsedAppTime; + + // Frame move the scene + FrameMove(); + + singleStep = false; + } + + // Render the scene as normal + Render(); + + UpdateStats(); + + try { + // Show the frame on the primary surface. + device.Present(); + } + catch(DeviceLostException) { + deviceLost = true; + } + } + + + + + /// + /// Update the various statistics the simulation keeps track of + /// + public void UpdateStats() { + // Keep track of the frame count + float time = DXUtil.Timer(DirectXTimer.GetAbsoluteTime); + ++frames; + + // Update the scene stats once per second + if (time - lastTime > 1.0f) { + framePerSecond = frames / (time - lastTime); + lastTime = time; + frames = 0; + + string strFmt; + Format fmtAdapter = graphicsSettings.DisplayMode.Format; + if (fmtAdapter == device.PresentationParameters.BackBufferFormat) { + strFmt = fmtAdapter.ToString(); + } + else { + strFmt = String.Format("backbuf {0}, adapter {1}", + device.PresentationParameters.BackBufferFormat.ToString(), fmtAdapter.ToString()); + } + + string strDepthFmt; + if (enumerationSettings.AppUsesDepthBuffer) { + strDepthFmt = String.Format(" ({0})", + graphicsSettings.DepthStencilBufferFormat.ToString()); + } + else { + // No depth buffer + strDepthFmt = ""; + } + + string strMultiSample; + switch (graphicsSettings.MultisampleType) { + case Direct3D.MultiSampleType.NonMaskable: strMultiSample = " (NonMaskable Multisample)"; break; + case Direct3D.MultiSampleType.TwoSamples: strMultiSample = " (2x Multisample)"; break; + case Direct3D.MultiSampleType.ThreeSamples: strMultiSample = " (3x Multisample)"; break; + case Direct3D.MultiSampleType.FourSamples: strMultiSample = " (4x Multisample)"; break; + case Direct3D.MultiSampleType.FiveSamples: strMultiSample = " (5x Multisample)"; break; + case Direct3D.MultiSampleType.SixSamples: strMultiSample = " (6x Multisample)"; break; + case Direct3D.MultiSampleType.SevenSamples: strMultiSample = " (7x Multisample)"; break; + case Direct3D.MultiSampleType.EightSamples: strMultiSample = " (8x Multisample)"; break; + case Direct3D.MultiSampleType.NineSamples: strMultiSample = " (9x Multisample)"; break; + case Direct3D.MultiSampleType.TenSamples: strMultiSample = " (10x Multisample)"; break; + case Direct3D.MultiSampleType.ElevenSamples: strMultiSample = " (11x Multisample)"; break; + case Direct3D.MultiSampleType.TwelveSamples: strMultiSample = " (12x Multisample)"; break; + case Direct3D.MultiSampleType.ThirteenSamples: strMultiSample = " (13x Multisample)"; break; + case Direct3D.MultiSampleType.FourteenSamples: strMultiSample = " (14x Multisample)"; break; + case Direct3D.MultiSampleType.FifteenSamples: strMultiSample = " (15x Multisample)"; break; + case Direct3D.MultiSampleType.SixteenSamples: strMultiSample = " (16x Multisample)"; break; + default: strMultiSample = string.Empty; break; + } + frameStats = String.Format("{0} fps ({1}x{2}), {3}{4}{5}", framePerSecond.ToString("f2"), + device.PresentationParameters.BackBufferWidth, device.PresentationParameters.BackBufferHeight, + strFmt, strDepthFmt, strMultiSample); + } + } + + + + + /// + /// Called in to toggle the pause state of the app. + /// + /// true if the simulation should pause + public void Pause(bool pause) { + appPausedCount += (int)(pause ? +1 : -1); + ready = ((appPausedCount > 0) ? false : true); + + // Handle the first pause request (of many, nestable pause requests) + if (pause && (1 == appPausedCount)) { + // Stop the scene from animating + if (frameMoving) + DXUtil.Timer(DirectXTimer.Stop); + } + + if (0 == appPausedCount) { + // Restart the timers + if (frameMoving) + DXUtil.Timer(DirectXTimer.Start); + } + } + + + + + /// + /// Set our variables to not active and not ready + /// + public void CleanupEnvironment() { + active = false; + ready = false; + if (device != null) + device.Dispose(); + + device = null; + } + #region Menu EventHandlers + + + + + /// + /// Prepares the simulation for a new device being selected + /// + public void UserSelectNewDevice(object sender, EventArgs e) { + // Prompt the user to select a new device or mode + if (active && ready) { + Pause(true); + DoSelectNewDevice(); + Pause(false); + } + } + + + + + /// + /// Displays a dialog so the user can select a new adapter, device, or + /// display mode, and then recreates the 3D environment if needed + /// + private void DoSelectNewDevice() { + isHandlingSizeChanges = false; + // Can't display dialogs in fullscreen mode + if (windowed == false) { + try { + ToggleFullscreen(); + isHandlingSizeChanges = false; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + return; + } + } + + // Make sure the main form is in the background + this.SendToBack(); + D3DSettingsForm settingsForm = new D3DSettingsForm(enumerationSettings, graphicsSettings); + System.Windows.Forms.DialogResult result = settingsForm.ShowDialog(null); + if (result != System.Windows.Forms.DialogResult.OK) { + isHandlingSizeChanges = true; + return; + } + graphicsSettings = settingsForm.settings; + + windowed = graphicsSettings.IsWindowed; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Inform the display class of the change. It will internally + // re-create valid surfaces, a d3ddevice, etc. + try { + InitializeEnvironment(); + } + catch(SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + isHandlingSizeChanges = true; + } + + + + + /// + /// Will start (or stop) simulation + /// + private void ToggleStart(object sender, EventArgs e) { + //Toggle frame movement + frameMoving = !frameMoving; + DXUtil.Timer(frameMoving ? DirectXTimer.Start : DirectXTimer.Stop); + } + + + + + /// + /// Will single step the simulation + /// + private void SingleStep(object sender, EventArgs e) { + // Single-step frame movement + if (false == frameMoving) + DXUtil.Timer(DirectXTimer.Advance); + else + DXUtil.Timer(DirectXTimer.Stop); + frameMoving = false; + singleStep = true; + } + + + + + /// + /// Will end the simulation + /// + private void ExitSample(object sender, EventArgs e) { + this.Close(); + } + #endregion + + + + + #region WinForms Overrides + /// + /// Clean up any resources + /// + protected override void Dispose(bool disposing) { + CleanupEnvironment(); + mnuMain.Dispose(); + base.Dispose(disposing); + } + + + + + /// + /// Handle any key presses + /// + protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) { + // Check for our shortcut keys (Return to start or stop) + if (e.KeyChar == '\r') { + mnuGo.PerformClick(); + e.Handled = true; + } + + // Check for our shortcut keys (Escape to quit) + if ((byte)e.KeyChar == (byte)(int)System.Windows.Forms.Keys.Escape) { + mnuExit.PerformClick(); + e.Handled = true; + } + + // Allow the control to handle the keystroke now + base.OnKeyPress(e); + } + + + + + /// + /// Handle system keystrokes (ie, alt-enter) + /// + protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e) { + if ((e.Alt) && (e.KeyCode == System.Windows.Forms.Keys.Return)) { + // Toggle the fullscreen/window mode + if (active && ready) { + Pause(true); + + try { + ToggleFullscreen(); + Pause(false); + return; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + } + finally { + e.Handled = true; + } + } + } + // Allow the control to handle the keystroke now + base.OnKeyDown(e); + } + + + + + /// + /// Winforms generated code for initializing the form + /// + private void InitializeComponent() { + // + // GraphicsSample + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.MinimumSize = new System.Drawing.Size(100, 100); + #region MenuCreation/etc + this.mnuMain = new System.Windows.Forms.MainMenu(); + this.mnuFile = new System.Windows.Forms.MenuItem(); + this.mnuGo = new System.Windows.Forms.MenuItem(); + this.mnuSingle = new System.Windows.Forms.MenuItem(); + this.mnuBreak1 = new System.Windows.Forms.MenuItem(); + this.mnuChange = new System.Windows.Forms.MenuItem(); + this.mnuBreak2 = new System.Windows.Forms.MenuItem(); + this.mnuExit = new System.Windows.Forms.MenuItem(); + // + // mainMenu1 + // + this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuFile}); + // + // mnuFile + // + this.mnuFile.Index = 0; + this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuGo, + this.mnuSingle, + this.mnuBreak1, + this.mnuChange, + this.mnuBreak2, + this.mnuExit}); + this.mnuFile.Text = "&File"; + // + // mnuGo + // + this.mnuGo.Index = 0; + this.mnuGo.Text = "&Go/stop\tEnter"; + this.mnuGo.Click += new System.EventHandler(this.ToggleStart); + // + // mnuSingle + // + this.mnuSingle.Index = 1; + this.mnuSingle.Text = "&Single step\tSpace"; + this.mnuSingle.Click += new System.EventHandler(this.SingleStep); + // + // mnuBreak1 + // + this.mnuBreak1.Index = 2; + this.mnuBreak1.Text = "-"; + // + // mnuChange + // + this.mnuChange.Index = 3; + this.mnuChange.Shortcut = System.Windows.Forms.Shortcut.F2; + this.mnuChange.ShowShortcut = true; + this.mnuChange.Text = "&Change Device..."; + this.mnuChange.Click += new System.EventHandler(this.UserSelectNewDevice); + // + // mnuBreak2 + // + this.mnuBreak2.Index = 4; + this.mnuBreak2.Text = "-"; + // + // mnuExit + // + this.mnuExit.Index = 5; + this.mnuExit.Text = "E&xit\tESC"; + this.mnuExit.Click += new System.EventHandler(this.ExitSample); + #endregion + } + + + + + /// + /// When the menu is starting pause our simulation + /// + protected override void OnMenuStart(System.EventArgs e) { + Pause(true); // Pause the simulation while the menu starts + } + + + + + /// + /// When the menu is complete our simulation can continue + /// + protected override void OnMenuComplete(System.EventArgs e) { + Pause(false); // Unpause the simulation + } + + + + + /// + /// Make sure our graphics cursor (if available) moves with the cursor + /// + protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e) { + if ((device != null) && (!device.Disposed)) { + // Move the D3D cursor + device.SetCursorPosition(e.X, e.Y, false); + } + // Let the control handle the mouse now + base.OnMouseMove(e); + } + + + + + /// + /// Handle size changed events + /// + protected override void OnSizeChanged(System.EventArgs e) { + this.OnResize(e); + base.OnSizeChanged(e); + } + + + + + /// + /// Handle resize events + /// + protected override void OnResize(System.EventArgs e) { + if (isHandlingSizeChanges) { + // Are we maximized? + isMaximized = (this.WindowState == System.Windows.Forms.FormWindowState.Maximized); + if (!isMaximized) { + storedSize = this.ClientSize; + storedLocation = this.Location; + } + } + active = !(this.WindowState == System.Windows.Forms.FormWindowState.Minimized || this.Visible == false); + base.OnResize(e); + } + + + + + /// + /// Once the form has focus again, we can continue to handle our resize + /// and resets.. + /// + protected override void OnGotFocus(System.EventArgs e) { + isHandlingSizeChanges = true; + isWindowActive = true; + base.OnGotFocus (e); + } + + + + + /// + /// Handle move events + /// + protected override void OnMove(System.EventArgs e) { + if (isHandlingSizeChanges) { + storedLocation = this.Location; + } + base.OnMove(e); + } + + + + + /// + /// Handle closing event + /// + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { + isClosing = true; + base.OnClosing(e); + } + #endregion + + +} + +#region Enums for D3D Applications +/// +/// Messages that can be used when displaying an error +/// +public enum ApplicationMessage { + None, + ApplicationMustExit, + WarnSwitchToRef +}; +#endregion + + + + +#region Various SampleExceptions +/// +/// The default sample exception type +/// +public class SampleException : System.ApplicationException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + + strMsg = "Generic application error. Enable\n"; + strMsg += "debug output for detailed information."; + + return strMsg; + } + } +} + + + + +/// +/// Exception informing user no compatible devices were found +/// +public class NoCompatibleDevicesException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "This sample cannot run in a desktop\n"; + strMsg += "window with the current display settings.\n"; + strMsg += "Please change your desktop settings to a\n"; + strMsg += "16- or 32-bit display mode and re-run this\n"; + strMsg += "sample."; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when the ReferenceDevice is null +/// +public class NullReferenceDeviceException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Warning: Nothing will be rendered.\n"; + strMsg += "The reference rendering device was selected, but your\n"; + strMsg += "computer only has a reduced-functionality reference device\n"; + strMsg += "installed. Install the DirectX SDK to get the full\n"; + strMsg += "reference device.\n"; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when reset fails +/// +public class ResetFailedException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not reset the Direct3D device."; + + return strMsg; + } + } +} + + + + +/// +/// The exception thrown when media couldn't be found +/// +public class MediaNotFoundException : SampleException { + private string mediaFile; + public MediaNotFoundException(string filename) : base() { + mediaFile = filename; + } + public MediaNotFoundException() : base() { + mediaFile = string.Empty; + } + + + + + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not load required media."; + if (mediaFile.Length > 0) + strMsg += string.Format("\r\nFile: {0}", mediaFile); + + return strMsg; + } + } +} +#endregion + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/d3dapp.resx b/Source Code updated 08-12-05/Spacewar3D/Step10/d3dapp.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/d3dapp.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/d3denumeration.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/d3denumeration.cs new file mode 100644 index 0000000..47c1c6a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/d3denumeration.cs @@ -0,0 +1,449 @@ +//----------------------------------------------------------------------------- +// File: D3DEnumeration.cs +// +// Desc: Enumerates D3D adapters, devices, modes, etc. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + + + +/// +/// Enumeration of all possible D3D vertex processing types +/// +public enum VertexProcessingType { + Software, + Mixed, + Hardware, + PureHardware +} + + + + +/// +/// Info about a display adapter +/// +public class GraphicsAdapterInfo { + public int AdapterOrdinal; + public AdapterDetails AdapterDetails; + public ArrayList DisplayModeList = new ArrayList(); // List of D3DDISPLAYMODEs + public ArrayList DeviceInfoList = new ArrayList(); // List of D3DDeviceInfos + public override string ToString() { return AdapterDetails.Description; } +} + + + + +/// +/// Info about a D3D device, including a list of DeviceCombos (see below) +/// that work with the device +/// +public class GraphicsDeviceInfo { + public int AdapterOrdinal; + public DeviceType DevType; + public Caps Caps; + public ArrayList DeviceComboList = new ArrayList(); // List of D3DDeviceCombos + public override string ToString() { return DevType.ToString(); } +} + + + + +/// +/// Info about a depth/stencil buffer format that is incompatible with a +/// multisample type +/// +public class DepthStencilMultiSampleConflict { + public DepthFormat DepthStencilFormat; + public MultiSampleType MultiSampleType; +} + + + + +/// +/// A combination of adapter format, back buffer format, and windowed/fullscreen +/// that is compatible with a particular D3D device (and the app) +/// +public class DeviceCombo { + public int AdapterOrdinal; + public DeviceType DevType; + public Format AdapterFormat; + public Format BackBufferFormat; + public bool IsWindowed; + public ArrayList DepthStencilFormatList = new ArrayList(); // List of D3DFORMATs + public ArrayList MultiSampleTypeList = new ArrayList(); // List of D3DMULTISAMPLE_TYPEs + public ArrayList MultiSampleQualityList = new ArrayList(); // List of ints (maxQuality per multisample type) + public ArrayList DepthStencilMultiSampleConflictList = new ArrayList(); // List of DepthStencilMultiSampleConflicts + public ArrayList VertexProcessingTypeList = new ArrayList(); // List of VertexProcessingTypes + public ArrayList PresentIntervalList = new ArrayList(); // List of D3DPRESENT_INTERVALs +} + + + + +/// +/// Used to sort Displaymodes +/// +class DisplayModeComparer : System.Collections.IComparer { + /// + /// Compare two display modes + /// + public int Compare(object x, object y) { + DisplayMode dx = (DisplayMode)x; + DisplayMode dy = (DisplayMode)y; + + if (dx.Width > dy.Width) + return 1; + if (dx.Width < dy.Width) + return -1; + if (dx.Height > dy.Height) + return 1; + if (dx.Height < dy.Height) + return -1; + if (dx.Format > dy.Format) + return 1; + if (dx.Format < dy.Format) + return -1; + if (dx.RefreshRate > dy.RefreshRate) + return 1; + if (dx.RefreshRate < dy.RefreshRate) + return -1; + return 0; + } +} + + + + +/// +/// Enumerates available adapters, devices, modes, etc. +/// +public class D3DEnumeration { + /// + /// The confirm device delegate which is used to determine if a device + /// meets the needs of the simulation + /// + public delegate bool ConfirmDeviceCallbackType(Caps caps, + VertexProcessingType vertexProcessingType, Format adapterFormat, + Format backBufferFormat); + + public ConfirmDeviceCallbackType ConfirmDeviceCallback; + public ArrayList AdapterInfoList = new ArrayList(); // List of D3DAdapterInfos + + // The following variables can be used to limit what modes, formats, + // etc. are enumerated. Set them to the values you want before calling + // Enumerate(). + public int AppMinFullscreenWidth = 640; + public int AppMinFullscreenHeight = 480; + public int AppMinColorChannelBits = 5; // min color bits per channel in adapter format + public int AppMinAlphaChannelBits = 0; // min alpha bits per pixel in back buffer format + public int AppMinDepthBits = 15; + public int AppMinStencilBits = 0; + public bool AppUsesDepthBuffer = true; + public bool AppUsesMixedVP = false; // whether app can take advantage of mixed vp mode + public bool AppRequiresWindowed = false; + public bool AppRequiresFullscreen = false; + + + + + /// + /// Enumerates available D3D adapters, devices, modes, etc. + /// + public void Enumerate() { + foreach (AdapterInformation ai in Manager.Adapters) { + ArrayList adapterFormatList = new ArrayList(); + GraphicsAdapterInfo adapterInfo = new GraphicsAdapterInfo(); + adapterInfo.AdapterOrdinal = ai.Adapter; + adapterInfo.AdapterDetails = ai.Information; + + // Get list of all display modes on this adapter. + // Also build a temporary list of all display adapter formats. + foreach (DisplayMode displayMode in ai.SupportedDisplayModes) { + if (displayMode.Width < AppMinFullscreenWidth) + continue; + if (displayMode.Height < AppMinFullscreenHeight) + continue; + if (GraphicsUtility.GetColorChannelBits(displayMode.Format) < AppMinColorChannelBits) + continue; + adapterInfo.DisplayModeList.Add(displayMode); + if (!adapterFormatList.Contains(displayMode.Format)) + adapterFormatList.Add(displayMode.Format); + } + + // Sort displaymode list + DisplayModeComparer dmc = new DisplayModeComparer(); + adapterInfo.DisplayModeList.Sort(dmc); + + // Get info for each device on this adapter + EnumerateDevices(adapterInfo, adapterFormatList); + + // If at least one device on this adapter is available and compatible + // with the app, add the adapterInfo to the list + if (adapterInfo.DeviceInfoList.Count == 0) + continue; + AdapterInfoList.Add(adapterInfo); + } + } + + + + + /// + /// Enumerates D3D devices for a particular adapter + /// + protected void EnumerateDevices(GraphicsAdapterInfo adapterInfo, ArrayList adapterFormatList) { + DeviceType[] devTypeArray = new DeviceType[] { + DeviceType.Hardware, DeviceType.Software, DeviceType.Reference }; + + foreach (DeviceType devType in devTypeArray) { + GraphicsDeviceInfo deviceInfo = new GraphicsDeviceInfo(); + deviceInfo.AdapterOrdinal = adapterInfo.AdapterOrdinal; + deviceInfo.DevType = devType; + try { + deviceInfo.Caps = Manager.GetDeviceCaps(adapterInfo.AdapterOrdinal, devType); + } + catch (DirectXException) { + continue; + } + + // Get info for each devicecombo on this device + EnumerateDeviceCombos(deviceInfo, adapterFormatList); + + // If at least one devicecombo for this device is found, + // add the deviceInfo to the list + if (deviceInfo.DeviceComboList.Count == 0) + continue; + adapterInfo.DeviceInfoList.Add(deviceInfo); + } + } + + + + + /// + /// Enumerates DeviceCombos for a particular device + /// + protected void EnumerateDeviceCombos(GraphicsDeviceInfo deviceInfo, ArrayList adapterFormatList) { + Format[] backBufferFormatArray = new Format[] { + Format.A8R8G8B8, Format.X8R8G8B8, Format.A2R10G10B10, + Format.R5G6B5, Format.A1R5G5B5, Format.X1R5G5B5, + }; + bool[] isWindowedArray = new bool[] { false, true }; + + // See which adapter formats are supported by this device + foreach (Format adapterFormat in adapterFormatList) { + foreach (Format backBufferFormat in backBufferFormatArray) { + if (GraphicsUtility.GetAlphaChannelBits(backBufferFormat) < AppMinAlphaChannelBits) + continue; + foreach (bool isWindowed in isWindowedArray) { + if (!isWindowed && AppRequiresWindowed) + continue; + if (isWindowed && AppRequiresFullscreen) + continue; + if (!Manager.CheckDeviceType(deviceInfo.AdapterOrdinal, deviceInfo.DevType, adapterFormat, backBufferFormat, isWindowed)) { + continue; + } + + // At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed + // DeviceCombo that is supported by the system. We still need to confirm that it's + // compatible with the app, and find one or more suitable depth/stencil buffer format, + // multisample type, vertex processing type, and present interval. + DeviceCombo deviceCombo = new DeviceCombo(); + deviceCombo.AdapterOrdinal = deviceInfo.AdapterOrdinal; + deviceCombo.DevType = deviceInfo.DevType; + deviceCombo.AdapterFormat = adapterFormat; + deviceCombo.BackBufferFormat = backBufferFormat; + deviceCombo.IsWindowed = isWindowed; + if (AppUsesDepthBuffer) { + BuildDepthStencilFormatList(deviceCombo); + if (deviceCombo.DepthStencilFormatList.Count == 0) + continue; + } + BuildMultiSampleTypeList(deviceCombo); + if (deviceCombo.MultiSampleTypeList.Count == 0) + continue; + BuildDepthStencilMultiSampleConflictList(deviceCombo); + BuildVertexProcessingTypeList(deviceInfo, deviceCombo); + if (deviceCombo.VertexProcessingTypeList.Count == 0) + continue; + BuildPresentIntervalList(deviceInfo, deviceCombo); + if (deviceCombo.PresentIntervalList.Count == 0) + continue; + + deviceInfo.DeviceComboList.Add(deviceCombo); + } + } + } + } + + + + + /// + /// Adds all depth/stencil formats that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildDepthStencilFormatList(DeviceCombo deviceCombo) { + DepthFormat[] depthStencilFormatArray = { + DepthFormat.D16, + DepthFormat.D15S1, + DepthFormat.D24X8, + DepthFormat.D24S8, + DepthFormat.D24X4S4, + DepthFormat.D32, + }; + + foreach (DepthFormat depthStencilFmt in depthStencilFormatArray) { + if (GraphicsUtility.GetDepthBits(depthStencilFmt) < AppMinDepthBits) + continue; + if (GraphicsUtility.GetStencilBits(depthStencilFmt) < AppMinStencilBits) + continue; + if (Manager.CheckDeviceFormat(deviceCombo.AdapterOrdinal, deviceCombo.DevType, deviceCombo.AdapterFormat, + Usage.DepthStencil, ResourceType.Surface, depthStencilFmt)) { + if (Manager.CheckDepthStencilMatch(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat, depthStencilFmt)) { + deviceCombo.DepthStencilFormatList.Add(depthStencilFmt); + } + } + } + } + + + + + /// + /// Adds all multisample types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildMultiSampleTypeList(DeviceCombo deviceCombo) { + MultiSampleType[] msTypeArray = { + MultiSampleType.None, + MultiSampleType.NonMaskable, + MultiSampleType.TwoSamples, + MultiSampleType.ThreeSamples, + MultiSampleType.FourSamples, + MultiSampleType.FiveSamples, + MultiSampleType.SixSamples, + MultiSampleType.SevenSamples, + MultiSampleType.EightSamples, + MultiSampleType.NineSamples, + MultiSampleType.TenSamples, + MultiSampleType.ElevenSamples, + MultiSampleType.TwelveSamples, + MultiSampleType.ThirteenSamples, + MultiSampleType.FourteenSamples, + MultiSampleType.FifteenSamples, + MultiSampleType.SixteenSamples, + }; + + foreach (MultiSampleType msType in msTypeArray) { + int result; + int qualityLevels = 0; + if (Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.BackBufferFormat, deviceCombo.IsWindowed, msType, out result, out qualityLevels)) { + deviceCombo.MultiSampleTypeList.Add(msType); + deviceCombo.MultiSampleQualityList.Add(qualityLevels); + } + } + } + + + + + /// + /// Finds any depthstencil formats that are incompatible with multisample types and + /// builds a list of them. + /// + public void BuildDepthStencilMultiSampleConflictList(DeviceCombo deviceCombo) { + DepthStencilMultiSampleConflict DSMSConflict; + + foreach (DepthFormat dsFmt in deviceCombo.DepthStencilFormatList) { + foreach (MultiSampleType msType in deviceCombo.MultiSampleTypeList) { + if (!Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, + deviceCombo.DevType, (Format)dsFmt, deviceCombo.IsWindowed, msType)) { + DSMSConflict = new DepthStencilMultiSampleConflict(); + DSMSConflict.DepthStencilFormat = dsFmt; + DSMSConflict.MultiSampleType = msType; + deviceCombo.DepthStencilMultiSampleConflictList.Add(DSMSConflict); + } + } + } + } + + + + + /// + /// Adds all vertex processing types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildVertexProcessingTypeList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + if (deviceInfo.Caps.DeviceCaps.SupportsHardwareTransformAndLight) { + if (deviceInfo.Caps.DeviceCaps.SupportsPureDevice) { + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.PureHardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.PureHardware); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Hardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Hardware); + } + if (AppUsesMixedVP && (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Mixed, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat))) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Mixed); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Software, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Software); + } + } + + + + + /// + /// Adds all present intervals that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildPresentIntervalList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + PresentInterval[] piArray = { + PresentInterval.Immediate, + PresentInterval.Default, + PresentInterval.One, + PresentInterval.Two, + PresentInterval.Three, + PresentInterval.Four, + }; + + foreach (PresentInterval pi in piArray) { + if (deviceCombo.IsWindowed) { + if (pi == PresentInterval.Two || + pi == PresentInterval.Three || + pi == PresentInterval.Four) { + // These intervals are not supported in windowed mode. + continue; + } + } + // Note that PresentInterval.Default is zero, so you + // can't do a caps check for it -- it is always available. + if (pi == PresentInterval.Default || + (deviceInfo.Caps.PresentationIntervals & pi) != (PresentInterval)0) { + deviceCombo.PresentIntervalList.Add(pi); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/d3dfont.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/d3dfont.cs new file mode 100644 index 0000000..2b374eb --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/d3dfont.cs @@ -0,0 +1,666 @@ +//----------------------------------------------------------------------------- +// File: D3DFont.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// A generic font class +/// +public class GraphicsFont { + public const int MaxNumfontVertices = 50*6; + + // Font rendering flags + [System.Flags] + public enum RenderFlags { + Centered = 0x0001, + TwoSided = 0x0002, + Filtered = 0x0004, + } + private System.Drawing.Font systemFont; + + private bool isZEnable = false; + public bool ZBufferEnable { get { return isZEnable; } set { isZEnable = value; } } + string ourFontName; // Font properties + int ourFontHeight; + + private Direct3D.Device device; + private TextureStateManager textureState0; + private TextureStateManager textureState1; + private SamplerStateManager samplerState0; + private RenderStateManager renderState; + private Direct3D.Texture fontTexture; + private Direct3D.VertexBuffer vertexBuffer; + private CustomVertex.TransformedColoredTextured[] fontVertices = new CustomVertex.TransformedColoredTextured[MaxNumfontVertices]; + + private int textureWidth; // Texture dimensions + private int textureHeight; + private float textureScale; + private int spacingPerChar; + private float[,] textureCoords = new float[128-32,4]; + + // Stateblocks for setting and restoring render states + private StateBlock savedStateBlock; + private StateBlock drawTextStateBlock; + + + + + /// + /// Create a new font object + /// + /// The font to use + public GraphicsFont(System.Drawing.Font f) { + ourFontName = f.Name; + ourFontHeight = (int)f.Size; + systemFont = f; + } + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName) : this(fontName, FontStyle.Regular, 12) { + } + + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName, FontStyle style) : this(fontName, style, 12) { + } + + + + + /// + /// Create a new font object + /// + /// The name of the font + /// The style + /// Size of the font + public GraphicsFont(string fontName, FontStyle style, int size) { + ourFontName = fontName; + ourFontHeight = size; + systemFont = new System.Drawing.Font(fontName, ourFontHeight, style); + } + + + + + /// + /// Attempt to draw the systemFont alphabet onto the provided texture + /// graphics. + /// + /// Graphics object on which to draw and measure the letters + /// If set, the method will test to see if the alphabet will fit without actually drawing + public void PaintAlphabet(Graphics g, bool measureOnly) { + string str; + float x = 0; + float y = 0; + Point p = new Point(0, 0); + Size size = new Size(0,0); + + // Calculate the spacing between characters based on line height + size = g.MeasureString(" ", systemFont).ToSize(); + x = spacingPerChar = (int) Math.Ceiling(size.Height * 0.3); + + for (char c = (char)32; c < (char)127; c++) { + str = c.ToString(); + // We need to do some things here to get the right sizes. The default implemententation of MeasureString + // will return a resolution independant size. For our height, this is what we want. However, for our width, we + // want a resolution dependant size. + Size resSize = g.MeasureString(str, systemFont).ToSize(); + size.Height = resSize.Height + 1; + + // Now the Resolution independent width + if (c != ' ') { // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + resSize = g.MeasureString(str, systemFont, p, StringFormat.GenericTypographic).ToSize(); + size.Width = resSize.Width; + } + else + size.Width = resSize.Width; + + if ((x + size.Width + spacingPerChar) > textureWidth) { + x = spacingPerChar; + y += size.Height; + } + + // Make sure we have room for the current character + if ((y + size.Height) > textureHeight) + throw new System.InvalidOperationException("Texture too small for alphabet"); + + if (!measureOnly) { + if (c != ' ') // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y), StringFormat.GenericTypographic); + else + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y)); + textureCoords[c-32,0] = ((float) (x + 0 - spacingPerChar)) / textureWidth; + textureCoords[c-32,1] = ((float) (y + 0 + 0)) / textureHeight; + textureCoords[c-32,2] = ((float) (x + size.Width + spacingPerChar)) / textureWidth; + textureCoords[c-32,3] = ((float) (y + size.Height + 0)) / textureHeight; + } + + x += size.Width + (2 * spacingPerChar); + } + + } + + + + + /// + /// Initialize the device objects + /// + /// The grpahics device used to initialize + public void InitializeDeviceObjects(Device dev) { + if (dev != null) { + // Set up our events + dev.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Keep a local copy of the device + device = dev; + textureState0 = device.TextureState[0]; + textureState1 = device.TextureState[1]; + samplerState0 = device.SamplerState[0]; + renderState = device.RenderState; + + // Create a bitmap on which to measure the alphabet + Bitmap bmp = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Graphics g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Establish the font and texture size + textureScale = 1.0f; // Draw fonts into texture without scaling + + // Calculate the dimensions for the smallest power-of-two texture which + // can hold all the printable characters + textureWidth = textureHeight = 128; + for (;;) { + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // Scale up the texture size and try again + textureWidth *= 2; + textureHeight *= 2; + continue; + } + + break; + } + + // If requested texture is too big, use a smaller texture and smaller font, + // and scale up when rendering. + Direct3D.Caps d3dCaps = device.DeviceCaps; + + // If the needed texture is too large for the video card... + if (textureWidth > d3dCaps.MaxTextureWidth) { + // Scale the font size down to fit on the largest possible texture + textureScale = (float)d3dCaps.MaxTextureWidth / (float)textureWidth; + textureWidth = textureHeight = d3dCaps.MaxTextureWidth; + + for(;;) { + // Create a new, smaller font + ourFontHeight = (int) Math.Floor(ourFontHeight * textureScale); + systemFont = new System.Drawing.Font(systemFont.Name, ourFontHeight, systemFont.Style); + + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // If that still doesn't fit, scale down again and continue + textureScale *= 0.9F; + continue; + } + + break; + } + } + + // Release the bitmap used for measuring and create one for drawing + bmp.Dispose(); + bmp = new Bitmap(textureWidth, textureHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Draw the alphabet + PaintAlphabet(g, false); + + // Create a new texture for the font from the bitmap we just created + fontTexture = Texture.FromBitmap(device, bmp, 0, Pool.Managed); + RestoreDeviceObjects(null, null); + } + + + + + /// + /// Restore the font after a device has been reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColoredTextured), MaxNumfontVertices, + device, Usage.WriteOnly | Usage.Dynamic, 0, Pool.Default); + + Surface surf = device.GetRenderTarget( 0 ); + bool bSupportsAlphaBlend = Manager.CheckDeviceFormat(device.DeviceCaps.AdapterOrdinal, + device.DeviceCaps.DeviceType, device.DisplayMode.Format, + Usage.RenderTarget | Usage.QueryPostPixelShaderBlending, ResourceType.Surface, + surf.Description.Format ); + + // Create the state blocks for rendering text + for (int which=0; which < 2; which++) { + device.BeginStateBlock(); + device.SetTexture(0, fontTexture); + + if (isZEnable) + renderState.ZBufferEnable = true; + else + renderState.ZBufferEnable = false; + + if( bSupportsAlphaBlend ) { + renderState.AlphaBlendEnable = true; + renderState.SourceBlend = Blend.SourceAlpha; + renderState.DestinationBlend = Blend.InvSourceAlpha; + } + else { + renderState.AlphaBlendEnable = false; + } + renderState.AlphaTestEnable = true; + renderState.ReferenceAlpha = 0x08; + renderState.AlphaFunction = Compare.GreaterEqual; + renderState.FillMode = FillMode.Solid; + renderState.CullMode = Cull.CounterClockwise; + renderState.StencilEnable = false; + renderState.Clipping = true; + device.ClipPlanes.DisableAll(); + renderState.VertexBlend = VertexBlend.Disable; + renderState.IndexedVertexBlendEnable = false; + renderState.FogEnable = false; + renderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; + textureState0.ColorOperation = TextureOperation.Modulate; + textureState0.ColorArgument1 = TextureArgument.TextureColor; + textureState0.ColorArgument2 = TextureArgument.Diffuse; + textureState0.AlphaOperation = TextureOperation.Modulate; + textureState0.AlphaArgument1 = TextureArgument.TextureColor; + textureState0.AlphaArgument2 = TextureArgument.Diffuse; + textureState0.TextureCoordinateIndex = 0; + textureState0.TextureTransform = TextureTransform.Disable; // REVIEW + textureState1.ColorOperation = TextureOperation.Disable; + textureState1.AlphaOperation = TextureOperation.Disable; + samplerState0.MinFilter = TextureFilter.Point; + samplerState0.MagFilter = TextureFilter.Point; + samplerState0.MipFilter = TextureFilter.None; + + if (which==0) + savedStateBlock = device.EndStateBlock(); + else + drawTextStateBlock = device.EndStateBlock(); + } + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text) { + DrawText(xpos, ypos, color, text, RenderFlags.Filtered); + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text, RenderFlags flags) { + if (text == null) + return; + + // Setup renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.SetTexture(0, fontTexture); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Adjust for character spacing + xpos -= spacingPerChar; + float fStartX = xpos; + + // Fill vertex buffer + int iv = 0; + int dwNumTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / textureScale; + float h = (ty2-ty1) * textureHeight / textureScale; + + int intColor = color.ToArgb(); + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + dwNumTriangles += 2; + + if (dwNumTriangles*3 > (MaxNumfontVertices-6)) { + // Set the data for the vertexbuffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + dwNumTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar); + } + + // Set the data for the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (dwNumTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + Viewport vp = device.Viewport; + float xpos = (x+1.0f)*vp.Width/2; + float ypos = (y+1.0f)*vp.Height/2; + float sz = z; + float rhw = 1.0f; + float fLineHeight = (textureCoords[0,3] - textureCoords[0,1]) * textureHeight; + + // Adjust for character spacing + xpos -= spacingPerChar * (fXScale*vp.Height)/fLineHeight; + float fStartX = xpos; + + // Fill vertex buffer + int numTriangles = 0; + int realColor = color.ToArgb(); + int iv = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += fYScale*vp.Height; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1)*textureWidth; + float h = (ty2-ty1)*textureHeight; + + w *= (fXScale*vp.Height)/fLineHeight; + h *= (fYScale*vp.Height)/fLineHeight; + + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + numTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar) * (fXScale*vp.Height)/fLineHeight; + } + + // Unlock and render the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text) { + this.DrawTextScaled(x,y,z,fXScale, fYScale, color, text, 0); + } + + + + + /// + /// Renders 3D text + /// + public void Render3DText(string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.PositionNormalTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0, VertexInformation.GetFormatSize(CustomVertex.PositionNormalTextured.Format)); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Position for each text element + float x = 0.0f; + float y = 0.0f; + + // Center the text block at the origin + if ((flags & RenderFlags.Centered) != 0) { + System.Drawing.SizeF sz = GetTextExtent(text); + x = -(((float)sz.Width)/10.0f)/2.0f; + y = -(((float)sz.Height)/10.0f)/2.0f; + } + + // Turn off culling for two-sided text + if ((flags & RenderFlags.TwoSided) != 0) + renderState.CullMode = Cull.None; + + // Adjust for character spacing + x -= spacingPerChar / 10.0f; + float fStartX = x; + + // Fill vertex buffer + GraphicsStream strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + int numTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + x = fStartX; + y -= (textureCoords[0,3]-textureCoords[0,1])*textureHeight/10.0f; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / (10.0f * textureScale); + float h = (ty2-ty1) * textureHeight / (10.0f * textureScale); + + if (c != ' ') { + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+0,0), new Vector3(0,0,-1), tx1, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+h,0), new Vector3(0,0,-1), tx2, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.Unlock(); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + numTriangles = 0; + } + } + + x += w - (2 * spacingPerChar) / 10.0f; + } + + // Unlock and render the vertex buffer + vertexBuffer.Unlock(); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Get the dimensions of a text string + /// + private System.Drawing.SizeF GetTextExtent(string text) { + if (null == text || text == string.Empty) + throw new System.ArgumentNullException(); + + float fRowWidth = 0.0f; + float fRowHeight = (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + float fWidth = 0.0f; + float fHeight = fRowHeight; + + foreach (char c in text) { + if (c == '\n') { + fRowWidth = 0.0f; + fHeight += fRowHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float tx2 = textureCoords[c-32,2]; + + fRowWidth += (tx2-tx1)*textureWidth - 2*spacingPerChar; + + if (fRowWidth > fWidth) + fWidth = fRowWidth; + } + + return new System.Drawing.SizeF(fWidth, fHeight); + } + + + + + /// + /// Cleanup any resources being used + /// + public void Dispose(object sender, EventArgs e) { + if (systemFont != null) + systemFont.Dispose(); + + systemFont = null; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/d3dutil.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/d3dutil.cs new file mode 100644 index 0000000..ea2d5a3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/d3dutil.cs @@ -0,0 +1,928 @@ +//----------------------------------------------------------------------------- +// File: D3DUtil.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Windows.Forms; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// Various helper functions for graphics samples +/// +public class GraphicsUtility { + /// + /// Private Constructor + /// + private GraphicsUtility() { + } + + + + /// + /// Initializes a Material structure, setting the diffuse and ambient + /// colors. It does not set emissive or specular colors. + /// + /// The ambient and diffuse color + /// A defined material + public static Direct3D.Material InitMaterial(System.Drawing.Color c) { + Material mtrl = new Material(); + mtrl.Ambient = mtrl.Diffuse = c; + return mtrl; + } + + + + + /// + /// Initializes a light, setting the light position. The + /// diffuse color is set to white; specular and ambient are left as black. + /// + /// Which light to initialize + /// The type + public static void InitLight(Light light, LightType ltType, float x, float y, float z) { + light.Type = ltType; + light.Diffuse = System.Drawing.Color.White; + light.Position = new Vector3(x,y,z); + light.Direction = Vector3.Normalize(light.Position); + light.Range = 1000.0f; + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename, Format format) { + // Get the path to the texture + string path = DXUtil.FindMediaFile(null, textureFilename); + + // Create the texture using D3DX + return TextureLoader.FromFile(device, path, D3DX.Default, D3DX.Default, D3DX.Default, 0, format, + Pool.Managed, Filter.Triangle|Filter.Mirror, + Filter.Triangle|Filter.Mirror, 0); + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename) { + return GraphicsUtility.CreateTexture(device, textureFilename, Format.Unknown); + } + + + + + + /// + /// Returns a view matrix for rendering to a face of a cubemap. + /// + public static Matrix GetCubeMapViewMatrix(CubeMapFace face) { + Vector3 vEyePt = new Vector3(0.0f, 0.0f, 0.0f); + Vector3 vLookDir = new Vector3(); + Vector3 vUpDir = new Vector3(); + + switch (face) { + case CubeMapFace.PositiveX: + vLookDir = new Vector3(1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeX: + vLookDir = new Vector3(-1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.PositiveY: + vLookDir = new Vector3(0.0f, 1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f,-1.0f); + break; + case CubeMapFace.NegativeY: + vLookDir = new Vector3(0.0f,-1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f, 1.0f); + break; + case CubeMapFace.PositiveZ: + vLookDir = new Vector3(0.0f, 0.0f, 1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeZ: + vLookDir = new Vector3(0.0f, 0.0f,-1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + } + + // Set the view transform for this cubemap surface + Matrix matView = Matrix.LookAtLH(vEyePt, vLookDir, vUpDir); + return matView; + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control, float fTrackBallRadius) { + System.Drawing.Point pt = System.Windows.Forms.Cursor.Position; + System.Drawing.Rectangle rc = control.ClientRectangle; + pt = control.PointToClient(pt); + float xpos = (((2.0f * pt.X) / (rc.Right-rc.Left)) - 1); + float ypos = (((2.0f * pt.Y) / (rc.Bottom-rc.Top)) - 1); + float sz; + + if (xpos == 0.0f && ypos == 0.0f) + return new Quaternion(0.0f, 0.0f, 0.0f, 1.0f); + + float d2 = (float)Math.Sqrt(xpos*xpos + ypos*ypos); + + if (d2 < fTrackBallRadius * 0.70710678118654752440) // Inside sphere + sz = (float)Math.Sqrt(fTrackBallRadius*fTrackBallRadius - d2*d2); + else // On hyperbola + sz = (fTrackBallRadius*fTrackBallRadius) / (2.0f*d2); + + // Get two points on trackball's sphere + Vector3 p1 = new Vector3(xpos, ypos, sz); + Vector3 p2 = new Vector3(0.0f, 0.0f, fTrackBallRadius); + + // Get axis of rotation, which is cross product of p1 and p2 + Vector3 axis = Vector3.Cross(p1,p2); + + // Calculate angle for the rotation about that axis + float t = Vector3.Length(Vector3.Subtract(p2,p1)) / (2.0f*fTrackBallRadius); + if (t > +1.0f) t = +1.0f; + if (t < -1.0f) t = -1.0f; + float fAngle = (float)(2.0f * Math.Asin(t)); + + // Convert axis to quaternion + return Quaternion.RotationAxis(axis, fAngle); + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control) { + return GetRotationFromCursor(control, 1.0f); + } + + + + + /// + /// Axis to axis quaternion double angle (no normalization) + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by 2*THETA. + /// + public static Quaternion D3DXQuaternionUnitAxisToUnitAxis2(Vector3 fromVector, Vector3 toVector) { + Vector3 axis = Vector3.Cross(fromVector, toVector); // proportional to sin(theta) + return new Quaternion(axis.X, axis.Y, axis.Z, Vector3.Dot(fromVector, toVector)); + } + + + + + /// + /// Axis to axis quaternion + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by theta. + /// + public static Quaternion D3DXQuaternionAxisToAxis(Vector3 fromVector, Vector3 toVector) { + Vector3 vA = Vector3.Normalize(fromVector), vB = Vector3.Normalize(toVector); + Vector3 vHalf = Vector3.Add(vA,vB); + vHalf = Vector3.Normalize(vHalf); + return GraphicsUtility.D3DXQuaternionUnitAxisToUnitAxis2(vA, vHalf); + } + + + + + /// + /// Gets the number of ColorChanelBits from a format + /// + static public int GetColorChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 8; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 8; + case Format.R5G6B5: + return 5; + case Format.X1R5G5B5: + return 5; + case Format.A1R5G5B5: + return 5; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 2; + case Format.A8R3G3B2: + return 2; + case Format.X4R4G4B4: + return 4; + case Format.A2B10G10R10: + return 10; + case Format.A2R10G10B10: + return 10; + default: + return 0; + } + } + + + + + /// + /// Gets the number of alpha channel bits + /// + static public int GetAlphaChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 0; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 0; + case Format.R5G6B5: + return 0; + case Format.X1R5G5B5: + return 0; + case Format.A1R5G5B5: + return 1; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 0; + case Format.A8R3G3B2: + return 8; + case Format.X4R4G4B4: + return 0; + case Format.A2B10G10R10: + return 2; + case Format.A2R10G10B10: + return 2; + default: + return 0; + } + } + + + + + /// + /// Gets the number of depth bits + /// + static public int GetDepthBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 16; + case DepthFormat.D15S1: + return 15; + case DepthFormat.D24X8: + return 24; + case DepthFormat.D24S8: + return 24; + case DepthFormat.D24X4S4: + return 24; + case DepthFormat.D32: + return 32; + default: + return 0; + } + } + + + + + /// + /// Gets the number of stencil bits + /// + static public int GetStencilBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 0; + case DepthFormat.D15S1: + return 1; + case DepthFormat.D24X8: + return 0; + case DepthFormat.D24S8: + return 8; + case DepthFormat.D24X4S4: + return 4; + case DepthFormat.D32: + return 0; + default: + return 0; + } + } + + + + + /// + /// Assembles and creates a file-based vertex shader + /// + public static VertexShader CreateVertexShader(Device device, string filename) { + GraphicsStream code = null; + string path = null; + + // Get the path to the vertex shader file + path = DXUtil.FindMediaFile(null, filename); + + // Assemble the vertex shader file + code = ShaderLoader.FromFile(path, null, 0); + + // Create the vertex shader + return new VertexShader(device, code); + } + +} + + + + +/// +/// An arc ball class +/// +public class GraphicsArcBall { + private int internalWidth; // ArcBall's window width + private int internalHeight; // ArcBall's window height + private float internalradius; // ArcBall's radius in screen coords + private float internalradiusTranslation; // ArcBall's radius for translating the target + + private Quaternion internaldownQuat; // Quaternion before button down + private Quaternion internalnowQuat; // Composite quaternion for current drag + private Matrix internalrotationMatrix; // Matrix for arcball's orientation + private Matrix internalrotationDelta; // Matrix for arcball's orientation + private Matrix internaltranslationMatrix; // Matrix for arcball's position + private Matrix internaltranslationDelta; // Matrix for arcball's position + private bool internaldragging; // Whether user is dragging arcball + private bool internaluseRightHanded; // Whether to use RH coordinate system + private int saveMouseX = 0; // Saved mouse position + private int saveMouseY = 0; + private Vector3 internalvectorDown; // Button down vector + System.Windows.Forms.Control parent; // parent + + + + + /// + /// Constructor + /// + public GraphicsArcBall(System.Windows.Forms.Control p) { + internaldownQuat = Quaternion.Identity; + internalnowQuat = Quaternion.Identity; + internalrotationMatrix = Matrix.Identity; + internalrotationDelta = Matrix.Identity; + internaltranslationMatrix = Matrix.Identity; + internaltranslationDelta = Matrix.Identity; + internaldragging = false; + internalradiusTranslation = 1.0f; + internaluseRightHanded = false; + + parent = p; + // Hook the events + p.MouseDown += new MouseEventHandler(this.OnContainerMouseDown); + p.MouseUp += new MouseEventHandler(this.OnContainerMouseUp); + p.MouseMove += new MouseEventHandler(this.OnContainerMouseMove); + } + + + + + /// + /// Set the window dimensions + /// + public void SetWindow(int width, int height, float radius) { + // Set ArcBall info + internalWidth = width; + internalHeight = height; + internalradius = radius; + } + + + + + /// + /// Screen coords to a vector + /// + private Vector3 ScreenToVector(int xpos, int ypos) { + // Scale to screen + float x = -(xpos - internalWidth/2) / (internalradius*internalWidth/2); + float y = (ypos - internalHeight/2) / (internalradius*internalHeight/2); + + if (internaluseRightHanded) { + x = -x; + y = -y; + } + + float z = 0.0f; + float mag = x*x + y*y; + + if (mag > 1.0f) { + float scale = 1.0f/(float)Math.Sqrt(mag); + x *= scale; + y *= scale; + } + else + z = (float)Math.Sqrt(1.0f - mag); + + // Return vector + return new Vector3(x, y, z); + } + + + + + /// + /// Fired when the containers mouse button is down + /// + private void OnContainerMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { + // Store off the position of the cursor when the button is pressed + saveMouseX = e.X; + saveMouseY = e.Y; + + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // Start drag mode + internaldragging = true; + internalvectorDown = ScreenToVector(e.X, e.Y); + internaldownQuat = internalnowQuat; + } + } + + + + + /// + /// Fired when the containers mouse button has been released + /// + private void OnContainerMouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // End drag mode + internaldragging = false; + } + } + + + + + /// + /// Fired when the containers mouse is moving + /// + private void OnContainerMouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + if (internaldragging) { + // recompute nowQuat + Vector3 vCur = ScreenToVector(e.X, e.Y); + Quaternion qAxisToAxis = GraphicsUtility.D3DXQuaternionAxisToAxis(internalvectorDown, vCur); + internalnowQuat = internaldownQuat; + internalnowQuat = Quaternion.Multiply(internalnowQuat,qAxisToAxis); + internalrotationDelta = Matrix.RotationQuaternion(qAxisToAxis); + } + else + internalrotationDelta = Matrix.Identity; + + internalrotationMatrix = Matrix.RotationQuaternion(internalnowQuat); + internaldragging = true; + } + + if ((e.Button == System.Windows.Forms.MouseButtons.Right) || (e.Button == System.Windows.Forms.MouseButtons.Middle)) { + // Normalize based on size of window and bounding sphere radius + float fDeltaX = (saveMouseX-e.X) * internalradiusTranslation / internalWidth; + float fDeltaY = (saveMouseY-e.Y) * internalradiusTranslation / internalHeight; + + if (e.Button == System.Windows.Forms.MouseButtons.Right) { + internaltranslationDelta = Matrix.Translation(-2 * fDeltaX, 2 * fDeltaY, 0.0f); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + if (e.Button == System.Windows.Forms.MouseButtons.Middle) { + internaltranslationDelta = Matrix.Translation(0.0f, 0.0f, 5 * fDeltaY); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + + // Store mouse coordinate + saveMouseX = e.X; + saveMouseY = e.Y; + } + } + + #region Various properties of the class + public float Radius { + set { + internalradiusTranslation = value; } + } + public bool RightHanded { + get { return internaluseRightHanded; } + set { internaluseRightHanded = value; } + } + public Matrix RotationMatrix { + get { return internalrotationMatrix; } + } + public Matrix RotationDeltaMatrix { + get { return internalrotationDelta; } + } + public Matrix TranslationMatrix { + get { return internaltranslationMatrix; } + } + public Matrix TranslationDeltaMatrix { + get { return internaltranslationDelta; } + } + public bool IsBeingDragged { + get { return internaldragging; } + } + #endregion +} + + + + +/// +/// Handles our meshes +/// +public class GraphicsMesh : IDisposable { + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + + + + + /// + /// Constructor + /// + /// The initial filename + public GraphicsMesh(string filename) { + fileName = filename; + } + public GraphicsMesh() : this ("CD3DFile_Mesh") {} + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + string strPath = null; + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Find the path for the file, and convert it to ANSI (for the D3DX API) + strPath = DXUtil.FindMediaFile(null, filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(strPath, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + } + + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. Note: because we are passing in + // no flags, the default behavior is to clone into local memory. + localMemoryMesh = systemMemoryMesh.Clone(0, systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(Device device, bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render(Device device) { + Render(device, true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/dinput.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/dinput.cs new file mode 100644 index 0000000..f0829a0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/dinput.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + +/// +/// This class is where the DirectInput routines +/// for the application resides. +/// +public class InputClass { + + private Control owner = null; + private Device localDevice = null; + + public InputClass(Control owner) { + this.owner = owner; + + localDevice = new Device(SystemGuid.Keyboard); + localDevice.SetDataFormat(DeviceDataFormat.Keyboard); + localDevice.SetCooperativeLevel(owner, CooperativeLevelFlags.Foreground | CooperativeLevelFlags.NonExclusive); + } + + public KeyboardState GetInputState() { + KeyboardState kbState = null; + + try { + kbState = localDevice.GetCurrentKeyboardState(); + } + catch(InputException) { + do { + Application.DoEvents(); + try{ localDevice.Acquire(); } + catch (InputLostException) { + continue; } + catch(OtherApplicationHasPriorityException) { + continue; } + + break; + + }while( true ); + } + return kbState; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/dplay.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/dplay.cs new file mode 100644 index 0000000..5004530 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/dplay.cs @@ -0,0 +1,165 @@ +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +public struct Players { + public bool Active; + public int dpnID; + public string Name; + public Players(int id, string n, bool active) { + dpnID = id; Name = n; Active = active;} +} + + /// + /// The class that houses DirectPlay code for the application. + /// +public class PlayClass { + #region Fields and Properties + private GameClass game = null; + + private Peer peerObject = null; + + private bool isHost = false; + public bool IsHost { get { return isHost; } } + + private bool inSession = false; + public bool InSession { get { return inSession; } } + + private int localPlayerID = 0; + + + private Players remotePlayer; + public Players RemotePlayer { get {return remotePlayer; } } + + private ConnectWizard Connect = null; + + #endregion + + #region About Application Guids + // This guid allows DirectPlay to find other instances of the same game on + // the network, so it must be unique for every game, and the same for + // every instance of that game. You can use the guidgen.exe program to + // generate a new guid. + #endregion + private Guid AppGuid = new Guid( 0xc134dcd4, 0xff30, 0x4c86, 0x9a, 0x2e, 0xe0, 0x46, 0xa2, 0x21, 0xe3, 0x86 ); + + #region Constructor + + public PlayClass(GameClass Game) { + this.game = Game; + + //Initialize our peer to peer network object + peerObject = new Peer(); + + + // Set up our event handlers (We only need events for the ones we care about) + peerObject.PlayerCreated += new PlayerCreatedEventHandler(PlayerCreated); + peerObject.PlayerDestroyed += new PlayerDestroyedEventHandler(PlayerDestroyed); + peerObject.Receive += new ReceiveEventHandler(game.DataReceived); + peerObject.SessionTerminated += new SessionTerminatedEventHandler(SessionTerminated); + + // use the DirectPlay connection wizard to create our join sessions + Connect = new ConnectWizard(peerObject, AppGuid, "Spacewar3D"); + Connect.StartWizard(); + + inSession = Connect.InSession; + + if (inSession) { + isHost = Connect.IsHost; + } + + } + #endregion //Constructor + + #region Network Message functions + // These routines handle the communication between the game peers. + + + private void PlayerCreated(object sender, PlayerCreatedEventArgs dpMessage) { + // Get the PlayerInformation and store it + int playerID = dpMessage.Message.PlayerID; + PlayerInformation dpPeer = peerObject.GetPeerInformation(playerID); + Players oPlayer = new Players(playerID, dpPeer.Name.ToUpper(), true); + // Save this player id if it's ourselves + if (dpPeer.Local) + localPlayerID = dpMessage.Message.PlayerID; + else { + // We lock the data here since it is shared across multiple threads. + lock (this) { + remotePlayer = oPlayer; + } + game.RemotePlayerJoined(oPlayer.Name); + } + + + } + private void PlayerDestroyed(object sender, PlayerDestroyedEventArgs dpMessage) { + // Remove this player from our list + // We lock the data here since it is shared across multiple threads. + lock (this) { + remotePlayer.Active = false; + } + game.RemotePlayerLeft(remotePlayer.Name); + } + + + public void SendPlayerUpdate(PlayerUpdate update, ShotUpdate shotUpdate) { + if (inSession) { + NetworkPacket packet = new NetworkPacket(); + packet.Write((byte)MessageType.PlayerUpdateID); + packet.Write(update); + + for (int i = 0; i < Constants.NumShots; i++) { + packet.Write(shotUpdate.ShotPosition[i]); + packet.Write(shotUpdate.ShotAge[i]); + packet.Write(shotUpdate.ShotAlive[i]); + } + + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.NoComplete | SendFlags.NoLoopback); + } + } + + public void SendGameState(GameStates gameState) { + if (inSession) { + byte messageType; + switch (gameState) { + case GameStates.Paused: { + messageType = (byte)MessageType.GamePaused; + break; + } + case GameStates.Running: { + messageType = (byte)MessageType.GameRunning; + break; + } + default: { + return; + } + } + NetworkPacket packet = new NetworkPacket(); + packet.Write(messageType); + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.Guaranteed | SendFlags.NoLoopback); + } + } + + public void SendScorePoint() { + if (inSession) { + NetworkPacket packet = new NetworkPacket(); + packet.Write((byte)MessageType.Add1ToScore); + peerObject.SendTo(remotePlayer.dpnID, packet, 0, SendFlags.Guaranteed | SendFlags.NoLoopback); + } + } + + #endregion // Network message functions + + #region Cleanup + private void SessionTerminated(object sender, SessionTerminatedEventArgs stea) { + inSession = false; + isHost = false; + } + + #endregion //Cleanup +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step10/main.cs b/Source Code updated 08-12-05/Spacewar3D/Step10/main.cs new file mode 100644 index 0000000..1ed0210 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step10/main.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Container = System.ComponentModel.Container; + + + /// + /// The main windows form for the application. + /// +public class MainClass { + + private GameClass game = null; + private SplashScreen splash = null; + private bool enableNetwork = false; + public bool EnableNetwork { get { return enableNetwork; } set { enableNetwork = value; } } + + private Size gameFormSize; + public Size GameFormSize { get { return gameFormSize; } set { gameFormSize = value; } } + + private bool fullScreen = false; + public bool FullScreen { get { return fullScreen; } set { fullScreen = value; } } + + /// + // Main entry point of the application. + /// + public static void Main() { + MainClass m = new MainClass(); + } + + public MainClass() { + + //display the splash screen and determine network status + splash = new SplashScreen(this); + splash.ShowDialog(); + + try { + game = new GameClass(fullScreen, gameFormSize, enableNetwork); + } + catch(DirectXException) { + return; + } + if( game.CreateGraphicsSample() ) + game.Run(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/App.config b/Source Code updated 08-12-05/Spacewar3D/Step11/App.config new file mode 100644 index 0000000..5bbb96b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/BGPointer.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/BGPointer.cs new file mode 100644 index 0000000..4a00061 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/BGPointer.cs @@ -0,0 +1,43 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// Summary description for BGPointer. + /// +public class BGPointer +{ + private PositionedMesh arrowMesh; + private Device device; + + + public BGPointer(Device device) + { + this.device = device; + arrowMesh = new PositionedMesh(device,"arrow-yel.x"); + arrowMesh.Position.Scale(2.0f, 2.0f, 2.0f); + } + + public void Render() + { + arrowMesh.Render(); + } + + public void Point(WorldPosition ourPosition, WorldPosition opponentWorldPosition) + { + arrowMesh.Position.Move(ourPosition.Location.X, ourPosition.Location.Y, + ourPosition.Location.Z); + Vector3 pointVector = opponentWorldPosition.Location - ourPosition.Location; + + + float XRot, YRot; + + XRot = (float) Math.Atan2(-pointVector.Y, Math.Sqrt(pointVector.X * pointVector.X + + pointVector.Z * pointVector.Z)); + YRot = (float) Math.Atan2(pointVector.X, pointVector.Z); + + arrowMesh.Position.Rotate(XRot, YRot, 0.0f); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/Camera.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/Camera.cs new file mode 100644 index 0000000..f392b5c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/Camera.cs @@ -0,0 +1,133 @@ +using System; +using Microsoft.DirectX; + + + /// + /// Summary description for Camera. + /// +public class Camera +{ + + protected float velocity; + + + protected float xPos, yPos, zPos; + protected float xRot, yRot, zRot; + + protected float startXPos, startYPos, startZPos; + protected float startXRot, startYRot, startZRot; + + protected float endXPos, endYPos, endZPos; + protected float endXRot, endYRot, endZRot; + + protected Matrix viewMatrix; + protected Matrix translationMatrix; + protected Matrix rotationMatrix; + + public float XPosition { get { return xPos; } } + public float YPosition { get { return yPos; } } + public float ZPosition { get { return zPos; } } + + public float XRotation { get { return xRot; } } + public float YRotation { get { return yRot; } } + public float ZRotation { get { return zRot; } } + + + public Vector3 Loc + { + get + { + return new Vector3(xPos,yPos,zPos); + } + set + { + Vector3 loc = value; + xPos = loc.X; + yPos = loc.Y; + zPos = loc.Z; + } + + } + + public Matrix ViewMatrix + { + get + { + Update(); + return viewMatrix; + } + set + { + viewMatrix = value; + } + + } + + + public Camera() + { + Move(0.0f,0.0f,0.0f); + Rotate(0.0f,0.0f,0.0f); + Update(); + } + + + public void Update() // Update transformation matrix + { + viewMatrix = translationMatrix * rotationMatrix; + } + + public void Move(float XPos, float YPos, float ZPos) + { + xPos = XPos; + yPos = YPos; + zPos = ZPos; + translationMatrix = Matrix.Translation( -xPos, -yPos, -zPos ); + } + + public void MoveRel(float XAdd, float YAdd, float ZAdd) + { + Move (xPos + XAdd, yPos + YAdd, zPos + ZAdd); + + } + + public void Rotate(float XRot, float YRot, float ZRot) + { + Matrix xRotation, yRotation, zRotation; + + xRot = XRot; + yRot = YRot; + zRot = ZRot; + + xRotation = Matrix.RotationX( - xRot ); + yRotation = Matrix.RotationY( - yRot ); + zRotation = Matrix.RotationZ( - zRot ); + + rotationMatrix = zRotation; + rotationMatrix *= yRotation; + rotationMatrix *= xRotation; + + } + + public void RotateRel(float XAdd, float YAdd, float ZAdd) + { + Rotate (xRot + XAdd, yRot + YAdd, zRot + ZAdd); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) + { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/CameraMode.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/CameraMode.cs new file mode 100644 index 0000000..eac1cd6 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/CameraMode.cs @@ -0,0 +1,10 @@ +using System; + + +public enum CameraMode +{ + ChaseMode, + CockpitMode, + Fixed +}; + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/Constants.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/Constants.cs new file mode 100644 index 0000000..b41924e --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/Constants.cs @@ -0,0 +1,41 @@ +using System; +using Microsoft.DirectX.Direct3D; +using Microsoft.DirectX; + + + /// + /// GamePlay constants. You can tune the game by adjusting these values. + /// +sealed public class Constants +{ + static public Random random = new Random((int) DateTime.Now.Ticks); + + public const float EngineThrust = 0.3f; + public const float DyingCycle = 2; + public const float DeadCycleWait = 2; + public const float HyperChargeWait = 3; + public const float HyperCycleWait = 2; + public const float HyperSuccessFactor = 0.8f; // initial success factor + public const float HyperSuccessDegradation = 0.1f; // degradation per use... + public const float ShipCollisionLimit = 15f; + public const float MaxVelocity = 125.0f; + public const float ThrustPower = 1.001f; + + public const int ShotLifetime = 4; + public const int NumShots = 12; + public const float ShotVelocity = 350f; + public const float ShotDeltaTime = 0.10f; + public const int ShotInitialMove = 3; // times to update shot so it shows up outside the ship... + public const int ShotCollisionLimit = 10; + + + public const float StatusMessageDisplayTime = 5.0f; + + + + public const long RemoteTickTimeout = 5; // five seconds... + + private Constants() + { + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/D3DSettingsForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/D3DSettingsForm.cs new file mode 100644 index 0000000..a945458 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/D3DSettingsForm.cs @@ -0,0 +1,1107 @@ +//----------------------------------------------------------------------------- +// File: D3DSettingsForm.cs +// +// Desc: Application form for setting up user defined display settings +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + + + + + +/// +/// A form to allow the user to change the current D3D settings. +/// +public class D3DSettingsForm : System.Windows.Forms.Form +{ + private D3DEnumeration enumeration; + public D3DSettings settings; // Potential new D3D settings + + private System.Windows.Forms.GroupBox adapterDeviceGroupBox; + private System.Windows.Forms.Label displayAdapterLabel; + private System.Windows.Forms.ComboBox adapterComboBox; + private System.Windows.Forms.Label deviceLabel; + private System.Windows.Forms.ComboBox deviceComboBox; + private System.Windows.Forms.GroupBox modeSettingsGroupBox; + private System.Windows.Forms.RadioButton windowedRadioButton; + private System.Windows.Forms.RadioButton fullscreenRadioButton; + private System.Windows.Forms.Label adapterFormatLabel; + private System.Windows.Forms.ComboBox adapterFormatComboBox; + private System.Windows.Forms.Label resolutionLabel; + private System.Windows.Forms.ComboBox resolutionComboBox; + private System.Windows.Forms.Label refreshRateLabel; + private System.Windows.Forms.ComboBox refreshRateComboBox; + private System.Windows.Forms.GroupBox otherSettingsGroupBox; + private System.Windows.Forms.Label backBufferFormatLabel; + private System.Windows.Forms.ComboBox backBufferFormatComboBox; + private System.Windows.Forms.Label depthStencilBufferLabel; + private System.Windows.Forms.ComboBox depthStencilBufferComboBox; + private System.Windows.Forms.Label multisampleLabel; + private System.Windows.Forms.ComboBox multisampleComboBox; + private System.Windows.Forms.Label vertexProcLabel; + private System.Windows.Forms.ComboBox vertexProcComboBox; + private System.Windows.Forms.Label presentIntervalLabel; + private System.Windows.Forms.ComboBox presentIntervalComboBox; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.ComboBox multisampleQualityComboBox; + private System.Windows.Forms.Label multisampleQualityLabel; + + + + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + + /// + /// Constructor. Pass in an enumeration and the current D3D settings. + /// + public D3DSettingsForm(D3DEnumeration enumerationParam, D3DSettings settingsParam) + { + enumeration = enumerationParam; + settings = settingsParam.Clone(); + + // Required for Windows Form Designer support + InitializeComponent(); + + // Fill adapter combo box. Updating the selected adapter will trigger + // updates of the rest of the dialog. + foreach (GraphicsAdapterInfo adapterInfo in enumeration.AdapterInfoList) + { + adapterComboBox.Items.Add(adapterInfo); + if (adapterInfo.AdapterOrdinal == settings.AdapterOrdinal) + adapterComboBox.SelectedItem = adapterInfo; + } + if (adapterComboBox.SelectedItem == null && adapterComboBox.Items.Count > 0) + adapterComboBox.SelectedIndex = 0; + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) + { + base.Dispose(Disposing); + if (components != null) + components.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.adapterDeviceGroupBox = new System.Windows.Forms.GroupBox(); + this.deviceComboBox = new System.Windows.Forms.ComboBox(); + this.deviceLabel = new System.Windows.Forms.Label(); + this.adapterComboBox = new System.Windows.Forms.ComboBox(); + this.displayAdapterLabel = new System.Windows.Forms.Label(); + this.fullscreenRadioButton = new System.Windows.Forms.RadioButton(); + this.cancelButton = new System.Windows.Forms.Button(); + this.otherSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.multisampleQualityComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleQualityLabel = new System.Windows.Forms.Label(); + this.multisampleComboBox = new System.Windows.Forms.ComboBox(); + this.backBufferFormatComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferLabel = new System.Windows.Forms.Label(); + this.backBufferFormatLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcLabel = new System.Windows.Forms.Label(); + this.presentIntervalComboBox = new System.Windows.Forms.ComboBox(); + this.presentIntervalLabel = new System.Windows.Forms.Label(); + this.resolutionComboBox = new System.Windows.Forms.ComboBox(); + this.windowedRadioButton = new System.Windows.Forms.RadioButton(); + this.resolutionLabel = new System.Windows.Forms.Label(); + this.refreshRateComboBox = new System.Windows.Forms.ComboBox(); + this.adapterFormatLabel = new System.Windows.Forms.Label(); + this.refreshRateLabel = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.modeSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.adapterFormatComboBox = new System.Windows.Forms.ComboBox(); + this.adapterDeviceGroupBox.SuspendLayout(); + this.otherSettingsGroupBox.SuspendLayout(); + this.modeSettingsGroupBox.SuspendLayout(); + this.SuspendLayout(); + // + // adapterDeviceGroupBox + // + this.adapterDeviceGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.deviceComboBox, + this.deviceLabel, + this.adapterComboBox, + this.displayAdapterLabel}); + this.adapterDeviceGroupBox.Location = new System.Drawing.Point(16, 8); + this.adapterDeviceGroupBox.Name = "adapterDeviceGroupBox"; + this.adapterDeviceGroupBox.Size = new System.Drawing.Size(400, 80); + this.adapterDeviceGroupBox.TabIndex = 0; + this.adapterDeviceGroupBox.TabStop = false; + this.adapterDeviceGroupBox.Text = "Adapter and device"; + // + // deviceComboBox + // + this.deviceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.deviceComboBox.DropDownWidth = 121; + this.deviceComboBox.Location = new System.Drawing.Point(160, 48); + this.deviceComboBox.Name = "deviceComboBox"; + this.deviceComboBox.Size = new System.Drawing.Size(232, 21); + this.deviceComboBox.TabIndex = 3; + this.deviceComboBox.SelectedIndexChanged += new System.EventHandler(this.DeviceChanged); + // + // deviceLabel + // + this.deviceLabel.Location = new System.Drawing.Point(8, 48); + this.deviceLabel.Name = "deviceLabel"; + this.deviceLabel.Size = new System.Drawing.Size(152, 23); + this.deviceLabel.TabIndex = 2; + this.deviceLabel.Text = "Render &Device:"; + // + // adapterComboBox + // + this.adapterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterComboBox.DropDownWidth = 121; + this.adapterComboBox.Location = new System.Drawing.Point(160, 24); + this.adapterComboBox.Name = "adapterComboBox"; + this.adapterComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterComboBox.TabIndex = 1; + this.adapterComboBox.SelectedIndexChanged += new System.EventHandler(this.AdapterChanged); + // + // displayAdapterLabel + // + this.displayAdapterLabel.Location = new System.Drawing.Point(8, 24); + this.displayAdapterLabel.Name = "displayAdapterLabel"; + this.displayAdapterLabel.Size = new System.Drawing.Size(152, 23); + this.displayAdapterLabel.TabIndex = 0; + this.displayAdapterLabel.Text = "Display &Adapter:"; + // + // fullscreenRadioButton + // + this.fullscreenRadioButton.Location = new System.Drawing.Point(9, 38); + this.fullscreenRadioButton.Name = "fullscreenRadioButton"; + this.fullscreenRadioButton.Size = new System.Drawing.Size(152, 24); + this.fullscreenRadioButton.TabIndex = 1; + this.fullscreenRadioButton.Text = "&Fullscreen"; + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(248, 464); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.TabIndex = 4; + this.cancelButton.Text = "Cancel"; + // + // otherSettingsGroupBox + // + this.otherSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.multisampleQualityComboBox, + this.multisampleQualityLabel, + this.multisampleComboBox, + this.backBufferFormatComboBox, + this.multisampleLabel, + this.depthStencilBufferLabel, + this.backBufferFormatLabel, + this.depthStencilBufferComboBox, + this.vertexProcComboBox, + this.vertexProcLabel, + this.presentIntervalComboBox, + this.presentIntervalLabel}); + this.otherSettingsGroupBox.Location = new System.Drawing.Point(16, 264); + this.otherSettingsGroupBox.Name = "otherSettingsGroupBox"; + this.otherSettingsGroupBox.Size = new System.Drawing.Size(400, 176); + this.otherSettingsGroupBox.TabIndex = 2; + this.otherSettingsGroupBox.TabStop = false; + this.otherSettingsGroupBox.Text = "Device settings"; + // + // multisampleQualityComboBox + // + this.multisampleQualityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleQualityComboBox.DropDownWidth = 144; + this.multisampleQualityComboBox.Location = new System.Drawing.Point(160, 96); + this.multisampleQualityComboBox.Name = "multisampleQualityComboBox"; + this.multisampleQualityComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleQualityComboBox.TabIndex = 7; + this.multisampleQualityComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleQualityChanged); + // + // multisampleQualityLabel + // + this.multisampleQualityLabel.Location = new System.Drawing.Point(8, 96); + this.multisampleQualityLabel.Name = "multisampleQualityLabel"; + this.multisampleQualityLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleQualityLabel.TabIndex = 6; + this.multisampleQualityLabel.Text = "Multisample &Quality:"; + // + // multisampleComboBox + // + this.multisampleComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleComboBox.DropDownWidth = 144; + this.multisampleComboBox.Location = new System.Drawing.Point(160, 72); + this.multisampleComboBox.Name = "multisampleComboBox"; + this.multisampleComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleComboBox.TabIndex = 5; + this.multisampleComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleTypeChanged); + // + // backBufferFormatComboBox + // + this.backBufferFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.backBufferFormatComboBox.DropDownWidth = 144; + this.backBufferFormatComboBox.Location = new System.Drawing.Point(160, 24); + this.backBufferFormatComboBox.Name = "backBufferFormatComboBox"; + this.backBufferFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.backBufferFormatComboBox.TabIndex = 1; + this.backBufferFormatComboBox.SelectedIndexChanged += new System.EventHandler(this.BackBufferFormatChanged); + // + // multisampleLabel + // + this.multisampleLabel.Location = new System.Drawing.Point(8, 72); + this.multisampleLabel.Name = "multisampleLabel"; + this.multisampleLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleLabel.TabIndex = 4; + this.multisampleLabel.Text = "&Multisample Type:"; + // + // depthStencilBufferLabel + // + this.depthStencilBufferLabel.Location = new System.Drawing.Point(8, 48); + this.depthStencilBufferLabel.Name = "depthStencilBufferLabel"; + this.depthStencilBufferLabel.Size = new System.Drawing.Size(152, 23); + this.depthStencilBufferLabel.TabIndex = 2; + this.depthStencilBufferLabel.Text = "De&pth/Stencil Buffer Format:"; + // + // backBufferFormatLabel + // + this.backBufferFormatLabel.Location = new System.Drawing.Point(8, 24); + this.backBufferFormatLabel.Name = "backBufferFormatLabel"; + this.backBufferFormatLabel.Size = new System.Drawing.Size(152, 23); + this.backBufferFormatLabel.TabIndex = 0; + this.backBufferFormatLabel.Text = "&Back Buffer Format:"; + // + // depthStencilBufferComboBox + // + this.depthStencilBufferComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.depthStencilBufferComboBox.DropDownWidth = 144; + this.depthStencilBufferComboBox.Location = new System.Drawing.Point(160, 48); + this.depthStencilBufferComboBox.Name = "depthStencilBufferComboBox"; + this.depthStencilBufferComboBox.Size = new System.Drawing.Size(232, 21); + this.depthStencilBufferComboBox.TabIndex = 3; + this.depthStencilBufferComboBox.SelectedIndexChanged += new System.EventHandler(this.DepthStencilBufferFormatChanged); + // + // vertexProcComboBox + // + this.vertexProcComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.vertexProcComboBox.DropDownWidth = 121; + this.vertexProcComboBox.Location = new System.Drawing.Point(160, 120); + this.vertexProcComboBox.Name = "vertexProcComboBox"; + this.vertexProcComboBox.Size = new System.Drawing.Size(232, 21); + this.vertexProcComboBox.TabIndex = 9; + this.vertexProcComboBox.SelectedIndexChanged += new System.EventHandler(this.VertexProcessingChanged); + // + // vertexProcLabel + // + this.vertexProcLabel.Location = new System.Drawing.Point(8, 120); + this.vertexProcLabel.Name = "vertexProcLabel"; + this.vertexProcLabel.Size = new System.Drawing.Size(152, 23); + this.vertexProcLabel.TabIndex = 8; + this.vertexProcLabel.Text = "&Vertex Processing:"; + // + // presentIntervalComboBox + // + this.presentIntervalComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.presentIntervalComboBox.DropDownWidth = 121; + this.presentIntervalComboBox.Location = new System.Drawing.Point(160, 144); + this.presentIntervalComboBox.Name = "presentIntervalComboBox"; + this.presentIntervalComboBox.Size = new System.Drawing.Size(232, 21); + this.presentIntervalComboBox.TabIndex = 11; + this.presentIntervalComboBox.SelectedValueChanged += new System.EventHandler(this.PresentIntervalChanged); + // + // presentIntervalLabel + // + this.presentIntervalLabel.Location = new System.Drawing.Point(8, 144); + this.presentIntervalLabel.Name = "presentIntervalLabel"; + this.presentIntervalLabel.Size = new System.Drawing.Size(152, 23); + this.presentIntervalLabel.TabIndex = 10; + this.presentIntervalLabel.Text = "Present &Interval:"; + // + // resolutionComboBox + // + this.resolutionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.resolutionComboBox.DropDownWidth = 144; + this.resolutionComboBox.Location = new System.Drawing.Point(161, 94); + this.resolutionComboBox.MaxDropDownItems = 14; + this.resolutionComboBox.Name = "resolutionComboBox"; + this.resolutionComboBox.Size = new System.Drawing.Size(232, 21); + this.resolutionComboBox.TabIndex = 5; + this.resolutionComboBox.SelectedIndexChanged += new System.EventHandler(this.ResolutionChanged); + // + // windowedRadioButton + // + this.windowedRadioButton.Location = new System.Drawing.Point(9, 14); + this.windowedRadioButton.Name = "windowedRadioButton"; + this.windowedRadioButton.Size = new System.Drawing.Size(152, 24); + this.windowedRadioButton.TabIndex = 0; + this.windowedRadioButton.Text = "&Windowed"; + this.windowedRadioButton.CheckedChanged += new System.EventHandler(this.WindowedFullscreenChanged); + // + // resolutionLabel + // + this.resolutionLabel.Location = new System.Drawing.Point(8, 94); + this.resolutionLabel.Name = "resolutionLabel"; + this.resolutionLabel.Size = new System.Drawing.Size(152, 23); + this.resolutionLabel.TabIndex = 4; + this.resolutionLabel.Text = "&Resolution:"; + // + // refreshRateComboBox + // + this.refreshRateComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.refreshRateComboBox.DropDownWidth = 144; + this.refreshRateComboBox.Location = new System.Drawing.Point(161, 118); + this.refreshRateComboBox.MaxDropDownItems = 14; + this.refreshRateComboBox.Name = "refreshRateComboBox"; + this.refreshRateComboBox.Size = new System.Drawing.Size(232, 21); + this.refreshRateComboBox.TabIndex = 7; + this.refreshRateComboBox.SelectedIndexChanged += new System.EventHandler(this.RefreshRateChanged); + // + // adapterFormatLabel + // + this.adapterFormatLabel.Location = new System.Drawing.Point(8, 72); + this.adapterFormatLabel.Name = "adapterFormatLabel"; + this.adapterFormatLabel.Size = new System.Drawing.Size(152, 23); + this.adapterFormatLabel.TabIndex = 2; + this.adapterFormatLabel.Text = "Adapter F&ormat:"; + // + // refreshRateLabel + // + this.refreshRateLabel.Location = new System.Drawing.Point(8, 118); + this.refreshRateLabel.Name = "refreshRateLabel"; + this.refreshRateLabel.Size = new System.Drawing.Size(152, 23); + this.refreshRateLabel.TabIndex = 6; + this.refreshRateLabel.Text = "R&efresh Rate:"; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(112, 464); + this.okButton.Name = "okButton"; + this.okButton.TabIndex = 3; + this.okButton.Text = "OK"; + // + // modeSettingsGroupBox + // + this.modeSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.adapterFormatLabel, + this.refreshRateLabel, + this.resolutionComboBox, + this.adapterFormatComboBox, + this.resolutionLabel, + this.refreshRateComboBox, + this.windowedRadioButton, + this.fullscreenRadioButton}); + this.modeSettingsGroupBox.Location = new System.Drawing.Point(16, 96); + this.modeSettingsGroupBox.Name = "modeSettingsGroupBox"; + this.modeSettingsGroupBox.Size = new System.Drawing.Size(400, 160); + this.modeSettingsGroupBox.TabIndex = 1; + this.modeSettingsGroupBox.TabStop = false; + this.modeSettingsGroupBox.Text = "Display mode settings"; + // + // adapterFormatComboBox + // + this.adapterFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterFormatComboBox.DropDownWidth = 121; + this.adapterFormatComboBox.Location = new System.Drawing.Point(161, 70); + this.adapterFormatComboBox.MaxDropDownItems = 14; + this.adapterFormatComboBox.Name = "adapterFormatComboBox"; + this.adapterFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterFormatComboBox.TabIndex = 3; + this.adapterFormatComboBox.SelectedValueChanged += new System.EventHandler(this.AdapterFormatChanged); + // + // D3DSettingsForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(438, 512); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.cancelButton, + this.okButton, + this.adapterDeviceGroupBox, + this.modeSettingsGroupBox, + this.otherSettingsGroupBox}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.Name = "D3DSettingsForm"; + this.Text = "Direct3D Settings"; + this.adapterDeviceGroupBox.ResumeLayout(false); + this.otherSettingsGroupBox.ResumeLayout(false); + this.modeSettingsGroupBox.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// Respond to a change of selected adapter by rebuilding the device + /// list. Updating the selected device will trigger updates of the + /// rest of the dialog. + /// + private void AdapterChanged(object sender, System.EventArgs e) + { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + settings.AdapterInfo = adapterInfo; + + // Update device combo box + deviceComboBox.Items.Clear(); + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) + { + deviceComboBox.Items.Add(deviceInfo); + if (deviceInfo.DevType == settings.DevType) + deviceComboBox.SelectedItem = deviceInfo; + } + if (deviceComboBox.SelectedItem == null && deviceComboBox.Items.Count > 0) + deviceComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected device by resetting the + /// fullscreen/windowed radio buttons. Updating these buttons + /// will trigger updates of the rest of the dialog. + /// + private void DeviceChanged(object sender, System.EventArgs e) + { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + settings.DeviceInfo = deviceInfo; + + // Update fullscreen/windowed radio buttons + bool HasWindowedDeviceCombo = false; + bool HasFullscreenDeviceCombo = false; + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) + { + if (deviceCombo.IsWindowed) + HasWindowedDeviceCombo = true; + else + HasFullscreenDeviceCombo = true; + } + windowedRadioButton.Enabled = HasWindowedDeviceCombo; + fullscreenRadioButton.Enabled = HasFullscreenDeviceCombo; + if (settings.IsWindowed && HasWindowedDeviceCombo) + { + windowedRadioButton.Checked = true; + } + else + { + fullscreenRadioButton.Checked = true; + } + WindowedFullscreenChanged(null, null); + } + + + + + /// + /// Respond to a change of windowed/fullscreen state by rebuilding the + /// adapter format list, resolution list, and refresh rate list. + /// Updating the selected adapter format will trigger updates of the + /// rest of the dialog. + /// + private void WindowedFullscreenChanged(object sender, System.EventArgs e) + { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + if (windowedRadioButton.Checked) + { + settings.IsWindowed = true; + settings.WindowedAdapterInfo = adapterInfo; + settings.WindowedDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + adapterFormatComboBox.Items.Add(settings.WindowedDisplayMode.Format); + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = false; + + // Update resolution combo box + resolutionComboBox.Items.Clear(); + resolutionComboBox.Items.Add(FormatResolution(settings.WindowedDisplayMode.Width, + settings.WindowedDisplayMode.Height)); + resolutionComboBox.SelectedIndex = 0; + resolutionComboBox.Enabled = false; + + // Update refresh rate combo box + refreshRateComboBox.Items.Clear(); + refreshRateComboBox.Items.Add(FormatRefreshRate(settings.WindowedDisplayMode.RefreshRate)); + refreshRateComboBox.SelectedIndex = 0; + refreshRateComboBox.Enabled = false; + } + else + { + settings.IsWindowed = false; + settings.FullscreenAdapterInfo = adapterInfo; + settings.FullscreenDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) + { + if (deviceCombo.IsWindowed) + continue; + if (!adapterFormatComboBox.Items.Contains(deviceCombo.AdapterFormat)) + { + adapterFormatComboBox.Items.Add(deviceCombo.AdapterFormat); + if (deviceCombo.AdapterFormat == (settings.IsWindowed ? + settings.WindowedDisplayMode.Format : settings.FullscreenDisplayMode.Format)) + { + adapterFormatComboBox.SelectedItem = deviceCombo.AdapterFormat; + } + } + } + if (adapterFormatComboBox.SelectedItem == null && adapterFormatComboBox.Items.Count > 0) + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = true; + + // Update resolution combo box + resolutionComboBox.Enabled = true; + + // Update refresh rate combo box + refreshRateComboBox.Enabled = true; + } + } + + + + + /// + /// Converts the given width and height into a formatted string + /// + private string FormatResolution(int width, int height) + { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} by {1}", width, height); + return sb.ToString(); + } + + + + + /// + /// Converts the given refresh rate into a formatted string + /// + private string FormatRefreshRate(int refreshRate) + { + if (refreshRate == 0) + { + return "Default Rate"; + } + else + { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} Hz", refreshRate); + return sb.ToString(); + } + } + + + + + /// + /// Respond to a change of selected adapter format by rebuilding the + /// resolution list and back buffer format list. Updating the selected + /// resolution and back buffer format will trigger updates of the rest + /// of the dialog. + /// + private void AdapterFormatChanged(object sender, System.EventArgs e) + { + if (!windowedRadioButton.Checked) + { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + settings.FullscreenDisplayMode.Format = adapterFormat; + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + + resolutionComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) + { + if (displayMode.Format == adapterFormat) + { + string resolutionString = FormatResolution(displayMode.Width, displayMode.Height); + if (!resolutionComboBox.Items.Contains(resolutionString)) + { + resolutionComboBox.Items.Add(resolutionString); + if (settings.FullscreenDisplayMode.Width == displayMode.Width && + settings.FullscreenDisplayMode.Height == displayMode.Height) + { + resolutionComboBox.SelectedItem = resolutionString; + } + } + } + } + if (resolutionComboBox.SelectedItem == null && resolutionComboBox.Items.Count > 0) + resolutionComboBox.SelectedIndex = 0; + } + + // Update backbuffer format combo box + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + backBufferFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) + { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == settings.DisplayMode.Format) + { + if (!backBufferFormatComboBox.Items.Contains(deviceCombo.BackBufferFormat)) + { + backBufferFormatComboBox.Items.Add(deviceCombo.BackBufferFormat); + if (deviceCombo.BackBufferFormat == settings.BackBufferFormat) + backBufferFormatComboBox.SelectedItem = deviceCombo.BackBufferFormat; + } + } + } + if (backBufferFormatComboBox.SelectedItem == null && backBufferFormatComboBox.Items.Count > 0) + backBufferFormatComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected resolution by rebuilding the + /// refresh rate list. + /// + private void ResolutionChanged(object sender, System.EventArgs e) + { + if (settings.IsWindowed) + return; + + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + + // Update settings with new resolution + string resolution = (string)resolutionComboBox.SelectedItem; + string[] resolutionSplitStringArray = resolution.Split(); + int width = int.Parse(resolutionSplitStringArray[0]); + int height = int.Parse(resolutionSplitStringArray[2]); + settings.FullscreenDisplayMode.Width = width; + settings.FullscreenDisplayMode.Height = height; + + // Update refresh rate list based on new resolution + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + refreshRateComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) + { + if (displayMode.Format == adapterFormat && + displayMode.Width == width && + displayMode.Height == height) + { + string refreshRateString = FormatRefreshRate(displayMode.RefreshRate); + if (!refreshRateComboBox.Items.Contains(refreshRateString)) + { + refreshRateComboBox.Items.Add(refreshRateString); + if (settings.FullscreenDisplayMode.RefreshRate == displayMode.RefreshRate) + refreshRateComboBox.SelectedItem = refreshRateString; + } + } + } + if (refreshRateComboBox.SelectedItem == null && refreshRateComboBox.Items.Count > 0) + refreshRateComboBox.SelectedIndex = refreshRateComboBox.Items.Count - 1; + } + + + + + /// + /// Respond to a change of selected refresh rate. + /// + private void RefreshRateChanged(object sender, System.EventArgs e) + { + if (settings.IsWindowed) + return; + + // Update settings with new refresh rate + string refreshRateString = (string)refreshRateComboBox.SelectedItem; + int refreshRate = 0; + if (refreshRateString != "Default Rate") + { + string[] refreshRateSplitStringArray = refreshRateString.Split(); + refreshRate = int.Parse(refreshRateSplitStringArray[0]); + } + settings.FullscreenDisplayMode.RefreshRate = refreshRate; + } + + + + + /// + /// Respond to a change of selected back buffer format by rebuilding + /// the depth/stencil format list, multisample type list, and vertex + /// processing type list. + /// + private void BackBufferFormatChanged(object sender, System.EventArgs e) + { + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + Format backBufferFormat = (Format)backBufferFormatComboBox.SelectedItem; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) + { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == adapterFormat && + deviceCombo.BackBufferFormat == backBufferFormat) + { + deviceCombo.BackBufferFormat = backBufferFormat; + settings.DeviceCombo = deviceCombo; + + depthStencilBufferComboBox.Items.Clear(); + if (enumeration.AppUsesDepthBuffer) + { + foreach (DepthFormat format in deviceCombo.DepthStencilFormatList) + { + depthStencilBufferComboBox.Items.Add(format); + if (format == settings.DepthStencilBufferFormat) + depthStencilBufferComboBox.SelectedItem = format; + } + if (depthStencilBufferComboBox.SelectedItem == null && depthStencilBufferComboBox.Items.Count > 0) + depthStencilBufferComboBox.SelectedIndex = 0; + } + else + { + depthStencilBufferComboBox.Enabled = false; + depthStencilBufferComboBox.Items.Add("(not used)"); + depthStencilBufferComboBox.SelectedIndex = 0; + } + + vertexProcComboBox.Items.Clear(); + foreach (VertexProcessingType vpt in deviceCombo.VertexProcessingTypeList) + { + vertexProcComboBox.Items.Add(vpt); + if (vpt == settings.VertexProcessingType) + vertexProcComboBox.SelectedItem = vpt; + } + if (vertexProcComboBox.SelectedItem == null && vertexProcComboBox.Items.Count > 0) + vertexProcComboBox.SelectedIndex = 0; + + presentIntervalComboBox.Items.Clear(); + foreach (PresentInterval pi in deviceCombo.PresentIntervalList) + { + presentIntervalComboBox.Items.Add(pi); + if (pi == settings.PresentInterval) + presentIntervalComboBox.SelectedItem = pi; + } + if (presentIntervalComboBox.SelectedItem == null && presentIntervalComboBox.Items.Count > 0) + presentIntervalComboBox.SelectedIndex = 0; + + break; + } + } + } + + + + + /// + /// Respond to a change of selected depth/stencil buffer format. + /// + private void DepthStencilBufferFormatChanged(object sender, System.EventArgs e) + { + if (enumeration.AppUsesDepthBuffer) + settings.DepthStencilBufferFormat = (DepthFormat)depthStencilBufferComboBox.SelectedItem; + + multisampleComboBox.Items.Clear(); + foreach (MultiSampleType msType in settings.DeviceCombo.MultiSampleTypeList) + { + // Check for DS/MS conflict + bool conflictFound = false; + foreach (DepthStencilMultiSampleConflict DSMSConflict in settings.DeviceCombo.DepthStencilMultiSampleConflictList) + { + if (DSMSConflict.DepthStencilFormat == settings.DepthStencilBufferFormat && + DSMSConflict.MultiSampleType == msType) + { + conflictFound = true; + break; + } + } + if (!conflictFound) + { + multisampleComboBox.Items.Add(msType); + if (msType == settings.MultisampleType) + multisampleComboBox.SelectedItem = msType; + } + } + if (multisampleComboBox.SelectedItem == null && multisampleComboBox.Items.Count > 0) + multisampleComboBox.SelectedIndex = 0; + + } + + + + + /// + /// Respond to a change of selected multisample type. + /// + private void MultisampleTypeChanged(object sender, System.EventArgs e) + { + settings.MultisampleType = (MultiSampleType)multisampleComboBox.SelectedItem; + + // Find current max multisample quality + int maxQuality = 0; + DeviceCombo deviceCombo = settings.DeviceCombo; + for (int i = 0; i < deviceCombo.MultiSampleQualityList.Count; i++) + { + if ((MultiSampleType)deviceCombo.MultiSampleTypeList[i] == settings.MultisampleType) + { + maxQuality = (int)deviceCombo.MultiSampleQualityList[i]; + break; + } + } + + // Update multisample quality list based on new type + multisampleQualityComboBox.Items.Clear(); + for (int iLevel = 0; iLevel < maxQuality; iLevel++) + { + multisampleQualityComboBox.Items.Add(iLevel); + if (settings.MultisampleQuality == iLevel) + multisampleQualityComboBox.SelectedItem = iLevel; + } + if (multisampleQualityComboBox.SelectedItem == null && multisampleQualityComboBox.Items.Count > 0) + multisampleQualityComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected multisample quality. + /// + private void MultisampleQualityChanged(object sender, System.EventArgs e) + { + settings.MultisampleQuality = (int)multisampleQualityComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void VertexProcessingChanged(object sender, System.EventArgs e) + { + settings.VertexProcessingType = (VertexProcessingType)vertexProcComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void PresentIntervalChanged(object sender, System.EventArgs e) + { + settings.PresentInterval = (PresentInterval)presentIntervalComboBox.SelectedItem; + } +} + + +/// +/// Current D3D settings: adapter, device, mode, formats, etc. +/// +public class D3DSettings +{ + public bool IsWindowed; + + public GraphicsAdapterInfo WindowedAdapterInfo; + public GraphicsDeviceInfo WindowedDeviceInfo; + public DeviceCombo WindowedDeviceCombo; + public DisplayMode WindowedDisplayMode; // not changable by the user + public DepthFormat WindowedDepthStencilBufferFormat; + public MultiSampleType WindowedMultisampleType; + public int WindowedMultisampleQuality; + public VertexProcessingType WindowedVertexProcessingType; + public PresentInterval WindowedPresentInterval; + public int WindowedWidth; + public int WindowedHeight; + + public GraphicsAdapterInfo FullscreenAdapterInfo; + public GraphicsDeviceInfo FullscreenDeviceInfo; + public DeviceCombo FullscreenDeviceCombo; + public DisplayMode FullscreenDisplayMode; // changable by the user + public DepthFormat FullscreenDepthStencilBufferFormat; + public MultiSampleType FullscreenMultisampleType; + public int FullscreenMultisampleQuality; + public VertexProcessingType FullscreenVertexProcessingType; + public PresentInterval FullscreenPresentInterval; + + + + + /// + /// The adapter information + /// + public GraphicsAdapterInfo AdapterInfo + { + get { return IsWindowed ? WindowedAdapterInfo : FullscreenAdapterInfo; } + set { if (IsWindowed) WindowedAdapterInfo = value; else FullscreenAdapterInfo = value; } + } + + + + + /// + /// The device information + /// + public GraphicsDeviceInfo DeviceInfo + { + get { return IsWindowed ? WindowedDeviceInfo : FullscreenDeviceInfo; } + set { if (IsWindowed) WindowedDeviceInfo = value; else FullscreenDeviceInfo = value; } + } + + + + + /// + /// The device combo + /// + public DeviceCombo DeviceCombo + { + get { return IsWindowed ? WindowedDeviceCombo : FullscreenDeviceCombo; } + set { if (IsWindowed) WindowedDeviceCombo = value; else FullscreenDeviceCombo = value; } + } + + + + + /// + /// The adapters ordinal + /// + public int AdapterOrdinal + { + get { return DeviceCombo.AdapterOrdinal; } + } + + + + + /// + /// The type of device this is + /// + public DeviceType DevType + { + get { return DeviceCombo.DevType; } + } + + + + + /// + /// The back buffers format + /// + public Format BackBufferFormat + { + get { return DeviceCombo.BackBufferFormat; } + } + + + + + /// + /// The display mode + /// + public DisplayMode DisplayMode + { + get { return IsWindowed ? WindowedDisplayMode : FullscreenDisplayMode; } + set { if (IsWindowed) WindowedDisplayMode = value; else FullscreenDisplayMode = value; } + } + + + + + /// + /// The Depth stencils format + /// + public DepthFormat DepthStencilBufferFormat + { + get { return IsWindowed ? WindowedDepthStencilBufferFormat : FullscreenDepthStencilBufferFormat; } + set { if (IsWindowed) WindowedDepthStencilBufferFormat = value; else FullscreenDepthStencilBufferFormat = value; } + } + + + + + /// + /// The multisample type + /// + public MultiSampleType MultisampleType + { + get { return IsWindowed ? WindowedMultisampleType : FullscreenMultisampleType; } + set { if (IsWindowed) WindowedMultisampleType = value; else FullscreenMultisampleType = value; } + } + + + + + /// + /// The multisample quality + /// + public int MultisampleQuality + { + get { return IsWindowed ? WindowedMultisampleQuality : FullscreenMultisampleQuality; } + set { if (IsWindowed) WindowedMultisampleQuality = value; else FullscreenMultisampleQuality = value; } + } + + + + + /// + /// The vertex processing type + /// + public VertexProcessingType VertexProcessingType + { + get { return IsWindowed ? WindowedVertexProcessingType : FullscreenVertexProcessingType; } + set { if (IsWindowed) WindowedVertexProcessingType = value; else FullscreenVertexProcessingType = value; } + } + + + + + /// + /// The presentation interval + /// + public PresentInterval PresentInterval + { + get { return IsWindowed ? WindowedPresentInterval : FullscreenPresentInterval; } + set { if (IsWindowed) WindowedPresentInterval = value; else FullscreenPresentInterval = value; } + } + + + + + /// + /// Clone the d3d settings class + /// + public D3DSettings Clone() + { + return (D3DSettings)MemberwiseClone(); + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/D3DSettingsForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step11/D3DSettingsForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/D3DSettingsForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect.cs new file mode 100644 index 0000000..48df962 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect.cs @@ -0,0 +1,272 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; +using System.Runtime.InteropServices; + + + + +/// +/// The connection wizard will allow our users to pick a service provider, +/// and then connect to an existing application, or create a new one as the host. +/// +public class ConnectWizard +{ + private Peer peerObject; + private Address deviceAddress; + + private ChooseServiceProviderForm serviceProviderForm; + private CreateJoinForm createJoinForm; + + private Guid serviceProviderGuid; + private string username; + private string samplename; + private bool isInSession = false; + private bool isHost = false; + private int port = 0; + + private Guid applicationGuid; + + + + + /// + /// Constructor + /// + /// + /// + /// + public ConnectWizard(Peer peer, Guid application, string sampleName) + { + peerObject = peer; + applicationGuid = application; + samplename = sampleName; + } + + + + + /// + /// The guid for the current service provider + /// + public Guid ServiceProvider + { + get + { return serviceProviderGuid; } + set + { serviceProviderGuid = value; } + } + + + + + /// + /// The game's default port number + /// + public int DefaultPort + { + get + { return port; } + set + { port = value; } + } + + + + + /// + /// Am I the host + /// + public bool IsHost + { + get + { return isHost; } + set + { isHost = value; } + } + + + + + /// + /// The username + /// + public string Username + { + get + { return username; } + set + { username = value; } + } + + + + + /// + /// The sample name + /// + public string SampleName + { + get + { return samplename; } + } + + + + + /// + /// The applications guid + /// + public Guid ApplicationGuid + { + get + { return applicationGuid; } + } + + + + + /// + /// Are we in a session + /// + public bool InSession + { + get { return isInSession; } + set { isInSession = value; } + } + + + + + /// + /// Returns true if the given provider requires a port component + /// + /// ServiceProvider Guid + /// + static public bool ProviderRequiresPort(Guid provider) + { + return (provider != Address.ServiceProviderSerial && + provider != Address.ServiceProviderModem && + provider != Address.ServiceProviderBlueTooth); + } + + + + + /// + /// Handler for when our form is disposed + /// + public void FormDisposed(object sender, EventArgs e) + { + if (sender == createJoinForm) + createJoinForm = null; + + if (sender == serviceProviderForm) + serviceProviderForm = null; + } + + + + + /// + /// Set the user information + /// + public void SetUserInfo() + { + //Before we call host, let's actually call SetPeerInformation + PlayerInformation myinformation = new PlayerInformation(); + myinformation.Name = username; + + peerObject.SetPeerInformation(myinformation, SyncFlags.PeerInformation); + } + + + + + /// + /// Show the service providers form + /// + /// True if a service provider was picked, false otherwise + public bool DoShowServiceProviders() + { + if (serviceProviderForm == null) + { + username = null; + serviceProviderForm = new ChooseServiceProviderForm(peerObject,this); + serviceProviderForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (serviceProviderForm.ShowDialog() == DialogResult.OK) + return true; + + // The didn't hit ok + return false; + } + + + + + /// + /// Show the create or join screen + /// + /// True if we will be in a session, false otherwise + public bool DoCreateJoinGame() + { + if (deviceAddress != null) + deviceAddress.Dispose(); + + deviceAddress = new Address(); + + if (createJoinForm != null) + createJoinForm.Dispose(); + + createJoinForm = new CreateJoinForm(peerObject, deviceAddress, this); + createJoinForm.Disposed += new System.EventHandler(this.FormDisposed); + + //Set the address's service provider (this will be the device address) + deviceAddress.ServiceProvider = serviceProviderGuid; + DialogResult drCreateJoin = createJoinForm.ShowDialog(); + if (drCreateJoin == DialogResult.Cancel) + return false; + + this.isHost = (drCreateJoin == DialogResult.Yes); + return true; + + } + + + + + /// + /// Start the wizard + /// + /// True if we are in a session, false otherwise + public bool StartWizard() + { + isInSession = false; + + while (this.DoShowServiceProviders()) + { + //Now let's create a game or join a session + if (this.DoCreateJoinGame()) + { + // A game has been created or joined now, set our flag + isInSession = true; + break; + } + } + return isInSession; + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_AddressForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_AddressForm.cs new file mode 100644 index 0000000..c6bbc84 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_AddressForm.cs @@ -0,0 +1,220 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_AddressForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// Summary description for AddressForm. +/// +public class AddressForm : System.Windows.Forms.Form +{ + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox hostnameTextBox; + private System.Windows.Forms.TextBox portTextBox; + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + /// + /// Constructor + /// + public AddressForm( int defaultPort ) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // Set default port value + Port = defaultPort; + } + + + + + /// + /// The remote port on which to connect + /// + public int Port + { + get + { + int port = 0; + + try + { + port = int.Parse(portTextBox.Text); + } + catch {} + + return port; + } + set + { + if( value > 0 ) + portTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Remote hostname + /// + public string Hostname + { + get + { return hostnameTextBox.Text; } + set + { hostnameTextBox.Text = value; } + } + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) + { + if( disposing ) + { + if(components != null) + { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.hostnameTextBox = new System.Windows.Forms.TextBox(); + this.portTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(248, 48); + this.label1.TabIndex = 0; + this.label1.Text = "Please enter the optional components of the remote session address. If set blank," + + " DirectPlay will attempt to search the local network."; + // + // okButton + // + this.okButton.Location = new System.Drawing.Point(104, 144); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(72, 24); + this.okButton.TabIndex = 1; + this.okButton.Text = "&OK"; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(184, 144); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(72, 24); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "&Cancel"; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(32, 80); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(100, 16); + this.label2.TabIndex = 3; + this.label2.Text = "Hostname"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(160, 80); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 16); + this.label3.TabIndex = 4; + this.label3.Text = "Port"; + // + // hostnameTextBox + // + this.hostnameTextBox.Location = new System.Drawing.Point(32, 96); + this.hostnameTextBox.Name = "hostnameTextBox"; + this.hostnameTextBox.Size = new System.Drawing.Size(120, 20); + this.hostnameTextBox.TabIndex = 5; + this.hostnameTextBox.Text = ""; + // + // portTextBox + // + this.portTextBox.Location = new System.Drawing.Point(160, 96); + this.portTextBox.Name = "portTextBox"; + this.portTextBox.Size = new System.Drawing.Size(56, 20); + this.portTextBox.TabIndex = 6; + this.portTextBox.Text = "2580"; + // + // AddressForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(264, 176); + this.Controls.Add(this.portTextBox); + this.Controls.Add(this.hostnameTextBox); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.okButton); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AddressForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Remote Address"; + this.ResumeLayout(false); + + } + #endregion + + private void okButton_Click(object sender, System.EventArgs e) + { + DialogResult = DialogResult.OK; + } + + private void cancelButton_Click(object sender, System.EventArgs e) + { + DialogResult = DialogResult.Cancel; + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_AddressForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_AddressForm.resx new file mode 100644 index 0000000..a899c39 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_AddressForm.resx @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + AddressForm + + + 8, 8 + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_CreateForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_CreateForm.cs new file mode 100644 index 0000000..a30d3ca --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_CreateForm.cs @@ -0,0 +1,363 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_CreateForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will allow you to create a new session, and set certain properties +/// of the session. +/// +public class CreateSessionForm : System.Windows.Forms.Form +{ + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.TextBox txtSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton notSignedRadio; + private System.Windows.Forms.RadioButton fullSignedRadio; + private System.Windows.Forms.RadioButton fastSignedRadio; + private System.Windows.Forms.CheckBox migrateHostCheckBox; + private System.Windows.Forms.CheckBox useDPNSVRCheckBox; + private System.Windows.Forms.TextBox localPortTextBox; + private System.Windows.Forms.Label localPortLabel; + private System.Windows.Forms.Button btnCancel; + + + + /// + /// Constructor + /// + public CreateSessionForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + peer = peerObject; + this.connectionWizard = connectionWizard; + deviceAddress = addressObject; + txtSession.Text = null; + this.Text = connectionWizard.SampleName + " - " + this.Text; + //Get the default session from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) + { + // Get session name + txtSession.Text = (string)regKey.GetValue("DirectPlaySessionName", null); + + // Get host migration option + if (regKey.GetValue("DirectPlayMigrateHost",null) != null) + { + migrateHostCheckBox.Checked = ((int)regKey.GetValue("DirectPlayMigrateHost",1)==1); + } + + + // Get session signing option + if (regKey.GetValue("DirectPlaySessionSigning",null) != null) + { + if ("Full" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fullSignedRadio.Checked = true; + else if ("Fast" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fastSignedRadio.Checked = true; + else + notSignedRadio.Checked = true; + } + + regKey.Close(); + } + + // Set default port value and hide port UI if provider doesn't use them + Port = connectionWizard.DefaultPort; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + { + localPortTextBox.Hide(); + localPortLabel.Hide(); + } + } + + + + /// + /// The port on which to host + /// + public int Port + { + get + { + int port = 0; + + try + { + port = int.Parse(localPortTextBox.Text); + } + catch {} + + return port; + } + set + { + if( value > 0 ) + localPortTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) + { + base.Dispose(Disposing); + } + + + + +#region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.txtSession = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.fullSignedRadio = new System.Windows.Forms.RadioButton(); + this.fastSignedRadio = new System.Windows.Forms.RadioButton(); + this.notSignedRadio = new System.Windows.Forms.RadioButton(); + this.migrateHostCheckBox = new System.Windows.Forms.CheckBox(); + this.useDPNSVRCheckBox = new System.Windows.Forms.CheckBox(); + this.localPortLabel = new System.Windows.Forms.Label(); + this.localPortTextBox = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // txtSession + // + this.txtSession.Location = new System.Drawing.Point(96, 24); + this.txtSession.Name = "txtSession"; + this.txtSession.Size = new System.Drawing.Size(176, 20); + this.txtSession.TabIndex = 3; + this.txtSession.Text = "SpaceWar"; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(288, 12); + this.label1.TabIndex = 2; + this.label1.Text = "Session Name:"; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(128, 168); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(208, 168); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.fullSignedRadio); + this.groupBox1.Controls.Add(this.fastSignedRadio); + this.groupBox1.Controls.Add(this.notSignedRadio); + this.groupBox1.Location = new System.Drawing.Point(16, 64); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(112, 88); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Session Signing"; + this.groupBox1.Visible = false; + // + // fullSignedRadio + // + this.fullSignedRadio.Location = new System.Drawing.Point(18, 22); + this.fullSignedRadio.Name = "fullSignedRadio"; + this.fullSignedRadio.Size = new System.Drawing.Size(80, 16); + this.fullSignedRadio.TabIndex = 9; + this.fullSignedRadio.Text = "Full signed"; + // + // fastSignedRadio + // + this.fastSignedRadio.Checked = true; + this.fastSignedRadio.Location = new System.Drawing.Point(18, 41); + this.fastSignedRadio.Name = "fastSignedRadio"; + this.fastSignedRadio.Size = new System.Drawing.Size(88, 16); + this.fastSignedRadio.TabIndex = 8; + this.fastSignedRadio.TabStop = true; + this.fastSignedRadio.Text = "Fast signed"; + // + // notSignedRadio + // + this.notSignedRadio.Location = new System.Drawing.Point(18, 55); + this.notSignedRadio.Name = "notSignedRadio"; + this.notSignedRadio.Size = new System.Drawing.Size(72, 24); + this.notSignedRadio.TabIndex = 10; + this.notSignedRadio.Text = "Disabled"; + // + // migrateHostCheckBox + // + this.migrateHostCheckBox.Location = new System.Drawing.Point(144, 64); + this.migrateHostCheckBox.Name = "migrateHostCheckBox"; + this.migrateHostCheckBox.Size = new System.Drawing.Size(136, 24); + this.migrateHostCheckBox.TabIndex = 11; + this.migrateHostCheckBox.Text = "Enable Host Migration"; + this.migrateHostCheckBox.Visible = false; + // + // useDPNSVRCheckBox + // + this.useDPNSVRCheckBox.Location = new System.Drawing.Point(144, 84); + this.useDPNSVRCheckBox.Name = "useDPNSVRCheckBox"; + this.useDPNSVRCheckBox.Size = new System.Drawing.Size(136, 24); + this.useDPNSVRCheckBox.TabIndex = 12; + this.useDPNSVRCheckBox.Text = "Use DPNSVR"; + this.useDPNSVRCheckBox.Visible = false; + // + // localPortLabel + // + this.localPortLabel.Location = new System.Drawing.Point(152, 122); + this.localPortLabel.Name = "localPortLabel"; + this.localPortLabel.Size = new System.Drawing.Size(64, 17); + this.localPortLabel.TabIndex = 13; + this.localPortLabel.Text = "Local Port:"; + // + // localPortTextBox + // + this.localPortTextBox.Location = new System.Drawing.Point(216, 120); + this.localPortTextBox.Name = "localPortTextBox"; + this.localPortTextBox.Size = new System.Drawing.Size(56, 20); + this.localPortTextBox.TabIndex = 14; + this.localPortTextBox.Text = "2580"; + // + // CreateSessionForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(290, 200); + this.ControlBox = false; + this.Controls.Add(this.localPortTextBox); + this.Controls.Add(this.localPortLabel); + this.Controls.Add(this.useDPNSVRCheckBox); + this.Controls.Add(this.migrateHostCheckBox); + this.Controls.Add(this.txtSession); + this.Controls.Add(this.label1); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.btnCancel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.HelpButton = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateSessionForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Create a Session"; + this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.CreateSessionForm_HelpRequested); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } +#endregion + + + + + /// + /// We are ready to create a session. Ensure the data is valid + /// then create the session + /// + private void btnOK_Click(object sender, System.EventArgs e) + { + ApplicationDescription dpApp; + if ((txtSession.Text == null) || (txtSession.Text == "")) + { + MessageBox.Show(this,"Please enter a session name before clicking OK.","No sessionname",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) + { + regKey.SetValue("DirectPlaySessionName", txtSession.Text); + if (migrateHostCheckBox.Checked) + regKey.SetValue("DirectPlayMigrateHost",1); + else + regKey.SetValue("DirectPlayMigrateHost",0); + + if (fastSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Fast"); + else if (fullSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Full"); + else + regKey.SetValue("DirectPlaySessionSigning","Disabled"); + regKey.Close(); + } + + dpApp = new ApplicationDescription(); + dpApp.GuidApplication = connectionWizard.ApplicationGuid; + dpApp.SessionName = txtSession.Text; + dpApp.Flags = 0; + dpApp.MaxPlayers = 2; + + if (migrateHostCheckBox.Checked) + dpApp.Flags |= SessionFlags.MigrateHost; + + if (!useDPNSVRCheckBox.Checked) + dpApp.Flags |= SessionFlags.NoDpnServer; + + if (fastSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FastSigned; + else if (fullSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FullSigned; + + // Specify the port number if available + if (ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + { + if (Port > 0) + deviceAddress.AddComponent(Address.KeyPort, Port); + } + + connectionWizard.SetUserInfo(); + // Host a game on deviceAddress as described by dpApp + // HostFlags.OkToQueryForAddressing allows DirectPlay to prompt the user + // using a dialog box for any device address information that is missing + peer.Host(dpApp,deviceAddress,HostFlags.OkToQueryForAddressing); + this.DialogResult = DialogResult.OK; + } + + private void CreateSessionForm_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent) + { + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_CreateForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_CreateForm.resx new file mode 100644 index 0000000..3e4ebdd --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_CreateForm.resx @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Private + + + Private + + + False + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + CreateSessionForm + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_JoinForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_JoinForm.cs new file mode 100644 index 0000000..85375df --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_JoinForm.cs @@ -0,0 +1,519 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_JoinForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will search for existing running samples and allow you to join them or will +/// allow you to create your own session as a host +/// +public class CreateJoinForm : System.Windows.Forms.Form +{ + private const int EnumExpireThreshold = 2000; + private bool amJoining = false; + + + + + /// + /// Hold our information of hosts we found + /// + private struct FindHostsResponseInformation + { + public int LastFoundTime; + public ApplicationDescription ApplicationDesc; + public int RoundTripLatencyMs; + public Address sender; + public Address device; + public override string ToString() + { + if (ApplicationDesc.MaxPlayers > 0) + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + "/" + ApplicationDesc.MaxPlayers + ") (" + RoundTripLatencyMs + "ms)"; + else + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + ") (" + RoundTripLatencyMs + "ms)"; + } + }; + + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + private Address hostAddress = null; + private bool isSearching = false; + private int findHostHandle = 0; + private CreateSessionForm createSessionForm = null; + private ResultCode resultCode; + private ArrayList foundHosts = new ArrayList(); + private bool isConnected = false; + private ManualResetEvent connectEvent = null; + private System.Timers.Timer updateListTimer = null; + private System.Timers.Timer connectTimer = null; + + private System.Windows.Forms.ListBox lstSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnSearch; + private System.Windows.Forms.Button btnJoin; + private System.Windows.Forms.Button btnCreate; + + + + + /// + /// Constructor + /// + public CreateJoinForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + deviceAddress = addressObject; + + //Set up the event handlers + peer.FindHostResponse += new FindHostResponseEventHandler(FindHostResponseMessage); + peer.ConnectComplete += new ConnectCompleteEventHandler(ConnectResult); + peer.AsyncOperationComplete += new AsyncOperationCompleteEventHandler(CancelAsync); + + //Set up our timer + updateListTimer = new System.Timers.Timer(300); // A 300 ms interval + updateListTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.UpdateTimer); + updateListTimer.SynchronizingObject = this; + updateListTimer.Start(); + //Set up our connect timer + connectTimer = new System.Timers.Timer(100); // A 100ms interval + connectTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.ConnectTimer); + connectTimer.SynchronizingObject = this; + // Set up our connect event + connectEvent = new ManualResetEvent(false); + + } + + + + + /// + /// An asynchronous operation was cancelled + /// + private void CancelAsync(object sender, AsyncOperationCompleteEventArgs e) + { + if (e.Message.AsyncOperationHandle == findHostHandle) + { + findHostHandle = 0; + btnSearch.Text = "Start Search"; + isSearching = false; + btnCreate.Enabled = true; + btnSearch.Enabled = true; + } + } + + + + + /// + /// A host was found and responded to our query + /// + private void FindHostResponseMessage(object sender, FindHostResponseEventArgs dpMessage) + { + // Now we need to add this to our list of available sessions + SessionAdd(dpMessage.Message); + } + + + + + /// + /// Add this session to our list + /// + /// + private void SessionAdd(FindHostsResponseMessage dpMessage) + { + FindHostsResponseInformation dpInfo = new FindHostsResponseInformation(); + + dpInfo.ApplicationDesc = dpMessage.ApplicationDescription; + dpInfo.device = dpMessage.AddressDevice; + dpInfo.sender = dpMessage.AddressSender; + dpInfo.RoundTripLatencyMs = dpMessage.RoundTripLatencyMs; + dpInfo.LastFoundTime = Environment.TickCount; + + // Let's check the items first and see if this one already exists + bool isFound = false; + + lock (foundHosts) + { + for (int i = 0; i < lstSession.Items.Count; i++) + { + if (dpInfo.ApplicationDesc.GuidInstance == ((FindHostsResponseInformation)lstSession.Items[i]).ApplicationDesc.GuidInstance) + { + foundHosts[i] = dpInfo; + lstSession.Items[i] = dpInfo; + isFound = true; + } + } + if (!isFound) + { + lstSession.Items.Add(dpInfo); + foundHosts.Add(dpInfo); + } + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) + { + base.Dispose(Disposing); + + if (isSearching) + { + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + isSearching = !isSearching; + } + if (connectTimer != null) + connectTimer.Dispose(); + + if (updateListTimer != null) + updateListTimer.Dispose(); + } + + + + +#region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.btnJoin = new System.Windows.Forms.Button(); + this.lstSession = new System.Windows.Forms.ListBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnCreate = new System.Windows.Forms.Button(); + this.btnSearch = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnJoin + // + this.btnJoin.Enabled = false; + this.btnJoin.Location = new System.Drawing.Point(7, 227); + this.btnJoin.Name = "btnJoin"; + this.btnJoin.Size = new System.Drawing.Size(74, 27); + this.btnJoin.TabIndex = 2; + this.btnJoin.Text = "Join"; + this.btnJoin.Click += new System.EventHandler(this.btnJoin_Click); + // + // lstSession + // + this.lstSession.Location = new System.Drawing.Point(5, 37); + this.lstSession.Name = "lstSession"; + this.lstSession.Size = new System.Drawing.Size(400, 186); + this.lstSession.TabIndex = 1; + this.lstSession.DoubleClick += new System.EventHandler(this.btnJoin_Click); + this.lstSession.SelectedValueChanged += new System.EventHandler(this.SelectedChange); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(5, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(312, 16); + this.label1.TabIndex = 0; + this.label1.Text = "Select session to join, or click Create to start a new session."; + // + // btnCreate + // + this.btnCreate.DialogResult = System.Windows.Forms.DialogResult.Yes; + this.btnCreate.Location = new System.Drawing.Point(84, 227); + this.btnCreate.Name = "btnCreate"; + this.btnCreate.Size = new System.Drawing.Size(74, 27); + this.btnCreate.TabIndex = 2; + this.btnCreate.Text = "Create"; + this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click); + // + // btnSearch + // + this.btnSearch.Location = new System.Drawing.Point(319, 7); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(86, 27); + this.btnSearch.TabIndex = 2; + this.btnSearch.Text = "Start Search"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(333, 227); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + // + // CreateJoinForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(411, 264); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.btnCreate, + this.btnJoin, + this.btnSearch, + this.btnCancel, + this.lstSession, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateJoinForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Join or create a session"; + this.ResumeLayout(false); + + } +#endregion + + + + + /// + /// The selected session was changed. + /// + private void SelectedChange(object sender, System.EventArgs e) + { + if (amJoining) + return; // Do nothing if we are already joining a session + + btnJoin.Enabled = (lstSession.SelectedItem != null); + } + + + + + /// + /// We either want to start or stop searching + /// + private void btnSearch_Click(object sender, System.EventArgs e) + { + if (!isSearching) + { + if( hostAddress != null ) + hostAddress.Dispose(); + + hostAddress = new Address(); + hostAddress.ServiceProvider = deviceAddress.ServiceProvider; + + // See if we should prompt the user for the remote address + if (ConnectWizard.ProviderRequiresPort(hostAddress.ServiceProvider)) + { + AddressForm addressDialog = new AddressForm(connectionWizard.DefaultPort); + addressDialog.ShowDialog(this); + + // If the user cancelled the address form, abort the search + if (addressDialog.DialogResult != DialogResult.OK) + return; + + // If a port was specified, add the component + if (addressDialog.Hostname != "") + hostAddress.AddComponent(Address.KeyHostname, addressDialog.Hostname); + + // If a hostname was specified, add the component + if (addressDialog.Port > 0) + hostAddress.AddComponent(Address.KeyPort, addressDialog.Port); + } + + //Time to enum our hosts + ApplicationDescription desc = new ApplicationDescription(); + desc.GuidApplication = connectionWizard.ApplicationGuid; + + // If the user was not already asked for address information, DirectPlay + // should prompt with native UI + FindHostsFlags flags = 0; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + flags = FindHostsFlags.OkToQueryForAddressing; + + peer.FindHosts(desc,hostAddress,deviceAddress,null,Timeout.Infinite,0,Timeout.Infinite, flags, out findHostHandle); + isSearching = true; + btnCreate.Enabled = false; + btnSearch.Text = "Stop Search"; + } + else + { + btnSearch.Text = "Stopping..."; + btnSearch.Enabled = false; + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + } + } + + + + + /// + /// A form was disposed + /// + /// + /// + public void FormDisposed(object sender, EventArgs e) + { + if (sender == createSessionForm) + createSessionForm = null; + } + + + + + /// + /// We should create a new session. Display a dialog allowing the user to set + /// certain options + /// + private void btnCreate_Click(object sender, System.EventArgs e) + { + this.DialogResult = DialogResult.None; + ((Button)sender).DialogResult = DialogResult.None; + if (createSessionForm == null) + { + createSessionForm = new CreateSessionForm(peer,deviceAddress,connectionWizard); + createSessionForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (createSessionForm.ShowDialog(this) != DialogResult.Cancel) + { + ((Button)sender).DialogResult = DialogResult.Yes; + this.DialogResult = DialogResult.Yes; + } + } + + + + + /// + /// Determine if we need to expire any of our currently listed servers + /// + private void UpdateTimer(object sender, System.Timers.ElapsedEventArgs e) + { + lock (foundHosts) + { + for (int i = 0; i< foundHosts.Count; i++) + { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)foundHosts[i]).LastFoundTime > EnumExpireThreshold) + { + foundHosts.RemoveAt(i); + break; + } + } + for (int i = 0; i< lstSession.Items.Count; i++) + { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)lstSession.Items[i]).LastFoundTime > EnumExpireThreshold) + { + lstSession.Items.RemoveAt(i); + break; + } + } + } + } + + + + + /// + /// Wait for a connect to complete + /// + private void ConnectTimer(object sender, System.Timers.ElapsedEventArgs e) + { + if (connectEvent.WaitOne(0,false)) // Wait for the Connect event to be fired + { + if (isConnected) // Are we connected? + { + // Get rid of the timer + if (updateListTimer != null) + updateListTimer.Stop(); + + if (connectTimer != null) + connectTimer.Stop(); + + this.DialogResult = DialogResult.OK; + this.Close(); + return; + } + else + { + MessageBox.Show(this,"Failed to connect. The error code was: \n" + resultCode.ToString() ,"Failed to connect",MessageBoxButtons.OK,MessageBoxIcon.Information); + // Restart our timer + updateListTimer.Start(); + } + } + } + + + + + /// + /// Fired when a connect complete message is received from DirectPlay. Fire + /// our event to notify the sample we've connected + /// + private void ConnectResult(object sender, ConnectCompleteEventArgs e) + { + if (e.Message.ResultCode == 0) + { + isConnected = true; + } + else + isConnected = false; + + resultCode = e.Message.ResultCode; + // Notify the timer that we've connected. + connectEvent.Set(); + } + + + + + /// + /// Join an existing session + /// + private void btnJoin_Click(object sender, System.EventArgs e) + { + FindHostsResponseInformation dpInfo; + if (lstSession.SelectedItem == null) + { + MessageBox.Show(this,"Please select a session before clicking join.","No session",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + // Turn off all buttons + btnCreate.Enabled = false; + btnCancel.Enabled = false; + btnJoin.Enabled = false; + btnSearch.Enabled = false; + amJoining = true; + // Stop our secondary timer + updateListTimer.Stop(); + dpInfo = ((FindHostsResponseInformation)lstSession.SelectedItem); + connectionWizard.SetUserInfo(); + peer.Connect(dpInfo.ApplicationDesc,dpInfo.sender, dpInfo.device,null,ConnectFlags.OkToQueryForAddressing); + // Now start our 'Connect' timer + connectTimer.Start(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_JoinForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_JoinForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_JoinForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_ServiceProviderForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_ServiceProviderForm.cs new file mode 100644 index 0000000..489e877 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_ServiceProviderForm.cs @@ -0,0 +1,242 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_ServiceProviderForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +/// +/// This form allows you to choose a service provider and username for your +/// sample +/// +public class ChooseServiceProviderForm : System.Windows.Forms.Form +{ + private Peer peer; + private ConnectWizard connectionWizard; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListBox lstSP; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtUser; + private System.Windows.Forms.Button btnCancel; + + + + + /// + /// Constructor + /// + public ChooseServiceProviderForm(Peer peerObject, ConnectWizard connectionWizard) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + // Fill up our listbox with the service providers + ServiceProviderInformation[] serviceProviders = peer.GetServiceProviders(false); + foreach (ServiceProviderInformation info in serviceProviders) + lstSP.Items.Add(info); + + txtUser.Text = null; + //Get the default username from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) + { + try + { + txtUser.Text = (string)regKey.GetValue("DirectPlayUserName", null); + lstSP.SelectedIndex = (int)regKey.GetValue("DirectPlaySPIndex", 0); + regKey.Close(); + } + catch + { + txtUser.Text = null; + lstSP.SelectedIndex = 0; + } + } + else + lstSP.SelectedIndex = 0; + + if ((txtUser.Text == null) || (txtUser.Text == "")) + { + txtUser.Text = SystemInformation.UserName; + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) + { + base.Dispose(Disposing); + } + + + + +#region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.lstSP = new System.Windows.Forms.ListBox(); + this.txtUser = new System.Windows.Forms.TextBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lstSP + // + this.lstSP.Location = new System.Drawing.Point(12, 63); + this.lstSP.Name = "lstSP"; + this.lstSP.Size = new System.Drawing.Size(324, 147); + this.lstSP.TabIndex = 1; + this.lstSP.DoubleClick += new System.EventHandler(this.lstSP_DoubleClick); + // + // txtUser + // + this.txtUser.Location = new System.Drawing.Point(13, 20); + this.txtUser.MaxLength = 30; + this.txtUser.Name = "txtUser"; + this.txtUser.Size = new System.Drawing.Size(326, 20); + this.txtUser.TabIndex = 5; + this.txtUser.Text = ""; + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(181, 215); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 2; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(260, 215); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(11, 44); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(376, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Please pick your service provider:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(10, 5); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(327, 12); + this.label2.TabIndex = 4; + this.label2.Text = "User Name:"; + // + // ChooseServiceProviderForm + // + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(343, 246); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.txtUser, + this.label2, + this.btnCancel, + this.btnOK, + this.lstSP, + this.label1}); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChooseServiceProviderForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Choose Service Provider"; + this.ResumeLayout(false); + + } +#endregion + + + + + /// + /// They don't want to run this sample + /// + private void btnCancel_Click(object sender, System.EventArgs e) + { + this.Dispose(); + } + + + + + /// + /// Same as clicking ok + /// + private void lstSP_DoubleClick(object sender, System.EventArgs e) + { + // Call the ok button click handler + object[] parameters = new object[] { sender, e }; + this.BeginInvoke(new System.EventHandler(btnOK_Click), parameters); + } + + + + + /// + /// Select this username and service provider if valid, then continue the wizard + /// + private void btnOK_Click(object sender, System.EventArgs e) + { + + if ((txtUser.Text == null) || (txtUser.Text == "")) + { + MessageBox.Show(this,"Please enter a username before clicking OK.","No Username",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + try + { + connectionWizard.ServiceProvider = ((ServiceProviderInformation)lstSP.SelectedItem).Guid; + connectionWizard.Username = txtUser.Text; + } + catch // We assume if we got here there was no selected item. + { + MessageBox.Show(this,"Please select a service provider before clicking OK.","No Service Provider",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) + { + regKey.SetValue("DirectPlayUserName", txtUser.Text); + regKey.SetValue("DirectPlaySPIndex", lstSP.SelectedIndex); + regKey.Close(); + } + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_ServiceProviderForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_ServiceProviderForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/DPlayConnect_ServiceProviderForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/DXUtil.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/DXUtil.cs new file mode 100644 index 0000000..f5b7a9d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/DXUtil.cs @@ -0,0 +1,313 @@ +//----------------------------------------------------------------------------- +// File: DXUtil.cs +// +// Desc: Shortcut macros and functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.IO; +using System.Runtime.InteropServices; + + + + +/// +/// Enumeration for various actions our timer can perform +/// +public enum DirectXTimer +{ + Reset, + Start, + Stop, + Advance, + GetAbsoluteTime, + GetApplicationTime, + GetElapsedTime +}; + + + + +/// +/// Generic utility functions for our samples +/// +public class DXUtil +{ + #region Timer Internal Stuff + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceCounter(ref long PerformanceCount); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("winmm.dll")] + public static extern int timeGetTime(); + private static bool isTimerInitialized = false; + private static bool m_bUsingQPF = false; + private static bool m_bTimerStopped = true; + private static long m_llQPFTicksPerSec = 0; + private static long m_llStopTime = 0; + private static long m_llLastElapsedTime = 0; + private static long m_llBaseTime = 0; + private static double m_fLastElapsedTime = 0.0; + private static double m_fBaseTime = 0.0; + private static double m_fStopTime = 0.0; + #endregion + + // Constants for SDK Path registry keys + private const string sdkPath = "Software\\Microsoft\\DirectX SDK"; + private const string sdkKey = "DX9J3SDK Samples Path"; + + private DXUtil() { /* Private Constructor */ } + + + + + /// + /// Returns the DirectX SDK media path + /// + public static string SdkMediaPath + { + get + { + Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sdkPath); + string sReg = string.Empty; + if (rKey != null) + { + sReg = (string)rKey.GetValue(sdkKey); + rKey.Close(); + } + if (sReg != null) + sReg += @"\Media\"; + else + return string.Empty; + + return sReg; + } + } + + + + + /// + /// Performs timer opertations. Use the following commands: + /// + /// DirectXTimer.Reset - to reset the timer + /// DirectXTimer.Start - to start the timer + /// DirectXTimer.Stop - to stop (or pause) the timer + /// DirectXTimer.Advance - to advance the timer by 0.1 seconds + /// DirectXTimer.GetAbsoluteTime - to get the absolute system time + /// DirectXTimer.GetApplicationTime - to get the current time + /// DirectXTimer.GetElapsedTime - to get the time that elapsed between TIMER_GETELAPSEDTIME calls + /// + /// + public static float Timer(DirectXTimer command) + { + if (!isTimerInitialized) + { + isTimerInitialized = true; + + // Use QueryPerformanceFrequency() to get frequency of timer. If QPF is + // not supported, we will timeGetTime() which returns milliseconds. + long qwTicksPerSec = 0; + m_bUsingQPF = QueryPerformanceFrequency(ref qwTicksPerSec); + if (m_bUsingQPF) + m_llQPFTicksPerSec = qwTicksPerSec; + } + if (m_bUsingQPF) + { + double time; + double fElapsedTime; + long qwTime = 0; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_llStopTime != 0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + qwTime = m_llStopTime; + else + QueryPerformanceCounter(ref qwTime); + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) + { + fElapsedTime = (double) (qwTime - m_llLastElapsedTime) / (double) m_llQPFTicksPerSec; + m_llLastElapsedTime = qwTime; + return (float)fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) + { + double fAppTime = (double) (qwTime - m_llBaseTime) / (double) m_llQPFTicksPerSec; + return (float)fAppTime; + } + + // Reset the timer + if (command == DirectXTimer.Reset) + { + m_llBaseTime = qwTime; + m_llLastElapsedTime = qwTime; + m_llStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) + { + if (m_bTimerStopped) + m_llBaseTime += qwTime - m_llStopTime; + m_llStopTime = 0; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) + { + if (!m_bTimerStopped) + { + m_llStopTime = qwTime; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) + { + m_llStopTime += m_llQPFTicksPerSec/10; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) + { + time = qwTime / (double) m_llQPFTicksPerSec; + return (float)time; + } + + return -1.0f; // Invalid command specified + } + else + { + // Get the time using timeGetTime() + double time; + double fElapsedTime; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_fStopTime != 0.0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + time = m_fStopTime; + else + time = timeGetTime() * 0.001; + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) + { + fElapsedTime = (double) (time - m_fLastElapsedTime); + m_fLastElapsedTime = time; + return (float) fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) + { + return (float) (time - m_fBaseTime); + } + + // Reset the timer + if (command == DirectXTimer.Reset) + { + m_fBaseTime = time; + m_fLastElapsedTime = time; + m_fStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) + { + if (m_bTimerStopped) + m_fBaseTime += time - m_fStopTime; + m_fStopTime = 0.0f; + m_fLastElapsedTime = time; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) + { + if (!m_bTimerStopped) + { + m_fStopTime = time; + m_fLastElapsedTime = time; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) + { + m_fStopTime += 0.1f; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) + { + return (float) time; + } + + return -1.0f; // Invalid command specified + } + } + + + + + /// + /// Returns a valid path to a DXSDK media file + /// + /// Initial path to search + /// Filename we're searching for + /// Full path to the file + public static string FindMediaFile(string path, string filename) + { + // First try to load the file in the full path + if (path != null) + { + if (File.Exists(AppendDirectorySeparator(path) + filename)) + return AppendDirectorySeparator(path) + filename; + } + + // if not try to find the filename in the current folder. + if (File.Exists(filename)) + return AppendDirectorySeparator(Directory.GetCurrentDirectory()) + filename; + + // last, check if the file exists in the media directory + if (File.Exists(AppendDirectorySeparator(SdkMediaPath) + filename)) + return AppendDirectorySeparator(SdkMediaPath) + filename; + + throw new FileNotFoundException("Could not find this file.", filename); + } + + + + + /// + /// Returns a valid string with a directory separator at the end. + /// + private static string AppendDirectorySeparator(string filename) + { + if (!filename.EndsWith(@"\")) + return filename + @"\"; + + return filename; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/GameClass.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/GameClass.cs new file mode 100644 index 0000000..239ff70 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/GameClass.cs @@ -0,0 +1,575 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; +using Microsoft.DirectX.DirectPlay; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + public delegate void MessageDelegate(byte message); // Delegate for messages arriving via DirectPlay. + public delegate void AudioDelegate(); // Delegate to handle audio playback. + public delegate void PeerCloseCallback(); // This delegate will be called when the session terminated event is fired. + +public class GameClass : GraphicsSample +{ + private GraphicsFont drawingFont = null; + private Point destination = new Point(0, 0); + private InputClass input = null; + private MouseInput mouseInput = null; + + private bool networkEnabled; + private PlayClass peer = null; + private bool remotePlayerActive = false; + private string statusMessage; + private float statusMessageTimer; + private PositionedMesh spaceSphere = null; + private Ship playerShip = null; + private Ship opponentShip = null; + private HullColors hullColor = HullColors.White; + private Camera camera = null; + private CameraMode cameraMode = CameraMode.ChaseMode; + private Matrix viewMatrix; + private Vector2 screenCenter; + private Vector2 mouseLoc; + private SoundHandler soundHandler = null; + private bool kbThrust = false; + private bool cPressed = false; + private bool f5Pressed = false; + private bool f6Pressed = false; + private bool f7Pressed = false; + private bool f8Pressed = false; + private bool f9Pressed = false; + private bool f10Pressed = false; + private bool spacePressed = false; + + private Texture bgPointerTexture = null; + private Texture vectorPanel = null; + private RenderToSurface rts = null; + private Surface renderSurface = null; + private BGPointer bgPointer = null; + private int range = 0; + + private GameStates gameState; + public GameStates GameState { get { return gameState; } set { gameState = value; } } + + private string debugText; + public string DebugText { get { return debugText; } set { debugText = value; } } + private bool debugging = true; + + public GameClass(bool startFullScreen, Size size, bool enableNetwork) + { + this.startFullscreen = startFullScreen; + this.Size = size; + this.networkEnabled = enableNetwork; + this.Text = "SpaceWar3D-Step11"; + statusMessageTimer = Constants.StatusMessageDisplayTime; + + drawingFont = new GraphicsFont( "Verdana", System.Drawing.FontStyle.Regular); + + input = new InputClass(this); + mouseInput = new MouseInput(this); + this.MouseMove +=new MouseEventHandler(GameClass_MouseMove); + this.Cursor = Cursors.NoMove2D; + + camera = new Camera(); + soundHandler = new SoundHandler(this); + + if (networkEnabled) + { + peer = new PlayClass(this); + if (peer.IsHost) + { + hullColor = HullColors.Red; + } + } + + } + + private void ProcessInput() + { + //Get input + KeyboardState kbState = input.GetInputState(); + if (kbState == null) + return; + if (kbState[Key.W] || kbState[Key.Up]) + { + kbThrust = true; + } + else + { + kbThrust = false; + } + if (kbState[Key.C] && !cPressed) + { + cPressed = true; + SelectNextCameraMode(); + } + if (!kbState[Key.C]) + { + cPressed = false; + } + + if (kbState[Key.F5] && !f5Pressed) + { + f5Pressed = true; + playerShip.Sounds |= Sounds.Taunt; + } + if (!kbState[Key.F5]) + { + f5Pressed = false; + } + if (kbState[Key.F6] && !f6Pressed) + { + f6Pressed = true; + playerShip.Sounds |= Sounds.Dude1; + } + if (!kbState[Key.F6]) + { + f6Pressed = false; + } + if (kbState[Key.F7] && !f7Pressed) + { + f7Pressed = true; + playerShip.Sounds |= Sounds.Dude2; + } + if (!kbState[Key.F7]) + { + f7Pressed = false; + } + if (kbState[Key.F8] && !f8Pressed) + { + f8Pressed = true; + playerShip.Sounds |= Sounds.Dude3; + } + if (!kbState[Key.F8]) + { + f8Pressed = false; + } + if (kbState[Key.F9] && !f9Pressed) { + f9Pressed = true; + playerShip.Sounds |= Sounds.Dude4; + } + if (!kbState[Key.F9]) { + f9Pressed = false; + } + if (kbState[Key.F10] && !f10Pressed) { + f10Pressed = true; + playerShip.Sounds |= Sounds.Dude1; + } + if (!kbState[Key.F10]) { + f10Pressed = false; + } + if (kbState[Key.Space] && !spacePressed) { + spacePressed = true; + playerShip.EnterHyper(); + } + if (!kbState[Key.Space]) { + spacePressed = false; + } + } + + protected override void FrameMove() + { + statusMessageTimer += elapsedTime; + + int fps = (int) framePerSecond; + debugText = "FPS: " + fps.ToString() + "\r\n"; + ProcessInput(); + MouseControlValues v = mouseInput.Values; + if (v.FireButtonPushed) + playerShip.Shoot(); + + float yawAmount = mouseLoc.X - screenCenter.X; + float pitchAmount = mouseLoc.Y - screenCenter.Y; + + playerShip.YawPitchRoll(yawAmount, pitchAmount, elapsedTime); + playerShip.SetThrust(v.ThrustButtonPushed | kbThrust, elapsedTime); + playerShip.UpdatePosition(elapsedTime); + playerShip.UpdateState(elapsedTime); + playerShip.TestShip(opponentShip); + //Send our ship update to the remote player + SendMyPlayerUpdate(); + + // If there is no remote player, fly the o ther ship around in a circle for target practice. + // Ideally, we would derive an AI controlled ship from the ship class and use it instead. + if (!remotePlayerActive) + { + opponentShip.SetThrust(true, elapsedTime); + opponentShip.YawPitchRoll(250,0,elapsedTime); + opponentShip.TestShip(playerShip); + } + opponentShip.UpdatePosition(elapsedTime); + opponentShip.UpdateState(elapsedTime); + + /*Here we set up the view matrix and space dome location. The space dome moves but not rotates with the player + * and is alway drawn first, so it looks like it is infinitely distant. + * + * In chase mode, the chaseMatrix determines the offset from the ship. If you want to move our viewpoint + * back from the ship more, increase the negative z value. + * + * The fixed mode camera sits at the origin and always tracks the player ship. Very hard to control from + * this viewpoint, but cool to watch. + */ + + Vector3 spaceSphereLocation = new Vector3(0, 0, 0); + switch (cameraMode) + { + case CameraMode.ChaseMode: + { + Matrix chaseMatrix = Matrix.Translation(0, 6, -14); + chaseMatrix *= playerShip.Position.WorldMatrix; + viewMatrix = Matrix.Invert(chaseMatrix); + spaceSphereLocation = playerShip.Position.Location; + break; + } + case CameraMode.CockpitMode: + { + viewMatrix = Matrix.Invert(playerShip.Position.WorldMatrix); + spaceSphereLocation = playerShip.Position.Location; + break; + } + case CameraMode.Fixed: + { + camera.Point(0,0,0, + playerShip.Position.XPos, + playerShip.Position.YPos, + playerShip.Position.ZPos); + viewMatrix = camera.ViewMatrix; + spaceSphereLocation = new Vector3(0, 0, 0); + break; + } + } + device.Transform.View = viewMatrix; + spaceSphere.Position.Location = spaceSphereLocation; + + //rotate space very slowly for that nice twinkly star effect + spaceSphere.Position.RotateRel(-.001f * elapsedTime,-0.0001f * elapsedTime, 0); + + //Calculate range and direction to target + range = (int) Vector3.Length( + playerShip.Position.Location - opponentShip.Position.Location); + bgPointer.Point(playerShip.Position, opponentShip.Position); + + //Play the sounds + soundHandler.Play(opponentShip.Sounds | playerShip.Sounds); + opponentShip.Sounds = (Sounds) 0; + playerShip.Sounds = (Sounds) 0; + } + + + /// + /// Called once per frame, the call is the entry point for 3d rendering. This + /// function sets up render states, clears the viewport, and renders the scene. + /// + protected override void Render() + { + RenderBGPointer(); + + //Clear the backbuffer to a Blue color + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + + //Set the view matrix + device.Transform.View = viewMatrix; + + //Begin the scene + device.BeginScene(); + device.RenderState.ZBufferEnable = false; + device.RenderState.Lighting = false; + spaceSphere.Render(); + device.RenderState.Lighting = true; + device.RenderState.ZBufferEnable = true; + + device.Transform.World = playerShip.Position.WorldMatrix; + playerShip.Render(); + opponentShip.Render(); + + //Render our targeting pointer + using (Sprite pointerSprite = new Sprite(device)) + { + pointerSprite.Begin(SpriteFlags.AlphaBlend); + + pointerSprite.Draw(bgPointerTexture, new Rectangle(0, 0, 128, 128), + new Vector3(0, 0, 0), new Vector3(42, this.Height - 250, 0), Color.White); + pointerSprite.Transform = Matrix.Identity; + pointerSprite.Draw(vectorPanel,new Rectangle(0,0,193,173), + new Vector3(0,0,0), new Vector3(10, this.Height- 282, 0), Color.White); + + pointerSprite.End(); + } + //Output the scores + drawingFont.DrawText(5, 20, Color.Red, playerShip.HostName.ToString() + ":"); + drawingFont.DrawText(100,20,Color.Red,playerShip.Score.ToString()); + if (remotePlayerActive) + { + drawingFont.DrawText(5,45,Color.White, peer.RemotePlayer.Name + ":"); + drawingFont.DrawText(100,45, Color.White, opponentShip.Score.ToString()); + } + + //Display any status messages + if (statusMessageTimer < Constants.StatusMessageDisplayTime) + { + drawingFont.DrawText(200, screenCenter.Y, Color.FromArgb(200,220,220,255), statusMessage); + } + + if (debugging) + { + drawingFont.DrawText(5,5,Color.Yellow,debugText); + } + device.EndScene(); + } + + private void RenderBGPointer() + { + Viewport view = new Viewport(); + view.Width = 128; + view.Height = 128; + view.MaxZ = 1.0f; + + Matrix currentViewMatrix = device.Transform.View; + + rts.BeginScene(renderSurface, view); + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); + + if (playerShip.State == ShipState.Normal && + opponentShip.State == ShipState.Normal) + { + Matrix pointerViewMatrix = Matrix.Translation(0, 2, -15); + pointerViewMatrix *= playerShip.Position.WorldMatrix; + device.Transform.View = Matrix.Invert(pointerViewMatrix); + + bgPointer.Render(); + drawingFont.DrawText(2,2,Color.LimeGreen, "Range: " + range.ToString()); + } + + rts.EndScene(Filter.Linear); + device.Transform.View = currentViewMatrix; + + } + + /// + /// Initialize scene objects. + /// + protected override void InitializeDeviceObjects() + { + drawingFont.InitializeDeviceObjects(device); + + spaceSphere = new PositionedMesh(device, "SpaceSphere.x"); + + playerShip = new Ship(device, this, hullColor); + if (playerShip.HostName == null) + playerShip.HostName = "Player"; + playerShip.State = ShipState.Normal; + + HullColors opponentHullColor; + if (hullColor == HullColors.Red) + opponentHullColor = HullColors.White; + else + opponentHullColor = HullColors.Red; + + opponentShip = new Ship(device, this, opponentHullColor); + if (opponentShip.HostName == null) + opponentShip.HostName = "Opponent"; + opponentShip.State = ShipState.Normal; + + bgPointer = new BGPointer(device); + vectorPanel = TextureLoader.FromFile(device, MediaUtilities.FindFile("vectorPanel.png")); + + rts = new RenderToSurface(device, 128, 128, Format.X8R8G8B8, true, DepthFormat.D16); + + + } + + /// + /// Called when a device needs to be restored. + /// + protected override void RestoreDeviceObjects(System.Object sender, System.EventArgs e) + { + device.RenderState.Ambient = Color.FromArgb(150,150,150); + device.RenderState.SpecularEnable = true; + device.Lights[0].Type = LightType.Directional; + device.Lights[0].Direction = new Vector3(0,-1, -1); + device.Lights[0].Diffuse = Color.White; + device.Lights[0].Specular = Color.White; + device.Lights[0].Enabled = true; + device.RenderState.Lighting = true; + + device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, + (presentParams.BackBufferWidth/presentParams.BackBufferHeight), + 1.5f, 20000.0f ); + + device.Transform.View = camera.ViewMatrix; + + screenCenter = new Vector2( + presentParams.BackBufferWidth / 2, + presentParams.BackBufferHeight / 2); + + if (bgPointerTexture != null) + bgPointerTexture.Dispose(); + bgPointerTexture = new Texture(device, 128, 128, 1, Usage.RenderTarget, + Format.X8R8G8B8, Pool.Default); + renderSurface = bgPointerTexture.GetSurfaceLevel(0); + + gameState = GameStates.Running; + + } + + public void RemotePlayerJoined(string playerName) + { + remotePlayerActive = true; + statusMessage = playerName + " has joined the game."; + statusMessageTimer = 0; + + } + + public void RemotePlayerLeft(string playerName) + { + remotePlayerActive = false; + statusMessage = playerName + " has left the game."; + statusMessageTimer = 0; + } + + public void DataReceived(object sender, ReceiveEventArgs rea) + { + + int senderID = rea.Message.SenderID; + + //Ignore messages received before we are initialized + if ((gameState == GameStates.Loading) || (gameState == GameStates.Config)) + { + rea.Message.ReceiveData.Dispose(); + return; + } + + byte mType = (byte)rea.Message.ReceiveData.Read(typeof(byte)); + MessageType messageType = (MessageType)mType; + + switch (messageType) + { + case MessageType.PlayerUpdateID: + { + PlayerUpdate update = (PlayerUpdate)rea.Message.ReceiveData.Read(typeof(PlayerUpdate)); + ShotUpdate shotUpdate = new ShotUpdate(); + shotUpdate.ShotPosition = new Vector3[Constants.NumShots]; + shotUpdate.ShotAge = new float[Constants.NumShots]; + shotUpdate.ShotAlive = new bool[Constants.NumShots]; + + for (int i = 0; i < Constants.NumShots; i++) + { + shotUpdate.ShotPosition[i] = (Vector3)rea.Message.ReceiveData.Read(typeof(Vector3)); + shotUpdate.ShotAge[i] = (int)rea.Message.ReceiveData.Read(typeof(int)); + shotUpdate.ShotAlive[i] = (bool)rea.Message.ReceiveData.Read(typeof(bool)); + } + + rea.Message.ReceiveData.Dispose(); + lock(opponentShip) + { + opponentShip.Position.WorldMatrix = update.WorldMatrix; + opponentShip.Score = update.Score; + opponentShip.Sounds = (Sounds)update.Sounds; + opponentShip.WaitCount = update.WaitCount; + opponentShip.SetState((ShipState)update.State); + + Photon[] shotArray = opponentShip.ShotHandler.GetShotArray(); + for (int i = 0; i < Constants.NumShots; i++) + { + shotArray[i].Location = shotUpdate.ShotPosition[i]; + shotArray[i].Age = shotUpdate.ShotAge[i]; + shotArray[i].Alive = shotUpdate.ShotAlive[i]; + } + opponentShip.ShotHandler.SetShotArray(shotArray); + } + + break; + } + + case MessageType.Add1ToScore: + { + rea.Message.ReceiveData.Dispose(); + playerShip.Score += 1; + break; + } + + case MessageType.GamePaused: + { + rea.Message.ReceiveData.Dispose(); + gameState = GameStates.Paused; + break; + } + case MessageType.GameRunning: + { + rea.Message.ReceiveData.Dispose(); + if (gameState == GameStates.Paused) + gameState = GameStates.Running; + + break; + } + } + } + + public void SendPoint() + { + if (!remotePlayerActive) + { + playerShip.Score += 1; + return; + } + + peer.SendScorePoint(); + } + + public void SendMyPlayerUpdate() + { + if (!networkEnabled) + return; + + PlayerUpdate update = new PlayerUpdate(); + update.WorldMatrix = playerShip.Position.WorldMatrix; + update.State = (int)playerShip.State; + update.WaitCount = playerShip.WaitCount; + update.DeathCount = playerShip.DeathCount; + update.Sounds = (int)playerShip.Sounds; + update.Score = playerShip.Score; + + ShotUpdate shotUpdate = new ShotUpdate(); + shotUpdate.ShotAge = new float[Constants.NumShots]; + shotUpdate.ShotPosition = new Vector3[Constants.NumShots]; + shotUpdate.ShotAlive = new bool[Constants.NumShots]; + + Photon[] shotArray = playerShip.ShotHandler.GetShotArray(); + for (int i = 0; i < Constants.NumShots; i++) + { + shotUpdate.ShotPosition[i] = shotArray[i].Location; + shotUpdate.ShotAge[i] = shotArray[i].Age; + shotUpdate.ShotAlive[i] = shotArray[i].Alive; + } + peer.SendPlayerUpdate(update, shotUpdate); + } + + + + /// + // When the peer closes, the code here is executed. + /// + public void PeerClose() + { + // The session was terminated, go ahead and shut down + this.Dispose(); + } + + private void SelectNextCameraMode() + { + int mode = (int) cameraMode; + mode++; + if (mode > 2) + mode = 0; + cameraMode = (CameraMode) mode; + } + + private void GameClass_MouseMove(object sender, MouseEventArgs e) + { + mouseLoc.X = e.X; + mouseLoc.Y = e.Y; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/GameClass.resx b/Source Code updated 08-12-05/Spacewar3D/Step11/GameClass.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/GameClass.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/GameStates.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/GameStates.cs new file mode 100644 index 0000000..f63212f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/GameStates.cs @@ -0,0 +1,12 @@ +using System; + + public enum GameStates + { + Loading, + Running, + Config, + Paused, + HelpScreen, + Exiting + } + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/HelpScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/HelpScreen.cs new file mode 100644 index 0000000..b281029 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/HelpScreen.cs @@ -0,0 +1,124 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.IO; + + + /// + /// Summary description for HelpScreen. + /// +public class HelpScreen : System.Windows.Forms.Form +{ + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.TextBox helpText; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public HelpScreen() + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + string helpFile = MediaUtilities.FindFile("Help.txt"); + if (File.Exists(helpFile)) + { + StreamReader sr; + try + { + sr = new StreamReader(helpFile); + helpText.Text = sr.ReadToEnd(); + sr.Close(); + } + catch ( Exception e ) + { + helpText.Text = e.ToString(); + } + + } + else + { + helpText.Text = "Unable to locate " + helpFile.ToString(); + } + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) + { + if( disposing ) + { + if(components != null) + { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.closeButton = new System.Windows.Forms.Button(); + this.helpText = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // closeButton + // + this.closeButton.BackColor = System.Drawing.Color.Black; + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.Dock = System.Windows.Forms.DockStyle.Bottom; + this.closeButton.ForeColor = System.Drawing.Color.Red; + this.closeButton.Location = new System.Drawing.Point(0, 615); + this.closeButton.Name = "closeButton"; + this.closeButton.Size = new System.Drawing.Size(616, 23); + this.closeButton.TabIndex = 0; + this.closeButton.Text = "Close"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // helpText + // + this.helpText.BackColor = System.Drawing.Color.Black; + this.helpText.Dock = System.Windows.Forms.DockStyle.Fill; + this.helpText.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.helpText.ForeColor = System.Drawing.Color.Red; + this.helpText.Location = new System.Drawing.Point(0, 0); + this.helpText.Multiline = true; + this.helpText.Name = "helpText"; + this.helpText.ReadOnly = true; + this.helpText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.helpText.Size = new System.Drawing.Size(616, 615); + this.helpText.TabIndex = 1; + this.helpText.TabStop = false; + this.helpText.Text = ""; + // + // HelpScreen + // + this.AcceptButton = this.closeButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(616, 638); + this.Controls.Add(this.helpText); + this.Controls.Add(this.closeButton); + this.Name = "HelpScreen"; + this.Text = "SpaceWar! Help"; + this.ResumeLayout(false); + + } + #endregion + + private void closeButton_Click(object sender, System.EventArgs e) + { + this.Close(); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/HelpScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step11/HelpScreen.resx new file mode 100644 index 0000000..a4f535a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/HelpScreen.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + HelpScreen + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/MediaUtilities.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/MediaUtilities.cs new file mode 100644 index 0000000..bb1759f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/MediaUtilities.cs @@ -0,0 +1,40 @@ +using System; +using System.IO; +using System.Configuration; + + + /// + /// Summary description for MediaUtilities. + /// +public class MediaUtilities +{ + // private static string defaultPath = @"..\..\media\"; + private static string mediaPath = ConfigurationSettings.AppSettings.Get("MediaPath"); + + public MediaUtilities() + { + } + + public static string FindFile(string filename) + { + return FindFile(mediaPath, filename); + } + + public static string FindFile(string path, string filename) + { + // First try to load the file in the full path + string fullName = AppendDirectorySeparator(path) + filename; + if (File.Exists(fullName)) + return fullName; + else + throw new FileNotFoundException("Could not find this file.", filename); + } + + private static string AppendDirectorySeparator(string pathname) + { + if (!pathname.EndsWith(@"\")) + return pathname + @"\"; + else + return pathname; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/MessageType.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/MessageType.cs new file mode 100644 index 0000000..73ed444 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/MessageType.cs @@ -0,0 +1,11 @@ +using System; + + public enum MessageType + { + PlayerUpdateID, + GameParamUpdateID, + GamePaused, + GameRunning, + Add1ToScore, + Add2ToScore + } \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/MouseInput.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/MouseInput.cs new file mode 100644 index 0000000..179b3e2 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/MouseInput.cs @@ -0,0 +1,61 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + + + +public struct MouseControlValues +{ + public int Yaw; + public int Pitch; + public bool FireButtonPushed; + public bool ThrustButtonPushed; +} + + /// + /// Summary description for MouseInput. + /// +public class MouseInput +{ + private Device device = null; + private MouseControlValues values; + public MouseControlValues Values + { + get + { + UpdateInput(); + return values; + } + } + + public MouseInput(Control parent) + { + // Create our mouse device + device = new Device(SystemGuid.Mouse); + device.SetCooperativeLevel(parent, CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive); + device.Properties.AxisModeAbsolute = false; + device.Acquire(); + } + + + public void UpdateInput() + { + MouseState state = device.CurrentMouseState; + values.Yaw = state.X; + values.Pitch = state.Y; + + byte [] buttonStatus = state.GetMouseButtons(); + if (buttonStatus[0]!=0) + values.FireButtonPushed = true; + else + values.FireButtonPushed = false; + + if (buttonStatus[1]!=0) + values.ThrustButtonPushed = true; + else + values.ThrustButtonPushed = false; + + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/ParticleEffects.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/ParticleEffects.cs new file mode 100644 index 0000000..673925c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/ParticleEffects.cs @@ -0,0 +1,261 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using System.Drawing; +public class ParticleEffects { + public struct PointVertex { + public Vector3 v; + public int color; + public static readonly VertexFormats Format = VertexFormats.Position | VertexFormats.Diffuse; + }; + + /// + /// Global data for the particles + /// + public struct Particle { + public Vector3 positionVector; // Current position + public Vector3 velocityVector; // Current velocity + public Vector3 initialPosition; // Initial position + public Vector3 initialVelocity; // Initial velocity + public float creationTime; // Time of creation + public System.Drawing.Color diffuseColor; // Initial diffuse color + public System.Drawing.Color fadeColor; // Faded diffuse color + public float fadeProgression; // Fade progression + }; + + private float time = 0.0f; + private const int bufferChunkSize = 8192; + private const int maxBufferSize = bufferChunkSize*4; //supports 4 bufferChunkSize buffers before discarding + private int baseParticle = maxBufferSize; + private int particles = 0; + private const int particlesLimit = 2048; + private Vector3 location; + private Vector3 offset; + private System.Collections.ArrayList particlesList = new System.Collections.ArrayList(); + private System.Collections.ArrayList freeParticles = new System.Collections.ArrayList(); + private System.Random rand = new System.Random(); + public Vector3 EmitterLocation {get { return location; } } + public Vector3 EmitterOffset { get { return offset; } set { offset = value; } } + // Geometry + private VertexBuffer vertexBuffer = null; + private Texture particleTexture; + public Texture ParticleTexture { set { particleTexture = value; } } + private Device device = null; + + /// + /// VaporTrail constructor + /// + public ParticleEffects(Device device) { + this.device = device; + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + RestoreDeviceObjects(device, null); + } + + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (vertexBuffer != null) + vertexBuffer.Dispose(); + vertexBuffer = null; + } + + /// + /// Restores the device objects + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + Device device = (Device)sender; + // Create a vertex buffer for the particle system. The size of this buffer + // does not relate to the number of particles that exist. Rather, the + // buffer is used as a communication channel with the device.. we fill in + // a bit, and tell the device to draw. While the device is drawing, we + // fill in the next bit using NOOVERWRITE. We continue doing this until + // we run out of vertex buffer space, and are forced to discard the buffer + // and start over at the beginning. + vertexBuffer = new VertexBuffer(typeof(PointVertex), maxBufferSize, device, Usage.Dynamic | Usage.WriteOnly | Usage.Points, PointVertex.Format, Pool.Default); + } + + /// + /// Updates the explosion effects + /// + public void UpdateExplosion(int NumParticlesToEmit, Vector3 vPosition) { + // Emit new particles + int particlesEmit = particles + NumParticlesToEmit; + while(particles < particlesLimit && particles < particlesEmit) { + Particle particle; + + if (freeParticles.Count > 0) { + particle = (Particle)freeParticles[0]; + freeParticles.RemoveAt(0); + } + else { + particle = new Particle(); + } + + // Emit new particle + float Rand1 = ((float)rand.Next(int.MaxValue)/(float)int.MaxValue) * (float)Math.PI * 2.0f; + float Rand2 = ((float)rand.Next(int.MaxValue)/(float)int.MaxValue) * (float)Math.PI * 2.0f; + + particle.initialPosition = vPosition; + + particle.initialVelocity.X = (float)Math.Cos(Rand1) * (float)Math.Sin(Rand2) * 100f; + particle.initialVelocity.Z = (float)Math.Sin(Rand1) * (float)Math.Sin(Rand2) * 100f; + particle.initialVelocity.Y = (float)Math.Cos(Rand2) * 100f; + + + particle.positionVector = particle.initialPosition; + particle.velocityVector = particle.initialVelocity; + + particle.diffuseColor = Color.Violet; + particle.fadeColor = Color.Black; + particle.fadeProgression = 1.0f; + particle.creationTime = time; + + particlesList.Add(particle); + particles++; + } + } + + /// + /// Updates the thrust effects (vapor trail) + /// + public void UpdateThrustEffect(float ElapsedTime, int NumParticlesToEmit, + System.Drawing.Color EmitColor,System.Drawing.Color FadeColor, Vector3 Position) { + time += ElapsedTime; + location = Position; + for (int i = particlesList.Count-1; i >= 0; i--) { + Particle p = (Particle)particlesList[i]; + // Calculate new position + float fT = time - p.creationTime; + p.fadeProgression -= ElapsedTime * 0.60f; + p.positionVector = p.initialVelocity * fT + p.initialPosition; + p.velocityVector.Z = 0; + if (p.fadeProgression < 0.0f) + p.fadeProgression = 0.0f; + // Kill old particles + if (p.fadeProgression <= 0.0f) { + // Kill particle + freeParticles.Add(p); + particlesList.RemoveAt(i); + particles--; + } + else + particlesList[i] = p; + } + // Emit new particles + int particlesEmit = particles + NumParticlesToEmit; + while(particles < particlesLimit && particles < particlesEmit) { + Particle particle; + if (freeParticles.Count > 0) { + particle = (Particle)freeParticles[0]; + freeParticles.RemoveAt(0); + } + else { + particle = new Particle(); + } + // Emit new particle + particle.initialPosition = Position + offset; + particle.positionVector = particle.initialPosition; + particle.velocityVector = particle.initialVelocity; + particle.diffuseColor = EmitColor; + particle.fadeColor = FadeColor; + particle.fadeProgression = 1.0f; + particle.creationTime = time; + particlesList.Add(particle); + particles++; + } + } + + /// + /// Renders the scene + /// + public void Render() { + // Set the render states for using point sprites + device.RenderState.ZBufferWriteEnable = false; + device.RenderState.AlphaBlendEnable = true; + device.RenderState.SourceBlend = Blend.One; + device.RenderState.DestinationBlend = Blend.One; + bool lightEnabled = device.RenderState.Lighting; + device.RenderState.Lighting = false; + device.SetTexture(0, particleTexture); + device.Transform.World = Matrix.Identity; + device.RenderState.PointSpriteEnable = true; + device.RenderState.PointScaleEnable = true; + device.RenderState.PointSize = 1.0f; + device.RenderState.PointScaleA = 0f; + device.RenderState.PointScaleB = 1.0f; + device.RenderState.PointScaleC = 1.0f; + // Set up the vertex buffer to be rendered + device.SetStreamSource(0, vertexBuffer, 0); + device.VertexFormat = PointVertex.Format; + PointVertex[] vertices = null; + int numParticlesToRender = 0; + // Lock the vertex buffer. We fill the vertex buffer in small + // chunks, using LockFlags.NoOverWrite. When we are done filling + // each chunk, we call DrawPrim, and lock the next chunk. When + // we run out of space in the vertex buffer, we start over at + // the beginning, using LockFlags.Discard. + baseParticle += bufferChunkSize; + if (baseParticle >= maxBufferSize) + baseParticle = 0; + int count = 0; + vertices = (PointVertex[])vertexBuffer.Lock(baseParticle * DXHelp.GetTypeSize(typeof(PointVertex)), typeof(PointVertex), (baseParticle != 0) ? LockFlags.NoOverwrite : LockFlags.Discard, bufferChunkSize); + foreach(Particle p in particlesList) { + Vector3 vPos = p.positionVector; + Vector3 velocityVector = p.velocityVector; + float LengthSq = velocityVector.LengthSq(); + uint steps; + if (LengthSq < 1.0f) steps = 2; + else if (LengthSq < 4.00f) steps = 3; + else if (LengthSq < 9.00f) steps = 4; + else if (LengthSq < 12.25f) steps = 5; + else if (LengthSq < 16.00f) steps = 6; + else if (LengthSq < 20.25f) steps = 7; + else steps = 8; + velocityVector *= -0.01f / (float)steps; + System.Drawing.Color diffuse = ColorOperator.Lerp(p.fadeColor, p.diffuseColor, p.fadeProgression); + // Render each particle a bunch of times to get a blurring effect + for (int i = 0; i < steps; i++) { + vertices[count].v = vPos; + vertices[count].color = diffuse.ToArgb(); + count++; + if (++numParticlesToRender == bufferChunkSize) { + // Done filling this chunk of the vertex buffer. Lets unlock and + // draw this portion so we can begin filling the next chunk. + vertexBuffer.Unlock(); + device.DrawPrimitives(PrimitiveType.PointList, baseParticle, numParticlesToRender); + // Lock the next chunk of the vertex buffer. If we are at the + // end of the vertex buffer, LockFlags.Discard the vertex buffer and start + // at the beginning. Otherwise, specify LockFlags.NoOverWrite, so we can + // continue filling the VB while the previous chunk is drawing. + baseParticle += bufferChunkSize; + if (baseParticle >= maxBufferSize) + baseParticle = 0; + vertices = (PointVertex[])vertexBuffer.Lock(baseParticle * DXHelp.GetTypeSize(typeof(PointVertex)), typeof(PointVertex), (baseParticle != 0) ? LockFlags.NoOverwrite : LockFlags.Discard, bufferChunkSize); + count = 0; + numParticlesToRender = 0; + } + vPos += velocityVector; + } + } + + // Unlock the vertex buffer + vertexBuffer.Unlock(); + // Render any remaining particles + if (numParticlesToRender > 0) + device.DrawPrimitives(PrimitiveType.PointList, baseParticle, numParticlesToRender); + // Reset render states + device.RenderState.PointSpriteEnable = false; + device.RenderState.PointScaleEnable = false; + device.RenderState.Lighting = lightEnabled; + device.RenderState.ZBufferWriteEnable = true; + device.RenderState.AlphaBlendEnable = false; + } + + public void Dispose() { + if (vertexBuffer != null) + vertexBuffer.Dispose(); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/Photon.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/Photon.cs new file mode 100644 index 0000000..b58a745 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/Photon.cs @@ -0,0 +1,107 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// Summary description for Photon. + /// +public class Photon : IDisposable +{ + + private const float maxLife = 5; + public Vector3 Location + { + get + { + + return photonMesh.Position.Location; + } set + { + photonMesh.Position.Location = value; + } + } + + private Vector3 launchVector; + private PositionedMesh photonMesh; + private Device device; + private float age; + public float Age { get { return age; } set { age = value; } } + private bool alive = false; + public bool Alive { get { return alive; } set { alive = value; } } + + private bool disposing = false; + + public Photon(Device device) + { + this.device = device; + + photonMesh = new PositionedMesh(device, "photon.x"); + + alive = false; + age = 0; + } + + public void SetShot(Vector3 position, Vector3 launchVector) + { + age = 0; + alive = true; + photonMesh.Position.Location = position; + this.launchVector = launchVector; + } + + public void UpdatePosition(float elapsedtime) + { + if (disposing) + return; + age += elapsedtime; + if (age >= Constants.ShotLifetime ) + { + this.alive = false; + } + else + { + photonMesh.Position.RotateRel(0, elapsedtime*10,0); + Vector3 moveVector = elapsedtime * Constants.ShotVelocity * launchVector; + photonMesh.Position.MoveRel(moveVector.X, moveVector.Y, moveVector.Z); + } + + } + + public void Render() + { + if (disposing | !alive) + return; + + device.RenderState.Lighting = false; + + device.RenderState.AlphaBlendEnable = true; + device.RenderState.AlphaBlendOperation = BlendOperation.Add; + device.RenderState.AlphaSourceBlend = Blend.One; + device.RenderState.DestinationBlend = Blend.One; + device.Transform.World = photonMesh.Position.WorldMatrix; + photonMesh.Render(); + device.RenderState.AlphaBlendEnable = false; + device.RenderState.Lighting = true; + } + + public void RestoreDeviceObjects() + { + + } + #region IDisposable Members + + public void Dispose() + { + disposing = true; + + if (photonMesh != null) + photonMesh.Dispose(); + + } + + #endregion +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/PlayerUpdateStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/PlayerUpdateStruct.cs new file mode 100644 index 0000000..d021c6e --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/PlayerUpdateStruct.cs @@ -0,0 +1,14 @@ +using System; +using Microsoft.DirectX; + +[Serializable] + public struct PlayerUpdate + { + public Vector3 Location; + public Matrix WorldMatrix; + public int State; + public float WaitCount; + public int DeathCount; + public int Sounds; + public int Score; + } \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/PositionedMesh.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/PositionedMesh.cs new file mode 100644 index 0000000..7f5f278 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/PositionedMesh.cs @@ -0,0 +1,435 @@ +using System; +using System.Drawing; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public class PositionedMesh : IDisposable { + private Device device = null; + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + private Sphere boundingSphere; + + + private WorldPosition worldPosition; + public WorldPosition Position { get { return worldPosition; } set { worldPosition = value; } } + + private float velocity; + public float Velocity { get { return velocity; } set { velocity = value; } } + + /// + /// Constructor + /// + /// The initial filename + public PositionedMesh(string filename) { + fileName = filename; + } + public PositionedMesh() : this ("PositionedMesh") {} + + public PositionedMesh(Device device, string filename) { + Create(device, filename); + } + + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + /// + ///The bounding sphere + /// + public Sphere BoundingSphere { + get { return boundingSphere; } + } + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + worldPosition = new WorldPosition(); + + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + this.device = device; + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + + + + filename = MediaUtilities.FindFile(filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(filename, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + + Mesh tempMesh = null; + string errorString; + tempMesh = Mesh.Clean(CleanType.Optimization, systemMemoryMesh, adjacencyBuffer, adjacencyBuffer, out errorString); + if (tempMesh != systemMemoryMesh) { + systemMemoryMesh.Dispose(); + systemMemoryMesh = tempMesh; + } + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + + // Setup bounding volumes + VertexBuffer vb = systemMemoryMesh.VertexBuffer; + GraphicsStream vertexData = vb.Lock(0, 0, LockFlags.NoSystemLock); + boundingSphere.Radius = Geometry.ComputeBoundingSphere(vertexData,systemMemoryMesh.NumberVertices,systemMemoryMesh.VertexFormat, out boundingSphere.CenterPoint); + vb.Unlock(); + vb.Dispose(); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + + + } + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. + localMemoryMesh = systemMemoryMesh.Clone(MeshFlags.VbWriteOnly | MeshFlags.IbWriteOnly, + systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + // Set the world transform + device.Transform.World = worldPosition.WorldMatrix; + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render() { + Render(true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/RemotePlayer.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/RemotePlayer.cs new file mode 100644 index 0000000..0d36240 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/RemotePlayer.cs @@ -0,0 +1,87 @@ +using System; +using Microsoft.DirectX; + + + /// + /// Holds information about the other players in the game. + /// +public class RemotePlayer +{ + int playerID; + string hostName; + Vector3 startingPosition; + DateTime updateTime; // last tick count at update + bool active = true; // is this player active + + public RemotePlayer(int playerID, string hostName) + { + this.playerID = playerID; + this.hostName = hostName; + } + + public override string ToString() + { + return hostName; + } + + public Vector3 StartingPosition + { + get + { + return startingPosition; + } + set + { + startingPosition = value; + } + } + + public string HostName + { + get + { + return hostName; + } + set + { + hostName = value; + } + } + + public int PlayerID + { + get + { + return playerID; + } + set + { + playerID = value; + } + } + + public DateTime UpdateTime + { + get + { + return updateTime; + } + set + { + updateTime = value; + } + } + + public bool Active + { + get + { + return active; + } + set + { + active = value; + } + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/Ship.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/Ship.cs new file mode 100644 index 0000000..809df6b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/Ship.cs @@ -0,0 +1,421 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// This class handles the drawing and collision detection routines for our ship. + /// +public class Ship { + private Shots shots; + private ShipState state = ShipState.Dead; // current state + public ShipState State { get { lock(this){return state;} } set { lock(this){ state = value; }}} + + private Device device; + private PositionedMesh shipMesh; + + private GameClass game; + private ParticleEffects vaporTrail; + private float velocity; + + private string hostName; + + private float waitCount = 6.0f; // wait count before state transition. + public float WaitCount { get { lock(this){return waitCount; }} set { lock(this){ waitCount = value; }}} + private int score; // our score + + private int deathCount; // # of times we've died... + private float hyperSuccess = Constants.HyperSuccessFactor; // chance of a hyper being successful... + + private Sounds sounds; + private Vector3 startingPosition; + + public Shots ShotHandler { + get { + lock(this) { + return shots; + } + } + } + public int DeathCount { + get { + lock(this) { + return deathCount; + } + } + set { + lock(this) { + deathCount = value; + } + } + } + + public int Score { + get { + lock(this) { + return score; + } + } + set { + lock(this) { + score = value; + } + } + } + + public string HostName { + get { + lock(this) { + return hostName; + } + } + set { + lock(this) { + hostName = value; + } + } + } + + public Vector3 Location { + get { + lock (this) { + return shipMesh.Position.Location; + } + } + set { + lock (this) { + shipMesh.Position.Location = value; + } + } + } + + public Vector3 Rotation { + get { + lock(this) { + return shipMesh.Position.Rotation; + } + } + set { + lock(this) { + shipMesh.Position.Rotation = value; + } + } + } + + public WorldPosition Position { + get { + lock (this) { + return shipMesh.Position; + } + } + set { + lock(this) { + shipMesh.Position=value; + } + } + } + + public float Velocity { + get { + lock (this) { + return velocity; + } + } + set { + lock(this) { + velocity = value; + } + } + } + + + + public Sounds Sounds { + get { + lock(this) { + return sounds; + } + } + set { + lock(this) { + sounds = value; + } + } + } + + public Ship(Device device, GameClass gameClass, HullColors hullColor) { + + this.device = device; + this.game = gameClass; + shots = new Shots(device); + if (hullColor == HullColors.White) { + shipMesh = new PositionedMesh(device, "WhiteShip.x"); + startingPosition = new Vector3(10, 0, 10); + } + else { + shipMesh = new PositionedMesh(device, "RedShip.x"); + startingPosition = new Vector3(-50, 0, -150); + } + vaporTrail = new ParticleEffects(device); + vaporTrail.ParticleTexture = TextureLoader.FromFile(device, + MediaUtilities.FindFile("particle-blue.bmp")); + + + SetRandomPosition(true); + + } + + + public void Shoot() { + if (this.state != ShipState.Normal) { + return; + } + + // find out the location of the front of the ship... + + bool shot = shots.Shoot(this.Position.CombinedLocation, this.Position.Direction); + if (shot) { + sounds |= Sounds.ShipFire; + } + } + + public void SetThrust(bool thrust, float elapsedTime) { + + if (thrust && (state == ShipState.Normal)) { + + if (velocity < Constants.MaxVelocity * 0.1f) + velocity = Constants.MaxVelocity * 0.1f; + if (velocity < Constants.MaxVelocity) + velocity += velocity * Constants.ThrustPower; + if (velocity > Constants.MaxVelocity) + velocity = Constants.MaxVelocity; + sounds |= Sounds.ShipThrust; + } + + else { + velocity -= velocity * elapsedTime * 2; + if (velocity < 0.00005f) + velocity = 0.0f; + + if ((sounds & Sounds.ShipThrust) != 0) + sounds ^= Sounds.ShipThrust; + } + } + + + public void EnterHyper() { + if (state != ShipState.Normal) + return; + + SetState(ShipState.HyperCharge); + } + + public void SetRandomPosition(bool setOriginal) { + if (setOriginal) { + shipMesh.Position.Move(startingPosition); + } + else { + shipMesh.Position.RotateRel(0,Constants.random.Next(100),0); + shipMesh.Position.Move( + Constants.random.Next(1000)-500, + Constants.random.Next(1000)-500, + Constants.random.Next(1000)-500); + } + } + + public void SetState(ShipState newState) { + if (newState == state) + return; + + lock(this) { + + switch (newState) { + case ShipState.Dying: + deathCount++; + waitCount = Constants.DyingCycle; + sounds |= Sounds.ShipExplode; + vaporTrail.UpdateExplosion(450, shipMesh.Position.Location); + break; + + case ShipState.Dead: + waitCount = Constants.DeadCycleWait; + shipMesh.Position.Move(this.startingPosition); + break; + + case ShipState.Normal: + if (state == ShipState.Hyper) { + SetRandomPosition(false); + } + else { + shipMesh.Position.Move(startingPosition); + velocity = 0.0f; + } + hyperSuccess = Constants.HyperSuccessFactor; + shots.Clear(); + sounds |= Sounds.ShipAppear; + break; + + case ShipState.HyperCharge: + sounds |= Sounds.ShipHyper; + waitCount = Constants.HyperChargeWait; + break; + + case ShipState.Hyper: + waitCount = Constants.HyperCycleWait; + break; + } + state = newState; + } + } + + + public void YawPitchRoll(float yawAmount, float pitchAmount, float elapsedTime) { + float absYaw = Math.Abs(yawAmount); + if ( (0 <= absYaw) & (absYaw <= 30)) { + yawAmount = 0; + } + else if ((31 <= absYaw) & (absYaw <= 150)) { + yawAmount *= 1; + } + else { + yawAmount *= 1.2f; + } + + const float sensitivity = 0.002f; + + float yaw = yawAmount * elapsedTime * sensitivity; + + float absPitch = Math.Abs(pitchAmount); + + if ( (0 <= absPitch) & (absPitch <= 30)) { + pitchAmount = 0; + } + else if ((31 <= absPitch) & (absPitch <= 150)) { + pitchAmount *= 1; + } + else { + pitchAmount *= 1.2f; + } + + float pitch = pitchAmount * elapsedTime * sensitivity; + float roll = 0; + + + this.Position.YawPitchRoll(yaw, pitch, roll); + + } + + public void UpdatePosition(float elapsedTime) { + shots.UpdatePosition(elapsedTime); + + if (state == ShipState.Dying) { + vaporTrail.UpdateThrustEffect(elapsedTime,0,Color.White,Color.Black, + this.Position.CombinedLocation); + return; + } + + + if ((state != ShipState.Normal) && + (state != ShipState.HyperCharge)) + return; + + float xAdd = (elapsedTime * velocity * Position.Direction.X); + float yAdd = (elapsedTime * velocity * Position.Direction.Y); + float zAdd = (elapsedTime * velocity * Position.Direction.Z); + + this.Position.MoveRel(xAdd, yAdd, zAdd); + int numTrailParticles = 4; + vaporTrail.UpdateThrustEffect(elapsedTime,numTrailParticles,Color.White,Color.Black, + this.Position.CombinedLocation); + + } + + public void UpdateState(float elapsedTime) { + if (state == ShipState.Dying) { + this.waitCount -= elapsedTime; + if (waitCount <= 0) { + SetState(ShipState.Dead); + } + } + + if (state == ShipState.Dead) { + this.waitCount -= elapsedTime; + if (waitCount <= 0) { + SetState(ShipState.Normal); + } + } + + if (state == ShipState.HyperCharge) { + this.waitCount -= elapsedTime; + shipMesh.Position.RotateRel(0,-elapsedTime * Constants.HyperCycleWait *6.0f, 0); + + if (waitCount <= 0) { + // if we didn't make it, we're dying... + double randValue = Constants.random.NextDouble(); + if (hyperSuccess < randValue) { + SetState(ShipState.Dying); + game.SendPoint(); + } + else { + SetState(ShipState.Hyper); + } + } + } + if (state == ShipState.Hyper) { + this.waitCount -= elapsedTime; + shipMesh.Position.RotateRel(0, -elapsedTime * this.waitCount * 6.0f, 0); + if (waitCount <= 0) { + hyperSuccess -= Constants.HyperSuccessDegradation; + float save = this.hyperSuccess; + SetState(ShipState.Normal); + hyperSuccess = save; + } + } + + } + public void TestShip(Ship otherShip) { + + // if we're not alive, don't do any tests... + if (state != ShipState.Normal) + return; + + // Test if their shots are close enough to us. + if (otherShip.shots.TestShots(this)) { + SetState(ShipState.Dying); + game.SendPoint(); + } + + //Test for collision with ship or it's death explosion + if ((otherShip.state == ShipState.Normal) | (otherShip.state == ShipState.Dying)) { + Vector3 delta = this.Position.Location - otherShip.Position.Location; + if (Vector3.Length(delta) < Constants.ShipCollisionLimit) { + SetState(ShipState.Dying); + game.SendPoint(); + } + } + } + + public void Render() { + switch (this.state) { + case ShipState.Normal: { + device.RenderState.Lighting = true; + device.RenderState.ZBufferEnable = true; + device.Transform.World = shipMesh.Position.WorldMatrix; + shipMesh.Render(); + vaporTrail.Render(); + shots.Render(); + break; + } + case ShipState.Dying: { + vaporTrail.Render(); + break; + } + default: { + return; + } + } + } + +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/ShipSkins.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/ShipSkins.cs new file mode 100644 index 0000000..dbdf432 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/ShipSkins.cs @@ -0,0 +1,6 @@ +public enum HullColors +{ + Red, + White +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/ShipState.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/ShipState.cs new file mode 100644 index 0000000..98585e8 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/ShipState.cs @@ -0,0 +1,13 @@ +using System; + + +public enum ShipState +{ + Normal, + Dying, + Dead, + Hyper, + HyperCharge, +}; + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/ShotUpdateStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/ShotUpdateStruct.cs new file mode 100644 index 0000000..62710bf --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/ShotUpdateStruct.cs @@ -0,0 +1,10 @@ +using System; +using Microsoft.DirectX; + + + public struct ShotUpdate + { + public Vector3[] ShotPosition; + public float[] ShotAge; + public bool [] ShotAlive; + } diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/Shots.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/Shots.cs new file mode 100644 index 0000000..05f011a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/Shots.cs @@ -0,0 +1,126 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + /// + /// Handles the collision detection and returns the array of shots for sending to other players + /// +[Serializable] +public class Shots +{ + + Photon[] shots; + [NonSerialized] + float timeSinceShot = 0; + [NonSerialized] + Rectangle screenBounds; + + + public Shots(Device device) + { + shots = new Photon[Constants.NumShots]; + for (int count = 0; count < Constants.NumShots; count++) + { + shots[count] = new Photon(device); + } + } + + public Rectangle ScreenBounds + { + get + { + return screenBounds; + } + set + { + screenBounds = value; + } + } + public Photon[] GetShotArray() + { + lock(this) + { + return shots; + } + } + + public void SetShotArray(Photon[] shotArray) + { + lock(this) + { + this.shots = shotArray; + } + } + + public bool Shoot(Vector3 position, Vector3 launchVector) + { + if (timeSinceShot < Constants.ShotDeltaTime) + return false; + + timeSinceShot = 0; + + + foreach (Photon shot in shots) + { + if (!shot.Alive) + { + shot.SetShot(position, launchVector); + return true; + } + } + return false; + } + + public void UpdatePosition(float elapsedTime) + { + timeSinceShot += elapsedTime; + + foreach (Photon shot in shots) + { + shot.UpdatePosition(elapsedTime); + } + } + + public void Clear() + { + foreach (Photon shot in shots) + { + shot.Alive = false; + } + } + public bool TestShots(Ship ship) + { + foreach (Photon shot in shots) + { + if (shot.Alive) + { + float distance = Vector3.Length(shot.Location - ship.Position.Location); + if (distance < Constants.ShotCollisionLimit) + { + shot.Alive = false; + return true; + } + } + } + return false; + } + + public void Render() + { + foreach (Photon shot in shots) + { + shot.Render(); + } + } + + public void RestoreDeviceObjects() + { + foreach (Photon shot in shots) + { + shot.RestoreDeviceObjects(); + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/SoundBuffer.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/SoundBuffer.cs new file mode 100644 index 0000000..29dbab6 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/SoundBuffer.cs @@ -0,0 +1,87 @@ +using System; +using Microsoft.DirectX.DirectSound; + + + /// + /// A single sound buffer for use by the SoundHandler class. + /// +public class SoundBuffer +{ + Microsoft.DirectX.DirectSound.Buffer buffer; + Sounds thisSound; + bool looping; + bool lastValue; + + public SoundBuffer(Microsoft.DirectX.DirectSound.Device soundDevice, string filename, Sounds thisSound, bool looping) + { + this.thisSound = thisSound; + this.looping = looping; + + BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + try + { + buffer = new Microsoft.DirectX.DirectSound.Buffer( + filename, + bufferDesc, + soundDevice); + } + catch (Exception e) + { + throw new Exception( + String.Format("Error opening {0}; ", + filename), e); + } + } + + public Sounds Sound + { + get + { + return thisSound; + } + } + + public int Volume + { + get + { + return buffer.Volume; + } + set + { + buffer.Volume = value; + } + } + + public void Play(bool on) + { + // looping sounds don't get restarted + if (looping) + { + if (on) + { + if (!lastValue) + { + buffer.SetCurrentPosition(1000); + buffer.Play(0,BufferPlayFlags.Looping); + } + } + else + { + buffer.Stop(); + } + lastValue = on; + } + else + { + if (on) + { + buffer.SetCurrentPosition(0); + buffer.Play(0,BufferPlayFlags.Default); + } + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/SoundHandler.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/SoundHandler.cs new file mode 100644 index 0000000..2430410 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/SoundHandler.cs @@ -0,0 +1,94 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX.DirectSound; +using System.Collections; + + + /// + /// This class handles loading and playing our sounds. + /// +public class SoundHandler +{ + Device soundDevice; + ArrayList sounds = new ArrayList(); + + Sounds lastSound; + + const int VolumeEngine = -1000; + const int VolumeOtherShot = -2000; + const int VolumeHaHa = -3000; + + + public SoundHandler(Control owner) + { + soundDevice = new Device(); + soundDevice.SetCooperativeLevel(owner,CooperativeLevel.Normal); + CreateSoundBuffers(); + } + + Microsoft.DirectX.DirectSound.Buffer LoadFile(string filename) + { + + Microsoft.DirectX.DirectSound.BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + Microsoft.DirectX.DirectSound.Buffer buffer; + buffer = new Microsoft.DirectX.DirectSound.Buffer(filename, bufferDesc, soundDevice); + + + return buffer; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping, int volume) + { + SoundBuffer buffer; + + buffer = new SoundBuffer( + soundDevice, + filename, + thisSound, + looping); + sounds.Add(buffer); + buffer.Volume = volume; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping) + { + AddBuffer(filename, thisSound, looping, 0); + } + + void CreateSoundBuffers() + { + AddBuffer(MediaUtilities.FindFile("hypercharge.wav"), Sounds.ShipHyper, false); + AddBuffer(MediaUtilities.FindFile("sci fi bass.wav"), Sounds.ShipAppear, false); + AddBuffer(MediaUtilities.FindFile("laser2.wav"), Sounds.ShipFire, false); + AddBuffer(MediaUtilities.FindFile("explode.wav"), Sounds.ShipExplode, false); + + AddBuffer(MediaUtilities.FindFile("engine.wav"), Sounds.ShipThrust, true, VolumeEngine); + AddBuffer(MediaUtilities.FindFile("laser2_other.wav"), Sounds.OtherShipFire, false, VolumeOtherShot); + AddBuffer(MediaUtilities.FindFile("explode_other.wav"), Sounds.OtherShipExplode, false); + AddBuffer(MediaUtilities.FindFile("engine_other.wav"), Sounds.OtherShipThrust, true, VolumeEngine); + + AddBuffer(MediaUtilities.FindFile("sci fi bass.wav"), Sounds.OtherShipAppear, false); + AddBuffer(MediaUtilities.FindFile("haha.wav"), Sounds.Taunt, false, VolumeHaHa); + + AddBuffer(MediaUtilities.FindFile("dude_quest1.wav"), Sounds.Dude1, false); + AddBuffer(MediaUtilities.FindFile("dude_quest2.wav"), Sounds.Dude2, false); + AddBuffer(MediaUtilities.FindFile("dude_quest3.wav"), Sounds.Dude3, false); + AddBuffer(MediaUtilities.FindFile("dude_quest4.wav"), Sounds.Dude4, false); + AddBuffer(MediaUtilities.FindFile("dude_quest5.wav"), Sounds.Dude5, false); + } + + public void Play(Sounds soundsToPlay) + { + // check each enum value. If that value + // is set, play the sound... + foreach (SoundBuffer buffer in sounds) + { + bool on = ((buffer.Sound & soundsToPlay) != 0); + buffer.Play(on); + + } + lastSound = soundsToPlay; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/Sounds.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/Sounds.cs new file mode 100644 index 0000000..b27c175 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/Sounds.cs @@ -0,0 +1,22 @@ +using System; + + +[Flags] +public enum Sounds +{ + ShipAppear = 0x00000001, + ShipHyper = 0x00000002, + ShipFire = 0x00000004, + ShipExplode = 0x00000008, + ShipThrust = 0x00000010, + OtherShipThrust = 0x00000020, + OtherShipExplode = 0x00000040, + OtherShipFire = 0x00000080, + OtherShipAppear = 0x00000100, + Taunt = 0x00000200, + Dude1 = 0x00000400, + Dude2 = 0x00000800, + Dude3 = 0x00001000, + Dude4 = 0x00002000, + Dude5 = 0x00004000, +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/SpaceWar3D.ico b/Source Code updated 08-12-05/Spacewar3D/Step11/SpaceWar3D.ico new file mode 100644 index 0000000..5db9a4d Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Step11/SpaceWar3D.ico differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/Spacewar3D.suo b/Source Code updated 08-12-05/Spacewar3D/Step11/Spacewar3D.suo new file mode 100644 index 0000000..8b0de7c Binary files /dev/null and b/Source Code updated 08-12-05/Spacewar3D/Step11/Spacewar3D.suo differ diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/SphereStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/SphereStruct.cs new file mode 100644 index 0000000..e497052 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/SphereStruct.cs @@ -0,0 +1,7 @@ +using Microsoft.DirectX; + +public struct Sphere +{ + public Vector3 CenterPoint; + public float Radius; +}; \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/SplashScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/SplashScreen.cs new file mode 100644 index 0000000..9c4900d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/SplashScreen.cs @@ -0,0 +1,250 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + + + /// + /// Spacewar Splashscreen + /// + public class SplashScreen : System.Windows.Forms.Form + { + private MainClass mainClass; + private System.Windows.Forms.Button helpButton; + private System.Windows.Forms.Button startButton; + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.Button soloButton; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.CheckBox checkBox1; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + public SplashScreen(MainClass main) + { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + this.mainClass = main; + radioButton3.Checked = true; + checkBox1.Checked = true; + mainClass.GameFormSize = new Size(1024,768); + mainClass.FullScreen = true; + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) + { + if( disposing ) + { + if(components != null) + { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(SplashScreen)); + this.helpButton = new System.Windows.Forms.Button(); + this.startButton = new System.Windows.Forms.Button(); + this.closeButton = new System.Windows.Forms.Button(); + this.soloButton = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // helpButton + // + this.helpButton.ForeColor = System.Drawing.Color.White; + this.helpButton.Location = new System.Drawing.Point(440, 280); + this.helpButton.Name = "helpButton"; + this.helpButton.Size = new System.Drawing.Size(136, 32); + this.helpButton.TabIndex = 5; + this.helpButton.Text = "Show Help"; + this.helpButton.Click += new System.EventHandler(this.helpButton_Click); + // + // startButton + // + this.startButton.ForeColor = System.Drawing.Color.White; + this.startButton.Location = new System.Drawing.Point(440, 364); + this.startButton.Name = "startButton"; + this.startButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.startButton.Size = new System.Drawing.Size(136, 32); + this.startButton.TabIndex = 7; + this.startButton.Text = "Network Play"; + this.startButton.Click += new System.EventHandler(this.startButton_Click); + // + // closeButton + // + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.ForeColor = System.Drawing.Color.White; + this.closeButton.Location = new System.Drawing.Point(440, 406); + this.closeButton.Name = "closeButton"; + this.closeButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.closeButton.Size = new System.Drawing.Size(136, 32); + this.closeButton.TabIndex = 8; + this.closeButton.Text = "Exit"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // soloButton + // + this.soloButton.ForeColor = System.Drawing.Color.White; + this.soloButton.Location = new System.Drawing.Point(440, 322); + this.soloButton.Name = "soloButton"; + this.soloButton.Size = new System.Drawing.Size(136, 32); + this.soloButton.TabIndex = 6; + this.soloButton.Text = "Solo Play"; + this.soloButton.Click += new System.EventHandler(this.soloButton_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.radioButton3); + this.groupBox1.Controls.Add(this.radioButton2); + this.groupBox1.Controls.Add(this.radioButton1); + this.groupBox1.ForeColor = System.Drawing.Color.White; + this.groupBox1.Location = new System.Drawing.Point(16, 320); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(128, 128); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Screen Resolution"; + // + // checkBox1 + // + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(16, 96); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.TabIndex = 3; + this.checkBox1.Text = "Full Screen"; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // radioButton3 + // + this.radioButton3.Checked = true; + this.radioButton3.ForeColor = System.Drawing.Color.White; + this.radioButton3.Location = new System.Drawing.Point(16, 72); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(80, 24); + this.radioButton3.TabIndex = 2; + this.radioButton3.TabStop = true; + this.radioButton3.Text = "1024 x 768"; + this.radioButton3.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton2 + // + this.radioButton2.ForeColor = System.Drawing.Color.White; + this.radioButton2.Location = new System.Drawing.Point(16, 48); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(72, 24); + this.radioButton2.TabIndex = 1; + this.radioButton2.Text = "800 x 600"; + this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton1 + // + this.radioButton1.ForeColor = System.Drawing.Color.White; + this.radioButton1.Location = new System.Drawing.Point(16, 24); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(72, 24); + this.radioButton1.TabIndex = 0; + this.radioButton1.Text = "640 x 480"; + this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // SplashScreen + // + this.AcceptButton = this.soloButton; + this.AutoScale = false; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.Black; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(594, 454); + this.ControlBox = false; + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.soloButton); + this.Controls.Add(this.closeButton); + this.Controls.Add(this.startButton); + this.Controls.Add(this.helpButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(600, 460); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(600, 460); + this.Name = "SplashScreen"; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + private void helpButton_Click(object sender, System.EventArgs e) + { + HelpScreen helpScreen = new HelpScreen(); + helpScreen.ShowDialog(); + } + + private void startButton_Click(object sender, System.EventArgs e) + { + mainClass.EnableNetwork = true; + this.Close(); + } + + private void closeButton_Click(object sender, System.EventArgs e) + { + Environment.Exit(0); + } + + private void soloButton_Click(object sender, System.EventArgs e) + { + mainClass.EnableNetwork = false; + this.Close(); + } + + private void radioButton_CheckedChanged(object sender, System.EventArgs e) + { + RadioButton btn = (RadioButton)sender; + Console.WriteLine(btn.ToString()); + if (btn.Checked) + { + if (btn == radioButton1) + mainClass.GameFormSize = new Size(640,480); + if (btn == radioButton2) + mainClass.GameFormSize = new Size(800, 600); + if (btn == radioButton3) + mainClass.GameFormSize = new Size(1024, 768); + } + } + + private void checkBox1_CheckedChanged(object sender, System.EventArgs e) + { + mainClass.FullScreen = checkBox1.Checked; + } + } diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/SplashScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step11/SplashScreen.resx new file mode 100644 index 0000000..18fad73 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/SplashScreen.resx @@ -0,0 +1,4715 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + False + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + False + + + 80 + + + True + + + Private + + + SplashScreen + + + + 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 + AElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/Step11.csproj b/Source Code updated 08-12-05/Spacewar3D/Step11/Step11.csproj new file mode 100644 index 0000000..5bdc131 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/Step11.csproj @@ -0,0 +1,360 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/Step11.sln b/Source Code updated 08-12-05/Spacewar3D/Step11/Step11.sln new file mode 100644 index 0000000..699bfcc --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/Step11.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Step11", "Step11.csproj", "{DE8FEF2E-6E28-4456-9712-68437802A747}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.ActiveCfg = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.Build.0 = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.ActiveCfg = Release|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/WorldPosition.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/WorldPosition.cs new file mode 100644 index 0000000..8387596 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/WorldPosition.cs @@ -0,0 +1,241 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + +[Serializable] +public class WorldPosition +{ + public float XPos {get { return xPos; } set { xPos = value; } } + public float YPos {get { return yPos; } set { yPos = value; } } + public float ZPos {get { return zPos; } set { zPos = value; } } + + public float XRotation { get { return xRotation; } set { xRotation = value; } } + public float YRotation { get { return yRotation; } set { yRotation = value; } } + public float ZRotation { get { return zRotation; } set { zRotation = value; } } + + public float XScale { get { return xScale; } set { xScale = value; } } + public float YScale { get { return yScale; } set { yScale = value; } } + public float ZScale { get { return zScale; } set { zScale = value; } } + + + public Matrix WorldMatrix { get { Update(); return worldMatrix; } + set + { + worldMatrix = value; + Location = Vector3.TransformCoordinate(new Vector3(0,0,0), worldMatrix); + Point(Location, Location+Direction); + Roll(Location, Location+Up); + } + } + + public Vector3 Direction + { + get + { + Vector3 directionVector= new Vector3(0,0,1); + return Vector3.TransformNormal(directionVector, worldMatrix); + } + } + + public Vector3 Up + { + get + { + Vector3 upVector = new Vector3(0,1,0); + return Vector3.TransformNormal(upVector,worldMatrix); + } + } + public Vector3 Right + { + get + { + Vector3 rightVector = new Vector3(1,0,0); + return Vector3.TransformNormal(rightVector,worldMatrix); + } + } + + public Vector3 Location + { + get + { + return new Vector3( xPos, yPos, zPos ); + } + set + { + Move(value); + } + } + + public Vector3 Rotation + { + get + { + return new Vector3( xRotation, yRotation, zRotation); + } + set + { + Rotate(value); + } + } + + + + private float xPos, yPos, zPos = 0.0f; + private float xRotation, yRotation, zRotation = 0.0f; + private float xScale, yScale, zScale = 0.0f; + + private Matrix worldMatrix, scaleMatrix, rotationMatrix = Matrix.Identity; + private Matrix translationMatrix = Matrix.Identity; + private Matrix combineMatrix1, combineMatrix2; + + public Matrix CombineMatrix1 { get { return combineMatrix1; } set { combineMatrix1 = value; } } + public Matrix CombineMatrix2 { get { return combineMatrix2; } set { combineMatrix2 = value; } } + + + public WorldPosition() + { + + Move(0.0f, 0.0f, 0.0f); + Rotate(0.0f, 0.0f, 0.0f); + Scale(1.0f, 1.0f, 1.0f); + combineMatrix1 = combineMatrix2 = Matrix.Zero; + + Update(); + + } + + public Vector3 CombinedLocation + { + get + { + Update(); + return new Vector3(worldMatrix.M41,worldMatrix.M42,worldMatrix.M43); + } + } + + public void Move( Vector3 newPosition ) + { + Move( newPosition.X, newPosition.Y, newPosition.Z ); + } + + public void Move( float x, float y, float z ) + { + xPos = x; + yPos = y; + zPos = z; + + translationMatrix = Matrix.Translation( xPos, yPos, zPos ); + } + + public void MoveRel( float x, float y, float z ) + { + Move(xPos + x, yPos + y, zPos + z ); + } + + public void Rotate( Vector3 newDirection ) + { + Rotate(newDirection.X, newDirection.Y, newDirection.Z); + } + + public void Point(Vector3 pointAtLocation) + { + Point(xPos, yPos, zPos, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(Vector3 currentLocation, Vector3 pointAtLocation) + { + Point(currentLocation.X, currentLocation.Y, currentLocation.Z, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) + { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } + + public void Roll(Vector3 Location, Vector3 UpVector) + { + float xDiff, yDiff; + xDiff = Location.X - UpVector.X; + yDiff = Location.Y - UpVector.Y; + zRotation = (float) Math.Atan2(xDiff, yDiff); + } + + + + + public void Rotate( float x, float y, float z ) + { + xRotation = x; + yRotation = y; + zRotation = z; + + rotationMatrix = Matrix.RotationYawPitchRoll( yRotation, xRotation, zRotation ); + } + + public void RotateRel( float x, float y, float z ) + { + Rotate( xRotation + x, yRotation + y, zRotation + z ); + } + + //YawPitchRoll rotates an object relative to its own orthonormal basis vectors + public void YawPitchRoll( float yaw, float pitch, float roll) + { + + Matrix yawMatrix = Matrix.RotationAxis(this.Up, yaw); + Matrix pitchMatrix = Matrix.RotationAxis(this.Right, pitch); + Matrix rollMatrix = Matrix.RotationAxis(this.Direction, roll); + + Matrix ypr = yawMatrix * pitchMatrix * rollMatrix; + rotationMatrix *= ypr; + + + } + + public void Scale( float x, float y, float z ) + { + xScale = x; + yScale = y; + zScale = z; + + scaleMatrix = Matrix.Scaling( xScale, yScale, zScale ); + + } + + public void ScaleRel( float x, float y, float z ) + { + Scale( xScale + x, yScale + y, zScale + z ); + } + + + public void Update() + { + + Matrix m; + + + + m = scaleMatrix; + m *= rotationMatrix; + m *= translationMatrix; + if (combineMatrix1 != Matrix.Zero) + m *= combineMatrix1; + if (combineMatrix2 != Matrix.Zero) + m *= combineMatrix2; + + worldMatrix = m; + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/d3dapp.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/d3dapp.cs new file mode 100644 index 0000000..9384434 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/d3dapp.cs @@ -0,0 +1,1517 @@ +//----------------------------------------------------------------------------- +// File: D3DApp.cs +// +// Desc: Application class for the Direct3D samples framework library. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + +/// +/// The base class for all the graphics (D3D) samples, it derives from windows forms +/// +public class GraphicsSample : System.Windows.Forms.Form { + #region Menu Information + // The menu items that *all* samples will need + protected System.Windows.Forms.MainMenu mnuMain; + protected System.Windows.Forms.MenuItem mnuFile; + private System.Windows.Forms.MenuItem mnuGo; + private System.Windows.Forms.MenuItem mnuSingle; + private System.Windows.Forms.MenuItem mnuBreak1; + private System.Windows.Forms.MenuItem mnuChange; + private System.Windows.Forms.MenuItem mnuBreak2; + protected System.Windows.Forms.MenuItem mnuExit; + #endregion + + // The window we will render too + private System.Windows.Forms.Control ourRenderTarget; + // Should we use the default windows + protected bool isUsingMenus = true; + + // We need to keep track of our enumeration settings + protected D3DEnumeration enumerationSettings = new D3DEnumeration(); + protected D3DSettings graphicsSettings = new D3DSettings(); + private bool isMaximized = false; // Are we maximized? + private bool isHandlingSizeChanges = true; // Are we handling size changes? + private bool isClosing = false; // Are we closing? + private bool isChangingFormStyle = false; // Are we changing the forms style? + private bool isWindowActive = true; // Are we waiting for got focus? + + private float lastTime = 0.0f; // The last time + private int frames = 0; // Number of frames since our last update + private int appPausedCount = 0; // How many times has the app been paused (and when can it resume)? + + // Internal variables for the state of the app + protected bool windowed; + protected bool active; + protected bool ready; + protected bool hasFocus; + protected bool isMultiThreaded = false; + + // Internal variables used for timing + protected bool frameMoving; + protected bool singleStep; + // Main objects used for creating and rendering the 3D scene + protected PresentParameters presentParams = new PresentParameters(); // Parameters for CreateDevice/Reset + protected Device device; // The rendering device + protected RenderStateManager renderState; + protected SamplerStateManagerCollection sampleState; + protected TextureStateManagerCollection textureStates; + private Caps graphicsCaps; // Caps for the device + protected Caps Caps { get { return graphicsCaps; } } + private CreateFlags behavior; // Indicate sw or hw vertex processing + protected BehaviorFlags BehaviorFlags { get { return new BehaviorFlags(behavior); } } + protected System.Windows.Forms.Control RenderTarget { get { return ourRenderTarget; } set { ourRenderTarget = value; } } + + // Variables for timing + protected float appTime; // Current time in seconds + protected float elapsedTime; // Time elapsed since last frame + protected float framePerSecond; // Instanteous frame rate + protected string deviceStats;// String to hold D3D device stats + protected string frameStats; // String to hold frame stats + + private bool deviceLost = false; + + // Overridable variables for the app + private int minDepthBits; // Minimum number of bits needed in depth buffer + protected int MinDepthBits { get { return minDepthBits; } set { minDepthBits = value; enumerationSettings.AppMinDepthBits = value;} } + private int minStencilBits; // Minimum number of bits needed in stencil buffer + protected int MinStencilBits { get { return minStencilBits; } set { minStencilBits = value; enumerationSettings.AppMinStencilBits = value;} } + protected bool showCursorWhenFullscreen; // Whether to show cursor when fullscreen + protected bool clipCursorWhenFullscreen; // Whether to limit cursor pos when fullscreen + protected bool startFullscreen; // Whether to start up the app in fullscreen mode + + private System.Drawing.Size storedSize; + private System.Drawing.Point storedLocation; + + // Overridable functions for the 3D scene created by the app + protected virtual bool ConfirmDevice(Caps caps, VertexProcessingType vertexProcessingType, + Format adapterFormat, Format backBufferFormat) { return true; } + protected virtual void OneTimeSceneInitialization() { /* Do Nothing */ } + protected virtual void InitializeDeviceObjects() { /* Do Nothing */ } + protected virtual void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void FrameMove() { /* Do Nothing */ } + protected virtual void Render() { /* Do Nothing */ } + protected virtual void InvalidateDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void DeleteDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + + + + + /// + /// Constructor + /// + public GraphicsSample() { + device = null; + active = false; + ready = false; + hasFocus = false; + behavior = 0; + + ourRenderTarget = this; + frameMoving = true; + singleStep = false; + framePerSecond = 0.0f; + deviceStats = null; + frameStats = null; + + this.Text = "D3D9 Sample"; + this.ClientSize = new System.Drawing.Size(400,300); + this.KeyPreview = true; + + minDepthBits = 16; + minStencilBits = 0; + showCursorWhenFullscreen = false; + startFullscreen = false; + + // When clipCursorWhenFullscreen is TRUE, the cursor is limited to + // the device window when the app goes fullscreen. This prevents users + // from accidentally clicking outside the app window on a multimon system. + // This flag is turned off by default for debug builds, since it makes + // multimon debugging difficult. +#if (DEBUG) + clipCursorWhenFullscreen = false; +#else + clipCursorWhenFullscreen = true; +#endif + InitializeComponent(); + } + + + + + /// + /// Picks the best graphics device, and initializes it + /// + /// true if a good device was found, false otherwise + public bool CreateGraphicsSample() { + enumerationSettings.ConfirmDeviceCallback = new D3DEnumeration.ConfirmDeviceCallbackType(this.ConfirmDevice); + enumerationSettings.Enumerate(); + + if (ourRenderTarget.Cursor == null) { + // Set up a default cursor + ourRenderTarget.Cursor = System.Windows.Forms.Cursors.Default; + } + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + + try { + ChooseInitialSettings(); + + // Initialize the application timer + DXUtil.Timer(DirectXTimer.Start); + // Initialize the app's custom scene stuff + OneTimeSceneInitialization(); + // Initialize the 3D environment for the app + InitializeEnvironment(); + } + catch (SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + return false; + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + return false; + } + + // The app is ready to go + ready = true; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available windowed mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestWindowedMode(bool doesRequireHardware, bool doesRequireReference) { + // Get display mode of primary adapter (which is assumed to be where the window + // will appear) + DisplayMode primaryDesktopDisplayMode = Manager.Adapters[0].CurrentDisplayMode; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + if (!deviceCombo.IsWindowed) + continue; + if (deviceCombo.AdapterFormat != primaryDesktopDisplayMode.Format) + continue; + + // If we haven't found a compatible DeviceCombo yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + deviceCombo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + // This windowed device combo looks great -- take it + goto EndWindowedDeviceComboSearch; + } + // Otherwise keep looking for a better windowed device combo + } + } + } + } + + EndWindowedDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + graphicsSettings.WindowedAdapterInfo = bestAdapterInfo; + graphicsSettings.WindowedDeviceInfo = bestDeviceInfo; + graphicsSettings.WindowedDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = true; + graphicsSettings.WindowedDisplayMode = primaryDesktopDisplayMode; + graphicsSettings.WindowedWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + graphicsSettings.WindowedHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.WindowedDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.WindowedMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.WindowedMultisampleQuality = 0; + graphicsSettings.WindowedVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.WindowedPresentInterval = (PresentInterval)bestDeviceCombo.PresentIntervalList[0]; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available fullscreen mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestFullscreenMode(bool doesRequireHardware, bool doesRequireReference) { + // For fullscreen, default to first HAL DeviceCombo that supports the current desktop + // display mode, or any display mode if HAL is not compatible with the desktop mode, or + // non-HAL if no HAL is available + DisplayMode adapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestAdapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestDisplayMode = new DisplayMode(); + bestAdapterDesktopDisplayMode.Width = 0; + bestAdapterDesktopDisplayMode.Height = 0; + bestAdapterDesktopDisplayMode.Format = 0; + bestAdapterDesktopDisplayMode.RefreshRate = 0; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + adapterDesktopDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + bool adapterMatchesDesktop = (deviceCombo.AdapterFormat == adapterDesktopDisplayMode.Format); + if (deviceCombo.IsWindowed) + continue; + + // If we haven't found a compatible set yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + bestDeviceCombo.DevType == DeviceType.Hardware && bestDeviceCombo.AdapterFormat != adapterDesktopDisplayMode.Format && adapterMatchesDesktop || + bestDeviceCombo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + bestAdapterDesktopDisplayMode = adapterDesktopDisplayMode; + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + // This fullscreen device combo looks great -- take it + goto EndFullscreenDeviceComboSearch; + } + // Otherwise keep looking for a better fullscreen device combo + } + } + } + } + + EndFullscreenDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + // Need to find a display mode on the best adapter that uses pBestDeviceCombo->AdapterFormat + // and is as close to bestAdapterDesktopDisplayMode's res as possible + bestDisplayMode.Width = 0; + bestDisplayMode.Height = 0; + bestDisplayMode.Format = 0; + bestDisplayMode.RefreshRate = 0; + foreach (DisplayMode displayMode in bestAdapterInfo.DisplayModeList) { + if (displayMode.Format != bestDeviceCombo.AdapterFormat) + continue; + if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate == bestAdapterDesktopDisplayMode.RefreshRate) { + // found a perfect match, so stop + bestDisplayMode = displayMode; + break; + } + else if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate > bestDisplayMode.RefreshRate) { + // refresh rate doesn't match, but width/height match, so keep this + // and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == bestAdapterDesktopDisplayMode.Width) { + // width matches, so keep this and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == 0) { + // we don't have anything better yet, so keep this and keep looking + bestDisplayMode = displayMode; + } + } + + graphicsSettings.FullscreenAdapterInfo = bestAdapterInfo; + graphicsSettings.FullscreenDeviceInfo = bestDeviceInfo; + graphicsSettings.FullscreenDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = false; + graphicsSettings.FullscreenDisplayMode = bestDisplayMode; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.FullscreenDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.FullscreenMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.FullscreenMultisampleQuality = 0; + graphicsSettings.FullscreenVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.FullscreenPresentInterval = PresentInterval.Default; + + return true; + } + + + + + /// + /// Choose the initial settings for the application + /// + /// true if the settings were initialized + public bool ChooseInitialSettings() { + bool foundFullscreenMode = FindBestFullscreenMode(false, false); + bool foundWindowedMode = FindBestWindowedMode(false, false); + if (startFullscreen && foundFullscreenMode) + graphicsSettings.IsWindowed = false; + + if (!foundFullscreenMode && !foundWindowedMode) + throw new NoCompatibleDevicesException(); + + return (foundFullscreenMode || foundWindowedMode); + } + + + + + /// + /// Build presentation parameters from the current settings + /// + public void BuildPresentParamsFromSettings() { + presentParams.Windowed = graphicsSettings.IsWindowed; + presentParams.BackBufferCount = 1; + presentParams.MultiSample = graphicsSettings.MultisampleType; + presentParams.MultiSampleQuality = graphicsSettings.MultisampleQuality; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.EnableAutoDepthStencil = enumerationSettings.AppUsesDepthBuffer; + presentParams.AutoDepthStencilFormat = graphicsSettings.DepthStencilBufferFormat; + presentParams.PresentFlag = PresentFlag.None; + + if (windowed) { + presentParams.BackBufferWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + presentParams.BackBufferHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = 0; + presentParams.PresentationInterval = PresentInterval.Immediate; + presentParams.DeviceWindow = ourRenderTarget; + } + else { + presentParams.BackBufferWidth = graphicsSettings.DisplayMode.Width; + presentParams.BackBufferHeight = graphicsSettings.DisplayMode.Height; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = graphicsSettings.DisplayMode.RefreshRate; + presentParams.PresentationInterval = graphicsSettings.PresentInterval; + presentParams.DeviceWindow = this; + } + } + + + + + /// + /// Initialize the graphics environment + /// + public void InitializeEnvironment() { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + GraphicsDeviceInfo deviceInfo = graphicsSettings.DeviceInfo; + + windowed = graphicsSettings.IsWindowed; + + // Set up the presentation parameters + BuildPresentParamsFromSettings(); + + if (deviceInfo.Caps.PrimitiveMiscCaps.IsNullReference) { + // Warn user about null ref device that can't render anything + HandleSampleException(new NullReferenceDeviceException(), ApplicationMessage.None); + } + + CreateFlags createFlags = new CreateFlags(); + if (graphicsSettings.VertexProcessingType == VertexProcessingType.Software) + createFlags = CreateFlags.SoftwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Mixed) + createFlags = CreateFlags.MixedVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Hardware) + createFlags = CreateFlags.HardwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.PureHardware) { + createFlags = CreateFlags.HardwareVertexProcessing; + } + else + throw new ApplicationException(); +#if (DX9) +#else + // Make sure to allow multithreaded apps if we need them + presentParams.ForceNoMultiThreadedFlag = !isMultiThreaded; +#endif + try { + // Create the device + device = new Device(graphicsSettings.AdapterOrdinal, graphicsSettings.DevType, + windowed ? ourRenderTarget : this , createFlags, presentParams); + + // Cache our local objects + renderState = device.RenderState; + sampleState = device.SamplerState; + textureStates = device.TextureState; + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after recreating the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + if (windowed) { + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + } + + // Store device Caps + graphicsCaps = device.DeviceCaps; + behavior = createFlags; + + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + // Store device description + if (deviceInfo.DevType == DeviceType.Reference) + sb.Append("REF"); + else if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append("HAL"); + else if (deviceInfo.DevType == DeviceType.Software) + sb.Append("SW"); + + BehaviorFlags behaviorFlags = new BehaviorFlags(createFlags); + if ((behaviorFlags.HardwareVertexProcessing) && + (behaviorFlags.PureDevice)) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (pure hw vp)"); + else + sb.Append(" (simulated pure hw vp)"); + } + else if (behaviorFlags.HardwareVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (hw vp)"); + else + sb.Append(" (simulated hw vp)"); + } + else if (behaviorFlags.MixedVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (mixed vp)"); + else + sb.Append(" (simulated mixed vp)"); + } + else if (behaviorFlags.SoftwareVertexProcessing) { + sb.Append(" (sw vp)"); + } + + if (deviceInfo.DevType == DeviceType.Hardware) { + sb.Append(": "); + sb.Append(adapterInfo.AdapterDetails.Description); + } + + // Set device stats string + deviceStats = sb.ToString(); + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // Confine cursor to fullscreen window + if (clipCursorWhenFullscreen) { + if (!windowed) { + System.Drawing.Rectangle rcWindow = this.ClientRectangle; + } + } + + // Setup the event handlers for our device + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + device.Disposing += new System.EventHandler(this.DeleteDeviceObjects); + device.DeviceResizing += new System.ComponentModel.CancelEventHandler(this.EnvironmentResized); + + // Initialize the app's device-dependent objects + try { + InitializeDeviceObjects(); + RestoreDeviceObjects(null, null); + active = true; + return; + } + catch { + // Cleanup before we try again + InvalidateDeviceObjects(null, null); + DeleteDeviceObjects(null, null); + device.Dispose(); + device = null; + if (this.Disposing) + return; + } + } + catch { + // If that failed, fall back to the reference rasterizer + if (deviceInfo.DevType == DeviceType.Hardware) { + if (FindBestWindowedMode(false, true)) { + windowed = true; + + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + + // Let the user know we are switching from HAL to the reference rasterizer + HandleSampleException(null, ApplicationMessage.WarnSwitchToRef); + + InitializeEnvironment(); + } + } + } + } + + + + + /// + /// Displays sample exceptions to the user + /// + /// The exception that was thrown + /// Extra information on how to handle the exception + public void HandleSampleException(SampleException e, ApplicationMessage Type) { + // Build a message to display to the user + string strMsg = string.Empty; + if (e != null) + strMsg = e.Message; + + if (ApplicationMessage.ApplicationMustExit == Type) { + strMsg += "\n\nThis sample will now exit."; + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + + // Close the window, which shuts down the app + if (this.IsHandleCreated) + this.Close(); + } + else { + if (ApplicationMessage.WarnSwitchToRef == Type) + strMsg = "\n\nSwitching to the reference rasterizer,\n"; + strMsg += "a software device that implements the entire\n"; + strMsg += "Direct3D feature set, but runs very slowly."; + + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + } + } + + + + + /// + /// Fired when our environment was resized + /// + /// the device that's resizing our environment + /// Set the cancel member to true to turn off automatic device reset + public void EnvironmentResized(object sender, System.ComponentModel.CancelEventArgs e) { + // Check to see if we're closing or changing the form style + if ((isClosing) || (isChangingFormStyle)) { + // We are, cancel our reset, and exit + e.Cancel = true; + return; + } + + // Check to see if we're minimizing and our rendering object + // is not the form, if so, cancel the resize + if ((ourRenderTarget != this) && (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)) + e.Cancel = true; + + if (!isWindowActive) + e.Cancel = true; + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + } + + + + + /// + /// Called when user toggles between fullscreen mode and windowed mode + /// + public void ToggleFullscreen() { + int AdapterOrdinalOld = graphicsSettings.AdapterOrdinal; + DeviceType DevTypeOld = graphicsSettings.DevType; + + isHandlingSizeChanges = false; + isChangingFormStyle = true; + ready = false; + + // Toggle the windowed state + windowed = !windowed; + + // Save our maximized settings.. + if (!windowed && isMaximized) + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + + graphicsSettings.IsWindowed = windowed; + + // If AdapterOrdinal and DevType are the same, we can just do a Reset(). + // If they've changed, we need to do a complete device teardown/rebuild. + if (graphicsSettings.AdapterOrdinal == AdapterOrdinalOld && + graphicsSettings.DevType == DevTypeOld) { + BuildPresentParamsFromSettings(); + // Resize the 3D device + RETRY: + try { + device.Reset(presentParams); + } + catch { + if (windowed) + ForceWindowed(); + else { + // Sit in a loop until the device passes Reset() + try { + device.TestCooperativeLevel(); + } + catch(DeviceNotResetException) { + // Device still needs to be Reset. Try again. + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + goto RETRY; + } + } + } + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + else { + device.Dispose(); + device = null; + InitializeEnvironment(); + } + + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after resetting the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + + if (windowed) { + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; + isChangingFormStyle = false; + + // We were maximized, restore that state + if (isMaximized) { + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + } + this.SendToBack(); + this.BringToFront(); + this.ClientSize = storedSize; + this.Location = storedLocation; + } + else { + if (this.Menu != null) + this.Menu = null; + + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + isChangingFormStyle = false; + } + isHandlingSizeChanges = true; + ready = true; + } + + + + + /// + /// Switch to a windowed mode, even if that means picking a new device and/or adapter + /// + public void ForceWindowed() { + if (windowed) + return; + + if (!FindBestWindowedMode(false, false)) { + return; + } + windowed = true; + + // Now destroy the current 3D device objects, then reinitialize + + ready = false; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Create the new device + try { + InitializeEnvironment(); + } + catch (SampleException e) { + HandleSampleException(e,ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(),ApplicationMessage.ApplicationMustExit); + } + ready = true; + } + + + + + /// + /// Called when our sample has nothing else to do, and it's time to render + /// + private void FullRender() { + // Render a frame during idle time (no messages are waiting) + if (active && ready) { + try { + if ((deviceLost) || (System.Windows.Forms.Form.ActiveForm != this)) { + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + } + // Render a frame during idle time + if (active) { + Render3DEnvironment(); + } + } + catch (Exception ee) { + System.Windows.Forms.MessageBox.Show("An exception has occurred. This sample must exit.\r\n\r\n" + ee.ToString(), "Exception", + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + this.Close(); + } + } + } + + + + + /// + /// Run the simulation + /// + public void Run() { + // Now we're ready to recieve and process Windows messages. + System.Windows.Forms.Control mainWindow = this; + + // If the render target is a form and *not* this form, use that form instead, + // otherwise, use the main form. + if ((ourRenderTarget is System.Windows.Forms.Form) && (ourRenderTarget != this)) + mainWindow = ourRenderTarget; + + mainWindow.Show(); + while (mainWindow.Created) { + FullRender(); + System.Windows.Forms.Application.DoEvents(); + } + } + + + + + /// + /// Draws the scene + /// + public void Render3DEnvironment() { + if (deviceLost) { + try { + // Test the cooperative level to see if it's okay to render + device.TestCooperativeLevel(); + } + catch (DeviceLostException) { + // If the device was lost, do not render until we get it back + isHandlingSizeChanges = false; + isWindowActive = false; + return; + } + catch (DeviceNotResetException) { + // Check if the device needs to be resized. + + // If we are windowed, read the desktop mode and use the same format for + // the back buffer + if (windowed) { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + graphicsSettings.WindowedDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + presentParams.BackBufferFormat = graphicsSettings.WindowedDisplayMode.Format; + } + + // Reset the device and resize it + device.Reset(device.PresentationParameters); + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + deviceLost = false; + } + + // Get the app's time, in seconds. Skip rendering if no time elapsed + float fAppTime = DXUtil.Timer(DirectXTimer.GetApplicationTime); + float fElapsedAppTime = DXUtil.Timer(DirectXTimer.GetElapsedTime); + if ((0.0f == fElapsedAppTime) && frameMoving) + return; + + // FrameMove (animate) the scene + if (frameMoving || singleStep) { + // Store the time for the app + appTime = fAppTime; + elapsedTime = fElapsedAppTime; + + // Frame move the scene + FrameMove(); + + singleStep = false; + } + + // Render the scene as normal + Render(); + + UpdateStats(); + + try { + // Show the frame on the primary surface. + device.Present(); + } + catch(DeviceLostException) { + deviceLost = true; + } + } + + + + + /// + /// Update the various statistics the simulation keeps track of + /// + public void UpdateStats() { + // Keep track of the frame count + float time = DXUtil.Timer(DirectXTimer.GetAbsoluteTime); + ++frames; + + // Update the scene stats once per second + if (time - lastTime > 1.0f) { + framePerSecond = frames / (time - lastTime); + lastTime = time; + frames = 0; + + string strFmt; + Format fmtAdapter = graphicsSettings.DisplayMode.Format; + if (fmtAdapter == device.PresentationParameters.BackBufferFormat) { + strFmt = fmtAdapter.ToString(); + } + else { + strFmt = String.Format("backbuf {0}, adapter {1}", + device.PresentationParameters.BackBufferFormat.ToString(), fmtAdapter.ToString()); + } + + string strDepthFmt; + if (enumerationSettings.AppUsesDepthBuffer) { + strDepthFmt = String.Format(" ({0})", + graphicsSettings.DepthStencilBufferFormat.ToString()); + } + else { + // No depth buffer + strDepthFmt = ""; + } + + string strMultiSample; + switch (graphicsSettings.MultisampleType) { + case Direct3D.MultiSampleType.NonMaskable: strMultiSample = " (NonMaskable Multisample)"; break; + case Direct3D.MultiSampleType.TwoSamples: strMultiSample = " (2x Multisample)"; break; + case Direct3D.MultiSampleType.ThreeSamples: strMultiSample = " (3x Multisample)"; break; + case Direct3D.MultiSampleType.FourSamples: strMultiSample = " (4x Multisample)"; break; + case Direct3D.MultiSampleType.FiveSamples: strMultiSample = " (5x Multisample)"; break; + case Direct3D.MultiSampleType.SixSamples: strMultiSample = " (6x Multisample)"; break; + case Direct3D.MultiSampleType.SevenSamples: strMultiSample = " (7x Multisample)"; break; + case Direct3D.MultiSampleType.EightSamples: strMultiSample = " (8x Multisample)"; break; + case Direct3D.MultiSampleType.NineSamples: strMultiSample = " (9x Multisample)"; break; + case Direct3D.MultiSampleType.TenSamples: strMultiSample = " (10x Multisample)"; break; + case Direct3D.MultiSampleType.ElevenSamples: strMultiSample = " (11x Multisample)"; break; + case Direct3D.MultiSampleType.TwelveSamples: strMultiSample = " (12x Multisample)"; break; + case Direct3D.MultiSampleType.ThirteenSamples: strMultiSample = " (13x Multisample)"; break; + case Direct3D.MultiSampleType.FourteenSamples: strMultiSample = " (14x Multisample)"; break; + case Direct3D.MultiSampleType.FifteenSamples: strMultiSample = " (15x Multisample)"; break; + case Direct3D.MultiSampleType.SixteenSamples: strMultiSample = " (16x Multisample)"; break; + default: strMultiSample = string.Empty; break; + } + frameStats = String.Format("{0} fps ({1}x{2}), {3}{4}{5}", framePerSecond.ToString("f2"), + device.PresentationParameters.BackBufferWidth, device.PresentationParameters.BackBufferHeight, + strFmt, strDepthFmt, strMultiSample); + } + } + + + + + /// + /// Called in to toggle the pause state of the app. + /// + /// true if the simulation should pause + public void Pause(bool pause) { + appPausedCount += (int)(pause ? +1 : -1); + ready = ((appPausedCount > 0) ? false : true); + + // Handle the first pause request (of many, nestable pause requests) + if (pause && (1 == appPausedCount)) { + // Stop the scene from animating + if (frameMoving) + DXUtil.Timer(DirectXTimer.Stop); + } + + if (0 == appPausedCount) { + // Restart the timers + if (frameMoving) + DXUtil.Timer(DirectXTimer.Start); + } + } + + + + + /// + /// Set our variables to not active and not ready + /// + public void CleanupEnvironment() { + active = false; + ready = false; + if (device != null) + device.Dispose(); + + device = null; + } + #region Menu EventHandlers + + + + + /// + /// Prepares the simulation for a new device being selected + /// + public void UserSelectNewDevice(object sender, EventArgs e) { + // Prompt the user to select a new device or mode + if (active && ready) { + Pause(true); + DoSelectNewDevice(); + Pause(false); + } + } + + + + + /// + /// Displays a dialog so the user can select a new adapter, device, or + /// display mode, and then recreates the 3D environment if needed + /// + private void DoSelectNewDevice() { + isHandlingSizeChanges = false; + // Can't display dialogs in fullscreen mode + if (windowed == false) { + try { + ToggleFullscreen(); + isHandlingSizeChanges = false; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + return; + } + } + + // Make sure the main form is in the background + this.SendToBack(); + D3DSettingsForm settingsForm = new D3DSettingsForm(enumerationSettings, graphicsSettings); + System.Windows.Forms.DialogResult result = settingsForm.ShowDialog(null); + if (result != System.Windows.Forms.DialogResult.OK) { + isHandlingSizeChanges = true; + return; + } + graphicsSettings = settingsForm.settings; + + windowed = graphicsSettings.IsWindowed; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Inform the display class of the change. It will internally + // re-create valid surfaces, a d3ddevice, etc. + try { + InitializeEnvironment(); + } + catch(SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + isHandlingSizeChanges = true; + } + + + + + /// + /// Will start (or stop) simulation + /// + private void ToggleStart(object sender, EventArgs e) { + //Toggle frame movement + frameMoving = !frameMoving; + DXUtil.Timer(frameMoving ? DirectXTimer.Start : DirectXTimer.Stop); + } + + + + + /// + /// Will single step the simulation + /// + private void SingleStep(object sender, EventArgs e) { + // Single-step frame movement + if (false == frameMoving) + DXUtil.Timer(DirectXTimer.Advance); + else + DXUtil.Timer(DirectXTimer.Stop); + frameMoving = false; + singleStep = true; + } + + + + + /// + /// Will end the simulation + /// + private void ExitSample(object sender, EventArgs e) { + this.Close(); + } + #endregion + + + + + #region WinForms Overrides + /// + /// Clean up any resources + /// + protected override void Dispose(bool disposing) { + CleanupEnvironment(); + mnuMain.Dispose(); + base.Dispose(disposing); + } + + + + + /// + /// Handle any key presses + /// + protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) { + // Check for our shortcut keys (Return to start or stop) + if (e.KeyChar == '\r') { + mnuGo.PerformClick(); + e.Handled = true; + } + + // Check for our shortcut keys (Escape to quit) + if ((byte)e.KeyChar == (byte)(int)System.Windows.Forms.Keys.Escape) { + mnuExit.PerformClick(); + e.Handled = true; + } + + // Allow the control to handle the keystroke now + base.OnKeyPress(e); + } + + + + + /// + /// Handle system keystrokes (ie, alt-enter) + /// + protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e) { + if ((e.Alt) && (e.KeyCode == System.Windows.Forms.Keys.Return)) { + // Toggle the fullscreen/window mode + if (active && ready) { + Pause(true); + + try { + ToggleFullscreen(); + Pause(false); + return; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + } + finally { + e.Handled = true; + } + } + } + // Allow the control to handle the keystroke now + base.OnKeyDown(e); + } + + + + + /// + /// Winforms generated code for initializing the form + /// + private void InitializeComponent() { + // + // GraphicsSample + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.MinimumSize = new System.Drawing.Size(100, 100); + #region MenuCreation/etc + this.mnuMain = new System.Windows.Forms.MainMenu(); + this.mnuFile = new System.Windows.Forms.MenuItem(); + this.mnuGo = new System.Windows.Forms.MenuItem(); + this.mnuSingle = new System.Windows.Forms.MenuItem(); + this.mnuBreak1 = new System.Windows.Forms.MenuItem(); + this.mnuChange = new System.Windows.Forms.MenuItem(); + this.mnuBreak2 = new System.Windows.Forms.MenuItem(); + this.mnuExit = new System.Windows.Forms.MenuItem(); + // + // mainMenu1 + // + this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuFile}); + // + // mnuFile + // + this.mnuFile.Index = 0; + this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuGo, + this.mnuSingle, + this.mnuBreak1, + this.mnuChange, + this.mnuBreak2, + this.mnuExit}); + this.mnuFile.Text = "&File"; + // + // mnuGo + // + this.mnuGo.Index = 0; + this.mnuGo.Text = "&Go/stop\tEnter"; + this.mnuGo.Click += new System.EventHandler(this.ToggleStart); + // + // mnuSingle + // + this.mnuSingle.Index = 1; + this.mnuSingle.Text = "&Single step\tSpace"; + this.mnuSingle.Click += new System.EventHandler(this.SingleStep); + // + // mnuBreak1 + // + this.mnuBreak1.Index = 2; + this.mnuBreak1.Text = "-"; + // + // mnuChange + // + this.mnuChange.Index = 3; + this.mnuChange.Shortcut = System.Windows.Forms.Shortcut.F2; + this.mnuChange.ShowShortcut = true; + this.mnuChange.Text = "&Change Device..."; + this.mnuChange.Click += new System.EventHandler(this.UserSelectNewDevice); + // + // mnuBreak2 + // + this.mnuBreak2.Index = 4; + this.mnuBreak2.Text = "-"; + // + // mnuExit + // + this.mnuExit.Index = 5; + this.mnuExit.Text = "E&xit\tESC"; + this.mnuExit.Click += new System.EventHandler(this.ExitSample); + #endregion + } + + + + + /// + /// When the menu is starting pause our simulation + /// + protected override void OnMenuStart(System.EventArgs e) { + Pause(true); // Pause the simulation while the menu starts + } + + + + + /// + /// When the menu is complete our simulation can continue + /// + protected override void OnMenuComplete(System.EventArgs e) { + Pause(false); // Unpause the simulation + } + + + + + /// + /// Make sure our graphics cursor (if available) moves with the cursor + /// + protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e) { + if ((device != null) && (!device.Disposed)) { + // Move the D3D cursor + device.SetCursorPosition(e.X, e.Y, false); + } + // Let the control handle the mouse now + base.OnMouseMove(e); + } + + + + + /// + /// Handle size changed events + /// + protected override void OnSizeChanged(System.EventArgs e) { + this.OnResize(e); + base.OnSizeChanged(e); + } + + + + + /// + /// Handle resize events + /// + protected override void OnResize(System.EventArgs e) { + if (isHandlingSizeChanges) { + // Are we maximized? + isMaximized = (this.WindowState == System.Windows.Forms.FormWindowState.Maximized); + if (!isMaximized) { + storedSize = this.ClientSize; + storedLocation = this.Location; + } + } + active = !(this.WindowState == System.Windows.Forms.FormWindowState.Minimized || this.Visible == false); + base.OnResize(e); + } + + + + + /// + /// Once the form has focus again, we can continue to handle our resize + /// and resets.. + /// + protected override void OnGotFocus(System.EventArgs e) { + isHandlingSizeChanges = true; + isWindowActive = true; + base.OnGotFocus (e); + } + + + + + /// + /// Handle move events + /// + protected override void OnMove(System.EventArgs e) { + if (isHandlingSizeChanges) { + storedLocation = this.Location; + } + base.OnMove(e); + } + + + + + /// + /// Handle closing event + /// + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { + isClosing = true; + base.OnClosing(e); + } + #endregion + + +} + +#region Enums for D3D Applications +/// +/// Messages that can be used when displaying an error +/// +public enum ApplicationMessage { + None, + ApplicationMustExit, + WarnSwitchToRef +}; +#endregion + + + + +#region Various SampleExceptions +/// +/// The default sample exception type +/// +public class SampleException : System.ApplicationException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + + strMsg = "Generic application error. Enable\n"; + strMsg += "debug output for detailed information."; + + return strMsg; + } + } +} + + + + +/// +/// Exception informing user no compatible devices were found +/// +public class NoCompatibleDevicesException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "This sample cannot run in a desktop\n"; + strMsg += "window with the current display settings.\n"; + strMsg += "Please change your desktop settings to a\n"; + strMsg += "16- or 32-bit display mode and re-run this\n"; + strMsg += "sample."; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when the ReferenceDevice is null +/// +public class NullReferenceDeviceException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Warning: Nothing will be rendered.\n"; + strMsg += "The reference rendering device was selected, but your\n"; + strMsg += "computer only has a reduced-functionality reference device\n"; + strMsg += "installed. Install the DirectX SDK to get the full\n"; + strMsg += "reference device.\n"; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when reset fails +/// +public class ResetFailedException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not reset the Direct3D device."; + + return strMsg; + } + } +} + + + + +/// +/// The exception thrown when media couldn't be found +/// +public class MediaNotFoundException : SampleException { + private string mediaFile; + public MediaNotFoundException(string filename) : base() { + mediaFile = filename; + } + public MediaNotFoundException() : base() { + mediaFile = string.Empty; + } + + + + + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not load required media."; + if (mediaFile.Length > 0) + strMsg += string.Format("\r\nFile: {0}", mediaFile); + + return strMsg; + } + } +} +#endregion + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/d3dapp.resx b/Source Code updated 08-12-05/Spacewar3D/Step11/d3dapp.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/d3dapp.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/d3denumeration.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/d3denumeration.cs new file mode 100644 index 0000000..47c1c6a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/d3denumeration.cs @@ -0,0 +1,449 @@ +//----------------------------------------------------------------------------- +// File: D3DEnumeration.cs +// +// Desc: Enumerates D3D adapters, devices, modes, etc. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + + + +/// +/// Enumeration of all possible D3D vertex processing types +/// +public enum VertexProcessingType { + Software, + Mixed, + Hardware, + PureHardware +} + + + + +/// +/// Info about a display adapter +/// +public class GraphicsAdapterInfo { + public int AdapterOrdinal; + public AdapterDetails AdapterDetails; + public ArrayList DisplayModeList = new ArrayList(); // List of D3DDISPLAYMODEs + public ArrayList DeviceInfoList = new ArrayList(); // List of D3DDeviceInfos + public override string ToString() { return AdapterDetails.Description; } +} + + + + +/// +/// Info about a D3D device, including a list of DeviceCombos (see below) +/// that work with the device +/// +public class GraphicsDeviceInfo { + public int AdapterOrdinal; + public DeviceType DevType; + public Caps Caps; + public ArrayList DeviceComboList = new ArrayList(); // List of D3DDeviceCombos + public override string ToString() { return DevType.ToString(); } +} + + + + +/// +/// Info about a depth/stencil buffer format that is incompatible with a +/// multisample type +/// +public class DepthStencilMultiSampleConflict { + public DepthFormat DepthStencilFormat; + public MultiSampleType MultiSampleType; +} + + + + +/// +/// A combination of adapter format, back buffer format, and windowed/fullscreen +/// that is compatible with a particular D3D device (and the app) +/// +public class DeviceCombo { + public int AdapterOrdinal; + public DeviceType DevType; + public Format AdapterFormat; + public Format BackBufferFormat; + public bool IsWindowed; + public ArrayList DepthStencilFormatList = new ArrayList(); // List of D3DFORMATs + public ArrayList MultiSampleTypeList = new ArrayList(); // List of D3DMULTISAMPLE_TYPEs + public ArrayList MultiSampleQualityList = new ArrayList(); // List of ints (maxQuality per multisample type) + public ArrayList DepthStencilMultiSampleConflictList = new ArrayList(); // List of DepthStencilMultiSampleConflicts + public ArrayList VertexProcessingTypeList = new ArrayList(); // List of VertexProcessingTypes + public ArrayList PresentIntervalList = new ArrayList(); // List of D3DPRESENT_INTERVALs +} + + + + +/// +/// Used to sort Displaymodes +/// +class DisplayModeComparer : System.Collections.IComparer { + /// + /// Compare two display modes + /// + public int Compare(object x, object y) { + DisplayMode dx = (DisplayMode)x; + DisplayMode dy = (DisplayMode)y; + + if (dx.Width > dy.Width) + return 1; + if (dx.Width < dy.Width) + return -1; + if (dx.Height > dy.Height) + return 1; + if (dx.Height < dy.Height) + return -1; + if (dx.Format > dy.Format) + return 1; + if (dx.Format < dy.Format) + return -1; + if (dx.RefreshRate > dy.RefreshRate) + return 1; + if (dx.RefreshRate < dy.RefreshRate) + return -1; + return 0; + } +} + + + + +/// +/// Enumerates available adapters, devices, modes, etc. +/// +public class D3DEnumeration { + /// + /// The confirm device delegate which is used to determine if a device + /// meets the needs of the simulation + /// + public delegate bool ConfirmDeviceCallbackType(Caps caps, + VertexProcessingType vertexProcessingType, Format adapterFormat, + Format backBufferFormat); + + public ConfirmDeviceCallbackType ConfirmDeviceCallback; + public ArrayList AdapterInfoList = new ArrayList(); // List of D3DAdapterInfos + + // The following variables can be used to limit what modes, formats, + // etc. are enumerated. Set them to the values you want before calling + // Enumerate(). + public int AppMinFullscreenWidth = 640; + public int AppMinFullscreenHeight = 480; + public int AppMinColorChannelBits = 5; // min color bits per channel in adapter format + public int AppMinAlphaChannelBits = 0; // min alpha bits per pixel in back buffer format + public int AppMinDepthBits = 15; + public int AppMinStencilBits = 0; + public bool AppUsesDepthBuffer = true; + public bool AppUsesMixedVP = false; // whether app can take advantage of mixed vp mode + public bool AppRequiresWindowed = false; + public bool AppRequiresFullscreen = false; + + + + + /// + /// Enumerates available D3D adapters, devices, modes, etc. + /// + public void Enumerate() { + foreach (AdapterInformation ai in Manager.Adapters) { + ArrayList adapterFormatList = new ArrayList(); + GraphicsAdapterInfo adapterInfo = new GraphicsAdapterInfo(); + adapterInfo.AdapterOrdinal = ai.Adapter; + adapterInfo.AdapterDetails = ai.Information; + + // Get list of all display modes on this adapter. + // Also build a temporary list of all display adapter formats. + foreach (DisplayMode displayMode in ai.SupportedDisplayModes) { + if (displayMode.Width < AppMinFullscreenWidth) + continue; + if (displayMode.Height < AppMinFullscreenHeight) + continue; + if (GraphicsUtility.GetColorChannelBits(displayMode.Format) < AppMinColorChannelBits) + continue; + adapterInfo.DisplayModeList.Add(displayMode); + if (!adapterFormatList.Contains(displayMode.Format)) + adapterFormatList.Add(displayMode.Format); + } + + // Sort displaymode list + DisplayModeComparer dmc = new DisplayModeComparer(); + adapterInfo.DisplayModeList.Sort(dmc); + + // Get info for each device on this adapter + EnumerateDevices(adapterInfo, adapterFormatList); + + // If at least one device on this adapter is available and compatible + // with the app, add the adapterInfo to the list + if (adapterInfo.DeviceInfoList.Count == 0) + continue; + AdapterInfoList.Add(adapterInfo); + } + } + + + + + /// + /// Enumerates D3D devices for a particular adapter + /// + protected void EnumerateDevices(GraphicsAdapterInfo adapterInfo, ArrayList adapterFormatList) { + DeviceType[] devTypeArray = new DeviceType[] { + DeviceType.Hardware, DeviceType.Software, DeviceType.Reference }; + + foreach (DeviceType devType in devTypeArray) { + GraphicsDeviceInfo deviceInfo = new GraphicsDeviceInfo(); + deviceInfo.AdapterOrdinal = adapterInfo.AdapterOrdinal; + deviceInfo.DevType = devType; + try { + deviceInfo.Caps = Manager.GetDeviceCaps(adapterInfo.AdapterOrdinal, devType); + } + catch (DirectXException) { + continue; + } + + // Get info for each devicecombo on this device + EnumerateDeviceCombos(deviceInfo, adapterFormatList); + + // If at least one devicecombo for this device is found, + // add the deviceInfo to the list + if (deviceInfo.DeviceComboList.Count == 0) + continue; + adapterInfo.DeviceInfoList.Add(deviceInfo); + } + } + + + + + /// + /// Enumerates DeviceCombos for a particular device + /// + protected void EnumerateDeviceCombos(GraphicsDeviceInfo deviceInfo, ArrayList adapterFormatList) { + Format[] backBufferFormatArray = new Format[] { + Format.A8R8G8B8, Format.X8R8G8B8, Format.A2R10G10B10, + Format.R5G6B5, Format.A1R5G5B5, Format.X1R5G5B5, + }; + bool[] isWindowedArray = new bool[] { false, true }; + + // See which adapter formats are supported by this device + foreach (Format adapterFormat in adapterFormatList) { + foreach (Format backBufferFormat in backBufferFormatArray) { + if (GraphicsUtility.GetAlphaChannelBits(backBufferFormat) < AppMinAlphaChannelBits) + continue; + foreach (bool isWindowed in isWindowedArray) { + if (!isWindowed && AppRequiresWindowed) + continue; + if (isWindowed && AppRequiresFullscreen) + continue; + if (!Manager.CheckDeviceType(deviceInfo.AdapterOrdinal, deviceInfo.DevType, adapterFormat, backBufferFormat, isWindowed)) { + continue; + } + + // At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed + // DeviceCombo that is supported by the system. We still need to confirm that it's + // compatible with the app, and find one or more suitable depth/stencil buffer format, + // multisample type, vertex processing type, and present interval. + DeviceCombo deviceCombo = new DeviceCombo(); + deviceCombo.AdapterOrdinal = deviceInfo.AdapterOrdinal; + deviceCombo.DevType = deviceInfo.DevType; + deviceCombo.AdapterFormat = adapterFormat; + deviceCombo.BackBufferFormat = backBufferFormat; + deviceCombo.IsWindowed = isWindowed; + if (AppUsesDepthBuffer) { + BuildDepthStencilFormatList(deviceCombo); + if (deviceCombo.DepthStencilFormatList.Count == 0) + continue; + } + BuildMultiSampleTypeList(deviceCombo); + if (deviceCombo.MultiSampleTypeList.Count == 0) + continue; + BuildDepthStencilMultiSampleConflictList(deviceCombo); + BuildVertexProcessingTypeList(deviceInfo, deviceCombo); + if (deviceCombo.VertexProcessingTypeList.Count == 0) + continue; + BuildPresentIntervalList(deviceInfo, deviceCombo); + if (deviceCombo.PresentIntervalList.Count == 0) + continue; + + deviceInfo.DeviceComboList.Add(deviceCombo); + } + } + } + } + + + + + /// + /// Adds all depth/stencil formats that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildDepthStencilFormatList(DeviceCombo deviceCombo) { + DepthFormat[] depthStencilFormatArray = { + DepthFormat.D16, + DepthFormat.D15S1, + DepthFormat.D24X8, + DepthFormat.D24S8, + DepthFormat.D24X4S4, + DepthFormat.D32, + }; + + foreach (DepthFormat depthStencilFmt in depthStencilFormatArray) { + if (GraphicsUtility.GetDepthBits(depthStencilFmt) < AppMinDepthBits) + continue; + if (GraphicsUtility.GetStencilBits(depthStencilFmt) < AppMinStencilBits) + continue; + if (Manager.CheckDeviceFormat(deviceCombo.AdapterOrdinal, deviceCombo.DevType, deviceCombo.AdapterFormat, + Usage.DepthStencil, ResourceType.Surface, depthStencilFmt)) { + if (Manager.CheckDepthStencilMatch(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat, depthStencilFmt)) { + deviceCombo.DepthStencilFormatList.Add(depthStencilFmt); + } + } + } + } + + + + + /// + /// Adds all multisample types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildMultiSampleTypeList(DeviceCombo deviceCombo) { + MultiSampleType[] msTypeArray = { + MultiSampleType.None, + MultiSampleType.NonMaskable, + MultiSampleType.TwoSamples, + MultiSampleType.ThreeSamples, + MultiSampleType.FourSamples, + MultiSampleType.FiveSamples, + MultiSampleType.SixSamples, + MultiSampleType.SevenSamples, + MultiSampleType.EightSamples, + MultiSampleType.NineSamples, + MultiSampleType.TenSamples, + MultiSampleType.ElevenSamples, + MultiSampleType.TwelveSamples, + MultiSampleType.ThirteenSamples, + MultiSampleType.FourteenSamples, + MultiSampleType.FifteenSamples, + MultiSampleType.SixteenSamples, + }; + + foreach (MultiSampleType msType in msTypeArray) { + int result; + int qualityLevels = 0; + if (Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.BackBufferFormat, deviceCombo.IsWindowed, msType, out result, out qualityLevels)) { + deviceCombo.MultiSampleTypeList.Add(msType); + deviceCombo.MultiSampleQualityList.Add(qualityLevels); + } + } + } + + + + + /// + /// Finds any depthstencil formats that are incompatible with multisample types and + /// builds a list of them. + /// + public void BuildDepthStencilMultiSampleConflictList(DeviceCombo deviceCombo) { + DepthStencilMultiSampleConflict DSMSConflict; + + foreach (DepthFormat dsFmt in deviceCombo.DepthStencilFormatList) { + foreach (MultiSampleType msType in deviceCombo.MultiSampleTypeList) { + if (!Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, + deviceCombo.DevType, (Format)dsFmt, deviceCombo.IsWindowed, msType)) { + DSMSConflict = new DepthStencilMultiSampleConflict(); + DSMSConflict.DepthStencilFormat = dsFmt; + DSMSConflict.MultiSampleType = msType; + deviceCombo.DepthStencilMultiSampleConflictList.Add(DSMSConflict); + } + } + } + } + + + + + /// + /// Adds all vertex processing types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildVertexProcessingTypeList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + if (deviceInfo.Caps.DeviceCaps.SupportsHardwareTransformAndLight) { + if (deviceInfo.Caps.DeviceCaps.SupportsPureDevice) { + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.PureHardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.PureHardware); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Hardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Hardware); + } + if (AppUsesMixedVP && (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Mixed, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat))) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Mixed); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Software, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Software); + } + } + + + + + /// + /// Adds all present intervals that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildPresentIntervalList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + PresentInterval[] piArray = { + PresentInterval.Immediate, + PresentInterval.Default, + PresentInterval.One, + PresentInterval.Two, + PresentInterval.Three, + PresentInterval.Four, + }; + + foreach (PresentInterval pi in piArray) { + if (deviceCombo.IsWindowed) { + if (pi == PresentInterval.Two || + pi == PresentInterval.Three || + pi == PresentInterval.Four) { + // These intervals are not supported in windowed mode. + continue; + } + } + // Note that PresentInterval.Default is zero, so you + // can't do a caps check for it -- it is always available. + if (pi == PresentInterval.Default || + (deviceInfo.Caps.PresentationIntervals & pi) != (PresentInterval)0) { + deviceCombo.PresentIntervalList.Add(pi); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/d3dfont.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/d3dfont.cs new file mode 100644 index 0000000..2b374eb --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/d3dfont.cs @@ -0,0 +1,666 @@ +//----------------------------------------------------------------------------- +// File: D3DFont.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// A generic font class +/// +public class GraphicsFont { + public const int MaxNumfontVertices = 50*6; + + // Font rendering flags + [System.Flags] + public enum RenderFlags { + Centered = 0x0001, + TwoSided = 0x0002, + Filtered = 0x0004, + } + private System.Drawing.Font systemFont; + + private bool isZEnable = false; + public bool ZBufferEnable { get { return isZEnable; } set { isZEnable = value; } } + string ourFontName; // Font properties + int ourFontHeight; + + private Direct3D.Device device; + private TextureStateManager textureState0; + private TextureStateManager textureState1; + private SamplerStateManager samplerState0; + private RenderStateManager renderState; + private Direct3D.Texture fontTexture; + private Direct3D.VertexBuffer vertexBuffer; + private CustomVertex.TransformedColoredTextured[] fontVertices = new CustomVertex.TransformedColoredTextured[MaxNumfontVertices]; + + private int textureWidth; // Texture dimensions + private int textureHeight; + private float textureScale; + private int spacingPerChar; + private float[,] textureCoords = new float[128-32,4]; + + // Stateblocks for setting and restoring render states + private StateBlock savedStateBlock; + private StateBlock drawTextStateBlock; + + + + + /// + /// Create a new font object + /// + /// The font to use + public GraphicsFont(System.Drawing.Font f) { + ourFontName = f.Name; + ourFontHeight = (int)f.Size; + systemFont = f; + } + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName) : this(fontName, FontStyle.Regular, 12) { + } + + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName, FontStyle style) : this(fontName, style, 12) { + } + + + + + /// + /// Create a new font object + /// + /// The name of the font + /// The style + /// Size of the font + public GraphicsFont(string fontName, FontStyle style, int size) { + ourFontName = fontName; + ourFontHeight = size; + systemFont = new System.Drawing.Font(fontName, ourFontHeight, style); + } + + + + + /// + /// Attempt to draw the systemFont alphabet onto the provided texture + /// graphics. + /// + /// Graphics object on which to draw and measure the letters + /// If set, the method will test to see if the alphabet will fit without actually drawing + public void PaintAlphabet(Graphics g, bool measureOnly) { + string str; + float x = 0; + float y = 0; + Point p = new Point(0, 0); + Size size = new Size(0,0); + + // Calculate the spacing between characters based on line height + size = g.MeasureString(" ", systemFont).ToSize(); + x = spacingPerChar = (int) Math.Ceiling(size.Height * 0.3); + + for (char c = (char)32; c < (char)127; c++) { + str = c.ToString(); + // We need to do some things here to get the right sizes. The default implemententation of MeasureString + // will return a resolution independant size. For our height, this is what we want. However, for our width, we + // want a resolution dependant size. + Size resSize = g.MeasureString(str, systemFont).ToSize(); + size.Height = resSize.Height + 1; + + // Now the Resolution independent width + if (c != ' ') { // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + resSize = g.MeasureString(str, systemFont, p, StringFormat.GenericTypographic).ToSize(); + size.Width = resSize.Width; + } + else + size.Width = resSize.Width; + + if ((x + size.Width + spacingPerChar) > textureWidth) { + x = spacingPerChar; + y += size.Height; + } + + // Make sure we have room for the current character + if ((y + size.Height) > textureHeight) + throw new System.InvalidOperationException("Texture too small for alphabet"); + + if (!measureOnly) { + if (c != ' ') // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y), StringFormat.GenericTypographic); + else + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y)); + textureCoords[c-32,0] = ((float) (x + 0 - spacingPerChar)) / textureWidth; + textureCoords[c-32,1] = ((float) (y + 0 + 0)) / textureHeight; + textureCoords[c-32,2] = ((float) (x + size.Width + spacingPerChar)) / textureWidth; + textureCoords[c-32,3] = ((float) (y + size.Height + 0)) / textureHeight; + } + + x += size.Width + (2 * spacingPerChar); + } + + } + + + + + /// + /// Initialize the device objects + /// + /// The grpahics device used to initialize + public void InitializeDeviceObjects(Device dev) { + if (dev != null) { + // Set up our events + dev.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Keep a local copy of the device + device = dev; + textureState0 = device.TextureState[0]; + textureState1 = device.TextureState[1]; + samplerState0 = device.SamplerState[0]; + renderState = device.RenderState; + + // Create a bitmap on which to measure the alphabet + Bitmap bmp = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Graphics g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Establish the font and texture size + textureScale = 1.0f; // Draw fonts into texture without scaling + + // Calculate the dimensions for the smallest power-of-two texture which + // can hold all the printable characters + textureWidth = textureHeight = 128; + for (;;) { + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // Scale up the texture size and try again + textureWidth *= 2; + textureHeight *= 2; + continue; + } + + break; + } + + // If requested texture is too big, use a smaller texture and smaller font, + // and scale up when rendering. + Direct3D.Caps d3dCaps = device.DeviceCaps; + + // If the needed texture is too large for the video card... + if (textureWidth > d3dCaps.MaxTextureWidth) { + // Scale the font size down to fit on the largest possible texture + textureScale = (float)d3dCaps.MaxTextureWidth / (float)textureWidth; + textureWidth = textureHeight = d3dCaps.MaxTextureWidth; + + for(;;) { + // Create a new, smaller font + ourFontHeight = (int) Math.Floor(ourFontHeight * textureScale); + systemFont = new System.Drawing.Font(systemFont.Name, ourFontHeight, systemFont.Style); + + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // If that still doesn't fit, scale down again and continue + textureScale *= 0.9F; + continue; + } + + break; + } + } + + // Release the bitmap used for measuring and create one for drawing + bmp.Dispose(); + bmp = new Bitmap(textureWidth, textureHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Draw the alphabet + PaintAlphabet(g, false); + + // Create a new texture for the font from the bitmap we just created + fontTexture = Texture.FromBitmap(device, bmp, 0, Pool.Managed); + RestoreDeviceObjects(null, null); + } + + + + + /// + /// Restore the font after a device has been reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColoredTextured), MaxNumfontVertices, + device, Usage.WriteOnly | Usage.Dynamic, 0, Pool.Default); + + Surface surf = device.GetRenderTarget( 0 ); + bool bSupportsAlphaBlend = Manager.CheckDeviceFormat(device.DeviceCaps.AdapterOrdinal, + device.DeviceCaps.DeviceType, device.DisplayMode.Format, + Usage.RenderTarget | Usage.QueryPostPixelShaderBlending, ResourceType.Surface, + surf.Description.Format ); + + // Create the state blocks for rendering text + for (int which=0; which < 2; which++) { + device.BeginStateBlock(); + device.SetTexture(0, fontTexture); + + if (isZEnable) + renderState.ZBufferEnable = true; + else + renderState.ZBufferEnable = false; + + if( bSupportsAlphaBlend ) { + renderState.AlphaBlendEnable = true; + renderState.SourceBlend = Blend.SourceAlpha; + renderState.DestinationBlend = Blend.InvSourceAlpha; + } + else { + renderState.AlphaBlendEnable = false; + } + renderState.AlphaTestEnable = true; + renderState.ReferenceAlpha = 0x08; + renderState.AlphaFunction = Compare.GreaterEqual; + renderState.FillMode = FillMode.Solid; + renderState.CullMode = Cull.CounterClockwise; + renderState.StencilEnable = false; + renderState.Clipping = true; + device.ClipPlanes.DisableAll(); + renderState.VertexBlend = VertexBlend.Disable; + renderState.IndexedVertexBlendEnable = false; + renderState.FogEnable = false; + renderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; + textureState0.ColorOperation = TextureOperation.Modulate; + textureState0.ColorArgument1 = TextureArgument.TextureColor; + textureState0.ColorArgument2 = TextureArgument.Diffuse; + textureState0.AlphaOperation = TextureOperation.Modulate; + textureState0.AlphaArgument1 = TextureArgument.TextureColor; + textureState0.AlphaArgument2 = TextureArgument.Diffuse; + textureState0.TextureCoordinateIndex = 0; + textureState0.TextureTransform = TextureTransform.Disable; // REVIEW + textureState1.ColorOperation = TextureOperation.Disable; + textureState1.AlphaOperation = TextureOperation.Disable; + samplerState0.MinFilter = TextureFilter.Point; + samplerState0.MagFilter = TextureFilter.Point; + samplerState0.MipFilter = TextureFilter.None; + + if (which==0) + savedStateBlock = device.EndStateBlock(); + else + drawTextStateBlock = device.EndStateBlock(); + } + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text) { + DrawText(xpos, ypos, color, text, RenderFlags.Filtered); + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text, RenderFlags flags) { + if (text == null) + return; + + // Setup renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.SetTexture(0, fontTexture); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Adjust for character spacing + xpos -= spacingPerChar; + float fStartX = xpos; + + // Fill vertex buffer + int iv = 0; + int dwNumTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / textureScale; + float h = (ty2-ty1) * textureHeight / textureScale; + + int intColor = color.ToArgb(); + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + dwNumTriangles += 2; + + if (dwNumTriangles*3 > (MaxNumfontVertices-6)) { + // Set the data for the vertexbuffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + dwNumTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar); + } + + // Set the data for the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (dwNumTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + Viewport vp = device.Viewport; + float xpos = (x+1.0f)*vp.Width/2; + float ypos = (y+1.0f)*vp.Height/2; + float sz = z; + float rhw = 1.0f; + float fLineHeight = (textureCoords[0,3] - textureCoords[0,1]) * textureHeight; + + // Adjust for character spacing + xpos -= spacingPerChar * (fXScale*vp.Height)/fLineHeight; + float fStartX = xpos; + + // Fill vertex buffer + int numTriangles = 0; + int realColor = color.ToArgb(); + int iv = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += fYScale*vp.Height; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1)*textureWidth; + float h = (ty2-ty1)*textureHeight; + + w *= (fXScale*vp.Height)/fLineHeight; + h *= (fYScale*vp.Height)/fLineHeight; + + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + numTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar) * (fXScale*vp.Height)/fLineHeight; + } + + // Unlock and render the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text) { + this.DrawTextScaled(x,y,z,fXScale, fYScale, color, text, 0); + } + + + + + /// + /// Renders 3D text + /// + public void Render3DText(string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.PositionNormalTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0, VertexInformation.GetFormatSize(CustomVertex.PositionNormalTextured.Format)); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Position for each text element + float x = 0.0f; + float y = 0.0f; + + // Center the text block at the origin + if ((flags & RenderFlags.Centered) != 0) { + System.Drawing.SizeF sz = GetTextExtent(text); + x = -(((float)sz.Width)/10.0f)/2.0f; + y = -(((float)sz.Height)/10.0f)/2.0f; + } + + // Turn off culling for two-sided text + if ((flags & RenderFlags.TwoSided) != 0) + renderState.CullMode = Cull.None; + + // Adjust for character spacing + x -= spacingPerChar / 10.0f; + float fStartX = x; + + // Fill vertex buffer + GraphicsStream strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + int numTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + x = fStartX; + y -= (textureCoords[0,3]-textureCoords[0,1])*textureHeight/10.0f; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / (10.0f * textureScale); + float h = (ty2-ty1) * textureHeight / (10.0f * textureScale); + + if (c != ' ') { + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+0,0), new Vector3(0,0,-1), tx1, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+h,0), new Vector3(0,0,-1), tx2, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.Unlock(); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + numTriangles = 0; + } + } + + x += w - (2 * spacingPerChar) / 10.0f; + } + + // Unlock and render the vertex buffer + vertexBuffer.Unlock(); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Get the dimensions of a text string + /// + private System.Drawing.SizeF GetTextExtent(string text) { + if (null == text || text == string.Empty) + throw new System.ArgumentNullException(); + + float fRowWidth = 0.0f; + float fRowHeight = (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + float fWidth = 0.0f; + float fHeight = fRowHeight; + + foreach (char c in text) { + if (c == '\n') { + fRowWidth = 0.0f; + fHeight += fRowHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float tx2 = textureCoords[c-32,2]; + + fRowWidth += (tx2-tx1)*textureWidth - 2*spacingPerChar; + + if (fRowWidth > fWidth) + fWidth = fRowWidth; + } + + return new System.Drawing.SizeF(fWidth, fHeight); + } + + + + + /// + /// Cleanup any resources being used + /// + public void Dispose(object sender, EventArgs e) { + if (systemFont != null) + systemFont.Dispose(); + + systemFont = null; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/d3dutil.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/d3dutil.cs new file mode 100644 index 0000000..ea2d5a3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/d3dutil.cs @@ -0,0 +1,928 @@ +//----------------------------------------------------------------------------- +// File: D3DUtil.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Windows.Forms; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// Various helper functions for graphics samples +/// +public class GraphicsUtility { + /// + /// Private Constructor + /// + private GraphicsUtility() { + } + + + + /// + /// Initializes a Material structure, setting the diffuse and ambient + /// colors. It does not set emissive or specular colors. + /// + /// The ambient and diffuse color + /// A defined material + public static Direct3D.Material InitMaterial(System.Drawing.Color c) { + Material mtrl = new Material(); + mtrl.Ambient = mtrl.Diffuse = c; + return mtrl; + } + + + + + /// + /// Initializes a light, setting the light position. The + /// diffuse color is set to white; specular and ambient are left as black. + /// + /// Which light to initialize + /// The type + public static void InitLight(Light light, LightType ltType, float x, float y, float z) { + light.Type = ltType; + light.Diffuse = System.Drawing.Color.White; + light.Position = new Vector3(x,y,z); + light.Direction = Vector3.Normalize(light.Position); + light.Range = 1000.0f; + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename, Format format) { + // Get the path to the texture + string path = DXUtil.FindMediaFile(null, textureFilename); + + // Create the texture using D3DX + return TextureLoader.FromFile(device, path, D3DX.Default, D3DX.Default, D3DX.Default, 0, format, + Pool.Managed, Filter.Triangle|Filter.Mirror, + Filter.Triangle|Filter.Mirror, 0); + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename) { + return GraphicsUtility.CreateTexture(device, textureFilename, Format.Unknown); + } + + + + + + /// + /// Returns a view matrix for rendering to a face of a cubemap. + /// + public static Matrix GetCubeMapViewMatrix(CubeMapFace face) { + Vector3 vEyePt = new Vector3(0.0f, 0.0f, 0.0f); + Vector3 vLookDir = new Vector3(); + Vector3 vUpDir = new Vector3(); + + switch (face) { + case CubeMapFace.PositiveX: + vLookDir = new Vector3(1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeX: + vLookDir = new Vector3(-1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.PositiveY: + vLookDir = new Vector3(0.0f, 1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f,-1.0f); + break; + case CubeMapFace.NegativeY: + vLookDir = new Vector3(0.0f,-1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f, 1.0f); + break; + case CubeMapFace.PositiveZ: + vLookDir = new Vector3(0.0f, 0.0f, 1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeZ: + vLookDir = new Vector3(0.0f, 0.0f,-1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + } + + // Set the view transform for this cubemap surface + Matrix matView = Matrix.LookAtLH(vEyePt, vLookDir, vUpDir); + return matView; + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control, float fTrackBallRadius) { + System.Drawing.Point pt = System.Windows.Forms.Cursor.Position; + System.Drawing.Rectangle rc = control.ClientRectangle; + pt = control.PointToClient(pt); + float xpos = (((2.0f * pt.X) / (rc.Right-rc.Left)) - 1); + float ypos = (((2.0f * pt.Y) / (rc.Bottom-rc.Top)) - 1); + float sz; + + if (xpos == 0.0f && ypos == 0.0f) + return new Quaternion(0.0f, 0.0f, 0.0f, 1.0f); + + float d2 = (float)Math.Sqrt(xpos*xpos + ypos*ypos); + + if (d2 < fTrackBallRadius * 0.70710678118654752440) // Inside sphere + sz = (float)Math.Sqrt(fTrackBallRadius*fTrackBallRadius - d2*d2); + else // On hyperbola + sz = (fTrackBallRadius*fTrackBallRadius) / (2.0f*d2); + + // Get two points on trackball's sphere + Vector3 p1 = new Vector3(xpos, ypos, sz); + Vector3 p2 = new Vector3(0.0f, 0.0f, fTrackBallRadius); + + // Get axis of rotation, which is cross product of p1 and p2 + Vector3 axis = Vector3.Cross(p1,p2); + + // Calculate angle for the rotation about that axis + float t = Vector3.Length(Vector3.Subtract(p2,p1)) / (2.0f*fTrackBallRadius); + if (t > +1.0f) t = +1.0f; + if (t < -1.0f) t = -1.0f; + float fAngle = (float)(2.0f * Math.Asin(t)); + + // Convert axis to quaternion + return Quaternion.RotationAxis(axis, fAngle); + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control) { + return GetRotationFromCursor(control, 1.0f); + } + + + + + /// + /// Axis to axis quaternion double angle (no normalization) + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by 2*THETA. + /// + public static Quaternion D3DXQuaternionUnitAxisToUnitAxis2(Vector3 fromVector, Vector3 toVector) { + Vector3 axis = Vector3.Cross(fromVector, toVector); // proportional to sin(theta) + return new Quaternion(axis.X, axis.Y, axis.Z, Vector3.Dot(fromVector, toVector)); + } + + + + + /// + /// Axis to axis quaternion + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by theta. + /// + public static Quaternion D3DXQuaternionAxisToAxis(Vector3 fromVector, Vector3 toVector) { + Vector3 vA = Vector3.Normalize(fromVector), vB = Vector3.Normalize(toVector); + Vector3 vHalf = Vector3.Add(vA,vB); + vHalf = Vector3.Normalize(vHalf); + return GraphicsUtility.D3DXQuaternionUnitAxisToUnitAxis2(vA, vHalf); + } + + + + + /// + /// Gets the number of ColorChanelBits from a format + /// + static public int GetColorChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 8; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 8; + case Format.R5G6B5: + return 5; + case Format.X1R5G5B5: + return 5; + case Format.A1R5G5B5: + return 5; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 2; + case Format.A8R3G3B2: + return 2; + case Format.X4R4G4B4: + return 4; + case Format.A2B10G10R10: + return 10; + case Format.A2R10G10B10: + return 10; + default: + return 0; + } + } + + + + + /// + /// Gets the number of alpha channel bits + /// + static public int GetAlphaChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 0; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 0; + case Format.R5G6B5: + return 0; + case Format.X1R5G5B5: + return 0; + case Format.A1R5G5B5: + return 1; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 0; + case Format.A8R3G3B2: + return 8; + case Format.X4R4G4B4: + return 0; + case Format.A2B10G10R10: + return 2; + case Format.A2R10G10B10: + return 2; + default: + return 0; + } + } + + + + + /// + /// Gets the number of depth bits + /// + static public int GetDepthBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 16; + case DepthFormat.D15S1: + return 15; + case DepthFormat.D24X8: + return 24; + case DepthFormat.D24S8: + return 24; + case DepthFormat.D24X4S4: + return 24; + case DepthFormat.D32: + return 32; + default: + return 0; + } + } + + + + + /// + /// Gets the number of stencil bits + /// + static public int GetStencilBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 0; + case DepthFormat.D15S1: + return 1; + case DepthFormat.D24X8: + return 0; + case DepthFormat.D24S8: + return 8; + case DepthFormat.D24X4S4: + return 4; + case DepthFormat.D32: + return 0; + default: + return 0; + } + } + + + + + /// + /// Assembles and creates a file-based vertex shader + /// + public static VertexShader CreateVertexShader(Device device, string filename) { + GraphicsStream code = null; + string path = null; + + // Get the path to the vertex shader file + path = DXUtil.FindMediaFile(null, filename); + + // Assemble the vertex shader file + code = ShaderLoader.FromFile(path, null, 0); + + // Create the vertex shader + return new VertexShader(device, code); + } + +} + + + + +/// +/// An arc ball class +/// +public class GraphicsArcBall { + private int internalWidth; // ArcBall's window width + private int internalHeight; // ArcBall's window height + private float internalradius; // ArcBall's radius in screen coords + private float internalradiusTranslation; // ArcBall's radius for translating the target + + private Quaternion internaldownQuat; // Quaternion before button down + private Quaternion internalnowQuat; // Composite quaternion for current drag + private Matrix internalrotationMatrix; // Matrix for arcball's orientation + private Matrix internalrotationDelta; // Matrix for arcball's orientation + private Matrix internaltranslationMatrix; // Matrix for arcball's position + private Matrix internaltranslationDelta; // Matrix for arcball's position + private bool internaldragging; // Whether user is dragging arcball + private bool internaluseRightHanded; // Whether to use RH coordinate system + private int saveMouseX = 0; // Saved mouse position + private int saveMouseY = 0; + private Vector3 internalvectorDown; // Button down vector + System.Windows.Forms.Control parent; // parent + + + + + /// + /// Constructor + /// + public GraphicsArcBall(System.Windows.Forms.Control p) { + internaldownQuat = Quaternion.Identity; + internalnowQuat = Quaternion.Identity; + internalrotationMatrix = Matrix.Identity; + internalrotationDelta = Matrix.Identity; + internaltranslationMatrix = Matrix.Identity; + internaltranslationDelta = Matrix.Identity; + internaldragging = false; + internalradiusTranslation = 1.0f; + internaluseRightHanded = false; + + parent = p; + // Hook the events + p.MouseDown += new MouseEventHandler(this.OnContainerMouseDown); + p.MouseUp += new MouseEventHandler(this.OnContainerMouseUp); + p.MouseMove += new MouseEventHandler(this.OnContainerMouseMove); + } + + + + + /// + /// Set the window dimensions + /// + public void SetWindow(int width, int height, float radius) { + // Set ArcBall info + internalWidth = width; + internalHeight = height; + internalradius = radius; + } + + + + + /// + /// Screen coords to a vector + /// + private Vector3 ScreenToVector(int xpos, int ypos) { + // Scale to screen + float x = -(xpos - internalWidth/2) / (internalradius*internalWidth/2); + float y = (ypos - internalHeight/2) / (internalradius*internalHeight/2); + + if (internaluseRightHanded) { + x = -x; + y = -y; + } + + float z = 0.0f; + float mag = x*x + y*y; + + if (mag > 1.0f) { + float scale = 1.0f/(float)Math.Sqrt(mag); + x *= scale; + y *= scale; + } + else + z = (float)Math.Sqrt(1.0f - mag); + + // Return vector + return new Vector3(x, y, z); + } + + + + + /// + /// Fired when the containers mouse button is down + /// + private void OnContainerMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { + // Store off the position of the cursor when the button is pressed + saveMouseX = e.X; + saveMouseY = e.Y; + + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // Start drag mode + internaldragging = true; + internalvectorDown = ScreenToVector(e.X, e.Y); + internaldownQuat = internalnowQuat; + } + } + + + + + /// + /// Fired when the containers mouse button has been released + /// + private void OnContainerMouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // End drag mode + internaldragging = false; + } + } + + + + + /// + /// Fired when the containers mouse is moving + /// + private void OnContainerMouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + if (internaldragging) { + // recompute nowQuat + Vector3 vCur = ScreenToVector(e.X, e.Y); + Quaternion qAxisToAxis = GraphicsUtility.D3DXQuaternionAxisToAxis(internalvectorDown, vCur); + internalnowQuat = internaldownQuat; + internalnowQuat = Quaternion.Multiply(internalnowQuat,qAxisToAxis); + internalrotationDelta = Matrix.RotationQuaternion(qAxisToAxis); + } + else + internalrotationDelta = Matrix.Identity; + + internalrotationMatrix = Matrix.RotationQuaternion(internalnowQuat); + internaldragging = true; + } + + if ((e.Button == System.Windows.Forms.MouseButtons.Right) || (e.Button == System.Windows.Forms.MouseButtons.Middle)) { + // Normalize based on size of window and bounding sphere radius + float fDeltaX = (saveMouseX-e.X) * internalradiusTranslation / internalWidth; + float fDeltaY = (saveMouseY-e.Y) * internalradiusTranslation / internalHeight; + + if (e.Button == System.Windows.Forms.MouseButtons.Right) { + internaltranslationDelta = Matrix.Translation(-2 * fDeltaX, 2 * fDeltaY, 0.0f); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + if (e.Button == System.Windows.Forms.MouseButtons.Middle) { + internaltranslationDelta = Matrix.Translation(0.0f, 0.0f, 5 * fDeltaY); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + + // Store mouse coordinate + saveMouseX = e.X; + saveMouseY = e.Y; + } + } + + #region Various properties of the class + public float Radius { + set { + internalradiusTranslation = value; } + } + public bool RightHanded { + get { return internaluseRightHanded; } + set { internaluseRightHanded = value; } + } + public Matrix RotationMatrix { + get { return internalrotationMatrix; } + } + public Matrix RotationDeltaMatrix { + get { return internalrotationDelta; } + } + public Matrix TranslationMatrix { + get { return internaltranslationMatrix; } + } + public Matrix TranslationDeltaMatrix { + get { return internaltranslationDelta; } + } + public bool IsBeingDragged { + get { return internaldragging; } + } + #endregion +} + + + + +/// +/// Handles our meshes +/// +public class GraphicsMesh : IDisposable { + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + + + + + /// + /// Constructor + /// + /// The initial filename + public GraphicsMesh(string filename) { + fileName = filename; + } + public GraphicsMesh() : this ("CD3DFile_Mesh") {} + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + string strPath = null; + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Find the path for the file, and convert it to ANSI (for the D3DX API) + strPath = DXUtil.FindMediaFile(null, filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(strPath, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + } + + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. Note: because we are passing in + // no flags, the default behavior is to clone into local memory. + localMemoryMesh = systemMemoryMesh.Clone(0, systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(Device device, bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render(Device device) { + Render(device, true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/dinput.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/dinput.cs new file mode 100644 index 0000000..a6cd187 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/dinput.cs @@ -0,0 +1,51 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + +/// +/// This class is where the DirectInput routines +/// for the application resides. +/// +public class InputClass +{ + + private Control owner = null; + private Device localDevice = null; + + public InputClass(Control owner) + { + this.owner = owner; + + localDevice = new Device(SystemGuid.Keyboard); + localDevice.SetDataFormat(DeviceDataFormat.Keyboard); + localDevice.SetCooperativeLevel(owner, CooperativeLevelFlags.Foreground | CooperativeLevelFlags.NonExclusive); + } + + public KeyboardState GetInputState() + { + KeyboardState kbState = null; + + try + { + kbState = localDevice.GetCurrentKeyboardState(); + } + catch(InputException) + { + do + { + Application.DoEvents(); + try{ localDevice.Acquire(); } + catch (InputLostException) + { continue; } + catch(OtherApplicationHasPriorityException) + { continue; } + + break; + + }while( true ); + } + return kbState; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/dplay.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/dplay.cs new file mode 100644 index 0000000..7ad7961 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/dplay.cs @@ -0,0 +1,186 @@ +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +public struct Players +{ + public bool Active; + public int dpnID; + public string Name; + public Players(int id, string n, bool active) + { dpnID = id; Name = n; Active = active;} +} + + /// + /// The class that houses DirectPlay code for the application. + /// +public class PlayClass +{ + #region Fields and Properties + private GameClass game = null; + + private Peer peerObject = null; + + private bool isHost = false; + public bool IsHost { get { return isHost; } } + + private bool inSession = false; + public bool InSession { get { return inSession; } } + + private int localPlayerID = 0; + + + private Players remotePlayer; + public Players RemotePlayer { get {return remotePlayer; } } + + private ConnectWizard Connect = null; + + #endregion + + #region About Application Guids + // This guid allows DirectPlay to find other instances of the same game on + // the network, so it must be unique for every game, and the same for + // every instance of that game. You can use the guidgen.exe program to + // generate a new guid. + #endregion + private Guid AppGuid = new Guid( 0xc134dcd4, 0xff30, 0x4c86, 0x9a, 0x2e, 0xe0, 0x46, 0xa2, 0x21, 0xe3, 0x86 ); + + #region Constructor + + public PlayClass(GameClass Game) + { + this.game = Game; + + //Initialize our peer to peer network object + peerObject = new Peer(); + + + // Set up our event handlers (We only need events for the ones we care about) + peerObject.PlayerCreated += new PlayerCreatedEventHandler(PlayerCreated); + peerObject.PlayerDestroyed += new PlayerDestroyedEventHandler(PlayerDestroyed); + peerObject.Receive += new ReceiveEventHandler(game.DataReceived); + peerObject.SessionTerminated += new SessionTerminatedEventHandler(SessionTerminated); + + // use the DirectPlay connection wizard to create our join sessions + Connect = new ConnectWizard(peerObject, AppGuid, "Spacewar3D"); + Connect.StartWizard(); + + inSession = Connect.InSession; + + if (inSession) + { + isHost = Connect.IsHost; + } + + } + #endregion //Constructor + + #region Network Message functions + // These routines handle the communication between the game peers. + + + private void PlayerCreated(object sender, PlayerCreatedEventArgs dpMessage) + { + // Get the PlayerInformation and store it + int playerID = dpMessage.Message.PlayerID; + PlayerInformation dpPeer = peerObject.GetPeerInformation(playerID); + Players oPlayer = new Players(playerID, dpPeer.Name.ToUpper(), true); + // Save this player id if it's ourselves + if (dpPeer.Local) + localPlayerID = dpMessage.Message.PlayerID; + else + { + // We lock the data here since it is shared across multiple threads. + lock (this) + { + remotePlayer = oPlayer; + } + game.RemotePlayerJoined(oPlayer.Name); + } + + + } + private void PlayerDestroyed(object sender, PlayerDestroyedEventArgs dpMessage) + { + // Remove this player from our list + // We lock the data here since it is shared across multiple threads. + lock (this) + { + remotePlayer.Active = false; + } + game.RemotePlayerLeft(remotePlayer.Name); + } + + + public void SendPlayerUpdate(PlayerUpdate update, ShotUpdate shotUpdate) + { + if (inSession) + { + NetworkPacket packet = new NetworkPacket(); + packet.Write((byte)MessageType.PlayerUpdateID); + packet.Write(update); + + for (int i = 0; i < Constants.NumShots; i++) + { + packet.Write(shotUpdate.ShotPosition[i]); + packet.Write(shotUpdate.ShotAge[i]); + packet.Write(shotUpdate.ShotAlive[i]); + } + + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.NoComplete | SendFlags.NoLoopback); + } + } + + public void SendGameState(GameStates gameState) + { + if (inSession) + { + byte messageType; + switch (gameState) + { + case GameStates.Paused: + { + messageType = (byte)MessageType.GamePaused; + break; + } + case GameStates.Running: + { + messageType = (byte)MessageType.GameRunning; + break; + } + default: + { + return; + } + } + NetworkPacket packet = new NetworkPacket(); + packet.Write(messageType); + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.Guaranteed | SendFlags.NoLoopback); + } + } + + public void SendScorePoint() + { + if (inSession) + { + NetworkPacket packet = new NetworkPacket(); + packet.Write((byte)MessageType.Add1ToScore); + peerObject.SendTo(remotePlayer.dpnID, packet, 0, SendFlags.Guaranteed | SendFlags.NoLoopback); + } + } + + #endregion // Network message functions + + #region Cleanup + private void SessionTerminated(object sender, SessionTerminatedEventArgs stea) + { + inSession = false; + isHost = false; + } + + #endregion //Cleanup +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step11/main.cs b/Source Code updated 08-12-05/Spacewar3D/Step11/main.cs new file mode 100644 index 0000000..c2a6fde --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step11/main.cs @@ -0,0 +1,50 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Container = System.ComponentModel.Container; + + + /// + /// The main windows form for the application. + /// + public class MainClass + { + + private GameClass game = null; + private SplashScreen splash = null; + private bool enableNetwork = false; + public bool EnableNetwork { get { return enableNetwork; } set { enableNetwork = value; } } + + private Size gameFormSize; + public Size GameFormSize { get { return gameFormSize; } set { gameFormSize = value; } } + + private bool fullScreen = false; + public bool FullScreen { get { return fullScreen; } set { fullScreen = value; } } + + /// + // Main entry point of the application. + /// + public static void Main() + { + MainClass m = new MainClass(); + } + + public MainClass() + { + + //display the splash screen and determine network status + splash = new SplashScreen(this); + splash.ShowDialog(); + + try + { + game = new GameClass(fullScreen, gameFormSize, enableNetwork); + } + catch(DirectXException) + { + return; + } + if( game.CreateGraphicsSample() ) + game.Run(); + } + } diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/App.config b/Source Code updated 08-12-05/Spacewar3D/Step12/App.config new file mode 100644 index 0000000..5bbb96b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/BGPointer.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/BGPointer.cs new file mode 100644 index 0000000..dd4b54c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/BGPointer.cs @@ -0,0 +1,39 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// Summary description for BGPointer. + /// +public class BGPointer { + private PositionedMesh arrowMesh; + private Device device; + + + public BGPointer(Device device) { + this.device = device; + arrowMesh = new PositionedMesh(device,"arrow-yel.x"); + arrowMesh.Position.Scale(2.0f, 2.0f, 2.0f); + } + + public void Render() { + arrowMesh.Render(); + } + + public void Point(WorldPosition ourPosition, WorldPosition opponentWorldPosition) { + arrowMesh.Position.Move(ourPosition.Location.X, ourPosition.Location.Y, + ourPosition.Location.Z); + Vector3 pointVector = opponentWorldPosition.Location - ourPosition.Location; + + + float XRot, YRot; + + XRot = (float) Math.Atan2(-pointVector.Y, Math.Sqrt(pointVector.X * pointVector.X + + pointVector.Z * pointVector.Z)); + YRot = (float) Math.Atan2(pointVector.X, pointVector.Z); + + arrowMesh.Position.Rotate(XRot, YRot, 0.0f); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/Camera.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/Camera.cs new file mode 100644 index 0000000..c8e3944 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/Camera.cs @@ -0,0 +1,119 @@ +using System; +using Microsoft.DirectX; + + + /// + /// Summary description for Camera. + /// +public class Camera { + + protected float velocity; + + + protected float xPos, yPos, zPos; + protected float xRot, yRot, zRot; + + protected float startXPos, startYPos, startZPos; + protected float startXRot, startYRot, startZRot; + + protected float endXPos, endYPos, endZPos; + protected float endXRot, endYRot, endZRot; + + protected Matrix viewMatrix; + protected Matrix translationMatrix; + protected Matrix rotationMatrix; + + public float XPosition { get { return xPos; } } + public float YPosition { get { return yPos; } } + public float ZPosition { get { return zPos; } } + + public float XRotation { get { return xRot; } } + public float YRotation { get { return yRot; } } + public float ZRotation { get { return zRot; } } + + + public Vector3 Loc { + get { + return new Vector3(xPos,yPos,zPos); + } + set { + Vector3 loc = value; + xPos = loc.X; + yPos = loc.Y; + zPos = loc.Z; + } + + } + + public Matrix ViewMatrix { + get { + Update(); + return viewMatrix; + } + set { + viewMatrix = value; + } + + } + + + public Camera() { + Move(0.0f,0.0f,0.0f); + Rotate(0.0f,0.0f,0.0f); + Update(); + } + + + public void Update() { // Update transformation matrix + viewMatrix = translationMatrix * rotationMatrix; + } + + public void Move(float XPos, float YPos, float ZPos) { + xPos = XPos; + yPos = YPos; + zPos = ZPos; + translationMatrix = Matrix.Translation( -xPos, -yPos, -zPos ); + } + + public void MoveRel(float XAdd, float YAdd, float ZAdd) { + Move (xPos + XAdd, yPos + YAdd, zPos + ZAdd); + + } + + public void Rotate(float XRot, float YRot, float ZRot) { + Matrix xRotation, yRotation, zRotation; + + xRot = XRot; + yRot = YRot; + zRot = ZRot; + + xRotation = Matrix.RotationX( - xRot ); + yRotation = Matrix.RotationY( - yRot ); + zRotation = Matrix.RotationZ( - zRot ); + + rotationMatrix = zRotation; + rotationMatrix *= yRotation; + rotationMatrix *= xRotation; + + } + + public void RotateRel(float XAdd, float YAdd, float ZAdd) { + Rotate (xRot + XAdd, yRot + YAdd, zRot + ZAdd); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/CameraMode.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/CameraMode.cs new file mode 100644 index 0000000..fc8f03a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/CameraMode.cs @@ -0,0 +1,9 @@ +using System; + + +public enum CameraMode { + ChaseMode, + CockpitMode, + Fixed +}; + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/Constants.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/Constants.cs new file mode 100644 index 0000000..22d420a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/Constants.cs @@ -0,0 +1,39 @@ +using System; +using Microsoft.DirectX.Direct3D; +using Microsoft.DirectX; + + + /// + /// GamePlay constants. You can tune the game by adjusting these values. + /// +sealed public class Constants { + static public Random random = new Random((int) DateTime.Now.Ticks); + + public const float EngineThrust = 0.3f; + public const float DyingCycle = 2; + public const float DeadCycleWait = 2; + public const float HyperChargeWait = 3; + public const float HyperCycleWait = 2; + public const float HyperSuccessFactor = 0.8f; // initial success factor + public const float HyperSuccessDegradation = 0.1f; // degradation per use... + public const float ShipCollisionLimit = 15f; + public const float MaxVelocity = 125.0f; + public const float ThrustPower = 1.001f; + + public const int ShotLifetime = 4; + public const int NumShots = 12; + public const float ShotVelocity = 350f; + public const float ShotDeltaTime = 0.10f; + public const int ShotInitialMove = 3; // times to update shot so it shows up outside the ship... + public const int ShotCollisionLimit = 10; + + + public const float StatusMessageDisplayTime = 5.0f; + + + + public const long RemoteTickTimeout = 5; // five seconds... + + private Constants() { + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/D3DSettingsForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/D3DSettingsForm.cs new file mode 100644 index 0000000..889162a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/D3DSettingsForm.cs @@ -0,0 +1,1037 @@ +//----------------------------------------------------------------------------- +// File: D3DSettingsForm.cs +// +// Desc: Application form for setting up user defined display settings +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + + + + + +/// +/// A form to allow the user to change the current D3D settings. +/// +public class D3DSettingsForm : System.Windows.Forms.Form { + private D3DEnumeration enumeration; + public D3DSettings settings; // Potential new D3D settings + + private System.Windows.Forms.GroupBox adapterDeviceGroupBox; + private System.Windows.Forms.Label displayAdapterLabel; + private System.Windows.Forms.ComboBox adapterComboBox; + private System.Windows.Forms.Label deviceLabel; + private System.Windows.Forms.ComboBox deviceComboBox; + private System.Windows.Forms.GroupBox modeSettingsGroupBox; + private System.Windows.Forms.RadioButton windowedRadioButton; + private System.Windows.Forms.RadioButton fullscreenRadioButton; + private System.Windows.Forms.Label adapterFormatLabel; + private System.Windows.Forms.ComboBox adapterFormatComboBox; + private System.Windows.Forms.Label resolutionLabel; + private System.Windows.Forms.ComboBox resolutionComboBox; + private System.Windows.Forms.Label refreshRateLabel; + private System.Windows.Forms.ComboBox refreshRateComboBox; + private System.Windows.Forms.GroupBox otherSettingsGroupBox; + private System.Windows.Forms.Label backBufferFormatLabel; + private System.Windows.Forms.ComboBox backBufferFormatComboBox; + private System.Windows.Forms.Label depthStencilBufferLabel; + private System.Windows.Forms.ComboBox depthStencilBufferComboBox; + private System.Windows.Forms.Label multisampleLabel; + private System.Windows.Forms.ComboBox multisampleComboBox; + private System.Windows.Forms.Label vertexProcLabel; + private System.Windows.Forms.ComboBox vertexProcComboBox; + private System.Windows.Forms.Label presentIntervalLabel; + private System.Windows.Forms.ComboBox presentIntervalComboBox; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.ComboBox multisampleQualityComboBox; + private System.Windows.Forms.Label multisampleQualityLabel; + + + + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + + /// + /// Constructor. Pass in an enumeration and the current D3D settings. + /// + public D3DSettingsForm(D3DEnumeration enumerationParam, D3DSettings settingsParam) { + enumeration = enumerationParam; + settings = settingsParam.Clone(); + + // Required for Windows Form Designer support + InitializeComponent(); + + // Fill adapter combo box. Updating the selected adapter will trigger + // updates of the rest of the dialog. + foreach (GraphicsAdapterInfo adapterInfo in enumeration.AdapterInfoList) { + adapterComboBox.Items.Add(adapterInfo); + if (adapterInfo.AdapterOrdinal == settings.AdapterOrdinal) + adapterComboBox.SelectedItem = adapterInfo; + } + if (adapterComboBox.SelectedItem == null && adapterComboBox.Items.Count > 0) + adapterComboBox.SelectedIndex = 0; + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + if (components != null) + components.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.adapterDeviceGroupBox = new System.Windows.Forms.GroupBox(); + this.deviceComboBox = new System.Windows.Forms.ComboBox(); + this.deviceLabel = new System.Windows.Forms.Label(); + this.adapterComboBox = new System.Windows.Forms.ComboBox(); + this.displayAdapterLabel = new System.Windows.Forms.Label(); + this.fullscreenRadioButton = new System.Windows.Forms.RadioButton(); + this.cancelButton = new System.Windows.Forms.Button(); + this.otherSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.multisampleQualityComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleQualityLabel = new System.Windows.Forms.Label(); + this.multisampleComboBox = new System.Windows.Forms.ComboBox(); + this.backBufferFormatComboBox = new System.Windows.Forms.ComboBox(); + this.multisampleLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferLabel = new System.Windows.Forms.Label(); + this.backBufferFormatLabel = new System.Windows.Forms.Label(); + this.depthStencilBufferComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcComboBox = new System.Windows.Forms.ComboBox(); + this.vertexProcLabel = new System.Windows.Forms.Label(); + this.presentIntervalComboBox = new System.Windows.Forms.ComboBox(); + this.presentIntervalLabel = new System.Windows.Forms.Label(); + this.resolutionComboBox = new System.Windows.Forms.ComboBox(); + this.windowedRadioButton = new System.Windows.Forms.RadioButton(); + this.resolutionLabel = new System.Windows.Forms.Label(); + this.refreshRateComboBox = new System.Windows.Forms.ComboBox(); + this.adapterFormatLabel = new System.Windows.Forms.Label(); + this.refreshRateLabel = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.modeSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.adapterFormatComboBox = new System.Windows.Forms.ComboBox(); + this.adapterDeviceGroupBox.SuspendLayout(); + this.otherSettingsGroupBox.SuspendLayout(); + this.modeSettingsGroupBox.SuspendLayout(); + this.SuspendLayout(); + // + // adapterDeviceGroupBox + // + this.adapterDeviceGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.deviceComboBox, + this.deviceLabel, + this.adapterComboBox, + this.displayAdapterLabel}); + this.adapterDeviceGroupBox.Location = new System.Drawing.Point(16, 8); + this.adapterDeviceGroupBox.Name = "adapterDeviceGroupBox"; + this.adapterDeviceGroupBox.Size = new System.Drawing.Size(400, 80); + this.adapterDeviceGroupBox.TabIndex = 0; + this.adapterDeviceGroupBox.TabStop = false; + this.adapterDeviceGroupBox.Text = "Adapter and device"; + // + // deviceComboBox + // + this.deviceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.deviceComboBox.DropDownWidth = 121; + this.deviceComboBox.Location = new System.Drawing.Point(160, 48); + this.deviceComboBox.Name = "deviceComboBox"; + this.deviceComboBox.Size = new System.Drawing.Size(232, 21); + this.deviceComboBox.TabIndex = 3; + this.deviceComboBox.SelectedIndexChanged += new System.EventHandler(this.DeviceChanged); + // + // deviceLabel + // + this.deviceLabel.Location = new System.Drawing.Point(8, 48); + this.deviceLabel.Name = "deviceLabel"; + this.deviceLabel.Size = new System.Drawing.Size(152, 23); + this.deviceLabel.TabIndex = 2; + this.deviceLabel.Text = "Render &Device:"; + // + // adapterComboBox + // + this.adapterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterComboBox.DropDownWidth = 121; + this.adapterComboBox.Location = new System.Drawing.Point(160, 24); + this.adapterComboBox.Name = "adapterComboBox"; + this.adapterComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterComboBox.TabIndex = 1; + this.adapterComboBox.SelectedIndexChanged += new System.EventHandler(this.AdapterChanged); + // + // displayAdapterLabel + // + this.displayAdapterLabel.Location = new System.Drawing.Point(8, 24); + this.displayAdapterLabel.Name = "displayAdapterLabel"; + this.displayAdapterLabel.Size = new System.Drawing.Size(152, 23); + this.displayAdapterLabel.TabIndex = 0; + this.displayAdapterLabel.Text = "Display &Adapter:"; + // + // fullscreenRadioButton + // + this.fullscreenRadioButton.Location = new System.Drawing.Point(9, 38); + this.fullscreenRadioButton.Name = "fullscreenRadioButton"; + this.fullscreenRadioButton.Size = new System.Drawing.Size(152, 24); + this.fullscreenRadioButton.TabIndex = 1; + this.fullscreenRadioButton.Text = "&Fullscreen"; + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(248, 464); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.TabIndex = 4; + this.cancelButton.Text = "Cancel"; + // + // otherSettingsGroupBox + // + this.otherSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.multisampleQualityComboBox, + this.multisampleQualityLabel, + this.multisampleComboBox, + this.backBufferFormatComboBox, + this.multisampleLabel, + this.depthStencilBufferLabel, + this.backBufferFormatLabel, + this.depthStencilBufferComboBox, + this.vertexProcComboBox, + this.vertexProcLabel, + this.presentIntervalComboBox, + this.presentIntervalLabel}); + this.otherSettingsGroupBox.Location = new System.Drawing.Point(16, 264); + this.otherSettingsGroupBox.Name = "otherSettingsGroupBox"; + this.otherSettingsGroupBox.Size = new System.Drawing.Size(400, 176); + this.otherSettingsGroupBox.TabIndex = 2; + this.otherSettingsGroupBox.TabStop = false; + this.otherSettingsGroupBox.Text = "Device settings"; + // + // multisampleQualityComboBox + // + this.multisampleQualityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleQualityComboBox.DropDownWidth = 144; + this.multisampleQualityComboBox.Location = new System.Drawing.Point(160, 96); + this.multisampleQualityComboBox.Name = "multisampleQualityComboBox"; + this.multisampleQualityComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleQualityComboBox.TabIndex = 7; + this.multisampleQualityComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleQualityChanged); + // + // multisampleQualityLabel + // + this.multisampleQualityLabel.Location = new System.Drawing.Point(8, 96); + this.multisampleQualityLabel.Name = "multisampleQualityLabel"; + this.multisampleQualityLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleQualityLabel.TabIndex = 6; + this.multisampleQualityLabel.Text = "Multisample &Quality:"; + // + // multisampleComboBox + // + this.multisampleComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.multisampleComboBox.DropDownWidth = 144; + this.multisampleComboBox.Location = new System.Drawing.Point(160, 72); + this.multisampleComboBox.Name = "multisampleComboBox"; + this.multisampleComboBox.Size = new System.Drawing.Size(232, 21); + this.multisampleComboBox.TabIndex = 5; + this.multisampleComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleTypeChanged); + // + // backBufferFormatComboBox + // + this.backBufferFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.backBufferFormatComboBox.DropDownWidth = 144; + this.backBufferFormatComboBox.Location = new System.Drawing.Point(160, 24); + this.backBufferFormatComboBox.Name = "backBufferFormatComboBox"; + this.backBufferFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.backBufferFormatComboBox.TabIndex = 1; + this.backBufferFormatComboBox.SelectedIndexChanged += new System.EventHandler(this.BackBufferFormatChanged); + // + // multisampleLabel + // + this.multisampleLabel.Location = new System.Drawing.Point(8, 72); + this.multisampleLabel.Name = "multisampleLabel"; + this.multisampleLabel.Size = new System.Drawing.Size(152, 23); + this.multisampleLabel.TabIndex = 4; + this.multisampleLabel.Text = "&Multisample Type:"; + // + // depthStencilBufferLabel + // + this.depthStencilBufferLabel.Location = new System.Drawing.Point(8, 48); + this.depthStencilBufferLabel.Name = "depthStencilBufferLabel"; + this.depthStencilBufferLabel.Size = new System.Drawing.Size(152, 23); + this.depthStencilBufferLabel.TabIndex = 2; + this.depthStencilBufferLabel.Text = "De&pth/Stencil Buffer Format:"; + // + // backBufferFormatLabel + // + this.backBufferFormatLabel.Location = new System.Drawing.Point(8, 24); + this.backBufferFormatLabel.Name = "backBufferFormatLabel"; + this.backBufferFormatLabel.Size = new System.Drawing.Size(152, 23); + this.backBufferFormatLabel.TabIndex = 0; + this.backBufferFormatLabel.Text = "&Back Buffer Format:"; + // + // depthStencilBufferComboBox + // + this.depthStencilBufferComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.depthStencilBufferComboBox.DropDownWidth = 144; + this.depthStencilBufferComboBox.Location = new System.Drawing.Point(160, 48); + this.depthStencilBufferComboBox.Name = "depthStencilBufferComboBox"; + this.depthStencilBufferComboBox.Size = new System.Drawing.Size(232, 21); + this.depthStencilBufferComboBox.TabIndex = 3; + this.depthStencilBufferComboBox.SelectedIndexChanged += new System.EventHandler(this.DepthStencilBufferFormatChanged); + // + // vertexProcComboBox + // + this.vertexProcComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.vertexProcComboBox.DropDownWidth = 121; + this.vertexProcComboBox.Location = new System.Drawing.Point(160, 120); + this.vertexProcComboBox.Name = "vertexProcComboBox"; + this.vertexProcComboBox.Size = new System.Drawing.Size(232, 21); + this.vertexProcComboBox.TabIndex = 9; + this.vertexProcComboBox.SelectedIndexChanged += new System.EventHandler(this.VertexProcessingChanged); + // + // vertexProcLabel + // + this.vertexProcLabel.Location = new System.Drawing.Point(8, 120); + this.vertexProcLabel.Name = "vertexProcLabel"; + this.vertexProcLabel.Size = new System.Drawing.Size(152, 23); + this.vertexProcLabel.TabIndex = 8; + this.vertexProcLabel.Text = "&Vertex Processing:"; + // + // presentIntervalComboBox + // + this.presentIntervalComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.presentIntervalComboBox.DropDownWidth = 121; + this.presentIntervalComboBox.Location = new System.Drawing.Point(160, 144); + this.presentIntervalComboBox.Name = "presentIntervalComboBox"; + this.presentIntervalComboBox.Size = new System.Drawing.Size(232, 21); + this.presentIntervalComboBox.TabIndex = 11; + this.presentIntervalComboBox.SelectedValueChanged += new System.EventHandler(this.PresentIntervalChanged); + // + // presentIntervalLabel + // + this.presentIntervalLabel.Location = new System.Drawing.Point(8, 144); + this.presentIntervalLabel.Name = "presentIntervalLabel"; + this.presentIntervalLabel.Size = new System.Drawing.Size(152, 23); + this.presentIntervalLabel.TabIndex = 10; + this.presentIntervalLabel.Text = "Present &Interval:"; + // + // resolutionComboBox + // + this.resolutionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.resolutionComboBox.DropDownWidth = 144; + this.resolutionComboBox.Location = new System.Drawing.Point(161, 94); + this.resolutionComboBox.MaxDropDownItems = 14; + this.resolutionComboBox.Name = "resolutionComboBox"; + this.resolutionComboBox.Size = new System.Drawing.Size(232, 21); + this.resolutionComboBox.TabIndex = 5; + this.resolutionComboBox.SelectedIndexChanged += new System.EventHandler(this.ResolutionChanged); + // + // windowedRadioButton + // + this.windowedRadioButton.Location = new System.Drawing.Point(9, 14); + this.windowedRadioButton.Name = "windowedRadioButton"; + this.windowedRadioButton.Size = new System.Drawing.Size(152, 24); + this.windowedRadioButton.TabIndex = 0; + this.windowedRadioButton.Text = "&Windowed"; + this.windowedRadioButton.CheckedChanged += new System.EventHandler(this.WindowedFullscreenChanged); + // + // resolutionLabel + // + this.resolutionLabel.Location = new System.Drawing.Point(8, 94); + this.resolutionLabel.Name = "resolutionLabel"; + this.resolutionLabel.Size = new System.Drawing.Size(152, 23); + this.resolutionLabel.TabIndex = 4; + this.resolutionLabel.Text = "&Resolution:"; + // + // refreshRateComboBox + // + this.refreshRateComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.refreshRateComboBox.DropDownWidth = 144; + this.refreshRateComboBox.Location = new System.Drawing.Point(161, 118); + this.refreshRateComboBox.MaxDropDownItems = 14; + this.refreshRateComboBox.Name = "refreshRateComboBox"; + this.refreshRateComboBox.Size = new System.Drawing.Size(232, 21); + this.refreshRateComboBox.TabIndex = 7; + this.refreshRateComboBox.SelectedIndexChanged += new System.EventHandler(this.RefreshRateChanged); + // + // adapterFormatLabel + // + this.adapterFormatLabel.Location = new System.Drawing.Point(8, 72); + this.adapterFormatLabel.Name = "adapterFormatLabel"; + this.adapterFormatLabel.Size = new System.Drawing.Size(152, 23); + this.adapterFormatLabel.TabIndex = 2; + this.adapterFormatLabel.Text = "Adapter F&ormat:"; + // + // refreshRateLabel + // + this.refreshRateLabel.Location = new System.Drawing.Point(8, 118); + this.refreshRateLabel.Name = "refreshRateLabel"; + this.refreshRateLabel.Size = new System.Drawing.Size(152, 23); + this.refreshRateLabel.TabIndex = 6; + this.refreshRateLabel.Text = "R&efresh Rate:"; + // + // okButton + // + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(112, 464); + this.okButton.Name = "okButton"; + this.okButton.TabIndex = 3; + this.okButton.Text = "OK"; + // + // modeSettingsGroupBox + // + this.modeSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { + this.adapterFormatLabel, + this.refreshRateLabel, + this.resolutionComboBox, + this.adapterFormatComboBox, + this.resolutionLabel, + this.refreshRateComboBox, + this.windowedRadioButton, + this.fullscreenRadioButton}); + this.modeSettingsGroupBox.Location = new System.Drawing.Point(16, 96); + this.modeSettingsGroupBox.Name = "modeSettingsGroupBox"; + this.modeSettingsGroupBox.Size = new System.Drawing.Size(400, 160); + this.modeSettingsGroupBox.TabIndex = 1; + this.modeSettingsGroupBox.TabStop = false; + this.modeSettingsGroupBox.Text = "Display mode settings"; + // + // adapterFormatComboBox + // + this.adapterFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.adapterFormatComboBox.DropDownWidth = 121; + this.adapterFormatComboBox.Location = new System.Drawing.Point(161, 70); + this.adapterFormatComboBox.MaxDropDownItems = 14; + this.adapterFormatComboBox.Name = "adapterFormatComboBox"; + this.adapterFormatComboBox.Size = new System.Drawing.Size(232, 21); + this.adapterFormatComboBox.TabIndex = 3; + this.adapterFormatComboBox.SelectedValueChanged += new System.EventHandler(this.AdapterFormatChanged); + // + // D3DSettingsForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(438, 512); + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.cancelButton, + this.okButton, + this.adapterDeviceGroupBox, + this.modeSettingsGroupBox, + this.otherSettingsGroupBox}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.Name = "D3DSettingsForm"; + this.Text = "Direct3D Settings"; + this.adapterDeviceGroupBox.ResumeLayout(false); + this.otherSettingsGroupBox.ResumeLayout(false); + this.modeSettingsGroupBox.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// Respond to a change of selected adapter by rebuilding the device + /// list. Updating the selected device will trigger updates of the + /// rest of the dialog. + /// + private void AdapterChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + settings.AdapterInfo = adapterInfo; + + // Update device combo box + deviceComboBox.Items.Clear(); + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + deviceComboBox.Items.Add(deviceInfo); + if (deviceInfo.DevType == settings.DevType) + deviceComboBox.SelectedItem = deviceInfo; + } + if (deviceComboBox.SelectedItem == null && deviceComboBox.Items.Count > 0) + deviceComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected device by resetting the + /// fullscreen/windowed radio buttons. Updating these buttons + /// will trigger updates of the rest of the dialog. + /// + private void DeviceChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + settings.DeviceInfo = deviceInfo; + + // Update fullscreen/windowed radio buttons + bool HasWindowedDeviceCombo = false; + bool HasFullscreenDeviceCombo = false; + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + HasWindowedDeviceCombo = true; + else + HasFullscreenDeviceCombo = true; + } + windowedRadioButton.Enabled = HasWindowedDeviceCombo; + fullscreenRadioButton.Enabled = HasFullscreenDeviceCombo; + if (settings.IsWindowed && HasWindowedDeviceCombo) { + windowedRadioButton.Checked = true; + } + else { + fullscreenRadioButton.Checked = true; + } + WindowedFullscreenChanged(null, null); + } + + + + + /// + /// Respond to a change of windowed/fullscreen state by rebuilding the + /// adapter format list, resolution list, and refresh rate list. + /// Updating the selected adapter format will trigger updates of the + /// rest of the dialog. + /// + private void WindowedFullscreenChanged(object sender, System.EventArgs e) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + + if (windowedRadioButton.Checked) { + settings.IsWindowed = true; + settings.WindowedAdapterInfo = adapterInfo; + settings.WindowedDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + adapterFormatComboBox.Items.Add(settings.WindowedDisplayMode.Format); + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = false; + + // Update resolution combo box + resolutionComboBox.Items.Clear(); + resolutionComboBox.Items.Add(FormatResolution(settings.WindowedDisplayMode.Width, + settings.WindowedDisplayMode.Height)); + resolutionComboBox.SelectedIndex = 0; + resolutionComboBox.Enabled = false; + + // Update refresh rate combo box + refreshRateComboBox.Items.Clear(); + refreshRateComboBox.Items.Add(FormatRefreshRate(settings.WindowedDisplayMode.RefreshRate)); + refreshRateComboBox.SelectedIndex = 0; + refreshRateComboBox.Enabled = false; + } + else { + settings.IsWindowed = false; + settings.FullscreenAdapterInfo = adapterInfo; + settings.FullscreenDeviceInfo = deviceInfo; + + // Update adapter format combo box + adapterFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed) + continue; + if (!adapterFormatComboBox.Items.Contains(deviceCombo.AdapterFormat)) { + adapterFormatComboBox.Items.Add(deviceCombo.AdapterFormat); + if (deviceCombo.AdapterFormat == (settings.IsWindowed ? + settings.WindowedDisplayMode.Format : settings.FullscreenDisplayMode.Format)) { + adapterFormatComboBox.SelectedItem = deviceCombo.AdapterFormat; + } + } + } + if (adapterFormatComboBox.SelectedItem == null && adapterFormatComboBox.Items.Count > 0) + adapterFormatComboBox.SelectedIndex = 0; + adapterFormatComboBox.Enabled = true; + + // Update resolution combo box + resolutionComboBox.Enabled = true; + + // Update refresh rate combo box + refreshRateComboBox.Enabled = true; + } + } + + + + + /// + /// Converts the given width and height into a formatted string + /// + private string FormatResolution(int width, int height) { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} by {1}", width, height); + return sb.ToString(); + } + + + + + /// + /// Converts the given refresh rate into a formatted string + /// + private string FormatRefreshRate(int refreshRate) { + if (refreshRate == 0) { + return "Default Rate"; + } + else { + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + sb.AppendFormat("{0} Hz", refreshRate); + return sb.ToString(); + } + } + + + + + /// + /// Respond to a change of selected adapter format by rebuilding the + /// resolution list and back buffer format list. Updating the selected + /// resolution and back buffer format will trigger updates of the rest + /// of the dialog. + /// + private void AdapterFormatChanged(object sender, System.EventArgs e) { + if (!windowedRadioButton.Checked) { + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + settings.FullscreenDisplayMode.Format = adapterFormat; + System.Text.StringBuilder sb = new System.Text.StringBuilder(20); + + resolutionComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat) { + string resolutionString = FormatResolution(displayMode.Width, displayMode.Height); + if (!resolutionComboBox.Items.Contains(resolutionString)) { + resolutionComboBox.Items.Add(resolutionString); + if (settings.FullscreenDisplayMode.Width == displayMode.Width && + settings.FullscreenDisplayMode.Height == displayMode.Height) { + resolutionComboBox.SelectedItem = resolutionString; + } + } + } + } + if (resolutionComboBox.SelectedItem == null && resolutionComboBox.Items.Count > 0) + resolutionComboBox.SelectedIndex = 0; + } + + // Update backbuffer format combo box + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + backBufferFormatComboBox.Items.Clear(); + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == settings.DisplayMode.Format) { + if (!backBufferFormatComboBox.Items.Contains(deviceCombo.BackBufferFormat)) { + backBufferFormatComboBox.Items.Add(deviceCombo.BackBufferFormat); + if (deviceCombo.BackBufferFormat == settings.BackBufferFormat) + backBufferFormatComboBox.SelectedItem = deviceCombo.BackBufferFormat; + } + } + } + if (backBufferFormatComboBox.SelectedItem == null && backBufferFormatComboBox.Items.Count > 0) + backBufferFormatComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected resolution by rebuilding the + /// refresh rate list. + /// + private void ResolutionChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; + + // Update settings with new resolution + string resolution = (string)resolutionComboBox.SelectedItem; + string[] resolutionSplitStringArray = resolution.Split(); + int width = int.Parse(resolutionSplitStringArray[0]); + int height = int.Parse(resolutionSplitStringArray[2]); + settings.FullscreenDisplayMode.Width = width; + settings.FullscreenDisplayMode.Height = height; + + // Update refresh rate list based on new resolution + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + refreshRateComboBox.Items.Clear(); + foreach (DisplayMode displayMode in adapterInfo.DisplayModeList) { + if (displayMode.Format == adapterFormat && + displayMode.Width == width && + displayMode.Height == height) { + string refreshRateString = FormatRefreshRate(displayMode.RefreshRate); + if (!refreshRateComboBox.Items.Contains(refreshRateString)) { + refreshRateComboBox.Items.Add(refreshRateString); + if (settings.FullscreenDisplayMode.RefreshRate == displayMode.RefreshRate) + refreshRateComboBox.SelectedItem = refreshRateString; + } + } + } + if (refreshRateComboBox.SelectedItem == null && refreshRateComboBox.Items.Count > 0) + refreshRateComboBox.SelectedIndex = refreshRateComboBox.Items.Count - 1; + } + + + + + /// + /// Respond to a change of selected refresh rate. + /// + private void RefreshRateChanged(object sender, System.EventArgs e) { + if (settings.IsWindowed) + return; + + // Update settings with new refresh rate + string refreshRateString = (string)refreshRateComboBox.SelectedItem; + int refreshRate = 0; + if (refreshRateString != "Default Rate") { + string[] refreshRateSplitStringArray = refreshRateString.Split(); + refreshRate = int.Parse(refreshRateSplitStringArray[0]); + } + settings.FullscreenDisplayMode.RefreshRate = refreshRate; + } + + + + + /// + /// Respond to a change of selected back buffer format by rebuilding + /// the depth/stencil format list, multisample type list, and vertex + /// processing type list. + /// + private void BackBufferFormatChanged(object sender, System.EventArgs e) { + GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; + Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem; + Format backBufferFormat = (Format)backBufferFormatComboBox.SelectedItem; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + if (deviceCombo.IsWindowed == settings.IsWindowed && + deviceCombo.AdapterFormat == adapterFormat && + deviceCombo.BackBufferFormat == backBufferFormat) { + deviceCombo.BackBufferFormat = backBufferFormat; + settings.DeviceCombo = deviceCombo; + + depthStencilBufferComboBox.Items.Clear(); + if (enumeration.AppUsesDepthBuffer) { + foreach (DepthFormat format in deviceCombo.DepthStencilFormatList) { + depthStencilBufferComboBox.Items.Add(format); + if (format == settings.DepthStencilBufferFormat) + depthStencilBufferComboBox.SelectedItem = format; + } + if (depthStencilBufferComboBox.SelectedItem == null && depthStencilBufferComboBox.Items.Count > 0) + depthStencilBufferComboBox.SelectedIndex = 0; + } + else { + depthStencilBufferComboBox.Enabled = false; + depthStencilBufferComboBox.Items.Add("(not used)"); + depthStencilBufferComboBox.SelectedIndex = 0; + } + + vertexProcComboBox.Items.Clear(); + foreach (VertexProcessingType vpt in deviceCombo.VertexProcessingTypeList) { + vertexProcComboBox.Items.Add(vpt); + if (vpt == settings.VertexProcessingType) + vertexProcComboBox.SelectedItem = vpt; + } + if (vertexProcComboBox.SelectedItem == null && vertexProcComboBox.Items.Count > 0) + vertexProcComboBox.SelectedIndex = 0; + + presentIntervalComboBox.Items.Clear(); + foreach (PresentInterval pi in deviceCombo.PresentIntervalList) { + presentIntervalComboBox.Items.Add(pi); + if (pi == settings.PresentInterval) + presentIntervalComboBox.SelectedItem = pi; + } + if (presentIntervalComboBox.SelectedItem == null && presentIntervalComboBox.Items.Count > 0) + presentIntervalComboBox.SelectedIndex = 0; + + break; + } + } + } + + + + + /// + /// Respond to a change of selected depth/stencil buffer format. + /// + private void DepthStencilBufferFormatChanged(object sender, System.EventArgs e) { + if (enumeration.AppUsesDepthBuffer) + settings.DepthStencilBufferFormat = (DepthFormat)depthStencilBufferComboBox.SelectedItem; + + multisampleComboBox.Items.Clear(); + foreach (MultiSampleType msType in settings.DeviceCombo.MultiSampleTypeList) { + // Check for DS/MS conflict + bool conflictFound = false; + foreach (DepthStencilMultiSampleConflict DSMSConflict in settings.DeviceCombo.DepthStencilMultiSampleConflictList) { + if (DSMSConflict.DepthStencilFormat == settings.DepthStencilBufferFormat && + DSMSConflict.MultiSampleType == msType) { + conflictFound = true; + break; + } + } + if (!conflictFound) { + multisampleComboBox.Items.Add(msType); + if (msType == settings.MultisampleType) + multisampleComboBox.SelectedItem = msType; + } + } + if (multisampleComboBox.SelectedItem == null && multisampleComboBox.Items.Count > 0) + multisampleComboBox.SelectedIndex = 0; + + } + + + + + /// + /// Respond to a change of selected multisample type. + /// + private void MultisampleTypeChanged(object sender, System.EventArgs e) { + settings.MultisampleType = (MultiSampleType)multisampleComboBox.SelectedItem; + + // Find current max multisample quality + int maxQuality = 0; + DeviceCombo deviceCombo = settings.DeviceCombo; + for (int i = 0; i < deviceCombo.MultiSampleQualityList.Count; i++) { + if ((MultiSampleType)deviceCombo.MultiSampleTypeList[i] == settings.MultisampleType) { + maxQuality = (int)deviceCombo.MultiSampleQualityList[i]; + break; + } + } + + // Update multisample quality list based on new type + multisampleQualityComboBox.Items.Clear(); + for (int iLevel = 0; iLevel < maxQuality; iLevel++) { + multisampleQualityComboBox.Items.Add(iLevel); + if (settings.MultisampleQuality == iLevel) + multisampleQualityComboBox.SelectedItem = iLevel; + } + if (multisampleQualityComboBox.SelectedItem == null && multisampleQualityComboBox.Items.Count > 0) + multisampleQualityComboBox.SelectedIndex = 0; + } + + + + + /// + /// Respond to a change of selected multisample quality. + /// + private void MultisampleQualityChanged(object sender, System.EventArgs e) { + settings.MultisampleQuality = (int)multisampleQualityComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void VertexProcessingChanged(object sender, System.EventArgs e) { + settings.VertexProcessingType = (VertexProcessingType)vertexProcComboBox.SelectedItem; + } + + + + + /// + /// Respond to a change of selected vertex processing type. + /// + private void PresentIntervalChanged(object sender, System.EventArgs e) { + settings.PresentInterval = (PresentInterval)presentIntervalComboBox.SelectedItem; + } +} + + +/// +/// Current D3D settings: adapter, device, mode, formats, etc. +/// +public class D3DSettings { + public bool IsWindowed; + + public GraphicsAdapterInfo WindowedAdapterInfo; + public GraphicsDeviceInfo WindowedDeviceInfo; + public DeviceCombo WindowedDeviceCombo; + public DisplayMode WindowedDisplayMode; // not changable by the user + public DepthFormat WindowedDepthStencilBufferFormat; + public MultiSampleType WindowedMultisampleType; + public int WindowedMultisampleQuality; + public VertexProcessingType WindowedVertexProcessingType; + public PresentInterval WindowedPresentInterval; + public int WindowedWidth; + public int WindowedHeight; + + public GraphicsAdapterInfo FullscreenAdapterInfo; + public GraphicsDeviceInfo FullscreenDeviceInfo; + public DeviceCombo FullscreenDeviceCombo; + public DisplayMode FullscreenDisplayMode; // changable by the user + public DepthFormat FullscreenDepthStencilBufferFormat; + public MultiSampleType FullscreenMultisampleType; + public int FullscreenMultisampleQuality; + public VertexProcessingType FullscreenVertexProcessingType; + public PresentInterval FullscreenPresentInterval; + + + + + /// + /// The adapter information + /// + public GraphicsAdapterInfo AdapterInfo { + get { return IsWindowed ? WindowedAdapterInfo : FullscreenAdapterInfo; } + set { if (IsWindowed) WindowedAdapterInfo = value; else FullscreenAdapterInfo = value; } + } + + + + + /// + /// The device information + /// + public GraphicsDeviceInfo DeviceInfo { + get { return IsWindowed ? WindowedDeviceInfo : FullscreenDeviceInfo; } + set { if (IsWindowed) WindowedDeviceInfo = value; else FullscreenDeviceInfo = value; } + } + + + + + /// + /// The device combo + /// + public DeviceCombo DeviceCombo { + get { return IsWindowed ? WindowedDeviceCombo : FullscreenDeviceCombo; } + set { if (IsWindowed) WindowedDeviceCombo = value; else FullscreenDeviceCombo = value; } + } + + + + + /// + /// The adapters ordinal + /// + public int AdapterOrdinal { + get { return DeviceCombo.AdapterOrdinal; } + } + + + + + /// + /// The type of device this is + /// + public DeviceType DevType { + get { return DeviceCombo.DevType; } + } + + + + + /// + /// The back buffers format + /// + public Format BackBufferFormat { + get { return DeviceCombo.BackBufferFormat; } + } + + + + + /// + /// The display mode + /// + public DisplayMode DisplayMode { + get { return IsWindowed ? WindowedDisplayMode : FullscreenDisplayMode; } + set { if (IsWindowed) WindowedDisplayMode = value; else FullscreenDisplayMode = value; } + } + + + + + /// + /// The Depth stencils format + /// + public DepthFormat DepthStencilBufferFormat { + get { return IsWindowed ? WindowedDepthStencilBufferFormat : FullscreenDepthStencilBufferFormat; } + set { if (IsWindowed) WindowedDepthStencilBufferFormat = value; else FullscreenDepthStencilBufferFormat = value; } + } + + + + + /// + /// The multisample type + /// + public MultiSampleType MultisampleType { + get { return IsWindowed ? WindowedMultisampleType : FullscreenMultisampleType; } + set { if (IsWindowed) WindowedMultisampleType = value; else FullscreenMultisampleType = value; } + } + + + + + /// + /// The multisample quality + /// + public int MultisampleQuality { + get { return IsWindowed ? WindowedMultisampleQuality : FullscreenMultisampleQuality; } + set { if (IsWindowed) WindowedMultisampleQuality = value; else FullscreenMultisampleQuality = value; } + } + + + + + /// + /// The vertex processing type + /// + public VertexProcessingType VertexProcessingType { + get { return IsWindowed ? WindowedVertexProcessingType : FullscreenVertexProcessingType; } + set { if (IsWindowed) WindowedVertexProcessingType = value; else FullscreenVertexProcessingType = value; } + } + + + + + /// + /// The presentation interval + /// + public PresentInterval PresentInterval { + get { return IsWindowed ? WindowedPresentInterval : FullscreenPresentInterval; } + set { if (IsWindowed) WindowedPresentInterval = value; else FullscreenPresentInterval = value; } + } + + + + + /// + /// Clone the d3d settings class + /// + public D3DSettings Clone() { + return (D3DSettings)MemberwiseClone(); + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/D3DSettingsForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step12/D3DSettingsForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/D3DSettingsForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect.cs new file mode 100644 index 0000000..e0e11ae --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect.cs @@ -0,0 +1,254 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; +using System.Runtime.InteropServices; + + + + +/// +/// The connection wizard will allow our users to pick a service provider, +/// and then connect to an existing application, or create a new one as the host. +/// +public class ConnectWizard { + private Peer peerObject; + private Address deviceAddress; + + private ChooseServiceProviderForm serviceProviderForm; + private CreateJoinForm createJoinForm; + + private Guid serviceProviderGuid; + private string username; + private string samplename; + private bool isInSession = false; + private bool isHost = false; + private int port = 0; + + private Guid applicationGuid; + + + + + /// + /// Constructor + /// + /// + /// + /// + public ConnectWizard(Peer peer, Guid application, string sampleName) { + peerObject = peer; + applicationGuid = application; + samplename = sampleName; + } + + + + + /// + /// The guid for the current service provider + /// + public Guid ServiceProvider { + get { + return serviceProviderGuid; } + set { + serviceProviderGuid = value; } + } + + + + + /// + /// The game's default port number + /// + public int DefaultPort { + get { + return port; } + set { + port = value; } + } + + + + + /// + /// Am I the host + /// + public bool IsHost { + get { + return isHost; } + set { + isHost = value; } + } + + + + + /// + /// The username + /// + public string Username { + get { + return username; } + set { + username = value; } + } + + + + + /// + /// The sample name + /// + public string SampleName { + get { + return samplename; } + } + + + + + /// + /// The applications guid + /// + public Guid ApplicationGuid { + get { + return applicationGuid; } + } + + + + + /// + /// Are we in a session + /// + public bool InSession { + get { return isInSession; } + set { isInSession = value; } + } + + + + + /// + /// Returns true if the given provider requires a port component + /// + /// ServiceProvider Guid + /// + static public bool ProviderRequiresPort(Guid provider) { + return (provider != Address.ServiceProviderSerial && + provider != Address.ServiceProviderModem && + provider != Address.ServiceProviderBlueTooth); + } + + + + + /// + /// Handler for when our form is disposed + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createJoinForm) + createJoinForm = null; + + if (sender == serviceProviderForm) + serviceProviderForm = null; + } + + + + + /// + /// Set the user information + /// + public void SetUserInfo() { + //Before we call host, let's actually call SetPeerInformation + PlayerInformation myinformation = new PlayerInformation(); + myinformation.Name = username; + + peerObject.SetPeerInformation(myinformation, SyncFlags.PeerInformation); + } + + + + + /// + /// Show the service providers form + /// + /// True if a service provider was picked, false otherwise + public bool DoShowServiceProviders() { + if (serviceProviderForm == null) { + username = null; + serviceProviderForm = new ChooseServiceProviderForm(peerObject,this); + serviceProviderForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (serviceProviderForm.ShowDialog() == DialogResult.OK) + return true; + + // The didn't hit ok + return false; + } + + + + + /// + /// Show the create or join screen + /// + /// True if we will be in a session, false otherwise + public bool DoCreateJoinGame() { + if (deviceAddress != null) + deviceAddress.Dispose(); + + deviceAddress = new Address(); + + if (createJoinForm != null) + createJoinForm.Dispose(); + + createJoinForm = new CreateJoinForm(peerObject, deviceAddress, this); + createJoinForm.Disposed += new System.EventHandler(this.FormDisposed); + + //Set the address's service provider (this will be the device address) + deviceAddress.ServiceProvider = serviceProviderGuid; + DialogResult drCreateJoin = createJoinForm.ShowDialog(); + if (drCreateJoin == DialogResult.Cancel) + return false; + + this.isHost = (drCreateJoin == DialogResult.Yes); + return true; + + } + + + + + /// + /// Start the wizard + /// + /// True if we are in a session, false otherwise + public bool StartWizard() { + isInSession = false; + + while (this.DoShowServiceProviders()) { + //Now let's create a game or join a session + if (this.DoCreateJoinGame()) { + // A game has been created or joined now, set our flag + isInSession = true; + break; + } + } + return isInSession; + } +} + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_AddressForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_AddressForm.cs new file mode 100644 index 0000000..bdf380d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_AddressForm.cs @@ -0,0 +1,207 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_AddressForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// Summary description for AddressForm. +/// +public class AddressForm : System.Windows.Forms.Form { + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox hostnameTextBox; + private System.Windows.Forms.TextBox portTextBox; + + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + /// + /// Constructor + /// + public AddressForm( int defaultPort ) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + // Set default port value + Port = defaultPort; + } + + + + + /// + /// The remote port on which to connect + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(portTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + portTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Remote hostname + /// + public string Hostname { + get { + return hostnameTextBox.Text; } + set { + hostnameTextBox.Text = value; } + } + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.label1 = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.hostnameTextBox = new System.Windows.Forms.TextBox(); + this.portTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(248, 48); + this.label1.TabIndex = 0; + this.label1.Text = "Please enter the optional components of the remote session address. If set blank," + + " DirectPlay will attempt to search the local network."; + // + // okButton + // + this.okButton.Location = new System.Drawing.Point(104, 144); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(72, 24); + this.okButton.TabIndex = 1; + this.okButton.Text = "&OK"; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(184, 144); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(72, 24); + this.cancelButton.TabIndex = 2; + this.cancelButton.Text = "&Cancel"; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // label2 + // + this.label2.Location = new System.Drawing.Point(32, 80); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(100, 16); + this.label2.TabIndex = 3; + this.label2.Text = "Hostname"; + // + // label3 + // + this.label3.Location = new System.Drawing.Point(160, 80); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(56, 16); + this.label3.TabIndex = 4; + this.label3.Text = "Port"; + // + // hostnameTextBox + // + this.hostnameTextBox.Location = new System.Drawing.Point(32, 96); + this.hostnameTextBox.Name = "hostnameTextBox"; + this.hostnameTextBox.Size = new System.Drawing.Size(120, 20); + this.hostnameTextBox.TabIndex = 5; + this.hostnameTextBox.Text = ""; + // + // portTextBox + // + this.portTextBox.Location = new System.Drawing.Point(160, 96); + this.portTextBox.Name = "portTextBox"; + this.portTextBox.Size = new System.Drawing.Size(56, 20); + this.portTextBox.TabIndex = 6; + this.portTextBox.Text = "2580"; + // + // AddressForm + // + this.AcceptButton = this.okButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(264, 176); + this.Controls.Add(this.portTextBox); + this.Controls.Add(this.hostnameTextBox); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.okButton); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AddressForm"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Remote Address"; + this.ResumeLayout(false); + + } + #endregion + + private void okButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.OK; + } + + private void cancelButton_Click(object sender, System.EventArgs e) { + DialogResult = DialogResult.Cancel; + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_AddressForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_AddressForm.resx new file mode 100644 index 0000000..a899c39 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_AddressForm.resx @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + AddressForm + + + 8, 8 + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_CreateForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_CreateForm.cs new file mode 100644 index 0000000..72e8505 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_CreateForm.cs @@ -0,0 +1,346 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_CreateForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will allow you to create a new session, and set certain properties +/// of the session. +/// +public class CreateSessionForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.TextBox txtSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton notSignedRadio; + private System.Windows.Forms.RadioButton fullSignedRadio; + private System.Windows.Forms.RadioButton fastSignedRadio; + private System.Windows.Forms.CheckBox migrateHostCheckBox; + private System.Windows.Forms.CheckBox useDPNSVRCheckBox; + private System.Windows.Forms.TextBox localPortTextBox; + private System.Windows.Forms.Label localPortLabel; + private System.Windows.Forms.Button btnCancel; + + + + /// + /// Constructor + /// + public CreateSessionForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + + peer = peerObject; + this.connectionWizard = connectionWizard; + deviceAddress = addressObject; + txtSession.Text = null; + this.Text = connectionWizard.SampleName + " - " + this.Text; + //Get the default session from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + // Get session name + txtSession.Text = (string)regKey.GetValue("DirectPlaySessionName", null); + + // Get host migration option + if (regKey.GetValue("DirectPlayMigrateHost",null) != null) { + migrateHostCheckBox.Checked = ((int)regKey.GetValue("DirectPlayMigrateHost",1)==1); + } + + + // Get session signing option + if (regKey.GetValue("DirectPlaySessionSigning",null) != null) { + if ("Full" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fullSignedRadio.Checked = true; + else if ("Fast" == (string)regKey.GetValue("DirectPlaySessionSigning",null)) + fastSignedRadio.Checked = true; + else + notSignedRadio.Checked = true; + } + + regKey.Close(); + } + + // Set default port value and hide port UI if provider doesn't use them + Port = connectionWizard.DefaultPort; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + localPortTextBox.Hide(); + localPortLabel.Hide(); + } + } + + + + /// + /// The port on which to host + /// + public int Port { + get { + int port = 0; + + try { + port = int.Parse(localPortTextBox.Text); + } + catch {} + + return port; + } + set { + if( value > 0 ) + localPortTextBox.Text = value.ToString(); + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.txtSession = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.fullSignedRadio = new System.Windows.Forms.RadioButton(); + this.fastSignedRadio = new System.Windows.Forms.RadioButton(); + this.notSignedRadio = new System.Windows.Forms.RadioButton(); + this.migrateHostCheckBox = new System.Windows.Forms.CheckBox(); + this.useDPNSVRCheckBox = new System.Windows.Forms.CheckBox(); + this.localPortLabel = new System.Windows.Forms.Label(); + this.localPortTextBox = new System.Windows.Forms.TextBox(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // txtSession + // + this.txtSession.Location = new System.Drawing.Point(96, 24); + this.txtSession.Name = "txtSession"; + this.txtSession.Size = new System.Drawing.Size(176, 20); + this.txtSession.TabIndex = 3; + this.txtSession.Text = "SpaceWar"; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(16, 28); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(288, 12); + this.label1.TabIndex = 2; + this.label1.Text = "Session Name:"; + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(128, 168); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(208, 168); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 1; + this.btnCancel.Text = "Cancel"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.fullSignedRadio); + this.groupBox1.Controls.Add(this.fastSignedRadio); + this.groupBox1.Controls.Add(this.notSignedRadio); + this.groupBox1.Location = new System.Drawing.Point(16, 64); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(112, 88); + this.groupBox1.TabIndex = 10; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Session Signing"; + this.groupBox1.Visible = false; + // + // fullSignedRadio + // + this.fullSignedRadio.Location = new System.Drawing.Point(18, 22); + this.fullSignedRadio.Name = "fullSignedRadio"; + this.fullSignedRadio.Size = new System.Drawing.Size(80, 16); + this.fullSignedRadio.TabIndex = 9; + this.fullSignedRadio.Text = "Full signed"; + // + // fastSignedRadio + // + this.fastSignedRadio.Checked = true; + this.fastSignedRadio.Location = new System.Drawing.Point(18, 41); + this.fastSignedRadio.Name = "fastSignedRadio"; + this.fastSignedRadio.Size = new System.Drawing.Size(88, 16); + this.fastSignedRadio.TabIndex = 8; + this.fastSignedRadio.TabStop = true; + this.fastSignedRadio.Text = "Fast signed"; + // + // notSignedRadio + // + this.notSignedRadio.Location = new System.Drawing.Point(18, 55); + this.notSignedRadio.Name = "notSignedRadio"; + this.notSignedRadio.Size = new System.Drawing.Size(72, 24); + this.notSignedRadio.TabIndex = 10; + this.notSignedRadio.Text = "Disabled"; + // + // migrateHostCheckBox + // + this.migrateHostCheckBox.Location = new System.Drawing.Point(144, 64); + this.migrateHostCheckBox.Name = "migrateHostCheckBox"; + this.migrateHostCheckBox.Size = new System.Drawing.Size(136, 24); + this.migrateHostCheckBox.TabIndex = 11; + this.migrateHostCheckBox.Text = "Enable Host Migration"; + this.migrateHostCheckBox.Visible = false; + // + // useDPNSVRCheckBox + // + this.useDPNSVRCheckBox.Location = new System.Drawing.Point(144, 84); + this.useDPNSVRCheckBox.Name = "useDPNSVRCheckBox"; + this.useDPNSVRCheckBox.Size = new System.Drawing.Size(136, 24); + this.useDPNSVRCheckBox.TabIndex = 12; + this.useDPNSVRCheckBox.Text = "Use DPNSVR"; + this.useDPNSVRCheckBox.Visible = false; + // + // localPortLabel + // + this.localPortLabel.Location = new System.Drawing.Point(152, 122); + this.localPortLabel.Name = "localPortLabel"; + this.localPortLabel.Size = new System.Drawing.Size(64, 17); + this.localPortLabel.TabIndex = 13; + this.localPortLabel.Text = "Local Port:"; + // + // localPortTextBox + // + this.localPortTextBox.Location = new System.Drawing.Point(216, 120); + this.localPortTextBox.Name = "localPortTextBox"; + this.localPortTextBox.Size = new System.Drawing.Size(56, 20); + this.localPortTextBox.TabIndex = 14; + this.localPortTextBox.Text = "2580"; + // + // CreateSessionForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(290, 200); + this.ControlBox = false; + this.Controls.Add(this.localPortTextBox); + this.Controls.Add(this.localPortLabel); + this.Controls.Add(this.useDPNSVRCheckBox); + this.Controls.Add(this.migrateHostCheckBox); + this.Controls.Add(this.txtSession); + this.Controls.Add(this.label1); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.btnCancel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.HelpButton = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateSessionForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Create a Session"; + this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.CreateSessionForm_HelpRequested); + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// We are ready to create a session. Ensure the data is valid + /// then create the session + /// + private void btnOK_Click(object sender, System.EventArgs e) { + ApplicationDescription dpApp; + if ((txtSession.Text == null) || (txtSession.Text == "")) { + MessageBox.Show(this,"Please enter a session name before clicking OK.","No sessionname",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlaySessionName", txtSession.Text); + if (migrateHostCheckBox.Checked) + regKey.SetValue("DirectPlayMigrateHost",1); + else + regKey.SetValue("DirectPlayMigrateHost",0); + + if (fastSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Fast"); + else if (fullSignedRadio.Checked) + regKey.SetValue("DirectPlaySessionSigning","Full"); + else + regKey.SetValue("DirectPlaySessionSigning","Disabled"); + regKey.Close(); + } + + dpApp = new ApplicationDescription(); + dpApp.GuidApplication = connectionWizard.ApplicationGuid; + dpApp.SessionName = txtSession.Text; + dpApp.Flags = 0; + dpApp.MaxPlayers = 2; + + if (migrateHostCheckBox.Checked) + dpApp.Flags |= SessionFlags.MigrateHost; + + if (!useDPNSVRCheckBox.Checked) + dpApp.Flags |= SessionFlags.NoDpnServer; + + if (fastSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FastSigned; + else if (fullSignedRadio.Checked) + dpApp.Flags |= SessionFlags.FullSigned; + + // Specify the port number if available + if (ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) { + if (Port > 0) + deviceAddress.AddComponent(Address.KeyPort, Port); + } + + connectionWizard.SetUserInfo(); + // Host a game on deviceAddress as described by dpApp + // HostFlags.OkToQueryForAddressing allows DirectPlay to prompt the user + // using a dialog box for any device address information that is missing + peer.Host(dpApp,deviceAddress,HostFlags.OkToQueryForAddressing); + this.DialogResult = DialogResult.OK; + } + + private void CreateSessionForm_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent) { + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_CreateForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_CreateForm.resx new file mode 100644 index 0000000..3e4ebdd --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_CreateForm.resx @@ -0,0 +1,247 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Private + + + Private + + + False + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + True + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + True + + + 80 + + + CreateSessionForm + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_JoinForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_JoinForm.cs new file mode 100644 index 0000000..a86efa7 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_JoinForm.cs @@ -0,0 +1,481 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_JoinForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using System.Threading; +using System.Timers; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + + +/// +/// This form will search for existing running samples and allow you to join them or will +/// allow you to create your own session as a host +/// +public class CreateJoinForm : System.Windows.Forms.Form { + private const int EnumExpireThreshold = 2000; + private bool amJoining = false; + + + + + /// + /// Hold our information of hosts we found + /// + private struct FindHostsResponseInformation { + public int LastFoundTime; + public ApplicationDescription ApplicationDesc; + public int RoundTripLatencyMs; + public Address sender; + public Address device; + public override string ToString() { + if (ApplicationDesc.MaxPlayers > 0) + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + "/" + ApplicationDesc.MaxPlayers + ") (" + RoundTripLatencyMs + "ms)"; + else + return ApplicationDesc.SessionName + " (" + ApplicationDesc.CurrentPlayers + ") (" + RoundTripLatencyMs + "ms)"; + } + }; + + private Peer peer; + private ConnectWizard connectionWizard; + private Address deviceAddress; + private Address hostAddress = null; + private bool isSearching = false; + private int findHostHandle = 0; + private CreateSessionForm createSessionForm = null; + private ResultCode resultCode; + private ArrayList foundHosts = new ArrayList(); + private bool isConnected = false; + private ManualResetEvent connectEvent = null; + private System.Timers.Timer updateListTimer = null; + private System.Timers.Timer connectTimer = null; + + private System.Windows.Forms.ListBox lstSession; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.Button btnSearch; + private System.Windows.Forms.Button btnJoin; + private System.Windows.Forms.Button btnCreate; + + + + + /// + /// Constructor + /// + public CreateJoinForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + deviceAddress = addressObject; + + //Set up the event handlers + peer.FindHostResponse += new FindHostResponseEventHandler(FindHostResponseMessage); + peer.ConnectComplete += new ConnectCompleteEventHandler(ConnectResult); + peer.AsyncOperationComplete += new AsyncOperationCompleteEventHandler(CancelAsync); + + //Set up our timer + updateListTimer = new System.Timers.Timer(300); // A 300 ms interval + updateListTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.UpdateTimer); + updateListTimer.SynchronizingObject = this; + updateListTimer.Start(); + //Set up our connect timer + connectTimer = new System.Timers.Timer(100); // A 100ms interval + connectTimer.Elapsed += new System.Timers.ElapsedEventHandler(this.ConnectTimer); + connectTimer.SynchronizingObject = this; + // Set up our connect event + connectEvent = new ManualResetEvent(false); + + } + + + + + /// + /// An asynchronous operation was cancelled + /// + private void CancelAsync(object sender, AsyncOperationCompleteEventArgs e) { + if (e.Message.AsyncOperationHandle == findHostHandle) { + findHostHandle = 0; + btnSearch.Text = "Start Search"; + isSearching = false; + btnCreate.Enabled = true; + btnSearch.Enabled = true; + } + } + + + + + /// + /// A host was found and responded to our query + /// + private void FindHostResponseMessage(object sender, FindHostResponseEventArgs dpMessage) { + // Now we need to add this to our list of available sessions + SessionAdd(dpMessage.Message); + } + + + + + /// + /// Add this session to our list + /// + /// + private void SessionAdd(FindHostsResponseMessage dpMessage) { + FindHostsResponseInformation dpInfo = new FindHostsResponseInformation(); + + dpInfo.ApplicationDesc = dpMessage.ApplicationDescription; + dpInfo.device = dpMessage.AddressDevice; + dpInfo.sender = dpMessage.AddressSender; + dpInfo.RoundTripLatencyMs = dpMessage.RoundTripLatencyMs; + dpInfo.LastFoundTime = Environment.TickCount; + + // Let's check the items first and see if this one already exists + bool isFound = false; + + lock (foundHosts) { + for (int i = 0; i < lstSession.Items.Count; i++) { + if (dpInfo.ApplicationDesc.GuidInstance == ((FindHostsResponseInformation)lstSession.Items[i]).ApplicationDesc.GuidInstance) { + foundHosts[i] = dpInfo; + lstSession.Items[i] = dpInfo; + isFound = true; + } + } + if (!isFound) { + lstSession.Items.Add(dpInfo); + foundHosts.Add(dpInfo); + } + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + + if (isSearching) { + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + isSearching = !isSearching; + } + if (connectTimer != null) + connectTimer.Dispose(); + + if (updateListTimer != null) + updateListTimer.Dispose(); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.btnJoin = new System.Windows.Forms.Button(); + this.lstSession = new System.Windows.Forms.ListBox(); + this.label1 = new System.Windows.Forms.Label(); + this.btnCreate = new System.Windows.Forms.Button(); + this.btnSearch = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnJoin + // + this.btnJoin.Enabled = false; + this.btnJoin.Location = new System.Drawing.Point(7, 227); + this.btnJoin.Name = "btnJoin"; + this.btnJoin.Size = new System.Drawing.Size(74, 27); + this.btnJoin.TabIndex = 2; + this.btnJoin.Text = "Join"; + this.btnJoin.Click += new System.EventHandler(this.btnJoin_Click); + // + // lstSession + // + this.lstSession.Location = new System.Drawing.Point(5, 37); + this.lstSession.Name = "lstSession"; + this.lstSession.Size = new System.Drawing.Size(400, 186); + this.lstSession.TabIndex = 1; + this.lstSession.DoubleClick += new System.EventHandler(this.btnJoin_Click); + this.lstSession.SelectedValueChanged += new System.EventHandler(this.SelectedChange); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(5, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(312, 16); + this.label1.TabIndex = 0; + this.label1.Text = "Select session to join, or click Create to start a new session."; + // + // btnCreate + // + this.btnCreate.DialogResult = System.Windows.Forms.DialogResult.Yes; + this.btnCreate.Location = new System.Drawing.Point(84, 227); + this.btnCreate.Name = "btnCreate"; + this.btnCreate.Size = new System.Drawing.Size(74, 27); + this.btnCreate.TabIndex = 2; + this.btnCreate.Text = "Create"; + this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click); + // + // btnSearch + // + this.btnSearch.Location = new System.Drawing.Point(319, 7); + this.btnSearch.Name = "btnSearch"; + this.btnSearch.Size = new System.Drawing.Size(86, 27); + this.btnSearch.TabIndex = 2; + this.btnSearch.Text = "Start Search"; + this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(333, 227); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + // + // CreateJoinForm + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(411, 264); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.btnCreate, + this.btnJoin, + this.btnSearch, + this.btnCancel, + this.lstSession, + this.label1}); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "CreateJoinForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Join or create a session"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// The selected session was changed. + /// + private void SelectedChange(object sender, System.EventArgs e) { + if (amJoining) + return; // Do nothing if we are already joining a session + + btnJoin.Enabled = (lstSession.SelectedItem != null); + } + + + + + /// + /// We either want to start or stop searching + /// + private void btnSearch_Click(object sender, System.EventArgs e) { + if (!isSearching) { + if( hostAddress != null ) + hostAddress.Dispose(); + + hostAddress = new Address(); + hostAddress.ServiceProvider = deviceAddress.ServiceProvider; + + // See if we should prompt the user for the remote address + if (ConnectWizard.ProviderRequiresPort(hostAddress.ServiceProvider)) { + AddressForm addressDialog = new AddressForm(connectionWizard.DefaultPort); + addressDialog.ShowDialog(this); + + // If the user cancelled the address form, abort the search + if (addressDialog.DialogResult != DialogResult.OK) + return; + + // If a port was specified, add the component + if (addressDialog.Hostname != "") + hostAddress.AddComponent(Address.KeyHostname, addressDialog.Hostname); + + // If a hostname was specified, add the component + if (addressDialog.Port > 0) + hostAddress.AddComponent(Address.KeyPort, addressDialog.Port); + } + + //Time to enum our hosts + ApplicationDescription desc = new ApplicationDescription(); + desc.GuidApplication = connectionWizard.ApplicationGuid; + + // If the user was not already asked for address information, DirectPlay + // should prompt with native UI + FindHostsFlags flags = 0; + if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider)) + flags = FindHostsFlags.OkToQueryForAddressing; + + peer.FindHosts(desc,hostAddress,deviceAddress,null,Timeout.Infinite,0,Timeout.Infinite, flags, out findHostHandle); + isSearching = true; + btnCreate.Enabled = false; + btnSearch.Text = "Stop Search"; + } + else { + btnSearch.Text = "Stopping..."; + btnSearch.Enabled = false; + if (findHostHandle != 0) + peer.CancelAsyncOperation(findHostHandle); + } + } + + + + + /// + /// A form was disposed + /// + /// + /// + public void FormDisposed(object sender, EventArgs e) { + if (sender == createSessionForm) + createSessionForm = null; + } + + + + + /// + /// We should create a new session. Display a dialog allowing the user to set + /// certain options + /// + private void btnCreate_Click(object sender, System.EventArgs e) { + this.DialogResult = DialogResult.None; + ((Button)sender).DialogResult = DialogResult.None; + if (createSessionForm == null) { + createSessionForm = new CreateSessionForm(peer,deviceAddress,connectionWizard); + createSessionForm.Disposed += new System.EventHandler(this.FormDisposed); + } + if (createSessionForm.ShowDialog(this) != DialogResult.Cancel) { + ((Button)sender).DialogResult = DialogResult.Yes; + this.DialogResult = DialogResult.Yes; + } + } + + + + + /// + /// Determine if we need to expire any of our currently listed servers + /// + private void UpdateTimer(object sender, System.Timers.ElapsedEventArgs e) { + lock (foundHosts) { + for (int i = 0; i< foundHosts.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)foundHosts[i]).LastFoundTime > EnumExpireThreshold) { + foundHosts.RemoveAt(i); + break; + } + } + for (int i = 0; i< lstSession.Items.Count; i++) { + // First check to see if this session has expired + if (Environment.TickCount - ((FindHostsResponseInformation)lstSession.Items[i]).LastFoundTime > EnumExpireThreshold) { + lstSession.Items.RemoveAt(i); + break; + } + } + } + } + + + + + /// + /// Wait for a connect to complete + /// + private void ConnectTimer(object sender, System.Timers.ElapsedEventArgs e) { + if (connectEvent.WaitOne(0,false)) { // Wait for the Connect event to be fired + if (isConnected) { // Are we connected? + // Get rid of the timer + if (updateListTimer != null) + updateListTimer.Stop(); + + if (connectTimer != null) + connectTimer.Stop(); + + this.DialogResult = DialogResult.OK; + this.Close(); + return; + } + else { + MessageBox.Show(this,"Failed to connect. The error code was: \n" + resultCode.ToString() ,"Failed to connect",MessageBoxButtons.OK,MessageBoxIcon.Information); + // Restart our timer + updateListTimer.Start(); + } + } + } + + + + + /// + /// Fired when a connect complete message is received from DirectPlay. Fire + /// our event to notify the sample we've connected + /// + private void ConnectResult(object sender, ConnectCompleteEventArgs e) { + if (e.Message.ResultCode == 0) { + isConnected = true; + } + else + isConnected = false; + + resultCode = e.Message.ResultCode; + // Notify the timer that we've connected. + connectEvent.Set(); + } + + + + + /// + /// Join an existing session + /// + private void btnJoin_Click(object sender, System.EventArgs e) { + FindHostsResponseInformation dpInfo; + if (lstSession.SelectedItem == null) { + MessageBox.Show(this,"Please select a session before clicking join.","No session",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + // Turn off all buttons + btnCreate.Enabled = false; + btnCancel.Enabled = false; + btnJoin.Enabled = false; + btnSearch.Enabled = false; + amJoining = true; + // Stop our secondary timer + updateListTimer.Stop(); + dpInfo = ((FindHostsResponseInformation)lstSession.SelectedItem); + connectionWizard.SetUserInfo(); + peer.Connect(dpInfo.ApplicationDesc,dpInfo.sender, dpInfo.device,null,ConnectFlags.OkToQueryForAddressing); + // Now start our 'Connect' timer + connectTimer.Start(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_JoinForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_JoinForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_JoinForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_ServiceProviderForm.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_ServiceProviderForm.cs new file mode 100644 index 0000000..4884d84 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_ServiceProviderForm.cs @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------- +// File: DPlayConnect_ServiceProviderForm.cs +// +// Desc: Application class for the DirectPlay samples framework. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +/// +/// This form allows you to choose a service provider and username for your +/// sample +/// +public class ChooseServiceProviderForm : System.Windows.Forms.Form { + private Peer peer; + private ConnectWizard connectionWizard; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListBox lstSP; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtUser; + private System.Windows.Forms.Button btnCancel; + + + + + /// + /// Constructor + /// + public ChooseServiceProviderForm(Peer peerObject, ConnectWizard connectionWizard) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + peer = peerObject; + this.connectionWizard = connectionWizard; + this.Text = connectionWizard.SampleName + " - " + this.Text; + // Fill up our listbox with the service providers + ServiceProviderInformation[] serviceProviders = peer.GetServiceProviders(false); + foreach (ServiceProviderInformation info in serviceProviders) + lstSP.Items.Add(info); + + txtUser.Text = null; + //Get the default username from the registry if it exists + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + try { + txtUser.Text = (string)regKey.GetValue("DirectPlayUserName", null); + lstSP.SelectedIndex = (int)regKey.GetValue("DirectPlaySPIndex", 0); + regKey.Close(); + } + catch { + txtUser.Text = null; + lstSP.SelectedIndex = 0; + } + } + else + lstSP.SelectedIndex = 0; + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + txtUser.Text = SystemInformation.UserName; + } + } + + + + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool Disposing) { + base.Dispose(Disposing); + } + + + + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.lstSP = new System.Windows.Forms.ListBox(); + this.txtUser = new System.Windows.Forms.TextBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lstSP + // + this.lstSP.Location = new System.Drawing.Point(12, 63); + this.lstSP.Name = "lstSP"; + this.lstSP.Size = new System.Drawing.Size(324, 147); + this.lstSP.TabIndex = 1; + this.lstSP.DoubleClick += new System.EventHandler(this.lstSP_DoubleClick); + // + // txtUser + // + this.txtUser.Location = new System.Drawing.Point(13, 20); + this.txtUser.MaxLength = 30; + this.txtUser.Name = "txtUser"; + this.txtUser.Size = new System.Drawing.Size(326, 20); + this.txtUser.TabIndex = 5; + this.txtUser.Text = ""; + // + // btnOK + // + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(181, 215); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(74, 27); + this.btnOK.TabIndex = 2; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(260, 215); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(74, 27); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Cancel"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(11, 44); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(376, 19); + this.label1.TabIndex = 0; + this.label1.Text = "Please pick your service provider:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(10, 5); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(327, 12); + this.label2.TabIndex = 4; + this.label2.Text = "User Name:"; + // + // ChooseServiceProviderForm + // + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(343, 246); + this.ControlBox = false; + this.Controls.AddRange(new System.Windows.Forms.Control[] { + this.txtUser, + this.label2, + this.btnCancel, + this.btnOK, + this.lstSP, + this.label1}); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChooseServiceProviderForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Choose Service Provider"; + this.ResumeLayout(false); + + } + #endregion + + + + + /// + /// They don't want to run this sample + /// + private void btnCancel_Click(object sender, System.EventArgs e) { + this.Dispose(); + } + + + + + /// + /// Same as clicking ok + /// + private void lstSP_DoubleClick(object sender, System.EventArgs e) { + // Call the ok button click handler + object[] parameters = new object[] { sender, e }; + this.BeginInvoke(new System.EventHandler(btnOK_Click), parameters); + } + + + + + /// + /// Select this username and service provider if valid, then continue the wizard + /// + private void btnOK_Click(object sender, System.EventArgs e) { + + if ((txtUser.Text == null) || (txtUser.Text == "")) { + MessageBox.Show(this,"Please enter a username before clicking OK.","No Username",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + try { + connectionWizard.ServiceProvider = ((ServiceProviderInformation)lstSP.SelectedItem).Guid; + connectionWizard.Username = txtUser.Text; + } + catch { // We assume if we got here there was no selected item. + MessageBox.Show(this,"Please select a service provider before clicking OK.","No Service Provider",MessageBoxButtons.OK,MessageBoxIcon.Information); + return; + } + + Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay"); + if (regKey != null) { + regKey.SetValue("DirectPlayUserName", txtUser.Text); + regKey.SetValue("DirectPlaySPIndex", lstSP.SelectedIndex); + regKey.Close(); + } + this.Dispose(); + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_ServiceProviderForm.resx b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_ServiceProviderForm.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/DPlayConnect_ServiceProviderForm.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/DXUtil.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/DXUtil.cs new file mode 100644 index 0000000..5d0f0e5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/DXUtil.cs @@ -0,0 +1,285 @@ +//----------------------------------------------------------------------------- +// File: DXUtil.cs +// +// Desc: Shortcut macros and functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.IO; +using System.Runtime.InteropServices; + + + + +/// +/// Enumeration for various actions our timer can perform +/// +public enum DirectXTimer { + Reset, + Start, + Stop, + Advance, + GetAbsoluteTime, + GetApplicationTime, + GetElapsedTime +}; + + + + +/// +/// Generic utility functions for our samples +/// +public class DXUtil { + #region Timer Internal Stuff + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceFrequency(ref long PerformanceFrequency); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("kernel32")] + private static extern bool QueryPerformanceCounter(ref long PerformanceCount); + [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously + [DllImport("winmm.dll")] + public static extern int timeGetTime(); + private static bool isTimerInitialized = false; + private static bool m_bUsingQPF = false; + private static bool m_bTimerStopped = true; + private static long m_llQPFTicksPerSec = 0; + private static long m_llStopTime = 0; + private static long m_llLastElapsedTime = 0; + private static long m_llBaseTime = 0; + private static double m_fLastElapsedTime = 0.0; + private static double m_fBaseTime = 0.0; + private static double m_fStopTime = 0.0; + #endregion + + // Constants for SDK Path registry keys + private const string sdkPath = "Software\\Microsoft\\DirectX SDK"; + private const string sdkKey = "DX9J3SDK Samples Path"; + + private DXUtil() { /* Private Constructor */ } + + + + + /// + /// Returns the DirectX SDK media path + /// + public static string SdkMediaPath { + get { + Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sdkPath); + string sReg = string.Empty; + if (rKey != null) { + sReg = (string)rKey.GetValue(sdkKey); + rKey.Close(); + } + if (sReg != null) + sReg += @"\Media\"; + else + return string.Empty; + + return sReg; + } + } + + + + + /// + /// Performs timer opertations. Use the following commands: + /// + /// DirectXTimer.Reset - to reset the timer + /// DirectXTimer.Start - to start the timer + /// DirectXTimer.Stop - to stop (or pause) the timer + /// DirectXTimer.Advance - to advance the timer by 0.1 seconds + /// DirectXTimer.GetAbsoluteTime - to get the absolute system time + /// DirectXTimer.GetApplicationTime - to get the current time + /// DirectXTimer.GetElapsedTime - to get the time that elapsed between TIMER_GETELAPSEDTIME calls + /// + /// + public static float Timer(DirectXTimer command) { + if (!isTimerInitialized) { + isTimerInitialized = true; + + // Use QueryPerformanceFrequency() to get frequency of timer. If QPF is + // not supported, we will timeGetTime() which returns milliseconds. + long qwTicksPerSec = 0; + m_bUsingQPF = QueryPerformanceFrequency(ref qwTicksPerSec); + if (m_bUsingQPF) + m_llQPFTicksPerSec = qwTicksPerSec; + } + if (m_bUsingQPF) { + double time; + double fElapsedTime; + long qwTime = 0; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_llStopTime != 0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + qwTime = m_llStopTime; + else + QueryPerformanceCounter(ref qwTime); + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (qwTime - m_llLastElapsedTime) / (double) m_llQPFTicksPerSec; + m_llLastElapsedTime = qwTime; + return (float)fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + double fAppTime = (double) (qwTime - m_llBaseTime) / (double) m_llQPFTicksPerSec; + return (float)fAppTime; + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_llBaseTime = qwTime; + m_llLastElapsedTime = qwTime; + m_llStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_llBaseTime += qwTime - m_llStopTime; + m_llStopTime = 0; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_llStopTime = qwTime; + m_llLastElapsedTime = qwTime; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_llStopTime += m_llQPFTicksPerSec/10; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + time = qwTime / (double) m_llQPFTicksPerSec; + return (float)time; + } + + return -1.0f; // Invalid command specified + } + else { + // Get the time using timeGetTime() + double time; + double fElapsedTime; + + // Get either the current time or the stop time, depending + // on whether we're stopped and what command was sent + if (m_fStopTime != 0.0 && command != DirectXTimer.Start && command != DirectXTimer.GetAbsoluteTime) + time = m_fStopTime; + else + time = timeGetTime() * 0.001; + + // Return the elapsed time + if (command == DirectXTimer.GetElapsedTime) { + fElapsedTime = (double) (time - m_fLastElapsedTime); + m_fLastElapsedTime = time; + return (float) fElapsedTime; + } + + // Return the current time + if (command == DirectXTimer.GetApplicationTime) { + return (float) (time - m_fBaseTime); + } + + // Reset the timer + if (command == DirectXTimer.Reset) { + m_fBaseTime = time; + m_fLastElapsedTime = time; + m_fStopTime = 0; + m_bTimerStopped = false; + return 0.0f; + } + + // Start the timer + if (command == DirectXTimer.Start) { + if (m_bTimerStopped) + m_fBaseTime += time - m_fStopTime; + m_fStopTime = 0.0f; + m_fLastElapsedTime = time; + m_bTimerStopped = false; + return 0.0f; + } + + // Stop the timer + if (command == DirectXTimer.Stop) { + if (!m_bTimerStopped) { + m_fStopTime = time; + m_fLastElapsedTime = time; + m_bTimerStopped = true; + } + return 0.0f; + } + + // Advance the timer by 1/10th second + if (command == DirectXTimer.Advance) { + m_fStopTime += 0.1f; + return 0.0f; + } + + if (command == DirectXTimer.GetAbsoluteTime) { + return (float) time; + } + + return -1.0f; // Invalid command specified + } + } + + + + + /// + /// Returns a valid path to a DXSDK media file + /// + /// Initial path to search + /// Filename we're searching for + /// Full path to the file + public static string FindMediaFile(string path, string filename) { + // First try to load the file in the full path + if (path != null) { + if (File.Exists(AppendDirectorySeparator(path) + filename)) + return AppendDirectorySeparator(path) + filename; + } + + // if not try to find the filename in the current folder. + if (File.Exists(filename)) + return AppendDirectorySeparator(Directory.GetCurrentDirectory()) + filename; + + // last, check if the file exists in the media directory + if (File.Exists(AppendDirectorySeparator(SdkMediaPath) + filename)) + return AppendDirectorySeparator(SdkMediaPath) + filename; + + throw new FileNotFoundException("Could not find this file.", filename); + } + + + + + /// + /// Returns a valid string with a directory separator at the end. + /// + private static string AppendDirectorySeparator(string filename) { + if (!filename.EndsWith(@"\")) + return filename + @"\"; + + return filename; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/GameClass.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/GameClass.cs new file mode 100644 index 0000000..1e8dd9f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/GameClass.cs @@ -0,0 +1,524 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; +using Microsoft.DirectX.DirectPlay; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public delegate void MessageDelegate(byte message); // Delegate for messages arriving via DirectPlay. +public delegate void AudioDelegate(); // Delegate to handle audio playback. +public delegate void PeerCloseCallback(); // This delegate will be called when the session terminated event is fired. + +public class GameClass : GraphicsSample { + private GraphicsFont drawingFont = null; + private Point destination = new Point(0, 0); + private InputClass input = null; + private MouseInput mouseInput = null; + + private bool networkEnabled; + private PlayClass peer = null; + private bool remotePlayerActive = false; + private string statusMessage; + private float statusMessageTimer; + private PositionedMesh spaceSphere = null; + private Ship playerShip = null; + private Ship opponentShip = null; + private HullColors hullColor = HullColors.White; + private Camera camera = null; + private CameraMode cameraMode = CameraMode.ChaseMode; + private Matrix viewMatrix; + private Vector2 screenCenter; + private Vector2 mouseLoc; + private SoundHandler soundHandler = null; + private bool kbThrust = false; + private bool cPressed = false; + private bool f5Pressed = false; + private bool f6Pressed = false; + private bool f7Pressed = false; + private bool f8Pressed = false; + private bool f9Pressed = false; + private bool f10Pressed = false; + private bool spacePressed = false; + + private Texture bgPointerTexture = null; + private Texture vectorPanel = null; + private RenderToSurface rts = null; + private Surface renderSurface = null; + private BGPointer bgPointer = null; + private int range = 0; + + private GameStates gameState; + public GameStates GameState { get { return gameState; } set { gameState = value; } } + + private string debugText; + public string DebugText { get { return debugText; } set { debugText = value; } } + private bool debugging = true; + + public GameClass(bool startFullScreen, Size size, bool enableNetwork) { + this.startFullscreen = startFullScreen; + this.Size = size; + this.networkEnabled = enableNetwork; + this.Text = "SpaceWar3D-Step12"; + statusMessageTimer = Constants.StatusMessageDisplayTime; + + drawingFont = new GraphicsFont( "Verdana", System.Drawing.FontStyle.Regular); + + input = new InputClass(this); + mouseInput = new MouseInput(this); + this.MouseMove +=new MouseEventHandler(GameClass_MouseMove); + this.Cursor = Cursors.NoMove2D; + + camera = new Camera(); + soundHandler = new SoundHandler(this); + + if (networkEnabled) { + peer = new PlayClass(this); + if (peer.IsHost) { + hullColor = HullColors.Red; + } + } + + } + + private void ProcessInput() { + //Get input + KeyboardState kbState = input.GetInputState(); + if (kbState == null) + return; + if (kbState[Key.W] || kbState[Key.Up]) { + kbThrust = true; + } + else { + kbThrust = false; + } + if (kbState[Key.C] && !cPressed) { + cPressed = true; + SelectNextCameraMode(); + } + if (!kbState[Key.C]) { + cPressed = false; + } + + if (kbState[Key.F5] && !f5Pressed) { + f5Pressed = true; + playerShip.Sounds |= Sounds.Taunt; + } + if (!kbState[Key.F5]) { + f5Pressed = false; + } + if (kbState[Key.F6] && !f6Pressed) { + f6Pressed = true; + playerShip.Sounds |= Sounds.Dude1; + } + if (!kbState[Key.F6]) { + f6Pressed = false; + } + if (kbState[Key.F7] && !f7Pressed) { + f7Pressed = true; + playerShip.Sounds |= Sounds.Dude2; + } + if (!kbState[Key.F7]) { + f7Pressed = false; + } + if (kbState[Key.F8] && !f8Pressed) { + f8Pressed = true; + playerShip.Sounds |= Sounds.Dude3; + } + if (!kbState[Key.F8]) { + f8Pressed = false; + } + if (kbState[Key.F9] && !f9Pressed) { + f9Pressed = true; + playerShip.Sounds |= Sounds.Dude4; + } + if (!kbState[Key.F9]) { + f9Pressed = false; + } + if (kbState[Key.F10] && !f10Pressed) { + f10Pressed = true; + playerShip.Sounds |= Sounds.Dude1; + } + if (!kbState[Key.F10]) { + f10Pressed = false; + } + if (kbState[Key.Space] && !spacePressed) { + spacePressed = true; + playerShip.EnterHyper(); + } + if (!kbState[Key.Space]) { + spacePressed = false; + } + } + + protected override void FrameMove() { + statusMessageTimer += elapsedTime; + + int fps = (int) framePerSecond; + debugText = "FPS: " + fps.ToString() + "\r\n"; + ProcessInput(); + MouseControlValues v = mouseInput.Values; + if (v.FireButtonPushed) + playerShip.Shoot(); + + float yawAmount = mouseLoc.X - screenCenter.X; + float pitchAmount = mouseLoc.Y - screenCenter.Y; + + playerShip.YawPitchRoll(yawAmount, pitchAmount, elapsedTime); + playerShip.SetThrust(v.ThrustButtonPushed | kbThrust, elapsedTime); + playerShip.UpdatePosition(elapsedTime); + playerShip.UpdateState(elapsedTime); + playerShip.TestShip(opponentShip); + //Send our ship update to the remote player + SendMyPlayerUpdate(); + + // If there is no remote player, fly the o ther ship around in a circle for target practice. + // Ideally, we would derive an AI controlled ship from the ship class and use it instead. + if (!remotePlayerActive) { + opponentShip.SetThrust(true, elapsedTime); + opponentShip.YawPitchRoll(250,0,elapsedTime); + opponentShip.TestShip(playerShip); + } + opponentShip.UpdatePosition(elapsedTime); + opponentShip.UpdateState(elapsedTime); + + /*Here we set up the view matrix and space dome location. The space dome moves but not rotates with the player + * and is alway drawn first, so it looks like it is infinitely distant. + * + * In chase mode, the chaseMatrix determines the offset from the ship. If you want to move our viewpoint + * back from the ship more, increase the negative z value. + * + * The fixed mode camera sits at the origin and always tracks the player ship. Very hard to control from + * this viewpoint, but cool to watch. + */ + + Vector3 spaceSphereLocation = new Vector3(0, 0, 0); + switch (cameraMode) { + case CameraMode.ChaseMode: { + Matrix chaseMatrix = Matrix.Translation(0, 6, -14); + chaseMatrix *= playerShip.Position.WorldMatrix; + viewMatrix = Matrix.Invert(chaseMatrix); + spaceSphereLocation = playerShip.Position.Location; + break; + } + case CameraMode.CockpitMode: { + viewMatrix = Matrix.Invert(playerShip.Position.WorldMatrix); + spaceSphereLocation = playerShip.Position.Location; + break; + } + case CameraMode.Fixed: { + camera.Point(0,0,0, + playerShip.Position.XPos, + playerShip.Position.YPos, + playerShip.Position.ZPos); + viewMatrix = camera.ViewMatrix; + spaceSphereLocation = new Vector3(0, 0, 0); + break; + } + } + device.Transform.View = viewMatrix; + spaceSphere.Position.Location = spaceSphereLocation; + + //rotate space very slowly for that nice twinkly star effect + spaceSphere.Position.RotateRel(-.001f * elapsedTime,-0.0001f * elapsedTime, 0); + + //Calculate range and direction to target + range = (int) Vector3.Length( + playerShip.Position.Location - opponentShip.Position.Location); + bgPointer.Point(playerShip.Position, opponentShip.Position); + + //Play the sounds + soundHandler.Play(opponentShip.Sounds | playerShip.Sounds); + opponentShip.Sounds = (Sounds) 0; + playerShip.Sounds = (Sounds) 0; + } + + + /// + /// Called once per frame, the call is the entry point for 3d rendering. This + /// function sets up render states, clears the viewport, and renders the scene. + /// + protected override void Render() { + RenderBGPointer(); + + //Clear the backbuffer to a Blue color + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0); + + //Set the view matrix + device.Transform.View = viewMatrix; + + //Begin the scene + device.BeginScene(); + device.RenderState.ZBufferEnable = false; + device.RenderState.Lighting = false; + spaceSphere.Render(); + device.RenderState.Lighting = true; + device.RenderState.ZBufferEnable = true; + + device.Transform.World = playerShip.Position.WorldMatrix; + playerShip.Render(); + opponentShip.Render(); + + //Render our targeting pointer + using (Sprite pointerSprite = new Sprite(device)) { + pointerSprite.Begin(SpriteFlags.AlphaBlend); + + pointerSprite.Draw(bgPointerTexture, new Rectangle(0, 0, 128, 128), + new Vector3(0, 0, 0), new Vector3(42, this.Height - 250, 0), Color.White); + pointerSprite.Transform = Matrix.Identity; + pointerSprite.Draw(vectorPanel,new Rectangle(0,0,193,173), + new Vector3(0,0,0), new Vector3(10, this.Height- 282, 0), Color.White); + + pointerSprite.End(); + } + //Output the scores + drawingFont.DrawText(5, 20, Color.Red, playerShip.HostName.ToString() + ":"); + drawingFont.DrawText(100,20,Color.Red,playerShip.Score.ToString()); + if (remotePlayerActive) { + drawingFont.DrawText(5,45,Color.White, peer.RemotePlayer.Name + ":"); + drawingFont.DrawText(100,45, Color.White, opponentShip.Score.ToString()); + } + + //Display any status messages + if (statusMessageTimer < Constants.StatusMessageDisplayTime) { + drawingFont.DrawText(200, screenCenter.Y, Color.FromArgb(200,220,220,255), statusMessage); + } + + if (debugging) { + drawingFont.DrawText(5,5,Color.Yellow,debugText); + } + device.EndScene(); + } + + private void RenderBGPointer() { + Viewport view = new Viewport(); + view.Width = 128; + view.Height = 128; + view.MaxZ = 1.0f; + + Matrix currentViewMatrix = device.Transform.View; + + rts.BeginScene(renderSurface, view); + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); + + if (playerShip.State == ShipState.Normal && + opponentShip.State == ShipState.Normal) { + Matrix pointerViewMatrix = Matrix.Translation(0, 2, -15); + pointerViewMatrix *= playerShip.Position.WorldMatrix; + device.Transform.View = Matrix.Invert(pointerViewMatrix); + + bgPointer.Render(); + drawingFont.DrawText(2,2,Color.LimeGreen, "Range: " + range.ToString()); + } + + rts.EndScene(Filter.Linear); + device.Transform.View = currentViewMatrix; + + } + + /// + /// Initialize scene objects. + /// + protected override void InitializeDeviceObjects() { + drawingFont.InitializeDeviceObjects(device); + + spaceSphere = new PositionedMesh(device, "SpaceSphere.x"); + + playerShip = new Ship(device, this, hullColor); + if (playerShip.HostName == null) + playerShip.HostName = "Player"; + playerShip.State = ShipState.Normal; + + HullColors opponentHullColor; + if (hullColor == HullColors.Red) + opponentHullColor = HullColors.White; + else + opponentHullColor = HullColors.Red; + + opponentShip = new Ship(device, this, opponentHullColor); + if (opponentShip.HostName == null) + opponentShip.HostName = "Opponent"; + opponentShip.State = ShipState.Normal; + + bgPointer = new BGPointer(device); + vectorPanel = TextureLoader.FromFile(device, MediaUtilities.FindFile("vectorPanel.png")); + + rts = new RenderToSurface(device, 128, 128, Format.X8R8G8B8, true, DepthFormat.D16); + + + } + + /// + /// Called when a device needs to be restored. + /// + protected override void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { + device.RenderState.Ambient = Color.FromArgb(150,150,150); + device.RenderState.SpecularEnable = true; + device.Lights[0].Type = LightType.Directional; + device.Lights[0].Direction = new Vector3(0,-1, -1); + device.Lights[0].Diffuse = Color.White; + device.Lights[0].Specular = Color.White; + device.Lights[0].Enabled = true; + device.RenderState.Lighting = true; + + device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, + (presentParams.BackBufferWidth/presentParams.BackBufferHeight), + 1.5f, 20000.0f ); + + device.Transform.View = camera.ViewMatrix; + + screenCenter = new Vector2( + presentParams.BackBufferWidth / 2, + presentParams.BackBufferHeight / 2); + + if (bgPointerTexture != null) + bgPointerTexture.Dispose(); + bgPointerTexture = new Texture(device, 128, 128, 1, Usage.RenderTarget, + Format.X8R8G8B8, Pool.Default); + renderSurface = bgPointerTexture.GetSurfaceLevel(0); + + gameState = GameStates.Running; + + } + + public void RemotePlayerJoined(string playerName) { + remotePlayerActive = true; + statusMessage = playerName + " has joined the game."; + statusMessageTimer = 0; + + } + + public void RemotePlayerLeft(string playerName) { + remotePlayerActive = false; + statusMessage = playerName + " has left the game."; + statusMessageTimer = 0; + } + + public void DataReceived(object sender, ReceiveEventArgs rea) { + + int senderID = rea.Message.SenderID; + + //Ignore messages received before we are initialized + if ((gameState == GameStates.Loading) || (gameState == GameStates.Config)) { + rea.Message.ReceiveData.Dispose(); + return; + } + + byte mType = (byte)rea.Message.ReceiveData.Read(typeof(byte)); + MessageType messageType = (MessageType)mType; + + switch (messageType) { + case MessageType.PlayerUpdateID: { + PlayerUpdate update = (PlayerUpdate)rea.Message.ReceiveData.Read(typeof(PlayerUpdate)); + ShotUpdate shotUpdate = new ShotUpdate(); + shotUpdate.ShotPosition = new Vector3[Constants.NumShots]; + shotUpdate.ShotAge = new float[Constants.NumShots]; + shotUpdate.ShotAlive = new bool[Constants.NumShots]; + + for (int i = 0; i < Constants.NumShots; i++) { + shotUpdate.ShotPosition[i] = (Vector3)rea.Message.ReceiveData.Read(typeof(Vector3)); + shotUpdate.ShotAge[i] = (int)rea.Message.ReceiveData.Read(typeof(int)); + shotUpdate.ShotAlive[i] = (bool)rea.Message.ReceiveData.Read(typeof(bool)); + } + + rea.Message.ReceiveData.Dispose(); + lock(opponentShip) { + opponentShip.Position.WorldMatrix = update.WorldMatrix; + opponentShip.Score = update.Score; + opponentShip.Sounds = (Sounds)update.Sounds; + opponentShip.WaitCount = update.WaitCount; + opponentShip.SetState((ShipState)update.State); + + Photon[] shotArray = opponentShip.ShotHandler.GetShotArray(); + for (int i = 0; i < Constants.NumShots; i++) { + shotArray[i].Location = shotUpdate.ShotPosition[i]; + shotArray[i].Age = shotUpdate.ShotAge[i]; + shotArray[i].Alive = shotUpdate.ShotAlive[i]; + } + opponentShip.ShotHandler.SetShotArray(shotArray); + } + + break; + } + + case MessageType.Add1ToScore: { + rea.Message.ReceiveData.Dispose(); + playerShip.Score += 1; + break; + } + + case MessageType.GamePaused: { + rea.Message.ReceiveData.Dispose(); + gameState = GameStates.Paused; + break; + } + case MessageType.GameRunning: { + rea.Message.ReceiveData.Dispose(); + if (gameState == GameStates.Paused) + gameState = GameStates.Running; + + break; + } + } + } + + public void SendPoint() { + if (!remotePlayerActive) { + playerShip.Score += 1; + return; + } + + peer.SendScorePoint(); + } + + public void SendMyPlayerUpdate() { + if (!networkEnabled) + return; + + PlayerUpdate update = new PlayerUpdate(); + update.WorldMatrix = playerShip.Position.WorldMatrix; + update.State = (int)playerShip.State; + update.WaitCount = playerShip.WaitCount; + update.DeathCount = playerShip.DeathCount; + update.Sounds = (int)playerShip.Sounds; + update.Score = playerShip.Score; + + ShotUpdate shotUpdate = new ShotUpdate(); + shotUpdate.ShotAge = new float[Constants.NumShots]; + shotUpdate.ShotPosition = new Vector3[Constants.NumShots]; + shotUpdate.ShotAlive = new bool[Constants.NumShots]; + + Photon[] shotArray = playerShip.ShotHandler.GetShotArray(); + for (int i = 0; i < Constants.NumShots; i++) { + shotUpdate.ShotPosition[i] = shotArray[i].Location; + shotUpdate.ShotAge[i] = shotArray[i].Age; + shotUpdate.ShotAlive[i] = shotArray[i].Alive; + } + peer.SendPlayerUpdate(update, shotUpdate); + } + + + + /// + // When the peer closes, the code here is executed. + /// + public void PeerClose() { + // The session was terminated, go ahead and shut down + this.Dispose(); + } + + private void SelectNextCameraMode() { + int mode = (int) cameraMode; + mode++; + if (mode > 2) + mode = 0; + cameraMode = (CameraMode) mode; + } + + private void GameClass_MouseMove(object sender, MouseEventArgs e) { + mouseLoc.X = e.X; + mouseLoc.Y = e.Y; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/GameClass.resx b/Source Code updated 08-12-05/Spacewar3D/Step12/GameClass.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/GameClass.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/GameStates.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/GameStates.cs new file mode 100644 index 0000000..e0cbe79 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/GameStates.cs @@ -0,0 +1,11 @@ +using System; + +public enum GameStates { + Loading, + Running, + Config, + Paused, + HelpScreen, + Exiting +} + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/HelpScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/HelpScreen.cs new file mode 100644 index 0000000..7d54363 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/HelpScreen.cs @@ -0,0 +1,113 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.IO; + + + /// + /// Summary description for HelpScreen. + /// +public class HelpScreen : System.Windows.Forms.Form { + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.TextBox helpText; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + public HelpScreen() { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + string helpFile = MediaUtilities.FindFile("Help.txt"); + if (File.Exists(helpFile)) { + StreamReader sr; + try { + sr = new StreamReader(helpFile); + helpText.Text = sr.ReadToEnd(); + sr.Close(); + } + catch ( Exception e ) { + helpText.Text = e.ToString(); + } + + } + else { + helpText.Text = "Unable to locate " + helpFile.ToString(); + } + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.closeButton = new System.Windows.Forms.Button(); + this.helpText = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // closeButton + // + this.closeButton.BackColor = System.Drawing.Color.Black; + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.Dock = System.Windows.Forms.DockStyle.Bottom; + this.closeButton.ForeColor = System.Drawing.Color.Red; + this.closeButton.Location = new System.Drawing.Point(0, 615); + this.closeButton.Name = "closeButton"; + this.closeButton.Size = new System.Drawing.Size(616, 23); + this.closeButton.TabIndex = 0; + this.closeButton.Text = "Close"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // helpText + // + this.helpText.BackColor = System.Drawing.Color.Black; + this.helpText.Dock = System.Windows.Forms.DockStyle.Fill; + this.helpText.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); + this.helpText.ForeColor = System.Drawing.Color.Red; + this.helpText.Location = new System.Drawing.Point(0, 0); + this.helpText.Multiline = true; + this.helpText.Name = "helpText"; + this.helpText.ReadOnly = true; + this.helpText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.helpText.Size = new System.Drawing.Size(616, 615); + this.helpText.TabIndex = 1; + this.helpText.TabStop = false; + this.helpText.Text = ""; + // + // HelpScreen + // + this.AcceptButton = this.closeButton; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(616, 638); + this.Controls.Add(this.helpText); + this.Controls.Add(this.closeButton); + this.Name = "HelpScreen"; + this.Text = "SpaceWar! Help"; + this.ResumeLayout(false); + + } + #endregion + + private void closeButton_Click(object sender, System.EventArgs e) { + this.Close(); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/HelpScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step12/HelpScreen.resx new file mode 100644 index 0000000..a4f535a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/HelpScreen.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + Private + + + False + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + HelpScreen + + + True + + + 80 + + + True + + + Private + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/MediaUtilities.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/MediaUtilities.cs new file mode 100644 index 0000000..685a63d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/MediaUtilities.cs @@ -0,0 +1,35 @@ +using System; +using System.IO; +using System.Configuration; + + + /// + /// Summary description for MediaUtilities. + /// +public class MediaUtilities { + // private static string defaultPath = @"..\..\media\"; + private static string mediaPath = ConfigurationSettings.AppSettings.Get("MediaPath"); + + public MediaUtilities() { + } + + public static string FindFile(string filename) { + return FindFile(mediaPath, filename); + } + + public static string FindFile(string path, string filename) { + // First try to load the file in the full path + string fullName = AppendDirectorySeparator(path) + filename; + if (File.Exists(fullName)) + return fullName; + else + throw new FileNotFoundException("Could not find this file.", filename); + } + + private static string AppendDirectorySeparator(string pathname) { + if (!pathname.EndsWith(@"\")) + return pathname + @"\"; + else + return pathname; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/MessageType.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/MessageType.cs new file mode 100644 index 0000000..c3a73b2 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/MessageType.cs @@ -0,0 +1,10 @@ +using System; + +public enum MessageType { + PlayerUpdateID, + GameParamUpdateID, + GamePaused, + GameRunning, + Add1ToScore, + Add2ToScore +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/MouseInput.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/MouseInput.cs new file mode 100644 index 0000000..55a295e --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/MouseInput.cs @@ -0,0 +1,55 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + + + +public struct MouseControlValues { + public int Yaw; + public int Pitch; + public bool FireButtonPushed; + public bool ThrustButtonPushed; +} + + /// + /// Summary description for MouseInput. + /// +public class MouseInput { + private Device device = null; + private MouseControlValues values; + public MouseControlValues Values { + get { + UpdateInput(); + return values; + } + } + + public MouseInput(Control parent) { + // Create our mouse device + device = new Device(SystemGuid.Mouse); + device.SetCooperativeLevel(parent, CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive); + device.Properties.AxisModeAbsolute = false; + device.Acquire(); + } + + + public void UpdateInput() { + MouseState state = device.CurrentMouseState; + values.Yaw = state.X; + values.Pitch = state.Y; + + byte [] buttonStatus = state.GetMouseButtons(); + if (buttonStatus[0]!=0) + values.FireButtonPushed = true; + else + values.FireButtonPushed = false; + + if (buttonStatus[1]!=0) + values.ThrustButtonPushed = true; + else + values.ThrustButtonPushed = false; + + + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/ParticleEffects.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/ParticleEffects.cs new file mode 100644 index 0000000..673925c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/ParticleEffects.cs @@ -0,0 +1,261 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using System.Drawing; +public class ParticleEffects { + public struct PointVertex { + public Vector3 v; + public int color; + public static readonly VertexFormats Format = VertexFormats.Position | VertexFormats.Diffuse; + }; + + /// + /// Global data for the particles + /// + public struct Particle { + public Vector3 positionVector; // Current position + public Vector3 velocityVector; // Current velocity + public Vector3 initialPosition; // Initial position + public Vector3 initialVelocity; // Initial velocity + public float creationTime; // Time of creation + public System.Drawing.Color diffuseColor; // Initial diffuse color + public System.Drawing.Color fadeColor; // Faded diffuse color + public float fadeProgression; // Fade progression + }; + + private float time = 0.0f; + private const int bufferChunkSize = 8192; + private const int maxBufferSize = bufferChunkSize*4; //supports 4 bufferChunkSize buffers before discarding + private int baseParticle = maxBufferSize; + private int particles = 0; + private const int particlesLimit = 2048; + private Vector3 location; + private Vector3 offset; + private System.Collections.ArrayList particlesList = new System.Collections.ArrayList(); + private System.Collections.ArrayList freeParticles = new System.Collections.ArrayList(); + private System.Random rand = new System.Random(); + public Vector3 EmitterLocation {get { return location; } } + public Vector3 EmitterOffset { get { return offset; } set { offset = value; } } + // Geometry + private VertexBuffer vertexBuffer = null; + private Texture particleTexture; + public Texture ParticleTexture { set { particleTexture = value; } } + private Device device = null; + + /// + /// VaporTrail constructor + /// + public ParticleEffects(Device device) { + this.device = device; + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + RestoreDeviceObjects(device, null); + } + + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (vertexBuffer != null) + vertexBuffer.Dispose(); + vertexBuffer = null; + } + + /// + /// Restores the device objects + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + Device device = (Device)sender; + // Create a vertex buffer for the particle system. The size of this buffer + // does not relate to the number of particles that exist. Rather, the + // buffer is used as a communication channel with the device.. we fill in + // a bit, and tell the device to draw. While the device is drawing, we + // fill in the next bit using NOOVERWRITE. We continue doing this until + // we run out of vertex buffer space, and are forced to discard the buffer + // and start over at the beginning. + vertexBuffer = new VertexBuffer(typeof(PointVertex), maxBufferSize, device, Usage.Dynamic | Usage.WriteOnly | Usage.Points, PointVertex.Format, Pool.Default); + } + + /// + /// Updates the explosion effects + /// + public void UpdateExplosion(int NumParticlesToEmit, Vector3 vPosition) { + // Emit new particles + int particlesEmit = particles + NumParticlesToEmit; + while(particles < particlesLimit && particles < particlesEmit) { + Particle particle; + + if (freeParticles.Count > 0) { + particle = (Particle)freeParticles[0]; + freeParticles.RemoveAt(0); + } + else { + particle = new Particle(); + } + + // Emit new particle + float Rand1 = ((float)rand.Next(int.MaxValue)/(float)int.MaxValue) * (float)Math.PI * 2.0f; + float Rand2 = ((float)rand.Next(int.MaxValue)/(float)int.MaxValue) * (float)Math.PI * 2.0f; + + particle.initialPosition = vPosition; + + particle.initialVelocity.X = (float)Math.Cos(Rand1) * (float)Math.Sin(Rand2) * 100f; + particle.initialVelocity.Z = (float)Math.Sin(Rand1) * (float)Math.Sin(Rand2) * 100f; + particle.initialVelocity.Y = (float)Math.Cos(Rand2) * 100f; + + + particle.positionVector = particle.initialPosition; + particle.velocityVector = particle.initialVelocity; + + particle.diffuseColor = Color.Violet; + particle.fadeColor = Color.Black; + particle.fadeProgression = 1.0f; + particle.creationTime = time; + + particlesList.Add(particle); + particles++; + } + } + + /// + /// Updates the thrust effects (vapor trail) + /// + public void UpdateThrustEffect(float ElapsedTime, int NumParticlesToEmit, + System.Drawing.Color EmitColor,System.Drawing.Color FadeColor, Vector3 Position) { + time += ElapsedTime; + location = Position; + for (int i = particlesList.Count-1; i >= 0; i--) { + Particle p = (Particle)particlesList[i]; + // Calculate new position + float fT = time - p.creationTime; + p.fadeProgression -= ElapsedTime * 0.60f; + p.positionVector = p.initialVelocity * fT + p.initialPosition; + p.velocityVector.Z = 0; + if (p.fadeProgression < 0.0f) + p.fadeProgression = 0.0f; + // Kill old particles + if (p.fadeProgression <= 0.0f) { + // Kill particle + freeParticles.Add(p); + particlesList.RemoveAt(i); + particles--; + } + else + particlesList[i] = p; + } + // Emit new particles + int particlesEmit = particles + NumParticlesToEmit; + while(particles < particlesLimit && particles < particlesEmit) { + Particle particle; + if (freeParticles.Count > 0) { + particle = (Particle)freeParticles[0]; + freeParticles.RemoveAt(0); + } + else { + particle = new Particle(); + } + // Emit new particle + particle.initialPosition = Position + offset; + particle.positionVector = particle.initialPosition; + particle.velocityVector = particle.initialVelocity; + particle.diffuseColor = EmitColor; + particle.fadeColor = FadeColor; + particle.fadeProgression = 1.0f; + particle.creationTime = time; + particlesList.Add(particle); + particles++; + } + } + + /// + /// Renders the scene + /// + public void Render() { + // Set the render states for using point sprites + device.RenderState.ZBufferWriteEnable = false; + device.RenderState.AlphaBlendEnable = true; + device.RenderState.SourceBlend = Blend.One; + device.RenderState.DestinationBlend = Blend.One; + bool lightEnabled = device.RenderState.Lighting; + device.RenderState.Lighting = false; + device.SetTexture(0, particleTexture); + device.Transform.World = Matrix.Identity; + device.RenderState.PointSpriteEnable = true; + device.RenderState.PointScaleEnable = true; + device.RenderState.PointSize = 1.0f; + device.RenderState.PointScaleA = 0f; + device.RenderState.PointScaleB = 1.0f; + device.RenderState.PointScaleC = 1.0f; + // Set up the vertex buffer to be rendered + device.SetStreamSource(0, vertexBuffer, 0); + device.VertexFormat = PointVertex.Format; + PointVertex[] vertices = null; + int numParticlesToRender = 0; + // Lock the vertex buffer. We fill the vertex buffer in small + // chunks, using LockFlags.NoOverWrite. When we are done filling + // each chunk, we call DrawPrim, and lock the next chunk. When + // we run out of space in the vertex buffer, we start over at + // the beginning, using LockFlags.Discard. + baseParticle += bufferChunkSize; + if (baseParticle >= maxBufferSize) + baseParticle = 0; + int count = 0; + vertices = (PointVertex[])vertexBuffer.Lock(baseParticle * DXHelp.GetTypeSize(typeof(PointVertex)), typeof(PointVertex), (baseParticle != 0) ? LockFlags.NoOverwrite : LockFlags.Discard, bufferChunkSize); + foreach(Particle p in particlesList) { + Vector3 vPos = p.positionVector; + Vector3 velocityVector = p.velocityVector; + float LengthSq = velocityVector.LengthSq(); + uint steps; + if (LengthSq < 1.0f) steps = 2; + else if (LengthSq < 4.00f) steps = 3; + else if (LengthSq < 9.00f) steps = 4; + else if (LengthSq < 12.25f) steps = 5; + else if (LengthSq < 16.00f) steps = 6; + else if (LengthSq < 20.25f) steps = 7; + else steps = 8; + velocityVector *= -0.01f / (float)steps; + System.Drawing.Color diffuse = ColorOperator.Lerp(p.fadeColor, p.diffuseColor, p.fadeProgression); + // Render each particle a bunch of times to get a blurring effect + for (int i = 0; i < steps; i++) { + vertices[count].v = vPos; + vertices[count].color = diffuse.ToArgb(); + count++; + if (++numParticlesToRender == bufferChunkSize) { + // Done filling this chunk of the vertex buffer. Lets unlock and + // draw this portion so we can begin filling the next chunk. + vertexBuffer.Unlock(); + device.DrawPrimitives(PrimitiveType.PointList, baseParticle, numParticlesToRender); + // Lock the next chunk of the vertex buffer. If we are at the + // end of the vertex buffer, LockFlags.Discard the vertex buffer and start + // at the beginning. Otherwise, specify LockFlags.NoOverWrite, so we can + // continue filling the VB while the previous chunk is drawing. + baseParticle += bufferChunkSize; + if (baseParticle >= maxBufferSize) + baseParticle = 0; + vertices = (PointVertex[])vertexBuffer.Lock(baseParticle * DXHelp.GetTypeSize(typeof(PointVertex)), typeof(PointVertex), (baseParticle != 0) ? LockFlags.NoOverwrite : LockFlags.Discard, bufferChunkSize); + count = 0; + numParticlesToRender = 0; + } + vPos += velocityVector; + } + } + + // Unlock the vertex buffer + vertexBuffer.Unlock(); + // Render any remaining particles + if (numParticlesToRender > 0) + device.DrawPrimitives(PrimitiveType.PointList, baseParticle, numParticlesToRender); + // Reset render states + device.RenderState.PointSpriteEnable = false; + device.RenderState.PointScaleEnable = false; + device.RenderState.Lighting = lightEnabled; + device.RenderState.ZBufferWriteEnable = true; + device.RenderState.AlphaBlendEnable = false; + } + + public void Dispose() { + if (vertexBuffer != null) + vertexBuffer.Dispose(); + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/Photon.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/Photon.cs new file mode 100644 index 0000000..39efb40 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/Photon.cs @@ -0,0 +1,95 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// Summary description for Photon. + /// +public class Photon : IDisposable { + + private const float maxLife = 5; + public Vector3 Location { + get { + + return photonMesh.Position.Location; + } set { + photonMesh.Position.Location = value; + } + } + + private Vector3 launchVector; + private PositionedMesh photonMesh; + private Device device; + private float age; + public float Age { get { return age; } set { age = value; } } + private bool alive = false; + public bool Alive { get { return alive; } set { alive = value; } } + + private bool disposing = false; + + public Photon(Device device) { + this.device = device; + + photonMesh = new PositionedMesh(device, "photon.x"); + + alive = false; + age = 0; + } + + public void SetShot(Vector3 position, Vector3 launchVector) { + age = 0; + alive = true; + photonMesh.Position.Location = position; + this.launchVector = launchVector; + } + + public void UpdatePosition(float elapsedtime) { + if (disposing) + return; + age += elapsedtime; + if (age >= Constants.ShotLifetime ) { + this.alive = false; + } + else { + photonMesh.Position.RotateRel(0, elapsedtime*10,0); + Vector3 moveVector = elapsedtime * Constants.ShotVelocity * launchVector; + photonMesh.Position.MoveRel(moveVector.X, moveVector.Y, moveVector.Z); + } + + } + + public void Render() { + if (disposing | !alive) + return; + + device.RenderState.Lighting = false; + + device.RenderState.AlphaBlendEnable = true; + device.RenderState.AlphaBlendOperation = BlendOperation.Add; + device.RenderState.AlphaSourceBlend = Blend.One; + device.RenderState.DestinationBlend = Blend.One; + device.Transform.World = photonMesh.Position.WorldMatrix; + photonMesh.Render(); + device.RenderState.AlphaBlendEnable = false; + device.RenderState.Lighting = true; + } + + public void RestoreDeviceObjects() { + + } + #region IDisposable Members + + public void Dispose() { + disposing = true; + + if (photonMesh != null) + photonMesh.Dispose(); + + } + + #endregion +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/PlayerUpdateStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/PlayerUpdateStruct.cs new file mode 100644 index 0000000..e8a0525 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/PlayerUpdateStruct.cs @@ -0,0 +1,13 @@ +using System; +using Microsoft.DirectX; + +[Serializable] +public struct PlayerUpdate { + public Vector3 Location; + public Matrix WorldMatrix; + public int State; + public float WaitCount; + public int DeathCount; + public int Sounds; + public int Score; +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/PointSprites.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/PointSprites.cs new file mode 100644 index 0000000..a956dcb --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/PointSprites.cs @@ -0,0 +1,387 @@ + +using System; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using System.Drawing; + + + + /// + /// The Vapor Trail class + /// +public class VaporTrail +{ + public struct PointVertex + { + public Vector3 v; + public int color; + public static readonly VertexFormats Format = VertexFormats.Position | VertexFormats.Diffuse; + }; + + /// + /// Global data for the particles + /// + public struct Particle + { + public bool isSpark; // Sparks are less energetic particles that + // are generated where/when the main particles + // hit the ground + + public Vector3 positionVector; // Current position + public Vector3 velocityVector; // Current velocity + + public Vector3 initialPosition; // Initial position + public Vector3 initialVelocity; // Initial velocity + public float creationTime; // Time of creation + + public System.Drawing.Color diffuseColor; // Initial diffuse color + public System.Drawing.Color fadeColor; // Faded diffuse color + public float fadeProgression; // Fade progression + }; + + private float radius = 0.0f; + + private float time = 0.0f; + private int baseParticle = 0; + private int flush = 0; + private int discard = 0; + + private int particles = 0; + private int particlesLimit = 0; + private Vector3 m_loc; + private Vector3 offset; + private System.Collections.ArrayList particlesList = new System.Collections.ArrayList(); + private System.Collections.ArrayList freeParticles = new System.Collections.ArrayList(); + + private System.Random rand = new System.Random(); + + public Vector3 EmitterLocation {get { return m_loc; } } + public Vector3 EmitterOffset { get { return offset; } set { offset = value; } } + + + // Geometry + private VertexBuffer vertexBuffer = null; + + private Texture particleTexture; + public Texture ParticleTexture { set { particleTexture = value; } } + + private Device device = null; + + + + + + + /// + /// VaporTrail constructor + /// + public VaporTrail(Device device, int flush, int discard, float radius) + { + this.device = device; + if (device != null) + { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + this.radius = radius; + + this.baseParticle = discard; + this.flush = flush; + this.discard = discard; + + particles = 0; + particlesLimit = 2048; + RestoreDeviceObjects(device, null); + } + + + + public void InvalidateDeviceObjects(object sender, EventArgs e) + { + if (vertexBuffer != null) + vertexBuffer.Dispose(); + vertexBuffer = null; + } + + /// + /// Restores the device objects + /// + public void RestoreDeviceObjects(object sender, EventArgs e) + { + + Device device = (Device)sender; + + // Create a vertex buffer for the particle system. The size of this buffer + // does not relate to the number of particles that exist. Rather, the + // buffer is used as a communication channel with the device.. we fill in + // a bit, and tell the device to draw. While the device is drawing, we + // fill in the next bit using NOOVERWRITE. We continue doing this until + // we run out of vertex buffer space, and are forced to DISCARD the buffer + // and start over at the beginning. + + vertexBuffer = new VertexBuffer(typeof(PointVertex), discard, device, Usage.Dynamic | Usage.WriteOnly | Usage.Points, PointVertex.Format, Pool.Default); + } + + public void Explode(int NumParticlesToEmit, Vector3 vPosition) + { + // Emit new particles + int particlesEmit = particles + NumParticlesToEmit; + while(particles < particlesLimit && particles < particlesEmit) + { + Particle particle; + + if (freeParticles.Count > 0) + { + particle = (Particle)freeParticles[0]; + freeParticles.RemoveAt(0); + } + else + { + particle = new Particle(); + } + + // Emit new particle + float fRand1 = ((float)rand.Next(int.MaxValue)/(float)int.MaxValue) * (float)Math.PI * 2.0f; + float fRand2 = ((float)rand.Next(int.MaxValue)/(float)int.MaxValue) * (float)Math.PI * 2.0f; + + particle.isSpark = false; + + particle.initialPosition = vPosition + new Vector3(0.0f, radius, 0.0f); + + particle.initialVelocity.X = (float)Math.Cos(fRand1) * (float)Math.Sin(fRand2) * 100f; + particle.initialVelocity.Z = (float)Math.Sin(fRand1) * (float)Math.Sin(fRand2) * 100f; + particle.initialVelocity.Y = (float)Math.Cos(fRand2) * 100f; + + + particle.positionVector = particle.initialPosition; + particle.velocityVector = particle.initialVelocity; + + particle.diffuseColor = Color.Violet; + particle.fadeColor = Color.Black; + particle.fadeProgression = 1.0f; + particle.creationTime = time; + + particlesList.Add(particle); + particles++; + } + } + + /// + /// Updates the scene + /// + public void Update(float fSecsPerFrame, int NumParticlesToEmit, + System.Drawing.Color clrEmitColor,System.Drawing.Color clrFadeColor, float fEmitVel, Vector3 vPosition) + { + + time += fSecsPerFrame; + //Console.WriteLine(time.ToString()); + //if (time < .1) + // return; + m_loc = vPosition; + for (int ii = particlesList.Count-1; ii >= 0; ii--) + { + Particle p = (Particle)particlesList[ii]; + // Calculate new position + //float fT = time - p.creationTime; + float fT = time - p.creationTime; + + + p.fadeProgression -= fSecsPerFrame * 0.60f; + + + + p.positionVector = p.initialVelocity * fT + p.initialPosition; + + p.velocityVector.Z = 0; + + + if (p.fadeProgression < 0.0f) + p.fadeProgression = 0.0f; + + // Kill old particles + + if (p.fadeProgression <= 0.0f) + { + + + + // Kill particle + freeParticles.Add(p); + particlesList.RemoveAt(ii); + + if (!p.isSpark) + particles--; + } + else + particlesList[ii] = p; + } + + // Emit new particles + int particlesEmit = particles + NumParticlesToEmit; + while(particles < particlesLimit && particles < particlesEmit) + { + Particle particle; + + if (freeParticles.Count > 0) + { + particle = (Particle)freeParticles[0]; + freeParticles.RemoveAt(0); + } + else + { + particle = new Particle(); + } + + // Emit new particle + float fRand1 = ((float)rand.Next(int.MaxValue)/(float)int.MaxValue) * (float)Math.PI * 1.0f; + float fRand2 = ((float)rand.Next(int.MaxValue)/(float)int.MaxValue) * (float)Math.PI * 0.25f; + + particle.isSpark = false; + + particle.initialPosition = vPosition + offset; + + particle.initialVelocity.X = (float)Math.Cos(fRand1) * (float)Math.Sin(fRand2) * .5f; + particle.initialVelocity.Y = (float)Math.Sin(fRand1) * (float)Math.Sin(fRand2) * .5f; + particle.initialVelocity.Z = (float)Math.Cos(fRand2); + + + particle.positionVector = particle.initialPosition; + particle.velocityVector = particle.initialVelocity; + + particle.diffuseColor = clrEmitColor; + particle.fadeColor = clrFadeColor; + particle.fadeProgression = 1.0f; + particle.creationTime = time; + + particlesList.Add(particle); + particles++; + } + } + + + + + /// + /// Renders the scene + /// + public void Render() + { + // Set the render states for using point sprites + device.RenderState.ZBufferWriteEnable = false; + device.RenderState.AlphaBlendEnable = true; + device.RenderState.SourceBlend = Blend.One; + device.RenderState.DestinationBlend = Blend.One; + bool lightEnabled = device.RenderState.Lighting; + device.RenderState.Lighting = false; + device.SetTexture(0, particleTexture); + device.Transform.World = Matrix.Identity; + + device.RenderState.PointSpriteEnable = true; + device.RenderState.PointScaleEnable = true; + device.RenderState.PointSize = 1.0f; + device.RenderState.PointScaleA = 0f; + device.RenderState.PointScaleB = 1.0f; + device.RenderState.PointScaleC = 1.0f; + + // Set up the vertex buffer to be rendered + device.SetStreamSource(0, vertexBuffer, 0); + device.VertexFormat = PointVertex.Format; + + PointVertex[] vertices = null; + int numParticlesToRender = 0; + + + + // Lock the vertex buffer. We fill the vertex buffer in small + // chunks, using LockFlags.NoOverWrite. When we are done filling + // each chunk, we call DrawPrim, and lock the next chunk. When + // we run out of space in the vertex buffer, we start over at + // the beginning, using LockFlags.Discard. + + baseParticle += flush; + + if (baseParticle >= discard) + baseParticle = 0; + + int count = 0; + vertices = (PointVertex[])vertexBuffer.Lock(baseParticle * DXHelp.GetTypeSize(typeof(PointVertex)), typeof(PointVertex), (baseParticle != 0) ? LockFlags.NoOverwrite : LockFlags.Discard, flush); + foreach(Particle p in particlesList) + { + Vector3 vPos = p.positionVector; + Vector3 vVel = p.velocityVector; + float fLengthSq = vVel.LengthSq(); + uint steps; + + if (fLengthSq < 1.0f) steps = 2; + else if (fLengthSq < 4.00f) steps = 3; + else if (fLengthSq < 9.00f) steps = 4; + else if (fLengthSq < 12.25f) steps = 5; + else if (fLengthSq < 16.00f) steps = 6; + else if (fLengthSq < 20.25f) steps = 7; + else steps = 8; + + vVel *= -0.01f / (float)steps; + System.Drawing.Color diffuse = ColorOperator.Lerp(p.fadeColor, p.diffuseColor, p.fadeProgression); + + + // Render each particle a bunch of times to get a blurring effect + for (int i = 0; i < steps; i++) + { + vertices[count].v = vPos; + vertices[count].color = diffuse.ToArgb(); + count++; + + if (++numParticlesToRender == flush) + { + // Done filling this chunk of the vertex buffer. Lets unlock and + // draw this portion so we can begin filling the next chunk. + + vertexBuffer.Unlock(); + + device.DrawPrimitives(PrimitiveType.PointList, baseParticle, numParticlesToRender); + + // Lock the next chunk of the vertex buffer. If we are at the + // end of the vertex buffer, LockFlags.Discard the vertex buffer and start + // at the beginning. Otherwise, specify LockFlags.NoOverWrite, so we can + // continue filling the VB while the previous chunk is drawing. + baseParticle += flush; + + if (baseParticle >= discard) + baseParticle = 0; + + vertices = (PointVertex[])vertexBuffer.Lock(baseParticle * DXHelp.GetTypeSize(typeof(PointVertex)), typeof(PointVertex), (baseParticle != 0) ? LockFlags.NoOverwrite : LockFlags.Discard, flush); + count = 0; + + numParticlesToRender = 0; + } + + vPos += vVel; + } + } + + // Unlock the vertex buffer + vertexBuffer.Unlock(); + // Render any remaining particles + if (numParticlesToRender > 0) + device.DrawPrimitives(PrimitiveType.PointList, baseParticle, numParticlesToRender); + + // Reset render states + device.RenderState.PointSpriteEnable = false; + device.RenderState.PointScaleEnable = false; + + + device.RenderState.Lighting = lightEnabled; + device.RenderState.ZBufferWriteEnable = true; + device.RenderState.AlphaBlendEnable = false; + + } + + public void Dispose() + { + if (vertexBuffer != null) + vertexBuffer.Dispose(); + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/PositionedMesh.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/PositionedMesh.cs new file mode 100644 index 0000000..7f5f278 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/PositionedMesh.cs @@ -0,0 +1,435 @@ +using System; +using System.Drawing; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + +public class PositionedMesh : IDisposable { + private Device device = null; + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + private Sphere boundingSphere; + + + private WorldPosition worldPosition; + public WorldPosition Position { get { return worldPosition; } set { worldPosition = value; } } + + private float velocity; + public float Velocity { get { return velocity; } set { velocity = value; } } + + /// + /// Constructor + /// + /// The initial filename + public PositionedMesh(string filename) { + fileName = filename; + } + public PositionedMesh() : this ("PositionedMesh") {} + + public PositionedMesh(Device device, string filename) { + Create(device, filename); + } + + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + /// + ///The bounding sphere + /// + public Sphere BoundingSphere { + get { return boundingSphere; } + } + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + worldPosition = new WorldPosition(); + + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + this.device = device; + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + + + + filename = MediaUtilities.FindFile(filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(filename, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + + Mesh tempMesh = null; + string errorString; + tempMesh = Mesh.Clean(CleanType.Optimization, systemMemoryMesh, adjacencyBuffer, adjacencyBuffer, out errorString); + if (tempMesh != systemMemoryMesh) { + systemMemoryMesh.Dispose(); + systemMemoryMesh = tempMesh; + } + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + + // Setup bounding volumes + VertexBuffer vb = systemMemoryMesh.VertexBuffer; + GraphicsStream vertexData = vb.Lock(0, 0, LockFlags.NoSystemLock); + boundingSphere.Radius = Geometry.ComputeBoundingSphere(vertexData,systemMemoryMesh.NumberVertices,systemMemoryMesh.VertexFormat, out boundingSphere.CenterPoint); + vb.Unlock(); + vb.Dispose(); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + + + } + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. + localMemoryMesh = systemMemoryMesh.Clone(MeshFlags.VbWriteOnly | MeshFlags.IbWriteOnly, + systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + // Set the world transform + device.Transform.World = worldPosition.WorldMatrix; + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render() { + Render(true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/RemotePlayer.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/RemotePlayer.cs new file mode 100644 index 0000000..8d7af6d --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/RemotePlayer.cs @@ -0,0 +1,69 @@ +using System; +using Microsoft.DirectX; + + + /// + /// Holds information about the other players in the game. + /// +public class RemotePlayer { + int playerID; + string hostName; + Vector3 startingPosition; + DateTime updateTime; // last tick count at update + bool active = true; // is this player active + + public RemotePlayer(int playerID, string hostName) { + this.playerID = playerID; + this.hostName = hostName; + } + + public override string ToString() { + return hostName; + } + + public Vector3 StartingPosition { + get { + return startingPosition; + } + set { + startingPosition = value; + } + } + + public string HostName { + get { + return hostName; + } + set { + hostName = value; + } + } + + public int PlayerID { + get { + return playerID; + } + set { + playerID = value; + } + } + + public DateTime UpdateTime { + get { + return updateTime; + } + set { + updateTime = value; + } + } + + public bool Active { + get { + return active; + } + set { + active = value; + } + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/Ship.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/Ship.cs new file mode 100644 index 0000000..097ffc9 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/Ship.cs @@ -0,0 +1,423 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + + /// + /// This class handles the drawing and collision detection routines for our ship. + /// +public class Ship { + private Shots shots; + private ShipState state = ShipState.Dead; // current state + public ShipState State { get { lock(this){return state;} } set { lock(this){ state = value; }}} + + private Device device; + private PositionedMesh shipMesh; + + private GameClass game; + private ParticleEffects vaporTrail; + private Shockwave shockWave = null; + private float velocity; + + private string hostName; + + private float waitCount = 6.0f; // wait count before state transition. + public float WaitCount { get { lock(this){return waitCount; }} set { lock(this){ waitCount = value; }}} + private int score; // our score + + private int deathCount; // # of times we've died... + private float hyperSuccess = Constants.HyperSuccessFactor; // chance of a hyper being successful... + + private Sounds sounds; + private Vector3 startingPosition; + + public Shots ShotHandler { + get { + lock(this) { + return shots; + } + } + } + public int DeathCount { + get { + lock(this) { + return deathCount; + } + } + set { + lock(this) { + deathCount = value; + } + } + } + + public int Score { + get { + lock(this) { + return score; + } + } + set { + lock(this) { + score = value; + } + } + } + + public string HostName { + get { + lock(this) { + return hostName; + } + } + set { + lock(this) { + hostName = value; + } + } + } + + public Vector3 Location { + get { + lock (this) { + return shipMesh.Position.Location; + } + } + set { + lock (this) { + shipMesh.Position.Location = value; + } + } + } + + public Vector3 Rotation { + get { + lock(this) { + return shipMesh.Position.Rotation; + } + } + set { + lock(this) { + shipMesh.Position.Rotation = value; + } + } + } + + public WorldPosition Position { + get { + lock (this) { + return shipMesh.Position; + } + } + set { + lock(this) { + shipMesh.Position=value; + } + } + } + + public float Velocity { + get { + lock (this) { + return velocity; + } + } + set { + lock(this) { + velocity = value; + } + } + } + + + + public Sounds Sounds { + get { + lock(this) { + return sounds; + } + } + set { + lock(this) { + sounds = value; + } + } + } + + public Ship(Device device, GameClass gameClass, HullColors hullColor) { + + this.device = device; + this.game = gameClass; + shots = new Shots(device); + if (hullColor == HullColors.White) { + shipMesh = new PositionedMesh(device, "WhiteShip.x"); + startingPosition = new Vector3(10, 0, 10); + } + else { + shipMesh = new PositionedMesh(device, "RedShip.x"); + startingPosition = new Vector3(-50, 0, -150); + } + vaporTrail = new ParticleEffects(device); + vaporTrail.ParticleTexture = TextureLoader.FromFile(device, + MediaUtilities.FindFile("particle-blue.bmp")); + shockWave = new Shockwave(device); + SetRandomPosition(true); + } + + + public void Shoot() { + if (this.state != ShipState.Normal) { + return; + } + + // find out the location of the front of the ship... + + bool shot = shots.Shoot(this.Position.CombinedLocation, this.Position.Direction); + if (shot) { + sounds |= Sounds.ShipFire; + } + } + + public void SetThrust(bool thrust, float elapsedTime) { + + if (thrust && (state == ShipState.Normal)) { + + if (velocity < Constants.MaxVelocity * 0.1f) + velocity = Constants.MaxVelocity * 0.1f; + if (velocity < Constants.MaxVelocity) + velocity += velocity * Constants.ThrustPower; + if (velocity > Constants.MaxVelocity) + velocity = Constants.MaxVelocity; + sounds |= Sounds.ShipThrust; + } + + else { + velocity -= velocity * elapsedTime * 2; + if (velocity < 0.00005f) + velocity = 0.0f; + + if ((sounds & Sounds.ShipThrust) != 0) + sounds ^= Sounds.ShipThrust; + } + } + + + public void EnterHyper() { + if (state != ShipState.Normal) + return; + + SetState(ShipState.HyperCharge); + } + + public void SetRandomPosition(bool setOriginal) { + if (setOriginal) { + shipMesh.Position.Move(startingPosition); + } + else { + shipMesh.Position.RotateRel(0,Constants.random.Next(100),0); + shipMesh.Position.Move( + Constants.random.Next(1000)-500, + Constants.random.Next(1000)-500, + Constants.random.Next(1000)-500); + } + } + + public void SetState(ShipState newState) { + if (newState == state) + return; + + lock(this) { + + switch (newState) { + case ShipState.Dying: + deathCount++; + waitCount = Constants.DyingCycle; + sounds |= Sounds.ShipExplode; + vaporTrail.UpdateExplosion(450, shipMesh.Position.Location); + shockWave.Reset(shipMesh.Position.Location); + break; + + case ShipState.Dead: + waitCount = Constants.DeadCycleWait; + shipMesh.Position.Move(this.startingPosition); + break; + + case ShipState.Normal: + if (state == ShipState.Hyper) { + SetRandomPosition(false); + } + else { + shipMesh.Position.Move(startingPosition); + velocity = 0.0f; + } + hyperSuccess = Constants.HyperSuccessFactor; + shots.Clear(); + sounds |= Sounds.ShipAppear; + break; + + case ShipState.HyperCharge: + sounds |= Sounds.ShipHyper; + waitCount = Constants.HyperChargeWait; + break; + + case ShipState.Hyper: + waitCount = Constants.HyperCycleWait; + break; + } + state = newState; + } + } + + + public void YawPitchRoll(float yawAmount, float pitchAmount, float elapsedTime) { + float absYaw = Math.Abs(yawAmount); + if ( (0 <= absYaw) & (absYaw <= 30)) { + yawAmount = 0; + } + else if ((31 <= absYaw) & (absYaw <= 150)) { + yawAmount *= 1; + } + else { + yawAmount *= 1.2f; + } + + const float sensitivity = 0.002f; + + float yaw = yawAmount * elapsedTime * sensitivity; + + float absPitch = Math.Abs(pitchAmount); + + if ( (0 <= absPitch) & (absPitch <= 30)) { + pitchAmount = 0; + } + else if ((31 <= absPitch) & (absPitch <= 150)) { + pitchAmount *= 1; + } + else { + pitchAmount *= 1.2f; + } + + float pitch = pitchAmount * elapsedTime * sensitivity; + float roll = 0; + + + this.Position.YawPitchRoll(yaw, pitch, roll); + + } + + public void UpdatePosition(float elapsedTime) { + shots.UpdatePosition(elapsedTime); + + if (state == ShipState.Dying) { + vaporTrail.UpdateThrustEffect(elapsedTime,0,Color.White,Color.Black, + this.Position.CombinedLocation); + shockWave.Update(elapsedTime); + return; + } + + + if ((state != ShipState.Normal) && + (state != ShipState.HyperCharge)) + return; + + float xAdd = (elapsedTime * velocity * Position.Direction.X); + float yAdd = (elapsedTime * velocity * Position.Direction.Y); + float zAdd = (elapsedTime * velocity * Position.Direction.Z); + + this.Position.MoveRel(xAdd, yAdd, zAdd); + int numTrailParticles = 4; + vaporTrail.UpdateThrustEffect(elapsedTime,numTrailParticles,Color.White,Color.Black, + this.Position.CombinedLocation); + + } + + public void UpdateState(float elapsedTime) { + if (state == ShipState.Dying) { + this.waitCount -= elapsedTime; + if (waitCount <= 0) { + SetState(ShipState.Dead); + } + } + + if (state == ShipState.Dead) { + this.waitCount -= elapsedTime; + if (waitCount <= 0) { + SetState(ShipState.Normal); + } + } + + if (state == ShipState.HyperCharge) { + this.waitCount -= elapsedTime; + shipMesh.Position.RotateRel(0,-elapsedTime * Constants.HyperCycleWait *6.0f, 0); + + if (waitCount <= 0) { + // if we didn't make it, we're dying... + double randValue = Constants.random.NextDouble(); + if (hyperSuccess < randValue) { + SetState(ShipState.Dying); + game.SendPoint(); + } + else { + SetState(ShipState.Hyper); + } + } + } + if (state == ShipState.Hyper) { + this.waitCount -= elapsedTime; + shipMesh.Position.RotateRel(0, -elapsedTime * this.waitCount * 6.0f, 0); + if (waitCount <= 0) { + hyperSuccess -= Constants.HyperSuccessDegradation; + float save = this.hyperSuccess; + SetState(ShipState.Normal); + hyperSuccess = save; + } + } + + } + public void TestShip(Ship otherShip) { + + // if we're not alive, don't do any tests... + if (state != ShipState.Normal) + return; + + // Test if their shots are close enough to us. + if (otherShip.shots.TestShots(this)) { + SetState(ShipState.Dying); + game.SendPoint(); + } + + //Test for collision with ship or it's death explosion + if ((otherShip.state == ShipState.Normal) | (otherShip.state == ShipState.Dying)) { + Vector3 delta = this.Position.Location - otherShip.Position.Location; + if (Vector3.Length(delta) < Constants.ShipCollisionLimit) { + SetState(ShipState.Dying); + game.SendPoint(); + } + } + } + + public void Render() { + switch (this.state) { + case ShipState.Normal: { + device.RenderState.Lighting = true; + device.RenderState.ZBufferEnable = true; + device.Transform.World = shipMesh.Position.WorldMatrix; + shipMesh.Render(); + vaporTrail.Render(); + shots.Render(); + break; + } + case ShipState.Dying: { + vaporTrail.Render(); + shockWave.Render(); + break; + } + default: { + return; + } + } + } + +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/ShipSkins.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/ShipSkins.cs new file mode 100644 index 0000000..42b4546 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/ShipSkins.cs @@ -0,0 +1,5 @@ +public enum HullColors { + Red, + White +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/ShipState.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/ShipState.cs new file mode 100644 index 0000000..827eb64 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/ShipState.cs @@ -0,0 +1,12 @@ +using System; + + +public enum ShipState { + Normal, + Dying, + Dead, + Hyper, + HyperCharge, +}; + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/Shockwave.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/Shockwave.cs new file mode 100644 index 0000000..21501f5 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/Shockwave.cs @@ -0,0 +1,58 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D=Microsoft.DirectX.Direct3D; + + /// + /// Summary description for Shockwave. + /// +public class Shockwave { + private PositionedMesh shockWaveMesh; + private Device device; + + public Vector3 Location { + get { + return shockWaveMesh.Position.Location; + } + set { + shockWaveMesh.Position.Location = value; + } + } + + public Shockwave(Device device) { + + this.device = device; + shockWaveMesh = new PositionedMesh(device, MediaUtilities.FindFile("shockwave.x")); + shockWaveMesh.Position.Location = new Vector3(0, 0, 0); + shockWaveMesh.Position.Rotate(0,0,10); + } + + public void Reset(Vector3 location) { + shockWaveMesh.Position.Location = location; + shockWaveMesh.Position.Scale(1,1,1); + } + + public void Update(float elapsedTime) { + float scaleFactor = shockWaveMesh.Position.XScale; + scaleFactor *= 1.2f + elapsedTime; + shockWaveMesh.Position.Scale(scaleFactor, 1, scaleFactor); + } + + public void Render() { + + device.RenderState.Lighting = false; + device.RenderState.CullMode = Cull.None; + device.RenderState.AlphaBlendOperation = BlendOperation.Add; + device.RenderState.SourceBlend = Blend.One; + device.RenderState.DestinationBlend = Blend.One; + device.RenderState.AlphaBlendEnable = true; + device.Transform.World = shockWaveMesh.Position.WorldMatrix; + shockWaveMesh.Render(true, true); + device.RenderState.AlphaBlendEnable = false; + device.RenderState.SourceBlend = Blend.SourceAlpha; + device.RenderState.DestinationBlend = Blend.InvSourceAlpha; + device.RenderState.CullMode = Cull.CounterClockwise; + device.RenderState.Lighting = true; + } + +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/ShotUpdateStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/ShotUpdateStruct.cs new file mode 100644 index 0000000..908fe7b --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/ShotUpdateStruct.cs @@ -0,0 +1,9 @@ +using System; +using Microsoft.DirectX; + + +public struct ShotUpdate { + public Vector3[] ShotPosition; + public float[] ShotAge; + public bool [] ShotAlive; +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/Shots.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/Shots.cs new file mode 100644 index 0000000..d1aed11 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/Shots.cs @@ -0,0 +1,101 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + /// + /// Handles the collision detection and returns the array of shots for sending to other players + /// +[Serializable] +public class Shots { + + Photon[] shots; + [NonSerialized] + float timeSinceShot = 0; + [NonSerialized] + Rectangle screenBounds; + + + public Shots(Device device) { + shots = new Photon[Constants.NumShots]; + for (int count = 0; count < Constants.NumShots; count++) { + shots[count] = new Photon(device); + } + } + + public Rectangle ScreenBounds { + get { + return screenBounds; + } + set { + screenBounds = value; + } + } + public Photon[] GetShotArray() { + lock(this) { + return shots; + } + } + + public void SetShotArray(Photon[] shotArray) { + lock(this) { + this.shots = shotArray; + } + } + + public bool Shoot(Vector3 position, Vector3 launchVector) { + if (timeSinceShot < Constants.ShotDeltaTime) + return false; + + timeSinceShot = 0; + + + foreach (Photon shot in shots) { + if (!shot.Alive) { + shot.SetShot(position, launchVector); + return true; + } + } + return false; + } + + public void UpdatePosition(float elapsedTime) { + timeSinceShot += elapsedTime; + + foreach (Photon shot in shots) { + shot.UpdatePosition(elapsedTime); + } + } + + public void Clear() { + foreach (Photon shot in shots) { + shot.Alive = false; + } + } + public bool TestShots(Ship ship) { + foreach (Photon shot in shots) { + if (shot.Alive) { + float distance = Vector3.Length(shot.Location - ship.Position.Location); + if (distance < Constants.ShotCollisionLimit) { + shot.Alive = false; + return true; + } + } + } + return false; + } + + public void Render() { + foreach (Photon shot in shots) { + shot.Render(); + } + } + + public void RestoreDeviceObjects() { + foreach (Photon shot in shots) { + shot.RestoreDeviceObjects(); + } + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/SoundBuffer.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/SoundBuffer.cs new file mode 100644 index 0000000..75c3d53 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/SoundBuffer.cs @@ -0,0 +1,71 @@ +using System; +using Microsoft.DirectX.DirectSound; + + + /// + /// A single sound buffer for use by the SoundHandler class. + /// +public class SoundBuffer { + Microsoft.DirectX.DirectSound.Buffer buffer; + Sounds thisSound; + bool looping; + bool lastValue; + + public SoundBuffer(Microsoft.DirectX.DirectSound.Device soundDevice, string filename, Sounds thisSound, bool looping) { + this.thisSound = thisSound; + this.looping = looping; + + BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + try { + buffer = new Microsoft.DirectX.DirectSound.Buffer( + filename, + bufferDesc, + soundDevice); + } + catch (Exception e) { + throw new Exception( + String.Format("Error opening {0}; ", + filename), e); + } + } + + public Sounds Sound { + get { + return thisSound; + } + } + + public int Volume { + get { + return buffer.Volume; + } + set { + buffer.Volume = value; + } + } + + public void Play(bool on) { + // looping sounds don't get restarted + if (looping) { + if (on) { + if (!lastValue) { + buffer.SetCurrentPosition(1000); + buffer.Play(0,BufferPlayFlags.Looping); + } + } + else { + buffer.Stop(); + } + lastValue = on; + } + else { + if (on) { + buffer.SetCurrentPosition(0); + buffer.Play(0,BufferPlayFlags.Default); + } + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/SoundHandler.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/SoundHandler.cs new file mode 100644 index 0000000..1782d3f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/SoundHandler.cs @@ -0,0 +1,86 @@ +using System; +using System.Windows.Forms; +using Microsoft.DirectX.DirectSound; +using System.Collections; + + + /// + /// This class handles loading and playing our sounds. + /// +public class SoundHandler { + Device soundDevice; + ArrayList sounds = new ArrayList(); + + Sounds lastSound; + + const int VolumeEngine = -1000; + const int VolumeOtherShot = -2000; + const int VolumeHaHa = -3000; + + + public SoundHandler(Control owner) { + soundDevice = new Device(); + soundDevice.SetCooperativeLevel(owner,CooperativeLevel.Normal); + CreateSoundBuffers(); + } + + Microsoft.DirectX.DirectSound.Buffer LoadFile(string filename) { + + Microsoft.DirectX.DirectSound.BufferDescription bufferDesc = new BufferDescription(); + bufferDesc.Flags = BufferDescriptionFlags.ControlVolume; + + Microsoft.DirectX.DirectSound.Buffer buffer; + buffer = new Microsoft.DirectX.DirectSound.Buffer(filename, bufferDesc, soundDevice); + + + return buffer; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping, int volume) { + SoundBuffer buffer; + + buffer = new SoundBuffer( + soundDevice, + filename, + thisSound, + looping); + sounds.Add(buffer); + buffer.Volume = volume; + } + + void AddBuffer(string filename, Sounds thisSound, bool looping) { + AddBuffer(filename, thisSound, looping, 0); + } + + void CreateSoundBuffers() { + AddBuffer(MediaUtilities.FindFile("hypercharge.wav"), Sounds.ShipHyper, false); + AddBuffer(MediaUtilities.FindFile("sci fi bass.wav"), Sounds.ShipAppear, false); + AddBuffer(MediaUtilities.FindFile("laser2.wav"), Sounds.ShipFire, false); + AddBuffer(MediaUtilities.FindFile("explode.wav"), Sounds.ShipExplode, false); + + AddBuffer(MediaUtilities.FindFile("engine.wav"), Sounds.ShipThrust, true, VolumeEngine); + AddBuffer(MediaUtilities.FindFile("laser2_other.wav"), Sounds.OtherShipFire, false, VolumeOtherShot); + AddBuffer(MediaUtilities.FindFile("explode_other.wav"), Sounds.OtherShipExplode, false); + AddBuffer(MediaUtilities.FindFile("engine_other.wav"), Sounds.OtherShipThrust, true, VolumeEngine); + + AddBuffer(MediaUtilities.FindFile("sci fi bass.wav"), Sounds.OtherShipAppear, false); + AddBuffer(MediaUtilities.FindFile("haha.wav"), Sounds.Taunt, false, VolumeHaHa); + + AddBuffer(MediaUtilities.FindFile("dude_quest1.wav"), Sounds.Dude1, false); + AddBuffer(MediaUtilities.FindFile("dude_quest2.wav"), Sounds.Dude2, false); + AddBuffer(MediaUtilities.FindFile("dude_quest3.wav"), Sounds.Dude3, false); + AddBuffer(MediaUtilities.FindFile("dude_quest4.wav"), Sounds.Dude4, false); + AddBuffer(MediaUtilities.FindFile("dude_quest5.wav"), Sounds.Dude5, false); + } + + public void Play(Sounds soundsToPlay) { + // check each enum value. If that value + // is set, play the sound... + foreach (SoundBuffer buffer in sounds) { + bool on = ((buffer.Sound & soundsToPlay) != 0); + buffer.Play(on); + + } + lastSound = soundsToPlay; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/Sounds.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/Sounds.cs new file mode 100644 index 0000000..0f3b6ac --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/Sounds.cs @@ -0,0 +1,21 @@ +using System; + + +[Flags] +public enum Sounds { + ShipAppear = 0x00000001, + ShipHyper = 0x00000002, + ShipFire = 0x00000004, + ShipExplode = 0x00000008, + ShipThrust = 0x00000010, + OtherShipThrust = 0x00000020, + OtherShipExplode = 0x00000040, + OtherShipFire = 0x00000080, + OtherShipAppear = 0x00000100, + Taunt = 0x00000200, + Dude1 = 0x00000400, + Dude2 = 0x00000800, + Dude3 = 0x00001000, + Dude4 = 0x00002000, + Dude5 = 0x00004000, +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/SphereStruct.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/SphereStruct.cs new file mode 100644 index 0000000..90d9d6f --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/SphereStruct.cs @@ -0,0 +1,6 @@ +using Microsoft.DirectX; + +public struct Sphere { + public Vector3 CenterPoint; + public float Radius; +}; \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/SplashScreen.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/SplashScreen.cs new file mode 100644 index 0000000..9ffea2c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/SplashScreen.cs @@ -0,0 +1,237 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; + + + /// + /// Spacewar Splashscreen + /// +public class SplashScreen : System.Windows.Forms.Form { + private MainClass mainClass; + private System.Windows.Forms.Button helpButton; + private System.Windows.Forms.Button startButton; + private System.Windows.Forms.Button closeButton; + private System.Windows.Forms.Button soloButton; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.CheckBox checkBox1; + /// + /// Required designer variable. + /// + private System.ComponentModel.Container components = null; + + + + public SplashScreen(MainClass main) { + // + // Required for Windows Form Designer support + // + InitializeComponent(); + this.mainClass = main; + radioButton3.Checked = true; + checkBox1.Checked = true; + mainClass.GameFormSize = new Size(1024,768); + mainClass.FullScreen = true; + + } + + /// + /// Clean up any resources being used. + /// + protected override void Dispose( bool disposing ) { + if( disposing ) { + if(components != null) { + components.Dispose(); + } + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(SplashScreen)); + this.helpButton = new System.Windows.Forms.Button(); + this.startButton = new System.Windows.Forms.Button(); + this.closeButton = new System.Windows.Forms.Button(); + this.soloButton = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // helpButton + // + this.helpButton.ForeColor = System.Drawing.Color.White; + this.helpButton.Location = new System.Drawing.Point(440, 280); + this.helpButton.Name = "helpButton"; + this.helpButton.Size = new System.Drawing.Size(136, 32); + this.helpButton.TabIndex = 5; + this.helpButton.Text = "Show Help"; + this.helpButton.Click += new System.EventHandler(this.helpButton_Click); + // + // startButton + // + this.startButton.ForeColor = System.Drawing.Color.White; + this.startButton.Location = new System.Drawing.Point(440, 364); + this.startButton.Name = "startButton"; + this.startButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.startButton.Size = new System.Drawing.Size(136, 32); + this.startButton.TabIndex = 7; + this.startButton.Text = "Network Play"; + this.startButton.Click += new System.EventHandler(this.startButton_Click); + // + // closeButton + // + this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.closeButton.ForeColor = System.Drawing.Color.White; + this.closeButton.Location = new System.Drawing.Point(440, 406); + this.closeButton.Name = "closeButton"; + this.closeButton.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.closeButton.Size = new System.Drawing.Size(136, 32); + this.closeButton.TabIndex = 8; + this.closeButton.Text = "Exit"; + this.closeButton.Click += new System.EventHandler(this.closeButton_Click); + // + // soloButton + // + this.soloButton.ForeColor = System.Drawing.Color.White; + this.soloButton.Location = new System.Drawing.Point(440, 322); + this.soloButton.Name = "soloButton"; + this.soloButton.Size = new System.Drawing.Size(136, 32); + this.soloButton.TabIndex = 6; + this.soloButton.Text = "Solo Play"; + this.soloButton.Click += new System.EventHandler(this.soloButton_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.checkBox1); + this.groupBox1.Controls.Add(this.radioButton3); + this.groupBox1.Controls.Add(this.radioButton2); + this.groupBox1.Controls.Add(this.radioButton1); + this.groupBox1.ForeColor = System.Drawing.Color.White; + this.groupBox1.Location = new System.Drawing.Point(16, 320); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(128, 128); + this.groupBox1.TabIndex = 4; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Screen Resolution"; + // + // checkBox1 + // + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(16, 96); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.TabIndex = 3; + this.checkBox1.Text = "Full Screen"; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // radioButton3 + // + this.radioButton3.Checked = true; + this.radioButton3.ForeColor = System.Drawing.Color.White; + this.radioButton3.Location = new System.Drawing.Point(16, 72); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(80, 24); + this.radioButton3.TabIndex = 2; + this.radioButton3.TabStop = true; + this.radioButton3.Text = "1024 x 768"; + this.radioButton3.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton2 + // + this.radioButton2.ForeColor = System.Drawing.Color.White; + this.radioButton2.Location = new System.Drawing.Point(16, 48); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(72, 24); + this.radioButton2.TabIndex = 1; + this.radioButton2.Text = "800 x 600"; + this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // radioButton1 + // + this.radioButton1.ForeColor = System.Drawing.Color.White; + this.radioButton1.Location = new System.Drawing.Point(16, 24); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(72, 24); + this.radioButton1.TabIndex = 0; + this.radioButton1.Text = "640 x 480"; + this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton_CheckedChanged); + // + // SplashScreen + // + this.AcceptButton = this.soloButton; + this.AutoScale = false; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.BackColor = System.Drawing.Color.Black; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.CancelButton = this.closeButton; + this.ClientSize = new System.Drawing.Size(594, 454); + this.ControlBox = false; + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.soloButton); + this.Controls.Add(this.closeButton); + this.Controls.Add(this.startButton); + this.Controls.Add(this.helpButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MaximumSize = new System.Drawing.Size(600, 460); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(600, 460); + this.Name = "SplashScreen"; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.groupBox1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + private void helpButton_Click(object sender, System.EventArgs e) { + HelpScreen helpScreen = new HelpScreen(); + helpScreen.ShowDialog(); + } + + private void startButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = true; + this.Close(); + } + + private void closeButton_Click(object sender, System.EventArgs e) { + Environment.Exit(0); + } + + private void soloButton_Click(object sender, System.EventArgs e) { + mainClass.EnableNetwork = false; + this.Close(); + } + + private void radioButton_CheckedChanged(object sender, System.EventArgs e) { + RadioButton btn = (RadioButton)sender; + Console.WriteLine(btn.ToString()); + if (btn.Checked) { + if (btn == radioButton1) + mainClass.GameFormSize = new Size(640,480); + if (btn == radioButton2) + mainClass.GameFormSize = new Size(800, 600); + if (btn == radioButton3) + mainClass.GameFormSize = new Size(1024, 768); + } + } + + private void checkBox1_CheckedChanged(object sender, System.EventArgs e) { + mainClass.FullScreen = checkBox1.Checked; + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/SplashScreen.resx b/Source Code updated 08-12-05/Spacewar3D/Step12/SplashScreen.resx new file mode 100644 index 0000000..18fad73 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/SplashScreen.resx @@ -0,0 +1,4715 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + Private + + + 8, 8 + + + True + + + False + + + False + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + Private + + + Private + + + False + + + (Default) + + + False + + + False + + + 8, 8 + + + False + + + 80 + + + True + + + Private + + + SplashScreen + + + + iVBORw0KGgoAAAANSUhEUgAAAlgAAAHMCAIAAACGG0FDAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAA + CxMBAJqcGAAA/3lJREFUeF7kvQd4HNX1/q+d3dne1XtvtiRLbrJsy73buABuGAwGDBgwGNNMM733DqH3 + ZkoSOoTQIYWShFBSv6QQEgiEhECo+n/uvdrxaLVldlci5PffZx55LU25c+fOfe855z3vsefFPi7dGfT5 + +d9XX3/t9XgKC/OjkciXX375xRdfGPtk+sVmswWDfo/H8+WXnPXrTA/Pff+CaLQgP/Lxvz/p6+vL/Wyp + z6BpmtftsckOHNpruZzOgkiUZ/HVV18lOTOX3f5x6rpN09J2OA0uKioIh4KffvqftDvnckeLF805+IC9 + 3nzrtx/+4x8pzqPrDqdT/+qroew9t9vd0d5aUlr0/vsfDL5Hu93u9bodDru5Yxm0DP5gwP/vT/6Tl9fH + f3O5d47lDHabJs/TPwj5luK0kWCouLDw3598MqwPxZaX4L5GtjQ11tW+9/cPGGw53vWQHO7zecvLS2Uf + 5jGNfP0171Yf49bjdvv9fhpppYsCAX9FRQl7fvbZ56lbZbfZNZsW1zF2TXPadfFq22zJX0CrtxsNhQvz + C/7z2WdxQ447YohYnzroBFrbJ0eUy+UqLyvRdZ3TMtHxZLMbtG63i5MYDRND1qapS1j88EJxTHaTLXfE + Ux7+edrCrcg77389aJXdrlk4KNUunIRRyMZN5niq7A6XN5TrRJbdpb+Zo0qKCyf1jA+HQsbluF9Gs8UO + By/V2LXSWnZzABp2u5WdzfsUFkSrqypcLmfCA2mq2+XizBUVpWyDG8MOut1hsZHmS3BO1gR+n9fv9yU8 + HLSrKCsJBPirOA7UjIRDNCY/PxLw+7hTsJlZxmJnpu4WM/DQiTyjZPvzV3VFJmUxN8Q+tCeLzk/c5zbN + oSXoUp/Xm9HbmsVDyWjwMDWHQkGegvkoXT5W6+ehq3myVh6i6PC8/plK9Tv/BQXpK/ODsH7puD05P/aG + U3cO7rcselIssMRKzsNygWWBGhvil7zToKS1l9rcwiwOibtBOo2nY6Wr4w5k4DGJGcM795ZYfEYMMJ8v + 8eRg8QypdmPKw9SIRMSN/Q9BEa1l1mMSyq4LOJyZN7tjszuKoT5h/Oidl+3ARJ/dGYyjGL5+n48pOMV5 + 8BNUlpeFAgGL16JDCgsKwKFU+9tsYQyggkJeXTo/Dh7U+0C/Mn1YvOiAGZMZNOUdqUdmvHX0QFVZGWt/ + 4J4O8XjcTqdT7pDFxVPfdPr1GZOmmM5M5gktyWKKSdaOhBahxfsUiy2g3K5/YxPWwIaBVxrPaAh7I+7G + Aavi4sJgMKCmryF5/jxNr8ud9fSS8NEwJEKhQFlxscflMXYwnuzQtT3BxRP2Cu9L0O9P/dINPhdHVVdV + RiNhBeSsWliMWhyKWe/GyobZhkcMBmd9kjQHNjbWHb/10F133QlvxnBdYxjOy0QfDYfNdjBvmsWXLRQM + TO+d1DaidajW7FbujxcUm4ZhY2Xn1PuwdgkFg4Mbr1ad6liv18srFzdG+2eKRHOFx+XqHjO6vEy4tpJO + xzYbIKc74hf4dHs0GmGxpg4cormovxXJJgh+73Q4QT9iBLRKXjT9HDgcCyBxzqyM4NxHgpUzqI7SE9mU + Vg7PcR/GBoZ7aUkRxlCOp0p2OGZxbW0lXgGL5zevKtQrE1vD2X0erxreACEz79COZE4LFjKVJ5x2+KXF + 6cvibRovI8GahIt+4bBN6UeUBmu8pcFRzD+qZ/iOuT8czTbfo7Jcpecs/QueUeeIqUquWMV5WaRM6Z0w + atTI4b6fzJqYbu842CstLZo6pScc3u51THYCFhfFhQUrly0eParjf+uW03WJDSgKh4P9w4WIgfDVbR86 + Iizq9Yi1c0BEl+M+7Iqpyuou3VUG/J3RyVshl7pBbMSMjrW4M+t9rL2EUxLwE/YHWblbfD/ojMGGrMVm + JNuNS4uhODR2SI5tSXA4TWPNxKoo61OruSJrSKABOANZesa5TLNuz+ADhclrrYXiYdlwn273nUqPej/g + eVzukvwir8lcG8JGpj1V6h7Ozn3KRZkG6PnsJjqmC+aKrB992lu2vkP2bQDqcUckuxLzHZGVTGc96+1O + OFhzOTztsWVlJWNGt6e+IybB6nICWyUsyjAoMW3Snjb1DrxCkVD4G3axJp2RbTblHky5g4dAvXXfLCCX + LFiorqJiHkO/UjPdg/CHJhnJYo5mOT/QEBQGkJ54CSznhaFxnmX/ZuY45jI8nBkwGAhgE2R4XP/u3GZr + c+OyxfMh42V9huwOHI6jGCoyJpc4ngIoVpWXj+3qiITDw3H1rM9Js7NDsqyvqA5kfvuWTG5Z3kgwFJjY + M7a4uCDZ8dwh81eOazQ5AaVfizc21M6eMYWITpY3M3SHRcORprq6hE7F7C4iHB0eYCBNnJJ3z6FlTFrJ + rkmpj2JeS9ta4wzsLH25Se08Qss1NZVD+KqwUsk93sA0F/aH3M5hMU9V59CHWa+yh+OxDt85QdBlixZs + 3G8v/EaZXkUEkFzObzL6kGkL4/YXqN/SOGf21IL8aI6n+t86nJkchtG3ZI4asq4D4RYtmL14hznYB0N2 + 0kQncjp0l8MpGMzJP4ytJYvm7bf3WuIEw9qYtCdX/m6I8Wn3HNodhIFid0KkHNrTWj8bi56MaHtmIIQB + kuJCuEOj0bD1lqTeE1u2rqZGLcaFwyoHKlMs/0EsabFZh3wuzmg9MVT9k8t5JHJvj+xaD0dhcPNEcJ9k + cXURTHI6Ey68crSnselE0lESd7RanqfdBt8RJyQ/JxlpOYse+F85RPBjHS6w8BtoMO8jRJuhWT1vp6gl + mtWJEk3sGVdYkG/lrsSqTeajWNnZvA8HwlBg3Z12TBO4gkmRwk+b4tK8RX6/N4W7L9NmJ9vf5/WMGNGE + iaN2SHtTGV1XpAolMZ25EOsVov2YagnfTJkBkSUzlhPyVk/t7ampqsiowf+VnUE+1nDKbcV7kgsQGg+R + vFhCANmNvSHvBEmeTBVsGyq3bVzLebvLS0oC/u2B4bjg8ZDfaQoQ4loY04z5TKdCsZDlTZDglx+NFhUW + qJc07lqMHuubOhZM9bjhn2e/RBbr6+EMEst14dAzdwbM5xZ8e7mPE95uUshKSgqH4JWE/RX1hPO9ETJm + sn90cq4neAA4Y6tlSXOQuaC5906KM4BM7W0tw23a0oDamsqlS+ZWVZYzRxQV5peVFlt3IebSA0wH7e2t + HR0jEsYt4ImAkRkNmrjJlGhofW2N4jp/kx+L+Y7cNVHI4etqkTSgD31CRXY9yYTrhteT5JURVg7UzkQk + PVzrcVcUCyvLb55QeMiPZgo8CZZlKc0si/ADQZM4ts/j1kVwN4Hdpq7L+GGBbu4NsYyQ1Fw+jGpuSh2u + rksHqQ2jxryxwDdvcX9Vh0AW8ODClQ/Gcqdu7x6Zwu8c/IyyGySDj6IroH+TszTck61cgNoZhMN3Ic7M + sizFyj6D1GdebVAw3xfRtYzNOHMvY2kUFeTD5sqd8DaEucNx40DwzUIiPWioRlWy84C1ePmYNPECTRgz + prmhPoU/TXg7nQQ/sjfUjGZwlZKSInyMCRsmMuQy4XCzfyQSNqJ60hucWWwyrqvVnWYKVDSgvHyACZKs + 2/EoBLy+TM8/3INhmM6fwuDDZy95CfEPi54pLiqE32SmIwGoeH2YsIa8nVwubgWTEKviMI9GM0QQWUgI + RXHYI/5r245b5lMZ1wJaRrQ0TuntTrECNlBQgZ8Z7eAFER9m89g0T56N+JB54/fswMYhIY+nIBAgFYAz + qJZkgYVo28iIS65zVLLjhVfM58ua7mR9kDChlRQXMYFYP2Ro9+ROU3i846+l4hO5B7uGKs7BE6qrqq6p + qMh9yTm03Zrd2ZgIIsE0QRH2gXY65JGn7Bo8YHHjsJNNZXCgWEFbpJWrk0jvkxhcxjmzA0KIpgUFUSt5 + Y2okx914Whdi7h1l3O83sMay0lpBjE0UE6V5iA6ymU+Cu5vFU2o2b7KLpgRjzetxKych87oZogx7yzC5 + zMCDDExxOBL1+9UvFcyk2AaAli1P4RCbugrXdTrsXR0j2kc2J3NXKkPQgECFfKAdOSJsuIDZQjZbyKaF + 8mysMdUG20dt/BXmHgJaldFocTDEsapJqg3ZwaGVp5zioQgtiEFqEhm5yi36YFK0k/eOLOf/+rTG0p8U + L1jK/2PrY15gIhBY7v9j7U4+ItTkyDxeWVmWLDw53BOodA0ldaNZfOsyepHUOYc7emSl5Ti+lEqIlZ2z + 3gdHiDDrUzJ+ZZbk9ii4mH8tr/1l51ttXYp3Z/A5ZGYUk7bls8daIT3taNElikaLWyPq79ClD8HsY4zz + Lhr2ljKzYNEgqlYcCAQdDoVDYIyxKUxSm/FLtY9ALJsWdbgDdl1ZadsvREukfWlYadtXZjF3qIGCHKtO + CNTBxwvn5cH4JNRflGcrtOUV5g3Y+D3UCXZgZRG1aQW6HiK5Vt6IaoAZC60+vKHYb/AAYPQgQEPgIO0w + Yge8WSw9hzWLKYuZgYZJRaHMBmppafG0qT21tVWDvVO5Oy+H4ll9a86RdmTk0lKed2VFWW1d9S6rlq7b + fYWV8CRrc4QzsuCXp2gn50TYd1jvNJdeyuhY8pT93gwUAofP025utnhLUyq6sQMeSGIH/eZjHkJlDrcD + gym9t1mQAqRLM5f1NSfJD0cqisuGyi2mIkCDn10yN6NhaYF2bAbIgWp0ChASJknRhECgSyTPFs2zCZhJ + ssl9BFwBWgV2R6nTW2B3+vNsChq5igGKykw0eyzN7VSmJ/vTGNrACQG54rw8hJHK8/Iq8/Kq8vKqB278 + hg3aGDuI3TR7pe4usjs4nJOoS3Pa/5ZRGEekEuE0liUWtILxEMIkSJbmJFdvmUHR4BGCq6C2pkosTzNZ + fgnOtseTkYHEXUNwA9QHyzfi37LSGxlNTdt3xu5BjWVIwl1ZtsAwRNJl47EjvVNQEDH4zXRxRq4/Ky2k + rysqypqb6ydPHNfcmCpSaJwNmdYJ3aPrannLhvCT69g1moK8Fokuxn8ZT9lpgWZ3bzyj0sKiwmj+/yKo + x62CiaBZfKvZDbYqzMZcXl0WEG2NLaNaRkKxSYZeCWN4xi/TPrKEECiiazHYA/AU1IE0CsOwqIActjKH + vcxuB3vYSvgv0GKzVTkcVbxBEm8SboCQwiEOKc2zldo0jDbOBnByCeXABBQNWDKQyXDVKltQoSA7Kwjk + bIBfTV5eQ15ec15ea17eyLy8toEbvxmRl9eSl9eYl1fHnpqj1qGX5Nk4nJNwqsFYmLYDh2oHMZVlTt1P + e3VwS8rMEpbNfj6R/vlo24imirJSZo+0FzV2EIGPdLO6xPv0CKecMdYvndmeNIJJPBrBnZ7ZgUO7N52l + pJxRiE7oqsI2UgJ9eABQRq2qKlfLn6L8wtryoUzoVveVOnoqclco1GMaWCok9k3K9Fjvf+6FFHVzKgJp + s2lldjmKm0o7ifPgUmfcq85MpkbI4UAFeT7fAEZyLVgnXM561/3X98QgIFyNkqri5hubCRIYiDZzAM8I + s8UZUgnvRZ3QHGlTYTZlY2GxAXvSx7gd6kA74I0VX43NVssmEaVewk+TzdasaSMdDqQawaFkGzgEUDXJ + QziWM4BenBB0BMy4loIlw0ozeyzhjMJohJhDVBIZC7QEiSPBI4LqXatpTZrWpmmdmjZa08Zp2gRN6zFt + /Hc8m8021mYbnZfXIUDR1mATViM3BRhzUWUXGg7S/+qkmOvoU5OYCLfnXIuDOZnsMsr84R0Z8lcV3y/u + orR4qbpD5Q3m2jXDd7x0uSQoVmLxisIb7vGQxQHRY3CPwJhaNGf24nlzw8EgKYkopBUV5avIMNNEOJCY + b2nx0pnuxkVBwYQ1cTI9VVopB64FJ6KpqS4LiAX8oPNk6p03boHDSfdJ65FjgYJPOIvmqQtBCR4zpp2k + oky7Lov98SJMnzKpuZHp97//sRJuiTP1ElJXnJrdgxZxjGySMDcgGfUjmZsR/MM445Fg54EQAvMkXIF2 + GFLK2Gq12UbYbO02W4fNNspm6wRa5DaGTdNAGvBGbd3Glpc3IS+vOy9vfF7euLy8sXl5Y/LyuvLyRkmj + jXNyZp4N1wJoQUSFTLzbWIfKY0kuBUQONvQRiHPixYpij9rtlXZ7nd2OfH6n3T7ebp/kcEx1OGY4HLMd + jjkOx1y58YX/zpR/6nU4JgGQsgFcmpviolioADCXYx2goNdwkJqHCw9O0sVNVZNgFWUYAxuS8QckAEuI + ZCVze+IDN4e3c7momPTSpcBmfX6L7l/OL2xHu45ObC7WbdbttHQgtA6iKcPEGmUKmzW1d+rEHjXhWq/e + Z6np/72dhGWWUsqB/pwwYczcOdOQFMi0mS2NDXNmTTPKQWR6OJe28hYxIwx+6Na9CypXbMjXmAlvViSW + hEIgd6ZdkfX++FETyrChg1peVJJMq8XAp4TpcXFJAsSQxSa5HmADG19U5oDBPUnIhIxDQcU3AQaAQGwy + 8K/aZquz2TDyWjDyNA1x+lF2e5fdPtpuHyvxZgKD0+GY6HBMltAyRWIM2zQJQmygTuLNbp+pabPYbLYZ + NttUm21yXh6wBDpiqIFMmIyALgAMHAJOALMw1NB8kRDIxpeA3U7dmSJ8sHY70YuRdvsYCYFcd77Dsdjh + WOZw7OxwrHA4VjocqxyO1S7XCrTi5J/YYRZ7atpkrEN5RQAYtyrAD/RyLfpQGYVqDWF8hHPF7eJlNIJ5 + QCBmErnOQ1utycqQK8zP7xk7Bl9lQrOVCRnPfOIEG1O1DYEueUKYF3+boa82TO8jMbiRI5tyFKJS4/bb + +5EO7gEC50IlduhcuhlkWX57Oym+ZTInOtVj5a8s+rLjT+IDpHj5kCxNsAuZta28HrLiqNfKnkPylHjP + EQrIXZs008YomyDtUUIcR1hr8TviKC6IRPEIxf3BDE5xuXFmoqaZt6JIK2xkyzeVFJX5fSo3IJBn81Ij + PmZLKfvGzAERERf5G84MlCJrRHQE2jcxv2qHY4TX0+H1tEvkGwfmSYwB6hTIgSLK0gJRFjgciyS6LJHb + UodjR4djJwlCalsu0WiV08kXtpUu1866DiCxp9jfbl+qaUtstkU221yJi4AiJiNmIjYiZij+UoAZfMIL + SilbIHDpokVbDjvsvDPPvO+uux64554Ht217ZNu2x7dt++G2bU9v2/bctm0vbtv2423bfrJt20+3bXtJ + bXff/fLdd790770/e+ihu44/nmZw6YWaNlteDvTlWjUSd1kHsBpIBoQ8LyY6KW7T/1BJTsIjUliY/w0b + hXJmCFJCx/DZmH0M/BVvEI60hG+iMFpMNXUxyMqLS4vyC5Q4zvAp6NJLkyaOw15K++IMwQ4sT4pZnlh4 + S4fgYilPIYp6f7OFQMVT1GBZDaMsgpVOwzP/jSGBlfbkuA+Tfk1lBW+OlfMAhFZItlZOZWUfophlspCI + lZ2Hap+CaLSro414ScITAn51tdUV5aWZjgGFTAqcDLNPkVYUb0VhnsFbARuYteGtsOFFLNMdtX4fTAZJ + Y7ERdA3DvosFvYwwm+EmFakj0tNoWFeFyJfY7bV2e4uuTwj6ezxu8A/ww6oD8wC8nf3+taWl+9bXH9zW + tqW7+7hJk7ZOnHjJmjXf2XPP76xb95099rh6zz3v2br1gTPOuHXjxqvXrr123brr99zzyhUrLpg16/xp + 07aOaD2mtvbYirIDfN69HI49HY495LYGc42fmrbKZtvJZtvBZlP4hFu1XdMwDfGUgoXEAim/iSF40MaN + 99xzz5tvvtmX+efVe+/dUl+/VmLzzpoG+k632bBEIdEQrcQ7SmemBsLBD10kB1j3gQzVKBx4Hl5SK/4b + Yf/JlCFzShgI6vdSglFI9uB7E7m/GdpcxoI+dZxPZr5vPzWXk8HLYeC/wAU45qiNe61bZb1A5fA8l/6z + fsOe3JiAegakpiG/fZYgpIKCB0NyZs4m5cEyHJhDcm15EkY2SyuUJuKGOG7Gwakd7CMLE6Y3lYaugRlk + PfKqo2JjMSafooX0RmkxyeyJS1sURqNrVuzYM25sXIQvxQnNhiBjVwTDTOBnkFYUV1PxVpiyBUXTlCSA + QcNWB3IQM5N/ZTcAErhWcS8VZjOyEVByM4Jt+BhZO5dKFGz3eidHo4sqK/fr6Tll1aqrDjnku+ee+9QN + N7x8//1vPfPMn19//cM//enTf/4zcwzq++SDD/725pu/feKJn95ww70HHXROZ+fRkcjhbs/BunN/h2Nf + h2O9rq/XtLU223Lg0G5fEgxM9Xjapd9SYCFDUcYFF8yde/rppz/yyCN/+9vfrDfjy88/f/S44w7T9Y1c + yOHYFei12RbbbDMJYUrvKIhLpw0GQubu3MfMEA74xMuvoajoK97fzDWkBBlHgqj0f1ide4U/1q57dfew + MF8g/a/ddSfMz+HQXhrWZ/lfnOuH9r6AAXJRhqr/OU8cD4WOUn0lMDImRDKEvSei4mYiAK6zRMKDsPkj + wVBcXIRlJpaQFTUZi33OjXLOLDjlCakonEioU8bKag9lp8X4nCxu3U69MBrxezwgDTWOVbRgcFa40QMG + CioIZMMHDTNP4Z9BWgH5gDf4jQLtYhTNFgJ4lA1CjUwGydpgi+g6/kwcfYoAouJeanI3YyFMD5cMtlFJ + eWR9/cJp0w5at+70LVvuuOqqH/3gB3/+3e8+/sc/Pvv006+//to60mS65+f//vdfXn75iWOPPRczUde3 + OJ1HeDwHORybbLZ9bLbd7PbVXg+WKCiFuYaPFGsVmzWCtTp+/L777nvVVVf9/Oc/t3jRj995577Vq0/S + 9WN0/RBdF7hrt+9GVRybjTilAkIuQSezbsDsNlyjUMPJn4PC91/PLrP4ynzzuyliqrI1rb9T0hykU1k0 + D1jli9/n7s5UHl7qIqFBmnsGZY59atGMYTLFl51dkaAcWzgch2c0GtI2IG5o8V/SZoU2rCz5HQ5BGOOL + bwi9kQAPITc1NmXFSl8CuWcmC5+fLe4R4/pwurJnDg/uDV4UxkYWNShSczKFOeuJ15FKUaw12WMybD5z + fpuRyVCcH60sLVFKzCo4Z7glB/AvTO5QHJh+zV7i8hbbXSo3HJsP8IO00igxb4TkrQB1Bm+FAF53jLfS + 49AnsuXZiLEp1gkpChxO6EthIS5WLiEQN2YOrlm16qYbb3z5pZf+mZWRZxGHUu/2zz/+8eH1609zOk/U + 9aPBKrv9cJttg822q7TYcF3C7YQ+Q24i2gRY4j3d3TvssMMJJ5yAUfivf/0rbRs+fPPNuyZPPlfXT9P1 + 412uo3T9CJvtALt9V03DDTtNnl/FCBVZhsCaV7MzjsWDs+VRT/Eb43OlnRDM66fhrnchsM0KvElbMJeU + AWO5z3kIfA5ZoaGQN1BRUpo1oz1TbE/48MBj0sushCrBfxInku1pfYmRdgzJKHd/DZe0O2e3A60N+YPh + UHiYKGScnxmcTdltjBuwR/3GSldbuSmzOVhYUDCqbURNFTI7ZTxQ/gRtB3YA54mTwDDOzMtJ5v4QPrUs + TiUlnVIFHhIyXQ3s5Aspod3jR0M1ijsPBqUi5piJnYNZLUpjM+h2BeQ7bQT84tibcbxNlR4eteuluqtU + s1doWo2mNcqsAGHqSVakwjxYmoq3QvRO8Vbm6fp8p3OeIrDIGBv4AQ+zK0Y5UdEvw9YhCU/RL5fssMNZ + Z531wAMP/P73v0+LKMO6wzOHHHK+rp+h68DhKZoGVu1ns6202bidSXl5OEhx22IUlrhcE7u7p0+ffvDB + B992221vv/126la9/9JLdzY3X6rr53Fyl+t0p/METdtss+1ls62w2ebJk0PMwYDG+6rSJxAg9fBuqeUL + oMj09A0yja28pOxDw1hiJSzcZvEMaXdTkSaqamhiCZf0oywZQouDX1VlFaR+hZlYSkuLFIOG9yvhecSE + E8tYyyDcRrOQK00RqpGGI4KCCW6PPxEvJSyUi1uck6t7sziLEW4Z7H/DDkCOhOLv6gnQHhYLVkwfcXcC + IQbcnYh1hcPQu7KsNpV21MQaGQ2GeZapLRJrJ8tgL4mIQx9z5rFgdDbU1fZO6KbzWdmgTJ+ShmqLBEKF + kfyMtCcyuE8LuzLqmhrqconRYuaOGd1x+ilH93RDrd/+YVyVo4FYWGhQWlTSnhL6Ah6V6mac0macZpg5 + U1sBoeBtsr6RlEgVq8PuwfppsNtxeKrEuJ4YaQXMg6i5xO1eW1Z2+IQJZ+6009UHHnj3Kac8d9ttF+2y + C5QTkSqgaeDHMswdp3O2y0Ve+QBzR7VTpeKR/zBu3H777XfFFVf8+Mc//uKLL4YV6lKf/JN33729ufli + XT8L0NK0EyVcrbPZlkqjDUSnQ8iUKHU6FRAedNBBt9xyy+9+97svv/wy2Zn/+swzd9TUXK3rACEW4XkO + ++madpTNtr/J3OQZG/2DX9TInVBGPDNJNBTyunmw38pPbuSB1PMzWIseTdoYnhjDA4MpsZ4SKJO2ck6/ + +G3MuZqwl2XRYKcLSM6IWZMWfijB3FBfk3Cy4JYKC6JCPsDCc1ee2MGAygSKWNzgqVnwSAdpCAmECwU8 + nnjqAYYFFHPYDaoh9FdlRbmVrDjIwaSLxTmaaaoo5xSEdBZP5RDWVXLeF+fxuikVa5UAkrbzLfTrt2sX + HhmUUbFUEUWCUgbDCai4PWwpOgGLKjslcUGqtEDPA67Ly0rT6gAM7uLtfk6bDdInprByEZt/j2XA5veK + +J8BgWYpFqVDxsaUqjbifIq6qWSdlXVoeEpFrE4aZyo9XDFWauz2Zru9Q+YtzA6H17a2Hjp16mk77XTN + wQfff8EFrzz44Ns/+9nffve7f3/wwVcmDPj5/fdvcDj2kUwQbKk97fa9goGV/sBUm4abFB8p8UK4M8pB + ClOUDSAcN3o0bsbjjjvu+9///nvvvfdfBEIu/SzUU12/kM1uP0PTtshgIXYbBi5wRZ8I5TaPZ3LPRIDw + kEMOufPOO7EIkwUy/3D//XdWVl7rdF6p6xfp+iV2+7madrzNdojE1x3laTGasTWhyeCCNiKpynvc78qW + fr//915qMaMOVJMf8kmHt3WoEr5VJt7QPwUcNhA6kk1q1q+HfUYOjcVcb05Lqdv6uprB4cB01rN4RtIZ + 2D8LG6GphHa3YhJbf67M7/n54WRBSp/bW5pf9E0qc6ZoubRrQ7mYO9a7JZc9WW0ARYMHGGO5ML/AYiZG + XAMYbCixZREvTHYjA0BO+JrykKGj0bhK3LqTyc+I/Jm/UFU96PVgw4n0Oyl6orQuDVaL1M/s3/hO2AmH + m8pOU/JdZsEwEhhUejiJARXBYFdV1ez29j3nzTvtwAO3XXbZ0/fc89qzz/7t//7vi88+SwtR//jjH08p + KTlS1zfrOkYP0/2+DjvWoXItIiem0gOU0aMS8gISCAGVDRs23HDDDb/61a+++uqrtBcy7wAI8cEmw5r8 + PPbhO7/hVJlybX60fv110nq7TILWsTJSiHU7R2Y4AITVLBEKC6b29s6aNeuII44gieKdd95J2OC377// + 5sLCa3QdFLxE16+w2y/QtJM07VCbbb0EV3IWydDojDlFWSKwZFESNjxcF8t76/NgLq/KMB0rhTOrROUc + 1l0JPswkuHyHLBo3THfxv3Ja5jsmZYukPul09aPcanH/hJ2ASddQV2PwEjE9YYrk6BUUFdJNdXbiriuC + XkncyMP3mIAQFQiMu0R9fc2Rhx3Y0gyfPMGHkW0x7T3rlpOm6XN6XY5+Nk2y8+AcbqipwZsatwMDhiQ8 + XPfWG4BFrvpBMHe8PGsrroqkpzfTW5RbUoEcK6zq8pL5s6a01te6kYOJZRoo56d5U38ydFiAwO2sFpsN + +U2VwMDGF0guNTHBMHZjZyXrbGChSuODZLxy6dIrLr74Jy+++O9//QtIyQiN+nf++ut7V6yADyJibHY7 + po+KhO0sTR+ABAcgRmF/GMxuBwsRglJAuCeJgN/5zi9/+cvPLCCu0TZwDuz797///eGHH/71r3/905/+ + 9Ic//OGPf/wj4IRx+dFHH3366aeAokU4/PzDDx/u6rrB6bxM16+y2/GOmoEQzTaAsMbhaC0pnjp16vz5 + 84855hhCm++///7gvnrz5ptvqKjAuLwCTAUL7faLNO1UGXfcNxZ3BAVxtyLqhn6NSthnfdAv5OZw+Ai6 + WyT7DRprTEfOmJ+MoZtsdkobPLP+jgzeE8/ZrJkENEancOH8TwO9uGXcdBgoGc3+zPVWltKCY5CREzaX + ZyWPJd9xRHOTUeYmre+ro611xtRJRuya9Q5IPNzMZhGXNjlUA0F/Q32tMBMdTGjD8lHpg4JcPNCRW1Nd + OalnfML8cdBl5vTeqkp8PEP88bhcQvRZOvGBwIDLT/w8tc4RTQ8FgoOHHD0pHE3W8nVZCkztnTB7Zi9r + HV5aHnp2FKR4yy+msWImuWAEdI1oXrtsSUddg9emKcWyqN9bGg1DWo1XNYuVviNpvdhmE6wWux1WS4vM + YVCUTja+IABtZDIoWWdldggVNCqnU72PIjV2e3kksvW44+6++27yAT755JNsUFAe8+q552L9wAo52+EA + SMDCg2223SX3slcahbUxYiRuWIAQp5ABhGQjvP766xkBITYfKAgEYkr+9Kc/feqppx6Vnx/+8Ic/+tGP + 3njjDRAROOScVrDwne9+93a3G4uQW/iOpp0lXaNYb8s1bYHbzSBolkUt6gsKQG7cuVu3boU1CgbHddfP + rrvuQo+HWCOWpTiV3X6xREHOhn252mZbaLNNkUHHOBRkgdIfwZWKGFm/RVKbsJ87rbxTg+dqRnIkJMgE + WeuFpYAxLofcUnV1JYUns76L/4EDmRwzKGYvb8jtdIt4b/KHS7diTJAZRkwu+yGQeeeVlhSPH9ulZnYu + HfD4U0fjCC/xGXidYW+vJNb3xwjpxl1X7XjLtRdv2G1tVX45aSoJbzqjZUqybsPwlbzt/r/zcgb9/mQE + NroFFMwiNpb6oQk7HtW0mHQLAw/6khmezWsXGUO0mlGbdrDgBN5zj5VLl8xTRKq0Ufe4E5qNPyXXYnBb + FLAphouh21Lo9VaGwvkOp5JuwXQbUVU+fXxXSUCIIyhoFL5QnoLM7CanjXgezjogEFbLaF2fHc2fn1/Q + 63RO83jmRCI95MAR54uphdXIfG1lkHFCCPpwSn26DiDVFhcfeOCBl156KVjy97//PWsg/Oitt24MBrGE + gIErNe1sTTsm5l3sD7PFgmGwcnDGhmNAuH79+quvvhrowsLL6OrYfETpXnzxxe9973vXXnvtBRdccM45 + 5/CT7/fff/9LL72EjUhiRgo+i7rcl5988sS0aTc7naLxDsclmgZxFO8uKL5E0+a43d1uF0Y2ZJnG4mKA + EIvwqKOO+u53v4sBaub4vHzjjWcGg+dIaswF0sWKLXgaBBlNgyBDBj1SMkibki8BCpJYYtiCKnyrPARq + 5GT9MTstZJp7AhYbpNRgQHCKs5soRI6TO+mxzBsEERLSyL8lViBzGs0bKqJ7Bk9KPI2Uph59N6azvbN9 + 5JDPpKlbKXujf6B4yB3XvyH95Qz6Tu4KEIpyE3m2onDB0Zs2Pv/Ydw9dv199QbXXkYBOBvcHYdncx1yc + fcwTxOxjG7xcpRNZA8ITyfS+0u5vduDQHliTnR0jiotE1STwKRQKoh+o4hD8hsEzhINb3ZQVnvBgCBTI + J/PADAg0XJpmbqdRbCgckysDqLDb4G0SXakJ+psIaTrsChdJcseQAkKoeAAKlptYLVODweX19ScuXXbt + EUfcdfbZP7r//qPnziWTAVnO6bLKQWds5jXLOuP7hiMDIDVVVa1aterkk0+GsYKDMSMoGhCx++KLx3t6 + gBN4ktfb7ZdJSwgHqTAK7XbksNttIltOyJXJG8l3uWCNgiv77LMP0PXWW29lCoSA0G9/+9vHHnsMgxIT + DQLq7rvvvm7dOnIbQMT77rvvZz/7GSZjmtN+/fXPjz5aNRtWy6V2O+bg0TEIJ5hHB1LpgvQJ+nxEVRUN + pnePPPJIbGiubqQSvvn448dHImTNn67r5zgcnOdCTYMmerSmHUCGvrSMjaxBUDBOYjs1CgpV4JzwccAg + 5V2GioUaMGvdtO9g3A68hiJZQYQJEhPFFVdz8GnlajJ92b9M25PF/rQ8IdFUsin/q9QkLI/Wlsaaqorc + p+8s+oWHilNbXVosFqQF9l9pSbLGo1/qpjJ5nt3jdHU0j5g/ZXpbVXOhL7+8qJQcD/PsT7NJORgmPkuy + uAJoMXJEU01NgscnBBaGKMkda6+mpnL82E5U7YlGTp06cUpvd47CtiJqWBAlYydhz2c0BswmoJ0UKFmZ + yJzboBIblFwnyAdtBKIgsKcUy5RcWSWp607n/NbmyZUVfDeEyqI2G2tsIBBiJ8+73ueb3da2z6JFsFru + vPjinz399N/+8IdPPvpIwdJHf/vbAfX1CE8jRY0JgpA05YcUO9HI5xPUTfjSTmeJ3z+6rW3hwoXM7Lff + fvuvf/3rTBkrZix848QT73I6b9L1axyO6zQNygmIAol0jdezyO+jQBJtECUdJBAWejwTJ0wAVwCw66+/ + Hg9nphkUX3366Vt33/3YMcfcuOuuZ86efejo0RtGjFg1ZsyCefMg4Fx22WW4STEZ//Of/5gji4pcY4QP + XzvxxJtdLlAQQ/ZiSZPZKp26aK0BXVNlsSQKDeJ/BghHNTXR4BUrVpxyyimPP/74u+++q/yuf3rttTNG + jjzG5dqq66c6HOfb7edLFDxW0w6y2fYgn0SqqalYKasBHrriDcXpayezBQVZzwJp2crsRxpA2B0qCETI + 5mLFLF3vGXxA0Pa2lpaWxkytSW4hbYqtlXZoQ1pNwbiiC0mmgnysiEzvy0qbB+wDvAB4atZWUdwhXONk + 3JrYAUziE3vG1tWxROv/2G2ikuSQtA1nHS6IXOg5qk0As9flUbkcIs/U5mA0Qygd2zZqXHtnRrI4/T2f + QxBCNcncP4K15Pcl5ICBgikWjxk9NRGo84jyyByFwM24cZ11tVW5RFNEx0ogTGjLqvc2bmIyB/xMyEfC + kyDVKPuPzXB+KmKnYfnB3lTcFsBAIZ+gt9hsDZoGF4ONON9on3duVeV4vw81E/KsiasJ6U6qv8oMv9nd + 3WeffPJ9d9zxmzffNGcvmNHoySuu2Nvh2F1W/4H0KIJScjbHHUfWNurYUYedToS0WRoI1kXyMcvw9R1+ + +OEKCDMK1MWZjx8899z3A4E7nc5rdf1WTcPHSEIeoLIbxRYcDhRnuCnagEUr7Fq3W+Xk7b///jfeeCOX + zhQIP3jwwWcLCh53Oh/W9e/pOtfFsLvC7d5cXb3LypVnnHEGfBZOSygR8MMuxJWKAUdgDw/wBx988OG7 + 7758+BEQZPCIYgtixsVlOCj9MyGxpmkiiZAKUB0dCxYsIIkQds/LL78MxH72ySd//d3vLl269MSS4qPd + 7uN0/Uy7/RxpDYOC+Ff3lIwhqKcsR8xSanEpgzl6RK2/SgTag+6AxwkLOoo+e7JqXMlOCAdt0qRxqGma + dxBLZJPBqpKUrDfJ+p6UYvUg2StYAkP8IamPZUEGOjBZe58wDgTJk9kFr0goUhwpNBKfmc4IyUTD8drK + Q3yviU5HMJlqXszXw3EtImpChyznZHMG67Id5k+ZjJNm+wdPYG15JeVLrBsu7MkjsDhGU1CHGC5CuMfC + fSncNTeb5597atTg0w7R47MBtKxdYl0qWq/EH5inDJUyBXhGVkM0ECwrLGSJZ8h1quCfsv/gpyjLT4Gf + KDNrs9XLWuogn6K3KN0W8vZEmT0p4CJKmZvK4+GXIxxIfeQNe+1FpsFzzz33l7/8JaEP88vPPrt89uyD + HQ6y+vbTtHWyogITOmfDFqF+bJ3fWwjJC8PU4cA5WR4M9U6atHTpUlyLRNrigl6Zukm/+uyzp0aNukfX + AaQ77ParNe1MTUOxjGYgJ0b5PZCgRvp+MQqLY0B4wAEH3HzzzbgZMwXC/9u69UmnEyB80Om8T9dvdzpv + kBkLBOrW77Yb3tEHH3wQQxPkI1II+GHAcYP/Jz+/evLJR+bNv87pgttJPO9sCWDYgmiNKuhSeX5wfFiO + QJNBVqaMsk2LFu2/337HH3PMeSeeeN5hh521fv0xc+Yc1Ni4r8t1iNt9qK6fZBdZ84QYj5PJEttpohQQ + lkZ5SzAwuaWhIhRU9F3DIzpEA9jSaRRoEVNAtcb67BFblFMZeIARKbiQQlOz/zUnqA+pEH6+paZktJOU + sxFaM8PAqZTurkxaAwE9wyO2n11di44rDEfRQDHOw5xeTb56YQk+wEzaktm+IjUns3vN7PzDtzdskQVz + Z45oZU2//SPMRLSVY9mNCa8+GDBEMoYFVVmkeUa0Nibj+mLkEZ/DPrNYe8VoGwg6duyoUaNGmlceIlkV + d4cmio4OIdsli8dBd0EhxtxUA4UNXGR9RpcZ1t5g2kvE5ysIBiDnKW0zI71PQaBS7ATJGhx6k7T5UCyD + 1UmBWaPSHvGzmS7X8srKfbq65jid6JahXsZEjF+OuRhjDjoMqNnq863caadTTz2V6Bfze0KUevfnPz85 + GEQzE3Hnw2ITMYEuzBFh2dhsmDWi0iyysTKJvrawEJts9erVZ5555hNPPEFFBSscyxQA+cYhhyjj7HaH + 40ZNw0NIHgJ4ALRMl2xJwABQwcFbEgNCDKxbb701tUpLgit+9dVrixc/5XY/4XY9ouv3YoNKS/RyEhl7 + ekjSv+mmm+DRgHwAIfeFj5Qw5GuvvfaLl19+5sQTb6+uvsbpZGdoruc69HM0+1ZNAwXBbGXAifRHPNWa + xhIEp6iyyKd1do6rrBxXWNgTDEJH4klRWXAXhwMT/ADZ54eDhRIFD5MEGaWsrUKDQrA0L29sVcX00e2l + oaCROP+N2YJZvBFWDuH9NSMT3sWyspKh0v2nAaykmWiyUxNVdpeVu8h4H4v2ROrzxgGSuFWIvg7nkDgk + E15aKMWEogFfIEdnWsb9Ze2A1Alq9I9FTXQefMC/XWQVKzwLxyyXw/WBxGcKW5Y/ZVGZgfE8uqu9ubne + UOATxVAcHiHe7fWUlBSa3x+F4jIyktFSLVWPpz6VMPtiEKgMPrdOdFZQUY0cBoV2StLMvCl5M+FyVFag + zG0ol7ElIVfmdHbouiozi2IZFdXR6lyan79x/PgzVq3aduaZLz300J/eeOODP//5kBEjKCdLdVnq1TGH + gmHCsSmlXkb5/bOkuNc111yDXy6h/fTsySdD1hCFDhyOY+32A+32XTQhmAmgAoRYY3BVFBAK3iaoXF+v + MvkuueQSYIN8gxyB8IMf/vABXb9b12/CKNS0yzXtZBkn20Xei/KOVkpQQahpck8PV9+0adMdd9yBlZaW + 3mmGwy8/+ujFsrKnXK7HnE6uiBl6C0CYn3/xsmUQRxEC/clPfkJCoQoHgoWc/5e/+MXTV1xx9+TJ10GN + cTqVBOgFkh0DdOHCVQa0QsFRoKA0xA0UHFFUNHPUqP123vn6889/+v77f/H882+8+OJbL774yx/+8LZN + mw4vLj5I1w/WdTyiR+nOTQ49zilK5wt9A4edMJRCQWZoiyObt3go9aCtTUrZ7TWEb6tqAIvRmspKEqIy + bQ/MPgxTizNnpif/X92fetyoUAa8YrH/rboH2oObkVGeuweV+6qvrhrd1qGKj3Oj2aLIUGJPXG+bb5N1 + j8uug4Vcj4VbnDlIraXSIpSDEte5zuIhskogBTbhYisu2wE/p08XNZPMqQ5KzEzF/IwStSrbQW3UWMfL + UaBpxXL2ZA6Fc49oNRgGkuHznOF2r6qt3TRp0lWbNz9xww1vPPvsP997Lw547j7qKFTK1jkca+12SBao + kFDKHODk8HGRyLSpU3fbbbfzzjvvmWeeGVyx4YtPPrlrxgxV6OAMstodjoPs2poYEI6IUfYFDVWWmQUI + u7u6ZsyYsXHjxuuuuw5riXBapu7QuP3BnKeam3FUAkt3aRreUWDmCCDZ69vZ5QJg2iQDU1SiD4WmTO4F + CA899NBt27ZhumXE0/nXyy8/7XQ+4XQqILy/vPyBnXZ6+MorH3roIUxbCueag51ff/XV7x5++MGlS6/3 + +5E9U7agUj47z24/wW6H3apwC7QWtqCmYb7zBGlnuds9t6fntK1bH/re9373298mS7W8dPFijEK2Q52u + EyLRQ/yB1bL0LlmDiMypAK1KX1Epg5k4RUXVl7KSYiW5/v+3j6iL4EanPTM1YyaT4sKC4aCy/2/3vzIv + ckRBOtdsbw1Jj9CkaCgc9oUydXzLxlClaPv4APkK86PFBQRfE3sDhil7JsdeTdaNeHGpQMsqIcd+BvkU + E1hEJ009Ewd+CHgabk9QEGYq2QWGkmcc21PlOfRvNhuOPjbwT2Q+UJlW1pjFmYkXdFIwuGNDw/GrVt18 + 8skv3Hvvu7/7HYSNFGDzp5dfPioQOARXm6yNR073Sk0jFwL3aW9ZGbBBqgNuzCeffHJwNvc7zz57hdfL + /H6mVI4+XtMOlEncTO6QPszaLqAgflFklib19MD+gDJ61113EaXLhSlj3NRre+/9fV2/Q4YJ8Y6iLna8 + Q98Sjuzq8eAkxNJSAtY1Aggnz5w5E7mye++9l8yNjIzRP2GWOZ3PlJa+vGjRb88++/1XXsHmA//wfxrK + Z1998cW/333317ff/ujy5TeEw0Cg2r7jdJLgcY2mkeFwmt2OJxnnLYJwixz2Xltep82mUBA38qT29pO3 + bn3s0UdZJdBCLOaEZuvL9923qbhYSa1S1PBgj3edy7Wj3bGdbiODxDBFlY6aUhO1viTnzc00e9vKW6MK + D1lRO7Fytm/VPkz2VnIhWGFQIiKF+5STYFbmPgt9qzonTWOUXZJiWmfEDBUH0tyULJKEwDz0Zbo62qwb + /kT1mhrqE+rCZP2QCBPW11UPX7ZGKOhnCOYItOqxDrRExRyknJ+AXyTgmzims7K4SPk8BdVFFKfVKF+i + Uh3MbE/YcqSJVEn1MrUxY7LBp1AbvtC2QGB5d/eRa9Zcf8YZP3vmmb++/XYyhudgRGTuvmXOnBMIdMny + dcf7/fvoOp5Syj7MqKsDCHfdddfzzz//hRdeGFwM7ydbt0IVIQ3gXKntQnCOMBXEUcKNIgdA5tQL3dGY + X7Q8FJo6ZcpOO+100kknwSsBPzJyTiaD8/fuv195R2+GwKJpJBSepNk32R1YSCKzXsmVQduRQDh79uwt + W7bA0+HqGQHhe9u2vXPllR//4hdfSiuWYxUd1Gwo/+fDDx+hRIauA37XQ6WRP2+kVXb7TZp2hbRWcYpu + JMOBUF/AN8elC3qtbB4LmsldXUcfddRFF12EwYrfmIUCHCVk1biQYTq//8c/bjvppH3z86HpchJ+YlmS + O7/S5Vri9fbabJ0mQVGzOchEw3ySReQi67d18IHEv6vKh14HYwhbOKynguLQ3tba1FSXolYSk1v5kJb7 + Hqo7ysyzmdEcCocqFBj+PJKh6AlmdlLooKRaPxnrmoqyUitUT+vnJDBOIZFhEs81/KUZPcS0jVeGoDnV + obaibIeZ08rCITyfItUBG92uKfAjoqaS/Kqlkme99JgJ3orUc6FQLY4+vvObrnB4ekPD2nnzzj7uuIe2 + bfvrn/+ctY/xF9/5DrErQn1n+f2XRCMH6vquDgd5gbNbWwHCvfba6/LLLydGGGe9ffnpp9+fMoVMAJS9 + LrfbEXYhh4/6CRQ6UIWEYKmoJG5RgF76RRvLyxWynnvuuU8//TRTfEZQlOwGP3/vvR9UVJi9oxRzgEKJ + pxdX4UQK/IKCdFpBwbRp00hOP/rooxGCMXLysu43PKvxQP711+/jQd1jj1uCQYisbGCh8oviQCbhD5In + pFbM7tW6YwePe5ImeK0qd742Gt1xxx3pHEKYZ599NrklZO4jvkNH8Xn++ecfuffey444Yv+2NmK6ov6U + 3Ci3u6vTuZxkUGpX4RKXhrg5fV4JijL8igryJ4wdQ2WxDAzDtIM7kx14rYQU0zBxSUwtSWtgZNLqodyX + WZTIi55EGVxdSRCBMvTKDk0TU/BlRL6aRyRgWLkS50GQjP0tTqPsBglzmKRthjHmlqQvBL/m/9ECLlae + /uB9Bia891fyY0rC+el3CD+hMv4qvJ4pLU1thfkYT/15fhL8zGzPsapKn8MxiXrlkv9CCHBmVdVBGzZg + WqVOb7Ayy3/8pz/dWFEhPJwuF7YdXER8bmt0fe6oUeAWyQaknyNIFneqv77w4g2RiLIIsXUg8TPFY52Q + FY7EMwn1GK+KKUM4WgFhe2OjEnahIiCCZENWJv7rr3+x++5wR8lnuNNuv0FyR5FbU6iMkQRpli6Fe8LV + 582bd+yxx2KPIgFjpXOy2+fPDz74+OzZt/r9WIRXOZ2q7iDJ74fZ7UoQ1eB2CglQVZQxHJ48cSKFJpYt + W4YIHDTUs88669yzzz7t+OMPWbt2HRCenw9rFEsd4QK4o8vsdoRJl2MRFhTsHArS54LuKzNBGUvwhw1z + UNBkyB+trp40ftwweVOye0cyPSqZhJv5PLx3sMGHPKKUaVPZP24SBk2Y8FPYgllcYmgOEcI/drijSXXO + hNSk12cRnzkbZVqDPiMnLHEjBYEiefGH3G+McUCGg1tPLNks6jwQB87Myh3QKKwxvLWDwR6XS1pDjaNE + ktzwLwmtdGP/stHKrin3GZzz7qbAL4GQWApEXCU/7L98XSfCp1L9mv2+qdWVI/xeGIMqyKdSHRTyQVqZ + GwhsnDz59F13XVlcvMTnm6PrpDpAAZ2q6zPa25FoQScF3U5cl4NjeNYn8R8dcABFfJivyfI+Fi4i06vX + O2f8eOZlqCVYJ4NLur9+6aXYOgII0feSXE1CjND3oYwaAUI1HQsUdDoL3O5xnZ2cEIuHTAOQlXxz6y1M + vec7N9zwgFPfhhGm67fJzPoTbDYClqsQWNE01g1CIlwCIbn8YAwMl0zrEcIFJZ+dNsNeIVk+rS37xccf + //mhh57de+9bGhooRn+6y4Xz+UCHA+8xYdQFsWLx2M2Yg6T8s1CAqVVbXt7R2gqlaGJX14TW1o7i4rZg + kFExxuGY6HROcejo2AGHEJowdunqOQR0Xc5exoxEwTrpTmBo0e0qOqhoMoxSqYxraU2f8zsxXCeQEYf0 + gU5pdmaj1SXEQ+Q1LN5AMu00oZPs84f91HvfTp6gUQChRTSx1AAxnzq2J1RaOibBit1GkZ0gSwenPxlt + REC6ZczoF0tLN8sLwNAFazHLZic6jM7FYdjZ2aYGOsmRihgZty+/gQxC2fFcHgYomJBXaeWOuC75DN8S + IFQlSqw0O+GTMuOfkequvoQCvoJIRHFhDBYozD0l+JKv2ardrlqnk7AfPjFl/JHkrlId4GoCfvNDoX06 + O89Ys+aRa65588UX/yWVqa/asGGlrmMB4LTEIFjgcMzx+abLfACInWAh9P2ssfDdRx5B9+sqmet9qq5v + wSgMh2f29i5atIgCQMg9xyfUf/31IwsXAoTU/aHiAfwUcsNVgBC+BqYJWeFGOcCQrhf7/aWBQO/kyRRS + wDMJVwWmSab57Cmw8LN33328sJDcPryRcEep54CFincU22u+ptGrYEmHBEKoOqqSQ8KSRgkvQTtR00ZV + gKNwVz777LNUrgBHwUUrvNN/v/PO67fddllX12HS1F6naSp9nuUC0IXdTN4LgnY4CUi1JBVJVIxSmnDK + ZaoKF+vO8S5Xt90xWdPwPLOhpo0VSJoKVXzJnSdLBFtQoaDIVxmkpjaEE87/q6ci5w1jBva4+QaZsfPD + kcEV35hAyMFzQguPzbSKIMmx/Az5gxR1sI6p2XQpfDxakBHpMSEJijOAhQ7L1dizaWvmx2SEvur0oMv0 + aZPGjYUfJ8BPZosnWNTwV8zBHKPlWTQv8z74lh4RB35K3sxgfhrVHlQZW7Psmcr2CzNJoedJqp/D0eBw + KPsP/MP4mwiqBQKkOpy2evUDl132y2ee+fiDD+Im5fd+//sja2v7Ux1klEhQWiSxU2EhKlz4G5nfswAY + JFp+0NsLrQPdE6JZFPnbIAsAQWxBHZtiQ//4xz/M7fnXH/5wW02NcvqBOgQIVRWhZTIrn3mZSZkAYX8G + ocMR0fUKgppSNpMMfU5IiE6hiKp2q+JtWRe55TwvzZmDd/S2mHcU8g4Fe/eW9RwmOxyI6XTGgPD444/P + CAgBvBe2br32iivoCo6FQ0vWIJWYoNt8/PHHqWsQQp9547bb7l21CoHsjZLesquSw5aeTJHjqIpCyDAq + tGFqnbCBhUruHJep4LuyWtLshIfpWI4C+dj40ild0AQFqdhJXJCVByjIMDNKIqvcQasGztC9dipB1uL5 + +sllOai3MKfBxlQ5wczqhKhEWSHLDTDaqfLLjckT61NI7QeCpYXFnoHoyCFgCslRMMP7Z11U+F0Uuu43 + AfEJFebnZwSEsX6w2m9ios/oJtkZQTW2jI5K+BQF1CMF4ktCLMzEgkx4foAKgkmmAmzC+zxQnT2jVYLF + 8WrejRuFt0I2RYrBVllZ1txEYtvw6Cxk0ehsDzHwz4EqrE2smxT4GVBnkD/xRCEtTQEwI/NdGIJk+2ma + kPiSk5pa4GMC4q8j4LdDcfHRixZdc+SRrz7++D/Ahi+/TGH3vHD55UegJ+Jw4GEDEWEMrtb1eW1tCgup + bUSeOC5HK5WABl/ld5deSowNqRTIL2dgu1RWcs5ddtkF4gZJhHEVFX5z663Xut1XOp1YkOSwI3SpzC9B + TpFTM5omKomNIYKhw7TeLAspUK6B9HOsK8N4BQXBElyONJtsAbip+B4h5lgxtsx38ccrroA7inf0NpcL + oRnK8lGhkDoMBNLwJGNtjy0RJY1wJp9wwgkYdtYtws///vcflJTcMmUKvCECeCwODjnkEOpX0C2/+c1v + iDXCHeVsQPuf5YffcCP/+M1vfnr22dd2dOAUPc7tIvLKI9uFwJ7MoKeXwDAADPQSxFpGjs1G8hrzNz/x + oNFvTFjkP+DAqdL1erujgYx7mSAIfPITUi6Hs+Cgq5VaujoP443QBYNTpUxklDWR7Ssy4DjhsdMc+KUs + zrfKkLK4c8IWEvgsKSlS0yZWXVGkIOD15S6WIswnUXRYJBwbMypQl5+fQDd/wF0gLYmWqAyBSY2R9B5p + 9qTlKLIOxs5ceib+wYjbiWF1Lg8b+n5jQx0k4MEnobnY1NbJMgmbQfjQyDKRUTergynZTeU4wlKcFhgM + w3sU8cIEe/Hsx4xup0bEf4uilstTNo4dQHhhQofl6/aotHelbWak/amc9yK3pzYcKXA6BU+SNZMEADZQ + kKU92X4q4b3b51s7ZswZe+315B13/JGqeJZDZdRHJ9XheF0nEe1wmfmH1NbqUGjm5MlM8SQGYLL84Ac/ + IP8MIyZtECsOCz95++37KypIS1cO0r0lZRQJmIsvvhhDc8DOX3/94ubNSKVc7nRe5HBcREBOpgQQkGOK + x1hhjsZHx7xMnxBjV0DYKU9IRJMaRq+++qqRD0A7QUGwBE0ycAWXKZYWEtWZ3sLHr732SCRyn8v13Wj0 + 0UiYCoVU5iNvfRcq/El9gG7JWVVASCUH66UQ//Hiiw96PLBSj5UF7tUHDhHlJh5++GE6h2L3fLgpKvSC + 8Y/eeOOtq1ZdVFWFk5mHdSRrF5drf5drN7t9hcp5x6SD/RurC9Fvw2GOMPPGRpdYVGFSg4IBf5XHXWrT + yvJs/TVDpB0pBM0l/mEF0tUY36J4lmaPEsRn6o6FBtUYtvhBY5rN4s4pdlMqaBZncIu7pbqcZOqpHYRd + ZbmYjzTCEtuuKJqR8ij4kj4vpYqov6bOX19XM2f2dGbpFO0x7ojpF8iwQpAR7km7jntSudyU1xMMFaqS + 5nI61p8l7VMxzNwf5+Az0GvcmGE7myuVKEjPtMhIikaCglmXslQDYkRLU/c4ouzp1yPZ9RWsEJ5SwmPp + KAix1t0j2TVgOI4yg5+R80APgnx+3RmkRmhM4VrJuzCLMQ3xluD2rPZ4G4KhYrsDtRf8WgR+gEAiPaBg + ta6PLSk5YNmy2y+55OWnnvokZZJ7CqPwz88+e1E4TKoDFERmWJKpCTstq61VszPke2CGVAdm+SwcpK/s + sw+2FIx/HKT7Tp26ZMkSpntOGEcZ/ewf/7h3zBj8omiGXYlUiqRokiGOWth0mTgBZQMeED0jZHFk6ItU + +u4xY0hdgHqDXzGuBBKgiM4LMU5QnMx9vrADNpYVTsr2vvr66x/NmPE9l/Mev/8et0tVZcJhuwc13yXt + aIIEQqKeJ554YkIgVE7awf325zvvJEkRc/lGp3NTXd2MadM4D4n56OMQmkWIFWUZMhyeevLJey+77JI5 + c04MBnk6xygI1PWNDv1gp2s/h85CASnwZeHQLnU14zweesmgd4J5yp1uONj5zquFXRh16mHNpoYZRrax + MeQU/qn6kaKcsjC+nVGX34NC4sCiu6JYQzpXofRnDpDxHL6JdDje3EzPyewdDosScoN7RvwJkRhZLA9b + c+zYTvYUyGKzVZSXlpXyQif2N9NjHBeJhNSsq1DNesMkPROnkubSXWE/ygPCFto+gUtjy6UsTSsnDfoD + 0VBESH4N50euJrLhJg1no7afm7Z1tLe2NONN+d/4WHlXh+lO4sBP4Z/Z+amkPvvT/mLgx0qc9bhI++P1 + 0DTq+ZH8BwWGZTvJ0bwrpQ5HJTXwWlv3Xr78ivPP/8Wrrw4JT/L5Qw8lMkf5AhQ+FRbu7XLNGztWYSGy + KRS8RVEadMnUKPz7M8/c5/GgJX2dz3f4ihWYg+SeU6gBqogZm0mVE4kTTueFMnGCpD1V8EEkTsiCD8Sr + FHFR9JikfkCWIZkdZIWxqYpOmE9IU3/58ssUeyJhEWihRhJBRLAwma5KsoXC7yiEJAW4b3I4btY0TFUo + PPugoUrFYJJPBgIhRqc6D71EeBJnLC5Z3LMqgd18iV+ccAJkVFi1SjJ7c3HxovHj6WrcpPQPqSCUzL3p + zDNPnTp1k9fL41CbIIhCE7U7qI+41qbhEYUpCuN3XWvTvt3jOrweUR9KIplB71RmnNn3rhwPRmkRQ11P + GH8yFkgP81dVZVA4KjAsADNpBZqnP5bUcNyEyrxlSoQIAwWC6GdmOpFa15MaknqBqecEgR18BmGHgLpQ + sLyshGTuwWcwrwD4bp1dCG4BnJw2m7w4m2B7KO69aMDgJ0XPlpeVprZGjZuRblnJzMzAJTBME+x/87SD + Fw1CadPh9Lm8WK5D1TmsXEK+7aLbWd8wrRXF/3xiNZT1SbI7UE0ZKpqSEP/M5W1Lnc7GUKDcrokKR9A+ + Kf0qmZ+qvJ+o8IdclkyRhuDQ6POtWrLksM2bzzrrLDIQMHQoSpB7wsC///SnbSNHEskDC092OBQW7lZY + qCwVIlg4M3/84x9nwZr56pNPnps2jTDb7eXlZx52GPROauxh8cR5EX9x/vkicUL6RUmcoAaQkThB0Qk8 + fkzxyi/KYltVpa/Kz6dtFJ3ghJh9cfE5cOjZiy++ZeLEwzdt2nfffYnAXXjhhewGAANO1uH8o5/+9CG3 + G+sN1s+dUsmFth0ASxNxAIzCgUCo+gcHLFFJQJEIH75Z0PcXv/gFpFBzluEjixaRJQLqkwvI4kNkQfh8 + OzU1zZ89G4v5xIMPPmzy5N283jU8BRm4FZovdvvemraXzCdZqYklAjRRSJ7jbNoYl2uk28XgYRWFf20w + scUYiubRqBSIDO119X07JwumhjQcEgYFebmAHFVc02JWtLJmVEWwZK9VQrOE95egSTJHkXEqGjtiRBOh + k1y4e1YMHcXq4MbNreU7xZuw26hnY9G4sji3SNx1seYYlnkMg5RY1PC5+LhJuTax0rEWO+TbuJvf7Zs3 + ddq+u+3aUtMo8itybiNomh+KlkQLEyxe0p2cERMJhQvCUYNwzOjx+/3DMoAGNSaZ/1MF/4TmWaywA2tw + ZivcUMr4aw8HJ1aUjSsqbPN4iPZB+4SOSNofG+QXfsIC7cIqksX/AMjOkhLwifJ7Bx98MD5G8Ml6aCoF + ZL69bRtcFbAQkU+iUDBowMJlMghnGIUE28yl0i0C8P9deul3df2BceNuvPJKjDPajBdxAFPm66+fXrtW + JE6AhQMTJ5SymjlxggAyQEistFU6b1XEEfGwwVrbDy1degcCb9KuJddw7733vvLKK1U9hzieToob+fJf + /3p+/HglMYOqmSpPuEnTVss89KkSCFUeIRV06R/WJcRTUTID+fAnk4tJiXnCftijXJodMBO/+Pe/r6mr + AwJP1vVT7HZKABKa3VMIDjiWl5buOnLkEo+HIsB4X/m5iBIfdjt1PLD/cBSTNU+ZYrqFpH6SJcxJDoIp + KtcKqkygWRQ7bmVm0JKNgiTGF2VBQlsM+rxB3p1BhqB54CuPy5DM+7ykyVKPFOiqq/A6FxcVKtsIPDVf + OhwOr91150kT4TBlE8MCC0RyuoVjKXtOjXFIKGb+IO3HdBumqQYgoWFD0s/pJtGh/rtc+zgy6hewOaP9 + h7rJGZxPhmEdWp5GWagD91x39gnHjmvuDLtCDJEMzpJoVzHo4SBlZcNxbElhUWUJTsT+N0F6IHJH56T3 + lAL8zPhn2H/gH/EYhX+4PWtI1kSdhFBfwD+7rGSC2009W9IeZgUCRyxadOuZZx67bBn+N7SqJ/N7KgBI + aijiXl1lZSh7MQVDmKT2EGQKyCA5ik0TyHp2110RtEQOhjmaMuXUpdtAur1MK1y7di2cxuxqO3z6hz88 + WlT0zMKFxL2wBfmQJ2DGnk/eeefeESMAQhEg1DRqo5OlgIbLMpnZZiROKL8oBr7KBKAoJA3DflINiwOz + j37967srK+/0eG70+Xbr6lJwTgl7rg59JiMf71tHHgmQ49293uG4XtOIXx6OCJnDsQPe0YoKTkvtCyxO + /L0sSn72s5/xk/AeJFL8yXg4qVOIjA5iPffcfvsDF1/80NFH37ls2UluNwG/w5zOYzTbRk3b3anvU1Sw + e1HBXF3niRN97NX1qS7XFNRZNY00SraZMlxKIQjYoSrPD0O5XjI8iZ4yrkDBwbagMUTNX+KyVBP8F3aC + rIOnhj5vETwL6wCTKTrSNvxtackQMOn2XLt6t9XLMRBplTm1gP8SYwsGMRwFRmbx4XbxdsbNwAndiXB/ + WPSbHcJDsxZI0mgWG1zO7XBlYRuk6QccvCIhP+dZ20J3p5mFsXkNE5uy66x0hnHattBca7sIApJDE0CI + X7S+vLqzfmRVuNynW5WCs3aVbPZiMZEdiGZxsQH8T7mONpIflP1nlHc38E9onsXwT9V2R/MFs28CE5/T + ubK+/vgdd7z/iiv++OabX37+OTP7Y9deu1TXmXDnsUlUIEEQexE4nNDQoCZ3sugoaYTZgReOFLRcJKf/ + 9atf3V1djctOqJZAaGSm1vU1MkWBUBxinqran0VD0Ew5eW2ffV5auRKCDFYRRhIGk/kkf3vuuVt8PoCQ + OCVAaAQIoYFQTogahCpAqOgbmIMwZSKoonR3o20GtpHgMVik5hfnnUc6/60uF+nw50Ui8yQJFuIPRiGc + TCJ21jvq708++T2XC2ILLbxZGqxbgC4pQTBDAiEfvK8IWxOqRF8GrL3zzjtRuqHm4uUXXXThli3nrFlz + 1rhxp1dUnOj3g3/9+SpO5wancz9NW4uMXNB//LjOXWuqkP6Z4HT1BoILKkqXVJZ3w5SW6X1qgzTUITuE + VAd4MUAgKyoMQQaYWiUQ2FO2oNmfOXhKSYiO5l/GvQ4gotfltf5m4SQkD2rwOwWSQQwZ7Lq0CJykqy2Y + N6ttBLGC/hzzYTWSAH4imkzLqScH4FOor2W1drcy7QCEWB25KHUkvUo0EiGxH8vDSjuGbx+eYhXjogQV + CDFWGW3/KxYhrTWoR6yPfA6v2zHAUTB8nfZfP/NgK9CgwJjxT/k/lf0H/qngH/afwj/ATOCf3c6qf3V9 + /UX77//MnXdSBCAOY/702msHFBdTPZyIFJ4xgGG6PArTsBMzMZbtR2Ye7kHsQhLOCIBlmi1nvuhvrrzy + BpcLbRdS4HHcMWsfEInMnDoVyCGPArg1+CAZweHfH3/81yecQAgNSgsoGMccefPCC4Ercicuczio80BR + IQB4N00D+1UVXJU4IXgc0i8KEJYEAlN6e/EPk42O2nVcoBTf4/2TJyuJamiZ17lcm2TxXqgo55xzDuYa + 4TrrDFhKQzzR1UVavaj/QGAPg1XTSGNf5nDMjAEhpjn9c/XVV2P5XXnFFRecdtrJ69cfNWXKETU1m91u + bodts/Q24wUl+U9kwdvtbBRr5LEilr0kP8JiaJRNG+/1zSwpWVBf01NY0KRpuIWNDfuvVi4L6BCsQJXk + IPL85MJLiZ8ZCe9x3JYsXpysYYYlPenLcVfkN1Mm9UycMDbrGJ64o8zpiripWLVncaBkWjrTzskEBbm1 + LM5v/YkMuXUkrEzdKSz9b4nLFT6PFa+09S5Te4rwsp9KuYFhCoLixSgtEfVm1eWG/DlZV+fDo5JQpzTT + HrOyf1ygReFfXPwPwl4y/FPBP1He3eHA5bV3Z+fVRx7504ce+uKzz5KByueffHLuxIn7ywASMlpw5aFI + TNE0PKgigojrbMwYZZEQAMP+wN5iis80W858dciOz61erVLgFYl0kwRCVMSAnIxyxgecFv7kb38L9kCh + HAylz69eDWKRa3i13Q4t81SX8wifD/hXymqkeBuJEypACFOmtqSEu4YpgyYL8BwXIHzn6adv9Pv7azW4 + XNf7vBcHAkvHjcN6hmQEZYYVg/UwITfyy61bRQshtTocyiI0AyGuUVR4joRcu2HDhh12WE2Qz+tl7cIt + iJJGDsde8ieHwHxZY7eThgj+4fiF88k9CsKLydVJnnuN3UGGaJlNGHzmjUWVkeQXtgCBqVEjBRWTgEJR + YT7FXobw3QYtWPdTSc141zL1yckXMDM3JHvjVySdLtNrWZkQvm37pAVjZXnzEQI3uhDN+X/8g++3t6d7 + Uve4bBi3FvpGDK9hiwyzOKDMb9xzSvjSiqBgcWFpKXLTucYm0960gYIG707R0JXUmZn/Yth/huY1+Ee1 + Byy5mV4vatfXbNny65/+9OOBfPpkWPjwEUcoDueBkjGI8CZCl4QMAVSwcFwgME3G8PgcdNBBpNP9/Oc/ + x/AiXmidGBl36X++8cY9dXUUwMNRCXHmkKIiuDnYUuSMw/iwLp6S8I6U5pn5T59/8MHjPT3ADNWXrrHb + KfJwrKZtkPQQUQI3pqymXH8GELbW1HDLiikD/Mdd6+XjjrvZ4+GcN2EOAmAu18VO59HV1Qdt3EhmAhYh + IdWEQKjSHgYbi3957LHr3W4MZaKnpBIeYbhGy8unTZgwZ9y4Gc3N3fn5o51OHvQkXKbSm01Jh6VSx3W5 + 3U5pYp4diqBLY2wX7k5F+/B2GtE+5erEkYCpx4oqbgP8VJKfkeSgrMA4Q5DBzCK1oIC806S0Ed4dL0ol + 7sQ5u5FQaFT7iGiECw7XB3zyEPnS+t1ygixjQTDZohPVaLSY9MW0L/4drjv5r54XmwSbh/CqlQii0rWx + Huv9r96ZNP/l+iV7Q4swd11NNVrYadcI/+VbTXR53oe4HB3uAgLbYGcL/STjqts1aofpdngSBgHdkIAx + QoDwP1XNP+J/hv/TbP/NDYcPmjLl9jPOeOvHP84Un966995TpOwLKmhU21knZ1J4E8oohFDag9zllCkK + C4866igCVJQ4x/eYWq8ytWPzd9deC4QQLIQ4c2xLC+Ygrr/TTjsNtmeOQDj4uu8//fR90SigxeWot47E + 6JGm0ktkENbEMgjx/qETppgyo6VbWDFl4GeaT0tu/mPz5t0mgZDteoS//f7zRo06eY89zj/vPOrTApwA + odluNtL+sCzpOhytcbfJOW9rbibhj2dB/T+037D24HPOCAQm+v0dUtwHoXN4TIRveS48Hao3wHOZR+q9 + tPxw80L1nBFju2ACdkqBbJEYo6J96Nc77MgmqGR2oI4BFrcJrpBcfhl5DkaaoJneCajU1lbV1GBVJp79 + +b2MwyS1rngBh9vRwhQneAYxoxWSS1xCQnbvcmzyHHC0UMO3gLLZXdF8FDDDEmT44oVxLQTS6mtrRrWN + JDXTSvYaqEmO47AAoeBTueDzDOVyg/FBLp31NNW43vF7fWVFJdaTe3J//MN9BmGA6jg3sl8ZmFvIJBDw + +lHRNa8SUtMHzOmASqeKeYq1uQoBUu2dDD+S/5TmteH/RPP6sDlzbj/99Ld+9KOMImrmnT98660rq6pO + k9Ub0DQhkxrDYhGTrNM1zukkUtgbDM1ubFJACGIRqUL9meT37NRB1aW/+vTTZ5YtQw4GK+38ceNggqDe + AhkEWyrrYhTJeuBPt9yyjSw9ruVwGBUe4I8AHkYGIUsNVfpAiUcjtz2pp2fOnDmHHXYYRjA5CeaTv/uj + H93g8wGBJDzcUVDwGAU3Lr1UsTdBQTpHpTFwI0qAFERU+IdXGcLRW2+9BfOTzAe+mJlBj++/P09BUF00 + jWJMlOyYS0K9w8FapE3XW10uBoBIANW01piSNekNVHJQG98x/kbH7D+FfyraxxBiIBU59TK/l7QQRpeR + 0ofXwbwp44+sLxicqWOB+ISUYHTch9UklBOUSqyIVQ73ez3wrbQqn5aiVbzFQjRlEPlDsseHcopO2AYC + OuPGdE7t7UnY8xl1pgjeoSaabsZjNZMfjRICG2DwJDlKJaikgirOwlWzc6+RUkpW/tCG4sB2JuusndoF + kShAOFSwkdHz+1btLP0ACYxFAuClBcXUNFHr4bQQaEZB5QtlzY7nCo5TOWUfSHKXpkA//9Nun5+ff/ic + OTefdNIfXn/9M8uan8lw4qsvvvj+nDmqesNWu500890JUIWja0vLez0e7I/xfv9Ef2ByUz8W7rzzzuef + fz5VyKGlML9nTZz5x6uv3ltWhl14y/IVxOHgmEADQfcyG9ZoylXAWyeeSLq9oLTY7aSrU4MQw3eXgRKj + eAjNQFjo8UydMoXqS0pTJq4c7kunn07p2ocmTPj5iSf+89e/BufoClLahWLno4+S7UekEywE5/g9Oe9U + gwIXMaPBP2ix6LGR9kfmA/xPCK6/eeONP7/wwitXXHF1dzd2+Sbsck2jVvBOmkaeAyTedtS3I+GuSBir + jg1sw4QlrgmxE4cnNh8kT37yHfCD7cJf2U3hn1nSE2FrUqbNpp6SRjN0YdQXSo6FAn4KviTMc0/9AjIV + olnf2TFysHPlW/Xm5tIYw3cqQBHfkjupu2jIvWVMOE2NdfW11Vi3rDOyPj9h1OU7LZ45rdeKtzNRX8UM + BpPhAAQWRKO+RJI3288AjPVO7p43d3oyj3mKB2OOXXHnKaxO/mSkhcadkAPjcmJyHAr/P0TBwZWmR+LT + mz0rKiuEmAelKJ7sxOAWS0Sz4oYhQxU39RikUFAQVxWnK9S0UqQ+7XZYoPjEMAGZEBcUFW1Cl/Kyy377 + yitZ238JD3zlpJNIsKN6w3FovsgyQGvcnqV+f4+mtWN/SBjugIDT0aHsQtyYlE8CtJjlcyHO/Obii5EW + e+zAAzGnSFGAnEkAEkNT6WeaP1nfL8mLP1q0aBt8FvRI7XY0ZdDaVjUIcf9iP4EcMGWUZhgmPBYhlNEa + WfwI5ovy1g7A5q+//vXtt//xgQcgjppbBUOHxlNE/rrrriOjH+uQ75R6IJUC4w/8U2nvKvOBjMDrLrro + 2qOOunrJkks7Ok7z+8kkIecBhTNoLypSi8GKzjVcnhE2W4vTSRks2qnILHwhTowUjsJFNr7wX0X1VCFA + oN0c7VPeTnO0j0E4OL1PuOhF5VThUUxICuXXRIwo5Y1VNNgGYgpC+kQWeBka5wqXwINqGECiScLhOny2 + VwbN5h7J1lAZh3EfJnwpiJNd+QHoEeBc4uArdx+Nhqsqy4WvMlEnC89tOtu0prrysE0bpvRMyLYnE/QS + Y4aMwTTISuMmTBg9a9aUXExaOhe/fFERgzzBhwJD7SOboxEGf4IPzlWSKBQMM8TFIB7GwZQLyKY/Vthh + w+yON+uSGw2K837w3/YRrXOmTysqKECcyWz8xclNGThnVtkwhKaM1EBmYSRqVGlTMvYxBEVpU7t9Sih0 + 8OzZd5x77m9eeSXT+J9F/PjrU09d6/EQoELw5bhYrdq5NhsON3gWzVJxhgBVp9c7tbtbYSHBM2ZzTJxc + iDOkDTzd2/vTo45SCinkiZP5oFIV8SiicQrKCp2UL77A7szu3mGRPjlqFHCL6ub1MkXvWKm1vSOJIprW + icEtoQUTXKhfxiijLZIpA1ET2xcMsyJ2A1iy53WXX37CoYfiUIUBS+UmBEipDwwign8g/c033XTt+edf + vu++F8+afW5FJdkj6FwjfobyCxCIEPlaOJ+yBC5l3MnpxNWJnUc+HwgHvOG/VdwWvAVsTAQYfGozyC+G + nrXA9Vi0T1FdDFenEe0z+yrSv3hyDxVND3oDHij9pjJ4Fg/PdDcmTAg15nQI3s3hCEEJG0PkLmcmGaOi + oIOtDqhAuM0SOgnTLhEwZnAsJ0MKluPQ9woK8hOeRzg8LRTuJoyHt9NiuG37hdR6X9pUAIpEa0ZWgttP + laeXZIGVwcBgtq2tqcSqTdgFLBMaGmrQvUx4RpCPw5UGinzkQ+Auz6DpQ7qrEjvnJxUWs4tTsmiYPm1i + YwMxlAQf+kcEZQfR4RiC5ng4u8maUyINSLwPckQYEGiAn0p+UA5PMzHB0B0W8sTSZ6UKfFP5QaFgu9e7 + 1/TpV2zd+qtXXqHsQ3YwYBEIP/3LX+5rbyefgRI8eA7xjopCrGhdejxdmkZ2MaEplaE4OhKZ1tursPDI + I4+kaDseP+rfZk2c+dtDD71z330qeKb0w8A/+JZoaQKxaJVhaWEj8svsfLAfv/76IxUVd5BEqOvUdkC0 + hTgoJheVb+d4PaNdLiOVXjFlqNSBCH9HSws3uH79eiiggzVlEvYq7f/eDTec0dx8TGPj6pUroZsCh6ef + fjr59bh8v3PGGRfuvffpPT3HFxQc63Qe63JtcYpqf5S93U9mPqwl50/SPg2FT2ELmlAQ/FMkF/Nm1rNW + 5BdFdSEb0quReGs3IFC5382ElxxfSqYUI1Q22DJJO91bvLq0bwZMtXIKs3h0mt14bRUY8EW4GoV5MDSn + ToYEilSZonOUPZfCpBOzdxItNI7yeT1pFVOt9p2phL1osJjgRGoJV+cSGH/kysMKjnsY7MmUGPT5+3P2 + sgsHpm5ifn5k4fxZE0SJogTLFjViEnYxTc9d9VTCgxvla6v9OMz7UV6xqqzCIhBKp/F2cYOGhtqtx2zq + 6cYxlvijgC3uA+yxDBo8Rg0IFPEV3ihZm02BnxJ/YYZiwmKpHo6t6PnCpmYxkRohDUGFglR+mNnefvLm + zU899NBH//hHdrO/Rfwz7/YCOpkymQFpysMkd3S3UGhH+PqYg9AuJFtHlecdX1o6fZpQX0MA0yDOgFvW + hVQG5P9xh599BvIRbuSD7cV5+AkKIlSGUgw/ibTx3+x8sH/FInO7yVXn7q7VtLM0jbvbgwRzTet12EdS + f0NaWipAGHa7C3w+mDLjpWQaFYtQbzFXsaAm/Qd//SutQsINgETzU8nOgdMv3n77edXVpEVudTpXT5xI + JHU9dTDWrz9pxYpjOjoOzc8nQQXYw/Ij4X1fmfO+DggkTULT1kCNiUEg7lBy/JXCZ03MFmS0KNUbZeTF + bcBeQHN4NbtyfjICAw53yOl1MmuZJGASujoHvwCMcHgJFqkuTAvhQDAc3F4/nMOhNaZ2fQlWhZCHHBrU + yW6moeXM4yqWydyNt2yowDtFe2SVulRTqLkgonQLU+3RqpEK9hA6TOsXZc5MS4NXlt92eoOEQKX6im9a + wCFrrH7Ts39P1XsKCLcbDGSxD0m3cln8D1AQOVtZafH+++7RO2lCpmema6Q5mJNjnTun1hRc0+yG3ZAf + JZUDxbskBrOoL5jqpRKahnI8ifCCVJovLS1OJj/BvuoZD+5n82/M+Kcy/xizUTz3SObHwI/5S7mw8GsR + vIG/XsYmEyH4bwla/pq9SHMUOnQSskrc7jmTJh24fv31111HPImSAlhCWUBadof8+vLLcR4KyozDQaE+ + dDhXOZ2zyamPzchkblTFsHBiTH1t+fLlOA+hegIJGZVcSN1I7Ms/v/02nkZYJ3SFKvWXkWiZcf7/u/DC + eyW982pJGaUq/SFEQGWyAQkGYDyPA2NLBQhxSAWdeoHbPXniRMoQIq5G8BJ71zjbZx9/vG3t2tsuuIDS + S6RV4PMEFGnYL++997zS0hMU51PX9y8v32v8+P0bGg4MhfbzeMhzZ8PtiXwo1R7Y1tpF2jv2HyLXmIA0 + Ruh86vrsUHC80xmn8MkSSuG0onf68IXIsqeGp50p3OvATSmGuBiKTEZQAmNeikzRhjcF15n57VDVthO+ + wh6Xu7q8kpCh8VcOB1RS2zSFBflFheRxDGia9Kv0z1H43XIs6iJmTlcqQRY1Zat2Gu+1wClTlRskY2RZ + g0y7MLPZjquDx9BMzJdhLTJh/GhUcviS2enS7S1qJiXPB5PmpoA62SvSuhLS46rmoxCrVpvaQaFjP/U0 + wXwpmpJB36lrJmw/F4kGI+WFJTwhnlkw4LdSODhdV2Tzd7ESGCK/QTaXT266wdW2OFYY00CgKp2V7CPc + Cx78C27gkC/JRHnMKGjovzCT4lXDc83MBf4RuVGZD4ifYU7VSe+i2upJwyIj0Garc+j1uqdcdxXjEdX1 + GRMnrlq1ikQCqCjPPvtsHFkxO4SzeNRHr712c34+WX3CprHZDpB8DfLSugmkud24RkXBQk2rkFg4wuns + 7exUDtJ169bBDcldcSauna9dcMHDF12Mlg0f2CUwLXGcZoG1b27ZAhCKbL8YZVRVpVdFJ+BesihhvaIy + CmTuhKPY5+O+FGUUYqc5+f2f7757QWHhRS0tWw8/nPR/bpxFwMv33HNOebliu2ySdR6Uwtmebs+GaP6u + Xu+OUjWUzPdlmrZMCr5Q7WGBptGG6VL2RWQ+EBSMhpc01XcFAnhrzQqfgLSh8IlbrSAcyA8FQbs4ypXB + fDFW8inGeepXmelIOPfkTqw38/OjhsZT3DlVwD6jN1oV1VPv7HYEcujlBSUYl+pUENAK8/OtG0ODG4B4 + ZnF+IX4j6zNxNBge3dTeWFGr7oilv9/pRes4o7sb3D9p74K5HR3/SJBhKDO8pWcP/9/kSeNamnnzBFSr + pMyMWpLCXkq4yqedRdH88pIyIY3Wn2oO+Alc5GceX8R39V9EoAU6msxE690sXayDP7TJ7yHilbS7eR5i + kfLtA6GMnsq3YWcrkWQ1BfCk+SnLoMQ/s4QQqNievMSMZfxsFbre4HFD8wMzqGoEzQTxT2gvkD/VRiIE + NY8E5R2lR5u9RrMDMGyNodBUGYGDikI9AagouBwtIlmOu33x8ccPTp4Md5RUthPtdhIMlNk03e3qzY/w + OjI1C76ippVLLOwwEWeU4gz5A8TzMqvPnrzRP9+06YEJE045+WTqC+KAhYoJ1mZarRCn60+WLr1b1q9X + lNHjJRUIPySJ510yAqeYMngXG6rKO1sbo15PVUEBj4ASiVw3rpzTbx577HSfD/GXU7u6EDzDGr77oovO + qKgQVd2V21MqwqySai/LnK4lLhellOYSj5TQi9mH2gvlHVD6JoURLgxtIKMfE1CkQ7icLX4f3Yv/gIWU + ofCpeFVGngO6HQxOpRFo8l5tz9JJ+64x0TPhpJ4oDZNOujGHfv4RQs+8ZDFyCkm35YWlfk+/pKK4QQuk + D+NO6Y5oNGKuC4FAMVlMss4MAmjpoZorNlXWzRo3pbWaZCXpPbJpToeTuUDOCeI8mU7CPB+fj6CdmNsT + BiBVOJA7ZeUt8tlIGXcLdgKPFoPYuB3aX1iYb3G5L1ou8/kS0iG5BS5BDqi6l9gdie8Y0HVVNaXFFOcW + E6CAPbtD/ERGtf+n+hLbBBD2Y+F2bJMYm2oEim6VknRx+4mWmagZmfZ12kGfdgd6ramhvr6mOs6bQUuS + RWXTnvP/1R0MFIxLeFD6Z5iAOD/xH44M+EcHAyMcDiUCQuYDxR8WlpTs0dm5YdKkaZhTJErrIld6jM3W + rtmAQ+xF0IWf4xoblaW1efNm/HKZFvTJBQ5fOeqoK5xOwoTHOBwom4hAGmYK7QwEWt0eHLncIGQ1jNcq + 3TnS5xudX2AozhxzzDEkxil3rnWx6RStff3AA6nbfsbOO1PPgQ+KNvTGr3/9azil1nlDn//97093dd1F + dFBSRhGzhjK6n92+nApENhuE2BrptRaRWmpNjOmY0NUe8bgbZTUMgnwAIQkPZgmYZy+5BMsPFyg5lyfM + nn3+iSeeUFtL5h9irXtjCJJ/Kc1NmDjz7PZZJAJS1S8vD50zwn4YoASlO2PlHQC/RonEtIHMB5X2wCqK + tZShcKZifoPZnmqyy9REMN5KmfVsNfI0VO9y/LwnUpm3ex2VJZTwWlaKxwEbyNwM5okA+c2N9ZUVpWkD + Q+wQCYQqi8spBBjXDDCMwuBuPZsgIjO+yFuzO6Rex4AbBC9EdMfEXQD/FPybe4PvEP7HjukgL0VFbdI+ + Ea7FIiDhbpxN5CAOOEm/F9Th0D0eL1UoZJ15ByjIEkJgofwpv+sCFAU6CkSUKKjcpP2eUgHkLpdIGjHs + Q84UV3pKLCuE6pA9hceZXoAUmtaUTtsRGe3A6Jk7a9roUUzIA5BceNg9wyt5nlE7/+s70zuDM9+JjTBz + EQUEJ1QIrQXOodM5GsKF3T7N51s/btzFBx30yHXX/f4Xv6Cm+Cf//OfJS5ZQDXWers9yOin1QG5pt66T + K6aKxbf5fFMnTmQiJkZFEht566Rj5yLsaR0a/3zvvdf6fQhhk9Z9uOTLKAHuecUlPUXFzCWKvg8Wljgc + NU5XI+neEjOUI5GkeMSmIU/mkmVvtPbVFSsAwpvKyxfMnKnsM8SsScsjc9F6b3z69tuPVVXdibJajDIq + yhA67FR1wCFJHjrpd6C7qDSLQ9vtDlGnG3t9xAgFhKRAgL7oq1GXWKH73Zs3k+qAC5TtMK93S03NBlXw + lvif5HyiTkfmA5Yf+IfNB/hBe+FCwB7xSMw+0hZBPpyfkHQIT6qcd9WxCv9U2kNczl8Wue3W3xfmL49H + 1Yoflk9sfszm/EybggyQjjAicyoS4ChxkJrqCrL9cjIwlHOQH5n4/4S9xaP0eAjHJJvSrbQKIujIEc11 + tVXEEYP+gBVt54SezySPVmBu7P6k/1NinggxOwg0u/hJbUT+K3/yXcKhAsiYaejAwBM+S8xQHct+QFZG + MBCA28LCi14wq6GnHmjsn2mIGKIISSWkE2Q6hFWUUy4tbRxuGMvGeZTZnva0nEUUuEj+FnENoUmUbiin + vdB/cYc4dyhrLUWHIRYoUAHmYYxFgv4ZJuBkt3vfnp7LNm9+7ZlnPvrb3+Kg6Pcvv7xHILBCxo12sNuR + TgZsmDE5Fg8qP3tkYXQ+UPBhLf7yl7/EzPoG6KMkUSB3id8PxgdAKHIMpB9vvMvV6nRiskBvqAwGSEeN + SruQuwa5JzY3q9auWbPmsssug+GSY5a96q6fLlr0fV2/x+k8pKX//CQzkLkILFnvjX/8+McPRiLU+SN3 + AsooKqPcF0bbIqlGDThhiinKqGD5ggdwd12uCbLiPNn0mLlkPsDWwev74iOPfO/ssw+rqiLbAfuPnyoQ + qCpY7ahpLBrIvMTzidsTn6eqaovUi7L5gD2CrIokpcCvxKFX+n3kminmsIF/hiM0zhAcvvHP6xkI+IYP + CJlrmSKYwVPOEsJTOjiNT83pVgAj6/5Rrq90M7OqIZxhlE7E9nKtfOf2uEkrlBFbW2p3MTvAg02YPiGo + hQiqDfgoBDBQUFh+EgLxB3vsRIV0UFBt7tgX+FgCC/stRWkX4tn1enweN7EFmbQQ5xel2ySr0dHV2V5X + x/pvuD6o2rS3jjCCzBYvwwLHgx3MreYceuQEdL1Mjum/OPcOrBpjiy8VZaVlpeBFZsPIyr3Qw8OdXC+A + HJ+7lF4U3HSJgtsl0GIQiBd0jN2+U0PDWfvu++S2bf94//0UHrxb9tmHaZSKOehJwhskFIcBMQ4BSRlK + HOPxGAUfYGQQpqKmT3bJAynMwcHNoyzCgzvthL4MKd6bZSUK7BuAkDldxdLyNa3M5yW7gIk7qmkEE9C+ + QfRkikQOPtQIUln2yoSy7sOMaycteXHGjPt0/U70rIPBhdJE5qN6A4aqxd549667yJ2AMkruxNXkTtjt + RzqdlCHEaIOfQn6CQRkVj5WoMLxfr3fihAlcS/ljzzrllFM3bz5ozpxVxcWE/Qj+wfzkwVHnb6WsF4gu + tqK9kPaACahifhh/9Jih82lUe8B5YCS8N5UWj6qvDVK1PInCddqcPzUzWlmtpn6VBk9fvMvmNEErb2La + S0hlq6RGIVMyAshYXblfK6MzMHtgaaU2s/qRMuepMqOGZboz01RRfn5LfcNgo0hFHBVJUMFVPwTKyJ8A + P2ntgXZ2pycULgiG8+1Or6Z77LqXAh7yCz+BRoGIdgGQcv9+l6k8g/CU9tNHVZ7FQMwVED2AiCz+bIOP + xDN3ZGpoJ+waHiSM/bQaAdLpvL1xAKFXh6LjyR0IZecOuHGAUKYt9i+yAEK0UsPhoHAtmD68GBGhGZGN + w0SdhrTNhpqa6rJy4tGZjhvr+9NoCpAgwOjMs3nybIoUU0AWhIQBAuuYcWOdznUTJtx01lm/ee01HINp + CSOkyB1XXAy9UBSQ0zSwEGOCmZQKOygsC5uyslJN/YibQNNHuwsSf3aJevEYI8sA4V2knYNNq59deilk + Gfx+BNJwjSqLUAEhpgzzuJG1DRaCi+jAQYjtCIWmyfrsfAAPxDkJ5uUkyf3ZZ8/19kJyAcPwam6O9QZG + J0TNV155RdW+SOv1/e2ZZ96r66LOH7kTdvtVhYVnFBevJUtBirZgrpkpowoIC4LBKVOmLFywYMn8+RQ/ + Gl9QMJrwYazs0Q6S/Llc06Db0DnUq1LV/ggBdsr8d5yfNcrtiU4sNTV1nU4zbD5V20HlAkZ93hDpeklk + zwwWTNKBasvDjZNMZ8v68I7bU73LyGmXFBThiMvoPAowkgHz0K+CM2pcop1F6nfAb4VKw9HK3rF+TTnl + ChGc1EdldtLkl6d5GEUlhYWDVxuiJbLx/Rl+ZNM53aFAhJQNAYF2FwgH8rG5vMFIQYnXH7HrPruTzS+/ + CDhUO4g95SZsRGkdGvFC5WLF8scqg/sjW5qONeNzY8EOKE1gvX+z2BMvc3V1hSE6I5ApP8p/M3quCa/L + GbgXl3MADpkNZIaC3+9PSLDGY1xWRrApMyCUMkj9OZoEfVH6Q/Ap05NY7EMzNcZtQ4LSGSSZ0mYrijEn + cQxCAd176tS7r7rqd7/6FawKqBxWJmhm8KdOPplqDyRZoy2Jsw7FL2bnyUzQqrK80zktVhEXBx0FDUgq + t2gGJYMH7DPaRuo3YmBKyQVuC2Qcs5DmX1955YyiIhRPoH5QnwF3H02KA0I1jwtlcN49qYMDx2dMcbEC + QhUsxJ1Ig7PIdlCN/+xvf3uqsxOlbCS5r9D1c5zOpbHeoDYtrJzf//73Vk7+y02bFGUUue3LHY6Lo9Gj + g8FVmkYMD1804TrMXEw07siwCEui0dHt7dUFBQQ24PGS68JCh6UJtR6pdQz/hSULGw/L8IJCulFCaJiA + KuxHzDhfs5UH/MW4jWLIFyeqZ2ieWcx5V2w7Y8kr5jXpc7I4mK3sBi2A11lUL0KCw+NJG5kbDKKyRVZp + ONIxNwxuIiu3KvexGP1hT4xGol1p7Q3zlWXMSHgkk02z/N4Fq2X4S7ypVvFcYItKFTl0UAPRcKHbE4gh + nM/hRoMhoLuDuifkcAcdroCdzak2v9wkIipQVECoQobCQdrPnQEIQ74g9QY87njCUYJnwrOHO0pQMsXz + Eo6CRJq2lh/x9h3pbuhG5SbIAQgpDI33MouzDTgEp6juLMkvItE+2cNOwb0246XFlnCIeIyxSpsWj8pu + tziCqJdnrNmjNuEPrHI4GnWdyjgL6+uvPOWU137+c0AFMTAlkpnWTFE7fPr++5c2NUFLAQv31bTdlLAI + 9XQ0DZaNqDYHtEwTAi4USUemS5lB1s8/uBkAIVBKhgNSKUTaEPYErvA0EtUjRU+5Mb/6/PPLp0zBVBU5 + AJq2EJ+tXRuj6xi+hkWoXHlsDHahD253wPhnByNYiFORBqvMQuvEFnODP/m///tBYyMCoaqQPd7ajVIF + mw/1e6nWhN43HZ52zfHybrupk1CPF8rocZpGkSnsbzBM1eNVlFHuCMsMbz4bRiHZhNQqIotNPGule65p + XcRKpfMT/VU2vkMBNbygkG7oHyJ/cF5AVhXzQzYPzba4mJ8Bewb/RY20tB9GPq6r4ZMIltodlFKAHycQ + AuFspmkR20NHN23jrO0QZyzKeoGpyIPWzjrsezHtAIQs9zPqB2URpjA2FIco09VGxner5lnaIpiaKgro + 0t0+3SUMPgAPDSKHJ6R7ww5PWGcTXyIOd1hsrhCb3RUUoMieLvZXcBjDQmFQKuKMQyYaKhtYGcEZ9VaS + 28K0RKwhowWI+UysRBjHamkm+yCVSS8N5wRPjCeESxNrMkXXg9aYtsBh7sZlxg94mA/gMSqOqJgipUsQ + WxCGSLVDEDvnV1Yevdtuj3zvezgtqcyHQiaexkxR6rXrrkPbkxQ0gGcfyTmExDEdfXYJhD26Pl0KffFB + 1ZPKDMAV9lzWgTeQBuSgqYihUDCIakEk/0EGufW66+6/8cbHzjvvYWrvwRApKiJ+CQcE7x9FX+eFArOK + CzuDfrLpmeXNEicFHt/oxvpWmYKLl5iCeUawkMzC22+/HZqPRR9mHGwDhI81NqKLhl/0AlmrlrDlMlkp + lw/KZ3fddRfmbOpUiq/+85/n5s3DuUrJw6vsdsq+ozJKYQ1cmjgz26UBB3QZQMjS3edyhb1ePBiQE4Ti + naZRCQuQw3Yk7IfnE+RjUyxQkh9qpBfUgEAj7WF7/rsp/29wwnuy2UI4Wgj1ZM6Ay/GdMAh0ZM1RYgKj + sKG2luLbmQZQmHlEYrRp1hHxBVGxKFd9q5hxo5STv7mAYiY+0QwewrBPmypeJ1AQ80GyQJ3eULSoorrO + GywAAnUi/p6o7st3+gtcgUJ3oMjlL9R9Bbo3X/dGBSKKDWgMYSnqHixFgYUOF1iIUSjswn4S6YDkQnG9 + /mBkBp2RaFd4qINrP/bvmG6hwW54HYsK8y3iqDSzBFUobmARQ64sL+NlyPFevg2Hc4+8h2m5YUZTzSiI + 6cPqPhLjSWL6zKuvv+Tkk9E6ocIOwTDsHuseUfOMTyHA26dORcnlsFhMTgULJ2kaWMg2K6bqSfLApZde + io1l8Pgt2p2Dd8MihAOJIXj7pZdeu2HDd+bPv6yl5YKiojM8nq0u12aHg3wAzEGYIHhr5xAD83t7/P4m + h6NK18vcbpFpIB2JrA9aa2r2Xr1zb1d7ARWCVLAwHJ4ma9nPnDmT3ANkWVgl0DmZUl7/8aMf3R+NKgy7 + wm4nb48u2jsQmCnVBubNm4f3FUkXlUqRrCs+feedR7q6btB1VAIus9tPt9uPwAstzVxMOlDNUBnlESuK + JpFgL/M1lhwyF3la2KYV2jRcnTg82RnYMzbQ0Uh+CJuS3+PSHpT9ZwT8+r+kWyszUIllJKskY36h/D4v + 3HrSA4bjLWMGqCgpQ9o+o5OzgCa4GFePkDuiVu+QTCa8y+FQiARz6z7YjNr//8DOisCIPS99z1jdzv4o + oBupnFB5TUNlXYsnWKx7C3Rfoe4vcsIED5X4oxW+aLk7WOIMFDn5JX8ScCgQUeClsBSxHYMOt9+OXQh9 + Roi6xyKFpmwKn9cXCUWAsOHtSZzwVOGILxksr8kQMeQPMlprKBWBOPKOMu2H92a+qbPzzgjrNklpjsGt + YKZStiAzPsEwZQuSLSBQsLn5ygsuYIrHo0jlVeZixF+yZki+/dBD57pc1OLBQbpB00TNB5mFpoBwqts9 + Y9QoZQYdcsghlPKhShGmZy5G4b9///ufXX75AwsW3FZTc43TCUicg5qMy3VBccnJ0Si2KTFLzEH4kCol + vEd6EeGA1DqdlWQyxdTI6JzicLi9sb6Y4EksWEga5bhYZiHgjfAKQnHvvPNOptHND59//vuRCEBIgPAa + XJq6frDMWF8SUxvYe++9oaeaE0sG98k/33prW3k5UEp5Kfyip7hcx4RCJPwR3lMqo+QzYOOyyuEpA4TK + YlOysdydX3NE7U6wEJwjxQLbET8qoKg2ooBmL2jCzD8z4UW8YtINKNlt3rSLVItlV0d3te+3fm11FWkg + Q/mRVoSwggZ7YrHqoMKlmF7AvMFJ39wOaJ1a3dD6DQj5eyeLln7Ho1rmZjTjWb8We8qKQzkJrQ2+HFMr + ImoUVMqFLZjsLtDDKyws0PHl2gkru8Ethyeg+8JOf9QVKPCESlyBYqe/xOkvdQXKXMFyd6jcE6nwRCvF + z0i5O1zmCpU6A2o3QLHA6c/X0aL3RRxeIojCR6popf2ZFYI10x8pxBYkK9/r8Qoe6ZB4R5PdJK8QMw9r + q7gHz39DvgCCdXSxCFh/I8oRXJS4KEuATJ0nGQ3Eodg5M4uQCVHNhrEwmJ0wGLGiRaNGXXbhhSRZk+fO + LMwUDzcSjmjW1fKoZvDQypUQNXGQ7m+3r7fZVsiM7Mkxo3BKJKLUWxYvXqxq41mJjSU2kr7++ldHHPHD + xsb7nE5S667T9culyjbu2eNdLlDwSL8fp6gyB8lxnOtwTLPbJ0kpMjINcCQCAMo7atg9Rj6JDBZKlTgO + aW9X4A1cIRT36quvQiNKy6Q1t/nDF174XjgM25MWXgmG2e2CYet0ri8vnROjpxqpFLBmWIiAtXwxn+T9 + n/zkxnD4EpfzdKKM+EXtdpL/KPtOgJA7MpgyLHS4C3PoTmEhMx/hMkM/HZtL1Q9RX1J4QQcH/8RMbUfv + iwifqHmLtTRUS0wyzJhMc6lyOvjlQkYDKRND32sAo4QOERL3qVAh2QJ6aIFKBNjcGD2CK0STYKXn0qVC + UkDKCydYE8tbtqLnktE0xbJg7pypkyeOG3ogpGaFD606v7QCBQsGAHMG8l2hYne4VOIcW4U7VOkOV7nD + 1Z4IW403v8YjtmpvfhWIyA6uUJk7WOqUBiJeUxAUHAVNBZtGACFGoaz0pXINVfRR2oUm3bWMumTQzowY + liCZPleO8rq9olRFwN/cVGfRC5E6nJv2PljhFoSj5cjTDbIdlVx52jN8C3cwzEGme2XrgIIQI+e0tJxz + xhmUWkV2i8mdbDZQENdc1iioZu0PXnvt4kgE7x9ilShVrrMLmcrZmjZRGoX8nB7LWD/wwAOJjeGMzdoo + fHXnnZFruUfXRTUGXb8Yc9DhOMnhEGrRscJ4JMntW1m5KhRCJHOmw4EUGfYTgTGQA2cglpCqYWtwQLbb + zUTUJLtkBOI4PT0KCynggCGrpNesx1D/9sADpNJDGcVgvUKWjMBhu0bXdwn4F8bUBkilQJocdzHLEYAW + BzVPBNexgYXvPv/8lcHAWS4XBiXVhg+U6qmUfSeVHr9oXIBQLV8NhpSxEuI2Ra69vGWV/GDkP/D7OBXQ + ZJl/sTD8ML4OvGsuh2tIeGSKYaDmH1pu4I3FVxU4EUKmKa0BYR9LSkXs/Bm70YT3K5aqoYRJLTYv4W7o + v0RDBIUTAKEQ38eCT5dxP/C0YrmTOiuDXq2uKofGmKzZImJFXmVGwUnmW+Ha05Uj1OEK4tLEmHOFSjzR + cm9BVai0Plze5Cus94qtwVfYwE9vQb23oMFXxMYv67wFtZ5ojScCRlaChZiGeE0BUVcQLJR2IT5Sd1Bm + Vqgsw+2RQgWE22tT5GgRhoPBinL4BxkPDtWnACFV7K08uVjkzOr7KfVh5M7i9aBimWih8EAnamoKIMR/ + /a0Vb1PRQWUQMOVFZNo40a/ukpKjDzvskksu2bZtm6JZktiXOwqqWfuFY45RaeybXK4Ti0v2DYdhzWC4 + KAfplEBgujSDFixYgMyYqkqBgZVFmPD9Rx+9X9fvlql1d9jt1JrAGAUnDlfkVYfjxHHj7j/77D++9trW + GTMwClG9wTtKBgXJBtBDlFGIVYQ70ZDBVKazWjSIYlKyu7pilFfaTHHaJ554IqNsir9gdMu0hysdjsux + CDXtYE0jmX1nv39xODhz/HiFslS+pTAFWAj9h+qAlLkn/AknlqjkP//4x6ePPpq7Qxr0MIfjEKkYt0xy + kbgXMghxJkZN1u3gSJ7ZTWpk+8V9McRfzF7QXGbkrI+FsUdmMHZn6slHYU/cVXipzYIY5r9K8y5dSHPg + 6aysrf1eH6FHZTsiSz20Fm0WfQhuEddM5GbLgzQEx36w3SZargS5Bl0vFAi2N7VQ+yKzjpPnMZ4OfSIE + uHGoWzInxMJAQKBDQKDIghAQWOgKluDt9BbU+IvrA2VN0eq2aFV7sGJEsGJksKItWD4yUDrCX9LqL2mR + W7OvGJhs8OTXeaLAIZZipVs4S8vc4RJXUNiFwkfqhT4jHKT9RqFwkPan2MtsClWkIlanKYuHoQ7hhuh6 + wEw5WDNbEWR+Vevn533AJQIS8uxpHrnwZjV0hoXK1ky7NBPeVI9HZjFaBWB1WwwIkpzwxFobGdv7IiMm + rwJCs1MUd98It3v9LruccsoplASCZoJ9A+UEX1yOtqCBZJ/85S/XNTTAmjnc6To2HD7Q7xdElby8SYZR + GIuN7bvvvlA9KQpPYDJTBopgjX744dNjxiggJHh2fgwIj41ELpkz58e33vrx+++rVl2x556o3oCFC6Vs + ClbUKJtthMuJwUfADMqMSjlQSKCwkN+ozEJlQE9oalJwhelGnXeyNaxnU/zlnnsAwutppMNByYgTNe0g + m221y7UiGl0UDk2JpVKggsbK4N577wVo+Tz66KOPPfzwY9dff/c++1za2oqRLdYWDgcgClkUEqwgItnt + 7ZpWE8sgZK1jBAiNcWK2C7k7dYPmTf0yLv8v85dviI9IaIQJx2Z/nQFRXiDgi49i8D7yMhJVyhTwErYe + V9ZgOBm8p2DZx3xIVqYgK/tk2psimyCW7S5mXZ+fKkAJVglCFjuBuUmxi/Fju6oqywe77pgeq0rLUd3M + qElcWmhVStNTKPsIswOiCyLcKfMyxcKmnxHTbwV6Iq5AkRtLLlLpza/F1POXtoB84aqOcE0nW6RutNrC + NV2hylHBilHB8vZAWZsCRV9xs6+wERvRW1CHp9SDp1RhoTAKodXAr4FNKnIN7dJBOjBSKNIKUVNXyfXi + NrijjHph8M4KcrII9VkRrBF2N0MxE9M1tpa0gUWMdZlvsX3Fw2ODAlAcLaSGcNobT7gsTXsUtajQhs8P + o3OZZqVl/rMYXqLojKVYutkcxOjBvkE5BQLIwu5ujI+zzz4bQ4V8PiZ00hhw9OVCWomz5167/HJEPjFf + sMz207TVsVSKHomFvV7vdCkzNnv2bLMSdxZG4ZvHHaeAULlGL6msvG/Dhp89+OC/B9Z7uufYYykkS7CQ + oBo1KCha1OOwT4qEm10ulXtnQIgBFcbqoUgGC5spsjF6tMJCEh4yyqYACO+SUUwswos1jfqIODZ3cznn + ezyTUTN3OHplGBJdcp4LNXKxC++88cZLDzjg1PHjj/L78fRi4+JqRhR0vZTIIfKKjh1ZE6OptYIeguS/ + GHBuhPVFbSDk92PSuHHOUiP/Ic58TD10hwRg0r4dCXcQr3lMg00AHgkZg2ZntU9CxeosLiqSyECXLI5M + cgjPQnCLMvNM9p8rYTOA4Ab0qGoqmROM09IDrM7TTizmNmIVoJdFuDejo1J0jEi5HlR5KuVkrlIjRJk+ + zeEhz49ECCDQB+clSqiv3lfY5C8ZEShrD1Z2hqpHR2rHRRu6C5p6ClonsuU39/DfwoYJBXXd4arRwCF7 + +kvbOMRf3OzHNMRZKjylBA45IYSaUlcQ7kyBExIpCRVmIOz3jsqcQlNyvcDC3Km9pECUFBWmLhuWAD5x + 05Iyks7YcpIGgj2bbreMxjODyedCejzl+iWjMw7cGTcKPtUBr4REVPNemKT50Whc4S46RFYGSf8xooMY + N4r9AVO0q6Bgj912I5MPs4YMdJyiudBEk0HX5x99dNv48STMxaVSTJZACBxOq6tToJKjEvc/f/7z+1yu + W53OB6ZP/9mFF/7tzTdJ9SOAF9ewH154IZ5SFOBW2+0KRXoJFrpcLbpO2pwiW6qsAzPZ0vAnEywU2RSR + iDmbgtgqijBWalP85d57VSL8ZQ7HBbJ2EkUEhSKMpnU7HKj5jEHUbepUlgUUbjx248bDd9hhfXU1yA3l + Fb7PPvLnOjZJxMW8xhYEBeHIQBZVFScIzpj5omp4MLWQtC5SY6kAP9AlmIXzk0kAQfyCfITZrYy+9OPT + 4h6Cmxqr+Ga+NGvX/zn5e0JtVkzMhIYEtJ7BCFqQH1mxfAeKORiH0C1AGn44i92b0MDNlNKR9bXUKJVi + 2dshkGw/3YcVWBEpbc6vbMe2C5R1BCsw+MaEqsaHqydE6ibmN04uaJla1Da9qG1a0chpBa1TikdMrWyf + WdzcG64dF6oaE6jo5KiYaYintMkvAod13kKBhVBJRbAwUETSofKOSukZqcTW7x2VOYX9xQtjRmEu96mO + FW7roL+upoqQofUXSSKDTOvv5z8nbojaLfdGfvNnkCVZBNYKuVSnN+ILiqrFMZoDGolF+dGsw6tGBj3m + jmEOzho7FuyBo4hNo+SkMyJAWjfafnfffWc7nRiFG2V+PWXtjPx6sHCSxzO9u1th4YknnkjBI0giWei2 + fPXpp7+94II/3n33lzGOJT7ewRItv7jnnkPdbiwqsHB3mYQ+HSCkmDDWnim6ZgChwS4BHQn+IMuijOmx + sWwKqhpdeOGFJPJTVSptNsWf7rxTlYy4xOE4T9NE7SSpCENiCWpnFOig1vH4pqb5vb3zW5pnhUMzdR1q + D45cCkFgxa5xOveAWSMPIWuQo0gc7DRxX8MxZQCDL2q8DGqZbf2NS/YKQFurqaAQXqlF2lrur5KwDkRJ + VTFHAoSDE5GxCJG/x0Ga+7WsnEF4x3LOv2IaLCiIMBNaPJWx5KArWM3EsdnpIsRFi4tQStgel+GXFpNV + Et41s01hQT4ZA1b6xOI+NI9hkyRnQynT4TQlHIgujIBAVwAiaK2/sDlS2RmpHhOpGRep64nWT47U9Ubq + pkbrp0Ubphc0zyxsnVU0cnZR2+yikTMLR84sbptZPHJGQXNvtH5ipHY8WBis7BKe0jI8pSNwqAosLMYu + rPUUQCXFQVoKa0Z6Rw0slPRRh8opjBVp6k+ul3UKh+TD8q2ksAhp6UzPxlst4CIrf0Km17Kyv8frgcha + XFzAcCksiKamX6sTxkIbA07PHfk8Xm5NmG5onnkCxeGoEws4ZpfEiXdYaZuxjxEdNMii+Pc6IuElixYR + mTvnnHMQ/MQczJqxmRYRKad+/4oVRArJat/HblfwMwtBL1Xal7TC8nIFhGvXrkWJG2IIMqFZRArTtoQd + 3v3FL06rqkJ0FOuKABtGITXWqdgwwpZXLSv0Gn5FI1vALMTD2g17WkivUYK4o0M1e5999oFzy2KCCGvq + zMvfXXGFKhlxscNB7aQjZE0oSmFAYR0tCzfWyzAkqRrtLtcYl4v+ocrxdNg9lEPCsezz7+z2ztOERxdD + EH1tWK8IwWAFqAwQo/GiippcRZk/TIuBAJV6c/JtYFYWRfKFwMo3+DGIKgkXuVR/EEGNb8Q8pQGiJE22 + jD+jz8Ct5ub64qLCtECo8EyAXyL0FfJiMDllsZqhfSDAFRHWoZ1sCYrhSUgAhECgJIWSwCDpMMTtKoBA + T36zr6g9WD4mXDMhv3FKQcuMohGzC0fOLWiZG22cE2mcW9A8r7B1QdHIBUVtbPOL2ucVtc8FFAtaZxS0 + TMtv7I3U9oRrukPVY0OVo4Plwi70l0KiwUeqjEJ8rWQZ4iBVrJkCpw8H6cA8CrtIWzTLcJulhTLu88Gr + 0SwWp6nNwbRtEkNqSDMRSf+fMX0S5aioFn3c0YdMnMDUtP2T0DY14tgD95ROgRhVgeIf6CzFERmY2uqq + K1oaa1V9GutMGbNflKQknHu1VAoc0bpkyRIEw2Dqo28JTT+tvqUVmEm2z3uvvnpufj45hWS84dbbWVJm + IG1OcLmmhQK9ft/0WMGj4447bkiUuJO15LN//evyMWOU/BsxS6wrshuhzIA6rR6PChOyBjZbVEaElV8K + FQJNI1gIuWak329kU2zZsoXaFCh9415OkU3xm8svV4ow5zkc5E5sttlYFmAfg2ooXDdoGopueK1VJeQm + 2ExSCxScphYg+/TaNNIf+S8EUaTUcIfWyvR5mh1WZXiFX9cmdKIcqP7GIwPJeVQNyxEIGbf/o04X+gMI + AzQSThTWpyOBymnnmnQ7SEar1VwyLAdl2/EBSyCCKnxi6VxcWIi0jZXZAK4mRJi0uJuu4Tn9XWSemeFc + 3BDBTV0MWE/AGYhC44TGAqvFV9TqL+4Ilo8LV0/Kb5xeOGJuyaiFpaOXlI3dsXT0jlXjV3XO2a+ld13p + qB3LOncq6VxW0rm0pHNxyagdikctLGqfX9g6O795RrR+SqRussDCauEjDZbjI8UoHCmMwlKMQtIqSDQU + RqFbGoXQR3U/lBkRKQSSNZFQKLijcUCYKR1ye5exnKmvrwmHeGCiqsOQZ3FafDiCMuBAbxegGRrblrFF + GSYGJWmk8+ZMN4QwVDCDqEzat0uMbFRvdd0gtSumokpiUxrQKq8LzfypPWO72loMr93g0S84rpzK7B6R + kClEtkjHlGkAePbagsGZPT2oPDN94xeFoz985qABSD888kjq4gI/5PNhhxHcolRhj9s1JRLudrkmI7om + PyhxU5CIdMYclbjVdWH9xBF/qNV057JlQhMcVNY0MvDwMYIuo3UH1hh2leLLDAZCpcijHKSqGwkWjo41 + m9oUcI6QI6DCoqGbOphz9KvLL0f15kKX60xdP0HTYMrAHqIrhEkqUY0iR9S3ZCuVWqD8howIpQUK8rEZ + cqD8ScmBwo4hLmjSSrVRToaYxuDJ2sxptPjKDMluDPK09QVpW1pidvLGCN+pxJVUCAWWIMMkfH2J9kqG + 7sIBNUTTRYrOtNJFHE5T6qqrG2vxGgggFJ4krzdhv8UZHvx3woTRE3vGDAWID8mgUFqhdsrkom1GSjtQ + 5CuqCZQ1Bys7QlVjwzU9OD/zm+YUtS0q7dqxvHtF5aRdqqbsVj1lbdWktaMWHrT6kEtn7LK1Zeo+zVPW + l41dWTZmedmYncvGAJNLSzoWFY6Yl980K1I/LVJLpHBiuLqbcwYxCgWVtE04SKVR6MU7CoMUIAz3A6FT + eUcVZUaHO0pOYaw2E25bFSnM2jUKGaSyslylj4T8wYRKB4qXNTR9nPwsoCDJnujVxe2iVouZNiBZapEk + 6emDy1LHWYEin4G1f2V5YThkBj+V4wzlgdnN2HxIEbpYothUsrNBcze/1DhtCiJRc/UoBZZuh4N1Y1h3 + kAOAX3QUqi7TpsHRJyaH5jUJatll72VkI5IAd05Dw4FUQSLihea1NIPG2GwU7KVsL4UgpsWUuIHnBx98 + kMIXuStxA/AAKj/NTX3hnHMAwo26vqfdbgAhBhnQAhBGyaOK5R6oRALVh+ZgoblOU09Li4Lw3XffnSwU + cv6QyFHhSX7Gdezrl19+qct1tsuFoxilbAR3iPbh51QpgAAbDQDYSATkJ35acA6DjzTHmtjGd1EUMCaH + pgxBRos56yMjh8Fwv3Gcn8nXeLNkJlL8aw5HsaWxAZTKtjEiA4rpJfXhvK1yCspgEVxUWNA9djT18LJt + mNXjBLVS2nzqAFWNdfB6HczDBESBK/V5pTd1wGxG1l5pSVEolOZAlS2Wdvked3WO4glmotYm/F/oQNtd + XiRdSGDwFVYHylpC1aMi9d3CBUrYb8SC4vYlpaNXVHTvWt27rm7m+oZ5GxoXHMDWMHf/xrkHjpy/aeTc + gzvmHVLfu3d5964VE9ZUdK8GL8vG7lwyaknhiPkFzXOiDTOj9VMj9ZPz6ycXwampmxCqIlgoI4UkFxaR + SqGAEO8oKfZ4R1VCYX9mvcPpo5Chk+qGqkghKGhIzFh5sHRKfU11ZVlpEqZl/HrM6XISlW1qrIsMj8au + uc1i5WgacMafGGEFBVGEJ6zcYNp9BvuBjUOMWVUhGYMu6HYTHuQlNqteMcGRTgEtT02LbPzGkL8ylMDM + M7WccaS/xbRgUTM4IksRrztsdxDfwu02uqxM2V6qwB51G4Y8IJcwAePHV16JRUgldMrAEpnDITkaE0cS + VYDDHrLopk2jYcuXL7/ssssQ/lYht4zg1tiZA/FSkhCCiin5kRBwjHt8++mnj/J4aAmQDHNHuEbBY1l4 + r8blrPT7wLmEuGIEC4VAnaYp8m2r1zslRvbZvHkzEjmkwHNdyEf8VGJ1Rqtev/56kkmQYD3CbieDkBpV + pHCokhFcnWq6yrzjQbMp5TMePYiohEDZ+K7kQI2iuKqpKvfRiGumHaJZ7JBiVFs8G4goUsoGASE8l5Li + olzYLsMRH6S1tTXVY7s6iecNvkGxvpRinckiRqnhBM5ROBCKC+wpuxBEJOaCuFrcGUDx0Z1tI1uaktYt + iLVSOhxT4b0omTfQdcSh2MqVFWX4zzMFwnA4PKK5iRKqg3uJqzDfGr/HIiJG6CJn2uGm5gNhOW+BgEAy + /6INPfnN0wpb5xa2LS4etXPpmF0quveomry+dvr+DfMObll82Iidjhy5/Ch+tiw5vGH+IXWzNtbPOqhu + xgHVveurJu1ZNWmPyom7lU/YpWzsCjylRW07EDgsaJ1T0DKzoHla6YgZ1R2zixoxDUeHKjsDpSN9RS3e + gkZPfq07Uk1yvZQhFWFC8ihiFqHgjupuvwP10YFaa3SupQHPmF48d87kbtKikiYd+vxe2CXq1Ro5snn6 + tIm1tZWZrCm2t0QYcyKhzlJGXbIbkLrmA9aqLFogMCFpkGlEhLtgbZuQTWBGQcMFqorB8qoxtTHBiVlP + lomHkYH1xlbOf+UkiOAb0yK7AddGQZzUc585QMjcrdj/E6S2GTXiEfl84YUXkJIZwsRB5ZDEGILwwpnN + SPbJBx+cOm7caodjASJn+GpkYKxVkkRaKQVM5DJGPyGLjpCbxSq1yZCSBnAGTDQ0a7jNX7zyyq+feuqF + s866cuLEw9xuyDK0hGx0AckSCOthnTgcpU6nykBQqw1zdrkBhPxJqPPE5GY68vNVNsX8+fNPPvlk6uty + USUKA4OGL2ikffinP71+yy3XjB59vMwFVLnwxEopBD9OqtvgCCXUp5ycSu1MeQWYXRQuGpsqCqjKCJu1 + 0LIwBMWAtIAh7IMLTianD5gCEjK/LM0R1naCOOYSQqaW5h0rN2Ltsv17KThJdlrVJwkpKiLeweo+OZ+I + 0+YHIxVFZUT7zLwbDiRFCkCSnuR4g4HEs4b6GrIPM7qLhDuTGk9MJ+4SgYAP8k4WIWRmPIzUwbM982lJ + URERMdUGJtL8goLa+nqq58LPRN7FX9ocrh1d0DK5uGNu4+TVjZN3Lxm1qqRzt7Kxe1X0bKiecnDdzMMa + 5x/VsuS4EctPaF99UvsuJ7WtPGHEzse1LD26aeER9XM31848qHba/jVT9q3u3bty8h6VPbuVj19dOnpn + FTIs7lhQ3DancMTMohHTi1un5jeSbjE2XN0lKDPFLd78RiE0AxCGSaIoR61GJRSakij8Dt2ngJAwoSE6 + KnRHrXzoF0AO0z7ZzpjRu67Zcc1qKgEIoXUqK0WjUBCyjEAzFhura+uralKHHoWdWlsdCfc/lbQ3wmMT + Eg2p5Q8SnYVVIqZt3LAYDIFC+1jVQ5fTH6YAUEeICLoERAmEsOFKgBBsfGm02drcnq5QuNrhYLoEL81l + g+LsQnOjuC5ebQgUXIsuRieMkyu64x577IGyGoYXwl3ZWV3JjgL8cEjCRKVMLp9f/+xnr9xwwz3r1180 + c+bBZWVkAswB8yTjAwAQ9R80TRSJhUSan6+UuJcuXUqVWkRbcmHxoFVNsSR04x648so7dtnluq6us3X9 + xFihRNInVtjtMDbJ4aMSBUAI/VI5J9Vqg0djYKHqYUaaDy0IU7DQyKYYb8qGpOVgIfFCPqJE8N1337X/ + /pc0NXFpoqQQVmEM7Uv6oDRGYcEoYxRzkOvGCC8C4dRGG5QiqNpU9WCFf4YCTurFEFMtWdWDhypDVCpI + pIcZ+AzYKHG+R5/Px9ScECeysx1FmDAmidI/dcrSFmlfVXbgpcsoxCiwyuUGycy3j7soIxhIGlak/K/X + n7peD/oGmFCVlWVIWRk3yJMCNpLdCE3FBIWOYOWRpe40qSoj0rIxLod8AWG+HVCgv3yseLrI8wSdvgJX + sAzBs2BFJymAQGDZuGU1k9d2LtzcPO3gsjH7lo49sHzCIdVTttTPOq5p4Umty05rW3lWx5qzO3bl55lt + q04bueLk1mUnNC8+pnHBkfVzJBbOOKB2+n41U9dX9YKF+EhXlY9fXj5uWdmYxSWdC4raZxeOmF7Q0pvf + NDFSPy5UDWWmzVfcQmK+J1ongBDFtX4glBYhuqNSa013BzyeMIJjIkwogLC/EkX2McK4p4IOxMwZk7q6 + qIU+BJRfMkZb6hrIx0jNn64qL581dQorFCvv1RDuI2wyoZcnEFVZgQoC1WKflwBPF5Nvhc2GrQYekElG + Phm51cvb25d3dJBexsZ/u92ebn+g2e7AdFAUCfNkrdxiCegzQjRVwwHLRIgFA8WjHvkSGY1bt24d2iWY + LHHFDXIHRcxBkuqwhJ65886799rr8qrqM3z+w51OjDAKIeEXneZwKHMQ7KnBGIrdOzfeO2KECrnBaL3n + nntyKc8EL+ZXt932yOLFNwUCZCygu0Y9CqKDVD4iLX1Xu31nu51KFL0OxziHA99si81GmFCRMCN5NkNl + xvA6AoRCNT5WyspcwaPR6Zws5WYopnHMMccQLESS+7aLL75gxx2PkXRZRGGAQPyxIiM+lkypVgOQPwFg + PAFxV1S0YTFgKCLocvqlcqUZ/1IsgIwBzDTH2t9YlZsHNp49tkwdHsYZWFkmDMtxRWzHLPycLKBFeyxY + qHGvp/QoZqbjDITP6J3c3srb1g+0YExRUb4/8/TzZEuBtHMI/FXUPllPGHsKIZiUki75+eHS0qKENgMG + KFqgGfEQITGAx5kOgFj8JYHdQleoxcSAPhHhQF2EA71hINCTXx8oQRStp7B1Ttnonaon7147Y7+6mQfX + TD20cuLhFRO2VPYcWz3lxPo5p7csOadtxYWjdru0a91lXXtcOmq3i9pWnTti+VmtO57esvTk5h2Ob5x/ + dP2cw+vnHFo/Z1P97APrZu5XM23v6im7V03etWry6sqJyyu6l5aOXlg8am5R24zCEVPymydG6saHsAgr + 2hGa8RU1IcyNEjdAKGS4gxRvAgjzRQYF1e0lcbS/MJPDrSxCFSO0ahGmHQEZ7ZB6dclTKcMVWwiapPkg + qoHbPTvva7pzJ/67giX4e7D4sMkUBDJ7MvCVF1RAoM1WqWn1Tr3F6WyT2iLj7Pbdurq+e9VVH73//t/+ + +Mf9JkyYKifrCQ77OJtGCT0qBwEeKp5knjp5oQcDoeEa5bpwHfG4Nuq6qrcOuQMgpBI9uJU7+JnPALL+ + 8Ve/enzz5u8UFIhySG73sR7v/rqT6CC54bMdDhIniA6qGwF4uBdlCmP7Iq0yXVaphYd57rnnPv/889mU + Z/rqq79u2/bchAn36Trl4FFyuUTXIWoSnDsaoWpN21fTVkhIpjFTRN86RjscwDCYRJOqNUelw1mg2ePM + btW9qksVRBnZFAQL2yje29uLGPemgw46YePGQ7q79w4G95aS35iAIm2RTdP2kMmLFIsgd1DZxFxRZQGa + Jb9VCFlt8IBDeMSoVDdQC9SiLxQAxds2gEtsoQh2dmOeo3hhlXhvBmfoVw0V77qoyafgMHNEtH5FLBVo + DGbWiUyy9MctzUV7SOdNYjRLE41EpyxdWaqvMgJ+WZaW/nEKhSBT/9CS0sLippp6tf4Q9OCBtrXqGQFU + /C3J7ajGpG0PVnuyOJRakUgTUPYJLcSkd3iQa8Hx6M2v85fCCEUCjeT3ZRXdu9fNPLB50ZaWpZh3p9TP + PbV2xmnVU86smXp2/ezzWxZf2rb6O117XTd2vxvG7ntd17qr2ldfOmKnC1qWntu8+MzmHU5tXHBiw9xj + 6+dsaQAL526un3Nw3az9a2fsUzt9z5ppu9dMBQtXVkzYsWzMopLOecXtsG/goAKE5FEIvoy/dATqo6Ja + RT4y3NIiHBAjVOUJBWtUio7G6vTG9GWsj7Qs92RNZKYtMTpTs5h4o9lhqBQFs2x0osMUS4XNZdP8Om5m + TVmBRiCwBH68puGobNX1SdHIzML8SS7XhqlTv3/ttZ99+qmBK+/94Q8Hd3UtlO5EEBGiP7mKcOhxpgEh + QGmcXShkG2J2tpDAkKsXNWUrIGwCCMeMUTFCqsNjEQ45EP4dtbPublUUEIVoQmIouewF9mgaOXMGAGB+ + EfvE/OIusIdoGzYxS/TJsfJM+++/P1qbUF1w3mYUxcQWfH2//URhJqdTlYMngf1iu53qfUdpGkn9GKbU + hFoke/XkXXfdqa4OhTOwkHWG8NbyaGwaDwhwImKn0grNNrd6svxGZVNgahN8BcjHVFcvRBSmrg6TlwIX + hiIMwcjdpCgaEEiBYsS+BWM2hoLY94ZT1OztNHBXjCU5P8VtFocrilz+wIDwnovappmTA61cjlYm5IUm + O1YQDuFOuLYrWxJbw06qr62Bq2kxOmilYdnto5I6kmGDIroPBKR+IFFQlN1Fkx0V8PooDEeBCxzdcYDN + 5SieyqYWEJKRlICfwVHJnOHSmEsgCmpujFQ/Sxo0NfbsXxeIBEEkL/1UhMfqwhtJPh9MzqJ2wAmj7YDG + eTBfTu3Y9fzOtZd1rLlyxPIrWxZf2bTwO02Lrm5ddm3HmpvGrL+t+6A7ezbdOW7DrZ27Xzdy+RXNiy9q + Wnhu44KzGuedWj/nxLrZx9XNOqp+9hH1sw+tm3Vw7UwcpPvWTt+rZtoe1b1rKieuKB9PNsWiklHzitpm + FrRMiTYiNNMPhIFyRRylVJMEwkgMCH0Fuof0iX4glHV6VW1CQ3EUo9AUTZD+5SF+0izTeid2j2xtVmNL + LS0zcv0nG0PSP5n+EQ7JwDXCgcq1RZpPRSQKU0o5QpnxRYqYFBAh/teOCeh0zotGtize4YEbbvjjH/5A + dC3OPnvnzTeP7OjAglksLZhp6FLGCumZsVDmGjpqK8oiIl9T1poQakUipSweCKVFCGuUaBa0jqF1jX7w + 0kt319VRgV2hoHAJgj0yJEbGnkLB/pw52RuADd3CVmCzwQ8ima/L758myzOhPQ2v9emnn86iPNM/nn/+ + 0Wj0Po+H4n93adoNmnaB3b6FyohSqxNkAgh3r6x8+NprgdgTVqzALuwlndHlHAt7S0YucVcq9koccWa7 + XWjLKwyFaguLKGaj6jSBheqZjpUFF4HD2RQ9RhRGskOxAqHGkD3J4xOIa9PGRCIjQiGzlzsh81POqtmP + 3v63yZQ9J1LjrDFQMn0juFZCXmiy8xACZGYHlY0daNuothF7rFzZ2TIy60ZKc9KqoSbNPvQHRBeLKjBu + so2yiZxhjUG5VNCYsU2crqMxCdCkDAdE1nK6fYVFmHAfYCyFzUCzU5ODBCORRXbqfhUdL8RfbXaPwx11 + h6r8xSOBQBL7yIWo7NmrZsqm+pnHNC0i8ndx17prxm64dfwBd43bcM+Yfe7pWndP5+73dO5xz5j1351w + 0P2Tjniw96gHJx7+vXH73zVq7U0jd766efFlTQsvaJh/Tv3c0+tnn1Q/+/i6WcfUzTqyduZhNdMOqp6y + AZZp1eR10EcrJqwuH7ezyCkcheLMnMLW6dGGyWFkuGvGCouwsiNQMZKcRX8J+jK1VDSU6tuorA2sxyQs + Qo/N4cKjJ5RlqAVmFGNS/SuqyfsCjJm0j8TKDsaSitDCpAnjy0pYIvd/hso7Ip5xtm8+x9IwIpEWXywF + QsoOE+BE/rXDARVaOULNEDjGbp8ZCh21bNmT991HIjbTPQkDJM8NdlS+++abW9vbcS0yfSM+OYM67zLG + Vj/QLsT/FYbJJqXaZDMYj/EWIfJdUzo7gZkdd9yRHHBkZYaQLPOfv/3t/o6Oq1BO0fWTKRBvtx8uUXCl + REGDIKNsQVAQmGF9oDa+q/q3YMnEhgYVKVy/fv0tt9xCuJEkhIxyPL7+6quXli75vt8PEN5kt19utyvb + FCDcEwj0+S7eY4+//OY3qquvPOQQDLhFft8Ofp/Q4DatM0CpqMOOFoHBIDWAEJdZVWFxbUmp3+6AgQdx + Biyk/Yr40ymfkZSDEbrefEEXlDN3ynUAD67R5R5fXl4bCMT5twc7PJU3zMqrlHAfZiakq3ibrWND1tca + fCC6z8XFhSkcbnF/4r/lpaWjRrZFgvHFXQfP1PI38d48t+4Ke4NunYp6ll5Z5mzkLwRL3G6nnJMs4Ocd + fKQwmJKo0qi7FqkCUixGORhBU1b2EAFB1lz6k1MR0STQm9ZpmctVRGkkYUQm7TGxXBDkxtTUKkExJBak + uyLRosZIaYe/bFx+45ySTiBwn9ppODCPb1xwdsuSS0auuG7U2jvG7ve9CZsennjYDyYd9uTEQ5/sOeTJ + ns0/nHTEU1OOe2bGKc/NOu3ZGac82Xv0I90H3Ne5+61tK65r3fE7LUsubd7hgsaFZ9XPO7Vh7on1s4+r + nbGF+GLV5I2VE/er7Nm7smePigm7lo0jxR7FmcVFbfMKWmdGG6aWtE6v7ZpTWD8hWDkqJIsXAoSB0gZf + ca1PAKGsx6Qk1sgj9ATsbr/d5XP7gl4S350YhU6ny8PLiv9iu0XIqgR+cLpOSfVc6FaYohUVpaApq0Lj + GX8zgoEZjRhGNr4aBqKVo+JQEIckUzxGDxBIIgSOUGZ5YlFA4Pzi4jP32++5hx8m1UxBIHN9CtXmv77x + xsltbVgziC8v1HW4jpD+yT/DdsEuNKgWcaR/M7MjSjxVTtMqS2HevHknnXQS9hY2aEaOxxQBxZcOPPA6 + p5MqSFSOPRkLzGaDHgkKQo80xwWNhDnleFSpAnwnn0ZJWnd4PNNkLfiZM2eSkAD3Mgsl7j/fccfdLhdA + qMxTctghrRzscp01d+6Td91lhtVHLr8cLusyp3MH3UFTVfF67MIaiDyUKgz4Qg67Ku9nBGKVu1KJ4VG2 + XNUsjNhsxdRCgvsjeUB4WVGEYb3CxhfwjxgkPm2S4ukB9gQ7VTq8IZKQMOynJlYrwy8xEAqtauSUkuYy + ZX3mwQfGmRRgw5iuDkj/pqWtcMFZuGL8/dIB+fkRyVPdvkrmVNL22n5CGgAVoLSwCE1UAwgFLEmbOtlC + YXvzkkuTyzBNOntI+rE4Gz+bGuondo+jzTKOaOWWE/cKp4KUpHyhcTeQ48AwrldWWrxwzqyGutoUwwx3 + utmDPbit0tZwajr4UeSPNNeOmFvUMC+/ZceycXtXTyWMB73lgtZlV41cfkv7LveMWnv/mPU/mHjw8xMP + fXHSkT/pPeblKce8PPW4l6ed8PLM016de+7P5l346rwLXp51xvO9x/xg/Mbvd+15Z8eam0euvBYPauuO + F7csPa95hzObFp7SMO/42plHVfdurpx4YEXPfhUT9qqcsDtAWC6AcEcU14pGzs1vmhGunVzbOW9kz+Jo + zdhAOeKlI4PlrVT0DZTW+4qqvZiDokJvIbrbTlGqXpXn9XoDkZFt7S0trbrLA1MmFAqXl5VTVDcD0e3U + vnU6kdXHuLGj5sxCYCt+3WfhJclplyzmFOuHmG1BhYJM7sppBgKNlBTQ+WVl527c+NIzzzC5k8wODmGT + AYFpCwH+5ec/P6W5eYPLvavLTXyLGusYGWBhnF1o5JapxijbFLBR6RP4Hnvq65W9RQ0mNFyA4SEBwn++ + 8cYd4TABOVDnTLv9OJvtAJsNMU9sQUwi2DHAgKoFb+QnqEw4lSRAC1lrkKUuav7RyFh5B9I8brjhBnLy + MjUKP/vrXx9tbzdK9UIZvWzq1Icvu+yN11+nrLwZzn/93HP7BIMEDoFDMgvxYeLApMGtdq3F7y9zOXmO + NNUIE5rmTdG9uNJCHo8fC0DatYoGbCjCYP6yCUyV5eNxdyiHcIGuh+x27lpBbOoUiExHvHRjiFwx60M3 + 00sM3h+LoaqiHHtOQQ6XxucZDoUMKiPTAkiWIrFKnTNhIIOzoXcRR3aLzTPb26JgI44cxG9I7bXiVEzR + CRn1JEXjEFykJoayYo1P3PlFwwRSpjf3AXWgKC6VntsUnqocFkm0h7b1jB+zdvVyHlyK2xfVDpLBuZDM + RiZGhAPdoTpvPol60wqadh4584i2hSc3zDu9ZdllI1fc2L7L3aN2e7Bzjx907fXs2PU/nn/M24tP+vOk + w16ffNQbU49/a/qJv5p56q9mn/nWvPN/teCit+Zf/Prc816dfvILk454YtyG+zv32Naxy61tq64fufKq + kSsvH7nyopErzm3d8YymhScQJqzqPaSy54Dy7n0quveCg1PRvaZ8/IrysTuWdC4qaJmNVFuociKypcGy + 0YHSDrLpA+huS61RRN08+RUe9NVkKn3MHBR8UYDQ4w/V1NYXFBZjDsIXtQujkDwKKvRaXtawfiF0m2Lk + 8fDINWQlkuPotPT2KqXaYECWL8k+1pL2WsocVHxC5k0UGpS7TPEhCR0trqu75OijX3n+eWUFKgik5JB1 + p987L798Vlvbvi7XKkl6FDlwMSzE2WhwZ8wybAYQUolQ5RGOLSxUQLjffvvdcccdJPxlLeBihpPXTzpJ + KUqfJRWlD7XZ1slCE9NkXFCgIAaTxABlCBrJcColgP8KEmaskZRfmDp+vGrn1q1bH3vsMdLS09Y5irNW + 3zjpJMUavXf27Dfuuuvt3/6WFHtQEPvbvOfH7723pbwcYufusjbTCod9gVMnubDNZqu3a0UylUJRZpTF + NgAImaBdnvxA0IObJJYYGo5ppBmKMIQbwT8crfyJs6GD11xenu/zDWbHpB1mCXcQ4CGqo/e/orxW9fXV + yMF/E+9XrEGsbgFCqo2qLuIdF9wKU4fRPKZ+I1dPgpYIyMXdkZYnivHk4hyKwwZFwUvh94trgIyFxbdK + 4LqQSdku3CENssTziWiAxCdumVpLTD4oO8JKNTeMvqmuKp/QPZrUwLQPXekkmy1L0R4hbSMsxVw+jBAa + xnSdjc9BdIDD4fJiTkE8CVWNRtWssHXnoo69xu903hFXvr7wsEfb19zRte7B0Xs/OXa/F8cf8Gr3Qa+P + O+DN8fv/et4xf59+2DsTDvnt5C3/N3Xr2zNO/sPsM/4w97w/LLj47QWX/n7ehW/OOvNnU455ofugx0fv + eX/7mrtGrrxl5Irr21Ze1bb6ivZdLmlfdf6Inc9o3uGE+tlbqqduquzZv6pnv5bpB6K4RoCwauLKuskr + KsYszm+cEaqeHCwb7y/p8hV3+IrbkPMmccIHX5TavNFKV7jMKYoRqjx6Kbct1GSoR+ghfbA/OijIojLK + JCvUZ5BHqNZBOS5Vcnm6ccfi22wb2cxwHMJzDj6VmIxUtjXCaXa7IlAQNAIFFzQ1XXzssS89/7yKBWYB + gcbE/c5LL53a2Eg6GowPMxbG8UgNu1ABs7K3lLLMKL9f5a2vWrWKqrwYW/BlcjcKfzB16jUyXe8caQ5S + chanKLot46VXsEawhDTETjGDDFWwAUkCcvUARlKZBtYMndYtpeD4rFmzBiVuCK5I1aSo7TDYZ/vP1157 + euHC3996K6Wg+CuyZyRjcJI4ouxXX3xxaW8veX4bHA62g/Oju0XCU2y2LlRvdJ1VPehlVuI2P3plvgg5 + XiMqHNOJjVOE4b9KNUbcpsOB/DMBJTMZNZuZKNYUpjOqtBsTJS8fkPNNJguphmTkAwQREVJJyuYfnndV + uPgI8yS3oviTFHaJX/WLCKLXZ06TT+v34g4IEFJ3EJjB8osrrK2MVzAotcHw7ZlF1QOR8C8C5WKKd7hI + P4dsEqnpKm6fXdGzum7GxsYFxzcvvWDiPvcsPfHlKZtf7D7oJxMPfW3ykb+Zcsyfphz7bu9Rf+3Z/Ndx + B7wzdr8/j9v/TxM2vdO75S/Ttr475/T35p3zt/kX/GXBJX8SWHjBb2ee/POezc+OWf9ox67fbVt558gV + t4xcfp0EwsvbVl00ciUW4WkCCOduqZm2qXLS/vVT9h8588C6XmKEKysn7FTVvaykYx5ao8HKnkDZWH9J + 50AUhCxahbIaKEiOv2CKxsrTkzUhUNDpQRBcqsmIqrwi9okhqDZrsechG7/0M0uejLQekl2b8yA4m3DA + 8VBlfTFLERTpHkhsF5ujg37qUdjtqnDd5Lq6o/bd98HvfQ+8wabBFjEcoVln7/3fM8+cUFWFBZPQLjSz + EI0UbICQVQBNwkYYqetTZU79nDlzTjnlFBTIAGbrVmnCZlMX93vNzfhFz8Ei1LQjjUp7kh6C8xaDFY9o + IQ9CpncoCDRCYoYlrbLUSx2OOhIraafM9OBz1FFH4cVFHzwzJe6vv1YQqD4Y3xyesP7ww4ceqmRfSLff + 6POu0HW0sCnY2+pwlNv6k/xYWxhtjsNC89Mn7QhRJhIChDsamSGXC67NYFEYdaohfKu+bTNmRhOBoqKk + yMkjYZz0uRzvkZe3KL8gGmJhE/+Rs02Cuki88sbvsyDcKaeoMI4tRUb7WyVEWaVTrahI1DrNqCeHfGd6 + gBnS6HlhFWObUlTAHXCHygLlbei2VE3epXnJYaPWnjX+gOsnHvr9SUc8OemIn0w88vXpW/+48Mx/zjvz + 37PP/HTuuV/OPuur6Sd90XvUf3o2f9x90EcTNn048bAPe4/6YPrxH8w785/zz/tw3vl/m3vBO4sv/vOK + y/86+4Rfjt3/qc49Hm7f5T6AsG3lLbhG21dd1bby0pErzm9ddkbzohMb5h0NZbR6yoGVE/GLrqvo3q1i + /KqK7p3Lxy0hfbCwdUakbhK17ANlXf6Sdl/xCK9Mole2oFSTKZa2YNThDjtcsuKEyJcAAt1mFBSCKNIc + FBDYvw4Yum7eHvROArCCkmNypGR9Zdws3EeywwHa8rKSwkLgI82HAQ19lHGZ8G00+0WBXICwyu9fOmvW + YZs3X3DBBXffffdPf/pTPKJUQsjIpkkGlr9/8skTqquxC+HOqHghHEUYGdiFQE4cFiotGwGEmqYicBRR + VACDgAsaKHgLcyxA8dl7790rsybOIINe+kVVpT0kxBTrBN+goEfizxkYElOsE6W8I4xpaTZV+HyNfn8z + gWSUuOWHWhm5K3HTmYMLM6kefu3mm5FAI9ljo90OwYdIIakOpGzi0VUQrkpSJARCsUyWm4BzME+4VKBa + i8pZ7U2NY0a0EtpSKxKVURO3CEg37iz9nStA35cSZZYDGJZO/E3sxDuIqgvUOd6vhKYabxwvHqJoObZG + uBNJO05Y4ZZ4rWd7OqNh/eA2JL6Y43I8mQc14e3QSOKLqGuDgnBureeP5bhKSNgYTATKVhQXFSgDQKjE + OJwOp1/3FXrzm0LVE4tH7VQ386D2Xc6acMitM055Yv6Fv1h46R/mX/TenLM/mnnqJ/PP+nrHy/oWX9G3 + w5V9i68RP+df2Dfr9L5pW7/uPfqryVs+6z3q0ynHfDx160czT/loztkfzj3vvTnnvDPv7D/MOeXXEw/7 + 6dj9BBCO2vW7HWvu6tj11o4117fv8p2Ryy9qWXJWw9yTamccXT0FPZqNFRP2LR+7BzrdJaNXwJEpG7uk + pGt+Udus/CZqMHUHK0YHyjr8xVJKRnlERTFeVLaVsigFCKnEi46azy4hUNZdUsqiwhbsr7vU7xRVHu9c + fDcDuxnpQpQdRL4Ovm9Nz2KpZb1UvQLxZK8Qf+IFSFvDRfkEYroJCU5mACHTJX5RooM1Pt/USZOQGiEH + AJEUVQh+SJyQau7+v6efxi4ECw270IyF5lx7RUVRtEwhLkOYkEpMU6cCMCtXrrzyyispCp9p0nocQn/+ + 4Yf3NjRcpuunwxfVtE02G/njMDDJmUNBhpw8sJkGGKRWYzSJXkWWSb5nRjgzqjvKnE68uBSmMJS4Dz30 + 0NyVuJMtLP78/PNnksqi6xSK2iCduqS9j7PZaDy0F4BQNX4wX2awaagU9RQoFufnlxUWYmgY4GcYwUP3 + MuXBk5w/d0ZXRztFuNKWJsgaS2I+saxPkPRAZtuyspKqqvJk1o8IteRGCbHQ6MQPRKpyinykrD8Uzi0q + wBeTPv9PXQKDq7GhrqmhLiMFSsxWei8ju3PA0E3SvegboAXt9wulb+EMxRfqjXgitf6SMZFawGZd1eRj + WpZdAZ9l2omvLLjknSXXfLLk6q8WXtY39xwBeLPP6ltwSd/S6/tW3t23+nt9q+7rW35H35JrJRye0Tf9 + xL5px3817YTPZpzyyewzP5577j/mnv/+nHP+PPPU30457rWJh/5o3AFPjd77oa5193XucWfXHreM2u1a + zMHmJefUzTqxqveoigmby8cfWDpmn5Ku3Us6VheN3Klw5OKikQuL2+YWjZgpytNTm74C5g6CasQFG30F + daCgKElPskS42BUs0P0GR7QfBY3cebOgmnyb1YwlB8IQDkXWWaUl/UwZUlkzXcuwpiuIUFnov+w0iJsE + lX+P6ZIwGMEw/KIdsdJCe+21F7XgUbgmTDUkzBQ1of/m0UePKylRWBhnFzJ9K7tQVSpQ+QlhUcJC8GXa + ScyPFYWHivLEE08QucypYV9//f1RowwgPNhmo9QfRQcJEGJUKSwx6vwNppwoo8roQJrKEpQOhGo7JhpV + 5ZlQ4r7wwgtJfMxFiVsZhdxpXEz0i08/vWr06C1KDhQRHAWEgyzCwUAo9CE9WIDb7TDjjUn2xfqUmmoF + ZzoLVMxxYzory8tIakpmZGSx1oybKAmxK6DilrE+MwoHpr3lmGxY2h3/mzsg6ZIpqUTMVNF8cuGtJ5vx + 0IHAuO6VFfyS2vrqEIvxnbgeBHdDFMGADJnoY0QEMZLIK/AUVFHqPb8ZrZa1pV1HVPac1zD39o41z0zY + 9NsZp/xr/oVfA4Eg39xzBQrOPK1vztl9i67oW35X3+4/6Nv7xb71P+7b69m+tY/2rbirb4fvyN1OYzdc + pp/NO+/f8y/4aN4F780990+zTv/11K0/n3TEi90H/3DcfhBt7hm9122de9zQvvpyBEjrZp5UMeHI0tEH + l4zaUNy+Z9HI3QpHrMhvWlo6YmnT+NU1nUvyqUFY2xOqHBssHxUsawuhplbY4InKuoPRck+k1B0ucoUK + nDEUFEFBYQsK+Riy5qW4toj7x2rwqj4wAaG5o3DFKBmF/8rApFE8v0zf7UzhNqNbU/O4cu7BF1UlcHFC + Tm5vV849DJp77703FxXphNbMW/fff1xZWTIfKXahquwDCClyP+lrWFpkfE+qqFAN23PPPW+++ea33nor + xzr1z+6+uwJC8uiVRQgQKouQtAFlVBmpAoOX2GaTWhTlkPRR1dTekSNVUzdu3IiT+Te/+U12TQX88EvD + lCETgxWJWUngPx9+eFVPDxn3RF4Rxd7RZpsuya6kA0IqjyR3jeLNw6eXWH7atIy0aFKYaRqwQMP+kMeV + YLUnlPNM2bdpB6qiblpMME82IcpsNjFd8tZb99elbVvqHSTR1J3dFG/l0hJCKAFogXtpy+NZA4RpTysZ + o/24peZQZsu4ShdpTxK3ChFeE4lVwrubTpo8o4kOxbZwMJR8LhV15CFSegsrovVdpaPnV/fuVTfzmPrZ + FzbMv711x6c6d39rwkEfTt365ewz++ad37fg4r4FFwmEAwWnn9w3+wzhDl11T9+6p/s2/Lxv41t9B77R + t+/LAhd3vq1vEYbjuViNX8899/N5F/x73gUfzjvv3dln/t/0k16fcsxLk454dsKmx8Yf8N0x+9zRtecN + HbteMWJHcPfkqklbSkcfVNS2T2HrHgUtu+Q37ZzfuDhSN698xA6jJq2pGjEPakygpNMvCKItkfKR4ZJm + Ci0hq+1GTTQkITAQdfrDujfAfREUtMt8eaEd0w9+MhyYAvzMzwY/xsiR6FZaGEAZPfPh2RnURDBiWN/e + wQYNQAj1cWw4rJyQqEifc845zz33XBaCYalpNW/ef/8xRUUGFpJTYfaRwtrHEFQMRoAQkQ8UokXDvN7p + kybRsNmzZ5922mnPPPMMSY25GIW/v+02YoRoWx/rcBgxQqrvkldOCh2QrLLxFFMmztFuxNiUd1RFNKlL + rIzC0YGAUuLGz4waThZ9aIZAiKOQbpAw5QN96f233/7Zd75zTXf3Vq/3IIeD8kzUyyW6iRYMifC1MimQ + DlSs0cEWIbag0hOxOHLVFKnq4ECIMB/IjCy9W/2LS+YmqvnEGXnilz4/8srN9fU+aZ9xQqDCusFhsZ3Z + 7ZbRFMwlFJUkxbWYYSidkWNOeorzc3X1LOL2MZBM9XBGvcH+caw6/pujzaAWMTzlivJSss7i7UWTsh1/ + krQjqwNSkXkS3KDoAmgaHk+0ONrQXjVpYeuy/bvWnT5u/5vG7//IuA0vjT/wD5OO+NeMk78G/4C0xVf3 + Lbuhb8eb+5bd1G/tzTilb86Zfauu79vtu317/LBvv1f6Dvhl3/6/EKbhrg/17XRL36LLhY903nl98y/4 + bP4F/5x77nuzTn972olvkFw/+cjnJh32RM/mB7sPvnvcATeP3vvqjl0vbFl2Wt3sYyonbirp2geTtKB1 + VUHzjtHGRdGGOZHa6eGqyaGKCf7iTl/hSG9+iyfaIGS+C2rdoXKnn3BgoUwTjDi9IZ2kX3IkXAICSZCQ + ZWdhAwlGjFCNMcn6pnn0dB1pMayP1FBmvZNjMDmjcZbFznLVgwyW1cGRxSUYSnh46U6MHkyfiJzEicZR + UGJaS4syaMjbu+2227IQDEvLL/3lPfdsiUQMLJxhwkKlO4NNAwqqwoc0DKVT8hqnNDWphhHFpGEYhVR1 + z5o++vHbb99QWEg2/bG6fpim7WWzLZWyagacKC2xhHCilhEGdxSrmrEF/BhG4eRYU/fdd1+a+uabb1ps + KhDIHWEFsj8+VWhB3CaZGBQ7fP4HP3j0lFOuHzcOHRzaDGWUDtyF8kzSL4pTV0G4ovkoCM+R5KmI0ACn + 1+ul9IFYiZvGpKQkpxmi4GJNacXS+XOXLJoDi0EZHMS4MwVCGoHIZ6ZTfOr3IkO8yBOFSwvzU6eT0yEk + po9safZ705tiWby2CQ9BmbqloQGOCPYfwctMc/XEVJAz8iVsGL2BINfgSCrLBfxzBpzn/lgFlusudzg/ + XNtSOXF22+r9J225aN75Dy255rUdb/zrsus/XXrdV8tu7FuxrW/NA8LVufvjwshb91TfXs/17fFU3+qH + +3a8VaDjokv6drq2b/ntfWse7NvzGQGBe0rX6Mp7+jgcIJx3Ae7Tz2ed+dHM096ddsLvpxz9y2lHv9p7 + +PPYghM23d+z+Z6eQ24dv/HaMftc0rHrGSOWHd805/DqyRvKxq4t6VhRNGJJQcuC/MaZkbrecPWEQNlo + b3GbgMBIvTtc7QpWugJlTl+R7s3v19F2UVBCmYAeDStQdwr86y8oIbMD+7M/41bp/Y8i5iBNMspYfZCZ + YIVsMlTDNIvzpLmHLM446BD8K9FAUElf9E/iNht4Q6G7Xp9vhrS9Zs2aRbqCEgzLNDc8LRa+ft99x1dV + 7a002CSPVGlzwyNVWIhzEjjEMqOugqrz0O3zTZfy1qphTz75JHUEyTHIOqfwmfXrySOEfrnZbiePkEgb + 3EvlYFTcSzNfxhyAVkwZlYqn3Mv0obJflWE9GtG1WB+eeuqp9KGVpnIjsGFxgSoIxARUEPjMY49976ij + rmlvB7ZPidXLxSlKkcLlmiYE4aQuNvJ1+EVVsz15NqcUGczIOpDGwfaEWv4rqBcS8YRv3yKlXsk8SkuR + M/g83lHtIyjnSaZ2diOXc5UUwNNE51zcTQr5MfP5+31FA36V3fX7j8KilXXSU2E/d41WWWVFeTKqZ39y + Av0J4yorxqxYhA08EPLR2FGjigvQVA9UVpRmVORPPSNiqCL1PkbTM9uXOXVZkoOlYZ3lKl86n10mg1W4 + QnVkNUtrSkf3ti7bc+KhZy+89KHV3/+/vV/8dP/X+jb+qu+g3/Qd/Pu+Q9/pO/LvfVs+7Dvivb7Nf+o7 + 5A/iN4e/33f8P/qu/2ffmX8S4LfTrYIpgxd0l/v7dn9CYOTax8R3QZm5pm/+xVBmPp+69e+TjvhDz+Y3 + uw96eeLGH03f/GLPgY+O3e+ecQfcPn7jjd0brxqz74Wjdj+tY8XWziVHt83dVDt5j7Ixy4vbFxW2zM5v + nBatnxiqJhxIsnyrJ79BQmCFy1/iDhS7fAXkRdgl/rk8QV8wrFRDB1QWlJIIsNnYUiwgeGUTLkG2PxDp + AU/lGhKFvvzxhb6sjwYeEjkLua9xEl1RvNrWW5J6TxJ1yU/y8QLEstcrHPpIf4BkuAl2+6yaGmV7UQXw + uuuuowpgprnhaYFQcGceewwsNMcLwUJDgw0XH3DIxhflHcVanRqTW0PJ7Prrr4c+mkvD/v7qq5f7/RhY + BNsO0jR8jMiVoX2jMiiEjxHpL8SiTNXVFZ3SgECV6aHU6bAIgW3sV9g9qNNNrq1VfUhJ4bSia4oRQyiR + xE1EDAgr0uc/+clPgMAHjj/++q4uIJBwJhUKRcoEVSmkCbuKQlGaRir9aBnaRBCO7hKEI4SQ/IGQx5sp + EGJSoLUyOLAUDPh5rywOPzyo+eEIiXTGCCReFFeRLqNhjJ51YQS9B4GsKginptEUb4PgBG3fTbw4xBpo + VdpbUAGzhM1LgKyD9kuxhMUMKi8pUYJtqt6BupCakSzGQTgAzp1ZmJQzEH9NlmUx+Ea4XFzlKTGxUvIF + p24giAVP2/xe3Gd+fpvRY/pmdmYokj+marcJZyhpOMEiZKmrJi3rWnfcrNO3Lb/rV3u/8Cngd/hf+476 + Z99xn/ed1Nd3el/fuX19F8iffD/hq77jv+w76Wvxp1v6+j7q67vr674Nb4rQ4K4P9615qG83aTXu8YO+ + /Z/u2+fxvuW3SSC86KsZJ3/Yc+jvx+7zs651z4/a7Qdduz3Ytdu9o3a7pXPddaP3vnLMPheP3pva9Ce0 + 7nh40/wDG2esr5m4S9noJRSUKGiZFm2YGK6lmsSoQBmkUEGHwQtK4UMS5D3+wlCk1BuIirxAUYPH4/Mj + n+2XGREqNV6NS2H8idUqQJhyFRVnc2fzaIgvs6bLj2CNZPMBCIkzp33fMj018Ix3V3DAhmJwsqbGnaJL + 7qAR4qp0udsCwVancwzeUbd7Zne3msepYP7www9nnBtuBQn7+n798MPHFBev1/VVDn0HXVf5hUqbmxwG + hC6V6FcFiQEeN2ZWD5HCCRNUw44++uiHHnqIHI/sqCiqgU+uX09OPZ5G0IW6EzvZbGSmYxTCHYUygy8v + lGdThY3MEmsC/7B1EO+Q0jPIopJWjykGDiHsIigzJNcX5s+cNFE1NYXomgGBqARgecNOQsqAJM7nnnji + wVNOuam7+wKnk2RHzFY4ooegI6NpGK9kPe4MCur6dIeD1uIUBbnpLkYtZhdtC8qc1oxW3QxaeOfkYOEO + jRufeLfSSm4ah8CSGMLygcI9K0p4bqe5DaivluRF4hA6QMGS8vtRCbakoHBweCmGRqneyMGvc9xvhPvY + VJuJq+BJjltP0KsImQ4GPOZ0FIyt82uclIpPwpm0MqvI2JBKkBnwQaKalbEIA9s0r9Pjc3mzqFtHP1N3 + nshO6pYAs5DwM7Vc1TlVzVdJ79EdrpA7Uo84Z3XvPl17Xjz33BfXPPDPDT/rO+RtgYKH/02YgMd91nda + X9+F1Gzp6/tOX98lfX1n9Qn8O0H+PLWv75q+vrvlL4/+d9/mP/RxuHCHPi4MxL0e7Tv2Z32bnu1beZcI + KC645OOpx789bv9XOtb8sHXH7zXvcHvTwmubFl7WvOTCkTuf3bb6tPbVx7ev2NK6+KC6GesqelagHVo0 + cnZB85Row4Rw7ehQZVuwrMVXhLopGjGlFFHyhosiBWU+f9TpDni8QUSEYhQYgqZmCsz27pRMqW+E6cJA + Acnws8tQ4oCgNKOEQIXFtZuVQWl9H6qVMkMF/EJhz+KW4uTFhYWtjY2CUy6NG+UdzafaQ56tTtPwjk6i + BmxJiZrEyQ2nNDypFBgruZBTkiGj4M6AhaacCuUjBQuJeOGiZH4HCJs87ja3qwujsLxcNWynnXaiQuGL + L74InSdrB+k/f/vbqysrKfVwKIpldrtBPMHT2KRp1Q6HxMLtYmPYf7zlmFwC/+x2pJFJwSTritx/gnNK + vRogJLm+O+CfHjOsd9llF0TXXn31VbMmjoJAMjX5JY7T3/3ud7/85S8puPjCM888fPrpt/T0XOxynS3r + QyEis5lN0zZKBZxdNG2pps3RtF5NG22zGSgIEhtF6lNnECYbG9Z1BlOYPlZGtaX1nA3FLzxE/YqXilVh + cYlpbp76rtxxFg/P6BY4p3AtmqYnqXpRWliQXvVCWYRZ+wkHt1Mqy6RRtEnMNZHWtuof3LZBd8DnzHhB + jy+ttrIKfkOKfiZ75+CNe+23z1oRftZ1DHfrDyVmBUDf8unecm/huPzmFTXTTxy913dnn/X26vu+2vel + voN+1XfwbwXPBbbL/r8UiIjld35f3+USBbEIT/yyb8s/+o4AJj/o2/q5MBDPlBt4eexnAkT3+YmIC8Id + Bf92u69vFSh405eLrvznrDP/r/eIV0ave7xl6Z31s6+pmXYRFeqrp5xApnz9nMMb529qmr9//cw9qiat + KO1aWDhihjABRUHBjmAFtSMa/UUkBVI4gvJJRAFJive7vIxu1Jy8Ri684n/KOV4MjbjABh0l1Fr7UWko + TKK0A10MbkGDHoC9LOjqqqusMJLTnj/tDma0ExEpUY1T6HAo11yKTZE41GY+ifmKDD4Gq4i1xLLCRV0e + adBUYXvJSq0zKNMqCwHy2bx5M3ouzNS52F4pTMQ3vvvdowsLlY9UxQuVXUisDncflhkbEthweagJNQE5 + sVjDKAoPFQX8wEGaNUi/ddNNZzudyijcy24nOZ08CopGjdK0ZmY0ST8BY4BDQ40zSrqVxL+WwsKGYBB3 + KBuNBLlpcK3NBneU5PrRuj5t9GjVh1u2bEF07e2330Y1DTqMyov46KOPQHGUtWEkAYGA+mOXXnrrlCmX + uFzYqUAgrQKhD7LbD9S0vWVxjDU+z5qC/Lke93ib6KImU4kMAwUNpmvaYZbdDqxKiUuZ69Nmdx5RjN6P + 2H1iw5V30Ofx4Qnsn51FmcP0omUJ8TLR1N8//Vqfha3fI+dk6khIvFQtGY6LquYBM5EIHooMfAHGQoHu + VW0mAOXR3VQ9tH7Lak+mFGlTppqjmT+XLpk3ZnQHPoam+nrSSa23VjhxHS6HhyLyI0PVC8vGHNq69OZJ + h76+8PJPdn1E8jzfEGkPe78gkAyqJ3SYjb8WaAfOgYUAIT+3/F1wQff9ad9+r/Zt/mO/ydgPhP8R0cS9 + n+/b5ft9O8Imvapv4WVfLLiUjMO/zDz9zbmn/PzA6/624PCnaudcXD31jIqe48rHHVY29oDycXtXdK+t + mrhLVQ81BSkoOCVSNz5YMUrkxQtpmGp/YWWoqAr7jywIBxRQ+J9SDgZBJ6GF1m/8DVilCfGWpC56UUsy + 2aJwSBd7g56/WrVxcTyKORKL044tA70MPFNBKSMupQgaKbY4Zaw4UDQaoC5kNgpxrMG2wCiEoknJ8rmx + 3PDFixeff/75L7zwAhkLOWqbJYPD1+66Cx6p4s4sogJwrJYvE31NDGBoGCBNZagp0egMmZ+gvI44SMES + OCZZM0if2LCBSCH1//YlGwEGiuRhEiwUlflcendxYYPXg7UHIrI1BgLN4VCFw1HrdN536617zJ8P7LE1 + gn8SvPmJNUlTR9GNBQWqnTvvvPOll15K2I90CNYTpAbyBVwEAl955RXy7h+/6qo7Fiy4LBQiHHiqrh8n + I5cH2+0EL/HZkuaI2xZezDyPZ04wMF7XMQRr5RJBlchIWCnQPNiErQDxLDX9P+3oVLOt2x2NoONlSfA2 + xSlVQN36PGildSJ9XjhFt+9rTCjW4SduT+sHqqviUqIUYdx98V/6TTLW7ea0Eys3pfbhCQIzqRsji7pn + gIKcFnNWZQ0O98wWd6dI2GQyikQ8UPdFfcUt+U3zKroPblly/cTNr62+7T/7v9p3xLt9J/yn78TP+47+ + V9/Bb/ft9Xzfmvv7Vn9XEF4O+l3f1i+E2XcGZt/XfSd+1LfhVeH2RDtml+8J1ijRxCPe7zv6o77D3xOJ + g4QJV9zdt/gqCKJfzD7rH7PP+OOs09+ccfJPeo96fMEJP1xzxrM9u19TN31r+fhNJZ3ri9rWFI7YqbBV + lE/Kb5oSre8OVXWCfwiEukOwQIn/FYoUCF8Y48/uQhpbJD/A/AQCybjFyxuzVrb3DYOkvraGhWbMLowf + IEJO3e9TRhrPrra6Silu8vgKCqII6wzjc8QetVKFy/qYjtvTDH6yhIaUsoRorjnYnDLJgY3QjXLNKe0V + 86Z+yV/Z4gJaBi4ONhMVEBrJcIZRSGY9eEP8aU5rq5rHsb0ogZRjxkLquOFr27YdGQr180hNWEi4Diop + cFiHg1TmUUDnmVFdbThIAWmUuAmwZaZwbWoNNJXvr1wp6KMyJwHhmx3xPUrp0Uke9+KG2vHRMKhTA7FW + 13urqqZWVTUTujvsMM5xxSmn0CSxsYCIlbRtlYY19ivdOHXUKMOwJr8e+5V0QIMUCjQ+cdNNt++wwyWB + ABAIHitGzCF2O+FAdETx1pIgAYuH4CXYDC+G4hjKb4zT2JAgMApF8TQTcmRCvmBJtFCxDHL8xKFppjhh + vnpC2yGnE0oDJ/UNDrlZZr4i3/EQBim8N7ARwswSmj6SgjvQx5skLy7+JoiNMfGlfXbKHlV2nkHfTXEU + TTKHA+N6bzBAGtOIcU4Okak0afi0wK3ZxyYit9aWZVTXw5HojdbmN06v6NnQuuzKcQf8dP4FH+/5XN+J + /+67oq/vtr6+O/r6rpNRwOu/7jv+vb79ftG34bW+w97tO+nzvnP6+s6THJktEgVhgS69DlNPoN3yO/vW + P9V34E9FssRuj/QryMw5+z/Tjn+vd8tvJh356uQtz00+8tGezdvG7XftqF3Pb97h+J7lp43f4ZjitpXR + hoWR2pnh6knBSlE+11fc7M2vdYcrXIFi3ZNvd4U0p1/O3y4j+d1we7IkDfoCCV/GosKCjrYRqdNv1DOi + /7pGta/bdRXJM/wXznDnqJGVFag9ZlDDK+1wGrCD9J4Pi3ygYZYpbycrdg9cAwLa4Jxmz3d6I1CDbRoM + CDZW/UamuUqzY9nApr4bjjt2U+Isg2sIKA1lMyKq70akkLMxvdZT3I5isxiFgcBMmbFA5QfS2MlYyKL2 + ujXejNjrlZtuOiIQAAtXSLtQ1fLtlGQQHnU9lhYhMYkuk53OmTGAQWvm2muvxbWIwZp1msdnH3308N57 + A0IQUlTRqCUOx1xNm6rZJ+v6OASpNQ0uaKfbNd7vH+N2b1q27OOPoJv1/fLHP57q9/c4HMAzrR2bl9cl + /boj5P4YhRNCISW6hlEIZlOqEBMQUihh1yduv/3WXXa5qKiIvH4coViBQOBhLhfu0P1strVSTZtCwUAg + mf6QYhQEqpLxKttSJTuaea2GSzxuiFMMwedm4f+NhBYye71y2ptJQYp3D7ivtFhonsQhd+CmY1aWwYft + 50l4krRnVgg0+JbUL+l/gyQyeDcrJ0/WWcaxVFDCLFDghAeLOTftaY1zCvoo63AxJYgPBzoJf0KuIVQk + k3rLkP+VX5hbDNyj5wrCUZQTUlyIxEGySszudHQri4sK09TeEpwYt9Nf4i8dU9a5W+v8C9t3eWLS4e+t + vrnv6N/3nfFl3019fT/o63uhr+/pvr77+/oe6ut7irUpsCfjgldLUigbjBiwEHtx31eEiCgUUDRlSIdY + /J2+dff27XGv/M1FfehuTz7yL+MPeK1rz2eoyjtqtzs797i+c49LO9ac2brjMXWzDqyZvOfIqXs1jllR + XD8zXN7tKyQRsNEdqaGuhe4vJP/P7gpqOjO326aRviSL4krlTxn42z4q6GcYTwm7iy5C2prMXfMQHTzC + +Svehbqa6hFNTV632Fmqp/mBQ6kFP2yvOYs4LkPRtJze2tjBNJPFEaRpwyZTnk9Fx++vmGrTonZHPspV + MkbF4FO5BGxglbExJ/Kdn+pP+O6wEtifWVKhowGKhqVohkMFhAMUUiRjUxmFUx2OeYPSAIhsDUlJioQA + +fL11x/q9Ro+UrAQDABawELcpGzN0nM7HmprMDhjYj8tc9OmTRis8C2RIktYt8gKGH/1+ec/veiiM8rL + yVUnS2+Nw7HM4ZhPPWGHo9fhYFkA1LFNdrm27r77B++/r8756ccfHzxx4ly5Gx7dqXl5wCGg1WGzAYSs + JyD49DY3A4SkP8J0veWWW9BK/eEDD9yyceP/R91bwNtRXe/fZ2aO33PdXXNvkhv3QAJxJSTBgrsEDYHg + GtyKFihQrFCKFCgUSmmhxd3d6kYpVIC2FFrO+917zeyzj1yJwPv/HeYTzp0zsmdmz372s9az1jqzqekk + TQGPBf80CzzUdQ9LJveLxwhqJF/MbM1KORoRHRhd27R6iEcsEMhch64iclZDBHPegK/wldgob0LgMGOu + OXhbq/2aM9aTfLJ/OtLPTcBSWVdTU1GGZiHST7nBjXStIVWlXRe8VUAF7poBYR1Hrr6uiPWMgxInLWdZ + pw6g4joUEGY6EWhKRAUjDy/gFCJWKXupuyJDDVgo27ENYn9mWv1EreYkF1UQi0okkalJmXOHVbvRhSbK + k5XDy9u3rB97XPf8u8fs9IfJq/638IL0AU8onedV6fS9GgWf1kD443T6jnT6Zr18PwDFx1GGp9N3aVA8 + 48v0ob9VjsMV31cB8iSXIYPokm+lF17w5cxTPt7k8F+P3+e5Edvf373F9zrmXN4+49y2GSe3zzyibcaB + LcQCTiBH9vyy9mlUCqyoG9PcOrGsckgkWRuOl6uKSNEiVcrMM+CncU/HpaxrpkAy8Y4Y3k1+IjMX4S4N + PhKhYOKhdei98mBM7FH+nmhnMMVulGpbCvywnySSiUjUBKWJ2ZOhTWgf4GeQD0U+sslmRIw68SZhakS+ + d+oF15R86XTddha0+46D0QzXESOm4CLHkXFTEFFsp+JitEU3Ehiuqq7rHTkO4zjj/tx4fE4QsXDCCSdQ + lQKz3noTr8EA0nPf/vbh8bixkQoWYhJESsrbiNWRhoEuINPs2tpZOiHcrFmzCPO46667yOGCCHO9sZDm + /fnll3+0evXapqYDdAIzqCFwSIpwEHFpaelRCxfcceWVhLrbF3Lr2rXbhMPLNIvFhjlT2zBBr5G6qcD2 + hKKiGdOm0UgA+1KkrgcddGRHB9qcQ8NhQJeLPSQWO9h1YYG76+jApa6Lk5IweXUQDf9AoJHtmNTkOUQw + 3yKKPb+ionzw0vx1eGHWcdOCwzFjBHSDAZSBm1xcyPcLRkf1gxEcFt0/yzoN93bblaFSCxMMZnDTmPIW + RNb1O0vQfrW3mEbzbx5WMkaYdbypG23zvvCShjIcYYEYT9Il3bFnhULTMdI4DuYZJtzrYYMbjHZXBwim + YqUdpS2za0cf2jr9pq4Frw/f5rNx+6Q3P0llOzvonfRZX6av1wj3o3T6h+n0nen0ren0TRoF+f7TdPop + LEzp9EsaKe/XvBCOeNy/lSPwgGfTe/1c6UKBw4WXfDxz7S+nHvrU6F3vHrr02vbZ32icfHzd6INJDVox + ZNvyzsXlHbPKWqemGkYnq8gC2hotqkukaouL6yLRYseLgdbal5VriOGWxsOxBEGB65g2Qeo/m57GBAKK + tyEBM+vWS1ToTyql6mn1kZiblqn6Jus4ccud5gT6FHEBCgUU+AGlGOBALHALHAL8QD6BPdSS8DN8TsIw + GFgxuBFdnrMQ9sCvLBgP2X6I62LhZACF3glfpOMaRGQ2Z+DQVuL4aTP1sMsROAVkaEFQe11qxGOE/IpC + KQy6PHP5ZUekUj4vRL/qugYV4Ea9jsPFIm2lbXODEHsSe5566qkoM0EpEZGud8YZmvG3X/3q2WuuuWXl + yiuwZy5efNVee9164olvPPron//0J0Iq33//fRsI33n00ZXFxbtqiy6iU4yZM0IhgkDGYMzUj4OHsklH + x9KlS/dZvnyXnp6tNb6y/W4EL8bjhxUXQ0DxBcICl2idDheLibUfCExQ0t1T9eL7IoLS8ZjbwT/6SShI + tydEwQ5+X7fXZn23lvcIk1o8EueNIx3l8CHdqQTztMImnX7euwFn3Ov0zjJM19ZWU1ovfy97jXzPX2Pu + xyBPao7DrJ9ZeD4rKsCTNGqt740vsB/dAyVngQBHbYJi6sk0FAicKf/qL5IcmIGFIUvJTAf94YnT2fql + 7zBlaifVFTdMrR93QNeC60fu+ObYPf81dq/0hJXpTY9ML7hIZUcjQQyBEIQGYvPEL3hpOn2JDhbkX/4E + DmGK2EiFDoKUeBBZj14GN+Gqd9MHvZTe8+foZf655IpfzT79ySmH3jVm16t6tjyzY+aRjZP2rendrryd + XNjTElXj4mXDoiUdseKm8pq2usbORFG5Yn54rtTL11+1P6Z0Ma41m14P+j5lNhzMvKH/w/bfW1RVP8YI + +5GIW3jjdrLMixFAoDjkjBVUkpJgw8SYKeHYTRr/hkQiE8pLJxSngD3QCCvlRDgQSo1odH5l5cKqqoWV + lYv0shhdYiy2mTbfEf8Hh5tMMSDNmUALsHOo6yJoNIhofEviRAQOCeMsCpPPTsmllW9StwcqCe8cl0pN + SyTmRCNzgzCANWvWQLy+ulAKAzAvf+97R5WV7aV1pEtw13lhpqLAAxF+IASGRy6Qi52NinLECFGjLF++ + /Mwzz4Szvvvuu2DhhvBC0wxSf37+r3+ZPwlYRPBJ8J8NhBRFOm/y5P01g9wjrJIDEIABmClhi+MwKWEZ + k0zOam/fJBrF2jwvHF6kGSQJ0kgWqkinhk8SvLHXRH2BSIR4ZExHmMHQN4TQy/OqLiuds9nU9pYmmYXi + hQBCyGSWgyKG6/TznsClmuoavuoCYaooj7YR9fVyqfh3skkVmjvnkBVCzyRSvp+L6ovfGOiyN8g5lJrI + Bxm8+K4zrQ7Kx9a/4CVzlj4abjYQhLWvLgduwa2C0vn8BvR1l3LWSx52eyX9isGBvsdMThFBINBCQbAQ + +z/FL+midE78UQyaBR+HDmrMPrLOENbXs4NakWalpGlM46Q9KO++2fFvL7r08+VBXmzkLUuuTu/ww/RB + b/nxfwDbKV+kj/lH+ti/pdd+mj76w/RxnyhRzGXp9He0guZGjX94B0/9T/qoD9MHvZ3e8/Evd/7RZ9vd + 9udl17656KJHNjv25nF7XTB8q+M75uzfNHmH2lGLK7o3K2keV1TdEyttiSbrwrEKN5KiWW1t7UOGdMVV + KT1l9jSXoLx9pAlat1SG6wGI679Lfy8Lv4nSdD2yJxRske/81L9BZnPeVeMIFFecYYGSl0soYKPOSAL2 + MGgq0x/RchUVC2qrt2xqOnjmzEsOPfSn117z7D0/fP4nP3n7mWfefe45e3nxJz957NZb77vyyqvWrDlq + 9uztGxvnxeMMuIKLgCJQqhBRGzREamH8TNpe6qZUYIsPhDxqGsbgCyUdXVw8IR7nOCaUAlrzVYdSGIx5 + /c47j6mo2CcS3SWW3Coanw8F1DiBlwI4HOO6XBpKltnx+NxAOIMg5eyzzwYL4YXYSNc70H4wJlx7m8cv + uohoB6oD7hdL7BmJbKkGC2cS7kyCETWnR+8KNYTK02Yeykxt/JzvOGhTwb8ZWg4DzBOwQbK09iAugr4B + BEqAoLZpox92KqnnN3ZkZXmZvJGYTeorazSdyvrQyQdU0gOWg8kCw2ZQFpXNeeBxvMAWvB2Dz6sJNSEt + S352G7k2sn0iBlkP3RrDbw6i5ENgzg2kJXWMEWWqerD25/mX1j/AaJTNOhL+FFw+MtSogwyazxU8kbqV + 66J4WteZPa1kUMILOCkUAvCAvcwSCmEaRbo1M6SchbyDQ6KRFh5WQSuaE2prbWptZWLf36yFG6uCSVTU + SypVP7Rh4goKGM09++2df/Q/AhuO+0f65H+mT/5UQd0R76dP/Ev6tH+oMAnQjqQwxL8T9kf8+xGvptdQ + LOkBcC596G/SJ/wzfdp/06d9kT7u7yqaYu9n0zv+6H/Lb/j7okt/Pe/c52adev9mx900ddXFE/Zc27Nk + /+ap29SOnFsxZAp52lL1lIBojBVXRRIlBDggW8TsIskY4Ov5Yaw8SzguXtX1h6mvf0/uuD2T6mtitR4N + 406hhUW6I32OgFbeVfkuQ5WoUYQImtSUsC5slbWaAmL/ZKDEjCYDJSTs0HnzrjnxxKd/9KOP/vjH//z7 + 34Mflz//978/+v3vn7rjjuuOOmr15Mki4oAvMvhCK+GI+NhEdmErD43v0LgqGX8BS8LYGcdp0qxIZP7w + 4UK8voZQCnO9r9x8M/GFK2PxHaPRpZ6ScU7XVQNxno2FFLouqplpnjcvmZw7frw0b9tttz3rrLOwkeIv + RDvzlbozTTs/fOutsxsaELzAC/d0XQIeFkejyxvqZlSWY2Hm+XZGo7hyecoQ9NE6ixuIzoUw3PCdqTcm + X6bYNgTSQwQCxYgddUJJinKGYU5ZQ6kSOFiyi/XowAPugpdi/JjRjfUYLDamUa7geTlXV1sbQWbmV2aW + mCvJQyY+tr7CpGgbY65swEGIUMybGeSeUINWn1ck8K9yxlCCKlx4EmD27utQHITRAHmBChXAG4JHMi+9 + GevVOKtpWQ5a9/9o1DwmRiq9rIG44BWp7BmBb1KG9YIcgDm6MofqaRn4B+wJCs4OheaEQnP5V39n/ea6 + EPQwCi2FwzkZaET3hK2XSAAi3vq/hPr62rbOjlRtW/WIeUOXnj7tqGeXf+czot1JEypyGIgdKdBu018Q + hf5AryRNDA6/k79IH/rr9D6Ppff8UXr5NarELtXkCR/c/aH0Ho+pfKHb3PL5okv+OvOUNzc94pFJB9w2 + Zo9LR+542vBt1nQv2qtl+lZ1Y2aVd4xL1Q1JlDfFSgj4I9sLNW+JdiCELZB6Dvhu/J/bANVAb28PmpyN + 23KeupJfJ4pMP5OE/YKCJjjB2EJhYFJdyECgTwG1SXPPSZOuXbv27Wef/eyf/xw8+PW15acfffTaz39+ + xYEH7t3ZCSISFwi3w8QK3NLXC8aiiWbVkELAEkcjBeKnx+ILSkq+zlAKc1Evfec7R5eVib9wCREdWpmJ + lwL+RIIxQJr7BtLPKyqaG1SxJ/sa5Skw4aIjJXULlkxkrhviMhzMs7hj221JBEONwD09b3vHWRqPbdtY + P62sBBbe4bodkSgMGx0TUxDuPJinhD960OnRTJ31Ygilb0hSN4FAIwrFAEWyD2qxfOVYlPeGIOVA6Q4q + 2L/oNISFRdSDx0uzpSAKo7XGsMzbxErO0tnRSgPygC33TtRUVQ0dMgSJXVlZKSHJijsFceI5AJMDf/60 + NQ8UC17I4I2Q0mByg8qAgCG6OFmUT9NpJDnBc27vYIYphpqqygrZsZ97nkzE7TSnOkNWaw7n5lZyFER2 + zMmwu4g5FPIH8s0PhRaFQmiYF/MFG0YILFT20k1x1WsLU5me5avHFyYlcnlDQ0O7/pTmZRXIuSjShta3 + d7VNmTdqp7Vzznps+7v/ue8LOtvLvxXnA+3w7T2QTj+XTr+gHX4/0zESrEQmg18QUkikIEXkSYq98GJK + 5qrCuXxZcMF/Zp32x00Of3HcXvcO3+aqIQtOb595eMumezRO3Kpu1JyqnsllrcOLash5XQPzIzwDx6XK + 8KKMBoO56//HtyHAorOzDdfgxr0O5nHYPXJmqQWJIFMjQBiTow+B4TD8QGKuZ5WVHb/99j+//fa///Wv + X0Xqlo9++9u7zj13v64uXFMQRB8OXZeBuCOwwokjikYykeaVkLpCkELGbkUKySKdF0pB8YevNJTCwM/z + 1167pqhI/IVbBlgoQXvo2cTYqJqXTM4bO1Z4Idlw0LgSU0HEOgHsOPY2UD4zIBb+6sc/PjkaJSSfdpII + ZjECHx1izx1WCcQdB5DjXzJKIehlxGElC1/APwJgGOZ5BMICeQQmLmJARczG7c+DPBoo2NTYQGaQ/PFX + 2IA4+fluW8Ys2Cs85CgXg8Vv9PaKJDG37D9AQpAACtLa1MSmZBBsbW4CUSdPHDti+NC+Ckj1zwjzb0X+ + xao1waUIQEqb85GJIaKhoZYiHgXhXN2uPDXpgPMJdWf6kKGas7ANmGcH8CHTzcnwCUrT8ZiNQfJmiPFT + h+4Agbiul+qsRhg5tgqF+A4oQg3Zhi0nkThCd2xxnVGxYEh39/Tp02fPnj1lypTm5ua+pLAqNqKopLxz + zNBlB8+/4OcrX/zXyR8rtQvghwSGQECWa3UUBPpPoiPAwsc0IwQFYYTUkTj9SxUXiPmUcAjKJG3xrfT8 + 8/81+4w/bHY8NXjvHrHi0o7ZxzZM2Ktq6NKyts1LGselansSFc2a+RHtIOmt83XWhbu/9iBgJl0nYdAg + 36SvbjPyKviULOscanK4jsmHBtPGnMPmQ6BSo+jRrVzjChGpHdHo2FTx2Hgcuces8vITdtjhifvvh7ig + 78CON+CAu94b/OP997+/du3u9fUGDpWxVDu927SlFFMtrylNBQVFxcrQzHpSuqgkn9mhFMcffzyuuK+o + KkX+NT512WWHJxLCC5d63gLXFb8apsUJWGl0NMUMsDCRmB/4C+fPn7969eqrr7764YcfprARZlJSz3x1 + 1JD0NFeMG4enkHj8nVyXEYQpM+I6rJ1yb+kAdbFoYzJBEQT+lAX+x03mtosvUKLjsZGVEFOgy0cM9mXV + mR77itIdTE9ep23EbKgShVj8SL6KZYwv/IsBxqRkgucRsZc7ZcyjZn01I9tqWHgrgxwqFEqp4Yo3nTqx + p5vYogLIJFgVcMEMo8rxJmafyQe9DKIHP2czTh8R7ZXaGaYyywx4nweDfwWPM+COXDGzdvA4MxJiZkAw + oT3TvjpUJ3AA6gC8paEQ+IcQeodQiLkdqW4RNi8LqVR/QgqZfY52HUghOErqzNra2okTJmy9fPkOK1bM + nzdvRG9vVSVJebMuGbmMqp1U2lg7csvRu1y55Mo/YN5Ez0JoPGbPuzX48Z2wP4AQcyixEEhAUX5iIEUj + Spo08mXv/2p6LxKKPpDe+e70Vtf+e/55f5hx0jObHH7n+P0u7d3uuI7Ze1H5obx9SlH1MKr9Ueo2HCvm + pL7NM7vL5c/IVEWqshKbMtVUVHW2tH3VmrIBO8Y6baC0cgMl5NNZ+wYnBlunc6tXy4pPl+h4sYXS1WAD + LTrmb2Q0NiWZ2jSRWLPllj+7+24KCVF8AGXHV4qCBlr++OabF65YgWRxQThMP1a+Q13BQFFD5tTWoMzQ + TMthKrAWwthVYLgVSrFixQqpSgHArHfC63UCdQQpq2MxsJAUaMuj0YUgn3578bShYQMLyY+K+XdhLLZw + 6FDhhXwoZ/+Nb3zj7rvvJp+LUEMUNOudlbSfBn/EjW1rw01IC3fSSdFomyltKISb6BxqVgB49kIPEQpo + DKGMKSXJIhXflt3/dA0aVRSFXs67OmfWtAnjR0naKro0XrTBmNf6GS4HMZL6DeJ0A6bA5mg0WMZcoWsA + oflTyU/yQFSOzl59ZfTmhuRwINtLZ98tDKSSL6b/ixLYy9mmkN9QmVnNZuLwy5G9ZNAxQw39FvV1pf0M + LyoHDZm7w9rJIoKDoKnMLbB25u874OODIi9aMGvSRHRm+oC642GWGOM4yhyqnYK4ACGChPHA/4BAevKu + odAejkPO970cd1fXXeG4Sx0XnRcbMxkV+aiKV9ZJtOfOmrXPbrsdvO9+K7beetrUqUM6O6kgaJqKIK+0 + qrm2e1bbzJOmrHpu+fX/XflCeu1/lM6TOD8wD7S7TkdBkBeNAAk4IpmysYLy5YwvlNV05weU8XP6sf+a + fMhvphz4wqYH/mzMTt/u2fLEjrkrWzbdum40lW9H43GMlVR5cTKcKZunDvIb7Ien3NrSyC2i7J15eAim + aivJsT/wJGYwp1HvRXSAnLGDOU7Bbfw0BYP05RM4wVx1wH6zTq0xXFBEMRIdKKGBlPIRRQw2RuQq6DtW + zphx1/XXo2wEBeGCGBi/HhQ04/hTN998cFcXWcTmhsPTwuEJuvrS8EiY6hOi15esNOLORCMBfqM7peWz + IxFjfpSqFJTQ+4qqUuSjzhMXX3xYIoGOdMdYbJkXVrwQX4WoThyH5vlYSGx7c/PsIDE38hlSulBhmErx + JLkmCvCTTz7BBL0R4fA/f//7rXPmkCaGAPk9CRPUilAcmcwwsC0zTHAnTdI7ccTKQj8x+Ee3sZL+5PZl + glxnTJ86auQw3EK8k9R8v+pb5+y3z84mjYg9UhfsukAo7zN1btepY5uB2N4LkxcRG4N/g9jSJNSnnW1t + zQw3BfWE4Bz5Eqsr6Xe5KCL5yUC4AeOL2ay+pgZLnXWQ3Is26CIYY/7N34Ut4QcE20mDVQXBklJq2AqC + BsfJkMWcNfaJ7YfKZkxcwIl8JGYXoK6+rianyrc5Yz+nKPi8pA2Me2PG9Ep9KFGHYq7AHIrTfZaDBIYY + VkUEl4VC24ZC8D/KXu4Zcsj5vtJxD3ApgRLezw3v5nqE/TDPAzIhhbx92P9RvHfX1EweO3bb5ctX7b// + kasO3WvX3RbNnz929JiaGmqUqepCpF9J1Q5vmbLvxH1/suSqT/dB7flB+qTPFOaJKAYuiPOPP4/5JL36 + dypq/sC30ge8oRKH7vV0evu70/PO/2TCyreGLLy3ceLFNb1HVXbvVt6+uKRpSlHNMMye0eLKcLzIJaWc + cvitax/PdDb0OwS22kVRCj6g9TtBSUnJ9E0n93R3Df7dGfyJOCZAuA5lYRhHNq6ZVIggCwOZEEHxCEIE + QZFWLRcUd+Cy9varTjsN7xooiF2REgQyKH/VUo58UHn/nXfOXriQ4O5FhGpEYwQpwvmY3GHowGXFu8J7 + wiJOTaaNqB9R2YCa88vLZ85QyTOXLFkC2Xr88cfB8q/CtVmQfj12wQWHRqN7RyJiI5VMLhksJD2p+AtR + 1pSXzw/kM3Pnzt13332JrLj55psfffRRBKXAIeyQ+ceGG0s///jjH22zDeVzyZRGBMXeWjWKygAXJklh + cAFyM6GAxu0naX3UbEnVuyEdfaa6Vj+G0Lrqms2nTu1saxUK2NrcvHj+7CFdJBQa7EQVdUtXazuF2gf/ + avWxZQYAFDPSWND/0GwfB0TsaG9BXF3w4MBMRVmpLcORI/PO6hyHuGqyoidwH4p1xx5ZlJJWp78wfrt8 + 0BWWJf68gh8b5KghrzXnakOGjnhMqS5tMmogqo9DmXE28zu7NDU1tKgJgU9ZbKss7SfnJCx/8HnSBxxb + 2UBqLSl1qLYDaXOoUoHiEST4FSKIOxCp1y6aBe4bCpHt6CDHOcRxSAG/2qUWireP6+2oSKHK/KDkoyJ7 + Liqa2tGxcPPNoYNHrV597Jo1hx100M4rVmy+6bT2llamTTh/ExXddeP2Hbv3E1vfnF7zJxXejvLzYm3w + BAJRwZAgBiBEJkNQBCmwSY2N+GXmKf+afsz7kw9+aeSOt7fPPLu6d99Uw6J46cRIYogXrXPDpY5K7KnD + 2zfSZ8DbuN7n4ci4rhcvmgvQrvdB1mFHxzKfYEaoqirfKKnR+nxh9EMwARJ4BLEF8JbT1ejjQgRVipZk + 8oSdd374gQdIuEzE9x/+8Afys8ClvmoRRz/WPGItvrtq1Y7R2NJoDKoHhIiZtC0IrgAFGTWVXVcnXZNS + hZgf5wdVKVauXElFQGgWoNI/wQLpzWedLKL5Gz90xhmro1HRzvhYaHgh1JASThoLEcpuGYst6eyUNGx8 + ttpqK7yG559//q233orjkOkIc5EPP/yQuQiIKA+i4IyElVwdG2BWZUueGrtwyXz59P33799uOwpHnKyL + V1A4kHk0cYQqE5UWIHDruId0CdF/WpwvlIzHSlJFoicZ0Beoxt9IzAQthQlh0jYfPalTeESi3n6qV2MW + g4ShybSG3dyxgyMZTSMHNIZNu+fbwwQ8qbWlKUeJnQ1Jate8kcUHtv4nozm+OnFn5DSeI0NMKWpoTpFv + E+IndVUZsMlApgXeuSvlkvPRnWYo14umOPYGxlDKFy18MdjmQ6S5h3ZTMXT7CvPsu6a2cZSJmIErMCZL + e2wcFSAvoBftZyhnBwYokjWqzPUiDUX8oi35y3ABQgRDod21IXRlKHRQKLTKcVY7zhrHOcJxjtT/Uh0a + jCQd/MJAMrOJ686qqVk2duzuW2552AH7n3T0kaccdwzLISv3W7po0YjhvehUvXCkqHpMx6yzF53799Vv + KcEnfkEWrKCSGpsEabgGMYEe97EKB9zi8n9PPezt3u3ua599cePEQ6uGbVPSPC1e3hNJ1LthjHmYURhx + Nxr4rQO6rO+maG1UMZCvQKfSV4twbQ5p7aCYvNoAfVRTYx02gZyXua8wTzXxTKXWYRYW+AVNmKDoYmBR + eATJBYpFkT6364QJN11+OQpGBl9sidARMYduOB3ZQFBh94evvHK3oiLMpEpQmnEZOsT4S6pSFe+oPYVk + qMGCivmRWIXZOuE1iaQJVMDkSFWKviL2clAE7giigCsbQoLBwlVanwkWLtO8cEbgL0Q+g98CLMSjOUen + CV1WUbEoqOVLm3fYYYfDDz/8vPPO+853vkO4IXUWibLARs1Dwd8p8EbEhXwU1H36KStx4gKZcF+uVOoo + 8eW9Bx+8afRoUJAa90chGY1GsSNJOUOstcMDuyi2AUYfGwWFieDvU66y/omJNYLafZhwtAj/qSptKlUm + IIFFEWl0X29FXV31lMnj+i8rrQsw+PwSfKXwQP9YxdGwI+Vkys9vgKFl5ifazCtpO124BNtOEyCQol9i + pMrxBRqIsnmboWUCKzYe6MmC7+SzoMgHEvsgBRHLrCwrKW1raiEQImczczqeJ0xO7NXSbPt05rpsSBNd + A5dvrMcCb9l4lmt6tY5f+JnnwyGPlnGwTcutce8JEcSGvwWimFBoBydEwZO9HIfiXwc6oUNCzmGh0BGh + 0FGOc6zjHOc4x4dCx2s4PCCktgQ46edA6dxEYquurj1mzTpk112PPnTVaccfe+baE8457eRjjzhsx+23 + nTRxYn1dHRAQr+gYvvS8s575HP53ri4Kf+qX6RMJlv8ofcyf02t+owrK7/Lgx0uuen2TI+4attWpDRN2 + Lu/YvKh6KNUnULtgWs1HPrl164tNX+t+6jUfpOsuaNc6bp51OdyZloam7rZOrBe6I4aUkcQ2+CL+6Whp + ZWpc8DZgOqiqqBj8zZW5vKCgCb+rw+OqzaEkSJsGEdxtt5/99KegILXoGHAxhzK2imRjQ8BgwyHQHOGZ + m27au7SU7NJk/yI+HZfhSMfrdFyJbEMvAyIifeQVktK4yvbY1iY0a7fddqMKEjQX1WtfVSlYj2KTDcAS + PoCKuQPrfRUPnHSSwUJfR6qxUOlItZR0Mtm6tZSUfNlc2vKGhgUTJ0qbwW/g8JBDDjnllFOol0tFiB/+ + 8IfAOTXiX3rppTfeeAPDNawdrSkfvlOIEdbLeiBTPnx75PTTr2psPCcSoZAh5ZMOD4cP0t5BUJm5Nnk3 + iBfkpsGq6WqMi3YghPQ9ldVhfcvbaiD0s0VzKLgF0nyV/KWPDzA5buwI+FP/b7/1rsqbW2DS3df7rCLP + 9eXwBYw04g57TJd9NbwZ06WPRsxZFagH+CFgIAhhnzH7e/bLL9wvaLPZEggkAzJRmPC4fHwK1gh2Cnpl + rj2DkXoYJpVdRVm5oXHBxj5yyTPF7SeJzvNRMB+DZU+Fgh7ZljN1v/u5TOsg/uULaPbn8eFOOmpSSzIN + ikjM0KKYOeIRdEIQQUShe2ALdUIHYAgNhVaHnMOd0NEa/05wnJOc0FrHOSUUOlV9d9aEQmyJghRSOJc8 + Sg0NO02adOB22x1x4IFHr1595snHX3j2qReff+Y5Z6496MB9Z8+a1dnRAbWNFJV2zdtvr++9feofVWq0 + U9Ppw/+ogt+XXvP3Wae/NemQe0bueMGQ+QfVj1tY1joyUd5ArhmV7apfNKisKCdH2LoCzNcKgOt1Mq5I + ZZMvlHeQl6wsVWJPxfo6g34dJcKz0Ic5XWtjUz91sOzOqmRbfftgBAWZZ0nKGMa7ctdtDEfaw2HRxSwb + MuSqc8555JFHnnvuOUZSaATmUHjGhlOi9caPvnZ85sYb906lttIWxeleeKLrDg857UGUN0CIiU95Comv + 16EUZHGbO2mS4ApSFMrEU2+9n9K4UCvEsYAKcAKuyISAlRvCie8/9thDAl5IfCHaGTwWfnyhdl0Yaogm + iISl28TjWzc0LApy0ACHpGRDVnrEEUfAay+66KJvf/vbN910E+VzwcUf//jH1A584IEHHnzwQVU4SX8w + qFIE+OdsNmOG1NGliCDlAymfhDcFiZ1KrqYTx+BtRSbDHELoILNZAULhfxoMnMaG+vY2DAeDdfKt1zvl + 7wRNYdToJwF3/sHZxdaU9YVGsiNzTVBWAv66uzp6hzMPxJgJjPlGX7ChPFuVnnNGH3KyrH9Z6cSykVUQ + S/1j0EiOkMMF1a3W1YW0JdmH9hySmoc6wYECZiYbGFCUlsu5cqYLzKRRuOS4/QriX3D5GapnW0Ht02V2 + 988rEOsfQL4oHW+ghM8BBn5ngOIVJpiHkB6IoAqT1x5BnNkiisEWuj/uwFDoUG0IPSoUOkZD4MngnxM6 + 3XHOcJyzXOcs9SV0AnxR77XMdfHEb9fbu9e8eYfuvvtRq1YddeihZ5x43OUXnn3FN7/xrUvPW3vS0dts + s3zUqFGVlZV4WSt7Jo7c+aR5Fzy6/Z2/3+GH7y+86Inx+13VMfvA6uFzUvXDS2taK6rqIhGfTA/Y27lM + fMaDr9414AE3cAOZ0GzgQczuqjALqtc88y8QWF1WOZgSzQO0ZPDTBxqhrE9KylDgY1BQBDJKI4pTMBob + VlwyoigJCu43f/6dt91GMVtQEAAABsQc2o8vaqPD2zodECzcr7QU+YzGQg9ehb8QLMQoCgqyEAnepuPr + JZRiYW2tAOF222132WWXcZn9hFJw1cwDnn766Z/85CegJqBCPANrsDquv1boyy8fOe+81fE4Qk0Ta7+Z + zjsDFI3Vaa/xegLqoqDhurAAs+X2lZXLe3rmT5kya8YMqiMRfb/TTjvh7ySl+IknnkjmbvKpwhSvuuoq + yC4WVCgjsfm3s5x33vXz5p2fTEop+aOAwHD4ENfdR0sMyL6BxYlTi58VMl0W0EFGIrqR7QikH5L9BDXE + xnpz7OP038lzIC1nfJfjMCiDgoNMQBEgkBqSGZgqKyvYEeSj5qbBCrhddXWF2FENDuUDTIAuPi2zICfL + Nmh2FP5mGmCzuj5wK8tWaY4vEJN/D20MK3RXzS6ZJojLVm+cWZn7lPNoa3ZLMiCXfdIM9uYcUO5Cfl9S + LDaIkeDVQB2KPZMg1+Wqx2LhDGELFUUMEHi4tnweGwLqFATC/4DAs5zQOY5znl6+oRdAEbK4H/EVnrtV + RcX2w4fvPX/+ochkDjnk6EMPXXv0UZdfcNa1V1xw/bcvvviCM1buu+emm2xCcD1TBDK5lLb21o6a0TBh + Yd3omWWtvfHyahXerr3dTKLwFeRcgjJ+Ei+0IVbCr+IFyzsm9598coOJX1IvFwRdzRnXBzULvq1f+SUK + IMss3l5EI2oEMtBBUJBIk8ZweGgiMb6oaNUOOzB6MuJjEcXIhm8JeQXm0A0hQOuEauu38VPXX793UZFg + 4WYaC3F0CRZi5WOBFKL8RQFLYjMVShFEryNC6T+U4pOXXvrdo49CjsGVS/TnxhtvhGAxRcBYCpVc72CG + xy+8MAsLqZ2mAypAQVJAsYwJ4FAspQhKBQ6JPNi+rm7brq4tx46dN336FgsWkJttl1122W+//VYxtz3q + qJNOOumMU08977TTLjnyyEtXrLho/PjTo1EMoaemik4uLUG8ShFBTElMjZlZI7pDIGNQUDQykiw0BwUH + PxXLGZcFXfrv9PAe3sZBTpMxWBGVYTsOzMH7GXn6ab+M/sGYnusUsd9hC2DymZYqYCsCt2xzpQYrffgc + PpSPi8G+Gb4okKnX+x/ru0rkxiw7OI6ycBp+ZqG1v7vZMbslPkoZSBM0DBDRanNwl4MNfHJp7k/OHbb/ + NCR4MGMfYxQGiXZHmUYwVIhHcImjPIJYL/ZQtlDcgUoUepgTQggDC8QLeJI2gYJ2ZzvOuU4I5LvAcS5y + nYsd52LXuYQ/XWiic5jr7uq42xQXb4eDcMaMg3fYAdMojPCEI9Z88xtn3HTNpbd998obrrv05BOPWrhw + QXd3N/kN1AWSI1BKt/f9ofeCKdItmT8NJi/8YO7Gxt2G7mE3DGxDWTKYYATuAayusrQ8GXiacRSIm2Mj + t5Ab7Q0wXAz2jPngJxBoo6CEDOI3IPYE1+DIoqLdli1bu3btFVdcARDiT0KFgUtMAtf+H3EK9gOTD11y + CXXywEL8hdOp8GDxQskN1qbj66VUIVUpRJM5YCjFx88///SkSU+eeio065hjjjnwwANRrEC8MEK+/PLL + 0OUNEdA+fM45q6JR4YUqH6nGJAKkgEDMQUS18y9OO9ghmlIyzAGHSlOKsTQc3pG6gNHosR3tZ0+ZeEBn + 5z7Dhq0cN27VpElrNtnkuHHjTuruPrmm5sTiYvKIHh2JkDgGCrgmVbSmrJTKvQwlBB1jDsXWhHsSDkqG + Du4PKIhrUFDQJAuVbo4riE4/2P6ni/aJvUWFzJeXmkQtfR1BR9oVSGhZcHtl/CzpU1/Txylyhnt/q8G/ + xhYaZeGKOR2OvuqqCgmwE8ixoCWDZDYa2dhjTJg5uGKIYw5Qyb3F1UTWFfEw8mdxcVHgPfGv14ZeA6UW + Gc3QXPu+CZBb+8rRsiA5/z7n30z7VpjvNBYOIoKGnHulIMRxcAp2IxzTIUZzQqEFOkYQ0wVTN2wY2EKB + wNVKC6oMoceHlC/QgkDnfGr8RkMAAP/0SURBVMe5EPBznG86zmWu8y3XZbnCcy/33G+47gnh8ErX2z4W + 37a5ZZfJk1cuW3b4fvsdverQY1avPu+0k7537aV33XbNXbdff/ml5+y+285jx44loHBwlkOHHOXEUAqo + 4AsfDLoM/oXaKFvyVjY3NZILfj2ORncgkAmpijBCLg9QrCgh2cZghwUc8IjAB3zjAOYNLa8k+GcAj/YK + +ZPFxIFJ4LxoZEgl1IBGtKxs7rRpoMLuu+8OFt52222M8tBBYTz/76OgAOTdxx0HFiIwQXVJwkyolYzv + khgT1xeZuCW+XoVS9PSIgVRCKQjR6yuU4tXddvtRJHLX/PnHHXAAkQwLFy7ccccdMUVCnVGp4GLEdLze + ZtKfn3EG/kKwkOq4YCHljVCsgOIwQgyVtJ9/WQj+ZeVkcAuHos4nQMI5COLuJcUHVlbsrqMyKJNLEQki + AhG/UEeef/kO7LGeX8mpvZeOkRAI5EQUxAB0wVrUMdwcyUgg+dKMa9AYRc3oPJhXCF7S2FBXEmDVgF3f + hg1z/BwAyIGW7FE7Q+bym8c8vS81tYVVBexz2awogwTB2C3YpuBHJ4VSwp+qynJdyi6DlPbl2BCYs41w + rOAaM1PsALr8c5kjyMYMtRLJYO6VCE9yWpizl4FDa31mlhBAoGB5BqiyW6jbk7nXPvAbVCvYW8zdRh41 + csRQxsTMMw0gl3GJ2Ri9nXpJOAXppUhDiRFURDAUQhd6kBPSEIiRU2lBFQsMhZQjMBTCBArnAwIvcZ1L + HedyxwH8rvLcqz332rB3XTh8bST8rXCYwNk14cgekeiKmtodRo3ae968Vdo6Cik886TjAMJ7f3D9j394 + 4803fevIIw6eMWOz1rxM3329Ajx6SakDNhQn16c+O/dRdaf1VaIN+G4CMZUVFX1lUu1vd13VSSWNCp4U + zgKSxcMRB5nzm9ewob7OLs/Sf2sH6d3IOkg+/tmwx6AmeUDszCAMdkojQ0IWz0P2MKq6WoLN+eB2QqOP + 4IJ4iY1VJ3b9DJ7ruheVZq/YaitKqPsxFfC/oFSspIoGFEm2CynE2Dg/lZq96aZcb04oRf5J//rYY/ck + EndEIt9ta9t/2jS5SwsWLEC9SeF7BCmYSaVw0vqZSX964olg4R4BFuILIdAe2MO6i3QFlCKqD9UcoAhH + 5Iow/G4CXmp7KYiIuBSOCPxvG4nsEI3AFO1lB8/b2XUZR8C/5drLwvHhnYhU4ZriFIQxN0YiZBPFBmQE + MjKdWj+rB28L/XidFC4DvsOD38AM37IL81CybA+mMX0Rmhwws//kXIwFcFn2BYD0WXwIyYzyAcAJlthM + yyBf8JOBnyyroxxcAk6CRvpfMytyOag5l4Pvs6mxXu5ADlbZoCjXZTXSwFsub7OA1j+LdeTMxpJUzxzW + 3DdmSMwYMuElemwlKBVgbPHcsdocqoignrEh8txFi2Iw5hMdaEShqECxc+ILxBCqIFCzQOyfCgJd5wrH + +bbrXut514e9G6Ph78Yi34vHbk7Eb0zELovH1sZiB/CylJSuGNK927RpIhwFCE8++shrLvvGj+64/v57 + vnvv3Tecd85JWy1f0tPTQ2WR/L7RT4cEMNbPLspZmLT1A4RWvrzBvxAbYUsahs1fa6r9IYEZ2OCDFKR7 + sH1f4X/WO4UEoXTUiN5J4zFUrcvHoKDx/AnhA/YY1OhbLEzzsbnnLH4eMs8jzxBCkslISIJRHofTxRdf + zBBPSfcNoTvrimQbvv3Hf/zj6ePG7aSxYSYprTW1Ik8Kwz1AqEghAKNLFeaEUpDJTEIp8sHsf//5z2Nz + 5twGEEajVyeTq8hMuNlmAocQaCYNmEk3sHDST086SbBwWyIIPQ+LJS0H8wAqgJDGy9Ku/wQRoXH8Cp8D + MinGPct1Z7vuslTRbnW1y2KxLVx3S/7Uy1JXgR9jCsdEm4ohVOgmB+nQ9wQiiCWKkgftVZWoBo1FVFBw + /YBwXfrvwNsWwqcCJrVs4MkclrEY7yMf+zh8V6Zb7c4JRuqMGy/7jD5YyGYcTcLmAgKn1qjh3udzPpZY + VkSzxv9iMC8AoYzzLzhsBsPMRYmW1TTM7Ks3yKCm2d6GTEx2VOoNtDAZW2gO5ml+GdVu2iyGJ8e02KE5 + Y9adMRgvd4aQRJLqiZ3W8Nec6ZG5HDgsoxMGmymuO1PP1YhwWE7WbMfZXXsEEcUcphUxxEVgCAUCz3B9 + CMQQepGGwMscrKDOla4jFPA7Ye+70cgtsej3k7E7ihJ3FSd/WJq6qzR1U0nRRamio+Ox3RPJFU1NO40b + t+/ixYftszdAeMxhh51/xto7brrygXu++8CPb/7ONRcddODeE8aPr6qqWic7J0hGwth1womBXwOVvi6h + FNSDNkUO5pj2NrruVmEnqLwvhW7CRh4haAN1V5YsnNfUgLRjEB8MtTEv6umaHAYCJU2a5IiRlJvl2t5V + hSLGdTF18y/fGfhYqoIS8ySRoQo5uVdmVFZKvDkfwuwuvPBCVPhEpBE/t96mvw3HtnU9wq+ffPKQiood + wuHFONUogauJFPgHkACE/EshPcSxKpQikZhTKJQi/4y/uvrqm2Kx66LRb0djl0Wjx9XULJkyRW4UkQyI + UxBnoj4lYh1t0frk3Pnyy/uOPvrgSGR37f8jmn6u600JqcJpkELaDGJh3WXBzCtXwRUJR4TYgW2A4uxE + YnF5KVohbJ6gI9c+Nx6fEQmDqTpa36Ug8AjHZVoAoHJAbFD0gTI9TyJxC7lAxHhuZKIbuY9blGUQHXxQ + mxgnVt7WWW0PUEFWqn/FnWbix2V3GZctFMwa6GWb2poqgvH1NpmNDSiaZtgNszApg3mGOBoDrIU30gaD + tRlYyrFVBrtkGhNcQgbU/SvKVaj6SB4AqjoFJIYM43jvrJtp4Z9/5zJtCxqZge0AyNU2qu5jTFLq+M+i + va15kynjqRls322+Sx0JnIJTdQWJeaqIoCofQYwg0lAhgmuUOzB0ouOsDeQwsECBwG+6Lo7AK1xlBb3G + c6+DAobD34tGbo1F7kjG7kol7i1N3V9R8mBN+UP1VQ81VP24tvw7FaVnFScPjMW2Ly9fMWTI7pttBilc + s3LlkQcdfOpxR9/w7Yvuu/P6n9570+23XHXyCUfMnjWjqam/uLX8ngoEkjB242ZjgUthVySfg9U/B/WO + DHIjCB/ZXAcUtfnPLqTSL7S1NlNBU9rDxUa96EZRyQ4276ju9U4iEqtMlVWkSpKkBNdOHeF/DGpC9VQI + HXERntdEOmBt/5SF76TSxhqmDGI6RSdySjxnACEkaVF5+dxgiN95552hOxQtwvQHFqId/b/iLHzgrLOo + pQC7QlqyeSCcgQC1E2Koy8lKfD11cRfU1wueEUpB4AFaWbSg+Zf5nw8/+uGYMddEo5dHYxdEo0SjH19S + sl0gPcVrSADD9ddfT7YXkp+tXxHBL//73x+uXi1YuG00tkU4OstxgTdBcXCLCRLsjcfKvyz8CSjy+IQm + gpfQR6ypkEVcLCyjXXdCLDpSl28EMod6FJIMt1JZMGCBAoFSQWLjEkG6KKNqXxYeCUsf8P00o6pglPag + 2wQud4pqDxAFAdKGKw4Vjwv7kcPn2gwNxthMCCfQtE0nTRjPrVUtyaFiFpT6F2cjqwFj04zsXwPAMtBk + fTHIEazLYXUZyJSbZv2bOYqFmjkc1AdFBiCsUkFMvY9eNlJy03QqVPv49rxB7qR/NP+++vsr3kwUSl2t + ryVhBi+aC1CRnixOQYwWVEoiHShmfFLA7OOEIIKriQ7URBAIPN0JGUOoaGGUI9B1v+0617quooCR8M3R + yG3x6J3J+A9TyR+XpR6sLH24tuLJ5prn2hpe7Gp6ubvlua6m+5pqr6wqO7YovkssupSMHK2tK0aN2m3z + zfdesuSgnXc684Sjv3ftJfd8/7o7brnqvLNOXLHd8iFDhuAS20AEIkttXV1uPa8B3wKzAWfPSdEwmH15 + ZEzdBhO8T1J4lkFeIy/O8J7uzTebSvZRed4o6cj8MMjdB9PyAbYxhlDyBqaisfryytriEpovybLhf4rn + kRVXC0GheiRLw+zJwtA/uqhIvrOyg+Ljjgo8F2IxUteJVTF2CC9LSuYHPImiRWR8JqEXYfXiBvs/gYVf + fPbZ5QsXgihKOKOTE47R3sGhXnRIOErqGUihlCqckx1Kceedd8KAEYLmk8JXzjzzykjkokgEFDwtEqFi + w/Gx2M49PYT0gaOU9CQSAywESslhRvKB9bhRYOEPDjwQkQtuTlq+AKjWbE8kP4wXoCD8nqcsRJ/pDvIv + AUXmNGL7ZUt7ASmFTTaEVIEOtq8kEJDa4rrPGAiUqPn1cArycir5frYNVdeYLaV8OX6EfEyS8TS/oxfF + EkgMCk4qKYQ0fZMp2PfMXoApAV79h1vYzkIzPtsDtT3KW4joD/QCdWZwhz5WV1eRLpxZsIV5hhfavC0Y + /jNgmW9szBw5GD4MhskX/+zZiFLgLPZV5KCghdb+MfPh0L4WA2PZd8Zfrd1CZuqQuUYeN7PxYHLgX03m + 5zxLAI84FiaLdoTK4Cp9qHYKSuLQrXSk/B46RhBp6BpXhUZABBGFEhR/Lo5AwiFcVxyBygrqutd57g1h + 76ZI+JZo5PZ49AfJ+D3FyfvLin9WVfpoXeUzzbUvdzS+OaztF6O6fju+5w+Thv9m4rAXh7ff1Vp/XkXJ + ftHIlkQoYo9lxpxKbca0eNiwLefMOu6Ig6/65tnf+86l37r07IMP3GvSxPGUrd+Q4Zu7gVazpmbdTKx9 + nZGke3DDAZXY7M7kY/68GUOGMNhvTPsOz5o5EwxyMG3YkPtWeF8uRQyhLMICi8Phiki0wg2Troe8eJ14 + emIx8I/0GFg7yaWCMGRuQ8NBCxZccdJJLz/xxBUnnwwTohoDMDAMrqBzVYt5jeReZOxEfMEQvHNR0eJx + 44QqEaNG+hIK45FoDbb0NWChpJDGwIg9ltOhXOXDF/6UcMbBYMyfX399TXU1zkIys+A/Iz5vZMgZ5oV7 + IlE1CbBKFVKVYpb2+W2xxRYwYKlKke8p/PiXv7yhpeV80rJEo6clEyfE4+QnY9m7sXGe9q1SUJfi8kQl + MmnoJ21b/5be/33++R2EaEQiu0QiqtqU5+EFlLRn8D+AEAgUXy9kTly/vKBlAS4yDQLqzML2fGelwKfU + qMJsjrQjHwL7cgrS1zFq1dZiU899l4DAno7Ohtq6fOUY9A03SVl5af/kzx55SxBXS6bdvE9tTXV3V6cd + 9suOgdOrzzdcGmxarWVvmfHaQIJBOwMb1k/BwXUBBLKpmaYJLzLwGeySS7ZsKLIPa114hkUF8FOY0gUg + 5+8aHMHApyG1xnppANWgkt9m03QDeObUedjp30O9QeZmBvdWrU3EYgSNGL5ugbFsnyGXGvxV83gMZQw+ + 4TCyNcyhKkyQIkpOaBcnRIAEMYKrXUUECZAXCBRFqHIEEg6hhTDXQAE9rKDe9yLh26KROxLRu4vi95Uk + f1pe/FB12RP1Vc+11L3S1fhub/tvx3Z/MKX3H5uP+fecif9ZMOWz+ZM/mD76uVFdNzbVHpNK7uC680Oh + GTqEl8GQIimtVZVTJozZaftlh63ad81h+++5xw6bTJ1kbIDrP6xvPCjincIymZOYkL6NbivHjYcpFUv+ + OslEfZ93H9fJe026Pt4Fe5q2/vdkXfc0RNC4A3kjpXBgrRdt9CIN1IuIRnuLkr3RKPgH2i2orT1s0aIf + fOtbbz///H+/+MKMv7d/85uzioogQ9hCgckxqCh1JBluJPIYMTPCtUZY2x7J5NKxYwULly5devLJJ8OW + SL39wQcfrLc8cjDePoFAOBlJ3aBWpDSTzJm/+tWv+BNWOvh8pw+eeSZV17kWQtFn6swpvWB/LNqJPkgn + XWM24IdSBBVxiUknVxlIhqsvv7UP778/+cnOTiYvrq0+KZU6NBJB4cK/+1dWLp48mRuFdoYoTNLQkIZt + vav+/vezz27ZY48DYjHEnzyLzT2PsGKT8wU8A/9MjUDs4Sz0BNaAcAYdbbBUyKe3YUvRD5s82oNxB+KY + 2Gz65CFD2nMqRxMCP3b0iLkzNi8r4WwFPoyMvKuDVRn0M0wMYgTJMbfaw7ppGaZaMvlmWzUNEOSaRmXc + NzhnAUYGCu2VAU4YyDGI6HM7g3zBMbNOnY9DYmW00dqCSfvgWUCY0yQhYwbDsqHU/JSFhoVmA7YROGsA + lD217EhSsGY+Gv/UKfTAat8WZvBKpsAsnAFnjqvMoct0hiNie3wiGNhCz9QsEEWoyEG1FtTREOh+N+zd + AgTGoncmYj8sStxXUvRARfEjNeVPNVa90Fb/+pDmX4zo+MP4oR9tMvJfM8d/sWBKesvp6W1mprefk14x + 579bTvvj9NEPDGs7v7p832iEzErE7E9zlIiMwaGzqrK2sgKFUXt7S08PCUdbCSXsJx3uug7m/WxPF60o + K4tFB8jWlumawbFYwyQSiMr/aZ2ax6x30oSxvNcF5Z0cHJtNY019VVnFYN/rdTr9gBsLEBoiKAlCcyrI + qzShYW9SNEoU6FUnnfTGM8/869NPC2LPz268ccuKCjyCZPACCRhn8UUxIYJ8zMRGQfgBdXlqqo9sqNt6 + xAjBwsWLFx9//PE58YWDAbZ13Qb8wMcG5hHYB6Kg1kGTCc265557ULFSWZ6gDsB4MGHsZMs+c9QoMZDO + IyBdqyUxioKC4lrDWAo5lqoUc7RKiLxl5LPmpFSbys/E/eHLL3+zsvLMWGxtUfKkcJh01UTpsRzCkkpt + M2oUpXQplkTeGQLt1xsIuWPEgdy6//6ISLfBckudKUoqaiM27j24HbADqgmkFRHiGg6LeSA/SEYCZlgv + LkBZJKjUJFgY0GIi2ThZ+Ejvl4GP72QcHdLZnu8LtG2SZtwfsJNbqFNwW4MKmV8NVmFrDcScPn4YIEHz + rbO9mLE4AzA5bZMtDPboK1VYnoMuZjPZsuAFWscJ+JlvJlWbBwfM/5KLfAGC5KJMflPNFtbxM+vs7dWz + I0NKNmxZxljVdrv9OQcM/jToaJ8l64rYkjtfV+ujiJyCYpZ1WKSikU2j0blhbwtXlRIkvEd0MYdrWyih + EYhCz3Gd81VeGPdSpYVREKgcgZ57ExAYDd8ei9yViN9blPhJaepnlaWP1VY821TzSkfD20Nbfzt6yJ8n + Df94+uj/zJn45eJN0lttDvild16Y3mNxes8l6T23SO807z8Lp74yYegNzbVHphIU7CVgUXLtdqOfiEXj + fYgnB9mH8zcbxFxO7YRDYfSw3vL1MsPqgpcDvs0DXAHMfs7MzUb2MkspvCUSqJKiYsLq1/tWFLo5qvz1 + wLoBYxE1ohgm/jADVUFeOwKBQFggELj/zJl3XHHFr999V2q39gNCz91zzx4dHWAehAM4RK+FtlBp8XWJ + k8XE2TQ3HlBRvk80ul0QeI7pj/RdxJ6/8MILklGlr6IN6wp+9vYcEy6IPIck0WSRJlAPJyUx/lDSc845 + h+zS4CL6TMLYMT8OqN95+dZbASqhVlwXEXhQK1TalIVt16oZDMgSSrGwtVUgH4kQZ6GYA8fPv5AH99uP + dJ3HqZjcMHkLKftJuDqnWAWHbm4m7IQU2ORj20Ag5LwUEvz+mjW7YqMmUU4kguEaOQzWUeycAKFE+4GC + zdV1dRWVCT1a56dNsJFPLOo2/snsapAfzJKYOmUQFCDsZ0csJ0qBFkhR6OOW5jtzzozREpFhWNVmKviS + 6JP2Z4nJQSOBMzk4L9jIkUOZ1MsMF/DW+d5UThMDY2bQD1b6reCmzpu3OWzYOr5Sx0lG+2Avgxn+GTk4 + 3kRNgjJYE1yCaoPMIQphoaFu6tgqKlGVdhCmZcNWPgLlbGCjqdo5czY6ifbp6vK89se/ZGtVDgs0p8g5 + e8HG+IfBoUimFXxjxpWLgKo8leqoqBhfWbF5SfGSWHQ7neRhpas8gkRH4A48XUGgCwtEDnMpGWGAQLSg + OAI9ZQW9NRK+Mxa9pyjx45KiB8uLH6kqe7q+6sXWuje6mn85ouNP43v+NnXkv2eM+5+hgDvOS++2SOHf + PkvT+y5L77s0vfeWas3yzf+46aj7uprOLi8mnQXuSSy05LJhfMCVzvRx8K/GgG+QxID2Q6GQKVVUlOtu + g+GxaJCJBgc873psIIEfg2B7G/H2qNkSwRK236FAywUFJUDez5GtaUGDqyrID9HePobyXSZM+N7FF7/7 + 9tvkRWME7x8FZXz/xbPPHjxiBOoY6vmRqxozBaISlhkkdHBd6r8vC4fxsTHQbz9kiIAEsefII0m2KZKQ + DSzC0BdeguL4I1HoXH755ccffTRlFpB0Llu2DG/lXnvthR+OjNIkvzZh7P24DKFW35gwAQUpMQkUeZAy + Qwi1QUH0k236u6hmiDSYG9SFB++BW6yy+azuz889d24qRd7qNaSupnSD53F/9uMulZRsvXAh2ddEL7Mh + plH7tpwxe/ZulRVLK8qpzaQcGNpNaIAw7oVLi1Kk2CJtLpN86SoFF8E8s6zHG2IoxWD21UQqtxptDswI + EslKxmWS1pvXr8DE1rJSGgDLaUk+HMqWFIg3JXDBNmofZotFfUTURc9EC+qfLFVcNGPzqV1ddBMf5PgJ + T0yMOsNBiaUs46XeDxFBpY4Wz0YaDUiOM3xo9+bTpkpVKRsLxX5obhE/0RiAsBBk5h8461Bch0pxYqWb + 0c1WHw2KtqnS97PS2rIyyIAaAfPMp/6TFzyWZkfDUUrtkEUsvymmn9CAhtqahrpaudv8yUhXVVHe1tw0 + or11k6aGhZXlK5KJPXWMIIUj0IUSHYgo9HzHRQ6jIiK0L/A618UReHPYwxH4g3jsnmT8/pKihypKHocC + Nla/2t7wbk/r70Z1fTBx2CfTRn8+e8KXizZJL9ssvd3s9E7zFeDtbUGgAOFeS9K7LAAI/z5t9BNDW6+s + Ll8diyDSQbPKGIh+tYU+w/0vxIkIiugZ0kn2UbvvyZO1u1+OXdHc8r7eneKSFJmYvh7r62De3695GxK0 + Vpb7NcIKn9rmgkxSRBqKaKEtHutJxIeGw0oLU1NzwZFHPvPkkwADBj2JcxgkJ/vT228fP306chKoIbEE + pOgk5wikUCU3ct2FnodRESzE07ZjR4dgIR8yO1933XVkF6MIw3qGzQ3Uvl88//y9hx12zcyZF/f0nNbW + trqtbYexY2fr7KBz584FGsn2SUJU0bL2zwufv+46dJiimqGvCynELorAkoUvJCCdnIgvKCleWFcr6XWW + L18OseMCEQflt/Te3XZT9WwjkdWeBxdcSWKzZHLfJUtQjRJ5CX5j1CULgdH1rF+N+7//9re3HHDAyoqK + XcvLFhcXw9cJjWBIFiCULGjC8JhlE5ulDCPZaFfwz6+5i8vpGAiKi1IEVPR1dnsQEa6Zg4UMNJAwPdxk + URBRXgT4kTtLzQdUVeU2OwOZASSNRD4QymhuoZ0cOZdpBQDpw4EPEipsJIMQ5vh8gYptt9WWO2633GQX + kz0RYwISnJ8RYcyo3o62Fgv/+sKa3FvhD8WOtkbWVOtM3OrmyCXrSHnTKp9hc6uTcZUAiPaMHzOqrblZ + 3WcduZ/XAG0J4Dg6QbOSQRWXUuImaJyPxPaDYzMykMv2NIYk6c2NDd2d7b1Du8d3d85sbd6qunKvZGK1 + 6x7rqpIRZ7ruNxQE6rh4Bzmoc73n3ugpR+DtUaygMaygPy0perii5Mnaiheba97obPrl8LY/jun+25Te + f28+9n9zJ6W32DS91Yz0itnpneend1+sAE+xwGCBCLJmt8UKILeemV449eOpI4mmuKWmfG0ytitTfxV9 + q1LeYzEq1/aVnA8XO3fm5gfuu0d9LaRRmc19T4Gq4Y49Q3Ue1lRWlJE3Z8AUKvbBBSnNGhWCGZSmMivZ + QFW+VG6QdfjAROGayURG5LUOO39dm+qRqm+KaaOg8gbpEbDacZrD4d5U0ZhEHEXMnptuett11z3zzDNS + NRAUHAwXtAf3jz/44FzEMDrkjpRdm7kusdgGCxdRm1CbFsHCnVtaBIr4IGwkCTUCS0yU6xc21xcUfvGP + f/zyssvuGzXqBqLXI5HLdMSCkqjEYkfW1m4VkDbq01J16N5776VGIFfdTwz7F//617kjRggpXKg9hUz6 + EGHCriQ4nTDKcUXJGSXFVKWYH/hEucBbb72Vg+ffzw9fe+2CqipIIZJRLKKrEolTdtnl9NNPJwwRbS02 + VUg5MleAkFaxO7yZjwhf+2qn6IOkyjxG0VdvuOHC3l7yhUq6uFlwVg2ENiOUyHc6SSIe0+Ff6/aGbNxO + biCH4QCuQESRfXwkKp2trUZTg3ESzpQfusurTqXDxsb6rEFBJXJSowxFzijOZ0iJHB9RHAuiON52m+cZ + +GEIlkSjghOG7pgNDM4wcjH+xKNqSqHG7ggGxExYiNmdQQoHicEJlVs8qKpre0Zle9VsECiwQ7Ip1bOB + BIt4KRMoyClm5GFDhxx60L6Tx4/T2dpU3KRt1dSQlmkv18XBcxCLDSQ6ReraCxDmfII1iqVpoEIQGyXY + TIWR6VLJ2OgKwi/xMGWlpZxRVWZWgTH+x0hh7L248wSA00KAuba6qqO1eeiQzhHDekaPGDp5eM+8jtYd + qisPSSROcl0Fga6GQG0IRQsDBN4UDgOBd8Qidydi9xUlHihLPVJZ+nRd5csttW8Paf7NiI4Pxvd8vMmI + z2eM/3Le5PQW0xQEIoQB5HZdlN5jC4V5gnx4BAHFXRamsZFuOyu9fLM0lHH2hM83GfXRmCGvtTfcU112 + QVH8IM+DFOI9QS1BOkO01tnQgcw1kooWoZHu6lCqMXIFwKGlywVqJD1XQk5C8XQrFVnBF01uVP5Parbh + eShUUajl/A4ElhaXrBMQ8lxG9PYcdui+w4eTReP/5oebVFyU7Gxpqi0vAwVFIKpQkChA3B6RyORo9Mgd + dkBG8uijjyLmJI5bUHAwoQU5IIRA84q99oL8iZkULMRvTDoueCGyZnghYzGJWsCS3err506fLli47777 + YrpEGIKeEwK0PulU8sAQDHhl//3viMVujEavikQu0RCITw4GBvCwHJdM7tDbKw0gpQvuQ+L9kc8AIf04 + LB864wzSTwPnZC/DE2Ai8yRXS5smhahmKO8wv7R0to6FgHeCbRhgQbV8zH7ggANO17VtT6youEln38Zc + DEMFBU0QIQEYPA7M1Kzh6ZB0hqgMqexoPyO+s4Znx4nY7O3HH797551Pi0aPikYPiEZVrjiCHXV+HIgs + sM0rKqZRkwJG2dCsZLgbvb8zRhuZzIAH50WFK1CoRdiVfBg6EcKZ2MGmpgY0qP4gYo0GrIE0kJfLjBH8 + qCx6GkhyrE9yWDJOJZNxkvn2dHfanj85gmKiWEUTvmPfHnwsPYjPKbFDiu6OE9F47J8wnmwOqrZkVq6B + UGBV8yft3QwwwCdb0gA2bqjV4nXzs74hNkTJoTT4EmpWxcilK0hEGE1NclEbYGR7Lharo8SliUMx+2P7 + FO1f1Jb50GhuuIjjJYe4ucagta6qzGfhXzYQ2kxdP5qycgqJM6QrFGzRKDi0e/SIYeNG907v7Vne3rKy + ouzEaORcWKCDIRQIlIgI9ybPuzWqHIE/TMR+nEr+rCz1WFXps/VVr7bVv9vd8vtRnR9NHPbPaaO/mDU+ + jSNwyTSMnMoQusM8ZfAEBTGHsoB8gOIOczX4zVCbzZ+SnjX+f9NHfz6l95Ox3R8Ob/9tZ9OrDVWEW1yV + jB/DRF9nIiSLLzNOVGl2HA+POh6OJSIZcGTSMFCSlz4pjupFTAbzpKFMSoQIihYt513rCzutt0wl87Tx + le8kN1+4cJZEvv5f+4ghHp9tVeUWc2aM6ukSFEQlQUYYYuHxaW2SSBy/zz5QFlJjI13Bm4XAhPF0vasG + /u+LL247/vhtolHBQrKxgIUzxEZKoGuAhRQx2KO6er7OVc1nzz33lJSkGzE99x/vvPP2qqprIpFLI5EL + w+GLPO9Mz6ObUk59tS6qfmQ0uksQ7QAvFHEKMNNPlfkP33rruKqq/RKJbeNx+jrsitBJjKI6zFz9265i + 7YMEpO3tcnUkmcMZSRWO/Pj6v7/33kWlpRfU1b3zox9RuV5KwJNuVPymBjh5IqhmOALCH9izFDrG3Gps + 10IEWUP7f/Huu4+dc87V7e1kx6d20mGx2L6x2E5kDdWTEiw2TFRpKrpzHBS8kXYutK+0i/NyEr07sKYr + GOIZTAGAviJteTn50bhDchiehhc1pLKBXbjcbGYBSmag4VxywBwwECwMwMzHPhkpcnDDjPUMJZpi6gp/ + aq2hkv5ApP+XtdJCaPOT/0WUKTb/yzugOhyt72hvbmiQzG3q8jXl8h2EBaGL68X1KeNm0PjcazLMjx8U + umdBYBYYB9cWwlOLEduS0vQFqPkntf2U6rYz0GMDwEiLpXdYd9fI4T2jR4KCIzYdOWxpe8v+1ZVr47EL + lS/QJS5eQaDrfi/sfR9HYCx6byL2k+Kih8qLn6wpf6m55s3Oxl8Pa/vz2O5/TO79bPqY/82ZmF64iQqH + gAWCcyhCt5+rMA8s5AugiOVz6WbpxZum508G/L7cbMwXU0d8Nn7oJ6O7/jq8/f0hTb9rq/9FY/WbtRUv + lJc8lErcFIueEfao7rRcv2tYjMhBgZvQxqIcHLLxZl3fPp6xqtlr2UKlQyrjwUB1J9hM9FP5J4V5Y7LO + +Un1okIbr2ubv/btuUBPV9dksPPCFalUCV1TD3+NhIFrFJwajx+1115XX301QQX4sQAh/GTAwIZXkP/p + ZZdtF4shU5yjzaQzNBbO1rxQsJCYPBRWe1dULJw6VdACnSQBA1Rv34hp2H5/zz3XV1ZiET0zEjk5HD7Z + 83CkH4YyRSt3cMsdWVS0w5gx0gD8hehToGL9VJkHmb49d+6RFeW7FxUt0X5QiUYwJez5ImV7JQHp3CCx + ztFHH431FaKWTwpfveyy3z/yCOuJ5cApyOWDeTnRh8xLMB0TjEELr7zyShyrBIFIfSvwj+wzEES+c/zX + Hnjg7uXLL4lGz9bE9zBiEz1vD9fdVtdLwkFI4jSQm+yg5XquipFAQiD6tqxvUNdlqLcFLAXfJV65wlo4 + /Ct573n/rbHfXgYIhs6lS+aTw8Xay4cWGTL6PJqBrwDqBAux6YkmLQDUDC0zoCjHJB3OsJ5O3DwW4GUB + jGyWizn6kgFRxReTwhfNpx8skWtR/KCjo4UkINl7qV/NoewvCtL0leqry2qL+UvWQyyUx9I33qo1fTFC + OYrCbB8v+4fAwm0zN43jkLOUNAhd7a29PUNGjRiK73PCmBGbjxy2fWvTYaUlpGcCAq9yHbQwEhGII/Du + ePS+ovgDJUWPVkABK19tqX2vu/kPIzs+mjD0n5uM/GLzsV/OmYRvz2eBoCCAp5YZChFBviWbphdNTeMs + nDn+y+lj/jt1xH8mDP10dNffe9v/0t3yx46G37bU/rKh6p3a8jcqS18pK36hpOjpZPzhWPQHkfA3PZf4 + fUghr9sY/a7xMIybsK8e59+xgZCGJ6Vu68Z4WYkFgt7lgKj0SQlp6v9Fk2nhBg0NX9POemyjD+EMYYor + rkHGPrKGEiZB2YSJnrdy6VKwh4LpDz74IK5BBIoMqRvFMsmw/th3vgPnE/nMDNJwE2IPL9QJkBbDTjQW + Epm3d1nZIh1CzgdaJmnYwIONlYbt3ZtuurS09JyiItGkHKZjjPZx3V08D7cZDsv9E4ktx4+XBhx33HHA + FbS4H1L4yJlnro5GaflWVKiXgKEg8bSkKMP9RhQK4iOVgLSuTlQzVB+E8hLOCGL15dSE3oGF4FnBkJU3 + b7nlB4cdduqppx6qP5hbv//977/44osAJPQRIkizH//GN67r6lI5azQXhPUSlUF+DTIuEmtMDsaxurWg + tW0X7QcIN7CvszvDeipRVF1eiYUwp+ebg+txtvDktK9dDIrYcJKzMXAyZtTw+bM3x0baz0tHC1UpgyCK + w0cDDXW6/b4TSw0QWqojTrgANPq0HOJRJIpLMy3/ULKTv2/IwdZKvjedOi4DdUwISFdNsg+smrTKhiYD + PP0gEMOTqEwFvdQUJHD+icnU/JR/NHuN2cw0ACVodUWlaa21sQybdkv9s9sr+0fNrJ2DByDtx0mGZBRp + zIhh3WMggmNGTBndu2ho5z71NcTgXhL2rnJURMSNngsE3hmN/DAeuz+V+HlZ6snqshcaq99qb/j10Lb3 + R3X9feLwf28y6n8zxqXnTlSGUEgeRk644NLp6gt/LpySnjcJ2pcGJjcd9cXk3v+MH/pPwG8Y4Nf8fnvD + 71pqf9VQ9V5txdtVZW+Ul7xaWvRycfKFZPzZRPypWPSxSPghz7vP88Dj01Q4f2hLXfWT1413TcmNsj/c + EOY62EUFijB6kz60/zRjitqoxKrrBoT0QAljsN9lvmsJdOHsSwMiFK8Ms7QBTTtswKvXVywjB6Gf48Ic + 8DgDtqfPDRwvRBUcSgBw1yR2XoyiCAWJlGCYRh2z9dixBLZjDyTPi4nn21goKGP9qz/5yf5tbWChyGcE + C+GFykaqsZASsiDKPsXFW0ycKFCEu44hnpCDjZiG7aWLLjq3pBRBCu69vT2PgmTk4cVUCBLj7SPYfE+K + CWuHJWVyCTfkbuBp66si4O+eeIIq7Zh2KWEv1lGJRpD0m9xhsLAd9wDlqEBKrj1bNfPuu+/25XxlPedl + OsK/+UbUF1evviMeP3/uXCJASEoAgWbSwI0iMwBKnNcfffQHK1ZcqIkgflBKyYP6oCDBxaAgMjbIq3g0 + pallAR3sxy7Ky4NXzCDEenRHmedCIxCP2K6+godiS7tcZ8FtjEPO/jUfrdUaPZ4i/1F+OKE9Pnr5PEz/ + qb5XVVQSioDi3xwzgC51DNAoUHz4O6pxv9DInbfOP56spw060jcI5qOrVFehrsyGVT1vUGV3/HqBBYHQ + P2CfLjp/J4a++toaFBlSGSPYKwOTBUExOKNmdMEpZNSmM0j7DaYS9lAaLy5LlBAQKfekICKaBudvkHOB + 1gYhpEFlqaKmulqcgooIjh4BEZw5YuiO7c1HlZVeEA1TIwItzHc977ZI+AexyI8SsQeKk49WlDxbV6Eo + YFfT73vbPxzb/QmQNm3Ul0AghlBIHigIF2TB2smfIN9mY0C+/04e/tn4nn+O6vp4ePtfe1r+3Nn4x7b6 + 3zbV/LKu8t3q8rcqSt4oK361pOilouSLyfjzidhz8egz0chTkfCT4fBjnveI5/3cde933Vtc9yIdyEim + U1LMUIRgWHl5XakyDNidltQMY3pHdLW1y/vFpA1kyvHnFezY+Sv7eTHZmDBckmXTo+jHtg6u4Ks0yHec + XpovRs3fF6AdO2pkQx3mpwIfIHD8uJHDhw2RAltfwQeNWSwUToS8hDJ5MdJhysEoyqy40XFwDVI5aEZ5 + +b577gkBws6GXwoysXEVm4b0/PqFF46ZOFGkpCRdo6CPYKGqE+a6YCSFHcDC/ZLJZYGJkjg/Ow2blLYf + KEpigN+fOPdcGCFAyLl28jz6KPBAGoitCG3UK7cNAhwphIS7tJ8w9o9///uzWlowroKjZFQioBBjY1tQ + igjLM1ioDKRaNaPK9paUzNYoO2/ePFHNQPsKNhf7Jz/xLBANEb5iXzVJtB9esOB70SjanxO7u+duvjka + HIJPCNjHXvrTCy+8vKsL8+/aSORYTQQx/0J8d3dUrg3QGi6Ia1CSq4lRlP4gofRCB/EzENGVYyfhT5Qp + BY0nG7fXythaUkS4nZSlVbQGPBjVO6ytpblgA2QAlWbIl2BINfDTZxutXdVeMLPqyoqg2KxvYzTHZOxA + 2aFm4Ro4GVAkPsE+Z87Z7cFdMJUPaNTS3ADPk+MEcKKOZIBVzsJHr+nTnhmoODPnsRDLBzB1fBXSRzrj + ChE+CCcwHj69i08SbaZoY1UOFho889FOxel7JfHiVIzYU1/jkw+EZo2c0Twm3LtdnW2kr9SPWzFv86vu + eJGqstKOpsbeoUOg9ePHjJg+ctg2XW2rqyvPTsSvRA4qjsBI+G4oYFH8odLUU1VlLzVWvQ0F7Gn988iu + v4/v+dfk3i+mjU4DgbMnqAUgnDUhPXOccL7/as7379FdH/d2KOTraPxjS91vG6t/WVfxblXZ2xr5Xi8p + ejWVfKUo8WIi9kI8+lw0+kwk8kw4/FTYe9LzHvfcxzz3Uc992HUect0HHecnrnMXfkrHgRTiKWTGPzIc + HlVV3UBwmw4vNS4IZhXtzc2wpaAbZ3Vmu++uE/LldHr2xQcskhnw5ivkXoXeNp6jEt/1YWWFDXd3dTBX + 25AL7HsgQqMVUSgYSYa8uJ9KjSFP6CCFc2Eq5ELbctIkIsrBG9K74GoS2cV6yEQHg08f/OIXJ266KVhI + os5Z2kyKcIZFJYl3XQrmEY2wb6podWXFNiNHCi80adjw2GEqxGC74Vj44CmnkMAMJgcL3MbzyEOxjetu + rbGQNbuVlAgplGgHygiTmLvg1ZHM+rr58wlIQIe5FCmQdhN2aCIICoIx/AvlIspemLcq29vZKde16667 + opqhbC/TjvyDQ8excHLJ1GDCiAoYm22++OSTu7q7r4tEUMB+KxY7pqlp/rRpODUvPO20y5csOTmRIEON + sv2Gwwd73kGuu7frHlpbc3BzM/ecCrpjgmKENIz5kAkflEoRyuTievFIdEDHwMbFP/toDJAmcF4X1lZG + lcXz54wbM5KiM2b4KPzOaLAhIkLisgs2UsAvIIo+jNob27BqfweP0bwY3NMEN8MvLRjOsZHKuTJn5IpA + 3Byqx9ESSUnm4zcJi5PCyxLyHuYbXX0UKchHs/HGAJ9cda4/LwcFbcDLQKZlR7UhMAcdJUQkOIX9PUMc + DbgaqOPqSEcwccIoyAq/clvUnVFFiRVUx6PR6rLSrpZmdDEkq9xkdO+S7s4DaqvPLEpcQZlc173Zc++I + YAWN/iQVf6Qs9UxN+WtNNe91Nv1heNuHY4Z8MmHoZ1N7/7vpqPT0MbA9WUC+/03p/WLisH+P7f7nyK5/ + DGv7qLv5z+0Nv2+u/U1D1S9qyt+pLH2rrPiNktTrqeSrycQrifjL8fhLsdiL0egL0eizYYV/T3vek673 + BPjnuo/qRSDw564DCv7UUYzwh657k+NeqEs+MbyMc5x6J1QaJTCpXEdkBoA3iHdpQ0jbIA6/bpvQ8uy8 + TgV2B2iRKw+mVJN0b5NWqa+m+DKzdWup3hp9UljTQcUIo2q+rxJoSQYZTQfxXW1eXLxo3jyEmmeddRYO + OfgHhrgNR5p+QPHTDz88f+utiSMUKSkF3xUWSsEUeGEksnMqtbI4tX88vl0g4/wq0rDdddhhB8UTu8di + K2Kx3UpLt49GIUwgtFhol2oY5rYgRcFJ2U8Y5V177YXudDeso65LZD0mR/QyAoSM2VLEkT87tGpms0Ry + +4aGeYEflFwz6Fy456C7fcdIEP7pL38J+D3xxBMYq5mgoA41G3z83ns31ddfEYtdHImcG4kQcbGmrm7N + 7NkndHQoR2A4DNklK83+2iOIo37HePSsaZscO2nC5snEKMdBJkq8BChoc8GvTSy6rt1YBgvlutOCESto + weCO7uoB5AneZNs/lXJEtpGjmX9lp8yfBoKC9dnoqORmAT/LXEewkwHXHIg1v2d4av4ZBXL0hN3nf5yg + qal+1MhhygGjZSkFuZrAGD5XIfFC8gxW2aBlr8xHOzm+YZOm0cHKAHezbaQ+6gX/yz5FBhGtW5TlMjRY + KAnktKBGGQDkEpjIlIXDLcWpkfV1E3q6piLZ7+nap6Hu1FTRZeEwERG3eN4dkTBW0AeLk49XlLxQV/Fm + a+2v8eH1tv9tzJBPJwz7DBY4ZQTylv9O6YXzfc4akC8weH4A7Wut+11j9a/rKt+rKnunouSt0uI3iote + L0q+nky+noizvBqLvxKNvRSJvhCOPBsOP+OFn/LCT8D/AvB7BPBzfPz7meM84Lo/1UbR+xz3Xte523W+ + r+M3Tlcp31xSTiLhJYWh8S4HUxy/O9kzN382FHQ0uysO+BKxsZ3zb8Dt12MDFY6aJYDNPQbPtLWlicTi + 69TyvlrC7Ki8pJQ6GOvR1JDyDoa1dzCueaGWyWAHw31Fvh/yYUIHZ7W0kOFs7733Jn0JAQOY4zYkrfNg + SCHbfPbpp9ceeCDkb3EkoqSkiCojkUWxmMo747roS/lpFz2amzRsVOYj09gNN9xAmD+mQopFbKAL8/N/ + /et7e++9TziyC+EE5LaORtFSLvc8To1wZhvN2yDKyGjxUPYDhA+dcIK4CSXHLilmcIkTPgH+Sa0GsJAb + joGUIlbTS0p3a+tY3twi5QYx/HLb4Xww3ZyAxd/fdNMrRxzx/OOPE0pIFadrr70Wh6Lc3r+++uq1NbUX + xWLYP6lfeEIisSYWI80N2leaASQr7Y/r7qDLsC1WmfjdhaWlhPaPjkaZ/RAsQXsAaYhGfu3c9elnA+2j + Mg3qPFs5G0pSl4H2zv09fxe9RnBIfSyMyuCcrCyIedZe/nGC4UkdikG5HKNVqUp/FZzCYKpthrVH+/zv + NjqC0/45C+5jwUNY1WMPRyHoliHR4Jy/jsBEDJKEo9nmRNtAmoNPGvMC5pahehkgDBA3wF7LEWgjq8Au + a8wBMxgc8E6rGcG1ZqA0i83KPTdoj6yoxnHHMFcuTm1ZU7VjQ+3BVRWnpYq+FQnf4Dq3hr27YpH7EWeW + pJ6pLnu1sfoX7Y2/72n5y4iOvwOB47r/hZ0TcyiwN3rIJyM6/w7nG9IsBk+FfLUV71WVvl1W/FZJ6s1U + 0RsgXyLxejz+ekwtr0Vjr0SiL0YizwN+nmJ+T7guyCfg94jjaObn4AUE+R50QD6H5SeOcz+L69znuvcA + gY5zJwZbXeP3VJ37G78Jr55KpuDPxjLd1djM1/Vd6Gt7ZlS4A8UfvK4fmoeHErv9erybOefKfR/XtSnW + 9ioAKZkaMA6kwBlQ6YYxhwaLG1NAKHZR2EA7XqtwZBohDZr6UCcIYQhSC8x0X5FRNAcjOcs9Z529YzwO + 7CElXVCUWJhMqCEbpuh5i4M0bAzuO7W1CWzwOeSQQzAnwpM2Shq2/3zyyfW77krkBnH94B9Itq3n4acE + gwUIOR3Qi4a2HyB85OSTsUOiON3edfHAEaJOGmuJzJMqfZLKnHveBimMRqcnEirXTBC/v//++0P4OAXQ + bt+iz//2t4d6e382adLd55xzxhlnULvxrrvukm1+c//9FySLIIJoQU8Mh48oKT4gmaDN+Cm5CmXjdRzC + BIlOmUkkr9bF4Lkk6w1EEKeg5NeW8rlSNUJyquUjEh7sigrylawDVtH1bfcDb7hkg8ypUs14R3wbi5gH + VZKXPhLzm1FjwJco/63rY42MRDkYlOGUAnjmX9qPhA+LqEFHC03lKH1RwMJol8+6+oBDlRqGs2tVjS/F + tL1uhiBqFiWU0ZCwLOJFqjzEOIjGc0DLYoGCggaG/ONYsGcYoVGiZm2MXxmFjF4Ue4XM8V3y0HBktUYf + XC0GNy3mal2LwlYyDlByfhISNs/DhXFiJPwNz8MXiBz0++HwPfHoA6nE42XFL9ZVvNVc+6vOxj8NbfnL + 8Pa/jez8h14IbPjb0Na/dDW939bwh+ba39ZX/aqm/L3K0nfKSt4qKXqzqOiNZOK1ePy1WAzMe1XDHstL + 4cgLXuQ5L/yM6z3lKdjTNk/nYYV8LjZPmB9mz5857oOu84DjKvKHI9Bx7nMU7N3uOt9zne/oXKaUecIW + ihBvKQMCqSvxPet3zbZAZPdn3Y2CiZr9ZcBuX3ADdc/7zV/fz2HZkUJRLS2NVkb79WvF/wN7IQ8lTjBR + GYqXhSIpRQcRjopetEzzFdJqj9Uuq9k6dG/lypVILYjdXtdUaoOkgH1t9tC3v71jKqWkpJEI8pnZXniL + WAwgJJM1WGjSsO3a1GTSsIEcFOeDvG4UUc9/Pv302ytWQKR21kCCWEZpRyPRZSNGIMjEb0pUJT7CfvKs + vnDZZcdEIiqHuOchyCTTPGpM+J8AIXjDIuokbnun66JOUrlmUM3oBAIwXanQRNhDzl3687333h2L3VlS + csMWW5x63HHkWsNZyDZ/eu65syoqOOmh4fBhlBsl/APww9fLTdM+eezM6EKRsCKKIcYfhtqmzw4RBJJN + cu3+UZBxq4WMLPW16wCDTHijUSwYwJq8BLzeMojnvBOsbG5q4OAM82yjxREDn8eeovIdfTn2H7OjgT0B + J4NkQUsya6wNfAwyQ4/N+cwlWPAjmGdTw/UBQg1IBeDPnFHPJ5AOFjNFyIE3PcYZ3PLRJThg5k8/eE+z + cHLFTBw3hjRsymicRQEzxNBidRlQFM7nf3RSUJix8pIGrA6oYwH8gC4WeGuMzGo03iVnSoRF46KGQ032 + MseyKGNAK/VG2PSofgN/ct09POc4T6VJAwKRg2IFvS8Re7ik6NmqstcIXWit/x1QBwsc2vZhT+uH3S0f + dDX+qa3+D001v6mv/GU1ps7it0pTbxRj50y8GsfIqTEvGns5HMHUqWEvrGDP855y3SchfJ6n1C5wPr2I + w89nfq6CvR+7zr0+5rnfcdxv6opOJ7jOoVqJBuaRRXKEgxOE6aaDHUhyMRj0818Bv2cGfTR4MbItIxlc + XHeLiZp6ksU7v4rZ4HFJJXvTvurB79LXlvmT0Q0/5qCPgFggHiqqC5U0h1J1oUS5j4XGQcgwjXZjghb0 + SxV1EpthA4SX9KUK2UDA62f35+64Y5/6epGSIp+Z5boE5M0JhWBXYCHrASeAavfaWpOGDUPuN7/5TSSX + GyX1DPUFL1u0CCQjdgLvIP/uX1Oz1447UhADlgziAlH9mIufveACxJkrI5EdPQ/hKLmUVNIy160mziyo + W+sndNUWaaOaMRWaiNMA2onTyPEUctOe3mGHW7U69Oru7m8edBDBgiqn2quvnlxdzUwZGsqsE9Xrch0a + OFObXygACQWkRCLNwB0IBEJPjS6mIBHsq7+rAHb0hlC6WHyQE0zFTvoQhuW8V8JOBt2nM8OIvFqAAWwV + o6UAYQ5GZrsM7WFFvhtGaJun8pEpQ/gCL6O9jY2INrCZvQq46/LPYZCJ2YD266h7ri9QZYEJtg/Imo7F + RPseYKF49QxUqdsSsEN/VzbAsUpOMkmYZ7FAwxoLQFQG/3wmp/6n5LupIoL5NPgp5ENBS9Y7JiNEwGFK + K3Id/1+EEqmS6lQxDVWVvAKmKG2S5gp4Z6yp+kI4AqX7Fnnuwa57FhBIjaRw+K5o5IGixJPlxS8Rt9dU + 86u2+t93NPwRO2d7wx+Bw6YanHy/UMiHk0/JW15Lxl+Jx16KAngRLJwA3vN6wc6p2J6LyMXF2gnhY9Gw + p6ydytTpwfaUhw/bJgzvu45zHam6dfGmUyiOpmv8LtOANwaNhVK+aKqnkdwvwiK4l/1GGTAQV7e+dn9a + lv9SmK6rshZk5zYz8yR7wpT/BhHfiWnTfg0HA2m0CmELxa0G+aYP5s3lvMSbIvZep1r2gznyoLbBLwgR + LG0NlbUrLAQR4xWhaKlyEGLfwTKGiYzUX0S2zQuAEFUI2a4Bwq/BQZgPiu8+8cShw4b5GbpNuL0OMYQd + Srg9+ERI/rwgDRuJyqgUsbFSz3z0i19QVgk32/6kmCET9x57YI2EgRGZB0vuJ46Qa3l87drjIyTwjEHL + BAgRxQwlPjoCFfert0vFYzGQdjgO4USqQlMsNjcI3j/ssMOgnvm5Zv7xxhu3VFRcE41+KxK5vLzsim23 + ffTBBz/+05+OrqvDossUYTvHWSKlXvLwj6cMC0QeDBllfkoDpO5u/0Qwp4fxfleWlnc0tfAC8xoT1/2V + qkmtN1ZRovzKEvBH0jNKgQKlJ83NHdXfHNYCoSw/jS2lCbbxsdX8mTdgUeMpjPdOBnT9McbWAkAYAEAW + ERQMEzzgA66PGTmipqrStFMSVedAlzKW6gw7hpYF5E8dTaUSJ0mpTxmNtVM91eBcGdwMQNSgqYHJHGhU + f3JIwTMoKm1KhSM18VRNvKjM80pdp8J14ZukKK1ynUrXLXeduni8HmKCAlkxRVCT3TU7DCipQUFpGD8x + qel1nRWue4LrXo4cFCtoLPrzVPKZsuLXaivfa6z+VXPNb4C9hqpfibylvPjNkuRrRag6Yy/Hoi9GIy9q + nve857E853nPeO7TniuET/x8mDoheehZfkRsA4ZW0E5lolG88xTXPYZAI5zrOgHhbFe5OUZ7LrFPVU6I + ZNVkNJCJiQ90xrNnrATZTmjbJiHPlKfJpMSapfndVQ4awJv/RWYe5pfB0zODu9KJA3o3AHbQrzraW9Bn + cd5BwcwgNuIdaaptaGvNCpAdxH4bZRPCm1KhkqZQeVeovDtU1hkqbgwV1YaKajJKGcKoUcpMkRgGzQgh + JYz7ZNn+mk2jBhT/9M47x02dCuZJUV8qNxGKMCMUghrO12EVIubcq7x84ZQp4i/cuKlnPnz33fPHjEH2 + ctdxx/3swQcp3ouGFqcpwhyIWj9+0wdWrTouGj0wEtsFu65k18UrEA6jBDdqFLi4hG9iL4WOD3Fd9LrT + uf9VVXL/CRGhPjDS0PzY+eePO+4KqZVBPYp4/LTe3oe/8501nZ1MDjApQwRnOA4skLANVRxYx8iDfyAu + Mx6BQCGmAoGCguIRHIzhg+GdytFYO9UgGw4rtZumKevdVQvumyVw8Z0lLglVZCJp78J34iJ0rV0ziBiX + noV0/oBlBpfc08rfORhmrckcSg7BgMRZxRgLPEtagIQOrCwIcmZ/yxTpr7M5kL0vPjwK8YgzVeyfCBYk + s5qNlzZ+2Eim91J0MBsFfbyUY1rw6bOyAE3NnwYCA6IpJQxRtGr8Ix8B6cOLSX4diTbFkk3RWB3uXsdp + cR2sHRhCWAj2bKDiRyRSH4vhYWZj+KJgobqNvlnVv3OmVSWuO8J1d3Tdsz2PGhE/ikYeSsSeTiVeLk29 + WVHydmUpwXxvl6XeLIbwYeqMvRKLvhQJvxgJv6Bh71kwD8BT8Xw6nt3Dkun+0HNvd90bdOrti1xq87pH + u+4q19nDdZc7hGyFcOBRNB0fXj347YDETpD7R3WOiurKkaNHFGn3cED//S8GbAQX7T8tHPJ7XcD//M10 + NKqfzZUD88CKk0XkUDUmd+vl8g++Hq+bnJu7zLlMYnrWiTe54AELejHW49RmF/W26vPJGg3J6sI35JiA + a4Kcg5Rw6f840MFkbaisO1Q+NFQ2JFTWESptUVgINTSSUcZKIggBQpQpczWuUDGJ1CQIMpFjfD1imXxe + SOWmM5YsAfOkou9U1wVUpKKviGjI3qISoRUXLwmqJknqGaoUbZTUMx+89tqL117L5eMUJJ4SLghFk9wC + fZl2qWtxxzbbkLpFiXp07TE8c+IjBIQke6fAj6l+rCI4dTJu0tphCl7Q3S24DilHmGOkoeaMn3300fVD + h5Iym2Sh4DQ5UXePRAj5QGSE6IY85hOhmIEWhjgNQwFFqoM8ijZwdgmQMLqYvjqjmkJmp/S0Oxy9sKa6 + kvrgg582rl+/NwQrBwhzXiFgicxMpjFmTOKVFs2OGZV4H0EVnXFbgNNAVYbAWUAq3k1FvJjFU92psryM + aHTmy+2tLXXVqja6OLQG/BQCwgx6BviUM5D6aCQDk49RBsky5k1DCjNmxoDuZbhdIQj0QZHxUaUxj4Fx + PvQqKNW8zRg/lbdPgx+OQbCqTBM+Hj85isG8dg9LpjPcdXoVjKl/WYa5bif1vV2nkcIXMEXXYUeFhXQt + zSwNl/UxXotrwM5ZrndEOHxzJPIYsXoxgtZjL+vlJc32no+EnwkTt+c96nl47O5x3Ts99zaqzOsU2+e7 + 7jnx2GkV5YclE/u4Kj8GnvJprjOBt8NVFbNBa+LVaYOwOmh1gjkHFgXD51S2sqylpqZyaE8XUqOgu2Q6 + jYVtGet6AJfq+MFTkw6r1sg3ninVzcjtaY5AZa7yVFk8qlLo5SFEpqda6NIfjuQfxF6j3m7tdd4QKMrf + VwCv4JvO6XRSN3UhMkfbkFPTT4uiyYqismQ0EXhfCx2PO4lGBswr69JLpwbCDmykXmVXFhDSXwUIF44a + JQPxsccei2SDaPqvNIiwf1/jvz/55IoDDoCnQgoxHk7UozzQAhzOcl2ciMhnkEfunUwuHTtWmg2EI2m5 + 4447oLPEfmyU1DPQMsnzSS7Q/nML/PvDD68cPlxUozvpvC2iGoWTYQiVOrcwMBaJXREDKXBFlc6RgH04 + PC+ZnBNw3BNOOIFHkJ+A9LUbblBhEqnUUeVloCDS0EXEX0Yi02LRKZFwr+MQwo8jUCAQ/DO+SZsFDgiB + 0qGgIEhkAJiC/ZUOTfqxgSrF+K/+evT4flAz532Wg4PZsEY9svkDjow62pGmKjQJoLISMyPXhU8xKLor + Q0wwSmXrX+Sl1QXZVUIWMp4gKOcLHjIC4bW5MoOA9ncbF/MhUA9DYQZBYdU2G5M/5WPxNvkzwwjVdz/G + wIBfgH2+ydHmdpnvPLKK8nIpE2gWCqsSw64ryKtTcLe0+FOVZ0TzgicQ9GKWAYxh6qzUqNYEqHgOmq9h + rjPSdcfyhlKMMxJZXF6O/msTD6mnMx5FuutoOGR7V7CQ44iNNDCQZlBc2gO+TvHcvcMexWFghN8Jq6xp + F3vuOZ57lueeockcqSF2cR3SXxBwTIIkZKU0ADKKPZYW1hQl6srLpNqTeug5i0Toky2WJF6OU1leQVYz + KpibR5bP1KWP8bhxnmnokk/mwNKF7IcuPQpkB+0o1WU6rXUWZb7W5/L7HvW2wELugXRds4vVP7OMItIq + ezP7RetrvdklaKGqfrWx3IH4TShqWDC2gS5npw5YjzEh6+oICXQR2IX7Q0H19kaVCRTXoOBfcXuouMMp + 6WoYusno6UuyGSEAo/UpW7a1CaKgl7nlllsI7l6/6oMbUU1z8+mnU6thqk7FQkdH+oj6gzAA2A+GU1yJ + pHHZOxbbKsjbuWjRIvLDkQJmI6aeQTQEpg6YYef9Z545IxYjjB0X5vY6JwBNRaLSEFLVqAFC45ATXgi8 + qAKQOjG3qGZUMu76enkEK1asQDUDE7VJ+V/feeemLbekjuDxVZXHVFagTYULkqwVxjzOdYc7fuEnCQ2U + NDESFyGnNtERgzSH0nEZ6/sKZtjAftz/7jnvcDBSZN55e5TgO2MTqYLt6XYwTvlwYkYfPTahMgUaVQ1e + e+Qyo481wOXubtNTGZ7yB83Mmj4UobIBeMwkQ3w/AcJlMSRZb34NQNHniEB7aVGxjCwUOYSq6rLvgRnT + sjoak6McgRtFdp5gYx8Ldc7JWIRxBbs30gxt/CSsvaqoaGhTfV0yQR+G/NV7Gv8o1qbxb4zrTnBduh/v + 42zPnUtWplRqVWfXLlVV8zx3JhDluVMj3lgKfXseWAh3rHEdqCR4i1BEmZV97M4y1UIWyzy3Ufvkejy3 + zXU4KSAKQLJUaDGO3Bns1DwA/Rj0F/WvpFHgu7+eTdU0SCYO+iP7cr1ifK6vqZ0/fUZPV5ci3bmPzOoh + rsrP2dPdgYLX6irqUEpEph6lqRlp2JuaRVHTkacj3D+Ariz0sjuhbVwwGxsg7Af2+v+pn9cN0wiv+Qby + M3N85qOSgV215ysdIwZ1cLyDRaHiJlDQUTIZLKKtoVRruGLIsMkLRm26hWInDBu4qRiF8WMRTQ+ubFVW + NksXiF+yZAnyE4rboQ3ppxrtRgS8fg512/nnT4tGwQmEJ9j9CIPDBzYxFMJ3SAA+rkQi//aFGw0bJhBi + Us/g1ZPqfRt+CTDjAa3Ejx5zzMk6mcseROLruIWxmu11pYoa4FaWTw5CJpl9JIJFhXLqZNw8BSyc8wJQ + h5fjmyQyRAI23rz99vPb2mCch0Qie8eiuzvuVjpAYlN9ImywbZpf4g4UOYwYQm05zCDxb1AdbAM2MsPB + YI5hjx35818fIF1n1Ihh7e2Y+XMnyDLE9HUiMwDZw1OwMsv2JYfpi/CZ4wihsUdbP1bAp27+KGyQSYZd + f/jNEo/4aBcAoc3tNCnEShmLVZSURsEuz8Vw19baFKhp1MaFvIOGL/pqUiv0Qof3aUln4P9T5K/Cc8e1 + Ns8cOqQtGm12FKsb6inv3ThP4R+cj1RQAN4Sz12mExNu7zq7MBFMJneMxZZHIlvEY4tKihdWVkwrKhoT + jQ6LhIE0zJ4BKXRjGgjzsNAX0mRhmwE5gboA8CQaww9RzDa0mlvOuEzZQuFeMhUIHpAGPpfixomW+ib8 + 0AYFzfwjpzNwz5lzZA4h3cJRNSKgfdrqoFf4H4UFHErNMCImdFDBtPIrU5NZncbvm3YvNfMwgZL8/mu9 + FANgDZ0Df4EUCOvzLeibUw7mDc3fhualEsnSVDF3fv2OsNH2wjsYq3RSbeHyDlf5BRvUkmpyS9sjVT3R + qh5/FMY0hxmNMXS89lHheFs0bpzACQV9iNpmFO5fHvKVYuEvn3761lNOOWD8eLQkRDoCFVga4Vj8O4K8 + LRoDZhGooDWTKoy9q0saP2vWLLSXlJEi2I4Ygw1PPTPgZX72179e2dlJYk9Smu3pugQSEb1H+c1Oz+su + KaGMil3nFkBiEVIYJD0P9SYT4+PxTTCQlpbO0iXs4eUkdcNZ+8u33rrrwANPiMUolIGcFY3ozow7Fgpy + QwQFTcBifpqYQj4HBr4wk8FSpaf3o/02Whe0DsQLz6tYUGIqr/RgoDF7pMiCN/5AgBcUzhWXnsuYpewz + waiklSOZiMacAavQnwbdMtiWMyzagJeDf2asFDdYMMLahC+H/OkxOYOFGSC0+Jyxi6qD6uB6tVmg3MG6 + lYE6WS/jvtnMWumDJQyQRR9GoSAPCa4GBEK80IxQAaE3HhsdDY/yfMvnVM/dzIP8efORcHsknXC399xd + PXd319nLc/eNhCn1vGc8vltR0U5lZdtUVi6rrVlUVzujrGxiMjlSJzNCPlPjcQoHPAF0AyD0iaw0WTVY + 2pTR9diX5l+XXF2w+BtYuln/dnGjtB04x3uaeb7qLNIPs7VIsoUuWRULKgn7My1rVqT6m2pzZpaUAUID + aTHqEWtHtX5o5O+Nk/1HduGIcgnyIgT93PrqvyC5b3BAujKom//yQl6HDx1CyaOv4r3u65i87K2NzW2N + zSYJ4td59sy5QEECJJKNTrLNLWp3ihpDyepQsiZU1BRKtTklHcmq4ZmAekZPoAWrI3Y5lV2ztlawZMst + t4QUUpUXD9mAVsEBcWJdN/jH73530047HVxSAsLhvCTrDdLKHgwyuLuTSZZh0ciU0uIp8dimlK3QFkKU + k4QY7tTiZyzjEg4++GBJPYPOhXq2G5iGrf9LeOHccyn1B1ChlKGWkyhlkG42oyPXAUZCzsQ5J4uQQj+/ + jxPqicdGJuIQX1B/rrZRExZCiOT3L730rHHjsLgSMo86BhQkZRoZ4KR2BFxQUJA0MQYF8+MiCs4btQo0 + NX7MSEliuX6dNet97eMQajTRgWs5v/eFf6zHdMknIGqZDc0362CZw8pknL2Yg3e0tWLIksGFcSpFeZu4 + SqciU+wA+fr6kjVKmo1tomDGPZ0YOjPOmj0VFYBAJPGv+ahmD+vSKhv59ChsVhYEQn8lFjgZeS0MCIBE + /xQcx0fBbID0AUNhDdXtI7FERFlEK8tLauBNRGQibPEU+YP54fMjmH02bgjyWnjuFsTyUqZN54vY0XV2 + 0268lZHwQdHoqmRiTUnxYaWlqyoqDqyuXllfv0dz845tbVu3ty9sbp5ZUzO1pGRMIt5DvlCiKfC2aqej + ZoRZ2lGFEhoCNWZ73EBtwrWvSBUugJaJd1alLC9WntogS43cGZWCJ+/m5D5TtixKJEmZZ2I0zeOQpyM7 + 0ACKnwTeRr8D5vePoJPYvwhq4pOO4n+twGcZT5AbTMW06KuUs3AJnCIocmK9Iz4mqjOatyznlen/T86u + NVAqWnH93u712IsmMZjUk7ihskry0Uiyo75e9kGegt3XzYvJXcMomoT/tYWKZGkJJetDybpQETH1bTgL + vYohGR+VsstpYyOFgYCcHTBoBNoTUsyQ8euNN974+9///pWiSA7GwK5umjuXbCmM+5g9BQiB6qGYGcPh + 8bU1PSVYeb2xFWWTCbdyXapckqGUzciIhn9u14aG2ToOgQ+XsBFTz/SFhf/4xS8ur69Hw4JddD/XJZ5P + Mm4zw2CeUWYpZYxxkv5usDBjIMXvopMbbB6LzR4/HkZ44s47r6yogOyyAIG7e55wQYOCpo6goKAdHShw + 27/phGGGgKHmpnrGgkH2SHszDq4GpOyyYaboq2zJa99/fqb8N4QeX1ZaKlFWjIR2uFUAjWZibo0WwYTa + Rz49WBrkE+l2gJS5g4s1eglwFh7odDFev8CebEFTU1rvbhMO9YN29XBnggK82vZo6KHeV+DKOp0NbD5c + WRhgoC6DCiCiBXL+d8vgGWCeHncNHvs4qv+GDBJpmIzF2uprGsuKyfzQptWeaFWweZJudwfPo9dh7Yfw + oU9ZGY0cUlS0fzRClC34d2gycXhx6siK8rO6Os/u6Tm2qenI1tbDOjoO6R6y79Chuw4btqKne0l72+y6 + uk3KSsfF41hH2z2XKItyBYTKDCspAwI27CO33Jb21uY5M6cjS1a2RB/g1S9gEkOt1CSh9xFzqUDRvz3q + ongo2tdpsCxDNwl00UJo/xETbE6Ut73GwKfpAXJAcyw6AJIimdjZn776jILzeExq/vGd10FZY7P6qj93 + MZYR6TmCXjmzx/yXxfcOFJpl9oU99voNxKeCg4Z+RuqFk8uULroew4vZhf5RXV2FRn0dWquMohWhJLHz + GgVTaGT4lwUfIXQQFOwMlXcqOmLH1MNdkF0Rq8B0b+fycpPPE+0ibipCCGBUG+5pGyQv/N1Pf3pOJCJm + xp2ZhML5dNk8lR6MlEvhMG8GepAGz20PhxVHpPGkeGDSqhNsEmK4a13dXG1d5EOy7I2Yeib/Ev772Wc/ + XLyYkAYCJxgd9tC5PZG2YheFqDHPAJ9su6ggE/+yQBCNgRQkQ1/awUxcR1PMa2jYRddr5IqIm1S1gvHB + 6OxN+AU5vvgFpZquCERzUFBOMeBHBkvpshrUlFmfrquKsw9kL2UXjE45M7XSkpLWpkbhc7zzagMV6rcO + Hxl6BCFoT3bV0AKmVMPwApjMvC/6m/pHj1n2v1l/yohjjWv2d7WlDHO80tiatLTSh0pulD2MGlSTu6os + tEFMgr4OJSLQsjrypclIbdvrrLFc/yK/y2bmY5DP5nmDWZm1vcCip4CQdlBkuTwSRgvTgQlUWT7d5Sqr + mbfK844ipN1zT9T/HuuFmZ4elUgcWVREVtujK8qPrak+rr7+xNaW88eMPqO398Se7uOGDzuyd/ihvcP3 + Hz5892FDV3R1btncPLemetPi4vHx2Kh4vCsaBQiJRQUImT4Q1wYRRVVvJgrSTjoA9QomTxwr4l5pbaG7 + oUBKpaArTmVrhfy7a99DnhQUUEk5AiDU8wPhjnJw9ZTzv5iOIe5ALI1aD5LTSWQrmaJlfpLJk/RDq39a + fc3vmb4xg/YMHdI1YdyYIAOLbfDwT5DT4TOAYdtJNDMzc8H810/ammn0OrygX8emiiroB6KGI89DbZRI + DNpqxV7holCsPpRo9YEQFCyBBQoWtscqu5P1wxwBQpNlTayj43BrUQJCZ9rcLqiTR0kEyh2QwAzr4kZR + nQwGC39zzz1UFCKLNLX9SBu2XCcMAwhpJDF5BAZg8C7Toz/f8XHCaBUWIiXFdaGRg6oLu1dVzd9kE8FC + ST1DWV0i85D/bFxL71OHH36hLv5OASaVikJnuKYxyi6qzZXYRQUIc/iZIYX8JAZS0J3MivhRwMLxOg0p + jlsy/kB2yR0KvkIE0eAgmhUUBGixiAoKSjXdQQYIilc/pzszxW5qrJeC7Jhx2tubbQQaTN+XY6pooUL1 + Jfp6Xe2W5LdKv/Oq9JLArXl7DXLreGQZfcwwFHzLvOe2RTRnNLGHpIJDmz84al7iMS3FpWr2kaFT7+bb + YH2Tp17PrWhpamisqxMflYy2mIyoPy5h1GIAVFcXDMSyke/dy8a/bLOhJnn+dtoeKLTPX2SNTSL9Y3Eq + 5ihqvi4oqAWiKc+tRpzpudhXIII7ei6lK0/yvHM97xLP+1Y4TBqHS2OxC5OJc4qLTy8vP7mm5qSGhhOb + m0/u6Dh5yJDzJ4z/1ozNTxs1cu2IkWdNmHDiqFGre7r37+zcs71tp5bmZTU1c0pLN43Hx0UjwyNhbDkg + rvgIAcKaiophQ4YQl2nuj74n6kJUrqCsvDnmen3QMgBG/gESn0qWWvs4AbCZ2YatIQp4v6WgUcfNmKzl + rwxx95+XflJ23KjNBWm25MaTjdW/uldK5yyEnZkuJy8IXaW7q7O9jbfPN9LIjvYn/zUxr4b9loGCfWUZ + zX7pBvNyr9s2HN+UER3kntyoiObxsj1/asN5n5N5s2UBOPcioURVqKg1lGgLxdtCSY1/iheqxSlGKdMd + rhoSKm3LK8yr1ZgkiUaHCZDsGY0uDerC77zzziSaIdEJqpOvBwv/8ctfXt7SAhCK8GQrCwilbBCqSKlq + BBzyJ0AOFg4PhSh7tBlvcji8XIfb75mdeoZ0Lffddx8FBT/66KONFRby8sknk/BM+OtqYpt0taMZ2nVH + hQdQihaaCMJ8Q6XBQtiTqg1JVkbCrYgF1Mog3KLoSHGCckAW1DdSPgKuyZwALliH8jsWKw+Hmysrejvb + kdIPJkBQcCX/XeIdNvkMGVmwLA6yB6/TZnmvdH9zUmkkPZ65rZ3FRtbzpjU21gG6+k3IYKH1PRh9LEtU + MB7lcr4cbMv/0+YW8qsadvUXnWXG5D+TYdoffElEp/ifb45Tx2Ckk6gJ+ajcaSp9q/+nRi8DYLpYRwLC + poZ4gQcRdhgMyAE/PWHIwKgNlppXKaeayoajt1F0Fuuikq54+AVHeO4MjYL05DPCYTr2DZEI6W3viMdv + TyZvLS7+Tnn5lTU1lzQ2nNfWdkZX16k9Q9cOG3bKiN7zJ0++aMoU9X3osPPGjDmpp+fQ5qb96+sO6+46 + fMSwrcrLZsZjBLmSomwIQRGk3uWM2GNhcrgkCc2sqYE2ywUicWxsqCMYxtxDc4F6guDfhOBZ+PcquOrM + rbOmEOarT/Vs/mc9U7Ov4YXqR8nSIHicwbZCxFFgj54AX1Q+ywJ80XQ5QcRMz7c31p0qy3YqICqd3KZ8 + +r1TtQZhS8ah3tfLWBA7zYtTcK++dhnM+47nlTT6A5qU7EPxjqg8xpYRta8AQXpLXTWRooys6sOsfURv + DxoA/2jYn+KlKmQC/pdsV0CosBBQxEyKTKZFUcOytnBVV1X7eN9BJdZRKAUAg+GRQRYDI6SQqgt7FRcv + CBgVia3JPopwhhxjXw8W3r/ffidoRgg93QqbrXa50UIYoQAhNAvrSn0yWUUCM42FbZqEsRlhFYSCSLg9 + V7FFkHpm2223JWsoKUPxepIrYAOx8D8ffPDiqlXXR6PMlL+RSq2Nx1c7zi665h+pPmGotAfCattF822V + rFEJMwnh8tza0uLx3Z3tFWVcoKK5pOR2HMpTTIlFkaqDrPhxmaxABIfHY8PIX+o4ddHo0Ib6inist71j + q3nzqktLBx8gwRuFjsNOxTKY/v2VbmNePO0x8ieGhmnJSIA3rqyklDeBvxjNef9lABLFgR6t+mR1BtuC + L7lbmqllzsDkY14w8xfTmeEBnJfa8QGnsS2ZmW18FiHjrjq6tvX5KTaUXCKPyqifGRoqy8rLikENjVsa + 4LhkREABVPjAYMyJWqnvG10tFFRTHEIskPjLcXzKpeUqGCWrUMd4yi+4HC7oeadHwldGo7fGYvckEven + Ug8WFz9QWnJfRcVdNTXfa2y8uq31kiFd5wwdetrw4acMHbq2u2dtV9dJ7e0ntjSf0NR0SkfbsY0NB5WW + 7ks97ZqqPWqqFseiRBNO8NzhZJ/RGdcqKYmg6SBGc13c3Hdgch/a25qIhKFnCi4KwpkLsSDef4ZyG4MN + 8oEw17CcB5DmOBnrqDwXPQNT1fgwABjczelCFmX0n7Xm2b5VP6+/yQq71xX4rvu5mdX5uwjmCRBatla1 + liDF8WNHkUhd2qzeBX1L+3lVbYQbPNpxct15vL7wyT4U/VBZZf0m+Yac/kcP+1L72ZJJSWdH67DuITII + qDtQXcmaIISfG5QMJciprcEv2RSKN4eirepfEm1TdyLVGCpuccs7ukfP2nHXQ30HVVauLz18UzcZTyGu + KayLe1VWmiIPUpuJsrFfTzTC3957j1knRRVoxlax6IJIhMBBcA50wSWGaZTHThrf3uamaqZsQeV3fhUs + ROoGtfXD7ZPJZQG7xdK7du1aUlpveOqZ3914480UgohEriguvrah4cLK8oOQkmsHHnZRyawGQtt60Xwg + 5Cky2HV3trY3N1RSfbuzramsFF7IjrBJFeKZTEyrq+mNRqGA5A6F+JI+e0xt9cjamnJqdpOiSSdTqUyl + hrd2VJeSUqNPS0JO36JTV1dVoe0ykNN/Nx3Mr/kvVfYrV+AYZgP7NcDfU1dbLaYh+4LYpjRV0lhTZ8tz + ZGRhY4lotrmfjAvWx8zEjakq8yPjC+gSiCDEzql+tTHPfNdQ7e/LXkzJNfxkBlNaWF9fowti+NvJvtoT + 5o/n/K+2tkrVn8ricDYjVHxRZD6BndPhzvQOY/7r5x2Vkd0AoRYp+KhpjsotAmCWLZ2PKopG+0CocMgj + 5AKYRcZJ8pdZnrub550QCTO3uyUev6+s7OdtbY/19j7e0/NEU+MjVVUP1Nbe1dB4Y0vrFR0d53d1ndHZ + ubat9aSmpuPr646triLV0Zri4sNSqYNJbBaJ7Bb2yG22yCXAyZ1MxTEXOuiRXAY9Tqmmg2AwEwDBOfnQ + +MrKMib42vGsLkqJRvX8JrhA37aJcZd7G7Bwf2VwHPMU5Ki5U5McLKTbKGWv74CUJ66JYGmJJN/JVTgF + z122lH/lRPYn50/Tz/2JUKHpmunt+XzRh0FtMASbefrmgDSSP2m/vF3cTRIm6DQLfb6y/b+nfe1Gk2Fs + LPlAyMUjiEUHlDvISG5x1TzxawxmFBlgG87F+CB1hgtgJ6Xno5SVaNZA2BiKV4WiNaFIfShWq2InSLSt + VrbEyns2nbntwatPUUAooWxZub4YZDWKYF3EQEo0wt41NTYWwguxkZqsmwPGmA/GI9jXNu/+6Ecn1Nbu + HY3umCpaDB54HpQIe6OQQrCwKhqtJCcCeKDnmNUwJI2UgBAORSyKIDrh9rDbvePx5UH2uC222AIF0G23 + 3baBqWf+95//vHLyyVdGIhcnEmeVlh5XlFzpOEQ1iF4U8gqrg2pDuLnD/eS25sWora6srarA+Y7XqDwR + rykq4oq4QGX1JWtUJMLwgY4G1sskgJVViCrx69DJgrRtDGfFCSWkW6eOJvO7ddql4MbrMKnUr4INftl/ + +ofHKy7QIn9nttdmUpntykr9JvjbyFBkvx7yq/WvGalyVup5dDiMECZHDWiGs2w4zAx/ekc1lBvIlC0Z + SdvasFiXZw+7mrlq4SLbs83IkUMp9GhG0pwx2vyp4VPm40RkxpA0yfcMW9LfdfFe25EWYKTncj+HdLZj + pDXAo/WiCo1KdQ4X7JaLPfeAsHdmNHJdLHZ3cfHPhg9/fNGip3fZ5dltt312k02ebm5+pLLyxzXVt9bV + XVVff3593am1NSdUVhxdVromlVodjx8SjR4QCVODbE/KkJHJWlVQ8ma4Kj8iho1uz20F+D2lFyVZESYQ + TQddpc7SWC/8D0N3RWlpWUqBEA4j8Q0HF2vuhwKDjvZmikAFUROZO2fgMMA2A4c57FDPS3D6VlWRXE02 + gklJlY9Rw4dNmTBe5Mr2/EY6kOqEmqoGf/YFgX6AoAAbU1Yy8+XLTU2fFaiw3w67e8uvNEbstDkwYHaU + niwbBK+P/4IUfE8Hv5KjyF3KHwS4FUo4rS269odbxWRFm23U812nHP1s33/gR0tj4+abbtLSxEBrLtVV + 5XYRi8apOAjg1YeiVaFIdShSp5ZYdSgBIraGYm1uqqO6Y3zHaKo5aP4tqsVAqUHmpLCSLIacGTqxNTF8 + RMXtQ/G/IBoBQf/ll1/+8MMPoyMlpmLjqk7yEfG1H/zgsMrKnWKxJZHo5pHI+HCYJDgd2bk0y6mhXFkx + oaO9p6amJZFoiUbbNBZiSwQLEZssjUb3Li45sLh4m+HDRTuzEVPPPHnUUedpXQ/ZXg5IFe1RnJqDzsXP + rDYoIPQ7q56X8DggNUizixyFoOIEBREBVBa+iHNUJSmNx1Q40jqWj8jvwazRqsYCCDp4eCt42MGszGF7 + wZ/+vNEaETRu5b5j/ugjhiT9u8Ce/92MFFmjVN9/qOi0pJX5U0/3821fAngyGmb/agZcf0fLcZU1TBs3 + HmcE8vVA74/RAga6pFTGgGlgIMcAaAMhI3h9bU1tNY4C35Do0z6LchEzSlLNAHVUFD1QRMLPYkdJtDBd + LvM8YlUviERuisXua2h4eP78J45Y88yFFz536qnP77DDsyNGPF5a+tOS4u+XlV5ZUnJuKnVCUfLwWEzh + H3NNQixcd+ewt2syuV0iDgTOCXtMXokFYkghd1kz6W88j1Q1FMejfBfeQRoQjYYBGxu/Vf5VGAS5YcUm + 6itIs9Bd632ikv1V4N84RnPmAVbQhf9QLO6t1ujRWTi3+l5RXgoq8kbU1lSTjlUejRA/s/A3b0xFaZlO + 2u5/sudJhTuZytLe1qznTAUNFbKX+Slrqme/CwG8+XZHAUgb8/K/D+Zl7H8bbsL6TZpN2/zXY9CskMdC + P9DYWaBpPLLxo0cvW7xQYoX9D2lFya8do8pgeShaqSAwDB2s0wQR/GsRFIQsohotbup1KjCxWUAoBtLy + kNMRT44vKx8diUzWia2p7AOd2g8sJBph+nRBkT322OPCCy+k+N/bb78tnravNDH3uz//+enTpm0bjmAd + RdQ6DiwkaaHjYDaEHmFCJP9vIwmcWluG1tVNbm8fXlnV4CheSJj5GLAQDWcisVtV1a4JZa7ZLijvMHv2 + 7I2TeubLL3+2evVJ0egJVRWnDe9Z3dEyjzBkjcS0kOYVjJ3If7BC0FkkJbeUamKCIkXtQT4WvkjuUKap + RdEoc2qTO5TdGT4gNIPuZkHPgVnqYGG7ScZIuOHvz+CPIBgWQFpmP394yFDAAoQyf+Cxx4K8cUdgLGsn + ti8vLWtr9oWy/uCXaxf1kU/v6b/XirT4IWs5QGg4ogyj5mMsn2Zste1+MsT7RQSN6CUHDyyQC7x9YQ97 + kTbtGiCUL0Kn1P8BDMZuZFASGKNwCHFWWdmo5ubRFeVTo5GtPffwcPjiSOSWaPS+9raHt9328XPPfeqO + O57/9tXP7bffM+PHPZZK3R+N3hyLfTMSOTUcXuN5+5FTRutrtlM46lIxdF4kPDPskYBmvOeSj4Ykuq2e + R4ZSBDJYRJGnMtXjvAKEtARWF7TZb7mN5WYSIF+4OB5TbVWVjl5QayAiqVgRuaol+sLGuZw/rUP53NoM + zb7VWrdHZDv+tCqQjPoPL3jqkjxakXTLfi7fbUS0e5gYCYKKSzZTzME/HwvNC2AOYk3sbBzNeVPUn/LE + DXYO+A4OuCU3pa2tiWzjAx5qI25AxiuMJYiBCx6TNhPHRIe3r1/TwRINhGWhiAbCSG0oCjXEWdjmK0gh + Som2mo7xLSOmehWwKv0RFiKhbAy1DYn4tI72caWl6BIRKFLwSNxsK4HDmpoFQSFciv+deeaZJGCjPtH7 + 77+PfOYrDbf/50cf3X3GGft1dBAaARZOCCva2u15bY4DK270wp2p4vporBK9ZTKJirIWLaUWVQoWbkIY + og4LkdQzO7a3z9b5VPkccsghJvWMlFhaD2Mv1ZfuX7XqzPq61ZUVK5KJeZ7HrUPVAhgD1WVWASYj6Sz8 + aPXURJ6IwKEgYs4i620IlAkTWruGemzD6/zJt/gzEum65+tmNe3r9ZPXjH/15M5IYGT6m0E+A1f2BdiW + omAg8H/3dw8OY82mM8MEl6DrCtmgl/nVJnzsziWjz7Tn/nmEzwBgBsPInEVyFqEUAdb5v9oELoeICJsU + FiIDdB7tU6IYiY0rtI2PGcFegncyvvv4l8MI5U+wkGMChepP5CqRyJSRo1dus83WUyZMLy4iX+hqz7sw + Er4pEv5RU9PPt1zy6AknPPHtbz9z3nlP7bjjk0OH/jwWvdt1r9NhFUd43j6etyJMojVyWXgYQqYruQ25 + 4xX+DSNftue24BQMA4FeOTZPIuiVJVahoCKjEr+R0cLkNFtlftNGYFU2xNwiBYQlpbWVCgjltmA/jfKf + j/f+E7AhMOfuBXfeB8EcsDRgZp6d8QCauY/pTXLD7UlV0KP8Hpfd8TJ2jhzaZ3XdAjM6a5Vv7fCRM4sI + ZkgTv4LmVioJQdYCw4LFIwfw3TFZaW1pZAq1zoPLQDvIXS24FXYB3MCDjOBSzwGxqBdT2WTAwmi5poOa + EUa1mTRJWhmNhTDCWJuX6vQIIkQ+Kh8z8oqBtCIcbi0qaotEcMXhkINOwW8ECwkVP7C8fItJkwRCUJ1Q + 5OG73/0uUlLykX4NZtL33333hqOP3pl0TeEw75ukHsX9PjSe6E2VIEVDoqkIovaigUA41bhKsJALQQEk + qWeITCc/yy6NjXbqmW9961uPPPIIV0HNo/XEwv/+986DDsKMDNZyFgoo4qQUjauQQhNBobQcYsvr42Oo + oUFEqRphFo5QEFBNpF0/fY+hY5BlUOidCkKo+JVMouZAsdB/l6ZDNzXUUbAt0G6pzRnKSRAj+7IBI5oB + RSx/9jzUYGKftyUL8IJJtD5s9kiR9TczWViyNkYV+ORYPg0ftfFPdgsQzh89A8zznUy+/c5nA9nb+oAn + Q6K6OAE/xTx0ufl8kDOIyLhTWVEhbpIcmBSqZ0GdsaP69sTsXw3GKDGh4VuKEUbCjZXVYzraR9XVjI9F + lY/Qdc8Ke9e57l0lpT8dP/6hFSseXbnysZ13fmzTTR+qqb5PVYr3Lo1Gjgt7+3redmGP1GvTw95k/T72 + ei6OwC6UnxxWC3AqVSo1xDhAoHIKMl9QdS00sQs+ciF+CwOzsPqbaVNdVQ2YZwyn+ddr3+uCkwkz/8j+ + 4pu15VnYj0AOSDPUdEHJkfzphXUim9AbwMvigva8qy+CaLpjsHHBnuyvDKaA2X09A4QGYv1ppXRIf4S3 + xhp9vf0xRU4AD6Pgtuyu31kJiFSfzLs5AG4OhH7B7xwZnNMl0tYnrZU5DS9TeVlJJBoLuVFFCilGH9GM + ECAEDmOVaok0hiJtaoERhvUXQJHIQhsIRTVjFKQqrFt7ucYgnAmwkDAGeOGqVGrbQHUyd+5cGBUuQ8rm + vfnmm1Ts+6qpIU7EP7z99rVHHrmiqQlqSIwdkXYjiD8Nh2GHmCJFTgIisvAFvihYyIVMpahvkIaN1DO7 + WyIgST3zs5/97Be/+AWITtGl9eCF//388+/utRcaV0IYEelMQSZHmhjdJAwKJqbeqGb66SyClGIpRaqs + arZpJmUv69cVebepv9PXFMxuEkE5KhO36+Es6e7uGLCn0qe70DQPpWxOhvNhqqtSTqk8LZnKhJ158+WV + M2c33y3/v69tCUYE2yPYHxAqc1kw0pgRJ3ucClxAwWGs+X4GPrPZnoHDwqOkkXcGw6hP+0hIg3GJO8lT + IKtdlXJBqfbZY3H2WK/AQEBCAWGWOsaAR5ZkxgYVPcSocuQ2NRTXYwCHChfhy0Xkr1I2THc2fr5I+ASg + TgFe+IdVlfcPG/bAhPEPjhjx07raeyORmz3vynjs9EScoWArD5WpN558bCQBxlsR9lrCXlMk0lqUrI1F + ubYysoAqd6AH/iHJUeZQZY+1mV/uVai6VCoVmSJ4mhEqZhO0378Qe/aQPSHIXKk9bzDfA8bsg5rBP5RH + gZrDf1KcnlkIA7TeJoOaBg4lSt6eJAVokemNNgTm2B70xvlG1Bws9N+D4IiGDmbQ0Z4H2i9vnutdlddm + XotUB5ERFxVgZO4ogiJ0VM/wrlay4KltmIQxCHBbzcFlljCYAWQwYKiBVhVrxKhvjwCD2dceLpjc87jU + ERgmcRNCChUWloYiFQChE62KJOqisTbHaw+5GgVZ4IVZQCi3OTCQom+Eu0iKkxYdxzZWY+F8zQvxF0J6 + kIft0t09e8YMoYYkbSE4DxEmdR4gVeRtwWtIMrb1wJLBS0x//corVx955K49PQYOYYcYS9sdh+gC8A/4 + wUoIKQTRBQuBJbJgCxaSRk6lnqmuNoGSu+66K6lncHy+884765165vN//eua3XbjLlENY/NwmDLCxPhz + don3wMNnEq3ldMDgIeR2ADaLRanpnOTNFHTsn032B65in9RT4P77Gb0cu5MkTqNhDNT5fbRgr83RqnEW + joAhqySFvrUAcDNSMwCZH2QbcyvMn9lvuO7t2d7EYI0/YpiD2AhpDVtZQ5UMSdavBuQy5k1EnkGEYtaY + GIx99i4ZH1UOBUE7t3DBrIXzZ8IFuSFNdfXIzXPoSDA0+/Agxy1E/vwRP88d6NNE5f9ToSAJaI1so0AF + x2MAMAED08ZSLV2BtyHpnJ5MHNDccHpzA+Xdv+V5N3ne7fH4D1JFP0gkbg+Hb3Ddb3reWixDYY8cpBhC + qSbdifHTcxtIFhNWQpiKSLg8Fk1xOqGAEDt9Cs6sEs6qlqhG6hb6X4ILlHaSvtzHfjXg+hZjg505XzJ6 + okLkWO6ePQ/IbK/CAAKIVWKxmJ/3R5CvEE207d6Cjn7PMdMd88XueMZ8avU0tXvONjIKm391Hy6omvHf + ERsG7FfGfmvs9dxTgBB/G93PvIxZeEkuQ8Iw4gnSHjF/lePrJ6UEqGY2yUHWO4U3zzxfWars81r0tE7g + 19/G5JTx4ooXCjUMl3mxmvKKrrJSSja0qxydXns43uEk2hUdJOJerlPsM7aBVFKcVEcjXcVFbaBLNi8k + BTbZn1fDDhsaFk2dKlhIXfjDDz8cavjjH/8YryFB99gYRUTzlcLh+7/8JWV79x41ysChTE47HAcHIQQR + RAQI+cINECxEBIQgFl/jVhoLST2zODD24vg8++yzSawKu13vcPv/fPrpt7bfXgykJAof5zioZsBmiawv + mGIG2yM5Ffsq/sDTMdle1ruvcBDcyiYRQ//HYbOqikrenPzNmLih0Rr8fDARS4wdPrK1AU1i7gvMwXXq + Tb+Ap7EW5wOhjCDarKpaZI0gShSQjXb5c2r/99wNLRVMMKj5eBbAm9qRW9FQU1deUiZh+/lDnqEIgliM + GjJwWBim1nMoXrSenk5KBmpFqKpcKkQv3y7XB8vJmDSzB3cz0GfQUYBQRR8oGFSnAMuJytcJZYxbTtBI + 4ROMDQdeHeFJidiuXW2njeo9KpU8RVeEv8p1r3H517nMdc8LeydGInBBUJAE/WSHhwKCfz75A3o1/4vr + A2ryp3VEGtdy/tX5Y6VtNinMbGl2se5GDn20UbAw2mkc9GcSwZRCHpPHiC93w2CeDPeaoGdJaSxjgJnx + mCeccRXbXVG/s+rq6LF2t5GeLF0xnxHK+qCL5/C/LO+g3iwHOIN9LeOKbGYgTUfsZL3TBhFZq2pblpZR + HMqGWL7TKsgxc3F567mhOo28ksvKyzjIQQlYj0fjJJWFk9IzBrlX/mYDnlFjd5Ta9SGkhLgMEeBHyiOx + Bi8MJrC0hcMdAKGig6Rbw0fIEemMkmFZXVKWcMapIIdNPMbwDYoIFs6IRBbFojjGRXJCqPuhxcUrRo4U + LBRqSKw6JQBJTPr6669TERf5CfEVXzUc/uODD+665JKDNt0UOMRXgbFU2CHKUuAeEGLhBmClNFhINW2w + UNKwkXpmyfjxcglbb731qaeeigiIuvB/+ctf1k8QCxZ+c7vtIJ1kt8GXOdp1hkejrZEwBlLkSEIK1fwz + 6KT0qrKyLPvDeveSvnbkWes330/E0P/xFVErGE3BfKKlhSyI6v0e3IdhEI2fXRTUmo36B7F7doCCBt38 + N40xBV8jubik8rV8GGkQfSibrcUk9S9ZU2mzvRp9rD+yhyQ1tAXDk0HEEP6Shmo/+5c1omUIgW0yZaBJ + EZkdg19lxmibXshty4y8GUlnBjiD8ToACJ/QGAywR/wA+RRoZEZ8gDiAH8O9FA6pYL1gM77QGYpiCcEj + MBn0ghQ20V1j0XmxGBKYlWHvyLB3Uthb63kne+7RYZdXfo9IdItIdErY6w57DeRBxpcG/sH/NPiRIIkc + prrCkNC7DP4JEGp4U4GDzDAUP83GSPOn7BiwxixWl23ptX9S2zNeG89rMM+QO+Pfn5wJSrA+EOdqCho8 + IDPvMSzfeAdzgND0h0wXYtbZxbSntZH4EOl0wT5ZFtEc8ymb0STJxufvpZso33kpW1udSZOcpUudgw8O + HXts6IILQldfHbrpJrXceqtabr459N3vhm64IXT99aFvfjN09tmho45yTzi+4tijhy2YV9LZGSoONJg5 + ShkuXYmfCwQCKvDjnpDFhZTXySQRnFEyBvKFP9dpIQdAfX1pe1sNdgqOxovLZHvwRSm4gfL654w93Ctd + sc0XMUA66V1MAtX4ChyGOVMi5KVCLpUrGqBIFDUhfMIta3fKAkaYc8QsLGQ6rKPWsJGChcPC3hbNjUtr + qokWpyYZsfbQKYKH1kSj+zQ3LwoysS1evHj//feHV910000PPfQQmcyAQ2GHX7Wx9JOPPvrhpZfu0ds7 + N5WaW1GO5x922O26AoeykJlFsJDML6QklTRsu0Yi+xUXLwsqT1GF8cQTT7z99tuhtng9KUq8HsEh//rb + 385dsgRj8gwMpJHwhKJkTyyKgVRFATJe6HqkBggHhylf91a4Bkf2DrW1y3QPVVBpILe29NRgaus323j7 + ZBaZ8xL6U7FMF/fBzFwzLyJJiMePHgV7tldCdIKZuDqsTOj1sCRDR9Y8uiApDMBPhipfBCiHykSP5Wjo + ZawMyJwZ4FiHiF+PYupjqJ58kQ/zTmzFWClNUm0ZpgP8yzGEZg3ihtwEIGk29sliDvD4uKJh0hhIDcYw + XsQZpAWKtPcO+zvcjoouJELbNOwtCitFKNlhdtf/bh/2KEO/WdgbE1buwFqAU+8CgrIv+FdVXkYgI+MR + t0DMmxae+d+l5dwitY1pVcAX83dRaBpgmAzH2RTTIK628UaUIFYyzOkH5IOfoX3WrZaG5HJK85j8R6aP + qeo9BQnT7VJQFrDZuKi+00WROy5aOHPK5LFBvEQGCANc9DupwUL2wm5JP6+prpJSiwr8IlTVCE+YEDrg + gNC114buvz/0zDNqefJJ58knQ489Fnr88dCjj6ovjz3mmOWJJ9R3/n38cffJJ90nnlD/Pvqoc++9zjXX + OCDowoVOc7PCoVwI0AWu8wtWlJaGzj8/dN11zre/rZarr/a/6D9D8u9VV/FF/dvPIhtceWXo8ssVil9y + ifoOWh9zTOigg0K77RbaYosQF9vRESopyWoet6KvShrM5ajDZeIomOFVlpYXxZNKVkGWGVyGylhKV0/G + vNIosayRpmR1d/2QMUUNPb5pVOanOle64oVCpE1AhdhIBQuRQY+gZixF8opTC2Kxxa4LhCAlxUxKBO6h + JSU7DRs2J4hJ2GqrrRDRnHvuucAhCpRXXnmFTDTkuUZKgw7lKyWIf/3jH++56MIjpk2dl0pRyWi0FLV3 + HElOxsIXbJUEhxDqR6mKLVOpHUtK9istO7isbOsRI4QXLly48JhjjqEQ4wsvvPCnP/1p/XKrfvKXv5y9 + dCm8cyrNCIdRHqnUMFR9q6yoLEpiWWCax6CBL7og/fq6cS/7fDRpm6VbHH/UqqFDkQ/39+mLHNqevAD8 + fEONxdgMXPnQqP/n46hBMtYwKJASBddaAHvKcxlxwxI6bwAPr1NRLEkwQ2ZCnWU69Wfugnn2J4NUvuXK + V9Do9bb5K8doJvv5Cos8G5oPh2b85W8qF5I7NMgfVnCkFtOlGaMzWBiAWSbkINjSbG+sncr0Khlb/L2y + YUkgx+CK4oua0sHtiHPA4delAW+qcnV7LOAfLHCsJoLNYa8KFUwAgcoEqvhlpJqOXUGhnDhkSCGsdXyD + cNYX/yrYjEZil2PwzWeEfgstpAwAzDYUi9/RB0WOpn1O5r5l3WR+BaIQVuiZR/79z1rDNhxKsu4FPUH3 + h8zMJsdx6PcHupbKB1tdSZybMbzn9Do5oJmH6e/QtVRbSzPeBy0eARed5cud664LvfCCAj8w75FHQg8/ + HHrooczCnyysf+QRJ/jXAfP04j72mFoef9x74gnvySfDTz0VYeHLI4+E77zTBX5AHVvKRiPwoVAspbqy + inth3vyGhtDzzzuvv5585ZXUyy8nX3op+eKLiRdfjL/wQuz556PPPRd99tnIM8+E9eI9/TTn8p56ymCw + guQnngjJv1yF/g6WK/ym8QLnGsv9C/zJTwDd0IknhlasCI0dG0JjAMnDw0Kq3MwkOmgca2iqWc/z0fNj + Lc9XWBh2XKpukf8wmvDiSaw28YriqtbKlmHxmiEZIGTq0dhQS/f1Z+V6HOKoFOpM4RfVWIhzixiAVi88 + NBaluubUSGQz6gEhn9FmUgrhUiPiSFKrVFevGDXKiGi222474BB2eP3111Pz4ZlnnkGHAkFEiiKI+NVx + xN+/8cZ5u+8+JxbbhCq+Or3TMMfBwMugDhDyL1io/IVkz0kVLUomt4rFdib7TCSyYsgQwcI5c+asWbPm + hhtuoNm4PD/99NP1CKv4+5/+tHdnJ6qZccR4iM8yGm0uKalMJpnANDfW9Q4bMnXqePT9///CXv7ZeY3J + Zjl1yviKyvKBgLBPM6ngU/6U00c/zRql+1r4Z/qz7wWR6ZnNIAUgGUWKk0XU/NbDiWaZms9hEhF1DwZn + hjwVuWEQL2P8zMG2/OHMNoJlTGQyzmU7lnLNZcbymQNmsq+M9fZB8niej0/ByK5siQZUrPFduFHGx2aD + IqGNFUVlFUXKkqxgRteYtPmZASSzkjWChZA8jBZAXaOOggARu7QilNpJAGQ1YYhYpDUKCqXzF424ChF1 + atB8LqgAT2OeYLN8EVkMf6O/UFoeYYrBktdInw7mQGzGLBxAr3VLDdr5t53mATMMd0asqzb2zbb+pMcw + eOuL3wd8w6k/b8rtJPgEzVPT+/oGhhz7pwWN/jb2ZEsP66qPYQX91rcUBAISIN/Pf67+FdjLWSwUVEAi + KCgQaFDQAOHTTwNaseeeSzz/fPLppxM//nF4zZpQz5AI00d5zXgcKL1Li1WecfPyYlN99lnntddKXnml + 7OWXS196qfjFF1MvvFDEQZ59Nv7MM/Gnn44ZlH3iiTDQCxnVDVB4HAAzUC1o7S8C4QWvCJrLwlX/6Eeh + Cy8Mbbt1pLNlfTiDG3IiDkY4Zsd68aJJSr9ESyLxKreo0S2GHOmPmaeYa+Zm0DEQtCqLgM6TqZLOuF5H + qrQjFmc/yV6mwu0dZ4nrbhuL7RqLQQ1xIRwZjR5cW7ttkOEaRKHgw4EHHojvECnNrbfeSqDFc889R0qa + 3/3udwhScCJiezSguBGVNRzq4e9+d/fubnBIgg4pum3gEH7GVRDzTtkmNLGztc7ThNubosQbEm7/z7/+ + 9dp9912RSnFwuCnZzPFT4nNlSgNpLytK1ukUh0wbBxkx+jWDZf7Ma5ANMDjX1/bWkf2vARwaOajl9AtM + qXJYIXISetE9pGPsaJ6qH/Bkb8B3sFwK1LE5Q3QyGtfzRH0QK12WP6blxcKb0SpnY9vOKd/NkGcDpPlJ + 2+jETGezDftP+Z7FRQKQM+zQOMwEOQxYmn0ztkeBGVyVQAvfcT9TGSOVUkmlg30LGC2VXFNjFVwOkAPq + 4HywQ6I9ZCnVAMl6vLJApkFBYE8bD30gLAyBivNFrUXlSgUxZY1mhPav+rv+Vf0Y5E/LBn7/DsjpdO7W + zA00d8+GpTxDqNqeNpB2jrA5nbXA40LIdMruwWPNSGlsdAys4pn5E7/SAtFa64Xv3M8IN1OuwOpmpgf6 + VgmZnplxWLrxmDEOGPDUU6Gf/UyBQUH8s1dqgFGLgRyBQM0Fw08+CQuMAIHPPBMDtDQKFr3wAtyu5NVX + S59+OnXNNd7UKf0JWEaPBpKdN98sf/31ytdeK3/1VYHDEuCQQ2k4THBwDYdRzsVJAzj0BI8tLMxCwYJA + mI/0P/1p6NJLQ1OnFphbGyATI3bOsMPooOgc8dBuOOmRDpVRIBJF8ePFi0uq4yVWntL8AUuejG0jZeym + 6F0VUWVaewKQYF3E0zaL7BIN9Ye2te4Yi+E1RFGGoPRo0g/W1m43ZsycIEPp8uXLKeR01FFHQRBJ2w0i + oi8leTdpr6GJGE7xxsEUP/nkE7yJGxEX//jOO2dutx1QhIBzgueh9gYLcRPSfha+gIXkBSVvwEwPp4iP + hTs3NZnUM9TckHD7X/3qVzg7Bxli+OHbb186dy6SIpypc5DwUHQ+iKPA1Kwq6DLvC8QygwSY/wc3GzRY + KmCzMMyfgdm76+9GPpNhcYFZVe3CgBKkv1KDhcpIqbXg9sdAnaxkEAIDICl5JlN7Mm6+56xUf2Kyq6oq + zy71kKsqzEHH7DFXZTCgNlsiKskz/bE1IHM5birZIGuUD4hRlkVUAECL3ZSfTxYDdeq7WhTXoeXUcxCF + ekGUyl+pdaRhlC/kAE3yr+Z/ogX1oyAsLoj1j2IRHF8AuMDROEJMJYgRtNPfc2HPgKJsAP4BJPzLev5V + x8yCf1sN5GI0QxCLRFa6h9hkrYmF/z1Y7RtR5VkgrampqKKyHfF1XBquJqwIwb4ZA2gWCmYLTQUyLRRU + EBhgoY+IGhTlaPYkTP0pH+M7kDWNjb4JERQUFtgXFzRGUciTQUFDBAOLqKAgEBgDrp57LgmTe/HFYlDw + lVdKX3+94p13ql97rfL66yPjxmWrQC17zuTJoZdect57r/qdd+refrvmzTerXnutIoBDxQ6BQ42FQg3B + QtBXeKEPhDYWAoqCf/n/2hAoFmC5fM10Q3fcEVq2LNe1yR3joZNXa7NpU+AWuSYozeV0lkonpeEwTk/R + VU9U3WCkNAN+xF9oUl8yfCN6FJchMIoIUxU8wkZaXLxdRTnCEETVBFdgKUVEc1gkckw0elhV1Z5Dhhgp + zaJFi3bccccDDjjg6KOPJvSQGPbrrruOAEQiFh5++OFnn30WreZ7770HWfzggw/EggouYpPcELcice63 + n3320tJSoYZoSnt1SIPBQriawsJQSLBwW+ILUdDU18+dNk3MpHvuuefFF1/84IMP0rb+QwxpJ/beX91/ + /0Xd3UwISGGzNUDoeeS1yQFC5i0FgZCHqkw1yvv1/8dn0HLQgo2j2ahFCqIjqctQnIrUJdjAjAL+ikBf + Y/7M5YWMJYxfBvbMTFDN2wJVuvxqhhhQUBS5ehSSn8wA5H/NI4Wywt+S/APU/GS4l8PaVC/YMSNaMUxC + hl3+hAuomJPKCgLXAqyyFTEZ86bl6MqgmtG5GOrnR8RrKCLei6UfeIPo1KjKCmWDgUBjk9SQJkyLB6oG + cRnKDQvUgOdjHjH7RiCTB4S+FVSQr7Wlefq0afPmzjFLjyop54NiV2fHzBkz5s2dO2/OnC0WL9pnz90n + jh2rg9o10mc7NYPJgbgnFbmUL0opo+6y7f8zoGgmClkiIyYTOr+ocivqa8rMReRp9mEDyKxnB+2RjTQ1 + Nk6dMmX2rFlz5szWi/qgfNG3zngZbdWM6pMcn7cjEVdllfjgF0Tzif9MULAfCAxQ0HcQPv6488wzzrPP + us88o5xzxi8ICoJMgoJQN1AQJgcEQuzeeKPyrbeq33679te/bnjrrfqLLw6DwfnvLy/m7Nmhl1922exX + v2r6xS8a3n3XwGE5hwJTX3oJLEzCNQULhYNqXpjBwjwDqW8mHZDvmvuAlfiuu0Jz5wbmTClKVZzC3N1Q + V0sZCvqAonDZ18BIKz4+lbFZGeQ83IZ6gMXFkgkXyYxpAq30ZnMcwUIDh2ImleJ/hKtj68PxJsITvIbz + HWep627teUSUCxweHo0eH48fU1x8QHPzjiNHLtDQQucg7nCnnXbab7/9Vq9effzxxwOKZPGGKd544413 + 3HHH/fffDwPDgkoMBqlecNERyQAbAxcJxhDP4roaUZ+7554d6+tnIV3RHruRjgOK03jgkH8JexdjL1hI + /J9oYu1w+5133vm8886DxWLU/etf/wovzI/9p2208IVLLrmgokIVo9AH2YY4DcchkJ/TcbuYQ+BwZUoB + EBZUjWLzi4WxC2WCXr82POTRqxDvwDGAOY+300TXGNTJmNCDyaz5CTdDIhrXYgICGyjjEETmYE4oKWlu + aMg3XBhcFBRk6KH78a+ZIwv8QBJoXgCBuTFVBhoN/pk1gkYGHQMU9NcZeYsByJyBjw0YIlF/COaJndPC + Px9hM7/qRNKqJH1RSnMTlU5F2xslnNwifEL7giQvVnS5+sHQFxvA7NE/MAkq8tEHyCk8QFwwY9OpnR3E + TqnDGhcdf3JRoHshDmf58CzAU+hITs/AVqkPlXXqbBzNUENAVHjeki22uOeee8jcZN6dSy6+2HDElfvt + 9+KLL9qv1XFHHYGDRtyc0v6+4NymwjYzNrMHw4btLwFCmsmNWiEOzoAUWg/bdAALGgUj9URBkb8ttliM + rQvTkX0Vc+fMoaKFsk5TMcpXI2d8h3R7+PSkcWPqamrE1b3lls5LL/koaHQx+aTQ9rTBBZ96ynngAee7 + 31Wi0Ntuw6yKVsU3imqLaFyjoE8EYXJYOIHAd96pBdV+9avm3/ym5YMPOl58sWGPPVSQhnn7zKu9YAGM + 0P3DH1r/8IfO3/629de/bv7lLxs1HFaDprBDfIc4DjG3wjjxGnJS4YUChMILDRBqRpjlLCxoIDV00BYH + obIhPqSryy/HxrPCLqTCqMQIYi0yjGi4U+MtyCWlCxKoabApwDioYucR1Jb34TGQ7YYZpDmEOVAOFqLu + QESBx0sVUtf+tjE6Vn1zCKIFh/smk4cUFa2KRJDSgA1Hl5SsamjYpbd36aRJ8zbbDESkNCChe8DMPvvs + c/DBBx955JEnn3wy5lMYGEWAEZ1SQZdsL4899hgCzrfeest4FtcjHuPNRx/dr7sbQ+WmWkEjWAgQop0B + C/nOJUjqGQm3VyGGZWUm3B7tj1S3J9weXpiDxLTnHx999PCqVedHIqdEIkcQkqEZIUA4S5cnxAxr6vRK + KGFf4RNiPvna8M+cSGkWMKEHvQeT2pIt5o4bxzwn92PYqgCMmZ75czHlk4tQRF7UsLKJOqxlAjL4p7+Y + rTKZLIRxiJROmbB0kmgLCIXz5ehgsrSgORwxgLqMYyaY6RvJQ8bgaZMAOZGBOsMScuyfGtUUtoF8pcmi + 0kSSvCp6UdnFIq4jtfdAecNXGHNTiSKELXIoxl+pTmD+NEY+AwA+GPQNCQquAq6m0S5ZXVXBvzmAJxZj + ptJZ0hXNArWGBZAzqGkgjZDQ0rqqamUFjahEHDgh7d2FIwpZlDYINBognDRxIpn6bbR7+aWXBAgJcd1h + ++2JWWKWaVBkh+22S6r74QOhhYIZlNVMMfB9SvY4bSJmwgLo5AGkL4uRQwWgyNxLc0GVaD6G/UCXd7ZN + 1jIHEnAM5kP+hEiBqAAhlwzfpdApwkAbCOfPnTtiWPeMzaZUVijFo20dFVqCHLqxvk6iLKCDt9yixJP2 + 0J9PCvNR8IYbnL33VmbDLbcM7bRT6KSTnPvu8555Rrigcgq+8AI6z9Qrr+AULAO6MG++914DYPbb37b9 + 4Q8df/pT1wcf9Hz66YgbbywbNizLGiUv+PbbK9PoX/7S9eGHw95/f8gf/9j5u9+1/frXih1iLH3zzWpM + rFDDAAuNjVQpVMVZSAgHC7SVJQcI+5LM2BdubggbwwsPPzxUVJSLfPlYaK6E8ZT7q4r2YB31YkVUP8PY + 7yTCEXDM+igbjkripVLSFcoMmRVWwfAm5YGEGuI1RA+JGlN4lUrp6TgLHWe541DOcAdVqFpFWaAsXR2J + HKUR8cR4/KiKilVNTXt3d283btzCTTedP2sWhlMSeYM3ZDuj6uGqVauwoBpcvPrqq2+55RY62ZNPPkl4 + IogIGiG0WScx55/effeQUaOoOYzLECwcZWEhcAgWSuoZwu3ZhviQXaiylkwuDUIM8XQSbg8WwgtxZ0p3 + BxFBwQ/efPNHS5ZcFImcgU04ElnleQeEIweVl6NHxegqSUfh0Nx1U6f36/cR8iLr9ImFveI5Gk8GhmHD + hjQ2ZpWz4K2gh2QMBoHs00yYBNgYJbQzT4idzMkCuLSUooa35VA9dmSMFiUzrUXApuuj5n5s5Yv9GwBD + EVpyKmodqa0I1TNxqcVaXVldpSZ80vMVe9Ib24zQDhqz1vt4acZKv6ofgEdZc/J2UiFZl7plIdk03ysT + 8ZbaqrJUEV43STMmYypWTUIpBAhVjk0VeIBYWyqzZ8Qv/TAhmyFlQV0GxjQoZGocKsbDWYTYGYVLPpnT + a3wDqZyFNUxuSD4iRJB2avJkq0D9Nhsolb1AMkG7rq5OKrh9//vft3GirrZWvIZbLllyySWXMNk1v8Kl + jJom+0rVqbUHMQIUSzPsuQJrcOvW1FC3O8NZ9U2wb6x/W6xrURelY8lyjKuWZMYylprZEltrp2ZkRG8v + bhQsW4SKmavA2FtbU0U+eoE6m2OqJ57UIiZFKxU0jx7lPv+8LxC1h/5+lKLEJNx3n0ME3lZbhbbZJrR0 + aWjTTYm7D110EZZSQhrEIgoXRBqDObQCFBQiCKv73e/a//SnIUDgRx8N//vfR33xxYS33+5ZtoxGaiIV + vLVEDu+3n2KE//jH8E8/HfvXv/YKHIKgUEmhhvBLixcaf6ERziggFB0pDYa/8m+O2LUf1UzOtAAgvO22 + 0NCh6s1dMH/+oatWncIHQWbw4SkEL7XPKLi7ajoI43cQfMVT0aKyIlI/FpeUlqlL1dYSkpyoJB0sNjTK + M8tao8ezHGrIsM6RCK4QSylw4psZXQc4nAfT10XbKVdN0CG+N1KVHoTJNBY7Kho9FkSMRE6OxdYWF5/Q + 0HBIW9sew4YpXJw+fd68ecTmAzwrVqzYZZdd4IsHHXTQEUccAQ7xthDhh/oUoc1vfvMb4PDf//734CMx + fvfaawf09CyMRmfGYhPDYbAQOkuzASqwXOQzWHqnuS4SG0mvulciYarbA9Wnn346eIzNFmstpwaMf/vo + ozePGUM50zOj0eMikcM972DH2Z3c/LH4TNeFDnKKzki0PVlU4XliF+Veb8SAel54IpB4k/rnkbzh8LyC + QDhI5yC9gt0zLFCfL4sX6jXMxsWZ5wOkRRz5Sjvlpxxks9foUUZtAwsZM3IEJVLlzTS75FhBM7oDh+QX + Scqfko1ehh179JHvHBxNhMo+DGCHY8VkoogoEmD8gjLGBWv8wSuHJSirJnFmmvZRXYjsYiAfyTbJXk2u + MsrvUXtBivBNaG+bM2lsLVlqMBLqNC7i8VL2tGCk1ikcM7lA87lgX1bBgITZZkObzxkBix+WwIkMkzMI + Z74Y26mBxoDzqeNk20Uz2JOzseGCsh6Q0JwvNqSra9asWdh78CAYnIAwQfv4df68ecx6sf1YEOIDoYRD + 6jsmups8ialaExS6Vyb92KiRQ4f2dCqGHShuZC9usRxMQ6law9nLSopxRooN1hLpKJ2OBIME0JjlDDa2 + gcA0Gunq7MTpw5hMLg4bzrGTs+RoSmkwwT+IdCSZMNF7bLD3Xnj4MkDYl0wm0JgoLHn6aefCCx1QkJA7 + lu22U7xwzBgVsf7ii0RKKBSEqAkKvvVWDaD1y182Yd6E1QkEfvzx6H/+c9x//jMpnd7kiy+mr12bqqzM + vNS8dMxCV6/maN5nn4397383+fe/x3/yyei//W3EX/4yFCop1PC99+phmdpMKjbSImykkFEo6dNPQ0zD + kNRDDlHHOeSQ0Jlnhu6+W1HD/FAKGw5toZCNhdwWhDPbbsuk3IMyYUigSrw9uyKXiyCacfToJ64jqUIO + RtFULNlY31CviLgWy+h5qB8+koOCqgNoHw/H0qOnD4riMmTE5TcpHiuBhgxUOMCkCuCYouSmFeUUvIZd + TdNRFos1QVzhODu77i6et3skCkekrhOONEUTqWobi1Hbdm0ksjYeP6Gk5Ojq6gPb2nYeOXKriRMX6SKI + 2FEXLFgADoGLRDVgpURo89Of/pRofcnlNkg9J/fr1y+8sH9X58JYVPFCakRoHSlA2KbNvBhLRT4z3XHm + hMNbQmrBwlhsm2HDRDuDIReZz6OPPoozgAiQt26//dtNTRSpPy0SOS4aPdLzDgEFHWcZuzsOwlrJu92V + KOosKUd5y403dtENUcRoO6T/UKhpMG7sCLCwfyAUpBlwm/wNfPjJLh5V8FCCVXIEmfwGMKn7oE69yLBi + TpGNhb4dNQA86aJRsFCVjsrFzcyu6lbo8+jZvRo2tRo+yzWYgUPfQaMOR/OgPTHN04KpulqpRkm/NK7F + BnyXnq7qLmZPAuR1sdly16lxXQoPtXlupy5FNFQvQzy3Pez1lpV2lhRXhT0iEAg/gAAy+Eo1WkFEm80E + 9jrFGfsBv75+snlhwOoypI0XWSVw0IISG72MIdReiQCl0DZZsYBynLwtszBSGCELQMjrw4wW378Ztk47 + 9VRACHiD/6Eqv/fee/OBULEtXQg3QEH5IoiY0aMa+kiTsChQRskHPx2GIQLUDIhqiQ0LtRnxpIoNVrZR + mwXBG+ZPRdXV9MQWOvl6GX9OE4kwuersaO8dNmzK5MlcDguSGTI0sS8NttSkvrKUxojKRu4AG5x3ntKL + DtouqoCEFDNHH+1svXUGCLfdVvFCONNLLxHqLhZRJY1B6qlREHOoQsEPPxz697+PBAI//3zS//63aTq9 + eTo9K51efOONLUQNmkkn31Kp0HHHET7hff751HR69pdfTvviiynAIQgKjv75z92//307/BIshBfifRQb + qdbOKOEMxPTpp8P77ONMn650LosWKePtqaeGfvhDlf7GjinsSzWT7ywksOT447EqwwgXMH/CfWYD4cMP + P6xihywgzB7TnHAklkyVxpMYjbI8ogUGRxlZBCzpVYYdskp4IVho11JnDBY4rHWdoSXFo0pLhmjD41jX + m+J6xOptHgrNJT1bgIhwxF1cd1dAURtOibuAKZKkZo02n8KrIIs4204DI0tLj6ytPbitDbI4N4jHIBEa + WhvIGQURmUXCzzBHDD416Bs///nOlZX4AgULYYHgH3AlC9SQlo/TYRXoa5bosAoVbt/ZKZB87LHHMg2B + kj58zjkXFhdjDj0jlTqhKAkKHuQ4u+lrBAXxOHJkIBYpVrWrEvwLHRxMJaYB4QpNTTKawAnf0FBLPDL8 + RhihSuSo3fI5R8in+P2fwj4CJiUAQ1kVMyTP3zuHDgZMT8GMnkvZdtQMQbSZosUOfRA1QGgOnsMdbV5o + O10YTJgNaM7qJzvWV+3DpBC+gBRmeWuyLagqy7m2lPhOISBVSigo/qftnxg8iTfGtArto/ZCB2ZkXSx6 + rOdO1MVpSSc0OeyN1/UZyPPXwpZEqVOZT5dlINzJFkP6qFYA+SxnmNLfK8utbQa0XXEBdSOvikLxgtim + gbDYhDpY/E85yTJ/5sNbLnAG7kAr/j1AzYxB1TBCbRqNYhqVeSS5iM2wJWMWGyxcsID6pvgdbLLIT0AU + XBnVDOJb2XL8uLGnnnoKO8oHxc22225jM8WA1fmwpw5CepBkspIpVXGRwUI7ZkNAUVFG3+gqf/oGWFXl + R2cKsKwCvpdR3IdiGhVgVqVF6utIOCdsUkJBTHChxQv9oEMeYnV11UUXXfjAA3f85CdVcJ0c9tOPXVQD + ico7ChDCBWUBCJcvD91+OzrPmAQLCgpiERUuCI3Dtvnxx6MAs//9D2zbLJ2ek04vSKe3SKe3e/jhCaSb + sT0aVVUKt2CEn38OUrLN3HR6xpdfbvqf/0z85JMxWEoFCxHdvPeespGKv1DHVChSqIMXIytXOtOmKRfm + PvsoDCO5GlAtIR9iI+3LUyiXnzM5AAivuCLU2pycPGkSxRIIUocLmZ7z2KOP0mFygRDaIIuq00RtiqRe + Bp3MpCCFsOGQKGVy0MArxXFos8M2xx0dL56UKB3lhamOS/Q6HsTNNEdEU7NNNHp4R+vqhrodHQdQ3J2F + cmgaFyGLNi7iVjw5Ejkdw2N5+V7d3cIR+SxZsgSJDcoaAjAIvVin1KBPfu972yYSc8Nh8uiPExGpyqAR + pvgUgZJGAWQq+m6jVaArWlsJt4eSXvvtb1+93XagNW07JhY7q7H+xLLSlY6zk7YGz3Yc2LCPgtqTKmJR + ph99BU4MiHw5GzCq86R7e7tHjaQMgDFiO/w5d/ZmPuUP9mH0VzF3Ygco9GEDXQcuNxxVSKSv3zGymLyJ + E9vInN1CyoB5WTTU/jUXC7MYn8/+DJ+0gTDHKBpAnR+SbMybZjNrjRg/RSVo8qL5xFX+Z4yiMuSBPpjM + KspKUkzqff6nis3W+vjn9UYik0tSu/QO3aapkbyyc3BaeB7lbZfG48vLSmfFY5PD4bEKJr02MrOQeF3V + efDzc/ZN+AT/ArAxLrqyEuoA5HG+jCxFgAe0M17AfLpmuGDwReFWNvPTCpdcOpgxtw64MUfGzjRkSDv5 + +ZTwWNszxTTKO7v99tvffffd9vxdPIjLli7FakpGxiyrqQZCCBPWSxgeZYrPPeccar3li8bR3UyaNDHg + iL7t9JCDD0Z/jt/EHPPMM88QIDzuuGPtoZMNCOrQQBi1da2sB2sDG2ngvtXxEipmUft6+VeI3aiRI5HB + o+/LUY3K7jw7IqdxgtqNf/ihhyaMH49/h10+/vjtJ56ozFGK5itlNGD44fMA4c9/7uy/v/IOCgSyAIoC + hK++ShY0lQtG+wVr4IK/+51BwdGffTZRE8GZ6fT8dHpJOr1VOr19Or3HG28sJFhCXlWB+ZYWB2OmZoSg + INssTacXamo4/fPPJ4vXMMDCJkgnoPvqq+UAsBaRErmosHDlSpcWHnmk5CxVKPjjH0tOtVwDaUFemAOE + hJeQZ7y7KzW0p4dOhS0B3YY9uwpy/AUDo8I/nX07HA9FkqFoSlWxj5WqZcM/3CrSlU8cNXLCqJFKGpdt + LC3DWOq47ZHEkGiyw3UhRhKoACJieAQnZkYj+3R37NpYDygu0bZEvInbYz51nF1ddw8WzyMmHbciQhvI + ItJTmCKIeGIqtU9X17zp0wUOiU3EdwhFQ5D2/vvvDz5N9g2rVuEFxBeoakRQO1CKqwXFm6CGNBidCxEX + VN6APiKfwWW4U0vL6j32OGnKlFWUKQ6HD9bNW0WGNhLOacqLcxQvI/ZVLpn8olKhnimCGEU3Ch00z07M + gPajrK2txkOW49+VPp1PE2W9/CQhCuvUK2xga6qvH9rVZQdI2FMotlRjhrbl5jQjh+1JM4W39UUEs9YH + QcqCiIYCCv5xUlAhmZQi7+LtM//ayoWsEnQ6qkHZP+nVZMhuqiirikWrXFfbP912VdvEHeW5kyKR6Yzg + FeVHjh61sr5+GwKHPHcnz90x7O1clNyxsmJxacnMVGpqMjmalHWJRBcVa0m6jSlMewqzUpRlRIw+BBos + 5AttRt2zcP6szk4VCFEIzITP+Z68HGeebSPNh7G+1viCmgKImGUyhSlhMSIYwzqOR2DGxAmjmZNpzx1A + qKBOgJBUU/j4bagAwPh1+xUryFxBMHE2I/Rj8NkAfxqKCGKrSMFRMHrq73/7W4CFPhDOnTvn0ksvJfzX + ssSeIkB45hlnIP+2m7H33nuJ7RTLLWOI+QkoFZzT2Wt806jvtAzCJ4RH9nR3U+IbrXsOEApqcpNozJ13 + 3gmQmw3wZhmH4p///PTDDydtIOzLVGhyitpAKCgIIgKEuAkBwtdeS7z8cpm4BtGIImzRFlG4oEJBLJyA + mYa0Zen0inR6l3R6r3T64N/8ZoelS+lj6h2k5AtxHSNHehoIw59/vm06vXc6vUM6vTVGVE0NN/viCx8L + kc/gLwRuoZ5AL/JUCS58/vkESd0AwqOPDl1zTQhZ7N13hx54QKUbRRkUgHpW3rWcC883jbIvFzikK9yp + rXSIsPBVmbt6/XXX+T5CLUvj6XlQQPAPCqhq9hYp/EtUhOLlGwqECgL15JlnPHncmGG0SKdKEWMpI774 + DqGdZY5T4Tg1jl8vHg+i+OFgYBCmMQEoIq0kEhEihfkUxSmkaivH2Q6VDaDoOHtqUNxbxyYKIkLFji4r + I3mNoYYmTTZYiIZlMIGGn3700dFjx+IFVDUitLMQc66UuWchMoTWDqUGdyRGuXmRz5CJjRj5XUpKCK6A + ILLQsD00EVyuIynxiUJ8h6tSH+oggoKEsAgKblyNzOBBiyeFLpxRKWcXQGKLRXPnzNysLylpwVNwNFH5 + G0hjDWHbFWVlOQDsIxZsOBavq6qRgIqACyrrZV8fhk+V96HQFsLqJCmVBAnKmuzF3wRoJ5UrbFjwPkBB + +4u/3lBAvhgvICZQ9C+12DY9t8slM5E7Ds+3503zPDoD5I+qZLiQ94zH94lE9gl7+0ej+ycT+xQX71FZ + sUNt7VYNDfPrajerKJ9YlBwZjzFNIOK3Bq0gFrPsXJ1i1BWjZQ4dFArIMEotQ1Kf2O49wykzZkkr8sHg + ov9rnnmzIASKNkQmWAOiJsRRgBBrg9qYQEMRyMTQpqowdfXdEsvwthIudc0119hQccSaNeDc7rvtCkDa + qtH58+dxDGGTLMRXEG2M7SdHGWEfCiysraVslg+EkydPwmIEdtpcQVjj+d/4BuzTjtbA3Co7YrlFdmB2 + OeP003xGqB3PovjV/6rep8ZZnXOcBbEMMI9qNJ8RCpRK7mWQteDo9P77jzz0UNQ2A/YRPujTQSAEIHzo + IefAAxX45QPh668XBa5BQuabEXkib/nHP0Z99tkEDJsaBRdpSNsRIphOr0ynV6XTx/zlLwfssCPOFjVN + JOEc0R1jx7rnnCNAuLveBrzcOZ3eJp3eEiINFsILP/lkLBCL0RXTq3YW1mAgFVL4wgsAYXz//R3Moffe + GyKhNkAOkj33HF7MLCDsJ7I+Xzj6gx+EOjvdjo4OOhXWUeST5ravXXuKtqeoUKKKkrLm2ubSVKUrQChY + GC0Oxcs2AhByDm4Qp5EJvvoU8h0y+ks+GsAACkrsIoIawi1ACIiXgKKkwIYpErCGWw4UwbUGnBCSCC4C + LQhtIIuAIkxxN8yn2nYKDyNW7/hodK/OzlkaDBGaQpAJsWCGRQA+4e2DwcKX77lnp0TCFNEFniGC0Dga + ydLoej2R5DAvBrDRtqmuS8lDFDRsD3zCJrf2PFjsMtcFIGe5Shw0xnFGRaJDo7H6kMP1mmK8igvqrHXq + RolMQ9d2GTyYbciWWKjaWpsZmHIOwhC2w3bL58+hVnGmJQWJo72SlpeW+E9fX5D6WOzQ97Tbxk+lSigi + E38guYJdVVe2tjTywuXYSKU3SUJmA5OG6llrFArKbCz41eBmgHo+KTT6zwzmiWlUFvMRWygr4IIIQUH1 + +rDXoZK24/ZzZ3vuQs/jQS/zvK09d4Xn4eHe0wP8ImtKUkeUFK8pLTmiqvLw+rpDm5v372jfo7t7++7u + LdraZtXWTi0pHhmLdmjraGUkTJGHHCDkAZlEZRrqMunKBI2knRYKZtkzLZpo8ln3h2cAmDF+6u9ZmCe/ + 5mzjo6OFkdYRtN4yOI5goWkStlHbNEppmssuu8yGirvvvosN9tt3X8TYNgKRX6Yk8At2d3WRsvicc85h + vMMDIrvD21Cr2Yfiu8EzjtnY2ID3BB6WB4TRE0844eabb4Zcmp9kR+AK25JNFlkvXkYR9arEddlRhhkg + 7OqaM2cOVXeYiJvDskZQkAWtHykbSRtiLkE2Q9zAYPWnP2GFjWAt1PnSchcbJOzMogQkHHqoUo0KHWTh + O2IZspG9+WZKQgZ/+csGuBqMDXXMv/6FXxAUVLoYjYJAGiTv4HT6iHT6uHT6zI8+OmqHHajiTTkRVEQQ + GWfGjNBZZwGEkc8/PyCdPl5j4X7p9K44FLVNFV44DdEpEAvQ/v73HWSf0cGFGEiVgvTFF1GQAoTud77j + 153Aw4dt0wLCAXJw5/sIiaC4885QT7djgJDMXxYQrhVGSIBoeXFpQ3ltKk49QqnTG2AhptFEueKFG/Lh + 7hhlqhxHjewAMKuzk9EYe6l4EOGI4kTEbWaDIm45EAiVisS2QxbFgorqktk3Qe5zqRRBqL6Wnu6EykbD + IaJTlDUH1ddLBaj58+dTShB/O/0bB8Bg6gjS/67YZRdIHvAGznFS2gBIg4KQOZI9NLrhJselbUNBOMeZ + gAQGQqBJJE0iPgR/59xodHYyAafEHNoVcpBOUIa8POQYvyDzhfqKipb6BvCgrraaIU+ZSoqQHA4Q8DDg + M1IClmwxZ18criDnU5M+naOrnxMF85zMJuwlhQBzIFAaIoho/s02kPoHYeQd0tU+tLtTsNmcIocg+uRP + OF8eedRgpoLQGYZlbqE2yVBDQUibCPoOQhMgaDyCemrvOwWhg6AgRBAVzAiPqQ+0T6m69iE21HMPJDYm + rP+NRA6Nxw4vSh5VXnZCQ90JTQ0ntrac0Nl5XE/PkcOHHdLbu/eIETsNHbqsrW1OTc3U4hQFb6nh0KAS + WKtqR6l4jDrDXL6hgBo8AnWMxhIMjDjGJNtZHvnz4/wKkTadES3w82luXYDbBdv44ermOPbGel8fJgX2 + OBIsgZZLvF2AfwZ01cayl95Y/QstlAAJMY0SE3XRRRfZ/jlMhWyAP++JJ56wIysWLpgvO2JZnTVrFnW/ + ye6E7ZQ5LkMe/6JZu+bqq0EP2wvI0YTYsWN9XR1npIyMAR42FlkNQQ4ApB2t8Z3vXM/61pYWquWQ1sqM + qmsOP5yUpAYIFdHwP36fAQgFQeUCDzvsMMK6bCAUKQ3/8ivADCl89dVXzQa4JJHdoX7//e9B+RDZpR98 + 0M8sIwk2pW4R6lDwg4V4CV2SkGxqznPPOWQ+O/lkqjUVAMK33koR6g4/gw6KURTehuBT+wWRxuAU3Emj + 4CHp9NHp9Np0+qx0+tLf/e745cuiiTjdr1hKapNWhpKBGggBS7Y5Np0+LJ3eP53eLZ3GWIrjcPb//rcJ + EEtMBXALKSROEVKIVVZnXwMIEwcc4FI3mJabGkwChIFYJpN3NCegMIcLyp8ChN0BEOJ4LgiE4mZRrgU9 + NvGWO6o2oXYTCi9MlBUe+thcct4OOATnbEDPL46lyOot1NAoS429VBBROKJkuxFQpCGAskIdHYwIG8M4 + acgigQ0TEvGpiQSgCFNEaCPSUzK2bO9RL1TJahCaHgAWakEp8fhoZ3BKYyAl1j5ntljwz18/++ze5eUw + PJKRTtSqGc4OEALVADYLbeNPnDNDXFdqGQpzBaTxBdKw8a4zynWBcPCS9gPw0F+Vy0dfMijITagFCBsa + 8Va1tjRBp7TUpUA96HW67cQ0V5aUY3UcDBau05FthMsHQkZsguIMspqQCYsUio0gB+EyMEmPhAvS0TRW + +VETwUkzJlPL52fYnga7wGRKG7SWzw+Hz5C7bDi0rKZqE4Aw4IJZuUM1xVRxEWWe8gViCIUF7kQ8TNg7 + wXNP97xzwt7Z4fAZ0dipyaITS0uOr6oEAk9ubTmpo31td/cpw4efPKL3hBG9Rw4ffujQnn27unZqbV1W + VzenrHRKIj4qEoERQjEliKK8pJjyIxLsYYOc+c4vhDqgOjF6TtnS/Dug3VLMmzYy2bsIwoltk1gO3KgK + tzKwl9nRpoxsg5FW6g4aFMw5S+Bc9OEwHwi/8Y1vUObTfhl7hw878ogjSJRhryTE0NhFic/D/EXYksGY + G2+8AYDcfLPp4BkIau+IkpCfACds9YwJu+++OzAjGxggPP/88y+44IIcqynzVLyMxGU9//zz5oA4Gk1g + hiKEPhBmbKSSOkdMo5yOoGcb52CEEpXBkxY/zkknnWQfH7ksWbSQ2Dz66C0nn1y9zz4Jotcpw0uh2lWr + QocdFjriiBDeNarpUp/vlFNCZ5yhYOkb31Dhg5dcQkVc98gjHeigBBEaRogR8p13SsgjqjUy7X/+cw90 + ENdgOj1d2zOXalcfRk5BwVPS6fPS6W+m07c88cSBw4dnGXigmBoIo59/fpLe5jTNHVdrXgihBFBxNM7A + Wfjxx2MghdhgNSlUnkKdiRTraNIAYYDrykEYAKEYezO8sC+9jKGGPhAO8Rkhw362adRnhGpwCXgaunq8 + D4wdihqimhEsjPWhGuVJtzY2tTU2idlzkB+FukAtqaKt+X9BRBQnogFF5huAYplLaeywmE8BHsFFsAdc + xFHXhtDGcUzmF1U4ScMhfkTkCcTpo6Yhx/d+TU1SPok8bfQqAiowOAwGCL/83/8u33bb7cJhVUQ3IIUi + cgGkTaskaQCa0nbdGGAPUGThi8QgCo805lAjjcHAp6x8Ghayhny1Rq2AivSFZHrU7pOuAYRlqRL+zVNx + qucGFqhkxN46PEfzuHOso+ZPGlNWVsrCkJz1rLOj/AwhNFio0TSwovso6eOiYXoqHiuquJ39sb2EICf6 + dx2UIdZC9REtSbbzz6hgstQxgRU01yhqeCGxhIAqqWEIihiGS5jYHs872nPPD/9/3P0HoCRXde2N3+6+ + Oeecw9w7eUYaaZRzQgIFQIBEBokgEYQEEgJJSEgCBYQCiCySyDlL5ChAARDYgLGf8bOx37M/nN6z/bB5 + Nv399t7n7DpV3ffOnRnhv79/U4z6VldXV1dXnXXW2mvv3fj2xsb3NTd9sLX17o72d/b03Dk0dMvE+Gvm + 5l67aeNrt2979ZbN12ze/OrNm69eWblicfHS2ZkXT06cPzR0bn8fnZ+Pa209tLXlgPY2pIIhgND6Oaj5 + oh7PK7pAI0VbCwLzNC5nZikAoW4ZlEzFxQq11hbmp/v6tIFDVD4TbHNEtHdlf/qeUyB0OqiYGvLTLQvC + CBPSKAont2d6bz7nOedfecUrqSpcAEJjhL3d3fTKZtb/rne9y+ggDxIQeWnLpo2kkeFPSSkm2RSWsMEG + fCIISjkqexdBRGOEYCoImuafgZGsP2T3wbQBSCVTc5OGdBf1NImEHp7IFcjPaC6bukBINqGFGFk4GKgt + SV++fz6Uy+AJTzibuOk3vvG1//7ff/LTn37nvvs+dccdLzvkkEHy4ukIYQv9aX3ZurVh27YGWiPxLwuv + HnywtCg69tiG004TAnfuuWQ7lH7xi348nBodXPj1r6UoDLxNRVFJk9C44Auq1csiCr65Wn1vtfqp179+ + 1+SkdHiwWw8j+bOfLSnwCoQ36Ta3VauvUSxEIzXvDLB6InHH3/xml5NC7DnwUYKU1HUjvz5lhOiiLo3W + tmdaT4kZgJAY4Yal0sjwMGeV0GwtEFKjYLC/33wJ/EyaQSs59Zo+AQqacWaV3Gu+OT1NqChILaW6wh1D + My30GI+yQbOh1FxpokIHWFgXOJ0gejJ+ShMBxd6WtsH2zvZS2eRTV1AtrGigSFgR+RTIgSPi5ISNEUQk + fEiUDicnWEjI8Ilbt3JSqDWAuIH1K5VZ1kbEH3zoQ89saSHmBykEaIE3WKkRO76nk1dAeqxcmaw0TjSU + gD22kV67CpDQWY7TtndrDF8Nn8bBB24ngL/alEK6gUiKXl0sC5bONacjq2bIU0F7amS8qz33S/vW/NBs + wKhYS/gKH5d+AJn7J590DKQ2bpOpoBHzslxAW5Nioa3II13YhlF2w9LC2OiIbpBtk5DCEhM6kiatDIfW + iisj3fCwMGH+36I1VNEutYnmMuVNGpU0+bIUiJmplA+tiORwaWPlDvCvufmzra1fbG//UmfnPb29nxwe + vnty8i3z869fWb55x/bXbN16zfLKNYuLr5qduWJinFoQL+nrvaCr85ltrSQIPaqJXNXKrtaWLe1t001N + kj5BdoHVWosLCQ+4YDy9L9C+4JHpBAYYZA201mCBQY10WTISvsj8MsVS3Sut/PpCU3QzNbZIQ6dkJ1rG + TOuoyZKooJEganqcvpptFiKLKdACElK9xYEQswzaIMlO6S35hjfc8eprri7kM1jRGZaF+XnwAzzDAeDv + CkC4eRPOAKpNpdDFS3yhbpxgra0MCHwilTf8jQAhnUCxtPBIR0/TVGkfgR8HPcm3p0Rqwgi9GZZM2jhr + 8mPFDhirA2FIT+Rgjj/+eARe3z/pEwqETwCVKSaQDy4eT2/EwYHy6GiJkmmUmd68GXtIw8AAhSNYpG60 + lI4WeSNb2Hj7duno+6tftf7sZ2IWRahErgSflA6SMkiyxFnK5OBzl1SrV1erN1erRG3fU61+4eGHL3/8 + 4ytA7Oxs6HbU0SH0NALhLdXqR6vVt1WrtxKNVRC9sFrFQYNxBlJ4tJLC7RSsMfso4UksM3/wB9K28IIL + Ki6N1gJhISa6mmu0lhEODAzUAqGVWOvt7CTMmRr0lB8YHVTvqC3pg7GJiahFfXgyNjIy0Fc/isjVddCu + HRTmToGwQoI+gck1I14pQUwREVBEIGshZTsyxVRBTcOKxskYg4FDzDVokhR/MSx8iuYwPHd09PhjjkGa + oDAplhnayq+HEbLNP/3N31y5snJ2YyMlRvGvesskGCEwArDZwvMeNcHKotopC084FwaBHC0c15MF+Wpk + 1y7Oz1rZzPqzBIWGdTLvvdoMsbq7vZMAU913MUVC3sTxJGGALE2+7pFkKxHQqD4qxYqC7BlYnX1EQvsK + f7pS6rBoaJcxZIYVqcHRxlwooGAMEMbYn0YEhQtSFoL6nIqQFlXLvDHBQZqtSI0wtiOLLHpQMLXMsCOi + gxRFW65UTqqUn48W2tL8wc6Oe/t6vzEze9/KyndnZ749NPjV4eFPTU6+e2bmDfPzr52fv2Zm+qrx8VcM + Db28t+eSzo4XtbY+r7kJSxdumtMqlaNBQbpgah7hKBVPVBcNjf2iqQRQt7rYtQuQT9VUrb9V59WMwOUz + /zz+5/pnwRHT0covaUCYhQ/zDE+LkAkQhhghz7XTfTDFiLAtGeO+WSqlhnfZDk0adSB8/OMfDyMsNJr4 + 8Y8fvu7aVxeC+pSRNEY4PztjxC5N0TMg3LZlM5UX8aekYiP2FirV9nV1k0R/8MEHU9mfpIUUCI84/LD3 + EhJ8z3vS1H424PsdfthhuDrTOTT5f1KDTaO5URqVaRPTF6neoIXfLPt+NSA04dRihCilhEi9UrECYROp + IwR0CjXHqUpj2fd8qDKzMm4zMnW5gKnji4ulu7vU02OL/AlA0sFi167S1Vc3/Lf/1vizn5E1Ibooqe4g + E/gUo4N4ZKCDz1JRlGgfMT/UzvdXq5//4z9+zYUX9lOqFGl0IjasJZv+ootEj6Vg229/CxB+vFq9u1p9 + q0qpKKUEC89X3ykOUjILD6NUDeVmUEdhojGPQgrNXHhhDggJdnqM0MOE3/xmEEhrpVELDa4GhFxUaYyQ + TlhmGRVEKzCFEkBIjFAhsLEOEAp5tPk7ozaVDgoZ2T6Y8vNj9+Bj9mpQZgTiWnF7hQx2yeL+GnZqZDFV + UMEQT9UHmYBD2OGsdUM0XlguP54qaPDC/v5TTzzxkksuwZeFTL9+IKRy9l1nnw2a4gmk4vZO9bLyKSAc + 4GfYVoBno4nGF8E/jtAh0IKCwSCaP02cgYKouFen8ZHdmJ8bGlDIHSyIoo5wYpprzBIWI9ULR2So5hsb + mCX8zxleBpYOeM7/EjTNMgKdPnpcMLhfIuYZtuWjg/Gv4ktlctHmZqcZxPVdOfufeszQRSkQWtleqZxV + KV/W2PjW5uZPd3V9beuW75599gPnn//QGWc8uLx8X3//PYOD7x8evnN46LqBgVf0dL+UFiutLRc2YeAS + NfWcSgVn6UmNlSObGg9sqmxqbJxprIzQLF5tMpQbjaiWywhM8yJS60oX8bs2ydKLdA1EDACWpDpEd4wC + myFQiOFpeRTeC+cT9GtroTFG9mpO6iwqn5HqSToEc19aMxpxBBtGhgaxHLsoauVs6omlohmmQIjCSYww + daMYRFEgpjBtxTVq/QhpW2hAmNadkdpsrS3bt22zdt8ufppqyruondbT2XnggQfiJwf23DEAfNImgn5J + ZGuAeemH8tKzn/0sGt2kK6kISjtJPssVUaXyQg1h0mOjQxQxMfFzDWnUIM2AEFXWDwYg5L3nnPMkgJBy + 5PRh9Y9mywiEOcGDw8AmSrfCz31Ols9/Xopu04OJVIqf/AQ5tPLHf9yqNdWklAyxOmwyf/d3G8EnNYvi + 8ETGxCNjdBCFE3r3wf/zf977xS/SOr0LcXXLFlmWlqgpJnfr+Dgl3FJGCBCSKPnuapXf63olhVhJn64G + VAw4R8I7YZ+eR6EtfMU7WhcIf/xjqSxjXYXXUEQdF90449KoMUJIf1qKwYDQbOd1xkyUSypdSnK9qqOr + PTjr6uyvT1MYELkvV9Xj6u2UHU2Oj23duFJkqXHjlCy6ywYgKRhtzGVD0A4eNlYqETukpArTbfRMrC50 + injWtm3Pf/7zUR5oe/Ynf/InaVbsHqnhd9/6VromnUUWRKWC7oo6ypSIDzIgNLZa4KysZyEWaBTQkuUN + y+uioE0y6MH5yOKZ702njRK6U7jNzVRsZd3PlXdh+CXIu/qPynuxU7DzdR65w6TtMmGKqTSak0DzemkA + wghy8qKDWyR2ARBrRNEwanAGoJjWU8wejCDTUxMQdA0r1ikiA83EyDtOmWzNjriysfGdTU2fGxz85imn + fO/66x+8664fXH75Q4cf/t3e3nvb29/X2XFrWxs1cimq8NzGClrMU8il0YJ8QOBRjZWDGytbGxsXGytT + TRoaRBTV9EHCtg6EBnirJUUUCKLmGqIJi0waqF7M9ksSHoyNuZ8zky65bRGWD9u9a3Fh1qJ3wvlywmZA + MoM0wzZ7DnxyJtFvcRyQMig1zySzAVaYk0aNYhaWAhBSYg0l08DmW9/8puc4fTlfLpJXTzn5JD4BcKKA + pwFhWonUGOGO7dtJIL7hhhvuu+++gmra1dEOELIB7yVhwztCrGzY8JjHPBpMhV+m8MnbQdxLLrmYocN3 + hV6KOYhdAatW1sdIoV1CnASSO9HqrTzb2ozQgPDEE0/kYPxbf/Obwgif+pSnII0ChGlaRQRCjUbKI6j9 + /EUyww9+UMJHSgPe++9nqVDM84EHKLFN30Fa73bFajKjlD37H/9jkcovVFOjEIzqonhbwC0kzSv+/M8v + +sIXznn720++4IIx4pHEIIk+2gIWtrfL3YsqS6HRRBo1IIRBvqVaJWRo2RTwS1gmWYnHULkUVw6FZmjw + hGFVOzRRZaarrjT64x+La9QW98sUaq0ZESxgoZtl9gkIGaNLDYxmTS0SKVznQ/yN/G8/5Dt+yHGK71HS + PD6cfdYeQy1TdJpoqfrS/okMfUrAVCpL2nGeZAYS+yi9dvkll4CCzPW+//3vE3j3uPoeUZANfnHPPc8j + ykhShKqjJELMlEtk3g3Tdg2oiDzV2KoTVsc/Z4GrQaB9UxvE63zrUom4Lor2foqkNn2xeyY920igHW11 + CpCyDT/uavHd7FBV2nQxs3D8vpmBmVM9fRJoXn5lAfX8z0L4MKxPPJ/FyF9ik8nF//hcxv0jD9u9smHR + mzFJFFAMKsHvkBdILetInDLjOrs6V4Cw8q7Gxs8ND3/9MY+57/bbvv+xjz14zavvP/LIb3V2fq5Suaux + 8dpKhX5bTxf8qzymUSjgcc3NhzU376TbJXVGmpumGxshgv0oolQ+gwtqaHA9bs+628A/qIqQAmEwpNRj + damxJcJVMxfYxsVFGuOlgcMCmJnbRd2kGRCKLqptKzirqogG8dO3Mekvtz4eVUEatUZFFiMkNAgHYvSn + xlghtY5XTz7pRJIWoGIzU1NACFSyAIS8Cs6RRAEQpokQhpFpzgZirKfhE3rEoUp0kD7baSEb+cQTT7zs + 0kvTAKE5aNgb5UOX5ucAZuOF6WKu0T2ZZYI0ChBSGNNHJICQ8/bUpz4FdEQarQeEIo1Gk3OYz11zjSRR + KH7Q2Ii2t/T889aDVNnuIoFPS2yPUU0mCRAerZE84nnYZNBFr7/5ZghzaWkJrVXuUwwDw8PivjEgtNZn + ACSGVaRRNcuYNAoQslAV4VYNMZo6Suk1PDjHIsCSUIgYiyRrSRSWWV/LCGtdo2sk1BdSCQuMkJyc9TJC + Y1o2gsMWpAnC+h7kj9J5nCjg+jZfdSspXNsu8Es4ZGpyvLbKSX2+EhVUP3hIGPX+B6TTTQUb3q7u7jM3 + b37B4x53zVVXgYJ33303uj/1KagZsc70Cbso//w737movR3fDZhKkgZ+HObyG3p7RpXBeVEYV3FrnxiE + 79XDHaEMz4tzs8Tw62LkXu2zsDFeEhoOiba2SrAQgLPKZzXwlq3IQ52sr0VzR0HHvBQUa6BvVcyzLWMC + oGukifaZ88X4TNlpX0BEeBZCKNP5aLdxBhlGkxgdNPOpASExQjTM8vZKmcDzyxsrb6lUPtnV9ZVDDvn2 + hRd+91Wv+t4znv6dTZu+3NT44XL5tkrlpY2VpzZWTmusHNMoJbZ3Nla2NTcuNzVCOZd7eua6OvuoCKNE + UORQdVWkoT6jZYWUhvyfeddJ1B5jaDDkPzgDC+CXz5qI3K5Zqr1o49+MUBatLpm8mSFcTvPMsT3XQnVj + QUdnkCm4Fhghmg0mTyt7Rg85qzFGoUgeNJBJ56wAoeHZakBojHA1IEytqqQXe1QStHv5ZZeRcZGWN7PP + xSD6issvTwOEnm5ByhOXU2r09RlVBoRaVbyQPhFdo2sC4VP2AITJ1S+eZwdCsulp8kfb2+99LwAhJc0U + CKmyTQahOGUgZyATRA26pkn0UDeyJi4iOvi1r+2+7bYGSpUecURpjFCQtFho6O9vmJ8XILRaF0ceWYIR + 1gAhRfJMHcUy81IVWpFbJUxIn6Z//mdJogAIzS/z859Tg1uAkPqiDz5oOZGSEAkQRmk0Y4RGB2tlUhdF + 7YnnEfb09HDOqVSQxghPOP74VaVRxmioVWAwmmK/zkc6wKVvYQAVAUY8Lnt+MJE88/STDz+M0vyU7ZGu + 2aspdWvAoR0/B95dqfRXKlvGx59+9tnPfdazzj/vPOo1UO6W3kwEA7i+sZABhOtvzGRAeElHB3n6hAmP + LZV2NpS2trcvdXf20o4rXx0t5azp8z2fhWQLNNKjDj9keYlYpOGK+D5qoMggYd+nIOQ+0xS0VpGuy0r3 + 6vh94zzahe+SUMM6HtEUFNPsCF8vSqyWCJevn4lCKZKFCJ86XwIWxuyIrFiMRR85sdqXTkLU6cY+0VZE + lH65ACGtIQbVLEMRGbLmX1epfEBI4dCXDzzga0ce8bXNm77U0/OxSvnNyhef3lg5UenjFuYx9GCSfPnK + MBSwsTKAeEhNUWyoyKG6pJiXaKHBq0IwjHFWOwWGxkYmbyb5DGnSeiiBVvDC1LhdMlbnEEWoiqZ8NW7P + bI3DG9RTKl1Lr2AB0SQKyJ8Ge/LEUDAfI8ztDR1VC2dThlvSJy666KJPf/rTlkd47atfffttdF34CnwO + FcdqT/tDGKG+d2Z6FUbY2rJzT0A4MTbGh5JTD6TZngHCm268kcxC6CAVZNIPfc555115BVpf9iByaWyP + 75twQbFosVKElnZ0UaHLnIENSxLLLAAh4Gp02cwyRUaoMUKk0VpGiDLMxEVzhULjEdM/aoAQRihAeP/9 + Io0ChATkAEK6QOSBcLfm0VMIhrKiEDho3LW//e2r/8//ueIf/uGCX/7yqE9+svcZz2jo7JS7kOAaJtWO + Dnl+3HHSLKIeEJJHgcuGMOGlWp7NgPAEMjQUCDdSYsaAENuOASGu0dWAcO3S2wUUzIBwSTLTOKukmaaM + kAKkAQhXgxOJuikdJLl+Px/8OHjP1gmE5HAcefjBFBPhV7TPhaCsFjJc7eCNFBKQ66IDHAWye3uP2LLl + +NiYiUa+RHuvv/56YuBM92gWyCW+/sZM//2b37yktZUMfcKNlHbDhkMzCjrMEWIa6e7qoSNj5KaCW5oA + uD8nkOIyj3nUSYvzc3vcyf6AFk26yX2u/YjVJjeOygnOBWyri3wG4QblEdDDuiQFophEsZowaoqugZ/V + OwnsMFdKO1cvzVMA7b1WMsYR0XRoykQdsH0r1aJsECHSQ3ZQZxvczxSnIHMZKZQq20T1KpXDGiuk0l/e + WHljpfL+SuUTra2f7uz4VEvzhxQFr9LiajhLsdXQsYSsWyTQgcbG3qZG+J/4QmlM39O1aWVxaJAelOEj + CoKnQF0wbUoyn5VYS5EvLfvp9k59kjKzjBcmdpVM3kwZYeptCaZQseFKJkCEugzYmD0M9vX3dVP+RlYC + BSlNjEBYhMPoNc2ijGLSSYAQbwtjltkmr7vu2gue/zxiY0Aj9dX+4i/+4pECQmsByOdSM5qBkokyLS/M + NAAQAr2MD6Ag/341qVGJpvrRj3wkPQbz3QgQJkmf8oNSKq+vb3lunlMUgLC5mejjKkBovQ/rAaFJo/WA + 8NGnnsosRF2jnuoTLvLICKXhu0qjBoR0OwpteH/yEwFClMk8IzQgRMMk+Q8gpJTMG6rVD1WrNAP59L/+ + 69t+/vOzbruNnlAytnV1lYgR8iArcR1ASJUZ8jHOSIEQ42gEQlIJg1lmT4ywjms0jRHWmmUMCOnKlwKh + oeBajk5hMGTWV2jTu8cReA8b7BVZ4czKGJdohwzRI5zydT9SadeAcKa9bbmtbWtHxxFcfxEOyazkTrMM + IS50NHeEDjTSPdYd/elHPkKLYFzvZ1FPWYFwQbM1Bpsap/DL9XRjl7NsP+6CznbKJu/XGTSmomEq6du3 + mjVp3aen/oYOomujtrO6wl4Uh8K6FDvj9rnJQO1OIuAJENYyv5gdIe9LAS+DyQQXU7OAQV2KdgkcukCq + +ieAqkVw8Goxc9epbnnj8uJxRx0G6kQiaMqoIGJTo5BCjJ1kUNCKBLZH/A+B9OZy+S3l8tvLpbdUyreA + jlLSSF7d1lghCmhGGEqvgn+SKW/kD49ob/fmTUuIH3XtoC5vJrQvS+NLPaI1RpgsFGcxObqG1FpU8mE8 + 7bRXY4FhGzqkYwJncpACoWOnersyR0yeGjodFCxUsMwRR+eIAoQEFyMjvOKKKx544AEDG2DmsEMPoZIL + mQxU/iwkF+4nIzQ2yUyQgZJu3jjJLfjHh8IO8c785V/+JWtS5OOlFBdtYwNCmaKkNVSxjEpaheRouzRq + FQPqMcIsfWL9MUKnkmbM8QezPerLkC+vNpnygw9WWB56qOmhh2jDK4xwTWmUMB6M0ICQ8N7rq9W7Yszv + Y9Xq5/7qry57zWsIRYdIPzf/ySevAYTgKFVm6jLCTBp1RmjSqCUR1kijWT+m9ZTe9hihASGF69YJhJg9 + 10hm28/xdl/eLtdPve53q+0rBUIoO0A43tQ819SIcfQgzsXQ0AkHHMAZ4UHKKs1QiJ9TIeL+++/H97Ue + avi5Cy54iXaTeBwlRSIQksjPJUExsXaqgSgQ8hjopWroJKPKvnztmveAguSJ/Z6AcI9HWKCGe2SfEbQC + DjkjtPX2Z+GhK7P1dbVQQ0pjg/F5EDxrioVqx4n4cERMcNHtoJWRwcENC3Nc9zYPYxtkOspBjIxIbTMD + v0gKDVxFIMUOQWCPCPSWxsqxlcoT6CnRWHlZY+WyxsrFjZXnNFYer0blLU2NCKGgnLlgCAGa/pnCnuHT + au4YtRpqPcNczoNgWwjjpe5QaekQNMl8jnzmW0kJH5kS4vAkVzCwvTyfk869JFS0HLB1yynHHoNswJ8J + FhqqFeEtzxolQdB00YiC4V3I2omgKq8qELaaNEohGAe866+7FmMv5hF8pG9729sKldIMCMmKn5uRPMI6 + ZpnVpVFDQVt4L/Z6bJmWdA8NJW2RnEVYKSn81Dj1RH7a93wjaRrMxrFIjRTcNmbvv6b/aUDIVMI6D9eL + EYYev3WlUXGN1jPLEFy09IkIhDFMUCndcEOJrImPf7z0iU+UPvnJ8qc/Xbnnnsavf735/vtJnGj/6U/p + xItZRqqMmlkGG+dvf0s2/dExRojJkxjhlZpKT68MM79gBOXfL/z0p887/fQMCE86aTUgfJeWmKE2G2kY + z9FUQujmcf/+74f80z+RUx+A0M0yuEYdCK1oqsYI3TWaZVDUzaOojRFaZZm9AkKcz6eecsK2rWSh/xd9 + 7FlmdCAEfwjakUQxVCrNVCqEcw7QgekxlIaZmTnpsMMMDgmfklBIhzPKCXLjMfUzapjqHv78H/7kT26a + nKSENzkYjy2Xj5UYoaTtA4RWOJvYZLCDauUdsNB9Lvt5RhmgLWd2f/bDHSqGppqCBnsEttU+lKMC6WEa + 6R6cHXJngi78W5s7mCFrsYJMwEeTKyNHzHViSjiivh4ZoRPKECNJp8dJFoSmOysR1Kghf05NjJMsARLY + SvLeJifGbD5o8R6P+qSIyI/RSit5TSgkEf4QtYNqsxF8MY3HNzXuoupsU+OYekFxwUiNGLODrrsQaEhd + yIDNuzfEvIjEgencTpLqVKQTbAsuzSQKmORCgE+gINkOGE1jDC+gVBrt41RwimanJtkskTo95mcIF8RP + A1RllnFlKyn2so1wprClbAwKUkciRhB5SVBQGKESJlqHuoETIOQloJHoPsmFaeVP0TBPPpEgWX9Pz+Lc + nAEhaVF+z1oe4c4d9c0yBSCkHP9rX/ta84i+9jWEtcKDat3UZUSStbnyPfd8gYyOnDx74okGcj6hKWCh + TFkECKVsW10gjMRuDWm0ua40mgKhx7ZN/z/llNJJJ1WOP6589NENLCec0HDiiTTjLT3zmaVXvaryyU+2 + AYR/9EfkEVJue/p//s+lv/97ysrs0iqjpPqR8Pd0bTdh2fRYWN8XsRAgpHbPx9/znq3adkKmsOy5njQK + aoKg5NRfpZiK+waiiRMH1+huc41SXEZdo5Y+0b0GECZ96rPS24WUiVrXqBTdjkB4yimnIK37D7eaNEph + rC2bV/r7pBkvE+o9Z8NLsESLd+zP6LzO9+pUNDfg1n0jQMhNjUTZUi4zkoFPOCypcLaMwbdSOZzmcI2N + ZHE9rbv7sVu2GBbyoGL9ddddh+pCKN6ihrVYSK3RLzz72a9oaqJ+N65RGlwcqa7RWS2cxgfxccigDoQS + N6/HZTXatKpeWuBe/h25w+amp0nw2ivQUlk1/DogS1tzG0VkDE3XuR+7ytNH+ifj7OTI6HDPQN1rwPDD + Wax+NdlTygVjs4hCKn0tY6zlgrKNEUc+yMZTl0YV7ay4qGOeaKBMmwGIAkGUyXTWTFWbq3V3JekTqQ+e + 5+FPwTNtIk8VmEERPytLjZXNkhQo/xKFnyAcqLFAb6WkLCFwhTwjXLUcTJre4MQxoXq5etkxmYFAU8iO + F8NLlsAemFk+1NfcksiVBazK4FCpYWJ4yRRO43mGcEDmzOQE+QOYZ+QYMo+MAqFkFmb0sSCTKiMECAMj + BPO84jbkDMJHR1ycn8AhwcIcCAGE7a3YUWZnprmXqUNWm1APEKK1klB/Xz6PMAVCanDzdtINraAa6Ouf + glx07NFHY1vFxUoHqM9+9jNpf1cNKJ5g9bsjEOYYodFEZ4SrSaNCnTXjvg4j/OY3NX3iqbVmGbWbyse6 + q8suez5Rk1gg9FJrprubmpfl8fEyrRgoK3POOQ0vfWnD3Xe3/PznAxQatTzCv/u7zSTUaydeym3Thpd4 + HlE9cuE5FbdXq3A7I4W2fOYHP3gB+Gr3KmaZK6+sNctQXIbmVtaJAky1Kmug7NH/9m8k1G/9678mj1Aa + E1oe4cMP54AwkUat+0RWcXs9dLDWLMOJRfpeHQiNRtkQLg9OI113mL6sBVJ8eXzd/AbrHFLXCXirbaYD + 06p8iJesoyzfgIL9Q309HBbIREkXapvh+CWSR3ckGucepw0CqcFNOuB54+OnHXKIYSHyMUY1hBGmDFjF + uNyRRFI4/MHrXndtczMtLM7j7eXyqaXSoVrCjdKmYC0fVABCLv7aM8OXGB0ZxmRXH8Up0DA2unP7FjIZ + ChtwnifHRzETrf80gjqclvQYdJ64X5zSP912K+bedmET9mfG/HQ7zw50NE2eKIAxWYE8REJpd1RMYyhg + YdZeKaKdbSysjkGapHhmcDYj5l+tiSnVHiLz8+owJnLmFgfL1G5g7hgfXAz/dGUwztgGUkBSY37AIS7Q + 4eamYfwR2GEkI6KRYqHC6rQtkQFz3UCgMr/M+ZkPB+bqkAVV07XQUCk0LdcSrZiBLGrYKaT0mTMlYJjB + IWXZCMMbIwy8zdhbLpiXBg4Dz3Od0za2CCX4t3vnzoO37yCNPqAmEkS2Z1F4DTXTt9tKyT5MYoQwM2+H + CyYBdaedduqLX/xijJ2Fhr0wQnXZtJprFHmzUGKN3e46YCczXYqWpRmBRhZZSKgng4ZcOd7+ghe8gEQ9 + /DIp5yNYCJTiMyeGwuDAnwXFyNtf1OrbJo1yto0yrsYIDc8s0FgXCIHJWiD8v//3N6eccvTwcOPEeOP0 + dHl5RSqIkvMHPj360WXKgZ57bum88yoXXlii/tmllzZQVo3AIf++6lUNl13WcO21DV//evt/+28A4STu + TW3AtOPf//1QbcaLgEmZbIyjtI8wdZTU+JQUfuzv/u7OZz0LkUDu/iOOqGWE0EEii7eqLkpjJiyjICv4 + ehJYSzMm8vdBX8goiYxaWSaUWFtNGl0DCN0pUz99QhkhxWA5seTOWXPK//5nf2aMMBkSGRutWzzSXlB9 + pWjMHg2P+++KXP+wvvaW3EgMhQw3RjjE9arGUdLqe1W6pGWS1Vo7iu6ACJuQQmtk39n5lE2brB8Fj2c+ + 85ncgZZrz+wPEw2BgX/9l3/53pVX3tTefgVNDRsbKY5F+1/6C4plVBsqYbgE2ayVkk8nGF4pUDI2xodn + D1aaWrja1+FbAIT0uyxsYLDwSJ2uR2Q/dY+H2dOWzctoCwlk1sYFwyxSgZBu66IaCoIVH7JGA3LZqw6T + Dod8EEaN8bER8goYc306HMOBAQtr8c/jhY52Hg604SzBQgNFgU/3dsYnQe2k21BvZ8fE8EA/NQmaBB2l + 1lyMBTLGYTbZuHFpYKA3minqN39IaF+wfXoXCI/t1ea5p2G/QPhioroBUsICAy+09VxvU+NjTCI5MKDI + QcvJnHFEkLKvr8cVVEWyAJyCYe1UdZnetHEJMo0xBGeNlRg1OTQin9BBR8EcjuqWBoQA3gaNERK899qH + xgi3bN5EofznPve54FnaMUaAECrZ2jI9OckbcQZy/+ak0baW3bsPomIZXSnSFk7s1nyqI0MDU5Oj9Knn + 7TRjAmgLafukbfT1doGvFNom/7iQX89nWQsLmU0Ua73KlYP+vG3rxg2LsxhnOCFrmmWamVSswgibLUb4 + kY+88VvfOvuBB854+OFHf/e7h959d8cHPlD6zGekQyF9ClnoU2hPfI39CUiQ3vDkJ8tCP6bHPKbh6U+n + +lr5F78w4+is9mCyVELChJZTD4ejuAykELcLkPaOGCOEEX7oP/7jA1dfPWepFBTgzucRfkIZJIkTr9UG + FCTmE3FEF8WGYwFCTyKcjEW3e6zo9sc+JvVFjQ7ef38uRui5g3WTCOs25vUY4QE7d3JiyRewkkBMawIQ + BkWT0dUKsbCQyM5w/p+hdD4CQzG3WloGJaUjVncNVCRu56SQFAQIHHXRjqV5b6ViWPg8+hQ2N9On8NG7 + dxsWIpMiy3AvoaKIc/oP/uDz5557Y1PTVU1N2GRou/qUcvkxpRI9ntBF2SdAh5bMmfNsesMrQiAnnnDU + 5s2IsnsBYMZymGEUyNwjcL72YhfFA17tK7j5xffNPX/EYQcbEEbziwGh/BOXnF8GsKAhnOkPRRqola9j + veygjqYxQpCJjAIGX9yejL9RHQ2BQ6ODHhH0CF/ifwnml3QNIxcOUqxJBmMGhyFSSF/DpqYOPJIERkO2 + g6pe+Cq7u0kXo5iWtQY05he2UTn0hOOPeMmLz5uaJKSIkCtUjNE/2D4lZT5kMkQLTJYj77Anfs6geWaF + zcxE497LNHVBUc3gJ3LBwAgdC5sZmklCI8+tt7dLNs7TNaeP/KwAeWenRMFSMFMuSA/ednJ/DzwAa3Zb + T49pBBnti0SzxYquJVJq2CbKqoKCIIUDoaOdAmEbjdC5N5/85CfD7dKO8waEtCamLQn37wknnEDfvgwI + Fe2OOOwwWlIgmaYNDgUIFX2puj3Q17NNYyX4yann6eFJ28/73//exYVpko8R1hBmU+chr1rPJgdC+9FT + swwh5xOPP2Lz5g0GhKvFCI0OrgaEvGSM8MMfvgZ4wD8CWvzoR7L88IfFJV2vz0s/+1npfe9reNzjiBHK + v/QO5AkLVpo/+qN+gBC/DJU/UUfhaqqOWrlRI4WE98ibROHE/0mlGPPLkCz/8Te+8WCqjHLnLi6Wksoy + uExJt0AUhUe+Sm0yRgcp24YuehS6qNVXswAhQEhvXgqf1gJhjVnGa42WVnONpqTQS6xxHwOExAhpMGlm + qBogBDQYwhnIDQtV4INS7Ud+9l6MuPu8KWMcabwMf7V7MKHX0+qt7ijqJUVBMbbQMmI3WEjb3nKZkqFo + pOc3NlIH8uKOjqcuLx9/9NEEzC+88EJmnSQtfeXNb3737t2vVRS8hOggnefK5ccpHbQ2TPS4cF3UgNAx + RPTlThq87EsmJgNXZ1vHnin5uk8fAENLLCbsq72jLtTh6T/s0IMAmFp6mhI+e257MA7nfybYVscpakjJ + NQoKZozQ0oHV9RkSBoNkmqqjxvMqSHDUnAOE2Fq1xxwEui4axc+iLpoXPzMhVMdxrDBBHU1ZIKJrT2eX + ViHPCmgBBnggzbkH+mW0IHmODXVmZgIk4FXYFYgIbKCY1ng7C2kPwttoa8AYquYXd4QGI4xnOxgcigQH + sCEptEnRS3yemvOQS1qIbM8pXXhjQR0NmBfpGgBfS+kM5LCegn+0qeCCnxgfATUTFhjAT6p4yx7yQBit + pJERtmJ7MdcojNADEyqNtlHGk4Ro3G0kPhHId6gzaXRidGjn1hD1ZyKbsUn0z7aWY485GlZHh/c0P4ru + hmbPSYt9EyLh7XRnS8XPW15389BAHz4daCU5V2kMks1QSg0FtUg5ZRmojRXqlduVwJx4eHgA9ZUPWoMR + BiCsL41KHuHTAhBe95WvNDPcf/3rYalNJKc/Q7ogKlJo9MorS2ecETrUGxbyJ9nrf/RHPX/8x6O//KWo + o9g46ZqrDSioL0NRUEjh0xTGADMML2AhZWKYZxD8Aws/9ba3nTA3J7c+vQnRWmNCPUW68ciAguQgkjUB + p6RaG6VqkFtpUn/4v/zLzr//+02U+ab1BBFKbczbS6HRH/xA+hEijTojdCBUXTRXaHRtm4ydkxQIJ8bH + Ub8f/7jHUR7vmmuusR5M4qHIPC6Wgm7db9sbSm0NlXapKUNLpr2uBrbuoXk/NzTmtOqwnhSK42tJ3VFt + HAgWEiykQCgwRj8K4nykA1I4lLxALDAkCD5vZOTMgw8+76lPvf75z7/ztNNu6O6+uqnpcuWCL6hUziuV + nkjqaKl0mAIqdJAMwl7df0EX3c9vZ8P6fu4kfTt7IyVOWintzYOGgocesosb295kjMqec/LhLKszxUzI + TZMiajhiYIAFkOTbAyjWQckVUwMze4M91VggWQxS189oYrLY5uFRTxeV75I6Ylz5NDzUVzNG6KIoIzKj + p8/6a6f/yRqlBZEc2GfZyEj5QGZxIqSFOmdeAsajfZkLBlCRwi0Qt5jhYEKoQ2CeBQoy4caktRCzhL6g + Uqa+Fc9kyIKCaRhPsSrAlWEhNloouwGhL26xMQwz5OPnsM4VJoo6F7RtHAjzkmkw0fAqjJDFgdBBCyC0 + YtZHH3UUCXbMU/GtJEB4EicHmIHVmahDXry3hiAFgu6Vn/zkJ/B8/uM//mPeZcMbW6RvJSerLVRog1Be + eeWVhc4SL3vpS/mKL3jBhWCklSlO92NAKDVLW5uZ4uw+aMeuA7ehNtssJwgD0oOJ/o6Cl2swQgsT1pVG + e7s6zz/v2TDCD37wNV/+cksqA9blRrF1n4AHHSeou02HesCP3vS2GBCiQ/78511kL1haPUkUeEchhdqD + 4gSFLgAMgZTeEdRII1iI1IlGiokUOPzYXXedQqE1bsm+vtCG6Yc/bPrtb9FC2QYuCArS1BdRFGZJdPDk + 3/1O6KBXGSWVnt4XWmWUAGHnQw9Jh/pUGl0FCIUOrscvkwKhe0R5ouZtuSMFCIuKnUUKgUC6L2ljXhpQ + 0KT3/4sPUeISLDTpF8QCCwnpzWq8kMwHa2H/GKWGGEGfqXAIO8QRc2lT02VNTXTxBQIJJT6/XH52qURo + EBQ8AkFcGzABq9BB84umdNDhgfFqdGgYvvJf8xz6ca6BZwnzk54VCs/C/OCXSFW1cxH3hSoXzGiiU8OE + LJpYGrFQP6kojQbUc8tozJEqYp5DYAjjGZIZWCbSqAuhWZkYx8g0CshKkAbvKIOXS6N1ooNJOmABEVOD + aNA/YwuIyBcr7NzoWqELhJk/mbVQ10akx1jtLAW8iIXysuuiINZQf7+kthfT+wIjXDVKl6Q3RLiKQT74 + pdpoUxRUFtjGesifNH9ykGvLkNIBVV4FWbEsF7AwIq7tGYk2BULcoV7MU4Cwg49rw7ECSNBfIu2gS42x + QOzapKaoqaMkRBUqsRV84P/4j//AuyTbvYd2m+BsCy42w9EXvvCFaSdeMYVqqiIcAqsOttK3vvWt3imQ + Vz/zmU+zq9HhwdFhSP/kY8961MknHk2JokLldAdCixGic2JEcED1BvcGhDwQ8fwM4NwZHxl+7vnnsfJd + 77r+K1/pAAZSIljAwoQ/BSD81rfKL3xhfSD82c86f/YzkijEMkOdl1//evl//a/twJW258U+ikBKlRko + HVgILwTkML/caCHDO+88YmpKbmRrzKuMECDEX4PRFIMMKEhWPmXVEEUJOh5j0cG//dtNyLCIsdhkSJyg + 0ht+0Ycf7njoobYCECICI/z+5CeWPpgVlCmg4HrMMikQwgromeVYqENPgw0qiht0lqL7UtKVl05M/x99 + uEBqBcSNF5pGiokU78ySt7BvaHhUqXQGmqfCIcny+ELpZc+CakqJrPPK5afS17dUelSlfGJ7O4n5y2oW + tawJazRvNhkmFxg78XwatDDETU9MDPUP/GeeQ9gGEuhq2LbPR2IQ5W83W6ajXWoQTVaGNzmZS6CuiHmI + eZQQQlpydFyb5EWyZxCoBV+CM5OESxU8pI6aIK0JpDEKaLZP9bzE4F+EQAsHhvR5bSHUZZWraiAw11Ug + ml9q8yKKHSRMBXXhFHjgxzJiV1sXBlUdcpUAnscCayuzBC+MVHyWQGlqh3GbqLwrR+ny0T6hdDkVNMf/ + CigIfgwPDWBjZgFEEEW1uIy/JSN/Er1TnTaioMChcceEIOqayAgtRviiF73Iu8lHIGxHouAlSmGQVp8y + QgsuinF0RoyjPJ72tKcRFEz79qUcjud3v/e96s2B34fYpAMhCRj4ZVLg1DBkyxmnnw56sWcoY1rdRjrd + S/tVIuPSf2p6apyahZzMgnFGgVBOsgEhGmzaB7gWCEFcugLYYUM6+YjHPfasV77ylbff/oqvfrWvwAgd + CVJEVFIo+HHffaVvfKNE1WwUUWwyBUb40592EqJzUmiRwn/+551RICWqB5kDC+GFaKTEC+F5hAyBw5tv + vXUbze4lwNFIeqK1YQIICSviryH1Ai5IBj0piaisx1FfFK5JG0Kig1pre1Jb8g6ii1Lm5oc/bKcI6gUX + lJwRgoIGhARE19BF7VTUOmUK0ijnM21LwllN+xHyFaTHnDXApY0QyAcQOhauAYTyTsmV3gsnyD6Pwqu9 + kUFLeibUixQqxoesEMNCpbsCXZg8cbhYyNCoIYkQxynbe4y0Wq2AiPSZo4YkvphzFAIfXSpRR4bucYe3 + t2+iX53uAYqJWZTduk2GDxURS2qU6Gkx58t/4iniU/l07QT5CPwu7ERbTmYStO00TyUD2sXUiJTUyZZ8 + f83eEx21RiY1OCQNo7KyuLRt0ybthRswskYLdaUzZAfa35H5Ceo4C5T15TJtBudnpzkhCRYazmnwLxhB + DdUyR6ghH0GvwcE+cCg1xayGiDVewSxfMH3JgTCFvaiO1kmTALowc3IYwfZZp/hLgDc3eQoKqqUziQvm + chUybTOLz6WYJ/iUQppuzxoTMMOWbIA/iVPEv7Z9WEQe1CWAojwHn3LbaKQwGmcMFAMuGiM0IARvnJZd + f/11MEJuLLxIhnMkBf7pn/6pgYQxQnsvy2GxVgalW8AzEh6wf6OL/vrXv06xbdPGZeKRWnwg5C9KKFEf + xx13XFrXho9YWV7i1YN27aJS8aMe9SiKFWMg8L15Ggbx3zDRITacFEM3SYDpAGJ1b3fnxo0r9kEUynHa + WguEHD8mVdsAIARBIaY05bjiigvuvbe3wAhrgbAgjX796wKEQCBAaFjo0ugf/mE7UPTTnw784he0qp/8 + 1a/mACoE0n/+5wM0lYJgIe0J4YVopE9VhgfCvVgJ35W33LIyRtNXvWex3igQNv72t1BAa8MLfAKigoK/ + +93hv/nNLhNF/+qvQnRQsyaEDhId/MEP2h54oOX5zy9//OM512iBEdbVgdfDCMkISBsvOxAKL+T+zwZM + uGFzEEVFGgUOFRTTB74EBhcbB7mCrBLjIw5v698hY9zWTRsn8S2tMu67RmremVBuplTuL1WgaYAZkAY1 + JGp4gMLhMaUSYikEEeTDGnpaqXQyuaLqESWsSFyQjUnPhwsaCnZSS5CxMk3CXP/RPxJb2tC8nj0Baf39 + fWv4ZWwnVlDM8Y6rxIGwIITmVVBzytg+wn+4QiDEhJcEDutkRwgG2jyBV7s7xfokAb98XND/rE2cMC6Y + PPRPLahtQLhpeenwQw5iWuBbJrwwwGGwg7ovNFpgdOwmJyI6PzNrTKyOlppiiqb5IhCGbMKQ9hfqX+vO + Q+fbpEFEE2qjqLICVC1zs1Ojo0NJ4kRa9tpy2KGVws8D8uVTFPJaqGxJDC+hdxkEpgG8BAsTXIwA6a+6 + IybFOcNLB0I+EZpExDK/jfHCDHH5kwMD6lg2aKN5WsfdddddpPMyYAGE8E7FwoBzgISXj5H2CwqBBocM + UEcdeaQhDWImSfS0c6IYDTkPWGysTNpzn/sc/SzZXoHQUhhb7V08yNMgmxCfPfCJPmlZFjt37rBXObbb + brvN45TPOf88s9tYQr0sej3Yc5sJKRBKO53F+ektWzbZfuAoXi7uJK1Nw+KH8fjHP560ZmsMQK0PXuJ7 + nXvuueeff+7HP95Du/Z6Hplcc1oXSIkROhA+4QmZX+bMM3GNNvzBH7Q9/DCt6mnJZALpFK4ZUilIeIfA + 0S9JsRCNlMwHuB3Yhn2GGjGwwxffcsuiAqE8qLttQPhv/3aWbnO2NpqAUMIFD6cl/f/+39tJVcQj8+d/ + ThI9ZlGS6MUsSotgooM/+EErBcGRRu+9t+EP/7DhgQckfSIfI6wfF6ztx+tnJo0RIpinVRocCElA3rxp + A8HdMIriFKUWS6CDDoSJNMrIsrgwNz6OQUQepketZwj+/W3DKCp3GN2xVn+kWAhitZWbRtp7hts6kC8B + M48aGhzCDg9SRKTpLuBHOPDQcnl3Y+OOUgmPKO4YeKSjYHu5PDs2NjE8BKPOqhH8/r5tvT0r/1uXBWZ+ + buYp5z5ubg7or/OwmQS/KeZ3NLPCxIL7mUkPI5eiXYS7yDmdAzoKhqlSSwtAaMUBUp6Y54VhOhkgNFYT + BQ+pR0AuK0SSf3nOnI2fm9C2I1+M/wV11PEvBAVJUpSRpSUyv6B5CuELXpiQTptFAT1TIqbSOwVUzKpV + RGvb54buSHkimNQFjel9ZiZERiP9MQyasQQMNt2RoUGua3DOvDmalpelTBiSWTaFiYq6JlNBHRdTSZMJ + AQ4OdTKnkbzw3FmgEsosnqfUzUih8EJle7lXDeHAiQTqov4JcezqJHgmMbjcBjgsBcITOBQgBOpYDAhP + PfVUaBnd4yh7fe21r7aX2M0ODROiXt56660GRac+6mTDyLC0CRY6LyTd4uUvfzkmcBwulIPBBXPZpZds + XFmwuKCeZHJIAo76ux772MdiWyVxEK8pn2JIuXlTADCG1Isvvpj2NSaQetVvI+5m3OXrqOidieESEsbU + 09VplJcHtY7hrHRYZCfWj9CS7u1VqCf+WDYA8m+++WZeItMR0+zZZ5/1nvf0f+c76wRCERUBQkykL3iB + SKMGhCyWSgEQ/vjHLeQtYFcBlqw9IUnuBAuhbmAhtWYoh6Z118iyB9WwzwCHZASieT7z5ptnVBqVSfCh + hzbccANAWPntb61CG0SQHIyjoZXGBUFBDQ3OaMoEHhkxi9INigrgiKIPPtjy/e83P//5HG3DX/0VXlYQ + WnTRhx/2GOGqQFg7J6h1jXJKn/KUp6TRX5NGsWTPzkxxX8RhUY2j5Q4xy5g0Sg+mtPsE4x53bIEW/OcO + +/v+aQ6HHc2tQ509nU3NoAeUjkGalDdTSmfVU0r8j3RDyB8L0EjFrO1tbfS4B0Cky4QaUHkjb28tV3oZ + XaisANdslBnfGjMDSQ2U+n9r5USIOF2m3c1eNKww7XE952VifOzAndvWLqnO3oyTFXbIVxsbpWRKaCqZ + RASNCGb/+hvTlREFPY8ww8WUKPJFREctl8Bh+uR2lUvdunQx3SmX0Dd5SYEwC/ulfNB0UfTR/u7e7g4q + ySkLLfplxEQTeWEx+GdOUddOa4XQNBxYzx1TzJGvoQVZ2ReOE7Z3wnGHa4p9SKIA8mI4zVQ7GalHBwYZ + tT1Z0EN9Yj3tJBnRMTJIoBEmC75N2ZV4TzMUDNjmgicvsc/R0UGaKkXzp4IcBcyErofjKQCebSBLAnUQ + QQ0Mhpfsib+RwyCHnUpAKTpGIGwd6O/lYpuamlzesHTgATuPOvIIlElDQf6lIDLFE2ampzeuLO8+eNej + T3vUhg0LBoT2BfVI5IDn52exy5900kmorCDKK15x+XOf85ytmzceediuA7ZvRqVEkrXIqNFBvh89KIgU + skxNTgBX27ZtOfDAA7Zs2mSMkBGTm4hX+Wd+bhZid/BBu0jMGBsZsRwMD/eaKziGfpNq6eIiboTujwwP + s1AKB5mUiifHHHXU5Nh4r0xShFZS5WB4eGh8bGx+bo4Ntm3dysEAkIODg5OTEyw33dhaCIn5n7XKIRop + 9cnAwosvDkDopNAY4Y9/3IwyaQ3rVSAVBylOFrBQeeGWf/qnnf/2bwerj/ToCIfUC0Usffz1148ODGjP + 7nKZnHplhAAhLhuw8BjyEX/7291AKXn6tB6knCnGVHOKwj7NI/OjH4lHBi74wAPN3/9+E0BIXPDv/16w + 8M//vOFP/qThT/+04Re/gOlm9dXWk0FYFwjBQuql/OpXvzJRHSDE6UBdoXwRNTXLMMBTmqwMb2pv7+xp + pfLwaqrjegbf/1LbMFpjJXjMKSdsWVnyqCEZ96Aa2AYcQvWAOhAR8RM3DbjIv+DfZLkM+wcCYZDujknT + 59mzlt6gld2qQjHDb1tjK/HYtc8JQNhcCY2c/oucPYOxQiJN7VVRw/MC1QvvFrAMgMhZAm2yWKDiH5xP + 8a/UUyoNlUvj5RJmtLlyabpcGiuXBhQRIxYKwjkcqgqakUL2TGI76mJqFjX1wh+GYQXAU2Yg5pR6gcBA + BxGWcUSw5Roe0VApWxvLCXBq7TEbEw0Xueu0n3Cz1nMh/hdcMKzBVyKMXIt2wgslB4Jy0r09Si/SXEBh + ZoN9fcMDA1pPMqt5XZOZkCUnFIhgKk662gk40RNqYmKEPrLGEfnX6s4YEEZqmPK/BO00HMghDQ/39/cX + cc7wkn2CtNs2rZBx6B9huzXaB6Ql/8oa00Xjq7kNSJkAtlXyBeNFzZa3w327xAtqVI839nR28C+b4HLF + 1QIKy2674Kkx60MTMGanJ/p6uw323IlqZWuifKpPkp4V/qcqU2kOaFoYPcyQsJJSClAwOybgW9E1phkz + 4+NTo2OAs74k8Gwv2ZOQpyhtnmTNc59Lf8Gia7SuX0bTDMQv873vla66qgQLfOITAym055/+NOn2tOpt + /+EPO4Alw0KASnmhaaQb/u7vNuEjRSYF1Qj1qZuUnoUn/va3J734xd0MewSL+U5LSyV1jZbVcXo0XhuI + IB5Rwo0WF4QLGgpikEGJpcT2D38oKRMPPCCi6AMPNH3ve43Pe17pa19r+Id/aPh//p+Gv/7rhv/xPwQU + f/pTvqykTNTmDtqauoyQPEvOkhTd3hC6TwCEiOqI3r/5zW8MCDFmD/XSKrJWUwwOk+bWtr6BvnWqbv9F + Ruw9HwaDy8nHH7OyOG+Zk4CZm2goQGM+GmKHYB6gaAvPwUiDQAKmACfnjHcFmyijuwmCNt6v/hBGuL4i + BUXM2fPXWlXqTPkZ43CBsCYiZzj49U96/PtG5idsD3ASPUiKrIbciYIiysniGMaGaEPbJ+yTcrWUhC2V + Osul3nJpGPArlxZKpS3l0oHl0m5E6XJpZ6m0XC7P0Pc4w8Jii6UiL1QM9LyImidGCnM6JyIpw6YIkiQm + xrLaoJ3l/HG3qAdQcqUBJ+0GbKKol4+RBEErGZrW9oxA6PmCkgVv/hHQy/bj8T9lJ5b5YIJnK9kTmDNH + h4es219MirBEQHYikJCDN40wQWvAUFvvgmfhT0c+eRJcMAJyfLs+avUCwCmBw+WhjDCqoDnzi61XkMvQ + EYwxRmgLuzVOaX/C+SZGR1iTMkLbiQNe+oTjsUNKYdLxEm43MT5KPfpwNrT+wJalDds2rsA7M8k0aqeK + rB2zMzCrgMQW7ARQ4eh5IAxmVCW7MfXeAoqGhbE+qkisUfSOKZ6eCWqphGWmZ8942hOe9fQngYXmIHWE + s+4Z0otDcw0LKJj+aUB45hmVWrOMgUE9Rihc6v77S298Y8nMMjBCqqw997kNV10l2+PzBIoAJGDJsJAM + d3ghtbCJF1L8hajer3+9QmlQgnzQO3COLIhq9Yh/+IdDnvjEps6O0Hh1ZKR0/fVURCv/y79s04jgDtgk + RJDcRMglsArRVBQcgAuCguixfOiDD7Z9//siit5/f+P3v9943nml226T0OCf/ZkA4f/+3w1/8zcw2jrf + qxYXHQ6BQGeEn/hEw8J8BoSI6jfddJMlrgCEWm+/TlHodORc/6i4F0M1N1tvT48VBS0M0/85oqvZKAzu + YWduohnq7JjjvmltMUT0hT+hjOjHQKAZRAtccC++/N5vKoNdG7HI/XUksQdGKsbG1Q6hFscLP3+Cmjng + Zz33ubo9JWmPSTh/OhDqFMGFUK0j09g42Nsr4zT8jzxc8K8k+DdfKm0F/EqlY8vlU8riVDqjXDqtUjmu + qeng5qbNjY1g4SAhTBo/SdUZ0Ugd4Qz2Co9I+1JEDAbR1CDj/I/xS2iaMkKXQPmT8vO07LAykpp0oeJ1 + VkOrApOghhZ4aYTP4MoooCWYp1aXuIFnuAexVLeRrhHatCHkPzC8IhKyyDgbgdBzBFP/pw3lhPeogjY9 + OQFt9Vedh7HnhIHlAoHO88zPCaQ5aLEGxJqcRAGTnHpfXAgNuqiyvYCUCYjaSlNKfUvABnmwgILpn0Hh + BLqSNyYbqBIbPxGUnZoaw1LkqI8wvjA5feDWrRNjo5YdIVaaIN7K1AG/6/TUGD9c9PtEY62E9wIPzs5V + 0mEqlZHz5z9X6C4mvYSsGCZMXDDs8LBDd532qBMWF2ZBYr+EEk9NuPByF0z0YWno0do8VXbsqPhYv0fL + jJHC73639OlPl84/v+Hccxue85yGyy9vuOMOYUuE4qBiQBFYiEDqWAgvJKGCPD84nMmkCJsGh+icIOJ/ + /MeuH/1o+fDD5TbUIEQJVxwNKH74w9Lf/z01S7cCgbBJiCBVTAFUdcc4F8Qg06mhQXGKgoJwQVDwW9+q + XHddCdijB+HPfiZAiED63e8Kqq1WXHQ1RmhldzDLUDpnZkYkKOLjmzduWNmwwAwmzSnk+d4PzPv9DmaJ + 1MTitk5QsIHWLVuWV7jm93v3e7cDDxwyhp112omXvug5s+MjVn48XRz/HAL/c6wxXFsyCncSI8txTf7s + 6+7t7xE35vq/MBtrumjuYRDivK0wOzGmm/xrEBi2clKosGHZEbJ5treIrnElllQxv5DbgRaN2jxXKm0s + l7aXhPwdWymfVi4/oVx6GrULKpXntjQ/q739qf39Z42MHNvff2Bb24bGRvTSHoBQlFVuvwwIaxCxxOx7 + ZWWREVz8NcVH3drZGUF0FDS6JqXpOjoMBTV73VvtmN5VYQjeuLJIbVIb2nxc4wkFPHl7Tdck72ekkmZS + KTSBSUa9YISxBHlzx+RRMM1zyPwvqTXU2BgLdAPLYsG9uRoUpUAoRA3nJ0GFQqZEPv4XYUl4oYKf8qcE + GlO8ZLYkqm+gkiEMWfdg2BttcBzz1sBON/gYxxX0lTwmS/nIsC3dQ13SnK9FkKuGmi9okP0cYX1S5dwD + uvbTczVaDgx4wSHB8vlGXBjTk+Ow79RXVfe5XVdsz2Ky/NCQdK9dBynM5EQLE956a8PLX95w000N1B2l + GjX5eX/6p+X77gMIIWSChYTrDAstoQLvjMqkUMNJ8IzkP/pFAG8g4r/+69Z3vnNofq7U0SKSCTdZR0fp + kksQWst//ddz9FcCO3mLEkHk0FHtOJhxQUAXFLz/fkRRULDpu99tvO8+aC5LicqoDz0kywMPiMdnbRSs + m0Hoxedglu98Z8PwkAAht7HMfrhPNXPKl3V6LOrLbnWHYB8Z1x6dC5txccxMT+BH5U5f/7D+SG1pWMjF + tXXT8u4Dt1E/wyVTI3+mgrIYfbTCA+vBH64M7kAjH/tD6WpPNXsbGxpZf55+gcylRJygl2YXSCEVO0gl + dlbdLIO9dA/G9tKdpNDoqAleoD719oopWVRTWUQIpVQ9PRU3a4GeU8rl08vlx5bLTyqXnl4qPbex8qKW + lku6Oi/tH3jZ+PhFs7PPXV4+Z3n5pImJQ3t6tra0zjRWCMO2Ch2Uh2Oh/mW4GM42OhPzbvtqtjL+62XV + sjqiBZk0HYwYd8AAoEVRsBFggxipqpklSJhQ6fXSDAsjOxQMS00TXgUmXxetNgU+dC+yzVLykWqhPqyn + GX4+7gs2xBSFiYnRrVtWGEl99M+4nRIvYXgJk+NViqMuLc6ayioFzAYkVOmczxhhCm/23DlctmVkb76x + KKUSsmt1OJSNVVnNHDdK4HSHsrjummq2eVTLitcYmXO2Z5vVRjejdBxhUkOMfFD6XqlxKpJr1nMxTkdC + pbpg1g31fSQwLD+36tseMoSgo9zaZaOoRovmyuTE+O5dBzA7yahhTeeKIEIoEDKrGxsbtu2xQlM4dLUM + itVyCgHCr32t9OEP03FCkhN++cuGv/xLqUH6ne80AkUJFkq8EO8MiQ1omCiZwCEVQaF0sEMMpVqJbf6X + v5x92tPQS8oEtvk1UWlwDZKq+PDD5b/4i0nCgWAnb+GN2n1egoLqEZW4oKGgckHighIa/O53KwDhd74D + Kpe/+U2WAIFWSq1uNbU1ooOcAcNCvibNp1pbRRpFrYc8cDs6BGbD3D7ACb/Hjh2bUTYK7GGgr29ilMr6 + +0Izhazst/q3nu8iNf7rNct1amg4ZwvfBN8CERPxYnjH3fV8jG7DEGgsYd/OyRqfY70p9mEiY0N2ume9 + 00Qi9/PPEM6gScJoAnU52LNpQAELC0yRPwGhxYUZMyUbEPIxcFssMLtKpceXyy8qly8rlV5RKl3e2HhZ + S/OlnR0vH+i/YnLiVfPzV68sX7Fp86WbN1+4adNTlxZPHR4+pqf34K6uWebFyggjEJoaKgfPpJuxhvHO + TaFJmDBrouRlYhT80khhLjsiwcJcQ3mLddVO2xOZy1HQnmSjobMEd8dEFdS5RdZEwqlhZgEt5jzkFDyH + N4W0rMiLQwUVTwj+1UWRFLpS7kXA7ICdm4kOshO+tXb4yFTTAgQab2OzoSGiXV31XhV11Dazo0KfHBkZ + TGOHqeCpKGhAqLKqpglFEhmikkWCGHI8gn6bhkjrUslIImW6YM/5ICPNfj7x9RDR1DUyHYm+pPA8rgm/ + oCuixvKjNuBquXWdDLYpQNeqk6cqgl1aXnIvAqdcnMiizMmYuZqYf/TRFUwlIERBI/XIWR4OQ9MGsJCF + QjNUtX74YfTS8re/DQKBQzksBKUeekiwkEge6KUphkPgGewQsZRQ369/Pf32t/cuLNgE1PzZ8iD6CJ/7 + 0z8lvkg4cJRAI+5QTZMgKEhzCcrHZO4YVUQdBYFAAcJvf5sFjM88olZZbbU8+tUSJ0wXpRHVZqz/WieZ + VK7ZqWlO5bqH8Hob8iX5VfjC/BLzc1KtI92KM7FxcWnL8kbG1f36mN/nm7mYN29YxqZcN++QMwWNYAJo + hE+CiKUS9zT+mnXWhuEtDK04LR4Rt8sjfib4BY2dpGSu9lPYBHs6ES/nduYEsj9N5LQzlEmg6R9hm1AF + 21CQffZx0zc2jpUaiAKeWypdXam8o1T6SGvL50aH3z8yfMfIyA0zM6/esOGaTZuu2bjx6g0bXjk7e8nY + 2PP6+8/t7DyhufmgxsYVuu9KjLDUjCgaGKHxQrkNcTZCARnFIv4ZCwxQp/hniqivEW3E8Ma7Jq0iUgVH + jL+aRGvEIBMHslxzXYvlmDKWskD/k8FX1EGxOhZFNubXJBdyKcIAiH75uJzzxWS5fTrux6E8KoEoom3L + y/ObNi1KmkBSEWYVBTKLujnasQeWFJwiBSwQwexPPDIkJhvPq8XCNExo4ArDBhr1kIo4J14Y9cjEdwV4 + Czga+GIasxRjS0KR0yBoeF5XYpWzmhXTCWfST3UHXWCyegW5VE4TUR0ajbjzpThmp/smBsgVIv7hNL9e + Lg8zWyVaenYJxYstC1drfFquapt1DQ+333STpNzVeiZXyy6IDtLgI4V4UYD0O98BfoSNGRZ+73topM1o + pGBhDBkChz0Kh/1AGobPX/1q5Otf75fooEyh00fDySdLjPAXv4BEDkMlSUyEU2pniUAE3SNqKMiHmigK + BCoKCgTGZvSGhVl90drvVYuCRgRZDwrS0ZCAqCESYSFGoXVyEr6SzTaiEpYoYNxLFNDjSlptgCacz9Sx + rmT6iI/p+7ZD5nNjwyP9fX11gZDLcdPGDWRWpjBmjKP29KnglfP7yLluKLUw9FWK6/ftaH9P7+IWAuT4 + jWvh0NFOvUQpC9QrKR8szKNg2CB3T8QdsJJheqCne6BSQRE9u1wGBT/Q1vbV8YkHNiz9eHH+a+PjH56a + etP8/GsW5q+cmLh8cPClXV0vbm15TmPl3DLdskqHlMsrmlCBLtrGQKAqaPxpsjqiMrQIAVfAS3yheTiM + 7BCps6lRp9hyNlINKpU960Kj17b2+bunRjgJ4H6BGwEMAQuTroE6YrYM9wzMDU2N9g0J4cq694mfZX5m + emlOQH1ujny20Vr8i2kMIbE9Sn8M6JlTFP63m27xOzYX4oIpKUw5VsStgGoBBWvEz7Xl0Dz4BT7HARgX + jCJnzupS+Nygr0IuyVTp40tYakQOVvUYFAITh05QYiMWomAj7Vr+iaNjXUJciBRaMTmbfNROQRz8Uqbu + sCc0Vxt/2IzT0wpjRb3MPJxMngwpswq0NrUqLNbby41dPOcgl5cb3/EOGfHXKLdWkEkjrlgBa0MdQSDV + JAULDQ7BQgsZklZhcAiZQ9UEEf/0T/u+8Y2eU0+lwXhWCt9v/F27Sj/+cemnPwU4pWSMWkO7cIeyE6KP + ZM2bNcZRkA+NKChUNQ+BgvGr0cE1iCCKMaHBL3yh4ZxzEEVlGEIzgp/UOiRWG2MZ6sxXEOFMBUHTzVir + FadyyifrhwYGxkaG/39jvHkksAL0giTYD6km9WJCCdckIkf6UZxQRCKuxdrPlxPF3tYVQ3wkjn6VfTho + ycHkDTWwAziu6wN7nLgU7Dh2ooznFSijf2gtUwRYmR2MlRsOL5deUCm/tVL54szM9y644KFLLvnBYYfR + /Pszfb1v6e29pqvzopaW5zdWnlUunVMuUwb9eMmgKG8ol8fLZfylbUIHBeRMES1kChoXTB2hMTRYUEGD + L0ZHE+n8kI4vFsJZhRqG4UnInIRWxRJiEBgRMVQSYSckCB51xO6R4UH25i7QlA6O9g4ujcxO9I9ITmGo + FCP0gsEUUyXEQgdiz44Ihap1S4bprBxMyoFStmd2jDRFIdUVDc8c1QrwBmJh7iDHxY0qtQzP1yi8meyZ + IZa/kamAYFm2Qdgsc3JqFLB2/5LIIQmhkv/npDDbzFAwj9P+9aXy9fQ4UrkyzmJef+E8eJwymXDUB8Iw + X8naSwVGmAqk+jxYghPzZ7HcmhNBF0tTXphefnGWFq6xdNLG802bynfeKYCBtTKlhqsIpIIrGn6zwFvA + QgNCxULIGVgocTsPGT7wAAAmcPiHf9j5i190ffzj7SefXOqg4EX02KVPlpfF6vKTn4jdhsJpZg21HAlN + FgwQ6O4Y/VxTRJ0L+rGlocFiEmFdHsycgKDgPfc00CJ42zbKv4TxkRG+tbGV23qfRmYTwCoNOlTUj/zx + iy/PLiCKohD8Hsf1vd+1il3rEmlBNRLY15nht/aBAADqfscbtr/ZDnv/jcM7ujo6x0dH+ckMpUCC2l2h + EtRZST6fmrMTpphWU3P8C08MCwsO0giBxSRCbhmyK7CJHlUqXVwpv6tU+tLmzd99y1seuPvuB08//dud + nZ+qVG5rrLwE1bQsbUBOLJeP0FTCjeXyXLk8rFVm8Mjg5wEEFQjTnhKFlMFcsrx7ZGyKZyFbRT6rIROE + Jl9TgMDU5xLQLmqh6JZ0W1WPTDbTd38EwyuMhKE5ixsJS8hGSSkh3SnZcYZtarcJ8GYiG8G5CIc5d6jS + lFwYrC7RcZqY0L68vSWPhQUoIoBnKJKilD33NU7yeEJ1jvhqgEN5NW4s+1GNkemDhf1quaPtOf9xIaxY + SyVNvw0ssAbRyeWHEVrKRJHCJmZXTjJgefhhu6hWo0UM/Kx6jDBXarwWKU1zjupozMGICTCRFKaZ9VnM + OAsVh94jaTJ+RhDlqksUC5+0+ZPp6fL555dIEkAmRQw0B01qJKmrlHoZUueFSg0zmdSp4YMPNv/4x60/ + +UnrV77S+spXNm7ZUsIU4zBoKOhYSE49UPTwwwKc4F9kgZIvr0RQINa0UCWCrogKENqRpAe2WlzQUNDg + 3L41xWgsd57mwJs2BSKYDWUhurMej+PqQ+8aw7pUS8H+3YgZcP8+Y58H/npv1IhRD7GK9QCSMEIdFR+R + Q2AGTwzykcoDkYJhqze/rcNHS+WJkdGZiQnetbdfhzMwOTnmHhknfNbbyPaWcEG5+mOQPIkWZtpoMX2Q + S4R8wUNKpeeVSnc2NHxudPRbz3nOfRdd9J0dO+6tVN74qaQpAAD/9ElEQVSJZaZcfiL4VyrtLJdWFP/Q + QrWgTLmdfracCk0fDJJoPl8+HxcM8GaYp+EZGWIcCFXVDuVjCnJTKpBGqudNIYL5xZFSbI/tKJ8hV6xm + +m/pFkIOUpuMoF2xX7ylSRTrf8KlDAhTu2NEzZwo6vQu0wDThL+6eFCM4WVxvghFlvyXgVaqbbrUaahm + pA01Nad/BtQML9k2cVHMi8cQPjEyv3S97lNQU/LrQ+jRDzU75gK1VRaYGFzNdMPHRauOUUlOJrOZleUF + q79aiJ5GaTRtzZH+RqEEqwGhY2QSMgzG0cQ+GgvsxVpC6TTL5VONLqfSqNi1CqKF8MKs+C3BjsrOnWUc + m+95T8OXviRiKdogHBFsWKVvn/BCgxx/Yhoppk0MnFhJH3yw8Uc/aqSC9ne+0/yRjzS9/OWV3bsb+vvD + HW5AmOVdxRLB5NSjcP7sZ60U8gY7f/KTFgqZUsLt4YebfvQjFtkhyw9+UHnooQqp9w89VH7wwZIv5EuA + o7ZYD6bCYmW4WQn48TXBQvjfBz4gfRBpprG0RO+d4sj3Xwma9nZUXvf2/BjU0RgZGUqFSlbK3Jt5yzrO + AdtQcWl0mKomjwCWEz2anpysa0xd93fKNqQa49QUqLZekOa7aOmy4hcppDekR+Ib84QBt/BZXZ2dywsL + VjXbKGACh6FPrycOKk7VfWgePbmDZA3iF8UpUy6/p7Hx88PDX5wY/0xrKyh4Vbn0hHL54LLUVBsrl/up + L1qmvigG0cACFeryKJh4RyPtc87nRUQlLUTjRFlPeemFK2HztNComdqzMIy7GHRlrm6Wi1raZydNh8+e + R3eMjK0MuC6NJk9Sg0ygHTURqWD6rxmjc9BYYEVpPMxcl84Ia8J7xeSHFN4EexSEnBSGEi0KSy6EJsBW + A4RWycX2IL4bcgd9mwBviLcH7doGJ7NsfSeRqdxqBzA82C/FaHI2nFDORr9gHhRz84A6OR6pOloLgana + XC+D3sKHObJofmzTRZFzRweHGAocAp38paBYAMjEZZoLEAoExuiglEGR/4d6DgqHmbxBVcH5+fJxx5Uu + vFCS5T/0IYmT4Sw1XDRESQHG8MZAiKQ9fVL+/veFF37xi7SJL7/pTeWLLy4/6lHljRsrfX0hHqFiTK7M + vd/zbDEyUvnEJ0q331553esqt9zCv408Ybn55rIvN91Uxubjy403luLScOONYbnhhhL1u2sXAO/aaxuu + vrrhooukOM6jHtVw4IENs7MNHB72230YY2vesjoKGPjv7WfY2dnbd61ze4YgM7ww8i1vmKevwj5TOg6R + dGmWR+RoTSJY57ewzYjiYrEBRfxdhJ9wcLMfawLu1hUZ0zva6wqb6//E2qMrHLBRPWsfyLAzPDhgpzrS + wfAFE8RTDbZc4Uexb+/Q6LKJxPPQNksl2mVBCp/eWLm2qektpdLbGhpeXypdVi4/vlQ+oFSaoBmTBQKl + vnbK/2I4kJXiXFanqEYIPSjoOfXpGhM8AwOM02rGDtSC+flpTMIqk9ojCxwaL1TAK4haXjTLuwrkgNCL + bKXuCUbVAhA6hzDnRSQTmdrpYmlqkynwlTzg5cqsoKl6YMxhMoUKf57qkFTgXFqYRQ51vGQn1nQwQcRE + 9gyhQdMzU7YXeGQeIx0FXe2UXWEtOfqo3aecfPTgILVMFQjj3gw1I3a2ETdFwKzrR41qbR2CWAxkxvoy + aTW41U5suj411LjmnCqlaZSXjIvp8QnKMNiWqR6wmoU4lRN4C7+gSu6hYoNP0fzKzE3atEhYKpmCiEzs + l5fLGDtPPVX65dJ3gpov4ArVy97whoY3vrGByOKb3tTwlrfwJ1n2AkvXXEN7itIzniFtBQ85pITISXe7 + zk7puGuRiPjw56aIZrNfNujoaJ6aaqJ+YlyAKJ7bv/Kkt5dFatD09DQMDHCczWAYz22lLrKNrgmLver/ + Mi1ngfmh4nkMiobIC7OzjJw+Zd/bcVgCgeXGhgq96SEe9cbwgYH+dbpOfTjWM4IZr0hl1n9wDGdcCHW1 + TU49ueT9PX0yOmsX+FolUIKbYlr5vTyMeK1Hd13j4xU8wtTKHE08bNSeHB3r6syladp+mHLiAlj/OVzP + l6+Hiw1cT7g16hLHiIjBL5MSQL5CREEmKOHnsw3se0IKmW5MNJQObWp6Qlvr+ZSPKZfPFUdMaZMEAoFA + ToREAZNyabkKMlpjJWQK2lYMQBgqVPk0m0x46Lgg5SRqNSW2nJudPOLwg/CzOC9c1R2jveXy+mcBDv1V + K7Ll9dVyrXFrSGEuEc3HWR9kQzpESIoIzLJQ8KUeFpKT0A50JRG4+nyoNiA3NjJEE2N7r5EwQEjlWfN8 + FoTNvMipumjESwEzS7i0d+lLUkom2Sa8nZ3jrcUbmldNw6vp9kHbtJz9eIS18cta042tWSXKmBZNzdVK + zZPCnGpqIi0HLBmQmZspBAiFLMbS5JxMNrPpUSSFmRJQBMhYsJu3WAWZ5Jp091aIbbuAkWr7NeHDoHm0 + tZWBxt7e8uBgaWhIFnjb1GTbxHjL6Gh5cKjE+oEBAar2dm6ospbWyB7pzRgR0W7qFALDbW7+Nb/r7d73 + R0zEsulyCamJ7HPdPqRmrT1gRpCTRt9q6TQEkAfFZo84bDedQexPcvwI9MAi1jMG6k609RINeOnE29jW + gPPfi3C5FUJYyF6yHGMVhXdJh5eRoVpbZt1jZbzjy9QFYE6cVAdIKFTtHqhluLcVyNZ3ymQrDgBPyn7W + weGrQftSIsiZQeOl7R/fjlPX1tzS19XL3bH+A9vbLVf5VcOML9lbxgINCNNHhMbgnbGX+GrKZXNaKX8A + +DRUomQombhUViMcSIm18VK5hyyfWC9G6GNQQcORONsTE7ncA1mZGAYCbYRlIcCQOJiAouufhSmztBrg + XakHrxYL3RFaQLhk/u4RxKzUpNPBfLgop4UmvhhjhLkyYKS1JdVhMmtMQedMQ4OrAUDt+ho3Si4KqDXh + DAsFCA29aoAwhT0HLXGHMlEz9MIuOz46FCmdoGBXV/YujybyFkTRBGsDBqefHrMvEpE2ktHUuVN4HvAv + Q8G6Jp20PmrmJPLpCBeACacG5zzhYBYWZsbHhvmTc2WBRte008xCXW9df7XnRlZLz7Pv7YlWl821rQh9 + fQsXpOFcAfnWBEK5IyAJzGu1moqlFVXwD02NjG1dWBkdGDIDtt1QHKLNKYPiElig3YMpCwwyjA3vBURM + IVCfF3xzGeDxktnV4mASBhYZYFVhCtPqmkGNkwzgETZyqYxd8TXR0YwRsUM8zyiFlgxd+6iBs0pDqV0a + EEr3QYBQl0pLQ7lJFjgiC08ekQefTbfMmenJQmWT1XZu53f9H23GDdve1E4uwvW/fV1bSnkUaKb8clp7 + eS8Or3b/wpBE7ReR30y9rGEKzY9n+NTX1TM2OFIAwr2akdRu7GuSKZhfrMVj9Os4nNV43ft29S50WccP + wf0ZUVCv7xhX4CkXOF2mgENcMPRGJkFeaoeGm62OAuM5EvGOtVvXHlkSoaOjEEG1g6rsWWSENnCEQSEr + nJ33JiRWBXMu8K+RJPMWMrq5F9Qn+46O7p6vp4hK51WX0VLlM0Sqstoo9QOBaXCrAISJ/aTofHH7SaRT + GUNKqVhnVztVVKgqYfzJgDBlhEqGcnjmMMmWeDVZzDsjz/tARWeEgVwm22cvZZslvNM+uh4fDZacyPMM + 4SLty1tSU63VI6DpVCCRjtVfGoOLnLERxqupcamno00QmR+wAcdDNRwtO5elWOgloS2TYvUftUQJvHFs + WIuN4aUwGemgrsxQMCvOZyLEalhYcNPUWkmjOoIy1zE5NgZJ1fml4OhAT9/c+DQoyCfbjcCDj6Nl99LS + HMejWzpAhoIVkSEKw4OlyCReH3qnh7s+xxGLs+X6E2h2J9xLByEfvYmBUsaHsVGxMBuXbGDkhoQtMP1d + jZ2xM+7ydRs12Cn8D/CLbXjpxBsWbU8PNNqfazwYZ9b9eVp1pUYsVT3QSO6+P/gxpqbGqS2yzl1w2EzR + Uja2njdyqG1NrSzrT8xce7ek3g8yerT3MnTXQUryOtSX7y/x2682x1nP8ds2drGm2Bafy3/jLC/Ni/Ar + uHApZ3O9yBLTDcLzlBPmtRSbZgblJL3NPBQf78aUF9qEJ9y9EREV8wIuZrzQRgdekFEjBlF8BLG4YD1F + NFsZsc2rw8jcv7+3l1/BgdB9EJb/kAe/tOxIlnNW8BkG8rdKYeg0UqXcIhY540lNtc/U5JnCA25JcEVz + vbMQXQSGQkgv/BnBSaCoFvxSPLNXLV/QN06gVNFUUc0pprtMs/1IGW4XVwMA61vqUNLMgBo1T8U2j1/K + V0gU0VpdNxhWE0QsuooAwo0bFncftAPaB0G3c2VO1FTHTulgGiY014ylwRgvtOdxvf1Z7EBiYWm/JmuB + 0KOGmig5Ab4q58upHR7wjkAlc6908mepOk7y9IYqYRc/5ujDtm6lfJMAW/4u8/oVMcahNxm3AKMu1D+y + QA0Y5rMpwkvks2tsPweOMjtuKjVSBrS1JEVINKlL/y98Q29x6wXDOpcnbYyKw1Ruqr9+EGHLhGWBtXA+ + oK6zoaW7obW3oa1P/uV5c5csLT0Nbf0NbXTnW+XBUfR19zA1WM8ozHdrqTDZqKnGEr9VspMiF/RvvtoH + cc6sCc56joRtOOa5qem+nt51bh+gQlPvH8EKavzY7QQUGhEF60wEGFUP2L51bobGwAHArAXrXh1zAfD4 + +RGcvfWHX0+FfSYnPKgfycWXXIix6Fq8OmuRMnflO/Kl+GcMsqC9xDUZTPrUNdU/IwuUW96mwEYH04Vh + iIgylcIMCxMg5EaTQko+jtSTRoNhwdmeKV0+zNlgJx8x1M/EX38gL5+dDYX5ciQ6kgb2EHojkJcfi8WY + QJclyRWsHJnUGVsA5jXAnH6YgUG7lLWE1mjczg0ptebPXCDQWtcagMVQX+EJ/XINqwJ7ywKBqkk6BMb9 + ZHDoTDRFWfsUaQAZdmjIGoKU8TC0K2H9sGWo+u1BwTpGHplNSh6FRw3dFqunK5Qb5Tkwg35uhWnSThpZ + HNe9qbGCXcIIPUKcZY6aHl4bLbYEG1scC60gUYH5RY+MdKLA3MSFV1cvFaIWL+wonISbQqeLhbxb+ZOT + MDs7CY9nh5Leo7bqmoe7ZuS+5vCAT24GB8J0aut3PjsZHhycn52RSXzWmsZQsL3U1CFLI73gVSNNRiJG + Rc5LrfCWbpR/x6pIlb7AYY+ODlMFOq7kmNA/WxuaOxva+xs6Bhs6h2ThSfsg/5a7R5r6p0s9k6sDobBU + wfn1DM3lhjIjvmQc7qnqCuW8yYhQbAijsAhSGGdCeHY9n7aHbUSElNTeVSGcUQlL4T5k4z0CBxd3QURi + cX4OKfwR3KeIBjrwr8c7Wph86WGohJEFwNUvStShXZozuNyan/dlfznV82mj/qYOhDk3mrE9HUklVJzq + ov48CRaGwmkpEBo6Igr1dkn77JQCsp5w7IE7t3GxrcILQwVRG3qiWUYDgbF2qA1qjJhIEUTmKWUCzERd + 1PlfmPhnLDD67H3Q9AYRHheUETkZfA3PMjNnvYT0qA0qQiRJ6wUfZs7JGbIahH5BFqfGxqbGpCtQwDzF + JAfCguEl43bRAuNQZ8BGII1Kp84ChS9qfYAcL6wx0bj0anuDYkaXTXuvJPhDaXM5GPn4ZTSvBjdNEua0 + 7vZJNgjfMc4SxI/KLMFnGJwBzoYF/2TeE4ymwUrjv4X/HAUTaW1OYYwBe7p99iTNMc0HnrPs1XqiRZrn + kzHI3PyPgF9nh0XB7eFiqQcUnCYKrURL1EC73jLSQTNuZnQwFyP0eaqxmFWJoNzeDcxLJ8bGFuZmpTy1 + hwwpyNzYWWruFcrV1F4CF2J5Lx/uUhaYruS5IXQtCq4HFxlX6UpI1REnCeqY6mho7mhoH2joHG7oAAXB + wmHgsNw10jk62zm2VOqbC+OfDaD7PShbMEx4Sd1gISedtr0qAJJA1oh4SEzO7KPktM1MTTJB2+9j2PMO + mOksLy8wvu950/+/2EKmZ5xqubYKaRJ2oWdf0gicRdQN4rgq+DW5OgpA6EKI3UV2t6RPMjgsmrPDXUcy + H/oPVsb0jk1u42CZsWraPvP1+J9bRu321us3kEK22b510zlPOHN0ZNjEpUSPSlhgKBmTS6Jw/dMlMgZH + a84Q1VFGOm+ipKNePue6EBr0TLWcCprP/yu8VHRLxtR1Vxe1CbsxuWA/UZIUyrukccGhoT4aN06Oj8xP + TVGKQcuhCZMLgqeaPwWWsmSGTCmNomgGmRbSA1eOP/7wQ3bvdChVFMxYo+4t85Ea/8tjrXyuaK3hSKjl + 3c3i9DHVUWtoX6C8bMPnUjefTAYlkan6mhV1i4zTfTp1qt5E1pjVpSsw9Xzc18vNWHpMMSXf02aCWSax + lSZwGLJ36l6cdWUMB0Je1Y+QHnCFhRPBFNB8iH6n2O2TzC/Dc49BRHYYbmGNQ6R0MYtxBH0nUUF5ande + bkaMHNrSW2oZKLX2lJpbUxRMxKeAsmKcYS9hZGrgbHGxcMv6uLQa/tVdz5HgtQFlbFDjFqeGNidE3DGI + okIHBQKVFA6VusZaBuYaB+Ybemdla45Di2jsiy5XixRcNBAdfvLal/zQpdMQxc2TSqlAIEfMtGI9sL9O + eNIhEiejjPRcr+O0AleLDSstvLzO/fy+NzMU+f19ihC7WJU0zvLsusuAMMU5bgOfDKYBx1ypiTwxDFBY + jAuGW0gwMtxagSDaXaqDSKvftIkuGia5qS+GV/lTi4oEyagwCvjwASqg1YCCjBfED+tGZSRC0yxN4NA8 + 1R2TZU0kA1lWXiuxP+Q6CNbAXqiLnY6kae0Yt28Y2qVBKc1+C+rfWlgoKNgh9UpFVBRUAAqkO1I3hTsz + UdEYUn8/dFa6zwtm9PX093ajB1ruoCFTQvUydBSEi+hlGJbgnOQVDA8TSwV/wtstfBhjfu24ciLWynvl + o3t79ICNAsrndneHoKO9q6DQOsPLooxZXZvsO/IuvrUlcpidhxZj1vKiZnEPjgqhsRsGPwGUkUpsnJnA + y600Xb53Y91f2adKjoWpWzhFQS4e5HHJmGgiz6GLJFe6P5oU4f/mI4gW+ZZc+/BkzTJsdiOws/n5mYMP + 2oElym6WWproMQgDuhrAKyOkaXe50LvNp7Ym2CVRD7n/NfoQUh3CeCDe8eZSW2epo7vU3ltqAwg7IDsW + BTHZSewzZqKRLLhyC0YU7XNhkhRAyLlP06ltzwqNaw2SvCYpXnlJ0uIjSl3bJBYYgHCkoXOkoWOkoW2y + oW2moXO2oWcmxwb2dixmLsC4ZPKpJMmJJSk89nZXbM9oRN7COsXYPe4f+YOoiReg6evrXVqY85TMwtv5 + MQmTr2aT0UGQWUL2M3B+lSc9MqZbq2BSOCQL+e5xWuAX0BrTDr384lXoT5MYtYOibZjHOPnLvnrt+kj7 + nBGmvlBb6fdPqB2TVJApxAhN48lZRpPQoNy0xDYGe/v5Zf0+T+fOjouM+MuL88S3ZHSoCcakdZAZQ5EH + YhQnc81kClgI/GTZEQUvTKqVpagmo2RbsaxXmhoY1M72VoraL83NMRy7HJdFCoNbxKu9aMGzTklEQ0c0 + 5kc8bHJiZPOmJdAu8MKQ3leQGQUz+JSRoQHKbStWZfAW0Qj8C/wPXOnr7dq+deP2bRsZu03JjH4Z3ium + UwDVIdCeSIZ+9NQo21MJtKuDLhN96NQBIHPw6dDo3hknrHlpNBe/NOQrvAV0oaYahDV1kOae1+sexcxg + BOdnIp96RYKoi3q5tRD0jchnqS85UqjxYFksPzVNtpHxrbNjbnZ64/ICH2rIl3LE2pBhLedLw961r/It + uJ5NMk1V0/hn7uZKOGIQI7mtJEQuc9MM9qJOaWuCUKRxSnlYp7GwXmCnWfCvc7DU1dfQBRb2oI6WUEeb + mtEArVMVEA0Jsmx5GSLCMKDjjD00bpaiHh8HB157MGT3LRgypNVsDtSamonakZ/fLh4Z1NGu0QYigt1T + DR2TDa0zDW2zDR0A4eweAWWtDZjAcnkbdDEicKVzxPu8R5eq+c78jvu8Hzu/ct/BiOPptJ96tX3yAzEC + 8KHacIAq5umpJANdaEj6Xi4Ua6G5Pwfp7zWAKeyKy5GudftzPsNF5aJDuMQCpDnm5QEuZYrhoPiytNtG + uLZulEnYL6bWJrpoFE8yCLQQhdYoSGFSntuE1OXQVAJN0iSyjhPMGCTH1BUhLUalQ0MuB8sGoNSYoFON + xLMXn7t/wcKEqdOhVuEsJA7WYwmSiJZ1hMg3kk1RMAlZdRy+a9dpxx8/rCW8bT3AMzE+QrKUxbrSACF/ + YuTbtW3r7NSErecTKRmzbctGcEv/9Az3kCaYAoZQKEWvKHtarC7HCz1wCME66vCDDjv0gAIQGvzwcXBN + SsY4Rkon3uEBSxy08+BsLyecxgChg2hGJaNmm1dWQ4Z7EFdjCj+ZiyrVhslBFIpr6+A4gwxn0sOHbqhx + 21F4Qsknsirkrs/1qUhxUZ/nOx1mXQ8FGsnN2LhxiS/iUzEw48jDdj/pcWfwC3Jf14saZm1768YOw9Ue + ezYVKs7wFiuj6LAX75TQpzO90fy+i8xFmJOMmGTdx8mrTWR9OmsU0P5sb27tbu1CVbF9hikyk9zW7nL3 + WKlnotQ91gActhEm7GxobSt3NY8uDm8/ePPI6BBvsOl2RNVszClgmI9gexxmOQDJfPMkDXhpsB41dXT3 + NYHHkk3fIViINNo9UeqdLfXMCQRCB7up4bZ/QJiO4H6a9njQa28w2Ne/dcMK2TAMm6JY7Suy1p0+6LVd + PwzJ9lOT4yefeMyWjSuF9D4tqvJ7lC7rnhDGbuZatZ9bDzTDDrjC+IKedmpQp9AlibcpphoFtBmDU8AI + jYU4ohS6W5yb27pxBSQo8MUwW9Q7xx5+q8QbTOrpiDlBLN1hUpkHPyeCARFdDk2CHMIUfZKbBktq0ySS + V2WsiV4YkFBygeTPWFy0ZkqeFU12N3xAu1gyG3nLXkqJYIKILVR3I9ZViDCl2WxW/ctHXobv8dGRyfFR + xEBrv8cyMz1+1OG7Z2cE6pJUgWAZHR0e3LqyjM7vOQygEbUsAJ4kxlYI0UX+FNLeFfmidVOoXgjyZaE+ + 2UDT4YFDhTGhgyl0YW+BgcFNbb1xQb47cBhhL9hnEvEz44JsXAuEUY8NVtXUs8NOmBmAvsYX7SPYA0FQ + FvvifDrPvS1UjawqPqPa1MOUfztGCiBEddRoX6T7oUJs+IltrhNrzXgGBQe5a+e27ds28WrqSV6Ym968 + soE9+2Vp+Tlx0pZTShXS5KZIQXEVRij6JLcYQMbG3IOpfca6VadR9houGOaj0qZOHBvucQtMMQn/h1uY + z0OrBATVhkPmsD6a20tdo6XemVLvFEBY6hwqtRIpxKXS1DLcsuuE7SeddezgxHhDY0sDGW7t7ctLi8z1 + 4yi0vwMszGFhfqZfonKN/CCDA8OdUFJCQnycoaAAYQ9O0UrvROfkxtbRZYFAFujgfgLhfmJe3bdzpU+O + 0uFBnCyc5TVo3N5+Or+UXdt1UQ1ycvjug17+khccf9SRKRASyOzr6BntH+K9e/WJMulTH9B/Gogyi12c + nZsaHxcsTJCbrwYHEOU9WWkIqEgY49T69QKg5f9jXM2hLpknFkTRzCZqoGgLN5i1UbU7KjrdUi4YYvtO + Cg0OIyjG+mp5d4BNfuvOnbO4YNEXGrpM5FUpb7LqtbJCmkSIA0VDBBSNwhH4MhIgzErDGMLVRcEEC3NF + 0YTzRQepj8hIuzBCa5NkSQ6eY2DSqK0BvVjsT6354j6XDEiMNoUlhvSyNVHwTN0u/qruXIN8hnNKJVP0 + Ms5nL+GB606U0vQjHLQCd1RMle2DiKr0MYE3x7nUX8P2Y6N0R+1NX0XjPfCALRs3LuoJaVuYn962bQWw + VENQxoyDhpwUYyvAoeOf/wTye2mk0DTYONcJBWPzAeAggKcKAcCp9dk8myJcV3bFpkVuDQhrUimEzwCh + ID+lTSXUndadkTodchmzf+d/Pv9jhwT57C1J0L1OToVLMgqDFsR3Icdnrfk1toHc2zIYsH8qESC9yRvp + Twfy9c3gwCz1wbcmBRTJUiBM2NHa2NfUN93TO9Zfbm0XvGwisN0bki7yo2rNaLlegMR5d8rJx27duhG7 + EOeFi5cZr9YXbQ0oKNy0V1ImeidaRpYqgwvikWEBBc0s84g91k2bHils0NF2XQkegWUrJ1/t+44OD23b + vHFooN9rjbJxV2vnwZt2nnL4sRPDY3t1otiJFqrei8Pbq/3XbsztQasN0nqcRtt55h+bEDo4hfUJ6vEW + 4EpVjkKYMECqc0GHt/BE7wm9O+xGqr1zJCdJzWwChIwE3DnMPG22Wc8pkyUL2mFzS+N6t2DeGlGTBBED + Ota01fVGEyKTYrvzfHkP59io5KGdBAglUERoZ5qIHD40SaXICmrHImreWTA3YgYXRm3zPO/ekJNA1UTT + KiWqheWQUjY0yOfmM/NaoWsMkawHKUGIxYVZCJNTKAMGN7PUwlLAsDwmJYiVo4bO+fyJQZpvr0AoS9hA + Edol02BMjXicYipgTyDfEbGulGoyqbHS5IvIc94+qugIjhIeI/duZGTAioX6tCAmL3qpgVzhb0/Vd29q + ioU8h2ozL+GnzzPCGP2NjDBVTfXCSJV2nnvdNe1oqqFBh0CT5QXYWiyN1RLNpXb8cUcdtmvHNtakEz6e + 8xFTU2PLy4uEbKJYIhDL/TU7M3X8sYdzNvRe8/zCrB5TesdZRd96DhqfxdagY07+Eb1HBhbcLoQGeydK + /QDhTKl/Dl7Y0DNe6hqReGGH1DltaCEuKOApPtLmNiJ60DVXreJIpRPzWPojfbLHsZHDIFw1NjYiHtHw + KItZ1OlgAMKhhq6xhp6pBo4woOBcg6VP1H2EI9rj56++gdp4YkJFO0H9wKjweDGN2CMWKv/AQUMul4To + lhZnqQ+efpq5Hu2xH4dZfCt708srxP/aW1q3rWw8dOeuwd6+R/BT9rgrnTnuudVU4bvXzgzS04Pzbmp0 + As7tkqlKX71c25TH27ZtkyW95Nlg+CsVPxMsTO8TDwHmLDMR8Oy/ckNyr+OI8wlp1G3CBNa5YEoKGRQo + EKV1tIuW8VQpDXEBsdtZfwmXRlNTaK6hUjoqaRJhzheDkikgJ8qYjX3MZDuxJqLCOUuoNYU6Y9CyZOJh + if6LoIsaI2EEj91xU9UuM/ob7cNvacO6djsKkT+AMOCHFjzDJGJ1RLXyWYABwRWTQItAAlAFadFhyXEr + 5XxOAVP0cl9MQgcNCF0j7Rzs76WtEsYcRuSER6YMkvWU5O7bsDQ7NTmK0FoPrTnIQH+VCBobNsXVCWWg + yMxiyQ9hZuApGS4UxyBrVm08LSAQA7EhlFgAQrOkFvJbmHNwDXDAlonor4ZLIsusz9UeEvAD82K3wgiE + mWWGC0kSPbULJqEMWP6GpTkmCqnyYYjIBvzi01PjXK7cEdFZKphEOiYvSa56Fk3IeWQ8Uqg8MKuAn64P + 92r4T+G+9sChjgwyARanaLmtu9Q9WOodKfUBh7Pl/vmmwbnGPuWFncOltr5SM60uAD/sLJWGppYGDCxg + oZbyDywlP+6sgYI+6AHDfPdVt6TAi1RQi7qoxQgtidAsM46F/asAoX7BvdT0atDITMiSKVEp08FrIJZ6 + 4fe2PkRrgAGfLZMiyevgQher1TnnnDk+HtIkOTbm0Ihee4STfdiAA7Pwr/88UCWtoL0Wt5MCBpoWuQ+f + WPsWPt2Gs/Vg/GrbpLMEe97f3bs0O8+ps0/kGpqaGKcyCy/R65hCB65/+nsd//JrCviXzh9TXijPgyNG + J5I+94w2mVS9iVqoVHq19Wkp0SYmTww6CSOMeRHaIDcVlyiaJT1vtcC/WxUc8HQAMkYYg4J5d5+lT4B5 + ZFYMDlBco5gRoT17vQBNHWuoU0C4o5k5822ShPMxzE2MD2tnhmD3cGuMBbdkHE+Kf5oJ0+mOwUZqsGQD + Po4uE7W8KlM7YzzPKV0B4eriokujDnUpR9Rm9zlGiDd1cmxkZX6e8Cdfs/DpTh9Zz9ffuLKwceM8TyJa + RyHXFd2itGtwq8pwZKXCDnu6aGo4Pze1uDDNepdVeYmfwOiysWp7KSk+4LkWuRRDz6Cw6jNxaeYn2LRx + 0cy0qqDK9MhtNR4mTEUFu6IcCLM/4xUY4ohSv1Q2c5+XK6K1YUIXRTOYtIC5Gj5jQD0VV7JAg91czgXt + ZvSJaUTBzO+W4KKbABQEzTsDHYThtXaWO3pL3UOl3kkIFhG4sZUd7aPzDV10exoutfeTUyjJ9ZI4IcAp + QEhaRT5Yo5AmQ5ONNj4wmhzFURPuNElPP72MCMwkZRUmx3DTEkVRqqlpTTUqq1FfxlMJxTgz3tA309A/ + u+a4rXC47qKdOWDjQJlJO1bZqV4/SLC9/KTRtqQzcco4hz2AkVzJTtrWv9vf35agYEdzO+7FtdBdcZ1r + Xdu37KF0gF1kezzgwjbCwuulJNqe5ErSI4yMULrvyn2TTcrsKqxPClMs1N8z4J9dlMma/IQyvlTXtJas + DCqohwYL7pgUGvOjAC28Ucak3YSOF02EjujExGCnrFrRLpSPyelRsVZkqLKdL58mIhU0lNE5Jk1naqeT + ALYxumDSWc2SpXWbvdMrnvCnBZ9ypsekGmccskOCHYchYqPk4QWGJEgWpUKXQJV+1aNWSdKeoEiEkATh + QiLExOjw4uw0YmBBDnX0yvTPEDiUAGEBCHkvDI+dFDb2fUr6R8ROOq6ZH0cPLCeBpjiXyrwpT41v0aBp + NzPmCX76CISCeUDgli00NZ2OE4sQQHXJNK3oZnRQXEuaa5gGfVNPDchKsSFUWSeLaYAwn00YBIZCvDCb + hLU0SzkAlUPjkvUFqxv/TqMDtWSx9q4J2+vkMk4xCyGJLH++IJNGdCzOdG0okJgFMkVbR7mlvdTSXm7p + KHX0S3Swd6ZpcL51aKbcMybqaAf20b5SS7fUHRX3SjPAWWlp7ZaaUGEYtHGs8K/+GYZB8U5CfancFjGS + 8Wd8bBSOxJy03jgpFEyMORBB8I+aoixgoWUTSvCSlZ2EMBswuPYneYS1+9LPzjWVLW6TjdQ1qR91D03J + 1h4H9z1uUJgv7HH739MGEtBWMyT7F/VboWGNzwLOJybGuO5xxhY6Au7nEVpgjwcheqbGPmOoMcKEz4kX + nE++HPn8WkzhMMNFAz+bDGpYUCAw3kaFu6U4zbS5qvPCPASG8jHpTV4ghavd/7FRgBjHbSrN8AQjlPY3 + 0iXAeGGhoVJoC8DoaQl8joJSiTHtIKF78OpoDnWMkpOjoyefcDSND4eH+ldBwcwXI9jQK2351BrqLWoz + sc6G6YSyZNzFGV5qCnWaFZ0mKZHKmz9NBTXwi4hYi3O2ht4LE2Mj+E18A7gaWGK6q6FXgQ7WBULfJsqn + QTVVxsmpyHaV8kX03hqBdM1opQYjU7yUt5sUHLMMOXLS/60nop3AwK3jtCNRUFNGqECoFl93+QaYZPbT + HmTtmhaSoXJboQlJIfEmRqaDlUYmUqEeaQ4CXeSwUDeTuXiFN8mxSaZErriuxxFzcfQorgiZylVocjEm + l8UUY/zZXDbettnEN8x5Jfm9abB3oLOrt9LaCRCWmtpInxDYgwJCtmCBtrQJHZRXpfRaUwldtJESvu2Y + IpkKxqEvM7Gng6ETRDH2WXphHOv4Aps3rew+aCe8wt/CIRFmzUgXWNjUFlDQKm5LuVGy6QcbWiGIOFp7 + yabYg2tUagDUjOyRgmQMVodMqRQgCfzRaxGeJM4U3kjQgFguv9PejvvKWvZMj/Z2t/uwPUcSMwHKY6PD + kxNj66/IwyVlfs59A/I9ngE2IMCg1XlyCBdJXu00Ri+tYlAwHGA9UTQmSXiNGRyhqvrY/VMIM6QU0J4z + alt4P40LFuxt+mdWRFjv6pAaVeuUgVssLs4hq2VuAh01+JMPwk7CzCACYYaFHgiUMU7aAedKaaf1tFJH + TIaCGhZaWVq49JLnn/fsc2ZmJsg+9REzTyMCFpqGyUgKaSN4BlvKS3Pq7YytGFLHY8aEPDoYRVHDgCIM + JLBHeoOlEyQumOA1daASu8qghCoN4TSrIeTO2zagIEgvtUB1AcayWKA8D6KovlSESUHW4f5tW5enp8eY + mth7VyOXUa2Vo/VdRYNMBoccYXoMrvEWEDSeN0G+mGcSTTc5e63pzxqCTUp1p/xPf9Awd8nnWihGavoE + kbyNy1LTwCPHduUkkyprT5GzJZvHSvs05eZqSXi7WBeJC5tbfGV5aXxsRK/5XH3B2pvFZ5N5FPQ21wJq + qTQaGWE2Yc3EnqD7BENcmA0TD2ruKBP/a+60f0stXUL+QD4WnrCwskm5IG0omtskuV4EPxFvMpyLzC+u + yQ1WdYc+Vkoyf1IQDXaB85+sjEzFlDChMkJNnGjoiNHBrnGtu03W/yiWmcpepU9ozQExUyj7COZCg0A9 + ag4MX6IsWmtcVNUAjfoyJ1TcwBqISr+lyZ57HOX3AbR+H2/R0NGgRWg5HdwJ6zxyG8T3+ZDST1ljSlAQ + Oet+XBqdjhjpqmdCBB31/MUkI8Jh0iJ6posmk8disrxctW0tJPoAXREyDQ0zUDQINGm0sABtLodqslP4 + kyGMfAadHWfhQJs+k7qI8cBiM+kisJeZYnIGUQve2JLPl8/ET9dFIRm7dm07YOdm1EgzTVgs0MbN/IiZ + tQ3C4bkwOwMQRv6XVc4sOP7TKJfmCHpEMIh7bm9JMcChkcObm5uamCBKl7GxHJnT9SiTY6Mk6AkQKsYo + HMZ/U9ACLKOeGbIpzCDDSt6evGpwGIjj+Pjw1q0btOBLeJduKbsKuJt5TU0dFTAGevF/JgkbZpCRRI5a + uA1f36KGBWdp4hvyqGp8khBETVPxGG1a385/x0L2fVp9Bi8Vc+INi3MSmQ6VZUIB0sK1FK8uscwwRcPZ + xP5RvDnsGLpOMl817TVe2IaIsoYLDNyFldqr2r6N2V5gh7X3TpyPxhh80uA63oC5KSzb4+IiC0tLxniT + JmeEeqt74QzaCkL1BAIFDiMWKhBSU0baMDWLp5QFSwdwyFKTGu4kL5mUp0ZIU0iLg5lUycjX9hrs79+5 + bQu1FQN/A4nInRDXqCZOiEdmTIKCvdOaMoGvdUqKq/XONlFulAc/D760tUVL5tgL87NQOsO8WBxHMI+q + w5s3b5yZnWlsIvjbSjFtkJ9USwmiYhASmAzMo3Zc5oQODZFkObpOONlnIHmk3mgerX04WgJO5NLtszK8 + V59YmFVFITSz/9gFl56TBOxMfJB/i0JoDRDm44LBTsYbDRgNHz3qoDet3L0GfvpSBntx6loHBVODzMjQ + 4KYNG0hxMYt5GiNJ59FBTYrt39LoSyEWaNN2s7xL1FC1UO8yoeOaF9bKaJ+Ng+bCMK9ErTW0FgsZsKxL + Qy4XInNwZDmCEfY0eVwrcxaSEBwFEwNLLu1dHKRSkTqvZCagKORPOZwKlRkQpuBnzxmvhwb6QNYgkOZZ + nQObh/0KOGp6bMYdFQjdZSpp+L3dmJIsxd625MilPmpytBzD2JhkSjhap69m3p/YBCOVjj31MHMYRcuM + Ty9i+NZLkmbx3aTqdy7om/pFRd6MoWK5YBJ1XY1XIfvCgdAam9hEzUqw1phIsz5NibAf66XEtEI+C0sX + knJ9XTQ3oZQ7saC+1Go23PLQrAO2bN21bTuSY94fHrDQxor4kvA8kT1ptxSoYUepRXmhekSVWtKSqUXh + sBIiKzq82COOTtlopGtyTpna8cqYVd1BLNkR6RPNIo0KKewK3ScAwh4FQlImLIOQKjOWPsHZJHAlfp56 + SGXrGLU4L1q1JAqhYqNB6KuMjo9fdtmLzzzrMdMzc6Pjk40t7ZUm0kRaZZEGHMBhYwEO+QaacErimhCK + uv6O5Puoy0OTTv6LP/htmKVlCnVyuBCTR7akeN2LwwAsPrI/arBQZlgcJzYTqx5XUFPli0gL6cAKY1ww + TAbDjRBEk1xokNtydnZKXd0ZBLosk8inAQJxu3sulCqiabHgUD5Nm83IZc9/mageuXv3hoWFCIQ2Ec4l + DkYUDO7QXIKEqqAxWVD7jCdtx72gTGSEoc+AeGHynXUN5FLqYCprgQ4mdWHi9lk96BAF9NhVIe0vwcLY + qyErB5OVaEmZVi4ylyRIhG0yqpdJlAY8GZ8LwmPQOQ0miYbiAgWKIoAF+FQw64IORkaYWWCIMvYqy1S+ + KOVmbHH6GNfIp5MoSbmcDAhTChtDgNTZOWT3jumpMYf2AsbncdGk1CioWsnTKCPzRuxU/GkAmU+u9wpt + TuJzTRxTXmgV0s0qBSl0d3FeSwiWY9fbXZbX6zCECQuiRUS+mPOTVCUt2GfYm/WRzhHB2InFQgyJOhqf + xwloXpIJM1f2SaU87FK8N+qiBoH+r5NCV0uZk1LSE0ZIA8LWMpmClP0kOwIVFAiguGhow5QLndmw40AY + 5+IBHe3PugN+wfpQdyR0mG1AHaUhomBhT6w1Oq0ZhHMhj1BAcXb9yGLHJG5ZVXv55s30eWpuY3LVMzxG + uvnkyPh0z8BIU2t3U5ssnBeRjxvbypwUKUCuSqk++KVQhzjj6/l4C1XaeSHpjY67q52g9extH7aRz+3r + hdKt/V424+qBmCP778OnpG9hV3qt1omMFq6PAu7VXhOR3tkkzmZRFhcMYjUT0ngJ2jbyenAqR1+MbZDa + ZPyusPXundm4srhj+2buTI+6J8GJ1BET5qfMwOw2jtPVLECY3tvc7ZhNrOER6jpBQR8R0DltZl0YI/I2 + vEb1zqTJ8tINoCCB1oqiJkOZoSZdHAiTqiUpKczxCQZcFEIS8bUedJom6KmBgQvmLDAxFugRvhjty0Z5 + G9zBoQnuv9EhSn2CVQ4JBcyw+JwiH+8K8TwBpwCEAbeM2MWIoECXGjsFBR3wCsCmTZQEBe29QCatzQEb + sA2Fc35uEt7s1NN2kh6bccpVcjMCTeQYyDaRfWZxyjohyXiuCq0tMnGY6YXM1Wbo/y61eCTvQj9df8es + 9Yf9GTy9mWoatvH0mBqTlMGh11XwNPwAkykKmmhva/RJbYq9J79618yQWWFI6cGCVDIpxhREShVnTYw7 + pPEIvQez8IShXuRsAfmylXkfTYgU+r0v7agxjooKqEExybLXpeg1MBTRuo96TDocZZjnY5GNh3lymOlY + a0BAHN+STUQj1cx6goWEBi2h3vDPcurXD4Q2EgokaR0BBNHGZnQeLEP9FUyoTThoAb++po7+5q7B5q6h + 5s7Bpo4Blsa2XqCxwjlSdgy3tK9dlzatjR9cM+PDI4N9kve2n0izV2/nUClDimF67c/lVY6QW2ofvpof + j30zLiWC91oUbb0mW7vAC0eYXhPsmeTuDRvmrRGjvRSv0iw0WM8jE1DQUDSFQ82HTW+JsgKSlOK1Rw0K + huzARJMJLNBmr4lTJjPIcCcfc9QhZ5x+0uAgAeZAGQMLVFMMWM444p46HDkY0h0Igx6V1PLwHK9EAjX9 + MxcaBHcZEAmzodQVWkkYEFpqmgZpFPns37jYSMo+lzfM33HbNZdfeiGowNCZWkPTTMGo4OV7+9UUZPHC + ZqnhRXwxuFoUJ5wjJiJnQD7TFdP1EZ9inC/JhYgAqdurfJrFAvkzaKryxpQUGhCalIo5enRkgDQDE2lt + D7Jen9DrmKqqhePB86yNojwMGeqx1RhtclXfinHQ1Eak5b8jHcycOOrFbcMlS5SXn9gSWjIVNP7p2Ydx + g0w7zVAQ5IsF1vNlFoKWbhM4m3Xlr726EJhzOCfsMBNLQ4wcn4om6UvDplhrsACEfJzOQmiHULgZY7Pr + AITyKrcSNSvYXRLvD5yvHh2MilAcAWzivvbDRgbGHm5X5q+cw7XfxLfjpO3zgJ8TWMvIpOTU05VwOMmm + V1647hJrMtzJ95Uegk0UcIP5NrZ0tLT2UDROoK59oNI20NQ53No73tY/2dY/3dY31drLMtnSM97SPdLc + CSJ2Q5+jTLpXSBSoqNWEXaNG2l7vdN1vsF933Zvv74Z8FnYwOnWtncSZ6OziR7UrLM6kgh00/RNT0szM + pBFxcEalaXnLGteuX6bZVDEmd9oajYjI1RzppmBqGh3MxeqjVpNXbDx6UadqjNyfrS1bNi9v27rCUJXe + 504BU6M5305yszHzEYYR8aqNFEPemE66I/5lZtEgcGURwTC1r02c8OGPAZ2KoIywCcnL9NLIMMTHc+AB + W7/w2fdefeVLYJa56GBIkM+1iXDTZq0FxkDOVb4U8HIumMTqYvwv1SHF3hIxzEHI8CkKpEoNVT+ExcIF + I4Z1Gy+0LEDbWLGtG+SLpDAYYYzzDQ31audCE0XlJWvAy5+Mzju2byLnLx5eUGgpaDagCYhpLDBmXGTS + q20g3zrv7nH9M0qjmQk2tc56sJCqbEtLlKzyDlaZd8lT7yMWZn0twjSIVsBi0o5SQR4Lbf0qDuQ0udD9 + WUGxlxB1NJcWKuKmufZc/BBkOgQwb/BgeV04DGJJY6N10fE7KM4pM6fMzPTE8oZFtk8UUfeUFqVRHW2C + wpQbHOJc2UaVFOfAXL0TZfyxSIcNWfkhKAvTcISaZOk2+DoBRWONZt1gZz7ygrKMA8mAqOXWzEFK+gRO + mRggXH+t0YCC5n9tbG4dGBrp7husNHc2tnQ3toKCQ10DU+PzWycWtneNLHWMLHWOrnSObuwcXukYWmkf + XGobWGjtn2npGWvu7G9q6yJwGEOGewcYeub3BY04TespV7Z3R/P72ZoviGJg7LuNNEWCvXt6GEY7TjsL + zCNizh0jQNvEVEssr/lHBoqrzdSSi95aOkv+gQGhX/pukMlH41NZJuN/zgVrDW917KP0miHrT4aEzFme + WkbTcAs3vua8k7YrmYKuREWFqk4fiaS9XDaQFfLlTRkTi8dgvyXFm/neR8wkgii8vreve3ZW5EEiYXSN + sMx694iiUlqBMfPF5Ps8ZOzQPJa1gTGjdA519ehgqH9moqJrnvaWCGZd/f2OhSZUSloFFFYBMsT2AMJI + /sIa+5P19pJtGe0zXX25P4U7hj2AiL087zFIzoRWxUsFuZCnYTAZd6tPtLEwC+hFJR2Tgu20ZOSyZrrg + r8pMQjP3bUoRfovoVypOU+SX8h/LUiyCuZTxua+rmw/P153J2jYFgAwyQ05siJYZ92S5LipYNTc9NTE2 + qnkB0tghaqdp58IAmRs3LO0+8ABK6jn+BbHUciowWse8I25D7gXi62CDayoxgmiBQgE8vh0fm5dzUkx0 + duizXr/pwyji40A6gY4jjMCVRjSF4cVRy8SpQDN8faaQSSWabARcjYxwe6u1J+hnPJE+ML09YY1AJXRQ + a62JOgoj1FqjLo3CCBkdeA+HWH+8tSHWIAjPCxG/jq5dB++enF4oN4OC/Y3tqKBj85sOfvJ5Fx516tl9 + 09u7J3f0TB/YM3VQ98RBXeMHdY3t6ho/oGtiW+fYcvfoQtfQJN2hxESzbtHPDoyR7zGnnfjEs8+01IW9 + egz094+Pjq76HSm5otdC7T7jD7RXn7aHjflZKbe3Gq/FFUc+QBAhydFPzpJD3RofUHebhCYaHMYQd0TQ + GjjMVqRCaIwHhKufQ12cnzUHkOkdgCKWfU+Q8HuoAId5CbSgiNYhhY55vBGMYZhIY4SuiMb5cqFCR66I + dt4OWsj0CtGdOJe3mX5uZSFMmKUMSp5ZwDbjgrGOF85AwUI1NbTRbsmAMKZGSOI/a8gWCPwvNohwwHPH + hyJcnahY4nbJBd7ykmMRbHLQ4oplJIWR7WVIaapmEil0nTMHhK6dJpQxwcUImWmuReSLRcHWiWzKPtMD + Q3Gdm5mEjHrs0xExz4+DLsp7ad0utQJ6xL/Dn2mBOpuXyI+YlLXzDdIf1+3BmnGRMMIkimxZNMoIa/T2 + vKE09ZFyATMTmoeXBSC0CGKW/2ONbVlsLihdpShMmu/BYjeX5JWj1NB7LBpH2QsbG1KmU8/olzHmpx7P + aPaOoY0s0TARSFOC6OESGwaKo4f/zelaWpwjfByJoMNh+qZgWTeEjLP5TOiSbvDSOjgHWDbUBK9pSeSu + HEFkFPXq21JlTdvzin10QjMopiSn3pp0O5Ymg2zIyraInnpk8L/yI3R29w23dPQ3tvU3tQ83d4239s0O + zW7fetgpU1uP6pvb3b94xMCGYwaWju+bP7F3Vpb+hRMGV44b2HBE/8KunqmNbf0TgoVA9JpiI4dkJgg7 + JH765z/36c96+jl1EWttbLDrZrVt+KACrfZPxJdRSFXZf0jkbIrJkVlFMtXhdwVRNElI2Evtp3D5alpP + xvUL2/isSi8gcfm61yaZb0n0kQJ93BKhBVMwzmRXZIEIOv8roCDvY+a6eeMGzYqVO4EdUon41Ecdx78G + jTW8UGYbPiGtC4fxvg0BwhQC5TlAqFQMilZ8KRZRS73mzg7ZXqq6hNx5nWWnPQVj7jMjl+JWLLIc+8zV + 2mQ8axCP//LC/MblRfiND5dQN+kZBCGKxWJ4iU702zdt1D6CXjtbzBqYcWxQNoKSWmOCEBpDXN05kROC + mNGglFelQmhIeEhYl6uUDipG4ITVBc9LZooR82eMDkbmZ+Jn2MbpoL1dSOTwgOxH32ixQHOKmvqqjDDn + rNEjzwRV5XyRF0bCKh8Xsg/DpzuQ1+B9Lmkyr69S3HWEujnsn0wMaymcFOvxUj7y60A3UYbzLR5D/4pC + rr2rBTGbIuSSmi4qV04OC4MPOcYLM100BBFpQCFlbL3UUcFEE5pL25zPbpbCjeBhAg3W5ypRpLde4k3L + AhM+YU1v3vzzYH/xOW6YBIe/sxm2DiMBFm3oYFwiSHHoQQcuzc8Z3KSiqMFeRL6c8d229MfY8DA8mHum + zlDMZuTrkaMgrX/9PQxNSTMmYYQDUmVNKo6SWahVZmggvBrPMOpgrh1Jk5csiGYIYaW5vdzc1diOKWak + pWeyrW+2Y2i5c2xr19SBQODQ5hNHdzx6/MCzxnaePbz1iUObnjS0+ZyxnU+eOOjJ47seP7r9tKGNR/VM + byeISHBRsy9WlTr5ReFGDoQka2hT+L2mg/sMXRJtkm4me2FXWefhiQk23w2KS5+cXMtkqPswEbweZ82t + E5RtbOSCA6X4N86nQrzQZjRddEFqqRVFdb6TVFCz6zKROCJNjVe73Ic6e3QtBTGHDzW6ZrdGPlgYgLCA + hZ4LmAmhUfZM7/N0M2eBlDwZHxkhVGMFqHJO0VAvxjsLymzIhxtJnMjnztv8XQqFJFW1as2issZz51tb + JkZGXnjeMy84/+nYLsw+A3pBVrBN4tD34s4ytvb3wgilcVJS2cTAT/Ev1n8pNPkTBS+tT5arc+aYF42X + Ka9Sh4uqiEwdXK7MP0npWpA3pZSM1iQL6BX4YmB+FuRzYOMJPh0WQbj+7snxkYXZaSAkFUjdI2MKaoqF + UU11TdXEz+DEMVHU0NRx1GOTjv0GpQn81ykIYGSRlkq4T3nOW1BHnZc7HHpcVkTskWGmGmkBNneWhhhh + V/v42DCd6NkzyoHPjQzJXE4wONR/M++o1+bO22eM/2VprCZgmCPGXTNy8cdKNBEFpcSMPVdNNcumKGBh + GmtQ2AvsMNVs9LYNbje/tYUpOvplqRTBKBfhMHPS5YeOQPjYrU76sKkH2pdwvmyMYtQCw4eHsEBnRn22 + 5AZmhCSZdGFurv5QyT4YI0nxa0R0E/1SIbC5oZFUwtiDgmZM5FFQay0s/VKGu7V7TZgIKIhKCw8FC6l6 + 2t7U2tXU3tfchS9mon1gtmN4uWt8e8/0QX0LRw5tPBkInDnqKfPHnzd37PNnjnrhzJEXzR59yfzxL5s/ + /qWzx7xo5qjzJ3efM7zllO6pA1t7pxupPgAWrtIg0E7uPsPYvr1xtWnBHvfGG1UGqdNTfo/vZQMjfHU/ + nVGSKmJm9azHAmXCZPMpe4Z9knt9fHwkJgiGeVa4GBO1wdcU/DJp6DuFw0QmzTSQpNCoTAIBR6nDC85o + U2WfTiaWGc9tyuXOp3dswQUXYC/gHBNdzaOXQq9Ns5NTOzZtBn1jmDDXbsmF0CQ6mKZMMFsXVyfnln5+ + tHXVcGdI/PJxLeJiLBYTuu9KXWZeIgvosIMP3LFtE6KWKaLc6dJjj1ow+Ux5zopLpiRPdtJgKHZaT4lg + kimvqGaWkCIWxopoWX6ek6qCCto5MTYsAJxwu8jnMhR05ROQA9VgS2DhCEaZGBRMAoEgmVRuYwODNP4N + QKigyEvpu0wsNfi0LRMcdXqXMsL0izibFOgVljaEGTW3QRpBNCxMo6QOlpxV547Gs7Pk+sDFrQwp85hY + mlVnJFHizqKDCN3uGV7ZsPCok46ZmaEIiwNh2pUppYOJRtqSPS/Mxry8Q8C/mFwRZ3iFYqS5GqRxphhA + scAXUzHGIDCCYkxqSuyjqZaTTmctBKiPMHjY8yQ0mL6U+QbWHHxk6ArDl27HOIZqRRaWtxtiDbLqti0b + KWlZFxQkjYFib3wVRp1mumFI4iA5/lpWRivLUG6bf/kzLNKwnoI4zb2jTVTcJqFi9YcyQkufL0vW/Ibl + le6+IdALC2hrz1j74EwXYb/JrT3Tu/rmjxzYcNLI1jOnD3/a4ikXbnjMy1bOvGrTY6/f9LibNz3+1o2P + vW359NdvOPXmpVOvWzj5FdNHPn94y5ndUwe39c81UqT1v0ymPD8ugtnaHSRWO12RTglyc9UKeV0t7Loe + YEy2wZGxsrJoVqs1cNoutbpgaW/0S83/NLJfcG2lQUH7UjYj8au/AIf+kk8qocVQNJyafitGj2hWSkZu + bLlxQ1Q/3dJgr7CGP5kUa8PaUFzbNkPGBAXNF+cWu+CLSeqo2Thig46xNObN/Et7CRvCqP1GgwKdy4dS + Mhb/E08EHf5iR7pUFvMiWzblV5AL2mZKI5LCabFZLpvlcwR9XC6kAaRjt6h80Q8S+V+wh7iZpTZExxpY + y9iImEriUkx4cMMLbMlQCsQC54DDwNgSR4yBGWmL4/TvUnpnjHBwoIe2guNjIFXMkbBMifBv4IIOmYlP + Nae1psfpGqwhqzZ3NFlVl+hEDexTSSErHQiDfKprZmfGN21cGA6VV+sUJQ+KdK5CWwaWxgWZ61i9G6+l + wGFM0kyxVyqlqfaeKQomiiaKgsycPLnC5lu+BKEiX9sh2mRU0oiMMJU9XBT1W4b5p5V509tHbiLfhiPR + Di3Sv9DuR78r87dnMM4kXNBAT3yeKXGUBnkdtAAKyFc7bmSQmEhNccDJkDEJzrhTT2zndqg+oPEn+bx1 + CzuzL2y2XS0dYKGoVC0dZYqIQvgoqyZNJ7rlOXFB+k4YHAKQipFtPUMzK9u7JjdKoTXN+lrVKaPDJNaW + lu07th96+GFEByutvc2dQ219k50jiz1TW/pmdw0sHTG0UVBwavfTlk++aPm0l6+c8eqt59y28xnvOOBZ + d+945ke2P+3jW8/5+JYnfnTLOR/ceu67Nz3+9oWTLh8/6Cn9S0e3Dy4IFj5Cbfz2EmJqCBasmvO4ly6e + 2g/llKKK7TMQFvDMujukn6Ib5DJk/C0ObL59ge0VQNGhzi9Mu+Id1yMK5iZ93F0qnjhAGvMLcUGeazxP + GCGngvs5u9OkBL5E8plqM25Y5L5uqIN3wc884GH3vwwHSQFG/ZS0B29aUzSHi6hSBMJ7egX2tFGRDBaC + XhH5NJBT20ephbFP6oKqdClt4qVBT6gpWpsyGBMBs05JSQgqCnHSXTaLBeZyJJJGCu4RdU7ja4JgqLG3 + zG+ZSIgOeBnzAyH6VGOMMqNF3RyoXLR0/6dLkZAwxFIBPCl7Ji2TeA5GKrcTyKS8Ac8prr20MEPOe0yl + cBU0eEodMj0YqY4Vt6HmQ4+xfmnEUbObuiTrQUpAvVjpNCaHBOJoHHFlZX7rlg3sLcmvCHBYiMsmpeyC + rTRmi7aieC9Ld2hrMJmVlTEUjDFCmT8VFHWuvUka+XZKI99a+4zPvRJcrM2vz65tm/MpwoXaSQEIKWGo + iYB8RIaR5p1pbpqfndmwOM9tFRXRlBSaROp5FPZc3mXp9pQToQomNeRcK0JtwrOKqcfQLg4F7iaNTyJ3 + DFiqM++CCyEZedwak4X3os619tDOPqRxn6GVUEAwjwa8XUQBR0okS0gb3glxxBAUZL1gpDRmqvSMtY0s + VgbmxC9DCWm011U+xyyjTB6a2juQDCQ1nqz55s6Rtr5p6GDv7I6BpcOGt5wwtuOMsQPPmTvy+ZsefeWG + U69dOeP1W5/8rl3P/eTuF335kBd955CLHjr0JX9wxGU/P/rKPzrqFT867JKv73reh1bOumHy0PP6549p + 7Zmll19dEykfziyKac1+Itzevl1/3b19U277fXs7Fx3zLC7cNXinvRQJXnCBugU5YXi2WY4LZtOwYKgh + lUfuqJppWnZx2mc5IQSH8EJQcpabJLHPZBKobemhQYNAacEojrVwv8mH6o3sEQv3ebu8Y2X/jOold35W + ejjwv6QqsbXbVa7ZyGiFf5UhiT8ZpBjCpibHgECdiWeF09JZeeZuSIvIaE1RBsfF+Rn2oCnzWUHtmlok + MhoKdUiayiaBqJggER0xhUzBQoJgtIOmyQ+a/xDzE8CAYLnUxD4P6bmTxeRQcgFJ1yOAlwbbEq7WZR6Z + FKicruF8OWD7luWl+X6UySCBhnCgSZ1aFBQpVdRUFv6UD+qTzke0BtTsiwwIYY1GHyNrTLlj5r6JIG0p + FgFQ6wMhdDPno4m5/yRX9Pfi2uGwJUTa1z06OqBVvK1Zh+Zi5smft6nyX8ER0QO9FEQlEpwywpgnoxUV + pMBeroWhw+HQIDrzkNSUlPortSXdIzXMku5DuZm8IppGCr0TdagjYbio0BiqzwQsjEAImBGcy4UMswJs + FqTIASG3CWdAZpp0O9q86dhjjqJHic6SxeEAKR4dGjKrQWEc0NdtzLDc8zCYsB+xAKm3rgB+df/MhKvI + GeuOigp+WjiG+tqEA8Udqp3owb/uSUmcxx0KBIZkCYqrTdMruKFD0LHcO908uNA8MFfiT05cgYJkn2cH + qOmDsEKqjJM4SO58S9dYW/9s1/imvvldAytHjW4/dWLXEyYPedbcMS/ZcNqrNzz6lo1nvmPbUz5+yIu/ + ddx1Pz/ltr857U3/dPo7fnv2R3537ud/96RP/seZ7/rnk275i+Nf+eAR531o+tAX9Mwe3UojDGA8jx58 + sopslODacy7dHlHLTMN73IwNqH5JixNOy3o23qttuDT4Rque7ZjkXruBrVnjjXbm0s3SNSkLTC8vO8MA + lV3NySP8wRkD9lDn7bpmU1JzcD+jsZhSqjPHMB8M4Bel0tQmg55JyMxKhqZLGro3GScVc+K01wvwp/d8 + 8AvYnZ/mHVuJGfRk1E4DQgYyuh/gp6jNnbCC2jBPn6rXdccwIuACxXKSl0bTcpSCf2AeYEl01qihDbUe + kcoTQS+TVkyQL+QABJNnrhyMJ6enMTYFQiV50ZyitKm3a/PGxa2bIUMOhEatgjVGgMoDeDHa5/ADHQQF + qfDJNo6UJm9a3TVbCRDaSvfCWGU1Nd0ESdNCj+6sSV0zno8fk/oza0w9qlpw68ifBvluiOVbC3+lGKNm + GRLDO/+8c0456Shst/6LKDU0j1LOaJr+ZDZT8eRCn/f4ZWAGYKODkSPG0kL5mnx6mcnC9E7aECsoqnxa + RyCNAcKQKSGB66wukkojUsjbYMUmf8Wc2vRWSpTPfEV7E2P0X/Zm00QPJapzVcRJSka39Qz2DQ5zNHbX + S5HpUCAm44KpraYQRlGsKqGjkq1P6mcBBy00UztG+Tw+mfrXD/2Qy6BSpwqeeGHouNQ+WOqeoDlwhdbz + kjJoxUVDoe1K/1zL8EK5f7bcN9c0sFAGI9eMEQYyIFlnxCGbyO1ub2rraekcau0Zbx+Y6xpHFz14cPnY + ke1nTOx+yuxRFy6c+MqVM1+37Zx37nj6Jw664JvHXvPHZ77rX572peqzvl191neqz3mw+oKfVS/4w+qz + v1t9+peqVz9Qff67/nHz2R+YPvLiwZWT2gdny81tjoWcLBSs3u4eLoF1AtgamMQwDvGFJdTdhp9tAOUo + dneUsFNPd0GN3CvA841NG/RdccMgXKzn66SYtxouptCYXkm+fR4X5fIroGBhauZ/ujTK7cScgJmBreE2 + Zl4Zuw8WdNHoHeUmSRoTph6ZGKIPwYkCCvqfliZl8OZ00KAu/snUWCobxsCJF9HOVRO1scOWQoGPGKGJ + aV7aHMB6Cqa586JxpSXTYpVtBkSNIEqCoI+SMEUG9COPOGjz5g3SJEFz5D3ml5K/tI9ESJDId0qyjHJP + lnAKaEIog7s/yQJmGjbDFYk1RhLVszIuYmCJ7hUDKldEPRFeMh8CpMHY8MIM9pFfwL/pGw3DIpKFfZpe + CtUzkLOdFNArgqVQxgJeRkjOlE/TXY3/FaA3L9uGb6H7lH6KiZs0l2LBGZ6bmzz3SacftGsbJiZzjcaf + Q+u0xXx8m7tYrr0RR0K5Sbg3K5jgiJim2LtYqteGLEYQbQnCe2vL9MTE5g0b+H3tmoyvZlMxt8/YVaq9 + nLN6gXZf8Lko9qCp3xE+HXRR1OeUcFCZBYbAYZ08XbbkYsafYmG53Gy1qbncSn9BaSVhSk8aO7QAoeFi + eB4xMC+Zqo2usRGKzjCr40wWDrRhJ45m6ZiUORhSP6DjojwhZNRcamhramhpbaDeNy0mqKDWMVTqGuub + WlrYvLNnciVUUIs1Rcv9c+MrO2e27KoMLGQvrVpiLZAzrXeN/AoQak21pvbelu4hEgHbhxa6xrf2zuzu + XzgO58vUYc9cPPmSjWe+5qCnv/OoF33+iMu+c8Jr//j0t//zU+6pXvjT6ov+W/XCn8ly8V9UL/3b6iX/ + s/rSv6xe+cvqkz9SPfpVf7PreV9YPuOqsZ2ntA9OSv22+GDcE+NwAiT7hkb2LnMV190DcyIUHAa9/dl/ + 3ffCN5itIlrYq+L40PJFa3+QUH0pUL6uw/HN4sUU5lbpmyNMpgJqg8mVXPW1cMjFLaE3tBJJt8isX6R1 + govcfokYksXPU0XU75YkIJEJLzalrQ+ETRWZiHR2cetHkcebSATyJ2kt7Z29Hd3a1ztXccNsBV6/OKnr + KFpTKoQm0ZqY+JyfwptZBoNDMv0P9beghkxsQSMLDnmBSkZPKNTs7AQRKUZtKKDRDhlV1YuYLFLfJCUf + KWTKc1IGNX3eDCBB7cxqwXRCtizJwd0lPEcFxbGChplqj2zA6D882C+apGT7BdQpqI4ZEA7IxpJoNyCA + 5AtvHx4mXgjyyUq+6dLiDBhjomgkhbUoGNBRW1b1DrAEz0ugpAmPFCJohlXNRMyA0AKTCRAGLTfzskYr + kOvDMkWItho+WjTbvq75KRg71RgiC1cumMwqut1rI37RmNli6S5O/vi5iRZL/wprp5U0IeHSFR2V6yJ2 + pgyW44iIXHWkhJHwo01fsox7y6wwd4xpp6mb1KrDh4mdXt5qzoISWq592tTXqWHQV7jLoADkuaLi1N5x + cW5qzpqizZtZPD32Ks2tlea2CopgBoRZKgXmQr4s6OuOgSgvKUb6EkaZLFiTQ7xkZHIimM7jfdKfA1He + RX5EZ0O5rzw8Pzo4NVMmNNjSiy5a7hjoG5sdnd/YMrzY0BuriWpN0eahxeHFbWKQsRKjgSbOrTramvar + 2C01ZaCfuHFIhG/pGaaaaMfwIkDYM7m7d/a4oU2PnTni/JUzXrnzGW84/MUfOeYVXz/ppp+e+a7/dc6n + q8/8VvWFf1R96f+oXvyr6iX/o3rFb6rXVqvXVauv/l31Ff9UffF/rz7re9UnfPS3J9z48Pan3Ti6/YTW + nhFNqJCetyhy64KC39tGgIQp2vv2CZLGKXAizYxysFQuAe9rwCFavbVAqv3chNWFF835WdjS1AbWGzmz + y4xPlKpNlIfXBzyPSSX3Rn6CFq5PJj4cpKX22iq7DXQPudxBuwF8qliYMMYJpkUHw2xUSx5KOfx0sTAh + N7aUFEij/YkjIJg/xT6Kf5QRI8PIXGeJgIW5AaXg01sjOuhTe3M9OBw64A0N9S/MTTO2RiAMFUlMImM9 + 7pJCXryTDAW/mDXvI3JkhLx3+9aN83PTPkDngDA2DgQttm5dBoQc8EwFDVplHjb4lSdHRiZHRg3YYmwv + QziHmSByqs7p1M2e8ImLi9OLC9OeHTE/N/W4Mx+168Btpnm67AkMm3DqBNE3KDDCFN4yxNWAJTBDgwhw + XY4kzzKDlpvDxZBuX4B/PSeiGJsbljPJqQAU2S2xzzTLgudkmGzcsEiJn3RGUig9E9l/O3C6deOycLJs + JiSKKGyS8mhMkvzKseunoLenqoOLEFno2lEwyqFeGjf4xbJG0/nE2SiZENdLDaVAIPVeuTZl2FFJ0+67 + 5CFrpFqFVugN96xvIHDYRq8hW1/ghRZ0j3QwU0pDjDAJuHjwRfcQzaYZHubGMB+UbG0KitlwRzJ2W6mB + zvMT7Su7twwvbGroHBVGKLywq6Td50u90+U+bTcYmy5VBuYrg/OCjt6GyeCw7ojM4MZMgOFYPCxWVgYg + bG5r7uhp7RmCunUMCyPsntrdN3fcyLbHzx7z/C1PuObgC952+GWfOuaq+06+5ZePfd//hQ6e973qRX9W + feW/CARe8a/VV1err6tW31CtvqlavaNavaVaveE/qq/839Vnfrt6wmt/vnLmq/uXjqRtBQO4XRZ7RKC9 + RSm2p174On2halCkxnedB2N2bfFSm/2slhbpe5FMu84uLua63449cMkyO1zjqxVesmvJ9sYx0/4XpFEC + Sq+rXk6jgSI/NKhmKf+ssdsgglyYuznmsQEixs4tW5m96nsLfjC5oYw1CgRG+6iLKnatK/KFLKWIgkWv + WsRCgUHuXmlQ3oNEE1oMJuqoYF5EPqmSqjNo54i5Kv42s5ZbNHTZzZVSi5KUuOGtiExhYArgF1Aw7TUv + 5E9onySMQ/giF/TqXPLEQkqSSqFYaIWhs1YJsqYG/8LgS5WZwb7du3YsLszkgDCU+rTYmBhkgA36OqmZ + M1bvDOl6QqoUPGToj7AnDK9A7wJkRhnTQSvDs0QIFSQb6pufn5qeHnPyR/oE0UfCh6yhuLa90e0wqY5q + z20bI4515VOPGvIEjXdleR67TR11NJh0Crn5IeledhLNpTFWqmVurF55Nz2Y+jeuLFBrW680r3TKb4qq + LD0XE1up1ToIv2lqAObcorJa5miUSaX3CNswSTKAdPCzfNNsdpX/M5mQ5ZraRzEjEMFU548Omjqdm2oT + KrLQuwxZTQwIoyNDcvu0NI8Nj/B1AyI2Vricdu7YTDS9kCaht7Hl3oebOtVOoyUgjA/56KBGFMM0OkM8 + DpIDiFNwX6/FPnvRezNlrmagc0FVre3UrG5raehuah3p7J6aIiJYkmjfaEM7pLCzgT6APaMdw7Mtg3Ml + r6/tTZdY069YaO15V2vDJByQ/4UugPoXLEWAsLu1Z7B9YKJzZKFrYkvv7O7BlRMmDnrC4kkv2PaU6w+5 + 6J1HXv65o674/vGv+fMz3/3vT723+pwHqhf9efWqf6u+6nfVq39XvaFavb1afVu1ene1+q5q9d3V6nur + 1Tur1Ut/XX38h6qHXvyThZOuRG6ll+EeIZANOCygeu3+DIX9mM5LXuR69l8w76RvQU8n6FiYQ6SAtMb+ + 2SwUXa+3ES9hQFs7lzF/feT+4kratLKBQsEKhDLF46rNrsHwrChQuCvaMM+AFfI3MTpGmRi1imWphHbp + g4LtWitDp4iZTTRCoOKf+msydVRzJ+zG8zmpPbEMehbGBY7Zw4GpF87vf1RTa7Em0lDs5RbIYgaNRX2p + QAEZEcB4JHFL/8qnfGkGYWc7452SvBQLWxk9TRbz6pRpIUrPGjRtzcTPrP9DZH7BoxHDUWED65EbfDHF + YtNe0iU1hjja1U3Xq43VBVyBriljS0mb/ZnjdgkWahRQXuW7B7CMThkQDpooOFcPCC186GAJHheAsBYU + 5dg0Z59kDPyu/EpxmxyC+huDA1Yh0LDfz5WuCXTQGjmJj2aAGGqUnfP1yr05sKbS55Lu7ZftogyCBg4T + MSC0HGE9+Iqpit89l2Oapdyo5biGI9Yo9mk/CqkakUn9NbJ/3lZazK8PaRVmQ6PgdXv7YQftOubIQ1CD + uHUmR8fo82G1R/mXitPMwGLDJpvHhsTfJNJhKwP8JUTQ1th82813joM5L55S0gwjXb6itNYBO7cyw8jp + ZzrF51OtFYE0PsIaQ+o5C63nIX+ARWdfuXcC2ieAJ4VDwcL+EkVA+ydbh+YaMYUqEFYwiI4slQT/TBSN + EGjUcA+PwCYkg6JCd5C2zpau/tbe0fah2a6xjT0zBw4sH0fttIWTLtj25GsBwiMu//xRr7z/uOv+4rQ7 + //2JnxBp9PI/r75RIfDmavXN1eo7FQU/oED4vmr149XqB5UmPv8Pq495a/WgC/9g5qjLuie3079wT0cm + zWO1UZGlvOx7z6o9flDtBkpfHnlb6dpHEvWBOlvZr2SMkEu8AMnZpCtLqPBOhBlKJtqFXdDhpdQe7SFx + 7p7WplYRfot11DLxJLmXwv3jEFjURfNFEfXVzEGadZy3QSGmxhdmzRZlsRHKnrtHJtNFVclhG2buUxPj + g/39AQhzFZNDcwnqbJHtmM+XiBUpO6RThGOhVmr2kl2happlH+aAMBQLDTZFt2mEdMAAmVkXBUsJt1Kc + QN346ODs9DjiXpIRWJNdEFMaagCmGL0z1TGlXAZamjgY4ColdrwaAA9gC6jZMzY6ODlO0XABwqEkWGiY + ahzRUFDf28caMg5pUoin9KgjDt6wYTYL/im7dVmVdx24Y8vpp564QdokZT6dWuA0RbQmnDkAZoNMVLAe + g2CagUiT7u0X8XRDz8X0qjRp4oRJ3PJTxjJABoTp7Mdb+KKs8olsbGYZniAgU7GIHRb8xsoXQ3d70yRS + P1f4Uy5mCQTmsLD4ZxBFLNFWHzkHqedL8IQbZ2J0dHR4KOcpTeam0dedg8DCXRwpYLjN84zQcwp96AgA + GXMqaubkcQXbIeFSx9/YRRzQZEzjqGTCClOk0ie95qU0DP+2iTWGfHm00PbBhm7ttSsL+YLjoaZ27wwQ + aChYHpgbWtwxtLSz3I8uGqODeEotRrhHIBT6IoOfdiynwh1kpb27qXOgpRvj6ELn6Nbe2cOHtzxm+ohn + Lp/xigOefechF33iyMu/d9y1//2kW/7v6W+vPuXz1Zt+XX2/EkFQ8CPV6qcU/D6s+PfpavWr1eo9Coqv + +tfqsx+qPvqt1d0v+vn8SZd2T28iSLt2dE5Gax2vSe087qgjiCztA6T9l3pLQQrwY6td72vS+GC6maNm + fGK+rPrBar88XQJNsylsrpcs6b2QcUGbP7KZfpCbaMJNZUYhC/4lIfo6DUULtrdUHTXXuHjoskoxocc3 + e8aRC2ag7VD1WwpZa8UZW6ITIQw37IRBio0VMgut52WEEjSNWdIxV8xXBqdocL4khUPTyjIppfBwVJoC + 77EoHX+zPkpZjnyonBKSJSA3jOlzM1MgRJojYciRBv9gXQ5mCTwk/C+Wg6kVMA0IgTT7N6qdImnaS4J5 + EfCAN0rJCBAOKxAqKVRTjNHHQDENAu2Q+HdmagxHD7Lq2WedumXzkmm5rB8fHQJI+C6RQfZtWJzduWPT + 5MRw7XGmdDCTedXFY0FBYa4DvVMTo0tzszMcIpl8g4NSB11zLim6PUVOSGivmLWCSnXRvLmpUGUmZE04 + BIbwodiMMxWUz9q5c/OWzRvod+HJFWnU0DT5IiNUqOMinJ2e5OdOCnAHN40TxOiU0QzCJF6e3kEujUYN + RnQaZ4o+H02Df+nKJJroMQ7HNhkWUoKYjh4uMvm4oYN1GmFJQVGGutT3F4eyAITopeB1SRsKUhdNciSo + EUPJGDIlSBmkakzncKlrpEQGfWgrMVnqIWViJi6zhAY7xpdbRpbyXBBEVBQEC9d+ECjCCW7JYkIKm1ob + W9qpskYPwuauyfZ+Co1Sa/v40e1nzxx5wYZHX7f9Ge8+9OKvHvOqXxz/2v9z6hurhAlf9w9CAW/U0OBH + q9XPV6tfqFY/V61+pVr9ni5frlY/pOzw7f9Rvei/VZ/0meqJN/3ZylmXdk8ugr5rHB6SFnSey2jbpo3b + Nm9aDUUeEagzKvOI7CpP/LO/GN3JMaptuFj4Xqshn+0ouZjsz9zVtsp8LNusHuAFucPgMKoipoDkRBJ7 + idjDHH3Hx0YtQ9HVFZU9JeUgl9KrXdOyMEbMIwx6aTK3NTiUrAlVRJMlFE6z/F8MVgAgC+4AmguoBy9n + Fg0RQQM/zetKgTB6HGwsS/yixb7zRgg0Qd4YgzsM+bOmcEwKhGnbhEgWC13jY/OjrCdD6H/rDpRMDIyU + LuVD0cYpsGSEz6HCFdG60AJ0GefDS0JNMpTJSOkCOIGCLBbqU5lUoXFY6o5mZFFf4o1jY4NzsyI/Gwqq + 4zRQQ7GGjvSzf0KP/RrRnJua2LayTM1u0Mt1VOKgo1h8CtHKwV5oaKKXivjpkm9BDR4e7COfBHwVB1N/ + L9E75dbdKK4EIJPkE1WktZtHbR6hp4QaF4x00HhhsA17XVmrb27XDystDSOWJ7Wcisw+Uw8IQ/Cb90xP + joPcIf9Hp4Ayb9P0wTwWSgWJBBSLjDDjiJgGens2L28YHx1JEc7u65ihlEUuEkR0RUfucdYTXAecohrk + CBemyC4o2Xza6GBBYYpjUTo1z2bqcTQLW8mf5SarGlqiKAz4JyjYSwWZEs0FrY+ENJRgGRFSKBBoZtFp + OF/j4AJAmHUftKCg8UJf1hjcgWMphd5M3ZlYYkYy61soBFNpAQuHW7pn2gc3dU8c0r9wyvCWc6cOu3j5 + Mbcc8OyPHXLR94+64m9OfUP1yZ+vvvRPqlf9bfWyv69e/7vqO5QOfka54Neq1Qer1Qf0yRer1V9Xq/+n + Ktzx6n+rXvzL6pl3/dnCSc9v6Rldw3sCbFC7yGVATrWVveZK4WGukEfkgeSwc8fW6cmJtc5VFBP3+Ily + JdVL7edTtGZ3bge1llX9vsUP8auqAH6ef5NcduFpXgi16zXM9WyLhPfJRcwxS7lr5Xz8yx2NaliorM2B + 0ffxyY9/3CEHHWgvsbn6ZeR9BTm0Vh0tqDrWUMJShk35IX9DioTimtGxwEx0Svg4dVk3iYL7PMmUyGcK + Wo5z3ayJBAhtsEtjQoKCsZVSTErT1DQvGZN0k9Bh1CKFWca3lcqM5C8HhJ4OkeVFJD2PjO44/1st2c58 + nsLPViF/DmbBvWLkL9A+4XlU5pyaGvWVBk6CeRYOTNROVqJ2GilMMXhpaUbKe8p6QUp7EvRShdJUlYUO + Cm+jwKkYcwwve/HjAIQxbBmOkJ1MT41C6VIdNcYdc/JvqDCQFSYNzYStrltItYxGXCfoAQujp8ndv1Ej + zbpOOihC6M1uyg+6skT7jUlTxUVXp8Kn5lqoxl60jyZZhrnSo5mkH/3PCpmiSZhHLJ9BG+4O5YX+XO4X + AvwAasr/JsfGDt11AMZW7kd2xes2s9TK/lJul3fZrZpGMfLumBK34PjIKPKLmwMSgTRzzTgc5gWnwmy8 + zmTdBjEdu+S/gj24Nekg0dxVAvxo1UBVTukg0U+NGGF+3RMliKAUVNPmSl1DDWQf9E6Z7Ekf3KUdh0ws + HyBYaNDIW4QvRlHUQHFvHvLVtB9TS7mxvdJCb/rRlu7Z9sEtXeOH9i+cOrrjGbPHXL7xrDduf/qnD73k + p6fc+tsnfFQcoc/9gaQS4hq9TQOEoB3/goXfViCEFP64Wv2PavX/Vqvf1ZfAS7DzlDf8fHzXOXwKp0OH + 1DqETIyR/f0LC/OHH37I4x9/5rOf/dTnPufp55331Kc+9UlnnXnarl07xsZGVy8gt96vDgDMzU6TZb8W + PW3FN09N2D0EDrnAkOlHhopGm/UeSrIdJ4QqtNh2oqqeVh+t5X41/LAePUzDgTaVizZoAe+YaSSGIwpu + SM8Ho31aDtXuFuaJ1F7q7urymycCnt5dhZSJJDRYE9uQCH+EQKWDpA/iVZACpME1LllZIqb1uv6Zqkzc + 5GJCC9VEPWHZ+84XIdDHKdNF0/RBV0eTNvTCCCV6R5kQXKAhBdszBWMdr3yrdC994iAX0TFrwpcCYa4U + mWRHdJEI6IN+mggRjCoJ/1N6lzNqpnYYL4qWQZeLnwDbiITxopgZYCkAYSR/zvMMBQ0jU1+MrYwoGJEy + gmU05gT5VGhrCCgGVhoEVeGdWQm3BL+z3Pyo3xb9qEkqYazFoxkmmgFi1DC0S+S5eWoEDuXXNJdT6I3l + eqm5n2y6k9ZVZwMO3laCecPDA9gvDzxgK+vBP6qMIgUbEHrD3pqEirSLb2Yf5S0WXwz4lzSjqIHDmFAY + p4+AJW+VPjBhTbihZCKptyH4DUVeXl649KUXHH7YwQtSKjZjioqFBZtotkYDHIU0qiQcqBzQUpBtSOED + rTRKIIiRKa6iUSVE0IQtGioZEBIXFLNME+ooWmjryBIWGPhfibigksKSlBIdVLGUEmvUlJntnd604YBD + +2c3Cy4SRBTIZCGmGLAQl03j4OI6R2AbZENymqUVlps6GinA3UHd0TkLFg5uPH3ioGfPH3/F5rPfuvuF + Xz3u2l89+s2/O/sj1Wd+s/rCX1Qv/ycRSN9erd6llhn8MvdWq/dVqz+qVv9KUfBfq9Wfq1KKdoqI+qq/ + rx75qge7p45tovmvaCa4ibKxnhM8Pj5+4oknvPCFz7v++ivuuOPGu+56w/vf/5YPfehtH/nI2z/84bfx + /E133nj55S8+++zTt23bjGq2zq+6V5s5HwUkmFsZJq3xYDOa/XJxr9ahfm3Smb5KZu7pjz7pqCN3c1HG + OVSoxWCbGXNMGHN4qi7QdCJmyRXGAlPw87hgGhUIkz+DtMw/FvMl5AzEQvW2gd11rqyuxgvT1ku1Af+s + jmhMomIbRpOpqXGM73hH84EWGVbQ9abGxiCRkkQRzQjFSh/Ry16bPp+6G9IiW52dQhBTd6iJaUYITArz + xAmpL5NUjTG/vg/BDMTSMtC6BtqTXFOFpP+tkJjQycGJVJqHF3Al7/NUILRYXaBT9oSs9oSZBbAMUqfq + nACYIhOYEcKN9kR6M/GqWWNUJg1rEsIX1g/JZiGsqB2dgnyqgmoMIkpRGIXw4M3x6KADqqivvn09U6vs + Sr81Hzc9OWqSqanBEkm1Vhje0bCXaQR8VzJPIiMU+wxS8OaNSwQU3TXqvNDW8IOyGR3ytAJ7KKpumRV2 + SmNdBYkR8rkHH7R9ZXnBVjJVYg9Z+kTkhbwKFMn0K+vcW4wXsityFgkPJ0CYJFRkTQq9JLeLKF6MNFNK + zYBmNdVMYuH2nJ+feeYznjQzPVGIWaiKY7wwK4URfQAGbzmveMFe4FNqG1VINqL+jzg/Ewj0Mcd86Uxn + OYZa7cr0KfGLNrZIi0EZ1BrotTQ0N7O4/WBJmRen6JgW1B5uaBsutQ43tA6V2qkmSg/6KWpqI42G3Hm2 + JNdQ1FQUVKWMvZJluH4gzEZgjiHNLCRe2NI9TIG0rvHNvXOHDm8+bXL3M5Ye9crtT33boS/5CvbR09/2 + u6fcK2VlXv6Pkk1P7iBJhAAhxhlE0e8rHfxzBUJI4d8pKP6tPgEjX/jT6vJZn+we3z0yNs744uP7+PjY + SScdf8klL7ztthvuuuuO973vzSDfxz9+16c+9e7Pfvbuz3/+fV/4wvvvuecD9977QZ587GPvuPXWVz/x + iWfSy8qwgYf9bP7nXoGfb4zsQNLeHsGvsHO5ttZX9bT2qHwCxUtwo6mpCc/i8DlCxD8HwgCKyeQrzGhc + HbWX7IQYYhUmbvEqTxExvROyEEK8fUJ00DUWhgwqX0sZ3xwpDHdpGiZ0FKyVRj1HIkhDin95OpglBQKB + kEL35hWwsJA76MGbgrtP/7RQkFfY0igRg2AGhzIyMtqOT0hMy+pbslhBk4CRESlj8TNvNhtIiVPDQiv2 + hBRKMEyMl5r5YHStYLMsuD3TuF1m4wxWlyzO56iD9Z+ImoEWuigZ9NSqtp1k/G9EsDCioAIhaxznYogR + qRNOaYxQNlAEVQOOOXFyImqkp8GPw5YTEyMT40PJ8bsYG2E7Qn4UTuWEEDvU85PVoMlSCbUbVLCkxnZO + JpBy5vmlwBvkTYM9YNIqsdmPYlSPkz87PcH6WEXdIsQdHOrs7CSfm68+0wZoqoM0LUOaS67H30BLB4kf + ujgfas1kddfYP4IH907iHQ19eq2CkuUXxmliKDpfO4+MbXuLHe3tZgScaiMXioGZQBo9bg6KMhS46uOg + WIinxCGFEiJiaa0168UhSAZkPsLHZJ+++1Te1vDlsTx1dLU39zZNb5kcXSZfXg0yFiaEDrYPl9oghcMl + AI+K2xIszAKBTcNLvbNbO8c3lHt5ScKH64oRrg4Pqt6i20q2IVbSjuau/rb+8c5RPuaAoY3HTR7yxKVT + L9721FsPuehTx1/3R2fc9W9P+7JUGSWnkIIyCKTYRD+mxhlbgMO/rlb/qVr992r2+Bd10Dzuk/+x8ay7 + u8e3WttCTsRBB+168YsvvOWW69/y1te/+91v/OAH3/qxj931yU++69Offs9nP/teUPCeL7z/3ns+8MV7 + P/ilL33oy1/+8Fe/8pGvfPnDH/rgW1784vO3btlo/ElcsPuKRn5aGCLJyNlbNOWaZn649qc7mfPPSq8M + uzikTkRSfSYehmyYv3rSvzLyF8HPWaABYc4AHZWNoG/k54BZEDENIdjzWuMZTk6tQkKpVS1jUZMvkdy9 + JMNkE1ubutq/WSpxbhTIeu16moSXcFyjqEeqhUoS2OhgqBWiumjREGhp8jE0GLLK3C+jMimwMTkpxVBs + DDVvpzxXF0YaJrS0v5j0FhovWIKgpsx77eysWBq0gIFeDCyIe4N9Wh5FqqbJEltAADBYVPC52EvBAhoF + 0qArRhCyOJwvMKqJ0SE6Fyp0DZxw/OHPPf/clWW6DkG2IhCOkJAwECBN/S8iokpjh34+l9rW/Gu+mEgc + wzaKlMFxqokWwWXq4caMAg5J5ZcD6La8aclwNCi0Ma/DkS+KqwHRs1T9aA7KcitjDr5MINRNGviioqBZ + eVNar7RSqsXi9vQYocnaZgZOsZD1zPDYrbtMjTJOT4xTZUZTKcK15HMslR/wLctmSWUZ6wtGWo6Co6Ij + teOpU8MTrxER8C/ky9bPqS/cPnJnxdlnYpyx7tZSFKP2lvQAod3OMFf0J9V18ne9Nl/LGegSJEw3ttGG + 2xhxl+1NWrTZdnwkyfJFl18mBNLEY/v2zd2DXRSUKQ+UGnohm10l88iIcVS8o/K8XddkTScC4A0s7Nh5 + zGlzO46UeCE9CGWJWLhvZEjpqY2wnAwyK5icd7R0D3QMTnZPLPcvHTx2wKNmjn76htNevvXcOw+7+GuP + uuOvz/5w9dzPVS/4qQikACFOUYKFJNSTSoFGinHmL6rV3yZAyNOHqcf2m+rjPvLbpdNua+mdQsI/5pij + Lr/8ZbfffuPb3nbre97zxg9+6K0f/eg7PvHxdzoQfu7zd99zz/sFBb/4oS9/6cNf+fKHAMKvfvUjX/vq + Rz73ubuvv/7lO3Zs5uzv87cuvJEvL0XI9mZ3/PRWM7rwprqAahTNEg/SDcgHP2DbFirUFJDS8TLCYRBL + 41zM0wfrOEUTFuiXc07oz+Ni1EjtPshqLwU51O4lv6PE1dlJIxEVZ/JAWFcIzXhhjAhayDAtq5ERRMuR + iBJoAfwsO94CLbXWGFvDGEcgBxWLEcqqR3pBNXti8/1UFLWEazeOqnrWEUlGkEkjHQyaZ5YaoVBnfC5G + qhIh1FRQ6xcoNbIjm1EVTowwqgQKQiRJ8RYUBCn5Iq58ukXF8CNjZjGlIYTiAiIG4AHPDjxwy3HHHWql + ZDL+p7FDQTXTRUcyIJycHF5YQIoWILTt7V/ji0YK42fpp8jxRDgMGfdmQO1jRoKlk2/hQBipYS7qmUQ3 + A780aFTaZ5XkrDC3nWe3zoZzGMu0xtwJq2YQC5rbL+UOGpO7O7WXJE8kH5H4X/RGSVhRrcJ+SXBVMPvR + 0jPaoSl6r7zEjE3CWq3ae7JQsIjSoFaSm22gg/ZcgFDlfS+3ZtAYi675fSElmfDITI6PkSpSjxqGKaa8 + XRuWyU0kkJird2juNnd9E2lUeKawqlRHNHZoj3D3xz/FSZdhoUFdkJhAwZWlxQO3bSN5V/qWa4K8o2CB + +TlSFgY0SaCibDc5hV3NDT2Vhs6mhjaAEFI40tAxqE6ZUWRS9c4AhCKNOudDAm0b3ziwsLNtTCpxg4V9 + s1v7ZrY0WvXt/Xp4uzv5xpJ0T6Jhc2dPW9/I2OK2A448Y37X6aM7n7Bw8kt3Pfcdx17z/VPf+HdP/kL1 + 5X9bfX21eqvWVyPLHlD8bLX6DQ0WIoqmDyRT8PLK/1V9zDv/adujrjjrsY991VUvv/XW1771ra9/73vu + /MAH3oIi+jEFwk998t2f+cx7AyOEDn5R6CBEEBT82lc/+rWvyfKNb3wcsnjZZRcuLMwm0cb9OgF6KayV + VmGXQi3muQiw2scbkvHDU7LJLr50SzwyU5PjXL7xAsoigjo/oexO+nA4TKdg2QaJgzSQQl7jyt+4vET6 + rQNkAoTZbRABL9NJ/P4humBY6PdVcr9Zmd+MGqY3rbR20yLpqV8mZYRJHZnC0JBlCubML6t49mSEiuWv + 3CCToGBARDHH54AwG/XSbDMPJsUBNIykGPdRybQ3Xs47yljM2M1L8ImcLyZ2dbc88QCESWmxaHvJ0vV0 + jemHmTPT2J4G58JLoAt8K7JAgMpT3XuHhkMuhDll+De6Y0LUMOV/rogaI7QFImWpFBo7DGkVvkF0nIZU + iiT6qKHEkIkRIDO6bAKgGtNFLFU0zWRV+7LpYhOF9bhq45QlkELFS/HLuKE3QUH1zsT+hYQSd27dTJI+ + 5UkxwohTht+xT2QAB8LYn8Sbk2TeqxQLDe1C0k4MVyPpB5iMXXyTXFijgAaBuUR7vzu4ZZglrywu4qqw + 4ELdJk0KhM20UUG79WbXKRz6bcueYccAMlYagqlYAnmvg50Dod31CQvMINDiheyQDm4QZayCxFqVF8qD + +SkqMaelEKnJMUWzj6rUJdn00nSeaqL0HWTpKXUMlqQBPV3p+5UI0oCQnPoxzbJXdTSm1UctVLhgz/Tm + w44/5bDjTsJNs99AWDuK28BfaRyfmDrggENGJzeQd9+3cPDUoWduPOOiA559x5Gv+Opj3vqrJ33235/y + 5eozv1O96FfVG38nTlES7dFIH6pW/3eChP9PtfpNxcJr/7b6ghs/f/WVl70eRfTNr0MRJS4IEKo15h0f + TxihSKP3vP9LX/zgl7/8oa985cPg39e//rFvfONj3/zGx1m+9Y1PfOIT7zjvvHOJ7a0fAGMHhkCBzTzp + b+dPa1BZd4esr0VKSy1d7S3pfrgKuS0kVhwf6buS52HmJP9RbAzulGTOpU8pVlQmh1wCA8kjiVpnSinz + ygN3bEtqjYbwoe3ZLno0m4mRMZL2HPyiNJoTSAvzzTV1UUmNYPopGYfRCx5zpLK+g1n6RBgXYnHRWFBG + S7p0+lw7jfzZyryXXcep0D0nRwexlwcimNFBhsXQZd5JQJp8xoBIAtz09Lg6PKUKjDR/GOYkefukLI/C + qkuTrqB9IXJiaUTBtEx2lhcYlc+MDPmaAlTE1AXBOcUqwZIE5AIyGVAZwpnaGcEsQJq/FF8NW5LkAEr5 + Ss+mGInC6djYwOjYgOZChKjhUNQ8VUcNB5NyR2OQKSOkpM7GDfOcKAf1wC8DiGbnIa0hkBiLlBcOhKzK + zC+qzI8/ycew+K4lerr1qZBWwQ/NZILy3CiWc5hzhgdZI92J+/FvCxBa/Bjj6IalOf6NiTcZEPqlyOxK + M19jEJHLUrMMTSy1arppCDytC5GlEuZKDAZeaAJSlmIRwwravDPXnkJvl/p9YJwRcoxzU9NMiKGDducK + W8y4YMYdE1nUhpEUF8NwJ74YVVNt+OHNuByWFue4W+uywDie6daSRNGsNbXJoOiVDAoSCgG/9oGSNJ2X + lWKEQRGVReFQSGHoyiultz1e2DfbOrJhZvOu2S0HtY1u+D0AYRyvTRVTmtjc2Nbd1jfaPbU8uHLYxEGP + nTv+JRsf+9adz/r20Vf+DZ7SF/5x9erfhGLc76lWvx6x8HfV6v+sVn+qKRZ3/uKfrrru9htveNWdd958 + 1ztuhw6+731vih7RdxRjhBEIUUS//nWI4Me++c2Pf/tbn/z2Nz/xrW994tvf/sR733PHyScfs85KNPxi + yBjEeqyoKRcOOQvOz7gshoco4Nu1HlSrC2brx2PbMg+EYY2v5PpToaPRcnBqH4RG4ZcOhAkXTIOFwQij + kJ95R7l89bYJCYJi9KIe6cgoljC7uJ39uV/UXWfmVUsXu6nq6qIeFEzk0KzXTOIR8AlyoYKM9KmRLhZR + dKpngZF+4hr2s6Y5hXyJIIS6X1TCQjFAaNW2XBmLpDB0uWNA3LF90wE7t5Dutrw0l9guionzFgvMHC4a + 6lP8yzS9WDzMM+SyYmOmheYcJVrb2uu8pDTLtEpfEtLWNwQ0BgInsT3ncNEFY2mCsoBkgmoKk4aUPJ+b + Q8YcCWtYGRHU1oxBFscGEU4PPnDbxpXFJKciaKdBRI2oOTqqzhp130QsDB+NMywNTwaYDPpqoIbGCGkU + FaKnITkyVtWJZzhNpbcwoYCZ1CANDX7rAqHnUQj1p7uWtvllISS7ODND6NEix1x7O7ZvfMEFT19ZWbAp + l9fmdo0U+QHpkiJ/aJ9p7NDQLmJhViy+toJEKo3G6vNZED0XR4jp9h5u15uuTpy+RiC1cD53mbQA1hs8 + a7tWcMq4WOoYWYOFNXKU6qiMw9yJDo3JkJUfwUCTptZSM613paYMKFjSjkslSqwJKPZSbk14IV3ps4Iy + OGW0Jb3V2vb6ovakR6qvSQG29ZRY29thuqgBSnk4A39ySahW2tHSNYjFtGdq1/DWMxZOvPTgF3z0Ubf/ + 8omf+s0z76te+EdipSGJkNAgXBD76B9rQsUn/+k/rrz9/dde/fLbb7/hbW97/TvvugNG+N73goVvxilD + soSoo59416exjH7mvZ//HIxQpFEYIaIodFCIoODfJ7/znU99R//92tc+cuONryRYuJ5vB6IwOaOQgrFA + u5j8jXw3xtta8XM9e17nNoHrZYzQMyICBzUUjPMv0l29xURdKMxW5hVR/ZFC+kTqHfVpXQnFEsiP2YSJ + ZywLJ2S58x4d5Ix1dnVw3/pt5hC4mjSaBQjjZNaiIxYjzEIj3nc3pE+IiVSbgMeeEjEomOBcGJgscDg+ + OkyDOosg+hKig7HpblpYMlLAWFDGM+i1pqhEj3q7ABvcE0K8BoWBuTUxrWlptGNlw/yunVtHUE2Tmp9J + 4DBwRPM62kidJqF72bPUHRrzHELxT0O+vKvTdUvXPJ38BWXSAM/toM7VkEzRJ6cmRmBmPFeDzNjM9Bhs + j0JoAL9pqrYAabYfNmODTSuLRP4849DppplrUroZgBboHcnIqBPZuH1WzkbdNzlGGKVjT6PMSqcWgrJG + 0z2nJbL2LBkmKUCaNex1mdR+dErfHXrAAZs3LEUsbKd6NSu8UZdhYbzAQsUi6CDmLK3eTnl30hDliZYJ + FCUjTQdyC1iaRBGL7opGWjdwng8l1GlkH62kIWy/SpjQCV8aNSyWlEo5Yr3AYeB/PrzoUBNih1YmOY5K + OfDTeX9cI0BIKqG2oW+R+jIlqa8mi7JDQLGPfrwAm1YTpdC21dSO/SW89aDn0XfPNrCYWWa17hOrjdHM + nrs61+uT5CtIQbYmKvEUy6XQy6IRdbp/rG9++8TBZ2x49GU7n/Who175h6e/6zcX/bL6Fk23RxQlg+Kj + v6le9a5vv/LlL7v5ple/6U2vwyNz1123v+udd7znPXfeffebNEz49o+qOkruxGc+/R4cMQQCFQg/DCP8 + BkD4TQFC8O+79336vvvk3+9999PA5Atf9GxMWetCo70yw6xrj8WNXAFYmzXaZeHUMOrmgoJiNRNDTZo+ + WLi8cpHCNEcif4HqrCWAYoaCPDOuaRd6DAmkt0RIOYpxQQFF3sFR4ai0xivBKZMU1K4bz+ce5uvAxgz5 + 8AtgTxARJxpHnRS6RhR1pCZ88IccshNVSuqr1RSOscJpFg5k6CE+NzI0IKTQ+unIaGVcMJcs4dnT0TQY + CzFrBqEzQp4jr2EcZWAN5ba7O8zBD5LFTPngzoAIHnPUoaeddCxJC1Zv0zMc0jphnhWXQmCkOyHyl1HA + RPN0FwyvYjeVsmSe+R5VUIOfENiLzwHvlPnlsU0UToAQnseTR51y9FlnnjRDkoXaZeGF+sZBxEMDM/vT + hFOPGvJ8gQ65UyPxc80gEwKN7HZiQkRUB1Q/POeORk89jhidpVk+YjSUamU4yZvMcu29MUVSXCbw70gH + M6NTmlaYaqRckPA5pOwIk52EDOemp1DCuVQIHBIIM9jzGmx5LAzrbRveAhCCgriHSMOfnhqPKFiEQy0Z + mAbFPX0iS6VIowY+a7S7TJwmIb+eGzOIMXUt3PlgofcvlCdWiSax0oShwMalxDvj/lLXSI0PBV6oJgnz + qad+BnXzVWjlShTHEDJioYhOLSWpNdrR0NZR6uhsaO8q0XpCyq1JuRkBws7RjtGljomNobNS6Djo7SYi + 5pE72DPX0DkbFuAQLGT3ayd38+VJEhCnULlMlHP9MiC75WzTxnAN2VB03+bW5s7ezpH5gQ3HTh/+/AOf + 94GzPvDzC37yH6/6q+r1f1l9+Yd+funLLr/u2ituv+2GN7/5Fmwy73jHbe985x3vftcb736vq6Nv//jH + 7vqUZFC8+3OfvZvcQVyjGiMUadQYIUAoKPhdUPAz3/veZ77/vc/effcdxx13eMGEkgJUgYqtDXB7xMo0 + 1WGfsNJU0Oxfny4ZHZRm7fmqcmEyZbYcedSxzKTRQSPuiaBRK/SHNY6CYfZnxWXigwtGDWmhVlNtRJDj + TPFP4xZp9ELChGAnk2UDQmNsiUc0uMYjCmatvRlBYGMbNswxGbfRJIQJIyImtE+lTo38ZYv44mJQsJgs + mJnmA/JldDArQWI1SmwA9Zpq1gZBjRixjqiWOJmZQVQck+igVoSx3HBLcrCBPqYJig3Stb4UMtUdo5XP + QuTPA36h+KfxJwjcxNiQBQhtz0F+DH7OLB0wkjkBMAcneQI6BoAUYGMz1M4Tjj/s6KMPBv8c7Qz5LBw4 + Ep7L9gCn80tpZLhpCR4ZjiTQxwCEvqssZBhlWINSV2Xt7QaHmbyc1kE1mpik4ac2Xa87E7MsrOia173L + woS1cEgBBMo4aAnvUJ7U0yp4Qt69eGc6xUrq3mMmWDrZSjvdy/M0Vs320iixm4qiuTBhxg6jNToqpQaE + mWvG54U1hblFLGHer9Wvgi6aE2Ys177eYre1zW55Czcm91QSBwlTYS0c350LHyYxwzR86MpTOvgwNgGx + ff09mGNLJBwCGixS4zq6GaTvUotU3G4B/7oaOjtZSu3wQtRR1UVbeivt/R1D0y1DWlY067KU4V+WONil + KNiRYCGHvjYQUi+P7A1NTKZKQmiTsc9D+RpvlEGYgat/bGDDoVOHn7/82FtPeP57L3zJVVde8bKbbryW + 2jEwwre85Za3R1KokcI3f/ADb1Xv6F2f+ISQQlFHxS/zAfXLiFkGUvitb4o0et99nwYIvw8Kfv+zD9z/ + OQDyFa940fR0/QqiDM0Eh1PNE6TB8FC3hCl4TwFWyY6p9+CHlzKAlf1q21R3MhFx0fwxGRdU/06zTKFI + vWik57QcW434kOUU1tNIDRELWChXZkIHJWZu08yCNRTfGqU7auOCgRGSvZREB1NXW6ETb5IpHOIfaTjE + hwCTjPLFZcxuEGpqGyIGe16Yqoc0+RwQBlCMZlEN+cQWS7lMCTeLKiMMbZVypMENouRrU/FZgn9S6CRJ + qA8tloyjJFlxEvYjnx0OF8pJaz6AIWVe9DPpLyvmGcJmw70SupudgFq5NJqYWWI+gwBMRrxS4GHj8XFB + L4nw+aJAyHoWB7zxiSFdMzSeAKdHGdFFfXsneaqpgsrpYQTrqemo/om1WJigYKbrKt3sT4rGZY2f3FBq + qnKszpOrZlDIKRQGnyRRaBqotG3SmY0+91lO1l0ya7xl4nlPVyfTIVU76wWbw8rgF03TJ3z2Fp8krhkm + drlWKllxXassHw2lkheRjxpaQKHZRCPzoPn0NH1SO2f1AIcBIf9aBpQBoZvmeHrWGac87SmP4yMM5/Im + UmeHYZ6dj8LI9gxgHZ3tI6PDbR2tpSYoFEDYSMdB+i6V6A8vumiL8L/2PgBPRNF2GCECqRpkTB21f6Ul + E2HCEBE0gTSzyaQZ9IaFvuwR0uTbaoksnJZ4pdagdwU6tcc9126QIklbW8/xx5988cUvuuaaV77uddfd + cccNb3zjTWAhpPDtbxdS+B6NFL7//RYpzLyjqKOQwnvv/QB5hKRPfP1rH1WzzCfuU3UUILz//s/df/9n + H3jgcx/72FvPPPNkLpHaI9FYYG49lpCp8XFLhDeA8Hdpev6qNb45YzLbWAUm65wE2TIQuKiCBi6YCqf5 + /Tnnk3ciXjBBkyu3VG7W3sUOg4p5omB4k+iCZdRYoUcc06lcwSpt1zpTXaRFBUKrry13iM1Y9bZpgtoR + Ri3cb4U/2VjLTUlL3rh41mAulZ5qah4d8XlxAoGZmpTl1Dsd1A5w7l8vTM+9hnIKjV5KTfMFvbZW7D6v + pZnDEodI54JJ1mCnJQWGAJWWgS7kS0TlM6idniOYEkG0uKXFmcMPPxBXamCQAGGUQ81pafFCwnVHHH7g + 5k2LxQicIV8sB2ORPNFCNfPBAUwBD4QLdlBHJgc2I3n8iSI6PT1qWxZIpFHD9CX5aPm4IhJHBTUB3Swl + I6tck+ZsuJWG/W/bury4MB0qseWrBBRaJKrMSwJA6NzriRZuFuVngudJ9l5WEp2uFElr5bg+THpibDg4 + p0I2oZuKlf9p7k16IWVO0VXKcEfXaJEXRuNoKDTvsUNLMXQsTJKLQrdCmVAmFUfdLJOSwjhJFYzUe7nY + PdvWKB7avNeSo2SE4MmWzcs7tm+GLDk6xjEkJYZhbp3AZOZL0AI30uYIjZLipEQEqSxawhcjccF2dcq0 + N7Rq3e22npaegfa+oXJbn4Ai/7b3SzMKjDMdI6W+mebhDQikZYE9aUkYlFJvQxi6T+CXmWswOOTfdT+E + 1nCghe0ZNzk/KXOycd8Mh+veuWzIW1Ifyvj46LnnnvPyl7/suuuuJGvittte+4Y33HjnnTe9+c0SKXzH + O25/17veQE79+zxSGEkhCYXBMqOVZUilF1Io6ugnHQhBwQcf+Dxi6U03XbG4uK6zYL+n6ODliiTW4CPd + 79o0qzHIiH8qaCbNlWq3t1Odyp6GeQa9NSww4CWQQ98+po7mLTX1NCJiEQW5aiXAIDVz5aU0Oug3TJRK + XCCVJwaEgm8KhH7XxeeZQAoqM8eiLUBtsmCKizbVzS9Zu8E8IzQ6WCeD3nMH8wnyuYyIFBRtji9AmNNC + Q/f5fOgoU0SzkTRUEE2ax8Ys79hHIjakjbmAudy4rHyopIovL8+BcN6cyAZ6U0cNYIwCShxuYQonSzR8 + yhqjdykLdMET7ZT8BAvyWYDQeJ4Bnof6JJlvQmJ48qrgnGS+a8MmWePoaIhoQGgbO0YaEHoEMcQjR2Vv + BqX+iakwmxhwMrAMztKRfsu+t8ptsgS9NPxp6ihFsSkOcPxxhx100NZozc1VYgt+GSTrPjHuioMmxUKv + BBu10+x3j/mFeIlj0Rl5UihI6y9558KCV7mm1INdulmZ3Az2ktq5BRUkCRZkDtKkDEUxp7BwVyrUCWRa + 9kW9SCFKDnPVFuueFt0AAoc2NKXjQzKfdiwMQ5O0kZEuTgkKJqOVxA0JqFFWW0iedlwS5RNQ7JRYYHt/ + Y/fw4pYdKzsObOkd1fRBMY42NJNcONDQNVkemO9f2D6+srPSK3kUJSul5lww2EejXopZxiwz+/lAdgMS + GOVSskJ8iKUuBWJcT1GzQCKdNnFqd+066IILnveKV1z2mutfBSN8/etfg2tUsfDmt7z5FnPNvPvdb3BS + KK6ZaB/9nNZagxRKWv1XPvz1r2kGxbc/gTpKgNDoIED40INfuOee9z3xiacXSCED/hol0Di2LnyQpPep + 4LifJ9Axb/37ST8T2xnZqQHfkuQK89HUAqGhXdBOA/7JZWpwGKtCZPFtu7L5FNIK7XKujZPbGhdPjBfW + xhuYR/msM51+eiTf7DDmy01ntdzetI/ZuLREECIwwgCHxfTBOFhkomjdUjKeRB+tMTZhj70jgL3QXsBy + JORV7zlQyKCvBcICI7QRFhsFY7TkQmjiNpAGBhAgZJhOm0gYz2NLQwgGdyN5QTjV/gwxX1CQL3XE1AbP + WKO8TUJ6CoQBkAIa6UfYsnl58dgjDoFuRoeLMMIIbxkQAlcRCAXeeE6kkEXRLqCmyZuW/+4b1/LFhGXK + xgaWAQ4TSdYzFHNsVYDTshJJ3ld9WI2jgf5qWDS4ZxUaTRelAtxjTjt+90HbY5WZHn4LEaW1FbB6Z6xJ + RXAzGRBq1NBfikHERBRNK6sll02YV2k9mtCiUmXSnE0m7XnJNZnXSD2nMLXMFKpyxz9jh07PuI0xQu3Z + KwH4rJF9zp6WL71md6Vm0HdbSkPCC617TGOTdLojodCyKYJLPDUNJFgYsrCsm62ZD2yc4SPYWw770j+k + vnZbSXpNiDXUQoCSI6ENeMmUb+yb6p/b0juzqdI7XeoACwcFCFuAw/GGDjpRzDUNzrcMTEu5NSk0E/II + V+GFSYk1jgE7DLMAH4s5Vv7MGE+pxISdhh21PRz4Zpy9Ahqk5sbC+C79kbW4ztrjPu6I448/4cUvfuGV + V17+mte86qabrqW46K23viYTSN8SBdL3vPHuu+98v+XXazaFOUgtWEjdbVwzZh81ywyW0fs1RvjQg5// + wUP3PPjg52+99VUpKeRbE8dH4F8/Mu3Plump0Ith1Z2laGeSBBuLhas52JHs7Qn4ZV5kjwIa8zOyXmCB + Qe/IZcKGjS05tzDd89sgzg0zjKzRVYp0MGeWyTfgLUqj0q27ZcfmzccdfjjuhJhBUb/vPCEKJtpKBLMS + M1lafdBFsx7i6uVLC6clcGg9d2JtydQgY07RkEyWNJdQUGTczPIFzY6P4GYkLyuWpi3UrVWCr/QkCsqk + HXXYwbsO2AIK0ioB3hbKhKoTxEb22dnxXQduQZkURui1rWNRGE8HhOTBhJyBFS0wxvZGB5YWZrZtWZ6Y + GHZaZmSOJSNqgeEJ8pnmads4EAYwk5WyAf/qS/w7wpPaj7aUxBBiDDuMNDSyw4CX0adjf2K04YDZoc0D + rBtGZi5Vcjw9NWY1dMxHIzOP4f6jDjnokAN3qrkGO5J4kYiwrqzMLy3NxiTCAITePzmI2LElpPfv9Wsg + sQ0nE6lEPPDapN6houAgjaHrKNpHAb+QRKF/BrHUntsGMvmLVlKphaapSu4XdWhMpph1OveGGzZWAJaN + 6xRdi6H9PBd0nTOFwzw0ZhDocJgJUfIsk6MAX4kLWid6iGCbBv/gfKGz0kSJYjHWQYmle67UPtPQPtHQ + MdbQPt7QNtPQNjsws+OAY04dXtwe0upDz3pqrUmJmZAsUfuEAZHh45CDd2IoSoFQ3BZR2+RQlzfMH3H4 + Qb29PbXj9GomkdV0vz2iIG+k5NTpp5/+kpe82IDwhhtfffNN14GFt932mtvvuEEE0jfd8ta3IJCqgxRe + GFPsLbNQOlF8UjpRfOHzmkqhJWa+IaTwk7hGEyD8wo9+eO8Xv/j+xz/+NC/myXBPighXQu3xC53dE4Tv + ByjWwUAHPxdI9bIpUYyE/p/OrWvRNEHEFB2zeVd0h9pMzTWKMHFLXpW5nDItUf8NCxNqaGFzX0LkwIIH + KSks6KJ1syZ0ZWgfk9zAjbBAavnPTU4xO0kYYVp6UaghvboOO/jAidERS5yoq4vGAGELKV/4S/H2BTuD + 5sing1qGdhER6yXRh9wyc1IIEAqNsKqVSia0xVKkGt4PSFiIFwNLkyUsiMggfu4Tzjj2mEOF2ZD8IOxq + OK0Xw+AOtCxvmJX+75hlikVhhCoZhTJAciCMKqUbUuBhAoRRzAxkzvicIxw5gqRMKEE0CjhiGMl6WSIp + ZAPeyKtIsraBwPDM6NLSNLCNQSbjhZl2KrQyKqgBXI0guqBqnh19b+CvGxZnVpbmhDEbEJqbNKZ/cDZm + psZ279y+YWHWAod2quWkjZP4McQTzgkiM//SzxIUZK6g9dUyK5Phn3Zx0qJrgSxqbaBYQj2XX5+0KrQ+ + zLIkEympPioWUwoXWpPnYq2ZutKFQZ01Dkz8pZZxn5WeCWaxluYNS/MHH7hDhJOkQn2URkPPXu/xadDo + eRTyvKYavqs4VhAxLmkEJNz7Ia0iGSJ8oDA66FPw5HlcT/cGqn/Ts7Cppb25HatfqQIWtkuyIPE/RUEK + isLwSj304J2RkB7hPTLiO+ca2mcBP4FAELFDkiJGlg48+MTTu6e3aE1tOjRpoRkpOqqdKNQ7U0p705tw + yoNhDoTzUbXuUM4pSKHRt6GcJEf/iOQGZPtsbJyanHzSk5508cUXXXXV5dddd9VrX3v1jTe++nU3I5B6 + sPBmsikkWPj22xQOkUmhhiRUCDXER/rRj9KSQgqQWlqhCKRf/yj2UeKC+GUiI/zCD39470MPfeHmm68A + 6dGt1/4ixLr6eigntlZx0f0AwuyttXMFW+Ocj3AaqSz2k6WYp2k3gVfmxIY457KVq1yXqUfUNpNaEvxr + wQMvrlaLfB459yc10mhyI8UcpgIc5rvJpCW2G4kpMO4hz7pBxo0DsQxVE8lbzOfoW+kO0nRwYQDCPs55 + s07fdM/Zvo1SWXMMc8YLeZFGPJkdVGM/bgqNXQZDpoRtFlvPF8wUyght9NQ6zjkgTMptFwqAuS+GYZ1h + enZ2wsJdpmp6e7+0Y0OaXV7IfEj/VElTWJrF7VKSFxPeQ3wuiJPIngHzRPYkAkc1MdtDBntBFx0hI1Ch + cdiQ0qmkbYmVRnFRGKGEFUU4zeDW9FV5bwg9ivu0eHgZEAZpV74CaZGaAWlnwIOIllOBcDo/S91p+g5m + qfRejgB0ZGIxP48xl5wWE6uzLh95E1NaEl1nNj7jSdRRnz+JbSppxRxKdatHlKuFQp0saOwxxTDr0JQm + UdQiIrSVlIxCU18z1Njt4IyQzegsyG2SN53lcpNWlUmt0lPEwpyPJl8WKhNFdb7LDUW53JmJCSJ/JifV + 0MF0qh1k0tzopEAoi9QhE3MfQ47wwhgmRBQNQNg1CeCVOmZLXXPE9uRfsJAsCIFGjfaxBoyM6fOCeWqZ + ob6MPvGu9LqNBwh5znFbv6t9G8G1OzkJGBgREZfXShks7r/GS8lZ5ZdF3BobGdm2deszn/kMgPCKKy57 + 9auvuP76V93w2mtuMiy85TVinCGb4k6wkISK1+Mjfdtbb5W0CnXQSNQwFJ2h4sw70UgxkX7pSx9EICVl + AlKIZQZSiCj6gx/cAyP88cNfuvfeu5/4xMdABMNBrkL7+IJcxmvPGFY7jXZ+at/rH5U8ccwLkJbSwZr9 + C0TqjyiVKRQvwzVWW2QtTMCS7id5Ohiv13g111JAZ4R5LMxcZBogzBKS0udc6Uw1uFvsZotLeB7np6FM + cLhdW2K8MNYaTtMkIiiG7vPoQqaLFrmglnDEvEdVQ+0voVnMHW0MlCyaSigzdGb6RhBTU0waAvTnBpDp + Qlb+vOZTU3bLc9FSFCx4RBmUd+3aeuThu9z2UkgTpMqatJjIp81lBdJirU7PpUuLsxh5MkYIDlECDRMp + lhaDQIEc97YYOFn+Q/g3RPtM8xSQE5QKUUAjeawMdFA3sMXoI5+1sjKnG4SXdH3yERHn7OMMBScns2ii + i66J+yYcpHtwjOAaEBZSLHx9mjjhcGhPrBOTOZVk0V4flET35IpsvQGkunwL/SiKLXyLCrnVHdXSo7F1 + CfhkjFCWfFW/vHEml+cj7VBqSsYX6s64fYzUCGaTaQ3CGmpoUUOdZSYhiQh7oe5abR5FYV5r97UNAtzR + ZE5SkjRYSJX/GQuU4SLoR2FinQxBXrUjjFchfGOZXpIv0S5hQrBQgoU9DR0D9JQodRIUVCLYNVvq1dSI + njmWpqHFjolN0l/X2yrxEiVmWNKEwtQpA/gJjqprFATlyHLhwH3CQ04BJTdJHVuP7GmfwBXB6eM38Q8k + HEOGEpec9D3YuPEZzwhAePXVr7z22isVC6+WYOHrrr/1ltfcrlioCRU3k1PxZpY33yIZ9295PRwRsVTZ + 4Vs+8uG3U30NLCSzUBykSgqJFAopfOBzcMEf/vCeHz/8xR/+4J5bbrlyfn6ag+GQGE3X/0XWecLME7v2 + bnmV5i1MU5mcFXbrjFDdmykltYIOFfQQjFgpQZT5Xeh1WTdlMBMrXLWwJ+yEJsYnnnC0Zstk1SJM68gb + RMOfwVad9ZooJudiuQao8LmPjY7ogeWqjEo7GFty6RN0L0vNb6GORop/hThKmoaVhQbVpF4w6eVrqmXJ + XolrJgd1Og6qKbRmyAM+mekDhMzco+fCOs6HHO2IghntoEf8MUcfctqpxxoQ2qidYGEoGGa9I1K6E1VQ + rz0WhUHtiBStLoE5gRywMWTJQAdVYDQPi2uPCoSZOGkIZ8CWIJxhoTA8X2mICNCyf/5V/jdEL9+NK5wJ + 2jLIlrpeKs7wxADYWKOJn0E7nZbPUriNhDIyy0AiVSYNuBiTNMT7Gs+MBQ7T3Awzy6TmWy/KGk6yoaCa + ZQz/EAO0tULSswkItB5YWaK9RX/13/xloEwx69ykKnpImUh6eFlAOoSlTYdY47L0kmzWXFpashDkzufa + R3dYyCn00GCaUF/MKazfkoIsQ0roW/Go7N6sxb8k5KFCUcyhQlFjuJDch6QHhfBFVXBTmTQZbQwscxpV + +AN1FJso0UFJn1DXDKQQaRQXaDfSqPQRLPXPlfpDagTJEoMLO1son+3JEuAfTQf7Y4m1aBzNiosCmZI7 + oZwSIHxEHnwhAo0pqq29W7Yn3kNZPWoz4NPhNMloXq6Q7WlBuIX5hac//ekveclFr3jFpVdd9Yqrr3nl + q199JfbRG2+45nU3XXvr666//dbXvuH2G954x01g4RvfeDNWUl/edKfkGqKXvvvdknH/oQ+JfYbkQkyk + CKTU4BZSiGXm/s9BCpFGAcI/+MmX7733fWeecbJMlpS6PSKnZf07EZxTVXOov396YqJuhJK9wagkqV+B + 0KHRRQZbibFLBf3G6UkM8WN8oaippjOv7BI0CdRmavFJw/Dw0DFHHTY6OhxXeoZszjVq/E8fWcelxD6a + g0NuCH5uK/ldDE6EmzNJe4qtB+P01stnhPrabhBNjAMhauIQiKBKa1X1atcAIeOR1lrzsSkpq52rqR1S + quNIZ+MgU/vICMPwx7C7hXKTizNuvpcuu3VSBkOLCTXLSPtcsNB8H14JzHMEPQsw1jkLhVRiubIQG0uJ + UcxbMIFREyHy+XxRikTnNKaV0zP5E+xcXJwCuhzJTOS0Ja4Mz+fmxjduRMUdj5JpiBpOqSjKxrOzYwfu + 2Lx10wa32ETAEyAk/2/D0oy4aSLvdKU0S9VPYNsdN5YEIhCoPhp5biZYawVV055JyHR+tuGhWZNMAUJz + 5+qf3ssp9EyO9lGrOxOUcJcEDBet3FpiIvUWvhkipkBozwtA6OW5CxhZm3RvxSLSzMKazKLaGhT5lNwQ + I5TiG5s2bjho13ZM1GugoN/XeclHoklw310HbKPuinC5rP4iYxEG+06rxuzF1XxIiQ6+IjXUVELqy9B3 + sLfU1m+NJjRZvp8evMILpaeEJUWEmqI0FyRrogFcDMuccEFZI4tQQ+OF1CANqqnKpIKFioL7249w/SN9 + vS05oVNT4/PzM2n6IBty0rZs2vzMZzzjxS9+0aWXXnLFFS8nUggvVCy8Cl4IFt72utfc8frXvuG2G954 + +40Ch29QRLR/33gTWRb8CzskxeK9730TYuntt1/7qle99HU3X/WBD9z51a9+WOyj3/vMgw987gc/+MKP + fnTvT37ypYd/dO/NN7+S7jn79532990GVr6Xgv9WO4flaGVaUEZPHU0rucFkUoIRgNRg1yIcL21GllyO + qZThan4q9AcbtCulqxlkrAFhXcsoYGS3WUIHXRTN9aA3ybSQUJgmSJk66mlVdUup2dxZ+n1rzdJCWRl3 + K5hI5ZN0nO4MZ1b+WEe0UFw74wFpblkODjsYmnfs2Dg7NymkMIQGk6z5XmUe/SEi5TndDLveJikwmNgw + QRMEQ9UYTx6w5LmoiGqLhpCfHoHBEvjy4Gf0y2OExu08mJdG9czkaQyP6jbT0/JcyJ86Pw0FbTFqCM6J + 9BrXKLcbmZ+b2LRxYWlxWjaYGdtOwvv8pAcCg9FG98Z7cyAafDcx3KiBw8hfA2B73oWfk9SPanqp112T + nIrB0I7D6/I4KRQiONxH2QEyKxQX6aaUVSUVvmicPsujyAqw+SWRdm6yiHIIJ2sSjruOIy8sksJCSdJY + zCEApNd/qAeEuVZNXlwpgcOQXCQ0MVdrpqC7CBASWZwYH1WxNKtB6qCY3tGKglY6Q6e/lQrhCLqNSV5g + UoI4xlxCMZZELHUHaZh2u6E9pYYyDCkpjFVjtJoorhlaD4KF3aMlzC8RCEN97f7Z0tBcw+Bsw8BcCQgM + y4I+WQjUsFB6Oy00s78j9/69n9k6jLAgGDJKz8/OnnPOOS984Qtf9rKLIYUZFl5LvPCq177m6ptuePXr + b74OLHzjrTfeeftNd75BFoAQCJTljhtJOmSBJsIOr7760tNOO+Hwww8+6aSjzz//yXfccd2997wf14xE + Ch/6vADhj7/0059+9Yv3vu/UU48zevqf8Fi3+prrMmEHlgfLjBPyDBRhqqj4Zz6aRBeNGxbkCL9qg54f + ZX2PCNoK7gcglpsqi5ZnRDDLHTSGmCIityJhfMozcpemU846ZpmmRsvtMwu4Sj2xE3eWO+ik0MuqBTd5 + NnAkNTty2VqxvlpaENkzKKAF2CgY44QdxjoysYJaGASzEKB6YcxnoYzBHYbBfJhUU9MolG7pORIpI5HA + Vcx+A5ampmi7F/oKuRkkTTCn1ZGM+EmNGGVFWV4gRDDN4TPvqCOKpzQ4/cpxvskRimIvLUyTpZAinCEf + JbZZHA5nZsQLE/6M8ULsrLsO2EqwkJcWFiZBOxM/LZvCPtQw1YXW9AAS+4xvHzTVNDc/pvmHDJA0cBjz + CHE/ibbMn150NHC+gZDNCUzyNXlvroJPDBwmddJDBmHIso9p9f8vd+8BH9d13fkPwAoSBAtIdAwGvVeC + YO+kRJHqvcuyJKsXq1jNsiV3S+69x457HDt2nGLHLXaKkzjFSVwTpztls+mb3WSzm83/e86597z73gzY + JDv5/OlnaDAYDAaD9+7vnnN+xUWHXg7GYApLtPeiMOjrHecWuZEz6TZ2jCFlgUFjU/BoQOO2MnYDpV9m + OqEoqGH0hSPbawYrGS7qwsCiMClMeHDBU8bWAQJWBit9dPZsIuit0bRHWrXCOE0964smO3VbtUxWvzp4 + p1ERio+MMkhJ3BUtBGWfHDRI65p7Sy2VutZKXUtv/ab+pa2D9ZsGBAI39tWBggKEVh3CkcmlEiqI6j3/ + Nf8xbDl69Oitt94KX+ahB+9/+OEHHn30Qa0LH4E7A48UTYW0SZ96yWu1NHzT6175ljc8yeFwiDcpQAit + 5qUvff4ll5w7Pz+zZcvs9m3zu3ZtvejCYy976UOf+tSP0CC1opDu6De+8fnf/I2fedET97W1t/wXfE+q + y8SkNSpd5byJe1r+hSJTz7jsfm+HWoGYQKB1+a0iDLWg3QO+YiLKFZWvCHPm9NXCCWOcGtvbL61q+YSN + 7ll6jpy5b9vWWa5zqwt98h+tFIOtolj0rsMBfnX1XNC9Y5KOaNIajf2opE8l+3TAz8DMpjuBMiOlYTYs + dMAzVj3LK7G6LLWpEYlzRBMftZgyH0ZQtgonmUrBIEbqv97erv6+cgqE3LayT7qdEu+XJQKmZmmp5NzY + oToaDNVhxKFM/Gecl1ifBcILgATOzU6Obp+fmRof6q10KOwFRkzZhoKKfIKIoCAVYaWDe7gdu6mAZTtF + IcViX18n9Rb9zxTnTIDhxWVKt7EvOV767NCg0ceEtiewQaNzUG0rEMrByCY1DlFUYWZRjg57sGYYDTLc + TWe0tmUppIVEC3W3TQ8zYB8NJk4LWYM0DgtzI8OIgjkD7tSV1KeD3jg1IHT8QyZbPR3PHAfzadX5GWHR + ccavxBhnb5qKzGjNr1m56iO508pBO7iqNetb/MVYhxhvcYWBvjZvKXyM7Sj7UjqsqUZEZf1h0YzXWnAT + FX9tGRY2deAXI2mCAoRSApY2VUqtlVJbL0d968Cy9uE6gHBjX6mlr66lv4QNNwefxmZpjGeK/NKnA4QS + l6Hr7w8CNigHZmdn4cvcdded99//XBqkDz8sdeFjjz30whc+8sQTzzf6jMkqntKpIXD4ZuDw9U++9Y1P + hQLxTU+ChXfffeuunds2z00vLMxu27p5+/b5nTu3nHPOGThuk1YPgxR/Ge2Ofu5b3/zCJz7xjsOHdj9N + gcTxTcxP5u2iBjTeSYJ2mdda2j7NaScSfUU1Ehbuyc0Ew3Qwk0/E3Vyaw+mDwJyjhLVDvQpMZumZj4wb + MqXloJPWTOdkXsCMjPfv2zE1NeKiYNnMUhQGc7Usg4bVpL2tBaJKsi/OeXMsRpDxfImqgU3ICjC+TCF9 + Ph0I0f3jWLe+kfVUvSslYqmwdCaiNEgZbjQabL1UOJELlLC+KJyOuKC7cWimEAAFuzpaerra+egMEdcI + Ojw4SEjlZxVYVL4bxjjnxRqe8QhoBzIN9HdPjQ1PT46AZAZyVghyo7envU+Rj8Nu9/V29Fb4VHExPAyG + Tnult4OPPZVQ9pnKorvbNRVeSrYavmY0HN7eZCrpuBgpMwEC0UjEAWeQRaaCCpubaiiHgJxyZ5K2p8oK + +fPRABjs7SHzIY1qSu25IxxmVb7RZ+zvW6CSut7GxTbWY49nVMHGL6sXMxRMOhZeCOaEE+jorRw0Jxr5 + lBGAlIxOJRVEDEVhCGZJ2yqpxN5uG9Tx6yAo6uxsc74Mu166OLrxtR5P0UomsAPCyCQojJlarGsUkVIe + AnMdUVuLcr3Q2guWtr7woFm+om5lo0bSr6tbjY9aq/vFKGWmt24jFWFvqb2v1NZfaumv42NrX12r3mjr + K7X3lzr6Sq39AQuta2oFYpgdnm5FyOsjaLBx+SrLba/+xy+JbAtrrpNZ92s+hsiySy655I477rjnnrvu + v/9esBDf0UcfDW1SnLjBQisNAxxKdQgcvuItr3vybW946m1vfOqtb37Vq1/1kmuuuYxacH7zzBaAcNvm + HTu20CPdtWuBkPrnPvemD3/4zdSF6Ci+/ts/961vfvFrX/upBx+8lazU037Z0rckjlj/yCfzJDUfJB1O + NXlPniF7vnAakVAC7MSfkm8syIP1nsxcJj35YhWYTQTzysJ8izQXQFiAxtAFLfRCvS+Kwgk9jG0wfTpo + cJgPnQgbVenrqjTKM3gzT/1sn2tZE1LkxYt/UVtR46knHAQt/iJ5zxYp36EnEBimg7aipdJp1j4b3WXq + wKhFy3fSsgGhK9WclAgKap0XOnKanBC4o1b/Vbo6B8s9nW2io7c0eSv4BsrliYGhSjf69I1WGkb8y8R5 + mclZlPqNjfVv2TJhUfKmc0gLMsNFGw1SycFe6evr2rowuXkWGkx7f29HH7UdB7DX0zZQaR/q6xzs7Rjs + bR/q7Rzu7xrul08H5B75aA+W7+rt5NulUrSWaSwrpb8q4CqHt1jlRmCZZr1TI69GGk50cQskUtd7hDQM + o8+4jMRqaPtLCRDKIW8yd4o3aXeb3S9oSh86MpWwJI08UhkQBrpvuGEqiyC3iCiYhRcmDgxaEUZzmYiF + Pi/MHItsgpjQSkMWZsqgqdEU1fRpgNBOfp4EUSy7sQKDNOprHQvTSIqQ0+uaQi5JMhFnZ8ZZtO3i5Usd + 7a1trZsSIHTJRFYOyq28cNA7qKEcDPqJdKkx6kxOXKifJg0rX87qSxbJVI+J/8o1BC3JmBC+zNpud9MW + IGzuq6MLugkUBAtBPj0Avy6Ofjm69R7BQu2UNvdry9QQ8Wm0Ri1rkC3CYqs9O4LRkcGTTb6thRhr1qw5 + cODALbfcQlF4771333ffc5kXPvTQ/ToyfPAFjz1Em/QJbZNSGor7zCtMaPhiEVe89hVUh29746te9YrH + r736UjqiCwtzW2M5uHv3tj17OLYePrznrrtu+MiH38KwkKLwd3/389/61hd+7KNv3blz/iRhrCbUGfqc + EAVrPmaxb7TnM081yiAqKAbzHMnZk2GeDRGzc6lKTR/LwUJTNPQrIte5SJwxAIvksUwvqB2SUC9GCAz8 + F1GvN2TRE4UkwqwtoztTlRJmXqNOAddyMFzPrBFsVBktV5NloulUqAshChHP64Itn8qggqenygLE2sEK + qOvUam6zkHlTVLMmwlqWSqTbWjb2dHVITI8k7tpcMKv2ErGg2ZGEldSAMD2kFulsgaPBAi0c0aigsNpF + gLCzow/Kb+tGkYe3yWKtK3tzuaMNdYJkxKs5pwIbgU05X2x3ZglaiK7W2dnRPbu3UN5lVVekvQjYKDKh + fIACOjjQPTLUMzHWd9Vlx/bsmAH2Rvo7R/s4OsY4ejvG+zqmBjrj0TU91D092D010MUxPVSeHOzmkSN9 + nSMAZF/nQF8H8EnFVUnGitZclWIxNlSt0WpFISybvbsXJsYH0pfqjFMrCgO7x8QYaliTsGqDhoT9gUwK + Y50dLWaaRoZ7zz66f37zuALh+o1qz2ZJkHllYSqxz4a7sWuasmYSmY1GkVQTR6s9ifKVou3GMllF6O1b + cJiLf6IZaZDJxsQJuSI2SORTriJMCGUFk3oHP1PupvrdyGUz3nm42KOnjE9AfO+b8ekUDFO+qO+kpSSw + 0tD6qD6RKcBeTRBUygwxFKAgobxg88oljAyZFEprtLJkQ+/S5t56UNCHhToUFCykHLQqEAgsD5Z6++t6 + gcOBEi3T1pG6TUOGhREINb/w6f/j1co7ujRXGvJbm4jt+M9vxVPNh3FnX1/fpZdeevvtt4OF2K3dd989 + D9x/74MPPmAjQ2fQ0CmFUAqJxuBQmqVPidwQicXrX/Oyh59317nnnEkVuGMHTVFqwa2g4L592/fv37Fv + 73boM/ffdzPzQoaFX//6Z7/97S/+2q99+rbbrsVp9+m/M6f0DAaBhl7+jemdxnyhVhLdZ/0SRumgA+Wn + AWREytotBt9/xbowbL6S87IaFLMT105lrHi72ttAYqWHGfJVXx7BkDDVJLleoiCcSN2e4mUZDGWKo8Hl + ZHPLlpZijo4orwRSQGyKptFL8uao6EpM1AhI9c21LzShf6VACJgBkOoFul6BMAuWK4x8zEobbOpsFzaN + DQWNHZq6ZsfiL1QPhO5GmkwmULMBlSnbotYtlIMGhD4UND2AOa14USjp8DoeAx6ie1nmCxOhQqzOIvkz + NB55fEr4VM8XwaT+vq6hwfLUxMBgf1d/pX2gtx0kmx7pmQTbBjrnhrrnhro2D3bND3ZuGezaMdqze6Jv + +0h5+3A3x46R8o7R8rbhbo6FoW4ewCN5/KwC5MRA12hvx1Bv+6AWlIKI2lyVsaIeInOM1SG3Ab99exZu + vfHq+blxebVBqq/iCrc2De6mwe/UnNsiEGqkVJQVyh6iYyOixtAgVWUhn05NyuxTELRN3UqjgtOUhb5f + MX1hqiyUe5REyh9dKdlrVVoaBKbqqZZOB8PtzHdGpYfxvPJgppB5WeCLVheF5hRfRR+Vs72wKaSnopnA + wjgzNin7UeT81JHKmslYo4VR/UloJ8Il7wNCVv6OttaB3opqJJxeXuSZs3zoizESX8qUSVVbhbVLiaOS + vrScMDlZbQhxJ81h1Zr6tS1LmnvWtPWv7xxc0dIPFjpxxggyMhpsUyzsHCr1jJb6hkt9g6WesbrOyVLH + RKltrNQyUto0GODQeDRP/x80v4mJkXJ37YRbfjne/8WmbpIcu2zFYmF+Nim85pprwMK7wcJ77oI7E9uk + wqB5/qMPMjWERKODQ/QVgUcDHHIwOySz4rWveekjDz/36qsvOXLkwN492wHCvQKEO4inP3hw14H9O887 + 78zXvOaFX/nKxxHXf/tbX/z93/vyBz7w+snJkaf/zhznGeRsiONVhzF7fAqFDm81MDJ5cNICdce1XGu0 + ejSd3sMJ2tS0BihKyF0ZTca5M9R2lGKJaD4wRb0vKs6Eeb5oSjyr5qRZgzQeyhHVjJciRyZLX5KrWpaD + qKAyLHQeQSaij9vnQE+PDVL16bCtd+b64SYguQyKUBEKG95VYmayZc6iBoeRPuMrpqykPMwVacliGpiK + CVNjLaMp132HFCEFQnNWM3Oy6JYScnTjCNCcX5QLGn3LgkGMOLkI9bQHYbtL4GPz00Z9gog61RseKs/P + jY4OlYd6qeSk7Jvs75jp75jr79gy2AnU7Rrt2TVS5tgx1HXG3PDD1198wzn7d49yTzcf94z17B2rcMPu + sUdy7Bzt2T5aXhjunh/smunvnOzr5JmHtX062NupjVM5wGAFRUaJoVMKSs3NjplIP+OURjk/mn1THNrg + 0AQh2bjUvLm1FrSD5x8d7QcdfYdhQnugEUPXcle7Kg6DGakrO4PXjBbx8e9of9Zgm8dteoZ8DAazUURY + 8B5K3WsL1rX5U06w0ICwqK9XHX2BMpMSZxLuaLYd5CKVULO1a4LQiCi0RumCcKXEAWEsBKOU0BGxqhAM + WUtWLMYrXfbFWFnRO6U9M9jfOzk2il7QeqT+0atCu2HPYFtqX3yONyYkj1cs1gigWLNkOeybhlXsBBoa + lq1dvrp9/fqeSlNHX2P74NKN/UKZMUGhDAul+SkEGaaDnYOl8lhdz2SpZ6LEx/J0Xdd0qWOq1DlT6tpc + 6phO4PCZAEJqZ1qgvNc1133ePfpQiwEhi/7xGTfQR3ft2nXDDTfceecdd915J3kUWhpKm/TByCalOszg + UOSGz3/xS6xAfFzgUKrDl7z0pY898MCdz7ru8mPHDh84sItakIoQIDx4YOcllxx797tf9eUvf4JgJoDw + T//kq7/+tU8/67qL2Gj5b2ScqJOBRn4jBCH47NiEj1+8pqGMbKkWGa+mPyX1XfNKMY+U4e64m8pZj9rm + K+2RxopQ/iuNB2YDa9dVmJm0tehpmrG8vI+RP7mlgrf9oBFEHQV9k+jdUR8NVkkm8rYySUaMQ2AeC1M1 + fRARhl1w4AtU2arlgyZsKQHS2MizbQcLQxc0cwCJcUuJxbYXhXinIXtnHbSVzlHQpBRSFCZ1IQ1PXGPm + 5sZkDa3qiPraKl/Vxl3gNGaJsiFLAfwz8V/mnJL3jjG3l2CZplWj6AW1YRi/FHgxQfCg7dBYhElxRv03 + PtQzNzYw0d812dcxO9C5MNi1dahrx3D3TiCQA7Qb69k92kPlx/1nbZ2444pzLzm0/dCWse1jla0jPdvG + KttHK9u4MUJdWN4+0r1zpMy37BmvgJGCiBSOQ10LWlPOaE9VysT+LgaNo0M92+amxkf6tVMq1aEJNgpq + RZdeZAwaJQG5aartDKC94LXdR+caX9YIhFZS57y5kzliIJTGxEe+fXJ0mErRSnz9A+W80QNBJhgGBaaM + 74dquvHxVXk22g2J1j6hzyiPxkzX4ty6ptdMFMKaR1KRFGaeEs4aAztFOxudSL0uTGkyQa2bH9U7TUa/ + KmTvvNd2RgjgYof/0dPdtXHDhrbmjew0Ik00AGFKLI+ImGMk2FKTNKj8drgv006saKpf0bRsZdNKSCmN + y5dsqF9bblrb3Vy/bqNPCtVTNAAhk0KAUMrBbqrA0YCCAoeTpe7JEljYPV8qby2VF0pdM6XO8VLrkAwO + fwj/TjwuO+6LgFGwd+9eGKS33XYr3BkQEaH9c+PUEDhkcAinlNmhIuLDUiA+/qgK8AO5FA0+cEioIbSa + Rx6599Zbn3355Rece+6Zhw/vBRTvu/fmL3zhI7+sqRTf+N3P/ckf//L3v/8r73rnKyqVbntdnEmVSpkd + 0PHfK049Ejzgbwz0VUaHBw0IEdl0d9V2iil0QfP4V9QOpp3PmF9fMJcp8mJqNkkTqJOvox0fHxzuaG2l + tZ1+KTl3szPb9nrWFI039NrQKhBLHjqWVJbOlHF2jFxXVbZqzpexijBJTcscMVwyUVNE70ORAqHApVdJ + 7qCYyLAYoRR0IDSSQhgHJqFLin/uuC1MGdYy4Mr4EdYj9YgJDavzcaA00yYnhp5717N3bJ/jttUTVCRY + fUqDjlqEEiTJ2jWOjNZ/snxnbqIJQcY9YhJqjAb+xThAL48EOGOYg8OGmbw4OUVUDZRiFWlXMs/bPNK7 + e3xo23Bl21CXgB8wZug13L2Vbudw95aR8vxImQbpDN3O4fLUUHnzRP+uzWOYB0wOlemgzgKEM8PzE33M + C2eGy3PDPVtGeraO9myjKKSDqs9mB88JWC7os02BiyO92zCdGemzAtEGh0mnVAaHxpepklhoRRjLQSHT + ioq/e6CvGyA0c5nWVhFOuCu3uRCI2kQPV9yn8kHulxqxhZ6noGD4M6nKxW1IXT6fqimkYeDGQ2GrFLoF + 7JAgNvV0dtBQPY7vDBH2MarQFfdG8gr3H58+k5nrZlH1nlOWKXEdCBPJRCaWSFEw1oURCt0lI0bK2D6Y + b2ZtFKbRug18ezoFrKoLM/l8XGcMB0ssm4SEUzzwaToSsuBCcRzFYkbs1igNV9evXlFH6sGGpXVNK+sa + mkqrNpXWMC8UTWGU1YuzmtSFdEc7GBAOlCrDioVTAoRycGOu1LNFj1nuqeseX9o1/kPAwafxI6gXsV9d + shTizPT0NCRSuDN33CEjQ4577rlbO6WhOnREtPGh14hmSaP8UtVaPPViDEtf+pLnP/rofffcfcudd9z0 + 6icf/8TH3/OlL/04QMiY8Hvf+4W//Zvf+rVf/eThQ7vspXMCQanipDj+bwIG4EzGmYGpF7uxCKLYPa9O + /8Yn/3YkJaBhXoC26jZp0lOVBxZKwKQLKpTWlCBKG5I6h91cbNwX+hnJPNzYYRkQZuWgXQC0LaBHYbPk + QFgtFgz7UGVs867SReAyKEwH80Vhjv+dzEKqE0qDpt7mKP5RVxNphybDwrABp55TloGl74bE+SRlIrsz + 3ex7BeBLYaCPCmtGSkNgb6APkbbE/eg6u47aBR4m6ywkl76ebsBYSo1YDoKODKuId0hqF2IIpRY05zBn + gUoyQ0YTlf6ntAoj59O16tHJOjNFM4ARFxitAmF7jlEC9nfODXZRye0erQB+1H+CVSMCVJuHyzODXWAV + 5BfQbnK4Z2yoe3Swe3ZyYHZycGyoZ3S4PDJUpqHKMTnet2vb9MzEAA8YG+we18dPDffAnZkZKjMsnNeK + EBQMxeJYz07GioqvYOf4ALzTroHeTpQYsHXgmmLwxg3jlBoEhhtJs9SNcmyAKlkZWiOmHqSGhcGCNTqx + CbNU3dRkQBt3JNzTslHs7qwQdOtXGxA6CkZJjPQA5K8f5RM5UMx5D8meqb11E+dCNYkm9SO1DZnBXkJj + DmznnBObVoR2MhOlwtP6LtBM1zyeSZT1kWKWV9O773YulSKhdgeOd2R3C0ObJSJtjdptmlrCLzWGSNgf + p4TSwmKSqbOsQWr/eHJY+rwbLFs8EyLagYFeNr7as1pet1SBUOMJJaFwZSN+bnV0HxuARpEVllZtFMe1 + dT0iK1R1vBiqMSmkO9rZV+rpq+sdruuZVsybqgtwOCVt0vKMgGJ5sq4y2TA8dfLL8mk+kvVbg2/ED/o0 + /onjT70gEPPC/v7+Q4cOXX311TfddJPBoWEhJBoGhzRLkVgIHNIyfQhCDQWiaC2EU/MYQ0SpEV9sxjQW + 6vSql0KoQXFPigWxFdhzf/YzH8Z37Ru/+/m//Iuv/dVf/tpjj93JQnnyr1mZUSeV0FSTUmqw5+Dn2Jbs + kuRmOlC0HinnlPKSHP6KlFFvh9LHqPR0J7PAnLgnad9nvX5DvrT7nzY9rC9qj+FagTjAkC8ZM1Amuocv + LeIsEVTRji0CAghRShgupmN8lIP6mKKJTIqFcViyaB59JBcsTzbXmVjCOmOFojAZ80SvLNvj53b6YUAY + 41tdZBaohrTCeHLoKpap6wbQ6P+6Otso7GYmR8dHBoJ2MESrp+XLesE/koZagoUmTwU26DhQRmK2+gff + aqBC9ekhCylat1hFaDZm4mQGKQbeivI/J/u75oeE3kILFAikk0nnc2FYSC6UfdR845A/B7pG5IBEWh4d + 7mGUOAT5ZbyfY2S4h2NYD+ids9MjszMjU5OD9hgePzYMUvYoTHaPDXRPCKZ2g4hA7HYmjmPSNZXG6Wh5 + 6zCgS3XYDTDz2gYQZgx0w9yB4FoAQtVXBGapc2eMOutqEG4bt9akFHY7c+QJ+opMU2HvP9Rckjn4qBn3 + oVmdjHiDGYJmEwYD7lQn414KiZFCKAez/VOORBN0FPBZXK6jzYkguk/k9pnsR07gaDFjZzUPAwjZtwU1 + YWY0E7KZXEefCOrz5mp5yqhFD3LR8fxcZbad5TZjLwaBdl3HSWHmoZFfDXLrhq0nunikEJh5d8TNdxjf + sLjBzPjS5z722MP3UEvIWgdb1CBQPuqNFU2l5U11y3DibvLYehKaSlFib75r4i+KlMIqwu5RaYGW5+p6 + QL6JEjmFZSsNw1HXO1o3MHjy6/xpPpL3bqC/ApVmMSPpk39e3lHGO+VyGQYNiAih9KabbqRfSrPUSDRg + 4QMP3GdwGAtEQcRHHnnw0UcFEWmcRlpNqBEZIoKIOLG9591v+OhH3vmzP/OhX/yFT/7BH/zi9//sVz/6 + 0TdNTg6f/Ms71UcWMC/9dh/g6clk+FcoBzPQJHeir7dsRuHV8kEDSL7E9m1qfGxh86zNLFPY8zNVrwRp + cfi/qhM9yCSqJoJhJ+gDwqq5YA4FI/IFl+28Wb57qrl83shvWSp9cJPR/a+5bGQ0mXzWBAyIltZmo6cb + HDKSickAq2hJOW0hTgSBPWmHOg8ildIbRTBxWQvOW06ZcQWFhN4pzyWI2JQCY+HyFC67t22Znhi1vqhw + ZPRjnGyF3l1cymVBHxzsQQvodtXusWLFn3U+3f8la4raUJAkJtQRlQ6EEBBBQTt6noDQntEeSjRKwK30 + KofLdDhnxvoo6UYGu4cHy0MD3YJJA93DQz0jIxWDPSBqaKjMp3IMV0ZHehe2TG3fOr1lfgIstMdwvz2A + b5TH82ygqRaLk/yUkZ55WqljlZ1QbBQReSVUh5uHukV6MdA1BHO1r1M6pTI1FORTdk+mOAzN0hgObM44 + VjgaccbftzZz5Y6xw/Il1dcbKck5Sm0tzSJTsfvjyNaqQxNLxIpQRn3eGk2F9i43jF/NzgrrpVs5mLVG + E4lhKl312KZkZBi6o9WDwwJ91MaEXgKagj6lXidFoY0hgpA3254qzvGNPJXfSecf3g0b1mTLm5EDtAq0 + fzmaTC3KTKoaNGjMPtrSxhoFw+vGZ1+5Y+s8sxRgUFmjEQKXrS5ZabgES87VpfrVpSWENDWJAemqjaU1 + 7RK9m9lwa/QERWHHkEwBIYt2TZUqY0sHx1aNbV7SG9ukgogTpd7hUv8PfkbIbyjStzVrvFtYAAy6w+3t + MqM6eSDhLVy5sqG1tXVkZGR+fp4J4rFjx84//7xLL73kmmuuvv76626++abbb7/1nntg1gjRVHQXUi8K + 0RRQFEQ0UHzBI1SKjBJf8YoXveH1r3zXO1//oQ++jVz7b37jC3/+fQFCiA8n/6qO/8jjCwurC0GADWYj + FwBnZ1IUprPD8E1U2+vWrgW8vIj02tL3XIZ8soHUPEUnbqW3+UHkM/MQQ8H0bK6GQ3fdtcsgnQsWbmct + lzgmdOmSXZzhitXrFoSTKlHpbYWrmvOHRqoYaOeTaGwJKGChLxyVCl6X3ZGPl6m1vAHlcTlusW3xqnJA + DRXkC/kSOaZoQhmlbcCq6sulLIvm4ByD0U0REQ0wRUdPTcOivFGX40gWzZLWw0ArFDcChMZ/seon80WL + xjFI4IEft/30iVq3oWBZVPCQNmcGED9U9o/3AYHAD0KILbRAKQGHgaiePVtn9mzfTKkH1A0N9SDMsGMY + wBvl6DU45AHcHhvt5c6xsd6JiYGJif6xsT7ulK+OcH84BBflebp5EoFDrRQnRiqTIz3MF+fh14wChz3C + rJFmaQ94PDvUNcEjwUJ1pbF5odwwYX5sllawcKt0JqZxQT0SMM/wDyZt9B8ngNfUF+5v7u+5+xVUTw2T + vmgTSgkkpKROGqE0RUcPctJ6MeQw26nC4/mugIUJWSbfJvVa0IgzmcTeTtFAe9bIzLxrbiBLeztUmiUR + /xwIq7IJQ1EYFYS5GSFUWFr6Piy0bXFK/E6LwgiNWS/UFo1aKGgrSqgLY4MqvTPgYrrQqdcoqYRE1SdF + 4bJGIBAglIMby3DlpjvavHRDuZE8QmzVzDvUikIEhWgHy8N1XWPUhUsHh0fPPnPu4gtXjNApHde6kGbp + ZKkyXur9wWoETgpEaNZt2TxDUEB1MzBWQsd7Ht5OldZx0nDysSTRMiLRom9kZHhqanJmZnrz5rn5edT0 + W/bs2XXgwL5Dhw4cOnTQPp5x+ODhwwePHDl87rnHLr74/Msuu/CKKy6+5ppLH3zwtieeuGf79tlQjp3U + 73FSDzpOFZj++rEilMaif0tyw3ukcp9r7W1fxf/1HJVv9H+xcRpKS6dsJV0LaW9yUZn6MzmbtZrU8WBh + A+iU0ZQ7Wo2IhdmDXIHFfAnzFM3qv+QyxjA4fAmhEtZNHJDigmpCEbGGdkKaSDJHAVPNuUNrwVziUrTz + WKVLTy53ScxF7RA4DMk7TTITSmTUsuTJp6Ddzp2bD+zfrl4zVj1IJaHIJ2MnnzkZFvpanFBjLB4hWKll + tI7IEXXWqCgIzSxNTav7ScDVwgi0MFPQVKKOCI97dCLYPtHXMTfQCepcvHvzpbvm9070A4GwWuiCjlHh + afNzdmp4Zmp4cmIAsTk4BxZyKLZV+HRcoY7bgoJjfePjAn7cyQ27rfgn0MidfMoNqxoVVuXgqUb5dp5t + pDKOSFFZNvPgnzRLhWUqiDjVv3tmiOHicF+HSyyC6FBQUOpC6/dK5KG65JhixGpB6xjnRqrx06H+ijFC + w/usRaGX4PH9z6VCGhDypSFM2Jj5ki+PYiLWiIncMJaMJq4I4YWrZVq8qRkxa0FTkVBmLOREXG29RZEM + C7MevnUyqvgyOVs1z2MJ10602E4RUa9NGaOkw4iMOLN8GUC4sXl9SvY+zgY3tknDZKS6KLSmaNJdSgvB + nK1MZC3YdCelOCh4Sl1ISC99UYIJ15SWNgKBpXr6pVSEa0rL1yxp3Dg4u3N237GV7SM6LBTijNjNEEbR + 2VdXVvpouX/Z8MjkeUfnLj5/1QRV4BAFojBlwMLumRLHf/o/3kiPbm9YvpIJNG0wt+tUI5OT0i2cqCDL + CcZ5WgopBlG2xPMCKFvZHcV52EmN+n4Ib500K5TJUoBJO118o+CfGmh1d6HQ6rF4SJ8dJlWg4GwsFn1f + ltu1eQnItdrR0QoepL1QM8+mj8+UwkYL9s/J1r6LtIsKfMXnxdPOEh19MXFJqsPMVlRme7gd0jNgq0sh + 2LhqlWQLxoowb0McrPrb2tAPtPrCgTGHSwlTknpi/xgsti1uwskyqaEM1PypiZGenk5vimovVICQhXU/ + JuEL05SAsVAI5PvUx5kuqPY/DQgzBmNtZmOYb+mIy4P3os10MAtVLqj5pSl9NEojpH6iqSgkTFAQaeB0 + P0L4zh3DXRReRxfGz1gY3yKEz24gMA7/BKWo/IArKry52VGQL/Q/FfmAOsq+8XFBOD7apzIvnOifnBwA + O+Wrin98Ve8f4IaVhqGO1Gap1pG9Bof86HGpDiszIz28nh2UhuOVMzYPH5obXoCbOtBFJ3h2fHB6fFC9 + TOXXCZSZGAhlpuFuIBBRMFjPmA2pqwzZMfSWOxm7hsBC1VdEgWawYUvYvIE1IxuajevImNy7Z+u2rTOg + Wl4VmvVOUzZpepIEjrGeKjVHhk7USvQ8hWGhTQez8MLQ/AiNULImpBC0YYHvJq3h7+Fl1nrBXwJuLTs/ + w8LUzsK3pzrRSFyC1UlqsSOhzoVa0Kcq2Q2tBb015R3RWBfmeqT2UH982McLnKIptHjCdSUoM9IjbRSL + GWLrV20ACFt7xzb2TtSvL9et7SqZH7cUhRXMuOvEWU2Prv7GyanOHTubJqcIvC1VBkpdI6Xu8VL3NNyZ + 3GKuLUcxS/0hLPE1fwTNAKYq8Cf8q/bWPOOvh9OCNiAfn/FnLjyh9SSrf4Wav1ThTn7t1pZNHLWKwrB1 + StqhupvCrXvpko4Olsh2bqRFYXIu+glmp2U4Fz1rwiDRXvZAf8/5555B7zoWmmoTKjOGZZCekeXVukiU + IKM0mThyb2DSYF5r+SMzVIszDNLRsupww/q1lZ4u4eDo6CLRS6TCwWxGCNRh/kJ7xxtKWWdJAhFDyoQL + J2op6DVuIrEYZQnrrXRtnp1Egq258yjDsr0/9Z/QQdtbIQdauSB6Ca0FrWjI5PNgoVUhMU0inQJGur9Q + Zpzr4SMuFvRKGTzotKXfuoLWAtW6jdpQCJbiFKMu2MKL6RV1PNI99H+iXhCdn3jEUG9NDCsESttTaS9a + +THwS8FPq7pwgHZTU4N8FPyb6IcXwzHJx6nBqekhPk4EOBzg/mnunBrUMjFrk8Y6Up5wVO7XdqvBIYXp + SM+clYbjvXsYH6okEYnFtqnh6dEgrkjSLUIIlJWD6dw0CijDnQaNNjV0jwL2NB7qq9kdEQWDH6ln84a/ + HX9fvndhYQpVTEFfn7oIuce67ZBCWpMG9na0t4yOIOrfUBAaprsujy1MR4bOmvFaMCGIyvnP6AS+JT9R + OqIrxYnCgJCHcW2yf9Vpn5pU8HHlcrKxzjqyn0A0oM64adW8bgNCv1+v30xEYe3QfIPUe0U5bZV3lbjB + 41XVKPYwushkfBkDvgQUM+wrrF1SF65kIkhI7xoBQmGQrjUgFNbMcvy4GRZuKilxhthexULimQQLJZ4C + KunGvvqOgWV9w0ugxvTBKSWVAm/u4VLX6JKB0Wzd5gePjQ7u2rnw9OGBRvHpoZestj8UGNY/T9Z1rIZD + 1nE1JZJd1un9LvacvJmcBKda1Dr0K295eboR0BcTMC8Wham/mpSAVtemZ1LciMl91G+kz2ax0Qlxxk9T + bhgusn8E7eJJ7LSxJQgD+RKiWk1gKe4Z04owYc1kSbxxT+qhMIJ/uZGhNkstCN4Y4W6o4W4yBfmgqSbc + XNQLwaQiDHaOBSD0XXlmsZ2PXoqSCRn84NCRV5WtoditdLH3QIgt/jLiCNrVRvVQBYTiaZk6qAVmf7QE + cwcZNwyTG20y8QL5JkYGx4cHdPUPCkKQjzoJEg3FnLmRUTNRPMG9NF4MGvbtw13oIpQUihBQJnBC5oz4 + F4gto4z6pLaz/qeUgLHnKRUeyDc1OD09ND0tWCgoODU4QwNT7hmamRmenRnmhoDi5AAoOKO3N8+N7twB + p23E0NSeR8tK76Nm1eHYCLNDHRzCo8GkRiX8tEn3zo1Mg9P9gutWEfphlJkYsiibgyxbMSQvhnIw3W1k + DFJ9z70cFynnpvVYnNP/9I1L3vogF+GUjg+tGe40mQCESRedaAu2UHxLCoQJd0aTC0NIRS7U3tQUcvYm + XDDjiNolQOdjy+bpjo4Wrh3aMwhwNm5Yb1cKF46IuNRfLXZZlqMBgwLKc7qdk7O1C4ho12z1de3UmNgX + VWONQJaxVafILWDB4cUMDfaBzfqIgIJp5eeTGkdE/2qyiNnIsKFuhegonEQKj9RCmoxEWiLRvrG1LuTX + wyDVzHoj0WBAIwwadeJGWbGR5MKBJa2DpY6Bpf1DGQSw7kxNjRJV/HSKJN4U+nJ9lTKkjKfzPM/U97LI + 8+4f/9kogtEpFupgShV+BQTiqABP+8XwV0SGT1ujGko5H0wWwj8td8Spz/5pfIX8z7/LJYTaCw2wF/ui + mUOpnzSp53auNaqP4AzftH4DL8vOtmSDFm7r+ZwJYC1vTKVCuU2fGn/LXqFQ/6VXUXKB1XaT8UIwp51Q + FNQ9rzdCQ/Mn0w67iZreYJWh86PCROuRZnKrWAhKqZfnyKTrjqkGhTLqcROmmkhttJrXryUxgjrVdv18 + ZDFl8sTq6daUNhTUZVTLwShNQ1DoWUvel0s18qmDjN8fo/g2ietKd5t1/EI7tDvyRYVdGQii/b3to/2d + +HyiVYARg/MZKAgnUyQKg10QOIW3opM/Gfhp55NmJngmhZ0ClYGW9DzjAc7Nzg5zGP6BfHNzI4Dc7NzI + 9oXpw7u37dg6PT0DKNrDRsBCwi7OOLRj28JU1kHVZ9OuqcEhs8ZYMtrgcLgHzs4sLFbsTMd7Ds0MHt48 + skAXd6CT6pZEC7fq5pd1FHTRpEdKmfWaDQ6jmiJz4vYaMSXOKLNXJCs21vUeqTNL9W8X7nf30RxNRhk0 + gUqakxI60yprjebpM1lUhROY01qQWYAw2BK9oO//2JMxm6DRAtQh29+5eUt3R4eMIWQTRhhFpKFFSpqz + YPSqtKLQWjKLlYZSC4pqXqkDSSFYoy5kdeAhtkpYVL0PCLmWwWDqV++LesvJO0+2EAUgzAWnpvt5lj5L + 611VCnBooLgmSCmCsrC5DhLpurJFLAWhvWfTqxnpsrahlrEtXXM7V5RHgzd30oSUte+0F337RjYpF5x/ + hEi59evXFZuEVY7Sp/GzeFeYGEGSPJmXymNaWjbyNzjOD+IJN/Ba19Z+TESmU36lgjGSHLK8rbWlJl0W + t+qmhsbOtnY0sSAleMmpI3NKeMOChCU2c/A8Cr9mWgIaaCb3RPCM02b+mOlJlO/Uu4IwnIreDvUbdipz + ZncTdbCplUsm4Y66m0y4PFKmmV8wxzEXjVvRRStCv4zVa9u1E5lemMs/ygQF81gRyJpgKUk5BTF6EIvU + BjbLzevWql6icERdl2rqU3F9CoSmmgACm+HErJP+5+hwn4h/+3uQz9uKCfm7r9JV3RSNlJmcrai5n7Rp + wefzLb9hDT0mf5vnxin4nAMiKKgMUu+OwoixJAdwArQY7m3HxgyBBD3GveMVHLGDMkFEERA45WAWKKQV + hSJlfhr+peBnJWBW9m3ePDo3xzHCwW075jeP7dmx+bwzD+7euRn88y9xwytF66DOTA/TRLXC0VqsOmsU + uk1olgqzRnT6E4KFPVuRVYhJm7RJtwx1T/R3Dil9RoT2ZjejuYYSDJn4zliZKCioHJlUO5G+w1oLyrA2 + +vi4aiLbqcTaPVNZpB408ieOrCjnkUaDoWA2a97crjKUpkJ+X5WSaKwVYbs0J4taOSjGoTBY1jb52Z42 + SI1oLYnZG9a2t7ZaFchTmRYwzZ1IdpzLzDSYBwgiFnqkWgumfBkAjCmS9oTEOHt4sJ/pg9ICgs+i5RSG + JqpVhxAYly2jQu3p7NTOk+zdqzfcjoJpdehLliw+qnQsNLcCm1SVFWFeuJwb8GhEWRhU9lYX6rDQTGdI + q5C6UD5K6FJz/+zRq66fOXSs3gMLT3mNP+430Caan5/q6+thb8DvgMSNXyY0CbWwOBkAOz5ubd0yt2Xz + 7AnrPCuY1LjkeMIMHmOztMV+qHEpq1+2Qd3xXirBGkrDSZ88vU0dce6xM7o6RaFhf2x3NOXVcDbi0QqU + +o9wVE7hLW+3HR6Sf0AmGZT7edFZHkrG3crv0eRbrNEhxmmyl22MhBh3GU3apLE1ml5ChWZLuveMt4OI + 0Dui4UbOYrsgH0yNM6QF5LDn7htywySDdijvnPUFIQSTv1REmPIUTESoA6ENbqWmCoqwkU99ZLif0IOz + jx7cvm1OlYJiosY90DiZ5HmaT8C/aF+SqQajrWgWKGECeT8iDZJyZ5AEwjKFYDMfsZCmKJQaSA1lAn9S + gRBbFnACV2sss/ELxSkNagwCic3wM3GBAfxUF2goKBNBI3+GpmWo1WILVLqggmShChyem0WkNMYR8G9+ + bAHGzZbxhS3jW7dO7tg+zW17ADc4BDWpC7VlSnVIBSlPpZ8mWGhwKJ1SKw2VZSpKfGmTjlSoBUVcQUWL + c/cQHjeS68SvaUAoh9oIBGPSkFOhFuTKkSlwR1Nj0hhbKMNa/gRepquUxVSGuY/i8kN8IXudaD1jex0V + yYR4QkmlYHu0YS17o96ezmyKnCMby+kUXPpySRRhB7ZYAAUVIfNn73YUJgLWI2EEGEAx8aCwHeSGdU2d + ba0gn80FAcuZsfHNE1MsL3aRavpZrij0cYaQ9USVIRUhCwIIOjFOvkJXbI0K7KWt0cgdraPhND40PDow + qItn2nnKdaF0RTKMjOVgdgM5gCwRRrFIDn0k9y5dXlIDNkaGICJ1YcRC4NAifDfVNXXCI/X03bp1qqxY + V1neMtg+urAGBYUk+mqc7zP7L67mgivsI8pd7AiCLkIdKU9BLFj9wgTYVq7EzxpPy+NAl0Egb9Qz8qtR + atDdNgam/wNKuBbYw9X8EfyaNFSPP+w0kz3KwVo7g9Dt5GSKQFhw4ctIpAnmpXETRZe19GH4xPd0dfMx + btM8SCy2Sa03qp41VhcqTAaetP4do+OoxzD5mNApZ9wTr67aegnr2MS+TfWA0La0NudwmkxsjS63YNLY + CA22au4gU5OG7qPBeEMSB9MkelCQjFMKO+g2yURnVeqy7W4yeMQwnjHujFtzuV4iLSC8w+Zrblxto3ZQ + pW9qFpOlrkfVvFjM8KW+3q7R4X7NozCaqAOhTApJxCUCcHpQzMzUMrR751jvns2jsyBN8IVRIbw2RcMg + MJaAPgIU0KLhqfgHknnlt1mQb2Lr1gk+AoF83LZtatvWyW3b5OD++KWJbXJ7UnBx85i1T6kj/XmkuRr7 + qzJTzKrDflcfmr6CupDpIE5v6P01y6K8ZZhQp078UYk2TPX1ftvLwWxLocmFoZmsZbTNBaVfqnajpux0 + faeLW+KX7Ksb2Nz0EL6FpaabxKoBaZWCQu5hHNjd2aZTwyClsBNG85vyifZSBYYIzFAL5t23nfks9GzK + SZHQSr6YsMbUREJm5/Dso79oJI5mPFKbDlJNckY7ENJnnRmbmBoa5RkpB2u1RmWhTvuoybAw3F+QTiX0 + 0eBCxbczpWC5DoPDbNqSzAg1mIgsLCQmeUpDfidvMCnL0BJf12yRr2O6tFSFhuFo1NIQFFxr1aGMDEVr + X9ZakIpQmqWKhT2ltQqQpBJKYMXTS5+wOmYxvDGy0fERq/b3LsK0ZAi0fdtmchKOj3C0GZnNPlOBgjbA + K/wWrPbr16y1Nmb1P6akuG6eBurzU4RWVSWWsB8R9YKOgu4jU6gA5VPny6QdUXucTBHWr6e1mOzUcrGZ + /Fl5jIrrpST1Gbg1QKJSQrqjXEerGd6rD6Ed+UhPM21ayhvIdZu0Q5eyhaXKlIFeAMJcGydp6YSyzymj + 2Y2VK6zmsyd3KQVYSOWHdSRb79AFZX1JcsCjl1WQDya5g2oos24NND+6rEZ8t8XO/UVzNlr6ALeS8WUx + 1Q4K8iWhu/KpFxwhISELVUf3bViYqOalxGkP91j2kPZFIwqqoq4VB1FqQaxB0aRbItLWoe7t04MHd22e + nhhwLuj01BAVmGsBkT0YBCr+ZeAHhknbE/DT8m7LljGwbdfOmR07prdvnxII3Da1Y4d8unPHzM7kfr7K + nRSIPB6wTGtEnko+1WdWgGTcOGy0Gtg3rr4Ig0MZXvaI+h6D7+Ge7cqdwaoU7g+xwGMD5bnJ4THpS+NB + 0xWBMMediW+gRTUJyXZibHB8bLC9w6aGEQWVwWv450wlE7dk0fZ0sPXTYmuUE0NnwAU/UosioQjbuEE8 + FuyE2bRhfRcOCrTL1lqASVDppPmX7jUK4AGQfBf3aMPD4nmPkzghrdHgtWS5g5JQmFGvM8+KuOnkuqO2 + o1kV+6VZRRgH/IuqJrwjyrUfDUhdOxH6pbpiCC9GJnpJHm+hNOSrGB0P9/ZjvmtQomQabVul/4Qjs6Ju + eUNpeUPdsuVYZIUvaieNxF5DweA7I4RSERdKUWj0mVXN5jtjbdLYIA1ObKK7t4Texf7x3gDXruerfhgb + FMDgZLKETrUy48/IHqFQhPEkUJ6g8/CXPv4TQnDBT4TW9qn+XB7PH0LsLxdBuPQJa+K/1YJAyGKhVDXL + XEM+gyi6++nuws8H/8bCPf69en8oCjm/NzY3K0knbKFi8yF0QK1iTtqhqZpHzkJo2eMTw80b1wNUinzZ + uZ6NB3Q8rmRP6ZtELLSgiZyhGltaZv52JxsLiYlpWLWGDqZwYm2kn3mKJp9KIcgqQFGeRNKH7ihPwpYW + pxxDQZYPaeCyCDSspAvKMM+k9JZxk4KfdETDmFAJMtHvKioIVUevhliMf4aHevv7uhMqYJo1kXMYcSDU + iAlxVgu90CxrSX1kYv9NPb1sCQ6CNp9pZXSYGLwn9EiZDsKNjCiojUFJey+3USchmSf5zzqi+HnO4nw9 + glCvV5qNUgIGOSBR9dBYTO3HrE5pn4KCPt4T/KPso+1J2ad4tmfP5isuO3b2sb27ds3u2gXyTQN+u3fP + 8Skf9+yZ27V7FpjcuWNaHzAr0Ch4Kd+7VerIUDVaN9X6qzJrpPSMdFNTIvKSpFVryn0qV6y9h8qYd+NB + YxEW5GOAhTtnxg5sm58aQ1/YiZW55TeZptDCp2x6Gtk0ZsfTQjHN37E1GrBZU7qFd940nVG4aQyatCI0 + MzaJjcwyQxIGab40dLl9a/MGtPt0Sq1hABBS9zBdtjaD7b2SSMLg6hCzJjiTpSGfF9FnU4Cw7ZPTXsS1 + NiM0IGT/11Pu4pldSlGQEho3W0eDJuHNdURlaJgfENrkr8Ag1Q3x0vVNa9lXgNHJ4hAbRXG5MDzU4LZs + 2pJOYegVgdoafVPPKoH1lSFirkBcuqxuxaq6lWQTcgB4DQJ+9ZRYNFWXhXgKxoQRC6VNqlRSBUIxYBMz + 0jVtdU1IDLUKpDq0YSE8UnXoFixcrCajrjoO85PXKnTI2PY8Dcg5zrdInaFOYKf6tHxLUoOeTmuUBX3j + +g0n/L34QXQ1CywYfU9WY97LmVN45XwJ/EZsUPilCoWmugfkBpYR9qwitH/hhtd88UuZ0SgnFj+Ly4Pn + S0fN4RzLjP4Kmp7QBeXMbhQkaLSZpTVIDQ7lwkjY0vJ6tTvKv5RsXeir+NXFhcfTwmrjojWaqF+o0v/M + eqGZQDh6x+SmgwXuKJ/S1Tx61v6FLdPeLI0KwkBAMCxM6z9fj/xOX6S4oVOfRuZD4FOSOCEB5bx+aBp8 + VCsZPWKjTKxE2zbhXel1YeagpshXaIo6fTSVUriVmi7ogQ/CbXGK6e3mo0wHFQglU7CnbaxXjGPMQZs4 + XJ0LAiQYm5WHzBomCOH7ZmZoeI4JKVTLQVDQIFDHezL5A7qs4ckh5d2O6f37t1x04RmHDm4D8/bu3cxH + vYGv4eZ9e+f56r5989ywe+wBwKGVj1SH9iRaSk4KLlJixnEjXVObI0qPdMrmlP1j9HITOzfqQmacc5Lf + ZEFO5R0T/fPjA9iwIZeERjQzPULT2N4oAqcg0Xicr2kuMzVhREFn5zo1twCE9mcKDW2NsLdtjXBHC3CY + b5A6EFL7KQpmvVAZDVZZb2MrU/DaNlNcm2qntC+N562RUJ8SZ7hNJUrRGV1m8m5N7mUY4z+lHFTTUWvV + 4FyxkY2v2IqoDlgRsaaOwtYBcXpas8Y6RulG2daluHtOa8RqS+5oJVOP+nmpbBO0DEhRUJekJYwDFQvJ + Y+Kg/xmgTrxmgiW3qewtp0JJpEacoRxkUrimpa4xSAw1s8mJM4grDAsTIOQlt/DXbmqKjbiEp1+FSKcD + MqcKa6f4eKtjiAEqoMspPg1FYW3ujDBHSMJQeGYVZ1QJ0ujtZRrCJ+NPwYNaag1a/Jdfev6hA3sW02gG + iIuvNe2CplhomMdHCp/hoX488zlXkbXjjJRrJuhjRF20ZjVYZl/yHqnetn+FIbZiXr3sAblGNDk4PcVz + J7f0JLJwstAUtUsrSZzIrqiIhaKqtDZp0il1BWGw1Y6bXN/thhs2F2EXnPZC7Tad8G3bZkdHByy21F0Z + nYnuLlZaAgY3UYnq3chKt95jmBBYIgGcGoMR0OFSikLiEg9AHJak82TjIpa/yLkIzTRzE/U6w/psoSOn + yvpYkWQ5CRA9IM64lZr1Pyn+BvvKY4PE2HYYTQZE7OtpG+ltJwJeouRHJO0PzGDABn6oUh6zGHgxFUpA + QT5tQpo0wlCQWhAUNIaLTv7AP2lvUtVxWM2nxd8M8AbmHVDY48bBgwsHD2614/ChbWce3nnGwe0HDiwc + 2L/AA/bu2SzfFZ9h585QJgocbgUO5WdZdShtUnqkKr1AgyhF6uTQ5qmx6fEhM6AR+zdSLwa74b7CgKXr + S3U4O0i0bydjUeg/uJuitTfTNVMZGqc0EVHI8LWgIHSmbipZCT1S64tK1zTawFalUqRtUjGV3UBc5Vr+ + ptFdyNoGIrDJU0NDsJdvvBwFk+ilnLOat0ZTyihjQlMuhjFhVhTKZZLuLFPWqDVavBfq2gm7DNmDqvpo + tfZsCKAQ1y3HwnSPm9JkbPsbUTAMTQoQmOykAxDGlSds0ROajNtdFRYz/dR8RxFOgHz4y4iUvlm8ZsDC + CIGGhfRFSzBIEReitacW1AMgFCxcQ2nYXpLSMM4LvTR0nOBdqnSXoRKdKnI8ncfzJh4Ht9haIAwVx7WT + MJfhMZbK/HReT675WSfA5jUcSypBWSbGcNwS9G2B2tcLMh3n59LAW9gyMzjQZ79I9a/j96SIaI/1xxuA + 2SOBm+5usl438isP9Pei/0hKxnAa2SlePYX2pqihY9ojtT4Gm1GEcFwHhnZV+7s6rqeRYVbkrrRnwvmD + IIQ/ViKfSIEwiWGiFgy5S5l8IumR0hENpPCAfMkIsECZSxQUwYC0hqdMxkEw4UTWDmXJmxgdhPaSip0p + Lvsq3aCj3ZlHQWNApEm8wVw0bY1iAUOBYoo0jk2bNH03GUcRjBC7cDEwT+sVWaATNYXE7Jm1pjBERCwP + CmogEffgGdaGj+hUf+dWmqIae4sbC5gBeAzDFDUgCR5pfQZ+zts0aSA1GWgkVeD2KQM/hn/AnvU8aYpK + 2UfBp+B36NDWw4e3HTq41W6cecb2M87YfuaZO+Tj4R1nHN7OcejQNqBx3/4tVh3a9yqaztJBTQaKNE6l + NDR+qckteEm8yC1z44f37NgyN2ENUvEp1fAKbFHRFx6YGjhjdnjHWC+0IAQVpGqEN4f3RBy6RU/pWntz + X5OKsJZAxWilKRCCnWwd+Gg7lVC+azko4YXa1o6lYdYdBfz402NYMzKMZnyTzQjdWcaanNJpUH1qOJIA + piyVMLbxcyJCrQ55jDFlfArAvJGFyL3mY9dE7ZZWrmANl8GAmrkYFgrsxalhoqOQ9aGKL1rPb9TXV2bk + 4OWg7W2r4dBQkI+y7AbjmFRqTNUos4+47S78N2OzGzT6P13KctIv3chzaCPUFPTiO6ruo+K4tspiC7Vr + ysrCpGR9PQZspFJYIbimVQ6BQznk9lrYpJFBY7ND/2eq7aeDIrwrcM+PDwnp8/Pbq6Pboj+UPxMaYkrm + p/OqTuN7TfYAxhDF5RUeZwOFVyFYkUdWukgW7U91Dsf5iY5kx39ViUDQgFAeTjlE4yT7e9k+aYnUqfEc + ypxFw6mT1IJeFOYrwnAOOiLyG3Fa87NMD5T2RcPWT1zOl1F74b1gl4ftAXl/+C6+FFgzeUK22CHqHjO5 + DrMAQrtWk81sMOBOGHFypekMNVBj0rIvNJGSQjDpi4ZGUxRp+WxGboj6qk0Wrwh40POiLaQECAQgzDRh + ygAM0XTaFDUCfcqUkQAmtigmzbZlNC6mrKcwYkaGxcTZYK/ge5KaR4uawiSD2IqqfZqJBS2WQZOV2sf7 + 2udx09ZkQdELDglmeFgSPUbTSPhE0ATvQuZU+DHBA4XgGYd3nHXWrt0GfnsEwEA+KQEPLIBtIN+hw9vO + OHPHkSM7jxzZAfjx4KNHd3McO7qb23r/zrP4eObOM8/YQY0o1eEBqRoPHNhy1ZVnP++Bm44c2QXE2hDR + OqVSF2ZtUrBQgHDn9tkLzz1jYcsEKC7BT5pxiBsccvu50cq+meFztk7vm+zfPNg5Tn4hysL4noT8Qp0O + ugVrZI06fTQ4kRb0mqg5W1o3YFPHSJhmeFAZBid0qwszJ7ZEZR/gUC1J10MhplUQIdD2TzHGxMJMZDoY + Qy6LY8LQI03tcP0cViAMlrkRDrOrIEVBmak3NFCaChtOhfZ23RlQ2SVmIor4sYCFiCUIIRedvlzHib+M + aYJrYiFPBa3OCKI2QzHE49HAt3XR4jLi2+7Ah/G+lK9OfPs6Ujw0sD5BR0KZ0EuEJAqRD2pOr0gmRClB + SCEEmcbSEnFxI+uMLs8SOqh8iapRBIVdaArFei0WiIKFTdzZE+eFldOAiUW/heJ6YX62o6215iNq8m6O + D718VWZSsGZ/iP/4oZwy4u1MpMXKlcffGvBnHhkYHB0cOpkYKSm2Vq3iN0rALNw84Q6EV6XiV/nHOZ2e + IrU3UNkGS0++SFr2BqlvzxT15RyXM40oTs5dbafauRvPYN/opcSZkEym1NAwWrBLRbr6yZiB95KiGW/7 + 2BENnr9yZSYKikiZsTymwKCxgQcXNYp4lJdpCQgpRnOlwhphQkAli+LN7XETWa/JVpkcSUFZM94XjQp6 + wUJTzdsgMA1iDVv+MB0MSrLgppZQJ7QcDIMlBooI7S3xjqV5eLAXeAMpCw261FnUVuroHJbWhQKEjMcG + +zrHcdNW+5idI92ozvGOoYsoekFLDZT4JPWImZDxm7iAqjoC6qbxOa0WFCHgjukLLyDd84gUc/vmaW+C + YWecsUMg7bDUfBwg3Nln7z33nH3Hju05+9iec87ee8458um55+7jfrvz7LO5fx+0GkCRMpFn4ABHb7zh + 4gcfuAm8DENEJdqAhdu3TRm/1KSHxp1R2f4oL5uOruVX2IEN29RIZct43y4OIgyHu2fVmBs/OQkvjJbc + nsUo4b2qKXSebT7NMfPjLu5IlDuTp8yECMMkxXBts5oHRcqonCGmnfe5oAEhEzvOBNtp1ZpPp2dj8HkI + WBiscS1EM0PBall94EvHbHouFjGjwdBNxPXMEVZubNrQsrYZq4mIgmHTaVioK4qxZpZwNQ0j0Sl3Kuzl + KG8JiaYGHBpGxn81ZoERHNOiMCPopXv0DRubx6en+JgrCqU3JYYyIZJJisImVQ2KdlD91UjrXY1ymx9A + Q4sqpm5pg3RKGRY2tgpHhhYoIgrAT1qjbSX0heszfaF89YSlycljEOyaDRvWWUKs/+NTVqfGFasK8nNp + TOuM7b/gv7Q/eaL3R6Qw1QRXngEzAQAgXwHn1BHHeeYCLvrroR5FGcLB2R9M2ORrVWpTKwRjOejVXlIL + ZmckKsneSpn9ojZCJewi7PvCeZ3ji3ozxKUUXAPj48NnHt7H0NTu5Bdn8G5Td2uqcHFiOQSDIGXNRMPD + nMVo1YQjeOozFyl3YiMsPsLWERLTDVUBei+US5+uJtClfNHMXzviX+iLRpv/QvSS0ESTXqiQZbq7GDiJ + JswYMRIZ3wowZq3RTFWdkCZSl23rpAFpYKG12mKDNKPsa+MumMs4NIo3ChzRTEohVY5mzUsUg7iJ9nXu + mRu57dKzLtu/ACoQKyipti6ZJ02XSeFor44GxQLUCKJUgUqKmVhQ8Z9ROgGte++5/oXPv/PKy48dkM7n + Nu45/9wD55+7/6wju44do+zbQ+V3wfkHOc47b//5HOcfuOACjoMXXHjofL/zvAN81cDy6FFKRjkoE3m2 + MFDUGhFwBRFdj+Fai6Dfp0Gq4RVuwMYUkCxD+XUgzgyJGff2EQkW3jbSPTPYhasqQGi5xDIgVG5ROCJ9 + 1NUmBN+LO0FMayoMDtPqPKOPZkGSuTjfoKlPndWC614gyCD844RkM8QpxJ/e0p5TymjkahWx0PPCCk3+ + mhDow/JIHBXhBMLByYGRgXKF5YIGaevaja3rNkqSvWTspCjog4mQ08tlOzjYSyB9oV8aPzVCXAaE1gry + nlCeMlOEw4Q4WqQmSD9JtMnSL6P4gC+rLD+rCINeUFxG1WJUpRHrgrmozALVUAZEXBrRBDZpFBfKsJCK + cH0PUYVLNvbjL6NVIO5rwWLGKkKxYbN//HKIxvjx6erMioabDquY1hyn0zXluxjAYrTTlNeecz89bjgm + J4OCvNm8kpPsPZ7ME/4QHmMWDCdUeqSvxN9hg6ukznOckzeT0SBEbPtL1bKVySrBPDsm3F8cCi6px2CO + w7leUgIuXaLqwBXJiR4qQpPS89Fn5lwkk+Mjx44eoh9gNSXW7Qf27VSeTs6uKUlBy12BJvsNvZoYz2uI + qDzSwCDVa14yewuqQQNF2zibX2iUTPgSIwxYAFL1FZmJWtyha3q49qzSSaFkDQoPQrbzHDRR0UrTN0vq + AAoC645qao+VgxZAqE1Ra416HrpTZuxGFqQeU9TNITN+zMpBU8VNjA2cfeTANGVRD6PBjomBrjO3jt9y + 4eELds/Nj5THNVmeLuIgA0JLk9C+KE1R58UYQVR7oRmfEy0gaHfPXdc++vAtl192lDkfheBZZ+2k5gPS + pAo8d5+B3wXnH7joosMXX3yGfbzkEjkuvfRMPl58MffIcaHg4gG+xQ6qRipF650Ch0wW5Ti0zQeH1iYF + C925xl1P3aSbKnbXrjnup0E6OlhmWLgwQpyv5BdSB1MWDyYVYRZKbO4z0XFGR61tsEyBTHYYmfWMDWX1 + TyCHhF7l+tWJlELGhLbL8UKQGxKwvFGiKNMkJpsrczrRSOfEYy9lgpykKFydmjnkXUYzOyQ1Qsq5BvrZ + XuCLWl1o7RNqQRCfFq9dPlw0yp1IW6PZ7jMdVdhj3AdD85jS+i/cNo6MKaYKQMhqgMgNyoKXgIaOsQXq + N3IDQq5rWy7ya6AvWRpJSAwT0UvCFw0+ahJGwZhwJbhIHsVKli1hoi9bUlq+pLRyZUkfLy3TletXtVRG + 5ndv7JuyKtACCwN31BmkrKe80PExMjlHbP31f/z1yN9h6enq6ujsaCt89YSlEu+99dnkN1TSR748Oh5N + Jn0kXNCLLzq7t9L9QwCwZ+pH8F5xSvGXtBlezbdO/841fiBoR2GdGtN4RWjEFodA26Ck/6qpMfGrstuS + /xcJMuIgE+/MNnGcUL7Riz4y2XmfHxXIQ300yJe4DrAUEDVmXlBoHZjUXBuoY7BPI4EbXMlmIhUgMISr + pcYZgTIatcMBEb01amuEs8/dPoanNWl8qo5I26F2fwEFZcAjM56QqiNGozIOzIUrmaFMai5qwfQ+HfQZ + YRJDr6PBTL4WOTJaFIqbl84FTQ9n6QrmI7Nz29wl5541OT7YW24lZZBAJct23zZWwZxzbFjwL0wHLVNe + fEQlOxAgpNiiC8r8jy6o+cIg+4uMmDlgiboN0KL/efSs3efQ8DxHMMzA78ILDl500SFADsC77LIjl19+ + 1uWXnXXFFUev5LjyGAe3r7j8LA6+BC4qHB4EETn49nPP3c8TWo1ocKiDQyWX7oVHMwsShx6pNUhnhy3I + yQ5e/4ED26675oKtC5NwRPkd4cRulvxCAUJK4emBTlJ8sRSwnKbUdCYwSFVZYQ1SifPt5Lbc6O7EQjcR + V4iUMMBh3KPkUpSpEc1LXTUSIYGE3Q8EGe4vAGEWw+Qj52xMmLFmUpO/1GjUtBOih+7phBeTBz9rk+b1 + 9TlzmSA0SrS5mVsF146Bbp5BGkaG1r9Jy8Ew71+UKVPEQmpQ+jaMGH2wkjZD4+2Agr5wGbIaWFoZYF/y + /0oeobqpSeUnjVAqQuBQZYUcK6DJsG6IUdey1UtLlFdr60urV8j9mtC0Ym1LW2W4sbVfdYTuL5MSRyuy + EPPzgHFWJG5b/BDvha/QvCDC5GDon1JRyIMBgILT5unBDG9updJtL++Z+qdv/Wm53ugrEEZJLQPS6pe3 + fu3awf4+NJfplxzYqh8PLElDAy183Dr46VLzGWrQqxJg5HcUf4DIpklOxHCeyfmq92ruUgBLe5jNve1j + futXCF3KzQy4aGmw8LEaBfV8CMN5Q0ReGmN2RhrcwKRx28IMvU1nzeiYMDVXU0+1JJLJNsViOhXGhDnr + URAxCf72QjDUfyns1bydusnYyFBpMtImDRNBNxFN8gpiX9TNmpUvo6I041xAKN0yP9nX110oCp0mE1KW + Qlsva/QhHh8erPRW4Mi0TWAoChCOkCwhenO085qspEO1GCtBzsOW+QmqQAXCETQMhw/vAPxMIKiUTtFC + iPJv9yzIRK0GUF126ZGbb7z04ovOAMMuvujQJRefceklZxr+XXHFWVdddfY1V59z9VVnX331Oddcc+61 + 15533XXnXXvNuddcc86115zDl8BFHizHpWcqKJ4RakRpmYZR4tGje/hZCDD279sCNsOgMaEhPFIFQtXa + q/WM8EgnBrixeW5sbLTPLOKI8yW/cMtIz87RHoI15gc7J4Q10847w6TQKEWp75o1SzsVDvvKnT3dBFl0 + zU2OjQ71w2myWSy4SKk9NFRJ6UupvwxmQ+WudgfCiIWZo0JWDtqwUGKYAt9YKTOpjqI4LMy7PdhIW/Zz + nL2kTG/bOjsy0u/UsOqK0GvByCzLYjtT9zVjkAKihDXp5KJoK1OLQYp11FLjuNWkyRTuZKGIw8JMduWL + SR4FbanJNF0pNcYRMVnJdEYINXQ5E8H1Io1gRriyEagTcaHoC1fVr2ioX7msbk1daX2pbn2p1ERdCMVU + ZfUCh2QZoqZol+ReC2mSjmgUFFbPCOkftbe21KJ+nE5r9JnCrWf8eXp7y0y2amr+TuZnoVvYujDHxueE + DxZj+PXMxk6cAOxMUXtOzgapp5MdSaz/5Ku2KSmUg+4s45spGhjMy8QhKDFrSPUShbPTsNAK2bxwIhHU + 59MH5dRXf1HbSHJZ8rYEY/tMLJjZWKR0NaexccUynNg8N8GSocNjdxktWin6jDDT1EeyjJeGRi6w6InG + RomeSBMnvBbUbXsmkEgNRYNkQh2TLXA8r5pgBTSiRKTR4zySd5BJP3UfZ8APPJubGwcOAcUa3dGEI5Pm + KlhxY25qo70ds8jn8RQlmYEw9+EywzMLVLJDbKxHewl82L9vgWLLODJ0RIMFGhr5fVvoeTILBP8uvPDw + 7bddBVyBgtRtAOGzrj3/kkuk4QmeSeV35bEIe+c+61nnP/vZF95559X33ffsW2657MYbL7rpxotvuOEi + 7nz2sy+4/voLrrv2vKuvBibPBiyvoli8/GisEQ+df94BuqbXXH3uZZeddeYRaDjbDmpdiE6DulBLVRFU + GI/UfEoNCG1YGEaGoizsGRsqEy9MzhQsIUQjKivsEgapHgqHGl6oYcWJvl5cCIBDKLvIMfsrJDiL0Tng + hyT/yJl7d+2cb2uXYApzIvWetmgEuUfGz9b9VqNt7Yqnh9mwGSIaU8YbpJmaUIwamsRpzaUUGjphVVoy + zBYU5AxHrnrdNRfNb55UOmigTGc3EgZ1QVZUBYGBhq2GkaLEzTqiwXc76noD2VvqBDqWUOKZcC6GgsYi + sF1y3DTLApIMC31L7ZtsFzHb2pPCYSwJa3e5ltXVA4SE1K9XFKQ0lHLQ4VDqPzQITctXbFq1fGND3Srp + jnoqRZDYr2JkuKa0ZkNpbUdQ1tuAsACEvACzyzrh+n5KD+D3Q1NRGECe0jM8sw8GMFisOaprXL4kcyjI + osediQJRNI1PBt4Kr7zWT0yVgtnDQS8Uij6gTb7R60m5r7oidHxMxoFSXkb8S3dhAQeTJr5wf6CB87Fw + QvswwM97vzxceFu4EcWCVgVmc0GdCLqOItxvQnuT/aZC4PSS9qZo6ixjJIKcDUeExsA7YKEJfNGoI1xD + sowkjxudz7UTBntRJhhv6D2WNpcsfKE5llaHLqW3PPT0CPcE8JMWHD06C8wzgkxiuh24/tYgtXXchBMi + mehtJ19i2xDyeWFOwhYZ03wlsVKTQF0JF9TpmjBFNfZBqivzjoEdAxaCOsAPckBwCG3D8+6/6WMfeROl + HloIpnogIr3Nyy87cuWVR6X+u+Ycar7rwb8bLrzh2RfeeOPFN9986UMP3vSaVz30xON33nH7lbfecvkt + N1/GnbfcfOlznnPJDTdcCBxe/6wLgMxrrz3XasTLLz8icHjRYcg1F114iIkjP4s2LFgIEoPK1KkAIVpG + tfAWHqmVhmI6E1MM+b0soWJoUKzXsCHFOgCJ/S6i7YfLkk3R39nf1ylSSwmlasNtwHYPJisMdaG1mpnF + QihVdUoYFnZshIjE440vauxQFb3YrFdHg9oGt3mwO8i4myhjwv7+boqtxIQoLQpDRcgp1N5KPaYGDtHb + L6kIQxKTF4WcmbwAi1XStn96nofbViymI0N3XKtyLlSKqLLPhVy6skHjPnUsWCOScAkvo6e7c524hYRS + L18aBqKA0wXMljmuD0FHwaf8graepJR1M/ZP7/HNeoqOyQ6eCeLKuiWNdctEQWgQGMpBKwr1qG9oXLF2 + /Yq16+r5qojrbVIohBqh1TSuWLJh2crWNUtICYQ76lLCE7JGnxEEkgbdqlVsGZ6RZ/uBPgl/sI62Npp1 + p/1T+POa/ODkn6EmOmpzkr99qP/iJknqQHtmvyfdP/FdRriyf3aDM51eqxOxwqAw8xqNZaGel0gnh/tg + pYq+M6kLU5e13AWQwmGsCzOOjPVbPBE7EQsGwLOdqbVADdKcIGOqCY+nd71UYfMbrWSsCrTVwZpLQTgh + 0xfBQo/hlSENTjRgXqEpGj1FI+DVQL7AIHXKTBROQJaRhdLdRJMog2CrnZQa66lLRkf6oG+kxMWcZCLy + RT1piPWdoCUcVaCKHJwZ3E2e+3A3HBlQUJR20ETVSi1aaQftPH1F0wtiH2pNUVBHNBLaCwXnqO1uvOGi + 887df955B0BBCkGmfZR0tD0Bs+uffQHgB8JR/916y2W33Xr5HXdcedddVz/66C2PPf+2595z3V13XUOB + qMdVt992BQ+7+TmXctx008WUiVIjau/UWqZgIRNHgJABJCNDVBkQZ1Ar0iDdvWtup0kM0VSoYffC5on5 + uTHTVADq/Gr6C1LpDs1ODyErnB4ubyPInszC0R6opOI1AxBSERoQapuUdzidFKZjV0NB34UkeRQFIBSl + RGIlIyhorBl2RXwJ7wUY0caaMfWOKChiI6FQFCL4EcPRvJQi0fOEMMJUTZiffMu5bd2OdDRuRZ6MFVVN + 5KwZ1yAJX1TBTybyq3GNkUS8DXT6V69l82nXYBRRFEN6vdlT3QiN5WCYlfDaGHRoJWUFooAdiyEkAONJ + 8AxGJrDJS6wIff1Rbb7yelKMjOsbaxnr4Yq6JZioZYVgHBPSBRUgjPQZlIXBdE09SJVlw6reVN/YtXpT + f/OyDY2lVetLjego1ID0hwOEtnIDh/ySx6+0Th48fkCPVK7/03qRnAWUNKf6a+ofO/xO6ffG6q/YCE2w + MOOUckLB14JbZOPPCIQlfEcRd3IKpvuvAn3UTkpOYotrsXMz5UPHfZ+joFuMFucHBe61oaDeGVjaek0W + 5fNcLYBTOvCQ60ocNeTCto5oWgiGAWGtcjDm8YZxi7RGc9bbrh30aU0UToTo1KwXqiVgkItBhXdejNJE + pTXqfBn12cpWTJNgW1GYtUBhJLaJTE3cRDvExdSPgIIxiSmo37QiBDVpikIWHah0ENe+c6xyYKqf6aBI + JoJwkJRBmRHSEaUcVJqo5CgZBAbV/NZJykE1S9usHmlbQaMnX/m8t77lRdBeZCLIOPDSM+mF0tUEvaj/ + ADNKvdtuu+L2268E58C/u+++9t7nPuu++65/4P4b7r//2Q/IccP99z2be+6991n33HMdD7vjDjluu/UK + vhcE5f6HH3rOs6+/4MorpDSk6QrcgoWIDmGTGneGolDcSgUOZzHsNmUhqffbF6Y3z44Sjjg50T89Pbyw + ZRIRJNAo/VKZFFa2jPbsUtbMAkUh6hHTFDIs1KRiN5pJuaP2xprQnjY12xFu+B5Fy8G0KWpK0MABlr9+ + 81pENYODFYW9Nfz5Rgb7O9uhhwTVhLVGJYBi/Vo+1pDVKzm50BqN/jKp20MmK0wyxcyDNJSAqaCCSwPT + any9eYBXhBEIg46e62t+y8zM3CQCAYCPx62SbadBYBEIFf8KbIBMUx+IoxlrVNYKwzmxZxOn/rh6RMxD + zgWHbt+e7bBpWOt8/YnLVFh/+PZUJ53ODnVFW1aSSaHRR7NCUOIpcHheZgQZmKIyRJS+KBBogYUcK1aW + Gpct3bBs6foVpVX0Uc2SG9MZ9IWVHxCg1Hhafj32C6eKEKf3+vg7GWnz9L79hN9Fq9FlkdwQCcxxQ3qP + 84TW3ozAJv+tfvFeF1ohmEfBXIPUwu5t0GcfKSBtC+LzPzvzsm1YcivhOofz2B7pp3WkkoYNn+soArss + sa6vliLF6WAiHMwymGwWqHP+oJeQTa4YSwVGTLDSKFgPF+aCiaFMpqPP90XDPMaEFtoUldUqERGuliRx + Jft56ITs/cUpTe1DfS5YZIeyXIZF0xy5vFMa4TBHEC1AICLFqJ0IGnDzlDFzbQNCDNVm1FwbFR0TMqaD + FjpvWbvRTS3ESoRCUHMEqQVBQU2NkL4o2AMCIRCkYrvzjquo1SgEocNQt9HMfNZ159PhpKrjS2AYOHfP + Pdfed+/1gnwP3PDggzc99PDNDz988yOP3PL8R2+hNOQ2D3vooZue98ANPIzjuc+97u67r6F2BETvv+96 + WqkUndSFQCw/hZ9Fj9Sw8AhFoRuzYcZmbt2J0B7YE2e4qaEDe7ce2r8dW4CtW6cO7N86hdZQs+y3KxAS + QTyrSkorCtWLTrkz0iBVfaE2SJU+2gI112rBsdF+xm/cDuV7kAwqFia6l3R/wwlAT7tcbreK0GQzFsPL + HHH7wtz05Ih8Sj5XTRSM3FGR68QwJmMs56ExS6tPbLgDX9RO8uJQMBqwpdeRO1RwJ1cfA3j08kND/Ww6 + ZW+aUbjdXyZ4cPvFW6scTHSEiYzKqkDWHzq/PH8sCCPVQBcZSJdoExDOJUuOL0TOafdKMW11RQap0Eep + CM1WBiwUOBT807VuCQ7JzA4tfQmtIUIL+qIxpEn19Q0YdJXIilD1IezT0sqNpVWdpdXlE675z9gDfnCw + VHiJ/CD+EuDBSf7EYIF+0r8oQLRi6fJVy4JFgIHiSf6s4/8QexLOWS2di4/1iaDCYU2+TFZTcrbyPNKa + 0KmAF4iLMGUCNDpx1JCPiwc0iuCnm76YMuFbwkLDZBEpbigKQ480NEtTW7XQKRWaTBUXvKoXWmMoaIzz + fC2oPjJeDq7W9KXITWBCg7SLPlVHW0vrpmbJrw/DwpQ+41gYmqWxI5rTSEQHNUE+VtUpbKNnxnrKHS6Z + iKVhZitqrjGWPmi3TeVtWOh5hMFoVP21+3vax/o6sBaTEAaMp5HQYUhNt3C0FxRU4aC0Rt1NjYoQ4gkj + N4NAddCehSOKcbbYZJ+5AyCEMoNGAmoojFDaodddey7QCPmFYo4q8J67r33e824E/PgI1IF8jz5662OP + 3fbCF97B8ZKXPPctb3niySefZ5++4LHbFRSfwyMffN6NoCZwSOP09tuupF96002X0Cm99rrzmDtqXQgr + 9aBK73cfPUt6pDB3TFxoyRVmwCb1H2oKzbUnPYoyl3r3skuPXXrJUUlrGsZrpseKwl1oCofLaCsx3LHu + qBWFmQ13DGbSt10cDNy7gNouWJ9nab2FolCTmHxMmDCHfV4INQaZ6WUXnXto307OB7eo5Ruhm9BBNeKo + MUjDxquGAVvgNjtxxnukhRG49Utz10VMYrLWondH48Q9xJzpV3OaenOqssu2UBemo0GbDjoJwNYEnw6q + wkoqQp5Kkw6TijCj3aVDwbQ16vvyjDgTy8QcFoYeF/RRpBR0RxULS9jNkE2hCazsblAMLlnXSfSSHs2l + hvXBdCbNLFRvNgXCDaUVG0srWqQu/P/TP+s+W1FlN07wr64ERX9twxoadSePZAKES5Y3LFtJxtaJfkA1 + mJ2gSLWXIeeB2qIZ5nEOWnmXlIOhjoxnSkgilAGi3mUja8I9STAlKMFPqNiXz5k7xH591g61KrC3XJ4a + HYUZpJ/mdIQFIEyn6DWx0MnZka4W2jVJQn30F42XcUqTSa/5dFFIVIPKEVWCaKIgDP2ljJuQTx+Evkdi + EuSFahFhRiLNU0YhOliz1PWCZpZmXbWxsf7rr73o5mddOTM5qiYyMiAkcTBLn9Dou2iurctxmwRNhNB5 + JIMmIozRu11WDmro4MxgN3YqACFC8gmokkM9czMj9AkFDsdgyvRL0KC2RpHiASFGkAFXQBezwMY+DeNQ + ykHakuedu0/Ff0ep0qjVnnXdec+58RIhv9xy2e23X0EXlIanQODDz3n+8299wQtuf/zxO1/0xN3g38te + eu/LXnbfU08++La3veQ1r3nkZS+796UvvfclL37uE0/c9fgL7+RgfPjIwzfzvcCh9UulU/qcS8FCsBYs + pAZFm5jVhUcgzkh4hck5aJPymm1SuFkc18SS2+LsOQBIPhU/cZJ7MSAdCZrC7SM908xK1WgmTgoFCK0v + Gv3VIjtGgbBgJRPJorW6o8Ka0d1P7QBC2Sfx1W4sFzpaLBrCWFfMKdAC0lT37kKQGLoZd6SP5pIo1Pkv + UGZUTOUuaz4RT7EwGRlYWyVTUHhR6Ndd4YbZnyo6FqeDciFDEY95TAp7NXQUrrCKguOidsLnLLEQTJEv + 1H/epqoJgb74WfuL0q8kDmraI8U7ho9LV9SzkreW15XH6zf0opFYtr6zfi1tzxZyKqQLamlN3iaVspKi + sLm0YpMcoOZ/7j9+KSKKmGxBwuzv6zlt+xiep1zumpwcZW9z8r8RqAGeNa/esJptxQ+sj+qvJ/0Rx/9p + PNJmynxvd0f7mQf2dba3e/u0VjkYuDNs+Ay3DDSRq3d3dHBPbMrbpiz9x04qLQfDlNv2dzhDlzs7NXJM + Nlx2p0FsoRD0i6RAHM2BYvA2zBmNOlmG+jV4BIfuaFAQBsJ3znp/Y1vLJts1u6eMhW4FRQAA//RJREFU + S6+KSokc8gXL42oFfcIdtZ17VgvqilaUT5iSzOCQXT+Jr0aT2bJ54smXP/zGVz9BggIcQsHI6FRiN/wj + CzEL9NaFaSpIrQJD6K71QgNHhhuIxDV9F17Mzol+mqI7Rshq7x5TQ7VhdaYeQVAPZVSzdm1ASEfRWqPo + 0AsEGbHMVqXEhRcdoviDEQMyIXugHXrH7VfdfaeQX0AvMOyhhwQCqfZe/KK7Qb6Xv/z+V77yAfDv1a96 + +DWvfuS1r330ta955LWvefSNb3jhu97xsre86YmnXvngy192H6DI44HD5z//NrqmPA9jQuaLDA4pEKGY + wiZlEincGe2RUhcG4oySSEFojE9BRIsFlrSmzaKmsDh7fkEMVC1nWDQVDEphjY5V9oxXoI9uHhE26VB/ + F61RKwfdgDu6bwcg9NAJ7LZTZ9GwX/HYSP2bBqugJInQuaOhQ8CZoGWibZ7ysooAigmb1JKfi+7bajQT + XQCTToad2NUVYZVeQoijbrSWEEcDE80QMb8NFe9Dc7FQgncAQiGR+qHXu5eD6VUft8LBcNjlE/npoCkr + 0h12WH9k2Uny4Jw7s2gtGPby2gmTBy0pWTY9g0Cp7fBaW1da0wHzZUlz38a+ia6R6dWtvXUaOlFavdGw + ENZMyO9FWSFWpdSLfGkTmYUnjxo/kEfyPiESKHd3vvRFDz30vDvhNp3ej+FPhdHX0FDfcQouFlg27s3r + N7Cr8Z/Cn2nN8tUAIUv96f3ok/wuTgbOruO8vAISW7N1+ZJl8+PTF5x1FPuK9AcZziWHfCpd+OZNODrZ + hFkQKxSA4SSqRZARaExHg7RKjOUVqV9hf2f4Z7NBb4ykiOhF4SIVYSF6SeUTwQtfrbcDfSbYRMVJYTY7 + tCuf65b4p8G+CqMI6rl0Rhj8RRPVoHEQUtcYc1Pz+o/1C6kWK52DX0p/j/jngoo0kj7I6l0+weIIFk5O + Dt17zw3Pf+TObQvTtEarlIJJR651A4T766+75MgZu5XKnwNCMUlRAQCMD50OdqKcQycgQe3YqZi/tgwI + Q/SuaCdi6Lxo0jeHZAnz1Gb2Rr4EXVAMz0AdM07D/4VaELUf0zuoMcKLuf1KKQTv1UJQUPA2ijyw7c1v + evxNb3wh4Pe61z3/9W94wRvf+MI3v/nxt7zlRRxve+uLP/3Jd37jdz7zhc994K1vefGrX/3wq5566JWv + eAA4fNGL7gZEFRFvvU+pNBBtbr35MsQVTCIFCy89gpqCV6Uk0t1YuzG8PPNMAWnqQkJ9tUFqsYUe4TtA + 71eEkhpkD2UGM4F5uqPjld2jYrKzfW5kemIAIPS5YHDnUXZMaiWzmKFaDCNc39bS3NG6CflgFFHEolBF + FM4jjbThrFjUHVLQ20RNYT6JIgwIc/GEUUoYuM2uoLDuqFkmxZTNvK1MElKWDQjVmMl7Kn5xJfvONIbC + bIHD8L5qQFikzDgcRvALjIE8FqbUUG+E+vwv7MhtgVLpsBg6Ogo6791bWYUbCK3r6hkNrsRcW+1mZC5Y + t4rEwY6mruHR+R1do3PLN/WLubaGEdIjFbyUkAr82NR6zWaEHCK0P2kgXMwn7CRh4DgPk07jyhXbFubw + kn46z3b8ko76ATh5/9ve8MTD9w/0VPzBoIlVRE/nR5/M90p3sVaMRuFlFyrFZfVLmxrWIBOy88C6pjGk + MFSBdqcAIeRitcy2B8splpw+sSla6EWkBaJl7aJ1ESF/QhkN2onkAggjgeKAUDsnuQspfipXYK0w3oLj + WqIjDJp6v5jNU4YVYWZmbHp6zDwYI3c0sxvVJSMTTrhIK42hT4FQI5Pw/3ErtdDU8pQJCV2KWRMZiVQW + O5OUZWsiiyPL6+zMGHUhyy64GDuioR2qc6lmISuO9sPsp+0JaxEn6GCuTfqgqtzo4yWqCbHYnhyuzI/0 + WvouwzCRzTEPE5oM00EPHRQFoTVF0eFZ0K4OCKf37J5Dz474HeABZsAebihB5gjlIEUhBFGILXffdQ0o + CB0GFgww9tKXPBcUfN1rHn3H214K5r3pTY+/9a0vfvvbX/LOd77s3e96xXve/UqOd7/7lZ/52ff+2Z/8 + 8ld/+ePvftfL3/TGx9/whhdQJj71lFSHL3/5fW98wwte8pJ7QFbqQopCmxc+5zmXMoDk5/IaTFmoxJmd + FmdI5xZeq9uQhmwKkxVqUShB9moaQIMUoxmhzICFI2U+biXpfqS3v7czZYrSbRbhoKkG2zJbNecryZhQ + Te+svy1/NQKzcFxr3ciNRawSlEoKJSpWilFcWA2BjUygU0JWFswrCfUyt05Yo5mCIu8pnwXWkyoh0RJJ + QqG3RvN0s7CndDWh6pRESGG4WCCvVe9fq2aExb5oOh/xBmnVuhHKQdtwJ91RJRzoXerrZkz1RYEvbv3D + QqhSClbFVXX1NDxJooAmqhyZhg3L1nWuau1f2txHdVi3uqPU0FK3iingRp0XYs9tXjNGltHvMiw84T/7 + yUpp/YGjRZx0nfBFnfIDervK737Dq//jP/7hFz77yemR8eOjZvrs/NbwjE/jdzc1gm1zCi/XUS12O7MH + BACr9VYHeItWfBH/cqdOmC8mOsKYQRFOsqQozEGgnaDexLDbSVHomz6HQLkq7Eqo2TmpFlGEaXyWheZX + Y2TNhLqQC7hgrhYIpTYX6e3twnrKL/5YFCoWmqdMQUSY1Yiy4hT8taMhVtoLTSu/XNyg9ULTj4nCLDPa + 1hpibWQesraGRdYKRICQUSItUJZm1mLKlBiYIB3RifHBhS1TlUoHt/kIUjILHB/oXhjuofsHKwRPNRqA + pO/iLCp9UffX1sQlBUI1114QKxmmg1i34KaGcQxiQUIkKAdpSGKcpgSZc7QpehGjQfqWVGwPPngjnJcX + v/iet771RfQ8X/Wqh97w+he85c1PvP1tL3nXu17+nvc8+b73vur9P/qaD3zgtR/84Os/9MHXf+ADr/vw + h9/w6U+986MfeeOPvOfJd73z5SDlm9/8xOtf/xjVIVQasPDxx+969JFbIN2gO4SJeuutl9N0fflL72dq + iHIfLMRxhqJQ1BSHt1//rAsffN5z8AGXoGBnzeiwUHzXRGI/iF0A5a8l9/LmEEmxBXH9iNTKU/0dDA6n + JwepldPWqKkmKMF58zHdXjR3IiCiJtQrHNoNE8O4Q1BSDkIZjfp6TSVMfUfdX8bEFZm/jCIf6IjugsMa + 9d7Spx/DCcyPGBokJbhVdnW6t9PzXE5yng2EtpZmcuQ8mFaEaOvAkXHks9aLhvQWgbD2jDAOCAvXuHeG + Ehq590jTdaO4qlTDYUEymGJhTWg02oSG66ALWFmqW1VCZU8Mk5BFjS+KKIJIXtIHO0orW/SgIoxAqFal + wXctuyHB5ov+o6NM7MPJJO3ZU/C6T/7BNX8qdFy0KyePUiePh12t7ffdcssnP/gj9z3n5vb1rfWlkwV1 + 3oFKubuQLVX9c6XAV0tP/xJEFXQz2GdbJ9YQ7oQvmMeYEKeAng53YASrvfJUC8TRzGUmO5n0ceZk62Vi + xNpMRGH4Z/cnPf0U/Ox2uEf179LKSCvCeKlkuJhiYTaBCEETaQBFQVYo+9a8caJe8EnuREFQaGuE4F+1 + 6XZk0IRs+sTaKiHIRLGEjAZDRZgqCF0+H1dAZ8oI4FVXDMmimakJKTgMCJ21SEfUg5YMC1m7jx3Zf93V + F1HqBSAcrkyN9UONgSCzmwEh4vGRHpQDYIAccEZ0YGY0GcudDxWhKuhJO0I4aPm6pANC0WQmh6odL9Cr + rjpGTXaDmsUIQfSBG8AqUJB+JhNBkIxi7g2vf4xa8J3vfPmP/MiT7//RV4N8H/nIGz/6Y2/68R9/68c/ + /jY5fvxtH/vYWz76kTcBhx/84OvASB75rne+jNqRDipUmle84oGXvPieF77gdugzPP+991xHXXj3XdfC + JkWtiIQRSM6KwiM7r7vu/Fuecxl1ofhxazaFpNhLboaYrpEkBRCCgqavl5wNxqWDXZLNBJl2qGu2v2N2 + tPfo4d1bt0wFyYQyj9htUDofOXMP90dDGUmu1wbpBka8GjqR0Wf8jxVCerEEatlQ6enAns0ilwvu2yKl + WN+EATet1DBUZlioYYQDAz0QR9OQXqsI6SWMDPQPVHrAyEYpDVMsbODHYTFKu8Jboz4FkEeqcL4wJnQN + rghwFSZVjGQXlyFiLv6z4IAfiaM+IMwiCe0yF+JM1REHJVkcTVoRFrbXus7Y/ruwC4+7e/9vrpXlVWC6 + 6VcsZBmvEw9S4cJog1QSmjSegiKvDmnEik11K1rqKApXUxQqiVRKQCkEtRbMSsNFV2Z+JlQL2E4nCUvU + D5hqUrOfcK1f7AEs7KAgW5DTfobjfCMI3d3aMdk/QjQXcFszJbjmtyPnhhBceBPEl2FdQDgFufqNpEKv + w+o1/OMPjR2SBTfbX0+pX6s4A6qqw9wdPFJmcQlk+o+252GkTf8/aSFUO44q7iWPsD2Xg7F9atjHjxK5 + 3moJkubaYsPozYvkhA4Tb7uHi4FLF/VuSqE2OlnKsa49KVwmJuAEboOj1plxZb2RZbIrNqoJM+6o7H9N + Wa9+iW69GB23nVOQBlBEBmlmrpZLX6qdOxEttpOOaA2j7aAUzAy1raumH91NBuRTTb2gYLbOWkXiVjKC + iFqysHbPTI9unhunFlS3zFbKvjn4L7ioDAsQbhsp46iCx5gUQ2olAypI+q5G74IZ27eLDk8SBxfEUA27 + FgNC+o2Cgufu1zSJw3BV0Eugc6dLiVKCWg11PIXaC14guggqude89lFGg1R4lIA/CgR+6A0f/eibPvHx + t3/yk+/8yZ9890//9Hs/+5n3/+zP/ig3fuqnfuQnP/WuT/7EO8HFH/uxN3/oQ6//0fe9mpYpReSb3hSw + 8BUvvf8VL3nghc+/g5/CGBISKYY1SDWwtsGPlKKQV8XYUiaFZzIpXBC7GTILRfIxd87Z+w8f2s6vZjbc + CoQyIJT8ekakjEsHZGi6laJwuGt+oHNmuGfnwvTYSG/UDobAeoBw9655uLWmUfGQ+ugvI/RdJ9F4m9Ql + oWx34H/293Vzj7cEEvmETAGtO2qUUXCRdCayI0i952lTWrIPra1STFqjqSmuiAstWTM4JcXz3E9+x0LL + JjO+KOIFfmi5u4Mz3wyb8p6FGV8maY1Go9FaxFFKkyC5l81sTdZoGAc6KBboBd5qSvbZGRzaHj0uO2Ht + 4lPrOOX6XfJJUTZGKr3SR01NYZM/P6j8FA5XMyaEMkNdCC5yoJoQvAz0GaGPHtc12qy60nWalbBJFvca + DmS8akxJWP7s8RubN8ACZYzDG8/vc5LYZvwP3u1NGwkfOX2fM1v0M6V6/PEnj3/Hf8GWKQHIhVIYnNPA + qeN8l/XBF90E6Pss87mGBn+7UgjU3yiq6f2GPF04OVLwMxTko6IFJFIBV7mcuK2EFzU6kkh6Tjhtkixn + E0O2AVl+Rrqpbo3GHohMtun1QbnWxmi2SUwVFOmkMF8XEjG4QixFE6aMD/B9QGhXb+IUFZCvWkRhcBhJ + BIFfF4kGrqMIVjLaFM0xFHxJMr5fwhcVTbSRZZwEmNaFqXxCW6BIsEG7ZhgWsZjQIVPiHZNX0AcUpE0n + TJkAhKKdkKgEyV1qHRjoxjgbj2kKAyqenaNlQpe2jlYmgcBYDobQQemIDtE2RDsIKeaKy88m4chpMvvQ + Dh4UIKT3CNhQfuEgQykGexOODEM7mqIoJUDBxx67/UVP3PWKl98PL4aJIChICQj+UfBR+X3qU+8C9gC/ + n/vsB7785R//5V/65M9/6ce+8IWPfP7zH/7sZz/wmc+8/2d++r08BjikaqR3+p73CBZSVr7m1Q+/7lXP + f8OTj73k8Xv4Kffeez3EVPHshrN6HZzVY5SnvKqLLjx89VXnQhnVbIqtEEepCLnx1CsffuTh25gUYjED + g1SSKCgHR4Uui5MAWDgy0M3QdGFYhCWEckz0dfSVW3uQnehOQuCwW6T0DGVhHnlsrwkqJDO5q2Wgv0yp + Z2rCCIH6N5XAEBURxnTJQiShkYcxIx0Z6du+bY6tjLv0ib9MPrC+4OcX2qFrhMxVmBGadiI2+WtTRmtV + hOGSYZNKQRIh0CaFYYupY8KoXEq6ozUHGVk7VJJiGuTbFomhsP2r88lT1owuJTnVoCX0xrrQdVwOjbrd + X76caCuvIqrg0FRiWhSK18zKAISqtdfkXkvr1WPl+jo6pas3LlnT1rC2d8mySmlJR2lZc2kZrJloOrMs + lw606DJe7urYvWMbBQ17lK1Tc5WOruPjBK9xeKB/88wUqnYOR8eThEOMtXp7JDP9ZB6vq3ERaJs3rO8r + lx2oTuZ5jv8YjY5sZKcTkE+F6idZK5/8TwckKDTTNmyCheFpDA6FPlxjshxmrPG8qed6AP/4Tv4KZx3e + Pz87bV1Q3W1ZgyI0SAFgDKjFpzAo6FN/taLXmokCzQs0uTZq6ZAiD9u2n3BRdVIY8s/sskwo3eGiTRWE + yW3b9magWOCUu5TC+DLkTlg5yEfmMT0dnV0d7aKaCtm8hQzCQGfIPGUiECY23BbDm3dWozUaAngzINTB + UiafT221ExG98RjhxbT1KbnD12jTvZ15xu7n3vnsmUnSgdrnBrsQTkgU7WjPJBUhuUvETZh8cDz4i5qt + GlmD+/cvEPIX5IN7NouI/sAW6YselaxBHM6sHLz++vOfc9MlwpG5+xr6os9/9FZkgmgkXvWqhyG8oBGk + yQkQ/vjH3vITP/GOT3/6PUAdsAf4feXLH/+lX/rkV3/5U7+sxy/+wie+8uUf//kvfewLn/8Ij+GRn/jE + 2z/y0Te+//2vefe7XgmtlGcDC598xfNAWVqvuLJhVYNhNy1ZDaw499prziPjECfSa646B1IPL9WAkIoQ + LLzg/EPnnnOAipBy0ASFShlFRyitUfFZHUBVCYeomziO7cNdJBQSXEwqkyUUuqbe32HjkRqDVNzPu1rH + SXmsdDqzKUZPJLJ6+RPnmKKuKZSJXdvGyy8799abr2akhy2RnTDJ7NnUOJGrHH1kCm4yioVuh+u+SBnz + Kzvbo8u2neeGiKklr7NjChvKpPtSY0DoXLYEFKUdKhe4ckq9HNTUwlAasoywGFC3oIJLiOVGL4/Dwrix + NvBLKDO5JciHhdYVU+J6oSLMpj85wjwkRJJ7ATMDQnEWpTQkoSKWhlBGG9ZvRF/aO7ti+WCp1FNa0io6 + QgNCFPq1aIw11u3xkeF9O3eo3mRFW/MmprknXNx5dyz9x4oWW3dP+F32gAD3VY92VOCpDIf4ET2dXfhE + p5jE7cH+3smxEV7tSf7E4z+MH0cN1NpKHMnxar5Fqz2vRxWgrLar+c/OgBT8DNKs7osQKN9Oa5A5hZSY + ARe9QWrDyGwLZU1RSGbzc9Ptbbj8pdsx74OGExT74Pb2ljgmTE7leE57XcgNhqAklXLVLYlOS1oIZqxR + v6LcblQn/zIBTRlr3rqJ29WooMjqwoB/BopeF9oSkMIhnyaGxdkigtACIOxoba1OqDc1RSE0IMbwiggM + 00i4CVR7eaPtxGVUgTB6qonyLMmdKMKhRf+k9jETE4PbYMf0dHjukq3dmzeP79oxh1XKaF/H/FA3/qJ7 + JvvmCF3SDPpoqBYU9AzPPGUCf226o0qTEQgE/LBxoS8KMxN+pvRFLwcIz0HeTlkGewU+Jy5oWMNAE4Ud + w3SQCR+80A+8/7Wf+ol3fv4zH/zMz77/537ug1/60o+BeV/96k/+2q/99K//+s/+5m985rd+87N8/NrX + fvZXf/WnwMVf+IVP8Jif+7kP/PRP/cgnPvEO6sgfFSx8BVNGdBe0WxkWIsynKKQARVkIawaezm23XH7f + 3c9CwoGcg4IVrxkBwgMLWI/u2jnLL5KmMoGC9IHBfnYAMiOU/nDvDK3jsd7NaEtG5RAD7oEuDMqR1UON + 0VgJysHgUeAQaCiYHbFxndqNWjloR8qKSi1n7ayAhtPb2y3NgyildziUU0tPsHx3NHEcbVyFLhYL9mZK + yExKH5r5Nc1l7LRf17imuWkdfbh0g5hGTyTyiYw1E7mjWfyLsdiyq5JPEylh1t2J7R/aObZd9uEIdULi + JmOznbSrFG5bnymMZuINYbHmDSCrF724oOVWuYiF9vD6krivNZhkXrPs0RcKFtpRv3Jt04aONU19dXWV + Un2XVISmpkCYX1+Dz1h7gQYAnmb1k67v6c84ed0CqyLzF3rmfLsBITfosbW3tLLK8/KW6lbDmp+2BD8j + KGhPYnXPyT/h8d8uvsoTptG+i0Gjo6bDIZDEr88OgCuLUzFDvHirwMIyXJSzT/E03i50J8LwjwqSczpy + R3NAqBTRYLRt2z32Ohrhko0Nsuow1eRG4hm16ejIIJa76YWXNmp8J2t9Uf2Y2mTkKDOFSYmy6ZrYmNpY + xbqj6bISzGVUX2/J4E1NdmSyQncZpd+FJwg2ImzkaZFNTgwNDvRYjzQHh82BNRNcZmInLZIMtS700jB2 + St1KTeCwY9PAQHlwoGx0f8laqnTGaFnxlCFmD+cwYhYOTg/sGu/VMPqeYTUXtb6oKeglk2F2ZF5UEzFl + AjeZPXNUgY8+dNvdd157jmgH9yOipxxEyQcC0Zm8RcmiDzzwbAq1Fz1+FwxP6C1vftMTNEWZC0IE/fRP + vucLn/vwF7/wEemFfvVTX/vazwB+v/M7X/jGN770rW99+dvf/sq3vvnlb37j53/7tz//m7/52a/92k9T + IH755z/2uZ/7IINDqQs/8sb3ve9V73jHy2i00m5FUKFF4a2wZigK4cswoaQqvfH6C1E0ChCquP7wGaKs + p5AVu7XtWMxMRgWFpPUqFgprVOrCkQqyQsByC4qR0R7syKmbCeUYw1+mpx3p/fzmCd5bt6wLsnpxs2Mi + GNKvMosZ+qIhhkn5ovrXjFiYUYIDbRjxDMGEOhQUCc2GtchsmAtypGn1riOUzVaViCIWhQ1tmzZWOruw + zE7PWAuyyHqkMXHCAss44WmBEtEktJggJUwieeMVFC+lLN0sbDdzOWgSzBRI3bkrN3PZjjQZyxwNfaNU + T8yCwFPQisuVhlnKRAaNSVNUbup1biFN9TSZy+VOrv246Q+YGLAummvFqiDVj+ltyB9LV9rIMArnpTQM + mId8cMnaUv2muqW4yUTi6BKsVECKExh+nfzKfzqPZCJFbokv5cd/CmbG0J7xGyo8zCFHEOIHLwc8nd+z + 6nv4q3d3dyD/56Q0qHOc88cagOmn4R2SHYDyifhNk+owrRTDI+OM0JmiepJkXtsBDqOnTCqo9y+lfhCB + LBrIMovbjWZkmURNKLQYvcy4fjZu3AAIJd3R3LjCmTJpa1SdZTKOjFWEoRYMKwJmOoJ8GFxx5FN5ZVsN + ure0EJnaaOJ6O6K1R4aCulSFLpYMeGRFgywmRiHtGlBgPNKUTWqGW2YuY/RRk0wQSZ8pCNP0iViCsBAr + ZSNED7JAWzk4NICPdgWmjAQQVtqpachRnxrswlyUAeH2sZ4ZBUIJox8OZNHZGRFLAISS5I5qQsii5q89 + h1cZKvVLL5HMBzAGlQK0lKuvOue2W67A4cVoMujcEfmheadco2iDJkozU5qiH3r9xz/+9p/69Hs++9kP + gm0Ugr/xG58BAr/5zZ//7nd/6fd//6t/8Ae/+od/8Kt/8Ae/8vu//8vf/e4vgoi//fXPg5Rg4c///MeY + I9IjZbIIlZRhIY3W17/+BU8++SBFpxWFlKEUo9YdNdM1erbCl4mRFGY9yi/CryO+oyqrDyGFqAkNC0VB + gdtq38RIRfhEGtW7GfM5xoQ97VI3D+MS2GaudZifGRDC7QwxhPHPkXmtGcspSgmTitDs1EN3NN8bkBOg + p6dzbnZ8z+4tpAGvlaLQ4nkLzYbkZEvG1cEUMIh8VrlNoA0Oo9Ea0iCXEkr6RNoOyVeEeoE0CMUvZcqY + JCk1l0m91vySzMGhXsVmXqqJokWVcEoiZXEAAycnRkkzdZ6dTwdjkynw0iMWypRGD1mc6MD2lLv6+nqU + Mx/aWvn5T01iYOyWyUrJErlErEe1TepYCKHUPWVKS4FDZPXaNV3aVKqH3cnwaBH2hr6yHzRI1rHphzfB + 64evKFWdwvL69euwTvXyy/GAOujkSTc8MmvMPiPY9Yw+Cb9UUxNThGIysBX7Sr6SXrJrNx0m41bIm6Vp + 1zQ7S5LhX4TGXEc0jAYBQn6Q9TRsRya9i9gu9bM5tv5D+zRPFnWyTDY2CGRr3VpyFYFDevnpBJGTPfO8 + FzJ3OiCMPdIcTaZGUZjJp5w+qmFskmK6noFN9CwOdSGVImUoa5NttzM5c3RfS6InQhfLuDMxm95YMwKN + dlSzZmIDTbFQyoigPAt80fy80CmjjoVmNAoQWq6stEY1Ua+v0kG00HQGhJV5/Da1EnLJhFaE0heNcRO5 + 3EGGbSgILRSXkguazFVXnQNZFHH9rbeKgp5wCYzQRDLx0nuZDlK6oZenHIT/+ZOfejfUULqdYBso+Lu/ + +8XvfOcXvve9X/njP/71P/uz3/rz73/9L/78t//8z3/7T//0N//4j7/2vd//KgUiSAkWMkHkuz7zsz8K + xRSuDc+GAANxIcpCZpB4liKloDsKEALGACGUGYSM115zDlBt8UxmPUpRaFgoPNgt457WC0U26AjJ6TW+ + zGD31BBSSzViHewc7+voZ0aI0ai+q0wBjYLkBBmjjKpDbPA6ECw09+1I+rU/YkzoDd1Rl8+n3VFOCR7Z + 31/GV4jn9IqQB6Om2LBOQgpDMKE1SHVMGI3WREdRqXQBz26xZu1Qy51QXZDlazprJo3kzYkoZAfZsAK2 + fyut3KZ11IppumeirA9U0mRIEVLSCqwZ27/iSt/fU8bJqSZZxrbJLBeQSDZsWB97pKGflE5frDVqfHW9 + HwiEykdNhlAbRj38Oz4VXOSjSuZ1Bx/ze2PJlINDLxTsRpgMiTF3aJPm0ifomiLAr+Mj9qRrFAVpMa4W + MWL1PxYyfh8WoGd08V/0yXj16ocinUzevOEhHPQZ7wlThvdjfHxoYnz45CHQfgzrLq1zvv2H8ys8/Z/i + uw7eByQrGugslJZYFFrVGPY+hSLS0TFpk1osSdhV8TxsDrVzn1Gz7AS1DWDa0w8nazy5feLNEIBcQy6t + vJYoh39+FflcIQwkYvJntHEKMwlnygSFU+S2WY5aznQ7+AhnCmKQjxWE9SUWiLCZVnHyDAxUct3RRE1f + GBBazVfg8sU1y+1GU1mhtkbBQh0LFQQVwZHS6sLQVXOvbeEiWtkBldT4MjF9wvPoBQt9TMgiDhDC+Bju + 6yCGHhrI3one7eN9WyiG4EyGvqjk0SMnUPmgiui3jFsMvQ0IESEgH0RET9YgY0JomRRelF8kztOQRM9H + QISWg7fhI4PgD/vQt7z5Re9+9yso4yjmGPXBjvnFX/wJsO13fvsL3/3OL/7hH/7q9//st/7yL3/3r//6 + W3/zN9/5Wz3+23/75l/+xe/82Z/9JtUhWEiblCHiL3zl45/73IdokPI8MG4oClHov+61z8d9Dds2giwA + YLEeveVyRpUAM6G+wCHcURkTBhFF4MuQUGgG3FYOGgoyI2Q3IGQZMxYQ4qh4kQOE6CgmCOk1IIwJ9Z0C + hFYRZsH0fHVsbIDWtFeEzhr1SWFeJJoFE1o2obkLWZ9Az6VVFkbIWQQEooSZGh9p2chpKrkTAQu18WBn + nXXpaWMcOrBzYnwoldXbZo6PsvHS2aE1/JOJeLgWpDRMNIWs2xDkQEG6pmbG5PRRb5P6MD4StmW1hCgX + J/dhRsjjuZePXZ1tm2cmaHume9xamkLdSUcjxoQvk1ms+diFnigTnvr6xvwhQKiLFEsfa6CouXwdS9a3 + Gm2wSKVQBgYYymhsmbZJw9RwlY4DMaMB9gT85EZAQfgytVgv/Gyq6lPFnqcPBop8wn/xaFx+pa5OcsW6 + TunFsDZrLfWDqmgjcmcjQwodOV90ZnbCn1pdaus98le2dyDFv6wxGmlHfjY4HNo9xuPKnysBCznFuVIM + BsMeK9mneeUXz9FwNsdzWk5ifjWsec7ad2B2YsKiDQuXgZR6kVqtNwJB1NspxhT1DoyYg4uWMGGNZlG9 + gepd4I5KgzRq6s10lGYXa4TzZVCxEnjG+uK8c9lKZ2EUojJ2qjrTRATLLHx2T6qdSImjNqfRcjDRUSRF + YWiNJtmE1hp1W5mkRyqhExw93R29PZ3ue8mY0Lgzmj4oFYwEEKZAOCBAeGBqYNtYL9qJ8ZFeaQlGEWF0 + k7G+qMRNGBAqWXQBBd6RI7uwVTvv/P3UhYzikO6BPfQkAUKsZFQ7eDuFGm6isFre8faXvu99r0Ydz4QP + Cigc0V/56k9+/bd+7tvf+jK9UApBYO/v/va7//AP3/sf/+OP/vl//PE//eMf/sPffw9Q/Ku/+gal4fe+ + 99VvffPnmSPCnQlF4U+8g0nhe9/7FN1RKDPYdmPJTSf2ec9jTHgdvVkgGWCGvHPZZZLZq2pCsZjhxYPl + 2hrNIpnoALvFGsRRU1BgIoOs3oCQGeG+6cHNIz0AIU7l0XE0MHI9g4I3nz8EApWjZ+2dnhr28OQECC02 + RCKU1Tw9Kw1T1oxTiDN/Ge2fc85QI/ZBgOlq4zF5KlbRbo1Ti4hEmhkJcVQAUgss/GV6u7va7TROS8Oc + E3fskaSaCrekSOHQpBTQa5gvSp8myu2FcCPFo0VnhyQKLlAz9+ASg26tfIDMSaoaCP0eJxM4t86rRoNJ + QG7JEmJT19ixZAkfQUTuWV4P9S4ILFjNGBZyFHXVSb80KspydELyekRnX1pWL1GFxibFkhRvUumC0nqM + EGg36leXlp6Y/vmMAFwy6fqBd1xLnR3tA/29Yjvwg/lnMkdOHX96zihWds3qW5RVtAj+FV+i451/wb/R + QC6933sFnCkURyr8D30D20nZv8Diik0GBcFQGnKmcnVxits91riIDf2wuaPrzgUyPjR87YUXb5udS+hh + AQ5TCMwPEnIMUu/D8HatAaFUv+92wEHqlJoFyxBdwC8li6Zq+sSGWBpHtqE2TnlNu1Hvi9pGu4KDVWdr + IUA1Q8EkdCKfJ+B8GYnqBYyzgILIMPRIXnQUpq/3zpvw9TslHtYF3ZFBqulLFsar0Ut0R3sZdFEREsY7 + UsZfbZ4w3pHe2clhVIPClNE8ek+coDUqAYSqo8+A8PA2WqP0G+k6UheiXn/29RfCVcEFG94m/Unri6Jw + +MD7XwMKQpNB9vDTP/We3/yNn/nKV378K1/5OBSY3/2dL/ze7/3Sn/zJb/zVX/3u3/7td//xn/7wX/7l + z/793/+G43//65//z//5p//4j3/wt3/zXSpFeqS/991fpEFKUcj3wjVFWSjd0fe9+h3veCmaQlipCPZl + TPjgTdSjACE2pxjckAkcvNbOFq81aY2iqQcId4m5DHwZ4456HpNp6pU4KnXhyGB5ckhcWHePVQ7ODc2P + VgZJJUzkE0GaosKJ2CMVEwOmsBSL3il1Qb3ViChbRob6xkYGurDfjtyZwuCw4L5tBWIoEzMGqfUVQrPd + uw7ejYjsrWI8rwQ5bYJDg7Vo2NI5Flb1S6uieiO/OjFpCpfSuqY169c22SQiFoVZOKgzui3KNG2HFjjh + CfIVQmlk6eAbtTqoziaE5UC7zmpBwM9vUyBqORhaWfxXogq0TVrHYGMcwnS5M9nuywPFfVs/WhkoB43A + JSUYMHXL6uuWIzFsFL6MNEXpwSZVYCwH65boQPGH848Ss6urg2lNNR484y9AJNvqXMKi+ow/udRhjFY1 + IDB78ip0P3m4r35kCnj2dvGBv7bsxjKaTHiUgaNUhNb6jJ/al50jmtw2FIwTwSWSpcm5xT2Of2kt6PUi + Q9yezk68cmxzV5iTg5/SDo0Ea7tguId9ZgUValtrLAeDcELr/mBy4fImw8JU/OQQmF7M1bL6VEGRKJGr + gwkp/sKMkMnl4GBlamrEsuKc3Z4CoYujDQhVXJ+MCdc34YDFQokjCQtf5MsEKQX6elk6zbJSZYU6LxSV + veURmgG31oVmtK38fvmoGUxazfT2tI30dQoQDnWBhSgEJoZ6JsgdVIMxGROO9UUgHFIfsrGdO2fRzuMv + yiEV4WEqwgCEGsB7lHLQTGQQttOfpEtJr/LJVz5PVBNveRE+2mjhv/j5D33n2z9PU5RpH9NBiDC0Pb// + /a+Dgv/6r3/5b//2V//n3/7yP/7jb//jP8DCv/63f/vL/wUW/sMf0C/9s+//1h9876twSn/9az+LmuLz + n/sQlBk82ABXxoQUnWRTCF/msdsffN5NVhHeeNMlFgV1aeTLWGv0kEoJ92C0Jo6j8GVkRliNhRpMWJGQ + 3uGehZEepJbYsdJMtmBCi+cNgsIYbmU59eLEHUJ6s2BkC+w1Hqn5IfBIMpZRvCQJTWlgYVTOeGxv0jaP + 7CojWGVYmERS5KrD2C8VqaupXUNHNLqvpSa6+TZpyKxnK+xXRxyuG/h5j9TSzRAsBBSsos+EsUU6LLQB + R77lk60AvhrEpqjUfCxVukRk3v3WhNK2E/+3pigQuKx+CVVgA2hUT6agrHCsRGQNcCfAJsseRSE4Bx31 + 0MHd83NTvBBdEvkSxWJDiaN+pcRQqAd3qX4F305/DAuuEoYnK9DXq6yQ5qejICUgn/JRykFaplSEyYyw + rbVl946t7Hyepl9oTexZv34teN7cHEzITh4nVIB4yrUdf7S56cmRoYHTwF3bhxR+C14F78ym5maBnAIK + 6kNhvsDxOaUWbvUb5a+WbRQ/jMXa77HTJ63zYtc01dbUZFUFRHQsdBR0RMxYXpnXdsoaDeof+VNkCoqs + O8rv3tHewkUInur1I7tAvWyESLZ9YXO5S/ZxQTWRxNMnTJmM3l1TDhxNpHIWM+m8xG8XFos0ntDtRkUd + uKHJwCkPgTmanzRFY2s0oqB8I5hnA0JqQfpmLjJL50lWQDjzgiW1r1c0bWGRzVusZY6juKwpEFoMk80I + EdGfsXlk93gvCrnxoW60Exo6IfIJAcKJmEEoQDhKFQUQkrskM0JpjYaK8AKrCDGUueZchBMQVe65+xrC + ArHDBghtQAgQGl/0kz/xDhxk6G1qX/Rz3/n2L/7xH/7aX/zl7/zbv/3Nf8i/f/73f/9vCoR/x8f/+3// + +l//9c//xz/9EQ3SP//zr9NBRVmBvhAQZcTImBBjUgFCsine9DhZhrByqEHJ+xW+zJ1XaWDvBddeew5t + 20suPnzVFceuuvxsVB+H8JeJIgpz36YonJ8X4qhlE6qgUIijYiwwUpkeqWC7AxDuxI51qHukHylhJ2+g + UXBDWr1hoXJnPKpQW9PZ1DbDQo0qDGmFkGhUWRFlFbLLoQFerS+Eo+Lz47htiruoUCAG4oxzSgtm3JqU + G1DQp4YpfaZmLWjnf7JHzI3YBfzcbjRJJRSEC+MJlxJaMGGW08sq1NHeyqs6Ti808uliB1SXqnxjyVFQ + GlRK0YMaI0EOAn5LgUP9KLeX1y9fxSF4JnwZJoV0NbldD9GBjbXu9i16wmgvtD1hvjTWYb3NgUYCjii+ + oytWc0gtaLlLoJ1ioaZVgI5N4R7uN36p/eO5t23Z/Nzbn4Ps2vRtNTODTqPA4tfW7lzGgeRJjIp7wmej + bKEQOaWsXXtO3maYuGwiTvgjCg/gVfV2l4d7Bwp2aODxKG7w5W5+nXXr1lYziQADemRpmah+14tC+PER + mpfR2dnGviFWhFbg+T8tEKWMA7BDRZhX3ng5WLjh5WDKYw6d0rQizBeFUmym53rc7oWBAf2K2Zlx7Kp5 + mI0TfP8o8j5twvgGMyVt006u0hFmebyRLxMMZcxHMS0HlSa+AqZAwWLGVw1XZdnmmnJQe1ApVaEhjSf0 + uAAWqUgZ9UIwhDFhGcoaWpBUN4OOmaxeWqZ2GBGfG7RDyWYaGelNykExfXZ9vUvsE75MKxqAkd6O/fOj + lxzYsicHhEFHCBAaX0bCeNERxtYoozVR0+/fIkB4plaE5+3X1uhZ4qx2w4XIJ2iN3v/ADVIRPl4Ewp/4 + xNsBQlQQv/Irn/761z8HTeZP/vjXmQL+y7/8xb//+z9SBf7H/wMR/54sFz7+v3//7//7f//FP//zn/zd + 3/7eX/zF7/zRH/3at7/1FcaEcE2/+MWP4ruG6ZqIKN79Coij6BQDcfSRm5UvI15riBolrRcgvOSMK684 + duXlxygKeeWRODorgfVbJ2j8psRRcdKZGw3FMRXhSM/CqFSEAOFsAMJQEapBAXsLtVuLEKgVYQECM69R + wT91XLPYeg+gcHpwtb7ew+vTRnquIyqCimDjV7AeDaNrxtV5cxk5gZUvqk4U4TwPN6KIKIoIk0sjU99K + IZhMH7IAJu5nk4qcSXtnweypijIqm1edI8iKZ3vZ48FhYrsBYjFfLOywY0WIipqNL08o40BFSIXDZcvr + liwtifhhdf3y1fVL8YNcaf3MOrAQgSBuarKoCjpakxNUA95C7jzYiStng1pv46xm0YPiuKbpg+Y4g3ZC + kU9sZeQerQXNj8b/0a2iScS+QV4V/3smNHn8jkxeqxf9mkVVTdCytf9U8ey0H89JMTk8OlTpr67tLDLe + K0IBh8VfGG8gIYKnUVv7LxtBz7YpYbNi3FH+MaHsbG0zbq09sopkbHdmRjMJZTTAoegu9Z9uDGX3E89U + LwetC5oxwfQysNZHdqBwwsJNm5/SaAWWjJbGxcM9cobHKtBu+Kc51qjO7WMLNJgFJx3RKgisgX+6Ulhs + TXBZ0+5oPoYpbzdaMForWMwI/Y+1j+YYYMY0kcBVWwoDZVSV1L4mipSwmTDeZss4DK1RxUIAj+WYjwaE + QsFQBj99UVmObXCVsEYtkrev0k5rlPV932Qfnim0Rsc1gEkdVcRxGxS01qjbyghZZse0zwjFYvTILkKO + qAiBGasIAZ5bbr0c7QRuZ9YafcUr7peKEAXhe5788IfeEIDQKsLf/vx3v/sLSCYYAf7d3/3e//znP6YX + +v8CEIKFfxeB8I9pnBoQSkX4m5+1ihDqKRUh7VZSnKwiJLNXKkKVEorRmioolCxz5KKLDp173n7MZY7E + 1miQT2wvyic0eZG6cMj8ZSDLEE01j7mMuKx100we6oORJMTRlC8TzdWSkN4qc5lomB562h69VLSYiX/6 + qhiKzHc7dBTUX00hUMU5buBQ5XybWqxlyno5mcPMu7DhK2wKk6ZoIkCCGiOXgFDT0nk8V1bzBsIU15u0 + yfmihoXqLBMG/LYDrkLBgIgZb06tLg3XeE6KELUjThtLTlkX4GOaj64EZLZlR5uZK5euXN20fuOqpmZ1 + 0JbyjiJP5oigndxD8Qc00gWlFmyU8k5LQJ0Crqpbvbx+3ZIla1fWY5jcsLZu1QaNm9hQRzw9XqM4jqrR + msgHsV7jSxwSyWQphs2yUArNTvV88V8Nu+rThpYfJoyd9ovMfnMazxoRefynMjis7qDad1EbtbVuEubq + 6VaE6U9PodHu5x72fNDK4lAwFIUpFnLbtm9WkXsXNN6200/OQK6BTvpB69fngVDO6cgjtdvhHkPBFAtN + cmuXih9cfk1rGtOQs7jxdK/RVETordHgBZVCYEKWWdR9uyp6AluZ4DWadEczx2034M725oHg7sKJ4BjJ + CgipD7RTD5EwJky1E6Yt46O1QxXqsGQLK6m210LuhM0FXU3vxA0tU8QGDI4M+GcHKzhAODbQtVkdt3eN + VRbGe6fEYxN/tV6zlTEUTOUT24ik3w4QSkUorVEly2ArI2p6bY1eY0CIudqdV9MafeSRm5944s4AhLRG + HQh/Rlqj6Oh/67d+7jvf/gXgDY0ENR8t0H/91+//+/+lNUpR+LeUhv/3//w37vmnf/pDbY3+Nip7RPdM + FgUIP/9hgBAFhQEhwUwAIWQZ3L2J/7UZIYpGJcucDU4jdrRgwsNnbA990Z0zLp/ASTU6yzAl1TxC0xGy + MwAIB7vljVIgnO4Xu1FljWa9UHm3Qwm4Ea9zDekVf5lQo2sXNDRCswBCbYEGtwQdB+rfujp9IjotaNsg + CurNkMGFE6nLmnXaM7vRMAXMvEbDSZswRf0Md08l6YWkkYQhg6IQTLi8r6c8NTYK48b2nVGtK0HZ3p4J + +Ld8GfvI9RvWUc/V5MVU08VtQyyrAUuEQmaKmt5YCotNEBGKMAwrFfaTtGy1L8qSuwTxXGtr66GDe4ZH + R5fQ3nQsBOoU7QQIhf/ZKCpAgFCanHrgI7NqRd3apQ0tKxtbG5euW11qbC6taS01tpbWtNWvK7f0TvQM + Tzc0d0kABbjIR77U2E54vWTTr24vNXQL72O4DxuirhSxKBXEvuQ/13jm6cPaM/EMJ1+SWsnFz6SlPjo6 + iHL8VH++42bWA43I551Px0KvBXMt08gV5XRkR0YgIlpy6ViqSEjpWIp+4YYAJBcGgzI+eh8jfyPDv4iF + xViylFqWa4FKRzSgY9oRzY0GYxivM2Vc+RSH/N4aLdpt24rAZtcUFDGPMIunNyWW65Q9gKmWrZop6INS + QmBv3RqkYCTvUCKYs5oWf55EKGti1EgEBX2OF+OqwRjuY13QLHpJJRMpFrpworcHQ5keWqk7tk6NDXbP + DgpTBtbolrHKxDCLfpgRAocWQwgcOhaKxdrWSWmN7p47sH/hzMM7qAhja/RwbI0Gc7UIhJI4Qaz8W97y + BII/ZH80MwEwnNUAM6Z93/rGz//B94Qs89//+tv/63+Bgn/zb//2F//3//zVv//fvwYFhTj6z3+CiAJl + xZ+hoPj9r37jd7/461/7GcgyVIRf+sJHII46WcYqQsKeHnroJsQbVIQmnyCDgmBCB8JUPgFrlF9KBoSb + kRKKxRqjQTqioiN0+QS+27pj2DHcvW2oa6q/c1B1hFYO2lBQysHgLJOE1JvjaGI06hVh9FfzhPqw3cnT + RIOOMO6QnBRj5jJqvR28RoOUkKuSU4uBMcqKFAiTAIosmND7onZ650WEorVPi0Kk9AkvRvam0hdduXzj + hvUM6TF4cwhMne4TjqjsYrFsW7e+SXs5UhQazom56OLRE3Fb7Nb8vmKkZv2+86bfuHzJspWyHZZnX2ET + QcXCeirU0ZEByBgyI6Q7algoobtNEfOsUgQO9VB0FH/tNeuWbFizctOqFRtXQaAvrWkpNbXXre0sre1e + vmlgYmHfwu4z1nUNGTQKBDZ0lRrKpUagkQj7cmlFRcoLMauLiUJacUBElcWQm/xOruo71WX9/weP50+l + 3psndhkFqFRzYz4AYp1+eqVwtXzCy/TCEyb4F24aadTrQk5xktzxm+YM4zwWk5c1YiWasEa9UpRvpHRM + Wxm+m0vxz8vBUCMqMUxbnWEKKAJBLj6VDOYKxIYG8km7O9uNpZY0RXMh2omUPjPazrWAIimARQGBPz7a + EMEV4VabGYcftrJ4I1ScHps0VkmXp2QcqLd1fmNqaJbL3t4usRtt2dBb6WLOZzp6OZQjY0uhsGb0hlms + AYpSMUSSPaDI8trZ3sJHpk3GQvQBoYcRmu9olBKqgqKrFZXh1NjQuccO7N09P1zpmB7oIHKWJX7zsJJl + yFsIXqMVICGVT8iMMNERoqZnQEiBpan0gSyDjtDSl6gIEVFAWtEk3nuxfVFbGZFPwPP89E++G8tQJBAI + IVDT/953f4kxIUXh//7Xv/yP//c//uV//em//K8/+9d/+T4f//mf/xhZ4d/89+9gNPNHf/S173znF9HU + Y8NtpqP4y3zsx94sjqNvfynE1KeefPDFL77nseff9uDzbryfPKY7ro6t0bNJq6c1ii24sEaTAAoBwq0T + sGFxjCOnXhPqxXc7RBJKAIUI6i27WAT1Q12TeUF9BoQaOmGHe41m/mqhIpShoE95NWCr6LsdK0IR1KcK + QgM/I4hGynGOGmM7ME4kmud8b8HkKG1duP7HwM8+rVLTF6T0VgtmInr9NPg3RQ5atctagSaTu2yNCs6i + gVtNf3/P/Pw0BvR5xngAy6ptdGiTuhwrtJeo/4C9FY31yxvql66MtxuFMqqP0JVoWYhVEs6LGmevaAIU + +a6AglYX0hdl4MdjVreW1pbr1nfUrV9fwrNzzca6po66dV2ldT2ldZUlzf1rOkdXd4wsae7Te3pKTT2l + 1ZXSykrdqkpdY29pVaXUUDkBWrG4k7pwwlbhDwfzfnijwvD7SP9Ttfkn5VCjQ8NTfo1VFWdBKVgghS7G + C61tO5SICUkGXkl1yI4vPywMJaJPB6vxzzDPpoMpTcauBxBPkGhNo8GeyP5EGpEDQnaUdEImRoe7O9vi + QCLthYbRoFomCrHbpfSFKYjN7TWeW0rAjRvWdbS2kAuBKwftR+MUBOfGpBA0gowBoaXH5TzVov2VoSP7 + d54KAZkVhSaOlqUtCOrNZFmIo6gmWCVzA8Ikrd7lg55E4e7b5KHnswljHmEUUVDH9Pd1DQ32IACgxUeu + EO0+pOJbRsqSwaRhhGFGONEvFmvuLDM/Jq1RmRHOkN4gebwunxCyzGHSjiR3QvN4RVB/77NoUSJmoF35 + 1FMPoiZ8+9tf+t73vuojH34j0UtGHJXu6G9+lrEfYnkKvr/+b9/8h7///b//+99HSs/xj//4h3//d7/3 + 3//7t5kOIjTEd/Qb3/yS9UWJqvidr//cl774EUJ9TVD/+tc99spXEsZ0t/lux4Tei4iqv+pKqQgR1J93 + HgEUe0Q+cWjrfuQTe+Z27BT5BAcJixCCMtNtb426oF4t1rYOdhWcZQIQdoXRoAcwaZtaprbSu45aTypC + U39uNIu1WgEUkRfq5aALJBwIs4ow7LryARTenDCOaHU5mHdZM75MVhEqFUWzqZPWqE8T+F7MdQHaxFYm + i7yu6s0oENposFYwb+yaLh0Z7j/ryP7+vjL3pJMR3yg7FlqNaEiYAaR8QjlICbiazmc9h2Kb3ODjMu2R + kqYkgUoNPEYrwtVLVq5Z0rBOsLBhHQkS9eAiVaB1R+WAGgr4dQJygnNruyj46jjWlkvre+rWV+o39NVt + 6AUO5VhfqVvP7d5SU29pda+AHx+bKnKsOREQiqDxJOidzywQ2jtYeE5ARpSZi1B4Ct9ykqzUZ/Zln/DZ + tJMuxWVNvLTmp3c+dQwpv1bWHFXM1G9PYS/9NBjTaJ/TR4MB6qy41zdKCkHboOmZ6prCXCvD8U+b/oE1 + mmwGw7RcwA/0S2aEmgsq3Jmg1WXwQCr96tVM7MOUQr8URvfh9nLgqqVVbEITykxRSs96AYyp376QRYU+ + 17CCjiXSeE1etL1zZNnlZPVh+sKkBMvEGgPCJIMCAsvoSD+CEJgvyAGjgjA4blvVWO5u37mwmdLNC8Sc + 9XZqsWYOzma9bc6WeR2hl4MyKYy2MqjpmW/hNYoebmawm9bo7nHkAT3Tarqdeo1OqsWaOG7PjVIRhmB6 + YY3OicXawa1UV6gRcGyRJEK8Rq889qzrzmMyRxLhPXdfCyDh84LbC54vYrH2liewWGOkJ93Rn34vQz46 + nBSFFHnYp6Em/NM/+Q0GgTBIUQ2Cf3z8u7/9zj/94/e+/+e/JbYy3/oyNjSUgyQUcnz9tz5DRSghve9+ + JbY1dF/RacDNQbPxgFms3XwZukbLqScfCmorXVyGmuY1Kr7bRBKqdkK8RtV3O2jqMd2WVMLe4RGyOHpG + h8p4jW6FLGPZvP2dwWs064uKUjOabiet0cx3W3xHrS9K7V7p7qCaDxbqtSrCgu92dFkrAKGXg4uTRRO3 + o6SN7yYymcuou8kb/uXFEqFHatN67JbQjhHsxSPpzkSLNTevSPoxyzGskIs3ynxrw6Fd9YAlEJuPIK0u + B60vGj7q+uL+olryiUYQnDP8MyxcU7+ySQ6r+VYqOkr/cxWN09WNayDQaF0IHOrB7TAmVMvQ5WtXbexu + H55t6h6lEBQg5OM6gLAXaOwYnhue29nQPgQQCgrKUakDC0E+isK1oKPBZO8JV+8f9gNYpYXPW9WNFGNx + tQirfkF4EeEwiT+qfQnkJkHHAmlP6R9/Nf7ep/QtJ/9gnpxhFuPqmt8SAC5vHGPjPBdI+DemQCgzaq1E + HUf5xZUVLSZz1in1iWDClAngVwWKaX8/d3sx2rRuDzNNoYwZxLhQLEl9bM61BvjYJeQVocGkBUfwatka + 4zLFrF5mG6p5co4M+CdOiGL4JA/OyAK6HZZN8Uqhquohxvw5ymjeYg1HZAT0vg13KUU6NaQXKqPBTYwG + 3UYyLHBWLJpxTB9Gya0ipUc7ERqkUUGR990ORqPeGqUpl7PbNil9lyaq60EYkxyVdirCYTXdFiAc6yGM + KaRPoCLXVF5hjaqOcHbGBPWjAAawQVEIhAAkmG4DKkQ6CHE0dkdVQRGIo6KpF3MZDSN86iE075huv/9H + X4Pp9qc++S5c1r70xY9S3jHzEyz81leo+SDOUPxht4bvKDXiX/3l7/7D33/3T//k1+HIoLXAiQYlPvPF + n/2Z92G6TXFpSUxvfOMLRET4skAZlUjCO6+++RYFwqvPoVQFCNVfjb7odgvmhTLKLxIs1tRZZnZmmJx6 + c1mz7ihGa2wLxoflndmOfGK0vDCkXqPiLCP25SaZUL6o5fGGYHojy4TSXLvWPuItd7VPjgz39XRbXzSE + 1DfjYy1W1vylJsYH+ZjXC5oDn2cwJQNCNRqtjqdPisLQwy+wRlMTmTAj1KIwegrmBoQeQGGXEohuIfVR + PpiF1KcDQi482JuROOpNUTeUybijLpxIY9es7HPqXKE7mjaZ4s7bXLYblywVqItw2FjfsKa+YW29VH5N + dQ1goUgARVCoZshLltIpXQUE6gMMC9fWLVkj2gnGhMvI3d7U1F5ZvqFMaVha017X1C5AuK6XcrAysTA6 + v2tFy6AAIWgXsdBqRIVGqRTlsH8sMwyQnnEYOI1W4WIF03Eghy0+ZTt5DvYYqR2F+VmEzBPSXgwwTh7b + TumR9uTHf0NiwSfgF588vGpwDmRpb21Z29QUa0QxJac40nlk1kHl1ARgvN/uI0OD1aoBYaCGWr9UoGsJ + 5GntfXjAdHTRrVUXZsSZeKmEy4mLEAo1zG8Fv2VaNBpRTT41Z1RusHvdpLDNl81NzSpF745y5Zt9qPd5 + juMsY/O/xJWxODWMbSjLIyxqJ1jpqAKbZGQYEsat/vM8AcJXZyZHaIpGrVg+j1BLBx0vycewsMYBoc8F + bS02mkyaSm9kGbHbVqNRiWGqdBDMO0keIeZhowqEBPNqa9SAUBQUAGHw3Y4xTEIcrXJZw26UVN6LD19x + xVkoKFAsWAzTc++5DrczhnbEMDHAe8PrYzY9MUw//lZ8YT772RBAQRgvWAjakUHx+7/3y9R/8GI4GB9+ + 9zu/8M1vfgl+KbUjqPnFL/0YsRVwZJgOUg5SYiLVD0ajms1LRSjaCWKYUNNff4EA4eUChOedux8gTBPq + t28HCCdCHqGg4NDkRDYjNO0E78b4cHluhDxC0RGSQQFxZqCvE/s0kdJHLIxwmAChZ/PmyDLr+fvCZLGu + KfsePnXiKOCHJHQKP7duMRGNjtuhNeoORIsZqjlx1KbanFf4kQ7094jWIGvmuyNSVE3EvqgpCKPLfB4I + ow2vzQgTk6bUqiI3j2DpYMMq1SAXfJaV7XCYhWwvVdYMj9J27MqMKZpL5BbRhW1/a7LtdP1hXcJNRi1G + 0UUss3IQIBQsrGtoUkRE/NAodwqDRvNWGRnKwyIK2g1yd7EPjZ7aIpxfzWiw3SrCOgaB0hftXd4ysHRj + v/VFpeyz7ijN0g29tEzDbUNH/vHamd/s3LrAX2ORekUcvPg1Tx7YeKRUBg0rTwktFvvpvMLjPI+u4Ceo + 5HgMkoaC5v2E0Fj9Q61Gq/06tUlpX5JaZ9Uq0fFV/UvQbtHfqeaokbN2bmqy3N2ZdlD5u9hvYViowkHd + DSTloH05jgZDpzT5NHRKFQWXSDbW8pWMDBIgzEkJ7f60QJQpggKb00f59Q8f2H3PnTf19/Xw4ByVdLmM + XalZaYSaX4zFW3sAhV3GDoSpU5R6GW+wolBWhCShnnva2zaddXj/YH9FqKRVDVKzlcG8OK8jlGBC262z + SA0NVWDH6O3VqadMJEFgJSMxT6YjTKaDAf/UdiR2QSMdX7J+DAujfD6mTzhl1DgyLXigEHRuwokQSdjT + zoI+3t9JlQMQUvHMjoSEegGAEMZU5MvQHaWK0kjCWcrBc8/ef/bRvYjzkBLi23LlFUcx9mQsZyIK1ITP + e+BGhnaM7pC6E58bkpje92rMsmmQgoU/91mJp/+lX/wJcI75329//XO4j+KjZgfOokAgnmq/+iufpo+K + iB4UtDDCD3/o9e/9kaeYO5pwAk8ZxPuQZQBdKKO33XoFHVoZEF51TESEDAjPRUS4x5kyVIQAIfSf+S3j + 0hTNDGWi0agyZYYGu+HWzg2XqZuRT2geYScJ9dFfLWcrEyOZtE2qCb0+r43yiUCWYTrIYzADonC0JELP + Iww5lJrKayNk996zDrndn5mLFhLqmQs2yVaMIfeW2amZqVHPCPPuaOKXK63+kCyWAGFqJSPXSMzsTC+c + gklTxlPTvSa7S9bn4siwKphXr+5gncGj1WktzxvXotAU9NFTLZsOxvmLoSMVIWS9aLe9pHHJ8lVLBAW1 + KKQ7iv5vJYp4LRCl8qNBqvPCgIIWNx8bpMIshVO6RsQVyC0QDjZuqmtqgyma1XkCgV72GfL1ydHcX2Km + yAFMbtSP42yoyl24SAMS1Q1JW6p5K8R+fe2Gky+YWHl5a07GPsbRIDT48ujA81AL5GWO2SNA2o42+Be1 + +43pM/HK4VkUIgDF4OAkvtefhwdLuaF5ygUQk99XTBqCHJNzjPNsMRQ84f3eKU0Hh7yZsf6L2JdAYIJ2 + ha86BHo71ErDtEDUTwPCWavDRfQB9rwHElzWks2gUstyQMg7gUXRju3zFHwuUbLSkI98dWKC8mWKi5lP + E3lTzgUjuaSlXmQHPTk5zDdygy95gzSuCMtRrWxfmIMoqxFugWgX1PSqo0DfaUwZ249LURhR0LBQl7CQ + FVAdOpEkEbqhqNd/6ygR0N0XxoEWXwC8DQ72sOzGolA4GhYPG6tDaY2SooB3GhA40I9qvlfX8TZmXaP9 + HSzuLPEs9Cz3aOotfsiAUIvCqKBQsxUJY1qYQE3ImPDMM3ZecPbBc87aS3eUhPrLLzsKJwV+5tVXn00p + xohO1IQSSSgZFHRHn3rqIXqYKOvf/a5X4JRNY5MYConn/cz76XZCIv3lX/okdjMgItlM1Ih8/LVf/SkI + NcAkNFFmigwFf/In3001SYQFz/DOd7zszW96nOkjdqYhoZ4B4QM3irnazZfdeONFvAxjyqCd0IR6KsKk + NYrj9lYS6nPTQcmmN8ftoZ7BwW6AkFYltmoQa6HXziAixFnNHLe75TCzHodAMxoNwhXJ6Q0jQ++Upm1S + 4c5Evky1vzatcnZOYrYQuVTc5k4LCMt7imbd0bQbQTsEEinnIUwuzkkBwhhGaLQvYUevbSwzSW5eb0Nx + 547mtBPGFw0KiqJhbxROeAxhsPk1FLQLs5rpXSB+Vw1HbBYYWqMhtzcuHdZeisNCbzvJPRELVy9Z2rB6 + zdpVTeuWNKyubwhTQMVCEHGdsWO05lsVuKMCgREIww0xkVHjGArKdXXoAtd2wZFxakxsfmotSAmo4Ffn + KMiNTX2l1r5SS39paKAPl9HjZzWwA4APjKGr/BIkND3T/UPendnpifnZmZqQdpyOIu1cCPSnBLcpCPHj + gKsTVpPhW1RED9rxQyOHJXsyXiRf4o2yu9LS+ZTK6LRI1W80dkwOd63+s/tP+M9nhClS2jYt/nPiTERH + pc9Ut0Z5o7jYqPN1U1hUE/p1Yj1SnVyWrEyUjmhEQWnDLF/GAEMVvkFKkXeBygaEToTjkSwKsF67utrE + ws2BMFkX8kKrCISJoIJibnCgh3Unyio0E64ppKRmggoLCoh59CktgqWQJ7GiMM0dZPnjTpZU54haJC/3 + 95Tbzz128IxDu1mOY11oQChHAELli9qAUON5McnsNHMZ3DJH+tpnB0Q+IeWO+G6TQysqcgupBxWYlkXH + USaFlko4CcdEQuoZEx5YCJQZmRRCmTlI+SXc0WeH7qiH1ENjoShE5EABhx2aYOGPvgY8s7qQmR9yCOAQ + 6zUQkeLPDkgx3MP9n/3sB37mZ95HRxQrGWpBRoPvetcr4MjQFH3ySUFBwggJPsTymzLUysFbnnPZA3ff + cMctV191xdkiIiR64sguBUJlymQzwgwIZToYgZB9g1SEop2QDKYgIuzrMBGhKQiDrVpuRhgUFLEojECY + FIheHbqOQmxFrS4M4hm5vXl6/MJjZ40M9oUSMJaGMaG+UdIr49Yq9RRN8gile58AoRghJZRRJcs0NhBq + uGFtUxJSX8yayEAxyieUfR16odZlSQjbmZeF02ScMlrgjnqnx8eE1fKJBPCqW6NhJQmdqKBgZv63Yumy + FZCIoL0JZZTpoE4BY1FIRagoKDED+M6skMqvCggxheFOcYdRNk1JdBQIJJQLqkQYAT8aoc2V0sZeMK+O + yi+g4EBp02CJ2WF7f6m9r9TWt2h3ruYXoBngsXGyyHHSz71h3bqbrrv6nDMOnxJDlZVdUiCehhUcu5hV + /BkSXLcB28lD1wl/xeM/lX/VbtiHWvViBq4J8mVAGEExGKoV+qLyqTmfxjlloRy0gaI3MWJ1WKwLeRj1 + VHtLi6nvC8hnF0zhsslzstO0s+jBLVtRLwRrJxG6sp5SjyWDZQKNMPzwhDgQmOXan5GZIqgWdRQ2JhQ+ + AvDGcsaXrDvqHVFTTcQYeu90ZSYyxpGhOAAULVk3b6smi2OCi1Ffr51Sio+Z6RFoqG63nZUghoVRSqg1 + isYwqQDc5oUAIcv6tIwJBQhJGmI+ZUCYYqGkEibxvAsLk+gNjDJjwYToKBAUQpkR7qjE8wp3lIKMaHjY + m1BXyKPA8EUTeu9/3WsepYxD8MB470ffJ2oKKryf+Il34qANHMKgARHJ3SVcggP8owoEAikEEV2gQcSk + DRSEdAMKMnQkeunlL78PlBX5oKQvPQvLb7EYffaFSOnvuOUqsPA5N15CXOLRY7vPPLIDl1H4rjjj7MJW + BrKMVIQWT28zQoJ5+0bHoq0M8fQD3VODksdrIsIJj6fXKhC/nprx9PL29rSDhc6XkbiJ2NDOxIWRSho8 + 83QD1MyhdgrDA71z0xPkBSrghcTKtCkK9ZSOfWbsnpCTtSeR5S4txpSxsMxG+GJ6bqczwpQ46j0S3zum + iRM2MqR/xuUDZGruYBIFGmeEBQWFXssiFLYr3fX1eSAMOOd3RlDMdUd1V23ba2Mw0CMFCzV3l9sYZFsJ + KHQYajsZE0IfXYpL5TKhzAgcAopZOWilIeVguKFOabipddStVVKMAqGUhoKFlbpNlbq23joAj8pPsJBe + 6FCpZbLUOlvqGC91DAgcntI/dvAFN+pT+vbFHkxX4ODO3RNDw6f0bLy3TasaF+Nh+lOx+vN3tIXekt8L + zdf0U630T2EU6vXfaWNnVQlocogU+XI14QlLQH+A/sapZN4MZWp2Sin0g01aT7mzr1IGnJKiMPRAbNpH + 4btYRWiXSqGjkndZ8z5MRh/VvWpo2tgVG0wxZEurykKlgCfmwitbN21E3KCY18hW2WiixqxjQaE7CmhF + /Mts1UytJTDJepSXDyKoj+uXU2OyJF7oEuVyu3bAPFtAAsrNazsKJ8KkkPW0o20T/PtuRI66jLr1mi2v + BRGh2Y1KAIWHMWXxvK34hNEdhQaJKsDi19EJjGo/ECAcJaTX+DJqtDYzQ1S9UGbyOgqJqsdrTbmj+yi8 + zH0b0YJSZi6BMoOOwhqkSCle/rL73//eV3/gfa+xqF6s0YjqxTVbRoY//lY6pXBBf/JT70JxT5nIwW3S + Kj7x8bcBgTzmA+9/LXNBcg2lFnz9Y4qC9yPPAAVh5cCRoRl7662XE0N4/fXk8Z7NK7n6qrPpjmICd9aR + nQC2l4M4plIUWu6EUEYVCKeUMspv7S6jvBszGMrIRqF7ngFhb0cfHnVKOMKyzimjJEcqR0l2GOw5aEEz + /+OempgXgybcblu4o8ogVa29B0+qr4K5DsmNPBaKOdHG9Vh6xi1XjjuazqpV6hqIXa6FtbjN1taNk5Mj + PD/szui7HbqjVa1RV9NnoUvxgpJw3Uqla252gmYsl6Ten1qM2iYVdwxImoEv4/gXZ/9Fx+10N5y0SbNm + UrqGsPIAHxMTI+Njw8sZ79VRgUCHQTW4Soq/IBME/1ZFvkzTstXrlzE+lGCKlWYfKkc2L5RaMCsT8Q5t + REGoA0JjhNrHjZVSW6XU0VvXSRe0X4rCjQP1rWMru3au6DxY17qz1DZT1zF5StDzg3owa2ulsxtZ9in9 + AJZ13n1DoOO0T4Hujes38JH2AM63z2w5y8+lCwhpowpfT+lXKT44rRStERo/FkSE1iS1BxQ7pama3vui + 0WQt1xvlPTHGCqd+VycxeN1muJqwv5KOh3pwy0WS745qORgqwmo4tDlE2p9xz/vUC9ivW5tqpNvbILdP + QuqZl6j+oZF9LjBmdHOr/HQQWODF2DIUC0GFQ08fFENkg0bri4YCMfhGRn6gQGMqps45bmtRCF8GY9JK + uXNqZKi/0p1Mm1RHmDBI00hCiwHK2a1ZKqEUhagJ28f6OuYHO3cOS11ItALcEMxlRFYfWqP9YINNCmGU + gBm4kVFFmY6CSSEWM8zeqAglqv68/VYUAj9GmWFWd8ftV9Egvf++66nYYM289U0vevMbH0dNgQQePGPO + h/UaA78PfuB1hDR99CNvQlwBI/THP/bWj33srT/20TeBf9wvEPjepygiMZGhoKQjysSRjigoiGafBGCw + 9u67rkW/CPqimkDFAW3n0kvR0R8879x9x47uwQeHl+qhE3RH9+3bQpuXnEV+KUFB0pcm5Tc1izVhzw5J + rxjPHWHK8OaQRNjb0VtuHx7sGRvtp73scUvWhZZSu9zmIgqhMpnEU7MmdNcS4wYj2oUZYbbjCd1RNxgq + zA6NOCOtdQ3qoliUijBRUMQZYSGGN6SjBF5MtJJhsA0Wwik1E4mgo4+loVwgcNt0pyibxSq70XRP2dXV + PjTQy6melzDZhWnPgDYX3+ksK8bpb97sKZSD+ULQ0ND+pXPBIPHip8D12yRkFAoSzeOFRCpAiI6QvAii + JJZSINataFDKjKCjcmF0Rti4sW5NSx10mFUb63DQtqao1ogKh3pDiKP4yyClV16M6SKapRwsdfaWOrQi + bOHj4PLOzZtGjmwcOntJy+FS675S505ZglliiMzlV31ai/d/3jdThNOz5a9Y8yXwN2EnIsXQcXORTvXl + s+xXerp538ADDBlO25eVF9a0upELJ+ReZZAW2qSxwnOoC4AX26Hh64vAXq6ATDgyWS/UAC9+lCzGRQjQ + NhW3jqjq6/N8Gb0/1xpNS0MuM1i7Gzasc/wrCArtanTw87rQasHsUjcrjSx6QtqerZSHG9YFizWFw8Rl + dJX4YJHJre1Qo8lUCyeMKZr6rmmnNFSH3vVSFHQszOzWUgYp6yZFYRn+vVrPiDuJatFCTn3AwlAX0hc1 + 4kYKhCGk16LqNZ53uJcxYaeMCcVfpsf9ZSR4IUgp+iYmB2gn7t0zj/2KpNULEE4Jd3TXHGXW2UfFrgUs + FGX9BQc18Ogok8Lrrjv/RmZ1t1xOXXi3JhSqrPAOeqS4wACEb3j9Y/BIaZPivkaU0o/8yFO0PZkdojUE + +Ti4gRkNQYbMFIFAlBKUkq977aNY1dAR5Xkee+w2ak2U+0g17rjjyptvvpQcqGuvFTcZ8JjylFpQvLaP + EEy/zctBXrmJCGNfNAIhGYQ6IzQgREwyLZG84sUqdtsDXUO9wpTp7+vGnUcGhNptNjV9HMoGx23P3VU4 + NB2hAGG0WJP6j20Nf03hi+qA0MEvddpzHYU6jrozu3YU4imUcmeqAgjNWcYsRi2MN6sOrf+Zt5URsWy0 + j5AHe7PE2yemR0rMRUOXJXhcxGB6uxh5GLwHlL4E2sxPTtPIKDR10umg39bmWVgTvDQsEGSUGuNriyue + aUpxP+MVSCd0nmg0SQZhnbBTpXFav8wngi6Z0HIQFBQsbCmtbpYoiWxkCIg2yZgQIIQskxMIqlJiU78w + Ylr5aDcG69pmV3TvW95xuNRysNR1sNS3X3j2LE8tLeIgd6pg8F/k8TIspCv3TFN4jv/b0c2Dpsju6TTe + BDs57BsB1P5yZaBcsVKVT9mU2VcT7migzDiJNEVHvlF+/SCrzyEfL5I/LmjNLiE/Fwyj63inN1HrIQ+j + pYFeaxpYO7PTJCaXT/iVYHajXgUaIsZryQaHS7lu21o2oahxiprICt19RvncLqL3XmjUV8hlz042Cicy + 4tyq1SshA/dXyjDRmaJI5EXTanbQ/NZxNVmFTp+lKkQSRiOPlLnnyTgeFJCGEUZ+fHCWSbgzWRBBmk6X + j+cVTSFNOdp0oeaI3VHrkYqvaaWTZTqs0cGGWyFQGI9hTEioELL67cjqR8tbR8RFZWSwe3BAuqMGhBzT + 08Pnn3/o8KHtWMyIsl5EFFO0Fs85tu/C8w9RacWQ3r3nn3cAV0+ImpbKRINU6kLrkd5z3fMeuIGMJDqZ + 8Dzf+uYXQfjEhtQZNBBKkUO84x0vZQRI/5PGKfXi2976YvAPVxpYNvL4Vz0MiIpY4gntiD70HPD1nnuu + RTh46y0wRU0ycbai4GFEHaaawFBGbNX2b8EcDou4MB2UMN4xz50QKf14HwJK+ZVVQTg2VJ4d6dkx1rMH + wwEGqANdg31I6YV2ZDRRHxB2dqrFaKQpWUWObp7C0epCP0wJapJQ/kD8pdxUNgXCnKA+WIyGDF7XEfq8 + sJBKnyZRGHvZFa6OiLafc7MkJ4taXUghCHRNDg/395R9WJiSy4QsE10p7OLSf5m/TJIGY5feCs7RsYEh + No0pEOavawe/FAWzEtBXjPz2Otd/sjUHzEOsywZAsFJsjpc3rG6s9HZvaN5Qhw0pbmomn3cR/ar1gnON + AoQCh6s31RGxpKVhqAgZExK3hMuaFoKmEaxr5tC5IIVgW18dh2DhSKl9utS5UGrfXWrfX+o6UKoclPLC + NvKnsaD/p3yL+NXFjuh/ygs4/g+tHhZaVzP9BzR42jAnxZpVq13FwTnFtK6qNWrf7wzS1GgNMwSsVYTK + W2iQ8nhRrGPI2Y4MP1iM5lujgSYa923yaXtby8zkONRQ7Tyn3FFrd4SPSXUY5oJxouCj9ZwtBVcdTR76 + rlznVgtaR9QLwWogzOaCDSvo1u7YOs9ri6qJDAsF/JRBI7vm1StZesrlDsAvpd75vFCHMcUjF0aRsN6T + olDduhO7UR8WFgJa03mhISKFyNGj+848skeAEHKpMDKq3bc1oVfctzeayp4RV3+lixgKELSvtx1ZPWNC + MZUeKdMdxXSNwRju2xllBneV8T5aiDt3zG5dmJTWKDEU2yYvvfjIO9/88tc99YKzj+3FrgWwwdKaSeF5 + 5x2AnHLZpUekLrzq7GdRF95w0a23ipoCLIQ7Qw33+AvvBMzwgmHI9+STDwJvxOpqjfgCAI+DSlGON74Q + mHzda5//2tc+wkQQq7aXvew+lIKPP34nHVFinkBBak2rBXU0KAp6MJhYKJFM0BRVFEQ+SHf03HP279+3 + hXJQQycm+EWy6eCUeMrwa/qAUKT00hctS0zVCHmE3eMqpTcVZmIrE9rODoQ+poWXZFDn/mqSpawOeZY+ + HxWEEjbicFjlrxZCm914gTNKQifUeju2GbwPH24UvGa0SyEHpy6uRiqlkBzBxGs7Nd0Wf4nm9esm2RF0 + dYpeOzRObKaezgi9LnQUdO1EZrdtyKdOv5Y7kR3567o4JoxFYQ4LfarifSblu+Q23ywmoDzKXp4R3zX0 + go3rNlb6+1atkXYoIkJVUGzQEEE+Mh1sDhUhKKh1oeAid3pp2LB+CYkT2hfFXE3IokIZFcmgVIRt/aUO + JYi2DJXaxhUI50rd20rlvaXy/lL54H9BKAkvibetmsAJAhSzMn6Qv0Eq4zuZn8PCThvvhMSZ+IDFpPkK + elVf9CrQXomXfgZXySgxVxRaucz56vcmpWF6aoYORjyj/dOiHsgMdRUIiwqKpC4sUmYoWdHwYWBvQBjn + grYVDbVg2g71WlDtZlZ0tLWMDQ/S/3R0tAap8wWsWaSsGRkTZvZUxTyKJJIwCAoz+qjRTdPDGTQundY4 + Uxn8mKtIIZgwXw6ymK6lLtm1a358nHAZBBXNPZ3tMAkDZUZdvnQWKD4mFkNhfFEzWrPVXEQUPW1E1dMd + DTEUuIgNdu/aNnNo//axsX7J6R0lkkmGZ5rbTmt0lLpw+9bp22648ouf/tCPvv3V5569TwLriSc8c6c7 + rmHmAhohK6Q+IxSQ0R00Fq0Lr0XkQCX36CM3oy9kaojEkKgm9A8IIeh5Mj587asffe2rH6FYBPyASb7E + AwBOJoIGgc9HpP+iuwj+ZS7Ic2pH9CJ+CiSdOBqUrImzj+2RAMLD2wHCG6+75O6brzvj0A5QELKo+ItK + 9BIxhDodVL6oaydkRDpUpi+6daQHR3L6xjMDXcN9HRi0AoT+7qmIQlujsTuaieijoUyaRKhAKA1t9DA4 + 7fEldVYr9kXpt0dbmWyH5PWfNiFESpiEERZ1hGl/PtJHpS6EPAVL2dukMaE3yIFkHC77vgCKtFgkc1dc + BuXQeWE2R4gN0tBu8a1nKqKPHRrZmi9WCC4yIKyuDhMmQTImBOqUKZoj0bC+yHRFVxHkE0jjg/u21YJy + aAm4prUeeOOjgR8f+ZRBoJhr68iQx2jcbmvXwI5dh/rGtza0DTWVx5dtGtCKEMkE4KflIGSZ9oFS61ip + bbLUpkDYOV8qby9Vdpd6953M8v7MP0arjcBzqfnsPMCq9WpQkbq6pvPKM/8yS1jtKIUngNIJcVE3Uqcz + ai38Runvx3Pi+sWWzx6TNEXtZoFHkwFkYWrogsK8xUwOC9PSUHdzuTPbpoMpVSzdLVaTReP1Fgiihm1p + cyahxkSyaNbMcTVh7sJOmXLqL6N2o8FlNA1sy5IovEeq8kFh0BhVvXpLLstWwELYN84jNWWFjn/Wr0Uz + zxDFaDL0YFkxI28wiSq0PCZ3XNMbpizsgk/fKsp6AJJicWpy+NiRAyNIBdtDLWgLt022jC9jOgpEFFP9 + HUQriK80wzAMSLdMAoTgH0Dosnrs1mZnhCyzeW5s65bJs8/cd8v1V1xx2TGyCeGeHDigWEhdeGwP9tZU + Y9Rk2JvBWwGiYo/0UmICrS5ksEdpiO/M4y+8Q7qdL5OZH1EVL3vpfa996tHXPvXIK14m4Ef9B1jiGvPC + F9xBL5QpIwTRB593U0zfveLm51wmKHjdeUITveIsCDLWFLUYXhMOwpG54NxDF513mDEnQAhHRsmi4rIt + qgmpBcN0MExGh3BWw2oHwx3tGIuzWuegWIwGy9YQRqhvYEKZyTluh+iJzGjUBoTyx+JPs3VhxqQyVh2G + wwiiwhF1izUqwiyYno3OcH9f66ZmCDKGhUrFCkDoPfng6uAtCj0nrWOBWML7GcgK7Vt0e4eIWZ4nhlEU + 7UaD42i+IlS70YCFrppIHUf1ys0E9U7zNslEgoIZFS4tBCNfRlYGHow7gCX3mSiLZRwuRVdXh+2b+QV5 + kfmJDFyDBrNbE1KM9kKlIly1oV6cYloxi6lvAvZa5eCGOKh1i32MAqSE60KfWb2ps39qz/5j/RPbsVVb + 3jJYDwSajwx9Udqh1ILt/XXto3XtU5SDdR2zpc7NCoTbSpVddX17n3n0kFL3ROM6HgAL6jhC+BNCDq9b + SLUEHJ/oZz2d31C8YqL1DLzK7m4M3U/Ny3sRzD5eLWho5x9ZbLfPzne3d7rpQQJ+XubVoIzm1IRivVZw + k7G5YPgXITArBL2/4Vu5mlWg08bSMaFuMwtH6mGRRWMrWLojsA8wCjn1mXyiCgjdgziPgoUYikhDCGuN + rT5qc5Xri1bJKuKwJzhmsfa1bmzm4AYQ2N2NpkLEhXnHtSSeUGkywXc0uI8KQVH0GF3tXR2t05PD27fO + Iro3EaFxOljBcdTEaEamXDGPAkkA3NHNg0KZMe7ouHFHRygH8R0VWb3EE1IUTksSBWNCU9bTIAVXkCJA + pQELGRYCPBBnqAvBQnqkTOzoWwJUcGekRyrcmcuo4TDFNjh83vNulKnhY7cBcvLxsdtf8NhtL3r87he/ + SPqfAn6P3fboo7fQBYUaCgTSC0UsiCQDveBtt17utSA9WMQSl1x6Bm5qoGBoip5J1sQ2qlVeHqpHRoNS + Dm6bFGe1AIShHOR3lOngqPiL4ikDX3RySKKpoMnQFyWVd5TQCfEXDUBoewiVEgZbGZsXqo4+yAedL2r8 + XqeMcptv5M/Bn8/b3QKEugFKpoMSVBkN1YLdGhFIhPZxp/dFc1uujKsVmhOyPwMCg3zCIDDUf3K7sUGJ + NrRKxXo+tD0yslgmLoyUGU+iCFTSFdJxsRkhvo8rqSGpFGs4q8UMphQIExGh5fRmrdHYFgp6YltA+Ckt + 7ACaJJTNgJAfxNUi6W86WNGENhOz+SG+a4QL1i+X6MF6a3U2rK9fvVGqQMW/eoFANIJdZO3Kx/WkDzIF + xGW7Q+EQ1UTnso39K1uHMNp2Q+0IhH11kEWFI0NTdEIKwa4tdV3zdd0LUg6Wd5R6dpb6numKkHeZNOTG + xtUp/NRc9QsAdhpFHvsVOgTGMfkh/KN9QQVwHPA+mdfAnx9ORy4GORZ5i1XGtNFbmzfRBaQuTdubOhRM + gbBYC8avS2WnJ5/8UzjMqQnj3q0AgbnOp/VLq2rB3A6xZl/FEdG2nPkjTgqTAb6xRgusGRPUJzrCcDuW + g7mKMC4iWRiTWHVER2OTElpRqCgYSKQFrzXrkSbxqpm4MJaGiXpMF8dUYu9Lp4vPbJE1aqIBYZfK2to7 + mA4GoxmxvhQ2RzNL+ezs2MBAWeij1iZF9NbTJtmE/Z0ksO8Y6YYnSVdwbFhEFEaWGYt2a5JQqGEUACFj + NlJtQx7FbhHXS10o8UzbBAuPisT+kkvOpDVKg5TSkOnd9c+6AKE9bVLgEHoLcnuBw+c+6757pUCkyLMD + wKN3Sr0IRvIpXwL/QE2UgjIRvB0IvBK1/k03iVKCWtCctflZFreEiQxVKeVg6ixqKKieaiGSnt9CKsKp + IdMOurPa8GB5dLCMBfk2JRBFvmgHeR35pmiWTa8yTR8WJkajNEgDazTRToB/wV80DAsdBZ0v4+Ekdo/D + YaG7HotCrQgNBfWs85NQTsV4frqIsLHRsdCTxXKC+tRrVGilqzTpTBaXIhCmDFI4Y+zcmCnGNmkm55VL + NRsNZr7Bdl2nqokCWdSWBVsfWF/gXe7YvkVdnVPLqlzcjS9BcXe+vH4JAYSMBt1BLcNCRUHi5kFBGKHd + TAFLWhHWrStLacg9oh3EZRuL7cGGtmEJJkzMtcVKFCBsG5TRIIVgzw4pAXuYDm6T2xy9e0r9B05m9T6F + x/B3wLojFd3z9tSSsWfPyfJOy43y/TSw0DqoLK+n8BJrPfQ4BZoUryHh4QRl3Mm8Bs4ouP509r3gK3xX + gReqw8DwEH1/AmvGZs/HmQsmkFkHNxomPzOAPAoKHHLhsIPTP1CaUBjbomEWmIURVs8FU1JZWhSarVrN + fmlsxWRAmPRLU853zmjGdISh+aPtUNtoL9YXtXlhykRPzDsyKUXaqiqwZkJULwx43ZJ7g9TC51Q9nc0I + vSiUMSEpFpZZH1XYMnlSCBSyjLpvtyV2zzq1Egg0lxmTu3k2Bbpv3EpFElBpH+/vQFnPSIykhfnRHrdb + szGhBDNN9E8rEDJaM2U9jtUWUihpvXvnwUKO/fRINb8eM24qM2Z19EjRVCBpYIZHjUibFPrMLTdfalND + lA/YZFPkPfe513HYDTCPA4C897nXkbJ7111X33XnNZiIohQkVgIHNZ4BWKXvipGNdERD9K6gIBh85pki + nw9M0b2bjSBDIWh6CePIgILutR2AcLgiljpD4rkqNBkx2hYd/ViMXrLBKoRb74iqQKUqg0npozyGVOe+ + 3q5sTBhmhMaXCaayIVSEBqn3RUP0hGhpenu7+vvLfMk2T8R8wQtLaaKpiNBGg9lRW0qfyyNM+aJxEFC0 + WINSrQkWDAxdVpibKfj+Uog1MeNFrjvZnioc6oywOpu3GgIXu8eKQspBOmesmdZSih0n7z3lDD1E1CZb + c7CUtHoNoCeMPljMSHdUpoC0QykEbS7IxxA6yO32EvcLBApHFHZMc99Mz8S21R2jShw1fzVao311zAtb + R0sdM3XdW+oE+XbX9e5iNFgHBFILgoLPOBBWg4GtqccFuTr+BjD+jl/bgZfVYYTyvq+hJX06GgZ/qQ7V + vEjZ+eRLTKy6Otpan+aP8J/FH93s208GNeOblgGwm87Eb9chYS3TUS8XORe5PNatEb1jKAi1MrSD7v3o + 8KBodxKLtXwvNGehVBMI7cLg6hIXUM1w4v+SCVrFQIvawbytTFQ1uVm+M0ijrNAu6eyjKqsamptlPudL + g68Xgn9CnAmejckuO+i0Uu5otQOklYM8sxH/BAJTIAxEeZsautFMIY8pXUDDdLCtLdjKdHa0cBRcZsyq + VCpC1X2brNAmW2YGxpgQZT3dPxGP0wwcFfGc6Sjw24x8mWA6qlg4DJAgPKBNurBAj3QCZf2NN16C77Z4 + kO7Fg3QrPVJR2R/dTY+UKk14pJcdgc9JgUgBx9SQYs6qw9tuuxI4BOFuv03khpKs+8ANjBIpGSGa0lkF + L7EPBQhvxUQ0VoEAKrCq4RLUgmcg5Ee5cc7Ze+jKUo9CkMEHFY4oRSqvLQTwLlALBhQ0Bf3k1IAMCCfQ + OZA+aF7bEsExPSRKEpqiNIpVPtiBHV2SQZh1RA0FLQDZ4+nV8a4ZyBwfG6A1bTzSqCYMmnpLXxKD2VbK + dFyNsza4bIY0fQLtoPint+H6RxhhAMKIgpF7lXNWK1gdRfmg9iqc52UTQZsUngAIE4uJhC+atlXosgRv + iir37WrT0RxlplAOWrdTxA/5AApdFgKlQNtOosqzZcQnLFXUhHRSwzOqlNCwMJhuG1lG2TFeDnoGvSbR + m8W2H8s2DTZ0jJC7FAX1yOrFYrtu02Bd61hd2xRYWOpaKDERBPkGDmZHAQgFCXB1q2V3eTIL92k/Bqc0 + OurWLOVNlCJvWbHICwYq+Z9hlfVp/1z7Rp7BGC4KhPKnS59QJlinklCRYF6NhAq+CrkL8K75smtORgMl + JumgxmqvMBeUT/WMlC6oPcbO2sRJNN2XyWmqQX9ZOeg7uHgGG1kmfCxIJuLFENom/M24aPnbSY24lBI/ + xF57UVglpdeK0BLqo/Nh3mVmOeMN00LZ/d4j5QYvXChzqxefEarvmh+2ygQ1YWyNpqajjoheCJoHqU1o + Cvp6ZU9IfeATI7uhXTIpB6OIXtqhgnnqWmLgx6Jpa26KhdYgtWU6iutDUQh3Rruj7f19neT0Tg10ia/m + SDeyQgujoDxKW6PmuGama1YXUmNtmR+j3rrs0rPOP+8gtdee3Zpfb/NCIuwR2ov7mmgqqNsgszDMAw5R + GdLVpDoUHo2A4sU33XgJQPiOt78EyTzQSPOTCAvqP77E8ZybLjFq6HVSBZ6NNgNYDXrBCw5Sd6LcAHf5 + idSjlr4LBALMmXx+fowXrO1Q+RXUWVSaohS78EVFOEHtO4ylQA/loEwHR3tQlUg56IkTEItonI72BVuZ + pBa0PGR9q0P6UuavVsUgteGuYSG3QU1JYJY/sYRwKRB6Eq/uimLuUlILZkoJ16q6q4N3RzknsT2DgGUu + uAaBGfM5Nw70oUAwHZUGSQhgUtVE4jLj20q/fIQgU+UymrJmzBm/uih0OOSrlJ28cgdCnxTGhSKl1+Wm + LXHpqc69kTVK7l2KlF5ClzSwVyOZqAjXIKJvrZfKT4aCS9Z1N7X3NnUMSI9U6KNgZKdOCjuEPkMMoeYu + WQCFRdJrUUjKBBbbo6X2mVLPLuGI9gcUrOs/WAciGhDyGkjjhgYCBOKMWtWsM/79KTtwnjw+scqx1hkA + A4ED9IDaWk7YKXWEOPkf9MN/ZPVvQZ1Ep74AhEnbM2eWZjuDdBYY1YROFs2+qA47TZuaN2pUb4TCiImx + CxFQ0jZo1ly1c9S2e3Efl53QvqezL0nJXNBOJDoKY2MXiDPWPs27WmQ+h6KmMDjMvDBy8bzcbyRPQW1V + U4g8v3UjxLxEPgEiWkJ9JBQkkYQFA24byRQEhYW+qEsppBx0xzVlQIBVu3fNz2+e4DUIUT5pkFozzVN5 + 5UYMKYR8IaH2bZJQAS7KoZ1S/RiMZiIcRvdRnREaaxQglMx6CaNQHYW6zFAUzgz3TJDHpJFMIqIQ1oyk + t1uPlEh3sFC8ZjaP0CY1+gwJTXBnpEG6b4vOC7fSI0XGABZSFwKHYOGVVx5lpAeS0SyF6kmBeI0wSwFF + ysQLHn7wOY+/4K7nP3wbBy1QvLNNF8HDeDCkGL4d/KMKhB2KeP+C89ELimoexIWzCgrCEQ2FoGjnrSk6 + KcJBtRWFLIr2A+KryufFVhQG0ML8JL8aKGhk0W2j5TM3Dx9ZmJgZ6qYcpHXMbFWyO3o7jx3df+TMPXRH + RY4CEFotKDQZo4xqa9ri6bFQpxbXP4rc2WrK+uAy09ISsbB5LfdTOA4N9lDNO2uUfEphEG9Y6yZEYc+U + z2CyU8uZWVUuowAhAlMJmHCzeNnAhZaGqGO9KNQTPumLJrPzpCmq8wVpogS3JuOjsQUXrUWRKSPzCwW/ + aslTOtqQBYF40UcfvvOuO56NOpl1I60L80AYts6ydESnKl1jQqyNrzZ+p61ApExI+qCF12vWoHBnoIYy + DgQI13avQG00OL6xMrYEmSDloFBpWoQ4ymEdVMHCHpHVc6xDU1jRGF7qQnQUmGtPNYwe7Np92ZqZs0NH + 1FCQj/xj3cIemHGR9c4KaMHvRFoh0s7TQBGB+VOUE/AS6LDzx17sx0ndpk481AOn+uSn8StYQ/E0vtEw + rOa/mncnDw4Nz7S4TLHQ/0bJnVb/iTYfonWhInTMix3RXF3on3gfI73Hy0Hvl4Y9YCGcM34KzJNPAmT5 + RYLzS6XSjdyJ6w0M44aOdc3bSbyAbccaYdJaOml8DK75KyfHh7bMT2GRYzwa9qSdHW08cyIrTFAQh6pQ + C2aUmaRBWgMFfZGK9Z/MfmJpSFEYc1YNCNugA8zNTI+KoNCY9HpEO5IspD7KCteiF5ydGYMLauxE+WjW + o20CgUFWqLPDmEehrdHuVnp9faoQt5Am1np0FCaupxjaST00Wpka6RlLsNAMSDWPQopC4BDTGemRRjPu + bUoixcaTotBympIe6V7oM2AYgz2ILSDZpZce4VNAUVumx4A6Sr3rrj3v2ddfeDt0mJsv57YNAnkAD5Pj + siPUlJBimDuef/5+wBWIFdW8UGMYCkq4hKFgyJcABSH1KEHGUiaQfxzat33HthkJmtB2qORMTQ6qdlA9 + 1bQW3DvRu51KcaCLnTN7BdNL0EYmQR5aqXRE1coc/EOpSWYTs0CDQINDudHajKBFBA9DWPOMgJdhHGgU + 37iP4UlGR/r4i5MrGRqkaijKmUAQNG1tbxhwGrA38uglUU1gNGqt0Sonh7yzWmiZJm0MOXuNJhqBUPOo + Ix0mlIOZgt4m6HZBZZGE0k3RjgtONO2tm2AMFDhrrP+st83ryTskWTdw4vLct9D1GRzofeGj9z7nxqu5 + Eq1B6rMSpcwEMkGyVmQ77KQiLBaFcc8u/jLiLGoNUkPEFWuXb+haLQ1PqsCe+vXllS19yzf1128gX6JT + GqemL3THGRsiNgq/prRW4FPUhOs1g1eO/srWMw5cdVvrwnkyI/QBYWiN1pVYPcf6Bocr/dURuLxK1q3T + MDDjG9lBVHq6Tg9FFvsu/gDsavjLwcQ9bYiq+eQMeAHX9Es8v5i2/CCJqfr2ojYNU0Mr0RIIdClFIZVC + HmZ1ZMFQJp5VBo25w1KYkma9b9DCnbE1Gogz6QlttLBwncgts17TQ2tEu80lx/XGH8eBkCyIocE+tlls + ObW9KY1vrRqXATAD/T30mqLEPiBi1BcGEQUXf19vN49U8bBYj2pTNFgs2ozQy0GeDScd11o5Gd1bo2rz + H9wd09aoYSHfrtJA6Xka3y/PHW3kq/hYDvSVLafe2qEawxTUZu4/EqtDaZNS/7HUDg6UfQoVm3JFFEwF + hRSRk5NDZ525l5XdhfYS1dvXSQ4tKLh7DHexytxoZULsp8V3NLMeVRtuc+JWHqmUhq6pwIAUVucDD9xE + caaaCuaFO6gLyX8wP1L8PzlwJWWwB6SJ9P6SM0BEDkCO4/LLBPD4FHU8ogs+Wv2HdyglIN9lrjFMHzmg + 5FAIml7wyJm7jp61h3pUfNRUKUEhmBBklCNDU3dmhB5vGAoqQUYCN8jgHdIw+rHKgan+3RO904PSLqZQ + diAMcRORI2pVIGXi3PTYxOjgzOTo7ORYF0L5uAWRZnX7xunJkYnxQf46wm+K/mphH7NpHQY0w8O9FJcF + cxn+9HwL54x5ijIytPOHT20XlbYZIi1L7GMEFMNJaO16UU3Edqj384PFWvWMMKGGBvqYbjGxm2/iwU66 + zl9Hop3g2uRKtP6nwyGYR51DdwMeDd8L2Ucy1fNkUevx8HPXrcWvMbu645qQeWvYQlEYEPpK4ptsUVPo + GmH3MNVBagExsa5+dd1SAULlzqyGR7q+o79jeA51oJSABNDTDl0nBV/Q1EtFuEmy6RUUQ3Uo0nuyCa1A + VMc1DaZnXtjQOdpQnqnrnEFHWNezPcwLfUZI+MPFZxzbNbPQsGzRUuxU8YxfHp9lY0jm0EXkJtVxSOnq + XyyJqp+h0Fo81de2GBByKgReJviky/UP4gelP51rYGx0EEioXTvqq4mVX7jt9yRf8uIwe7DzZQwRq3Cx + UBdm4Mfl1N7e6gyaZEyY8aSdQl2tI5R7Er5ohL2MkGa9Uy5FfhB2aKwLfk1Wma5FA9LEj5stLQsSu1er + JqGC27pg4d1o3mk05bfVmYtxNHIMq48hItnfaOTRROedZcKAJwuj0KUNC9DLLj57z66FVDuY82LeEOIJ + zaCrEOFr9FHrjoaiMLqPxumgEGRcAD40XEHWTUfOWTMyKezvxFRzYbgMEO4eq2wd7ZkikklxIkRSKIPU + symopTSkSbDQNBX0IUGyZz/7Iu2OLpxxcPvhg9vokRqV1Bk0jPQoEM87T3T3HIZwhEVwCOYJQB6ifcpc + EEQEOJkCUv/hHQoE8o1EXoB/R87cATXmjDPk+ZkLXn/1hc+66gL4q+apDZGH+aUWguIgw0EhK56ioPh4 + /9TE4PhoH+WdASHMIPhBC0Pdh2eHbjhv/7E9c+KpJjQZkQ9aGG949xKCjO0tyt3t/b3dZ+zddWj3Dio8 + fNSsO+o7Ep3aNmMMa4nKMWspxGyZoDAnrlcGab4pGjoHQUFh5gyRKZPa29oskJ+4eW5ycKBinyZwaGwv + G3IbHEZPQbOPSLujevLbBpFHpuqjgum2XHdRwmROpLYflatPOd6gEtnXR87chxRSiJxxd+vyCfDNlpGo + l0jxL1htJFPDDBFtFy3waKwFRUGWAAVCZY3WwzJdXVdHN6tRsBBZ4TKpCCGRLlndvFRk9aoXtBJQRoNU + fvKpoCCCepNYNLaW9B64piXuMd9RGxZKPK8G827gIJWXeeGUEGcqe0q9sEYPilOluDU2rql0dDc3rac6 + PSVQqW6lnvDbeftxHzhOmWWWPDYM429Z7upAknHCp31mH8CphYadUItn9mmrn42TDMJxTR6plYbxY2Fz + EN74Qne0qllqk0EHwtCmj7iY7c9is15OcUb3zGhdepjyZey2t0Sq94Pp2CB0V2okFAbGtl20rp1IRRSJ + O1SQ24cRSIPQZFgyZHu7ds3G5vXsrAMQWgcprhG6dtg6ItQDdW7MWKOWAGcVIUDY3dFOgCoCefgvtotP + 1zLjxNv4Bx/ImalRmmxJJFPOaC0ul46CWWYvi2+07wqOo07W0CSEwBQNou+kpnGXmb7eTqFNAgkDXczG + MFXZRVEIa0ZN17Ack0wGHqCloU0NzXRG6DMkNM3KpNA6kJZZSI8ULDy0f6uxNwEqyJyUbgAYcAiSoXNg + akhFKCoLEO68ffQ5tWTcb8h38UWH8Cy1BAn6n+JZwyzwKGXfLupLGqHgHxUnz0xHlOPokT2YqKlYYlpq + QX0xphdUjqigoBwTA7OTIwszk9Pj9DkrgoKaRA9plvnooZnBC/Zv2bl5dIhyMABhcKSzYHqRwyc0UWuE + cs9gf89gf3nXzs17d28hY5IdCToWGp5IILiN0J7wLKaAFiFpm5hoKGN/5ZxmNFKl0qAJZVcp/klFmGuN + 5pJ4Ucp3d7bt3rkwNNSrzqJI3dNaMPRFj1sOhpBOA0I/3KpQmBc2dw9S3aCjZ0q4pmG1hLnqkMK7oFy8 + vBLSmkAE63MKOmgFWVNKGOFw0Y5owrlbQVodFRCSZk3lNV2F9UgBV+oihUAFwnC7fjVYKHYzJi5UxzUB + OYpC1dSXmmiNtkKoKcmXAD9SKRQCQ5u0VRg068pWEZrdmsTTMyncOFS3aVhIpN1b63r2lioHSn0HSxs2 + rF+37nRghvemo61tTWPjqUKFltjH6zfa8iwYUKqbHBu54uILODdP9ac8zcezxLO+/hBmkEkXtJplGr6Y + 9kvzjVMDvgKhJkW+Qi2YAWHVvDC0KLynYedo0uII+zuNIaxhtGYQ6BdMgS/jo3gvB11K4RaIsiFrarSI + 4NR31LBN9rzOFNdBCPG8fWViLCV0O4eF1IVSlq33yUrsi1ppWJspw2hHgLAZOZYDoWQz+fhHTLc3NHV2 + kAvRYaWAEehNRKEmanTJgvlI1Ncr51A1hZZpwEcKFHSBTLB0WBhkhSYfjKxR444G+qjZrQXT0UpHf38X + RSE23FAlwT9hzYx0bx2hYdgzOSJ+K1o88VGE9pjOqA2pjQyFRErjUWQVZBbOj23VwEKJatpNBC7WM3P7 + dWQIbuH2AhzK7PCIiO4V5HZzCDSetVsVF3sBPDm4Qf9TwG83xd+RI9JipdHKEQUSxArKQTs0I4huxTsm + i1gyH7XMUFRccvomxgcmxwcZzlERgv046cAUFekIv++QSCaIHqQpyhgVGpEoTFRBSJrH2GA/vWu16fHE + icAU3dSybmiw8uADt9x5x3X0S/mL8FZzT6UH7zyp1Bn7aUUYUNAVFBHzMlsZ+6NDlmHzpGeCVofrQ56l + AKEYFeXCeF1EaK0IG0ibfVp6ilohaGkqKU3GBoTeAqmlnQ/XTgKKKQctE0twkZFgkXZrDBFt9hFoouzR + G1evX9ukxWJ2aSdzwSyGyduhhdZo3GtL23PJErImVmsSoWiMYQLwkWxeasEM/+oyOKQurFumbVKBQ8PC + Zqn8VDsoDBpuk8drUb0goqOg0WfojgKWdEdVVigHQChYCIN0TBikmMuIpn5vqedAKRAHTx03gMD+SgU7 + g1P9VhhHuM/VrIEKT8WKDp0VkwLW2FP9Kf91Hu9Fc0CtRV5Z4av2XYvSbRIPNm+c2rdw0mJzwTnudFOf + FOpAW7mhQccawE8RL60ObXYYUDD29/1Tu5GbCsRCUK+lWvSzuPHMyNn5ib1colR4nBvRGjFgYXdX+9aF + acq1VFPYoJRxBhtiXbhKEidYj8zGkIP1ZQomZU8XqwlEBvh4ubowCX6L3NGgcc4TRyXs1w4xDeFY18gN + fhDLH0OgJIxCgNDkEJmIItFix+5oUKcBftQc1pQL7JgkHigzmlGiR0BB4YBI5DoHi36v1kD4ao6b6dpI + N3XhtpEenFZGB7songZDMIVhYVIUQpyZovcoQfZWEYJGMDbR8Aki7poBC5EY7t+PK+mCkGgObycRAkiL + xmyGcCgupGS0nqfWjjttBIhhDZWfHzRaORT/ZplK4qDGXJDnpy8KO8bsY7QWFEaPtUMlXEKzBtPSFnQn + i5jfbvtIz+6RMs7j8GZHxV87jAaNSWQHBd/s1Kg0k6Nlnb3J3gjlzZ+bG2fsyh9CZS3FAKa4ZRHVhOkI + /c+amqtxZ0+5g/NTXdb8cB1FjTFhQU2fSHpiDGEmnMjJB701GifiOZfRCHseOpEpjtxcLe27cNueJxsW + RuFETjuxVDiJ0jZdhBmni4BEI4h2OPPUDspjX1Xi2uKAByIup1/T1LBmBS6jltAbK8K6Ohqk3GOd0tX1 + HPUNdUs1m5fS0ArENe3wZRraB+tpkK6mNUoGxQZSeUtrpBy0Q6MqEN13lZp66tZFcb0AIWoKBUJcZspb + zWimVHkaXqO2Vp5Ga5RNS8Fj7CRAi1kq09RTkwxasXQST/6f9hBxCUhki46Fjn/JPdYazeAyKQRzQ0S6 + HbRkZOtQzKwXLT//DBeTkWGhQRqqRk5uyrI8CgYstG1jioW5jmgMI/QaMXWscDWh3ZlOBxNBfZBP8NX2 + 9hbmKJRr3E6dZQzzxHe/YYXy9zY5EFLS0d21IJve3m6GQxDQozYryJZ9WBi8jwumo0E7KCjojlnRNETg + cHKCtXtkgxhrSVQvBUFzc2yQJt0zdZmJ4notB01Q4QrCdIEObEZT1kc1oUy8uikHxWjNXDSNFVImkkL0 + 9TRIVVc+Kg3S+aHuSW0hDnFoUSienLivSXfUYEZajmrMLUAo+sItYsAm3p5aHYJVYKEE/KoBDWWc9TM5 + pGuq4j8ILzJNPLxN2p5aO1L5SfGnzU8tKIM6gnsOHFywcEEBWnVQoyPKjzPVvI0GpRZ0FIw+arzsoWEx + CkA+j1ZS3NRGK3tHeykH5wc72QEMyLYgMEXFprxLEhwpB+la8xGeLUGDAwPd6iwKCtoROtK2NcnL561e + 12NjyFK2ctC7oxuahRgVcyfgxYjQnhZCYUxoOyRrpKczQkXBaCvj/tqZC66SZYKOXsrBtCmazQgT1mjB + etBaKelMQfofyi/zpovTs41cGtszmYjedBQ+418MAm0F4CNcUyKoadVIpGBx65yxEPRLUhQa4C2pb1iO + UTQi+voYVR+AUIpFM0UWTXsdtwkbWCWlIUAICi5ZXiLVfu2G8fltlYm5JWvb61YHyqiAn5JlMtaMiCtQ + GQoQWndUPLi9KMR3tHtLqaJA+Ix7jVZDSk0h/KkijyRWLVl2SkDIW0kywQre67p6OIbQsk71h/6gHw9O + qR3ucgPrdEsRy8HcXDA//0vboUXHbUW5wrgwFHnWmlcU9DZpUBDaaSvbjaAmlHl2ypTxTZ9fBoVhYUC+ + fE5vysOWhoiYOQWtoYsL0+owMb/IZRbmt72BHZBSyW2Ta0uGc2esFnSTjmRYGPT1BoReCwJsnZ30XNd7 + XEAGhGI0I7gImC1smZ6dHUc+EXMKs0gmIdFELIyZdkFfb/pCF0ukwom8uF4jmdRZxgMoVBvQBu90z875 + zbPjfNrf27ljfmrn3AQG3FuHJJUCjxUbFg7jtGKOMxEISWui0grG3JNCIlUcknmhVWaQVgjyVbiaQdWg + zdI5MExaprvnCMs1OLQmJ9ILSsb96gvDDTskU3fvZq0RdykpVNqtfDRqqNl/S7hSFAsqO0ZM1CRcAuE8 + enn3jhmGHSMEGVBQs5bKEIL2jfcdmhiQ9N3+jiHK4sRcW9zJYwMZOOR9q/R28CtXKp1BO6gOdhk7JlMK + mtd29gdKm6JZAFOQ0stfFiC0ZngCeKFzkHnymcWMAqF5MjgiRhGhj6s9jD4Uhe4mU7CV0dM7ZK2EXaAQ + ZMxxKQwO7BoJvZOGFRDHGHwZ4EUamnVHU9d71RGmhoh5sps1RatnhLYPxtxp04bmWBEqGyYKBwsiCpR0 + mGsrFkp3lLmgMEU1qh5uvt7TAEMxLE+6eulKJRPEgIVLeYAIBRqwX+7saWjuMNWEg1/KGtW6sL3UFGeE + mtYr+vqgo8CJe0iSKLq3LB3cv3ry6A96tS9B8GtraXmaldli3y7v0yJVqQAh4YBsQ+rqEbDTbD/VX1X4 + /U1NP7gxIS8eK4W0IrRXqOdA9mITskyWSpGUjFk5WHNYGM+nzGvGUDDBQgNFuYcze2xsaPeurWxI7QGp + fDA9sx0LbSSQ3zmGiUIKgX5bt5zR3jB3QebcnrKBfwiRyRwUpS8abbgTHWFgjWZGa+o1GvT1iaO/GXkQ + cGhGHpmCUDkytLl6K11kSuDHnZBIlTujS5tS5GmaibubLYUiqLcjCgodCE1ZsYmqImZQODsmcEdbN4j1 + dvtGGxZaUWjqb0ZckD4cCLkBNE5NDD37mksP7N1ODUR3dHK0f3K0j2HhzEAnWGjBFIKFwXqt29QUTArd + mFsSKpREapNCgUONqrBOqWIVRZsgonzUGwwRJbxiN5Ui0EiTU4xpxBFGDgpHcFE+6ldneLAeswAqyv1I + DRWlPLwYA92sEFT7GBkNjg+Agk7zAQLp7qqzttS4JO7iHrB3rIJiZGaQ0WA7WRxSGXcLTZR3SW5oWITx + jMSsPGbTm19d7I4KLzT8CdTrR0IiW5sZEHZ3tUUfmRjJKw5BNakx1gWV2bBUfpn3kNkPBfwz5Iu7KCXO + 2NQw7zXqnYkczzmeun4Cu798hMDQCynQZAp8Gf2qBp/l/O5Fv2tw6DvR6ks1HfkXUDBWfomYKlJMCw3S + RKmlK4nK6zHyUoJMGMcItsmdGLYUN+/67axv3C9gqQdWIezTl5WWrSKDsGRzQS8ErSMa0JHWKHYzIp9Q + ixkDQupC0VHUb+xf0TGyrJ0G6cwPAwhZz9lanwah5iRBi5WaP1ION+J3alFUn9p02lp/ks/MwyARtbW2 + 8lc/+W95hh4ZpoOFGtFLPH4Kryr9xQ07izVg/Nx1FElTNGCf14WcprarmN88fXD/LthMPKFt8PLyCQ1i + 0R5IbJA6zZqGSjSniN1RuaeKNRouP8HDDPwSTX3qMlOdRJER5GqVg4njmhaCokdWMl7KR+juhElfNp5C + Uem1JqxZeRTUMArMlNc1UiWgQqPUM1DUYWEGgdWaCvNai9ET5rUWGqRmYpISRw0INSfBRRTGgZRPWeUB + Pzp+fX1dwIAZkPaUW/tJaOptnx3oIpgC4sy2oe7ZQerCLkmxBwilupIeo9FnKLwMe8SYWwsyc+ieFyc2 + qQsXaJZuldmhHgKNhotWKUqTk5ki0GhopxhplV90zZbvsiglmUFGpbzHBYO73J7O5oJBKcEs08iuioLl + wQHp8YKC5CvhrG0RE7P8Un0d/b051SAoONhbhu3JWxRhj1gPYR6ZxSgftQUtrdFkIxJqQe4cHe6HLyMi + Qm2ZZkzRGCqS2ibE2XAAQk6GsdEBRBeuNzX5qcEep4c5M9jplJxspmR1GU/mMhqZMjkpfex2SMNDTnut + AjNQrEEZlfGTjduz6aD6FKbdl5pbVae5LdoXtc1vVSM0FQs650BXKmm9RlAMDafRkQFGHqwA7Pzzw5p6 + iTdf3mAVTrKsAYEsSmDhypKMDNeWVq4Vvqhp59ViRhmkmmWvN0p0TZsIrDCyjMOhNUj7lmwarN+kwUxM + CtM8Qha445M501Xe3oTqdV8EmU87C+LpwwkQSFM0lYJIi1r4I6cAhDIjXhwFpaRfupye7dN/tTWfwco7 + LxFj7zRUizowMzqMF5F+0uTc13wcaKVhAoreGg0VoWGjWpVm+vrsjNc9B2YuQIsPDr01qtdMktUi0WXF + JJdcj1QH7IXWaIqF0VxUdr4ZNTzG9to9KRBm1htVOb2Fvqiz9RLXx2DqEXywYqc0rlxZZj2jSsZC1Iux + JrBEVjNfzhtwQynU6aCmvErxEePu7J7Mes3g0FMprKDJgDAmJ1hUofVLR4Z7x0bESxMXMbEh1dhe0grn + JMK+mx4pZqSozieHxZyaukr1hRWqyZmpYQuyN5W9W5ICh5t1YmelIYio40OOMQxftFKUMlGM0AC2hfHt + 8VOFSSn7PEEJUsyO7TNGwwEpjRq6ZX7coiTE8k2hNxSCGq40RlGrqsfhRDgfxBJKi2UuyMc5jZiAImSq + wVAra/e4t6ezUu6gO+rMW5+z2psm9NE8ZcZpMhpGLwCZxE1IHZ9yZNxRlhqxr68bI1PqSPESatkwPj54 + 8MBOcDTxIcoAj3PDUincYs07ECGSSZT1DbQoBhn5tm6KwkHbwOUiNgueMlbt6VUgF0JBPgFSYjIl5LHM + trBmDtpSwJIHZ0ExGsbrF2+qrMgu9nwHqBYi+gZabJyZU4IKvueWTtiypQvz0zPTYygpYg8sDGtYRFrR + cDZtYEVJldBaF1LzkEbXWLdkTd1yiDNrlUdKRagJvTGqnkpRmTVNpZXr61Zt0vxCURN6TqHSR4PRTEmw + UBqk2SJcqXTt3rVQiBJcbJVnK18NEizKvPV86QeEDSf/tKzkyGDSmaJVR4s9A+9+Vye9keZFaZpV38k+ + AKwVj/JTAdfj/Ar+PMmN3OCQrRMnB44HnKhp8ZeETyxaFMYGafi+eFKmLjOGg9oy1TNV7bNzZDDuNKe0 + WA6GpmihNSoXj6Ji9eXk3NHIlMlhYbpd5TaqCXbxpESlZhlOECgAoYCiO1EpFlaXg2ox6jvxbEaYhFFk + hpCuJkxV9oTLw8pJDbh9RmhGzMqk+P+6e5Nn2dYku+v2fd+evj/n3nP7/vVNvuxfZpZSpcoqyaqEBIWQ + kCETJgYyYeIPwABjwgAzzBhhGBOYMWCgAQP+B8wYMmXAn8DPffnnn3874jT3vptZKU5Gnhc3zo4dOyL2 + /pb78uXLYw31rolQipYqVEhmnJRDNXp3wS0u2wymyGCa73ZMotB4JqEg4Lf/YHP/wZaax/ltPQNYr20u + mojUsfCrR2tfPdl6+2jjKRypa2ce729/+/m7Lz995WVC6yyMmzGl1lmhdvtkSqesqZmUmgsaQAjhaWMO + le054KkEaBu8e/zt128+//Q5gApY/uS7T0HQtzb74ilAaODXABjxKqhMy7y8Y4y/5bcDIZ0SxojuWcug + CWKbTBSk39mkNNg6JdqgJT4ZpDGvXjzmMxELWjGvGaqFBEmGom50l9MHkcbktBC/g516GTCZo5f4fnnW + s2dMrn9GxyGkKFvyPVrfoTME3g5h6WAmfySFRiTQpj36q2kGoSzW2M/66vKLJ49omE5zmVEpExbbng6G + xVrEgma0PRGLmkOh/dVb5ou5TAJhFAi5BrlqqIfDb7DbGqdmLjhbGhxj38wL6Zaf1ZmrXmiwGouLLzBB + MtmDQ2iutYnFhTIW72nevFXVC63v3uQzDPI1LLxhyR+JIB0UlibeOGEoePXE+Ssnzl89cfH2CfQyNzcY + 2MtsilPoZVpbYcfCO3sn7j/uK/P16/RILbDGHQdvPtbqf5zXKtvMwRw+L3NJ9dTtgx3XWN9fvnyCIdzh + 7wvBDrx6B6oZSSqHYQ0AF87nMVv44204Hvi859ttyZ6eyw3c5SQH43UMM1zoJBccZlBo48z2/H4mhfWO + UZ3qZDBrvVEVXXQ0rUIwSqvzyql3IvmbjifsM+sLgdML+6wFNv/9JpZOrf4fpcEIgcUR9SZC+cs0vcyc + 0ROdIw3tqOgprUe+MLn9VfNHTpesIhz1OpBrSkMZWNlR50h9cv0Ca7GBX5tE4dWmpsiInkISEWsoBMbM + 91nTJ1r7oDKbZhJti7i1UjjsNd+ZQEElRo6Fi2ZDali4guPMT17u4UAGrwi7uL9Dr/36q+cPqQ7GOHuf + aG/ZWLPnNmRyplQm3Q0ahY77mH9ahe/NI2qB6GJicK735ktoowwS9Q0be6uiSo+P5OvGg+YX82SHl9PQ + xJfPH7589pD09CGJ4EOjbcXiIo2hU+LZ7spbQ0GbsmSMqDVLLOZ8CSeEQy+qRBkg/OztSwxpxYJ2T+3m + 44qnqB7Xn3L6oORLZdCEU6MVBcs8epWBOSd5FkiJJRs30FGhkpzZxYvy23ZyC7OifjpZLujOavJUi3Pv + yiUaXhfu3bljGzPzrXKkg9e2UDCo0Tabs+WCfULZOMts2kQ4oUZZqVDTmKDGx6d5XjhIY+YCofTbbJlF + EzUWZ2qYsGcE6dCXlRWZvnTxEO+LFVjVmRmRX6oCdQcshB29LCe2Ez7U3vCv3bz7nhaLyyfPXz5x4Qqd + FSeurZy+vb3y5NONF1+cubttltytp7AJZ7yz8I/h5ziwyjbUGtECTw4YjAEIWbUxtMTr+cPejr4MDWM6 + 6IdtcKlkkTzEdpWDuXnjep0hhTXf21cvzBDgABg8/L038jO2EmNeIDDOkoaUOr1smoRPPYzEsaV5vWui + ImLJDuME5oz0CoSZHih8y876SoPIe2K+cLSMtD5YMlOlay1c9TKG8sUMZivtMycRHLvpmzdVncE0CEdR + qDeXGbsTKFgC9rGbMKo7QxNFn8rkZcLoITN2VOaTNGyopzBNuVKI73ds5VU3Peu4TbNra7RSmVzHsepu + 8pk7rUzoehCX0uS0QgEhxULLC92SG/e1b55uf/14AxShpwJbMjoQwJiHD9dJvGyWveszHRQNlmiosJtP + blJje7KmJqsJianV9mQKqtzRMc9+i1NNmzTtJGfqmuu3twkyU/DrL1//e//wdz/58WdgsOYrSSATAlGf + r/Tywdq7QEHqndYyaLmgy0RdIGNvVr8jLHBz7dY16B+gJku0W075SL3uRLJUfWREaHfPvNYVY+m+1DFW + Wr7EeMJ//Z/+R//qX/7TlZUFThhvs4kgSengbVNsGkbqpr6IlIzqjmAPjtQm6ppfUnU+ClOkDOwSAntF + oFUKU1BdXEY9F2yGMgX/ejqoYiFPaZqawWJGl21LDeOO0jtYQ1Y5Z4Y6Fha9aOdFCyJW8ikjcukSTuHN + iisBMGxheonuGzXam8YcCKkUXj7BRPvwYCP5A/wCC+2OpYMBhHCnVAqx6r6+/vTKymNTzTSOtLVSyG7m + jwAIHYTM9fxwDOPzAecqxvDlMFcWPQtPZL7B40cPfn8KT2GPF33ngKWYwLnHjzHmowe71SKuIt9sv2BN + JTMRnIBlYqGOqv5OIBSG5UnV77aoSzRoJogN8LJeGHfGjFDnfTcV1IWhn7ml9VpjyPvZvVTq9sO0eoJu + N2C83CqFMVa0ImIqBbJTAj6F6ahryzQ4X5clR1YHawdF084oMA8gVIROSN5EfdgixxKmAQKK9DWSSfLR + 4jgTvROVT6PFsApnGvmWdmtdJuNQVwYD5QreTGdY2VnlpRoNAUgzYwssRFzq+lLggR5zTKjBwle7y6ad + AVEerIKLrx6uM6QCmwHNqRD8qN0e+QwUZTp0y95MdUTdSOYsyZMFWrPwzs6HTCLZRsMu9CxBKbuym7cJ + gru/+dWP/uv/4j/79a9+lA5wPmjXDHGMDn2w9poU0Lxj1qzSubeCGnZ/s+WCnvtmTpx6WpMRNV1oiyH6 + lKWqRSJ3zHRQBKmGgai/s5qLNlu18JGJblEPetRaSsjyi59/8+PvPgc1LQUMnsAh8NaNJw/3UGOZRrSd + RfTd031fnWWSBS3tg3Uwfb9f69+JgooI+7TqPrYzu+llSZFzXTo1qtq8HPBlsekZXiCf41+iYC/85zWu + p+e1n6K5CXvkGZ7U6YMKoUbeWqDYktes65XWsYKJeZdl9sIJkkL0MgaEl0+cvXziHCyopYaWF9pvLxAa + NcpvJ0sv3T13Z+Pe7svLy/tBjcprxjoLvaEC37XjZGN9daZMxUC6QxUikZUcOzVj+5SxcJ+yKl/LcY4K + dvtPvv/5ztamFc/8czz2a37MDfmqaWQFIufu1L/QI344pUgc+RDmbddxLsnVBn42Brplh2JR59cIB71M + 8R01WW0fRhHcfeVLdWYHpz9ypO3sn+KfGcsUQ6bZdDDL8mpmkqJMYm5dtPxzfX2ZQjqLiICwzpTppZG2 + EFQgRLqCVeTK0gIg2vsoRlCUo2MVkWZSaMMFb+Ev23oqEguvdSBsnWExqjc0MsaDqad+sOAqfRRWTGIV + VvIxKxbNFrds+s7iFqv89tYKg9RZ+mW9JlfSqqkJIDSDMVoLjCPd31x6ub30bncZRNGQCgY2McYPG7ZH + D2zIe861t+TMOFJzdfFZhroZOj6WrAYs9NGGEKTq+VPuiC+o7sgsOw1iTI+jMuRTw1fJc2yU4P4mBOy7 + t095OXJTKw3ChSJktekZTJy3Ngno0K9xEmfUopmoLT3cXGLaBrMGlf85CrqPaFfVSk/rMplMpr1lMBNB + GYp++smLr758y2Y+ZVeTIKNYKAPY+ZLR9oV2eVT0TqhfvjuzJ5EOH/6jrz5jalj25xA8/fJnP+LGU3Ti + 9dETeTY2WzXpnPO3Oustkmsl8Bks7C6jrZs+Ouhl5JtNhJO4M6+4rpSJK3dqlDiJcQvgpUpgoEa9U8J+ + TFVgY2c0YoLftM/TSkhHuHGmyUvpTv3nnAjeFjdfa89dvXDhyik6689cAAUjLzxHFug0KbAnRPQpTp4g + 2j+v3l198PqzG+uPraFC2pnopggR6QmkScdYq/sSreSVfzMIh7Li5Lm8Z2echyKZb3OS1k9rHj/0hy2B + BLxP6275NtHgzNb/eJBBiXwwk13yXCrKROSEO0dh0Ef+O9827/FISOb0TLAXkzkZ9jQbTNh5dKYLc9hg + ZRmyaFXF0XkQGPXCUZqc0VmXj/r5Z9FY0TfbP4sAunYTxhmffYSVHZ1cMIcjYsO/bO/VeF6DQ+Bkd3cL + WMrm+uaOEde81gKZLnY1nffRA4GsWXLlLljYjfzrvJucx6TUsKn7pv6QYaDc2sLSd60qRSWW0a09rqRQ + Y+uvs/iyCk9aJmIkYc9OfGCviUhtTiGwx/Sfzz59STsBbimhBPHGuAELW8ehe7AZf4iOdHt98eHm4puH + Gz9+tf/Nk60vsed+vPHpo/XXpIYP1lGT2lx7xyF5c8uJjVvOrBB1Gcqax9tIQP/qL/8Wv+VT40leZHtJ + pTr/GQPlbaY8yNp2qD1TC9zZWbEeQa8IPnqw/urZ7nefv/ji+S5KV6QxOKhxqFCjz2Ql6uN2baxEnyyh + fkHwL0IB/bPqRSspqpyPR5gmSEkvU0A5G0RSGHMHWwehU6OTLzfbRlsfvUZ0hfGQQFHFQlom6KYAWTlt + YEe9ofAKhn/ra8tuK1rlWtPpS43GCDJ/VjJTLSMkHJvoRTN2jGundSi1xzUEJuagyeapRKsBgSkcnaV5 + JJTLOHieZLT5NZ4+hYiIRIUii5NPgJ+3xtsNOCTbSfftng0ehIhCBA78m68+//t/78/u379H20VgIRmh + W5Ka9YxoUtLEU2dOWLvhZeWFAOTpK3dOMcVeuWBKZlpeeILV48PQgDcJDk3SHQ8BLiV/yPu7dvUqSMZL + sGodCYRspvyjMoTkW7TEzPdKG1+ef1kYcuYsBAZV8+O83Ie994OeBRWBQOyQpgs9kbQHXfNs/NFSvaEK + yPac7utrK4zsyPyPt7lwH0ZoUZ+VmIR2pzMK4kYr/6m/jWTFQN+3LBAg7OzobFJYgTCvjQMbj0orodvK + RC7YQtTB54IHAcLNjVWIynb1tmFMrWuiVgpnq4ZJJfkgm+ypj6qh/dVH2xSnRx9D0YR8LmoI1UxrglZz + dIb/WRfM3mpZjw4NhUmNSnwRXRNl/RUKammO5kLvsjAgbEN6GYzw8uUjEj5LYoxBVcd98+N2azFXk3rl + zG94jOFDbf2FG0vvnj340dunn2LAtr9OyZCZTdx589DSrydYlwFFjSkFlrL1fv/hJipTuhoEk8oRqQV+ + 9dVriFBlkMoaVeozHlUWbg1KW/9+7+WPyYL4xbgV6sNde3XY2k+e7vz47aNvn2+TBdImQRMkbRLPsNje + WdvdXO5tEk0l1FJhNUW4yDamTETjfK8OZu+8A55pl4rLnQQy9qU037tMCpPilgY4q4OqEWr0oN0oCnaZ + aFeKoive2bZxleCfJvRyRomlT+3o6AIvgcx88CsdhMNI3tpN0RHRB9PXlonqNVo7CGcgsMKhu6yNhjKl + CJINxCkZTZlMLxlqxUACwxg+k9I4vsEWbawylfPRuXM3zEfUXGbMUWSo4VjiGM31Y/uELXHs8+mTh3/6 + 2+9BHx/KcJFi4YkznvyBeQaHV+03NmQiCIFDssaQ0tw4cZkhhWutuZ4Z98yyX2dI4bX1px8OBDr8w59v + /XzeQfLhL/M+z+Tj5jQwnYinM+/z1I+zrURSx93XAR9e4phSPX6gF27futmkp/F3wV7bJnLIjoHlXg2y + UrI8g4U1KQzTtQOSwl4pFATOFggVJ+pamm2iSC5UopgcQ1F9R7OSH0LwCH7DWa3ZSsWQti4cJaxrZoys + FGSH1AuVHWa9kPWLB4G6hoVNyD4K3EfJjDVHSyyK+3ZmftWVO1UzWi67y4y6Cb2Pok8i9N5BI0ijv/AG + Oc3+/jYi0tpTyJrOzEJxqrUNQGpSKEEaBjBda00U992VdBEedWNtkXohcPgAvej2yqfP9/76d7/4xadP + aLf/irn2D7EnXQUOYUqtcPhg4zEj4D3/U9+9S1fqmN9NiFNAUYZtljJ6+hh5pFcZDRcNBS2zpAtC+1EZ + UjvkQaNDvTvCewRXsA9l0Pzn+zZV8ZtH63jHvN1bYaYELfMPt1efPdh5uLMBruebtYKopgw2BxnvDpS8 + Vn0mg9QI5pNPjw0e7Gzubq1DnCodV0UwidA2GIQZTHDO91zl1Nsn7Hs0mUx6rKePaFiJNqVoZIRmTnTr + OgIoqUlne1UlGa2GMlksrK30GcwJCDlb6cabbSVslfKhlXAcQzihRtWw1K+7uVq2CQrOpUZTHDBbGsy4 + uYXdgXW81tPHD9+9fXPxIlQiQMhN/YWpZoD0oj2a29g90YCGF9XK4K1x1kpxAgUpWMhcewNCA8XTZy9e + 4yq9Dq146gQMqrGmUT48eeHmiUv3mOJk2tFbGwv77x598dMbm8+3X3x73EX7D7CdJXPeIVdfyz9T2L+j + ENfZRXJB8+T5o/9RKHXIYSY1mnmeNq6UaaaPZRt7rCGg3RGSJSZKPlqwUPcnP63Rp+meR9Wooj8Npqdc + HFOmq16GnG9p8T5NUZyv/Yqa9k5EBDqrl4lHWmmw2Semm3CviEC5LNOEfOfWxGgtg2iWG7R8dZYN0PXm + 2TNut24gqHGdnsfpVT7q6aD5q+Ute6XTVaQpZUI10yxm+nKZxUL5sTWZvvXRN3O123VRXl9bfPv26c7O + WncibQlNWpKmuFQ2bHs768+fPAT2rGzW2yqixcJNum1OxdbG0ievH/3F3/rJF0yc2FvBg43Ey5jSR+uf + WeFwHTh89WT709ePntHMoBFOGl5htt1mSUOCmPmczF+i7a/1/0mG2p1CDfnWoXMd/zRT1+5AhD5BF0rx + z/1iPgWVH61/93SLKbtfPtp4vbfydHsZOpSi4OY69jHLOJ89f/7gH/31X/zq+29lrCMWVLRwgl9Kbdvn + 08ft8lHvbK599urluxfPabqnTcX9EMJc1BVMdhN9rU+Vp1SXbQU08b3TM+ORkAKgFBJP2mwmXkVDB+GI + ggUCg7qv1KjDXvAZ1nTh/fG1X6iKZXpPvbcPZikhQTHZFwGh/W61+QkWHsTrVOKnJYheKHH1uNcFPf61 + lG4aSecS40+0nM+Lhdyia77AoSQ2dd2yBcz6Cy9fYgLa69fP7t8jHXTftRPnMWy25sJTZ09ayfASZOnZ + 8xcYEHPpylVLB1HTWO3QmgsdEemyN+3MiUv3H7z95n/7P/7Nf/Xf/beXVx5fXHj4xwIaLOAWppzmvVVb + tJO8eeaYH0k28rFRmExOlQ+JduwD5Cd/iLes73XuKwEO2+vrG6urs/l0YliDvekOfIMBEfVIAb9eLwTk + oJS5AMSFtujM/ls5h4NoUg/0OihO4r68WjId9A3sQuDa++TNq88/fcOL52ZcwG62MDAwE8PD9IJqjROh + lNHFXLoJoy7CMkHw7iMMrVgShcNYPtpEb68UJkHKxvu7OzuMD2tsVdpcaU5va67vWNi6pAn5be3LDEC0 + GL+TK8vBTGo40zRzTTNoLmuei/hsdKYFsabnhCZVELsrdCtfRRGxSUmzswLwe/PiyeOHO5KNGDxE4TDb + KhbWQZSNJbBwd3t1d3uFufaPt5ef7yy/2V1BkwIIQZaCQMDhu/2N1/sbLwAqV28yCJ68DUsaNDXcpGrR + mPhI9UgNI+0LX++ExuaRhuW37cEmKHlrIHt+8dAqlG8frgPGSHjAY+jQ717ufvvqAS0TjzAKL5OV0MWQ + 4f3851/9X//n//5f/uf/SkKhtExLpxh9IM4YN7PW0jVBwr22svh0f29/d2vJUdCBMHzUmkzUtDOkj9ni + 4g2g3VmmjljSTInGBPT2+WLRHvFTmLk7xx7Eu59dV7qzWoi2suG16WJi7kTWv9nglo/JrI0TEzeZUik0 + IWgjSNVHWD1levtEUXH39sGxa2KQwrXwN/jPrBSSgVy/TP2L5TfiYefFkjcahOhar3x1NLtRrUUCvboo + iejSg0ZwnjpFtYvJj1RMMGZDhqK8oLZSnz13/iK9bWfMPswD/NMnzl4M4ei5a1ZNPHnGfoOF9FRcurP1 + 7N0//k/+xasf/VIE6cdEBTuCJqWZ3e/sul+30WI+eRaPuJPCsUSk9bl8CTD0tbH98PfJq1NAPhJuj/9h + UdcEwmex0EKbM2eWqPjcuWOZ+/v8qKcwYU8JYk0TJ5IZF7xEE8UE+dr5l+VDR8exdjgrGU3Go2FeO/Fb + 8dwCQ+cu7qChvHqlk6L0el68cOUi3S+TUkToRZMITQhUh1Ov/HtPvYzlslkqNHKj11pfLKK5vgBhsd6e + CEcFhxP7j+opI8lDsVGOBurso2hJQ4hl0qykD/dpRSkbAETTvTX+hLmlXGZqo/espiZLX2keRrei8iQp + KuXNRmv51tZydBba8MIlbj6/cJFJ7iRbpFxPdlYw5mZ4E/VCg0NUmshK99d5hMm3lA/pwX+8t/ri8dYL + WuAtI7Q+d7BQ7YY+Jtdw0aBRaMc25Ub9D0r2ISSnd0QwO+IFitCHzFFa/8Jf66uHAKE5o8KFYgUHTfpw + e3kHFNy0Kbu9QXDlHjYuf/Z3fvHppy8A/maWFixoJILAm4lFe9egPhN9mPoYaSvUrF18QTfXlvnwnaw2 + T23iFcZp/cO//7svPnutf3r4In+ZMForSaGP3m3zlfpYiSaTmbGuHUbSOxyGn1EVLRcgnNiqtTkqRHJO + 7ysjtLqAycSKWNRSwLHFqMeOaS7T4TBc7w8YHTp6QgUWCgV1naY+QNc/sHv94lViUcXBvuSQ5+HFYYW6 + LK9MeSdfbVTD8p8WzDuPxephAskSvnP1q6mDW4v+W2+2gwdL7qVLV3ldcNP+AOahmgECSQTPXDphDYhs + dzqwkEZ7TGfO0WW46MIZWg8+3o8PS5pjgc0UJGQ1h7erH3QUR/YefJTD5yNmTtNHBEI7F7yfPQ+PR2xA + 3mVo8ffDv5YdRt6nUEg/ZXbTpMvev/S2VbvjcVK3G+3/5EGiDS4wx84hghvOYz93hYKjWGbaRKHrIdPB + uXUIPdizwDIpJmJYZ0erCk6lQdUUR8ncnKlMs4q7nPo9Y8PdzT6yd4L17h7dFCZ2GOySKyGmtkJz33bS + rKpGswQVOV9zc9YKq7U1U0bWa3CRZTqGxDb61P5JsuLG3NkPAB5YTyGdc9TGXCbz8OEmxUWAwaqG+3Qm + uA2pXLl9kK/DoZzJFmg0JDva3zFByitvMaRKB00KPsGXotskXXvrnQyfPNl++3gLGKOO+NSUNWvP6L4n + O8SqxtvzDR3dDo0/oXyB9nzClvw2axj4zxXmQ721OYLrn9EXuG99Edx4FV4CK7hn29YpT9cjx7O9tQxa + +0Fy5NEsKLfx5kIe0pip5w7poFLAprNFK8R7z7ghjWNsGP2C1RSVCOo33wITtf7pf/D3X754xFzJWtkt + kpnQQLUpgyJFrWacpGjGTGklEyfSkA4GCg5BmLdPqICtM3a0GBUWdplMnPajuahzodVEZrhq5rqsCQtB + Vi6xennqmlVpv9645MHg+/fuwtC2FaBVSZztdKmAMj0eBwVtuK7PIORm4yba4sN9G8DEz+ri8uPdByyJ + 6qJvYHiCYsbW+hoqyzJRdWjzK6tfT5/kRGqSVONLfTyFqUm9cMhhnMYH4BIL8KlzPH7VCFJMShnVdG05 + vGY+CpBoJ7yduVKR+3dp8Vn4AAAQ4flhCPpe78sjl9+XfbaOhNODsgKBXX4OOm8c1qYHmwiaYZJtNvOW + MiPs2OgnRg+uxs7CoprpURjPvX7j2uNHexhq63RMslT5pDblTIefcZq699R7jTAqBMeRjBY2pndNlOlo + wdsI/GC2S4J4ZmHh7ssXT+i1hx5ZXrqfbhqqlGgwW00HoZI42logVG9WoOCMcDSTQq1lABuUZp1QYf3R + bYxALIVhL5mD7APeamd9KUR1D1LcKb0W1V25ra3NsxaJGFNZUzsOJTE1JjAM2NRfj0BmwR1qrMTlyLek + jFCzfAWHTVNqChpSw52t5b3tZeCQ7PDFriEf3QvY0Hz+wOZXQFryW6D46T6zADfgM0kiATbgjZSRDA+p + C4Y13OdmVUbRnvt+Y3ygD4Sil59dfY3xKUDoxtmf0DKP0421yS9hjurlQOdvE6qR+ZDgtoEbcgyQj4z8 + BGqh1D6KSoQ6w8kG+g0i4nUXeWE2SOScZIUmNiTL5KPW8em3qXm6c6QIQbnxV1nr0R3ByAuNlahYOL86 + KKbBNclVqHzlipWoJy7bde6ScLF1CqXFqM+jnnZNNKYkA0cunh5Z9s76dmVZty4XyM72BhdUMDfjGNFS + +/DL3zK/c0hAvZW+h8K1YuIQ6FBoftngn02Z1/TBaB+0B90plMD7/OUX+0/fvXgJ4PX1ilG8p88t3Ly7 + vrhKYNAyvwA+rWx1retJwglWb7deO8HcWfI/s55BOGM3U9BcPH2OMsot1FOn8Sa1LnvY0duGhVcXAgsP + TMWwNLvK1zztFHwvgAmAdKw/8om54HYY4OM0u8vfL0QdeWAfa4PKG/MesYVDUpFvlrfP6TkPFGcp0I6A + 9eQY4bCgYePfBboN6gLz2A5J6otnj+7du92AUF9F/cH04Ozeg+219ZWxWBhxYM3/Jog4SQeLRtT6mST1 + HoXd3QujBLNncN/GRY+i4CfvXu7tbs66zFQU5L5TnZcvWaDd64Wzc3prH4XL/LLGUyR/Pptwop3xNjI3 + HW1S0tkZTJOsQv+E7vvyizcICwHCFNHktKbIVywpDGbPKlhlWhP/RDwJtsWYPUcCdyK1PgrdyK6Qq4CI + DoR2a5ak96WgAXiMKd1aIhuDlny0vfJ0x8qHr3eX3yGosZkPK6apsflHSuNMa2q4CDoCaeb/svZpPLL2 + OZpPtnlEe4Yzn94I8aUVAhmRuPLZQzxiVpmMAf6Bu1kLpE1eI+YNvJuVtjBb9jF6L7xZm7aB+JUpS2FB + F8ahEx+1dIrhDhZoO54l69PL0R8phEnys1kiaOhub4CJYZM2ReQGc7uWF+/xV75xzsBHjxgjvOueMn0y + SRptS2nVh9GHm1oFQpNouela75poHvFSxwwV7npiIw3b3l73ungvEzTHiTlJ4aSbvnqtUbu5ffsmhcl2 + hU4H8CovBAWIQTnUsVbSCoKNDh0QMaJnkj+w0EbS+w1EbPdPXj5zGh3sDVwzeaIvVZZGsTwR0D7ZfvjF + izcUjyZVw7K+5V2tjeSCNsjeIDBupiY1LFRGePbyqfNXzl+5cfbyjWbGRt89qhlGNd0xLERHetAPb5AZ + rVtb6x+QyR0TOUi+ifsZlkRSQZRD9GMznA6waDnmPv9t2YzvT0SfMI1z7uHDnc3NtcTFDHZUF6yJY2MG + 4kGeC+XK9zU3gEo8JLeGcKB6p0cyOyTTfPnsyX/8z/797e0N9tjQTxSo3bgc3O/lDOQpBxwKsW60Zsak + ChXnJoWTy2xs4LUj5zY2UWRDxSCW8WvY2u0tIu7zmHp0PJsU1h6sRjpdRHzX8sLoJszS4Oz6pUUtpwe4 + n2TKBd1q2VOE7CBUI7ZUiNVlxrsd7psH921McdfpM/NEJCZRdCn/3Rtwd6gljcErWChQzAbw/Ydbr149 + TsMwZ1ZBuCXpKgGMzc1lOFLGFkIzOtPI0HZ+m6C0kaVGmVI4VO1wx/Kzpb3NRVoXsGeDtMTb7PXuCvYu + YjVBQdI7FC66Sedize8Oll87WAoFYT4t86P+t2s2b+yHJPIp+Le9sucvxI1X9E5HAzxSK45Q4xXdMTVM + ZNIvhje1tQlxulys1LyZZJoLtu5455OZTU9GKAjMpFB9LPou+EhHSzzP5sFCeYqmUtQdErK/ntr3vbsW + iGCYzvcuYkDNpiMQysB9qDqX6YN9GH1yoWkcU4BwYDikjuF8Ix9102WjQAoE9otF9fV5wWUryYedU1du + Z7Q64UV5/NnT/V/98ic4g0tzICuoVMapLuhZYPxOGsnvFCw8feXUGRxhuF09ZUnhlRPWWU/oz3bazMbW + k3xSkVhfXjHKNPK/XNQzNYy0qi1u8GpgIe5r/GYZ5M7Zk+bEdunEqZYUBiI23zVvqDA1qQtnGGcY663n + bEPShu3/L37+LdHHkdDCE7UKH7ll3YDX40QiclLdymqhAKK9s/faze9940MOKB1ipwfRUvjjHJz2T+i1 + iR3Iwr1J2JEo6BAVjrSZZ3sGaeU9CWvbaTFLjdozgMBf/vTHa6sW+yQK6ikb66tv3zyXKGnkRa3SeeXC + pRuXrnEZcmxcfpr1oSsBMgQVzMO9ndfPn8EczQLhnD7C2lxvwGZXbKsXDtqZ0lbYOVKPjm3q5SiTO9eG + 0UzXDiOXZkLsTpC6oUy9pWQm77TW6asQbg/2NrF/K34iKg0OwwhZbWnmA8w0o0BpItDFyDqSicw/0I42 + mSKijNAxsmR//u71n/36+4d7GOv42MK4xYIuhST7BzCUD4EQ9BiQ/HEfaMwJFdlfXwdWCAjrDUByZtJL + iVQQ1xegKwFFpsALFK3Ut2sTcTG/prDH7a0B5ApJHr+5j+AFIxhqjaoswqDSC8gQDOp/WNs82FgE/6gg + PiRD9czPa5bB1jbLtCA/45hL73yO4BDG1yR4Yh/T8uaSSYtq1hhk/xhJwUHBLz5/892PPifU0FfT64KD + m5pbJdxIdYwFQDzCMeB1RzU39cN8++yfoMfWsjTnK2PoY9aE2ap1Yz8xExg7NLp+fhY4bRwUIzpO5Szj + JvplYlFjNCAZWGbvRIShg5vMYC6jLbNGyF08cShGsA8ud6CXTnYaGu3St4kTqY6J+wqjM3dUUYWROZYO + goLnuF0NODxlWOhpoiDQ/ulFPuf/wlBNwBbCUSlIPSUQTgxSwUwV2l/ZDwZnjoUlNfQE0cZW5MAKo0kv + 37b9+ic1NSpbuH/3s89e379/98jVXEB45GaTDSxaONP6/9/3yX+Q7fmoeV82eXGevAVNCcqg2XSZT4PT + FcLvA45xFnTzEWY5oTQlm2m7PQmtsbxM5TVTvh4u6TyxCE40qP9Q5YZXAauEdg3zjCCNfXrq6Y678Tw2 + 45K5euEyQIhak0cVbPo14DHgafjzyy+ePnr36iVACy5msX0SY84gYptl38fz9kTQXgXziet46Vxpaprw + yxCTmQXCsB51ZzVWnAk7mg0V3Wsm/DuGYYQT13/6KNqgHF/anBfd39v+yXdfvnr5mPKeL4Jmr6XFUeZq + TVtIxnATX7SnTx/s7m6wcDtMXqUESAqSGhlJFiWWyQkVph1duP3s8YOvPnmDdkb1wrKOewHMgZBFX7oP + 7rx8uf/999/Cdi4sWAOGF9X6hKbahG7FNq8aJkaGmoZUzLIxjbAIhzZKdyAiMx/2tpbRs6A1xfYTYMMC + +xHA5hj5ZGuZO3ajMYMZERQdt5chWs312zU1m272Bspiq8YRxkt42bJKQ/OA80FlinwI6SBqFdDWO6hc + 0BtLphPnM3RQs2C7RfuKPlILUzaW85OfuKllD0yzUlO/RLRMkAjiYEC90IUzxovytW5vr9mEek3f9bOl + p4PGz5uzqM6oVp82RtTmTtjcpZg7Af2IW3dyGHPP5JkZvIaL0VzUBvCm+ow7dMSyjMPWSJWWEaeaCHvB + vtlt83bgpSjZSA2XcKhckB/WNS5JB8WAwEgEPSrOH18c0qORFYZ/nzvl/KRhIb8xf3EgtJvzpQJFHzco + hOO/NELIjO0M/he0THBIDQUDEPXPstIKGvWgUabOlHrTvYqFXi8067XT59VoH0wphUPPD472iPmAZf3/ + B09h9C5tP3PJ4RZ3TN8lG5M8gZFz374HDVEwbfePlQKTeDGyLHljngsakJylhCaPR0kkN/gLArqClAqm + Ip5qIi6dvfZsrqk7NwiCr7kTfOhL7RQ+AwqHWU+hRASE1DVPc5pi1VKUZl1y1tqS+kgXf8SmYE+EM35x + doU3IS0WMLCmyv/Sa62WBut9LShVL6NoOn+nJM/WIENTKRfS4yOFDN16rWaKrMvPn+6zDooEM6WoN1b3 + ddPKS4GLIJZ7nsFv3lS+uLx8H+hKpahQsEFgIOJUaNr0HZbQ3DUbmuwydGIQAZo1CSjJk4SkOHEbERpl + tvAmtX+yMTTjm5ePnz7ZCyrSpaRpaR1DjprQRsSp3XwKEjccvbkPQMJwgpRkkDyyDbO6tcxvxJ9S4rx6 + uf/s6R65pu/Q09Dmmp1gnIOFNVgDdjeBEHuBB5sbGMtIBOQ38l05yMyZLCHyM4bO9xGDoQ6ViU+Dxp6m + u0+6ffhJYldn7bQN6l2D19NWxnXCN+004LmY4hpNqipyY0THlsE4zVKuzEkI7G2srjCGkIogT9zd3gC0 + 7IydOOi2KWMZ86VSRrlgNBS1GbytE8lmMLFogFsutI4rS4g4KdtzbctTjetiZWXJTdHmC0cT/9rImUqK + ZnZokDgmhTT1ESOfQ7EpIMQRzbAQmhQUNAgUCpIamtJejt0CQpDs9JkLRmS7lK+kg30pSygsJSRBKSE+ + jeleODSalHb7S+Y147tp7fYynXEg/OP88ahkgBPLSEgi37P97oe8O2HJD9nD5LkMnOIK0Tfqheg5PRvK + sIW+Ge9kqFIjIM4WWhLpyq5Q3TLEqPbVhLGmjwl1ds457EHNP97ZY9paaygspjN+alov4KVLEkrrRFfL + kXH8Pu36oDLhRJM9I5/pMyha6BrZIVemebj7lVyEM4PdvmxlnLO9wKSbpaX7AX4uOnfdQUgPxEdp+oRl + lqWt0KCxoKNNFXeLyOY76h1gqhdq5k6kg2qZ6HBotiOeK1SMBP8mww3qIPvMCLOD7baL+0s2Y3kh4Np6 + 48KbTcMTdHOcGOZRCAXDfsV5xVUB4dbK11+8ffPqSU71syKiD3ISUuak35CxGGVqMKZinpDStS0LO1sr + NBSCdusbC2p+8LqjKXR4Fal16t7svr+EUlLDP1OEsp9VkM9GTTWxKK+yuQaI1owwBDI8C9rZpaHx3tOs + NeRFJYCQ8sgB8pZ9pLWJxbsG+SKoCxJnmCj0Nrai3RtI32DroDc7BaWG1XJWj+isSC2V3NuhwXlucywa + jG05Cak6Y4qEK5ImEfqoQvP8c1/ASyz6vNwMLxq66Ij/GgSOZcLaONEHX7fSQ4fD7MmrF2P2RJWgdj4i + aku/Wnt2yHWK7M5G7EZuGDqDkiqeOXX24qlzl4FDcweFLI1ckIzQgJCSIZe6mUWFoyTrPzmijwDOda12 + 0Y9JRAJhWSTZArLT80KDQ8YwlO41mu5JENVN8Xv94fhpPbl186ZzdSfMW2T+sKE5R+FfRgdCzg2uXzxB + PoCGnd27Jd4Y1r1/S58zulbL/LDPTbFSZmZza6s8SI411w2glgzZCVtuMuF8eVlZZo2YoPcIneWoXrFw + goutImiYR0zJF+S41iEwIzs65RlQBAGpR7jxAW5vYQl2p10SGss4fzBhp0yR3jSrw3YRmgqmlAm9uXCY + GhqXdzZUVN+1zAsBvK3N1dXVxckKEryoxeDX93Y2WfIiO2wGpDGntwGkZjmhDqgt9swWj16xMnCgrpvu + LxMTCXJAgTSlWUSUX0krSvWkUBxp9uCry00GKAaH97A+MRQsJUMfZyi3Um+ocJ/MMB5bcaVlq6iFFadS + LsFSMpOGajnhbxxsVFryjTVVMS9QzRDRRuNSLfv8ExS869y3nM8rf4Bf5JcNXMXW6rm6nwkoRwUEvn76 + +MmDHY2XalxuWKl5UVA+q9Ep+OTR7utXENRGCyOKmZRRY7Jga0HxT3WYr9TS7m4cw9fhnPMdJE58U5wk + lGybc6ywMOyEiq1oh8MqHG1YiMzyzuPHu7DoHl0N7YMWjTkpSoRXe3ta0Hbh9s0bm2uriHou2kj6fhPb + 0dNBN6BPf20m+1QBdlWHejrYfe3Fi0poMwlJx4v3sGvZg+DT1As31lbhpQR13AEIOUgqJpUprTG3lQzP + XvBioWWEzouqocKx8ARx9gXk1LBf7G11dZmuTxmP+MIFNcr9yAtbntD/2dbVYW127QzLIEDIb2v4uklJ + 9/ZtPhanyPAjPW92M7/XH3itLz9/h5iCj4lIgT6w5aWFY75iTX24//rZs7/63Z9ubw7indms8Zg7Z9IT + 8djxMZUDYIW3r8Jbao75KodudiCUGqvpE7zmPt07Yc1GSDS4Iytlvyna3b1+a3tlgwtn8iclX8YahO+o + eNFOkCY0JuDlnZoLCgjv37vNJe1XRbQW6VpSjSFvqjuKb+FZzmFOL8Ks52tGjAtEJ22FSgpRjfdGeyvG + Wmgsxw1LDSsKZk+9j3M7v3DvzrvXL+hBzEpMmdxrwbj7jhLaX2G8OL9VLEwFRC55rLabmyuA0Gi1ZVkg + dCgFQiCq+HFHc2GV5kcu0qafZ1IYy3T4dAcQKtXz+QlVO9N1pOog1CiGmNDkdmtpwqkHU0ej5rwoGapp + DxRMIPQ7RlQavHk9DwDrXqYJh5aZgYKGfKHBiV6Iof4Xu+1AaLlpGbFrbjhryxuWytu70GGIAm2NgyEQ + FeQDnNY64s5qrcNEH8swYrem4DkVuchEY+JSi0ssOlG8srRwl9nOd2zoREsHNY253mZ6aQh3UjUKHPI9 + IqjxcWAx2ERUvPol6CC0OxoT5oMGaxM9LT9gIfykUFBndbtj98VnZPxXxDIhFs06wigc7eM/kY9xFXDA + SYG2Eoa3xseVO6enXviXiSMHyShsrj5VTHrm59SmVxbjTo2tkdmcPANYWjdFg0BlhEaTnqTp8Ayr1mly + 4q++fLe7s9W4MVY5hBc2vElMWSFCUz4ztydb9twkhdbXv7a6/Yuf/fbrr390h9FJbRcn4Ut/rz+8B8hA + sYuP9/f++T/766++/EQ1z/f6YT8QgIuL94hjnEPgXdmbv8kZegWof78f3r7Z+l087vwpXgj+wkxhPigR + rIj+fgc6zJeI7zixvx5LyfP8nMBZ4bR16SWdIOCE26QOwW8/jbq/XwPDdFzT6duJfjvR2z9bmdDp0Xa6 + 18ujAWG/kAg9+dK4YnXhcQ27VDQcDi1cZS7VhQt26Q+y7+47I5FOKxY2l7VRPpdLQ8bR1aqDtQNtLRd/ + LRbaGsSZYMTUJebV/eS7Lyi8iaqKJSwTwTak3rxI3j3//pffgnlqJcyWang2NDIvXuyThWQdsePfOJVi + rolJWFxGdmhpIku8aMBkSk0+47lga6jQYKYcwhCgqLqaZlY0EU3gnzoToDEZGbG1vVKdrHPUn1BT8hZl + cjs7q/CfQtBM74SvrbLochuvOEr/ohdSL6Boz2wN9J0E5qVpHPAG/vEnCpngq6WDPno+BKIDFWyFQ5sv + 0SZYqZJKAz3WdSYQ7fMlegm29kvkfTjR+3dukQgqCyQdvA9L6r3zLhju7rJJijYuVKTolbXlpdXFBYll + BIcKnsq0yz53sE1cMkQUEGa4psYJO3vHkG5SF28Mqsm1BJDjpRHxYksEXRfThdlWILR+p6uXJ1PpGx1K + ED5AYAa1rRpShxEa4mWgLCBUgc/vDh5VWivsx+5YmYtlVX0UPSMkO6R2yOCkMxdOnfFL3oYXabEHRFix + WflhUHluFIsqEzZ3dfXl1yhWfuPC9url5//w3/kPf/X9r0hetb39GXvuP8wPCy9O09//7Lvdnc1Ydt+/ + 44JD5dt99GgXRa/QhW+VD7e+hUNQR99C3ZgjOY5tDc9i4Z4kgjwo5f9H/AA944zq4GS3c7/vxL+qJG5h + jn/HJVPkhDYDjRtIwqZK03bWZu+ED5AOn4hhQm8577tsTMFgRouz7CgIhwZHFcRZsYxkMuR2YKFROkUy + k6VBOcBVOMzrf7JMtNg51pemPgjhzLDoaOq3r0QsW99+8+mf/u1fYLRhqWFYj5YmehtSj7PMZRbQvT0G + Ell7Qy0O8deupDfU7IxotGabsrR1HDoo0kHBqNhvv/kEfWltxk9Bo1oJZ9xKVTLUjHVNLoz6mZoN1GNQ + vUkjTQxYCnAin2NAhDm2CERbM35V3KiYZzC2ukAHCEZuQrLCcxq2+T+ZnXuf8bmTdvgcFuE7MVGMgLmN + mLe9CQhba+At7LyJM+gJsS1z6Hx4hzY2uFdMQ1jrQHiDfI55JGmr7YFFcM6GfBQFNSfZOyWirfDencV7 + 8KK9QJhV3iwQTkhRNQ6KCKWcvAnsU+0bJ5ZcayYMMxOXYu6gwSQ60j4+epDJSDLT6FCrf4ORwYt6/Ie2 + E9j2q6ATJKodjImgIV9OH8w77UqMkkT+02qHCYThpGjXd6pjWhzc8C8WiioijRh6yAKb+C716o5krN7Z + OIHRGgOVHAWjgogS0OYOtTXb5TNhHwMcuqdo/IRYVCtewNs0aWFXBOIXl5c23r55t721UfMxlrqPuIzP + 35Uv7rbyQp7BeImGgx9H/X8Q+3fIMfEd3bxl3PrcbQinqIrNxUIehDwjNqpPpKOAuteHZWwwBCyEmjn8 + sX704Rx+PAK//MpLfVhxU2+1iX83tDRJy5mz+i78heK3S2P0Sz/OabTQLh9tzEdqwzIStNSw9h7NAmH+ + NWsSk+swrlUNiAmFW1Y1kOFcYGoSX1ajTCMEDr2cF0vyxspihjJFMlq1o8YsFUdHZ6jC6VHd8eKvlA52 + NxkP82vfdDTam0TCMsIoH4b5cnOcic6KGOVadPmGgizc21urX37++s9/9/3z5/vezR0ixmRK1TvRTWdy + ruy9W7QWoAwKRWXDQmVUiStpv9kcZ/owP8a7g0wOSDWbDGa1UZQOb2HyEtxppHQiV9uYeGhANTz0ZLEV + KdPsJnLHtUWMdZ7iRuqg2BQ9aZxmOlg6Iz/55Pmjh9u4ipulagP1FAdJIFrUQzKlC3nRRHybAl31yDeZ + 6DWD9v1tXi67CZ0LtW26XrR5yc51kJk1VFMuqN+gFEfu7GgXJKeTA4JoJMWYp8CA9uCsVAST1RA1yoHB + N2T+5w9aaKipLGJKcwZv+qjpelEL/MTIYiocbd0UtcyPLCCZHuWF7UfXfl8Kal5ozxJbNGaEyuHqj68t + sFYQVF4mhCnlpim7diM7vARpyXrEFb14/56PZ2d7c1CjXz6HFsxwYx0Lx/WQxZ+GfczBy4wjXy+paf6g + NVyfzGQXvDkyzVisT5xkQgcaoIp5/AmaUfTmx/1xlf8BfQvu9llnPPHSP2R+r0BrDid97LcEiB7uwV0R + cRYdKyI2aIzHpidc+3dAo6KzBofj+TrLZtgJ3VAw7pTyoQErV/KzZ/srKwvtaul223O1M3Ph0CHQLlpn + SofOelJBm0rqfRTAmMokvYOqja33tePcvdu3NlZWZL1RtQYjAZV8VKBgFmmK4+hoq1asQ+oKWO/beArN + ZmptFbWIKNVMwiGpHjmZOcKsLcLpZeu9Vur7d9HC2OS8qXCmyUBcIIMBZgwhCgo0Og0iHWz5Yoyzb5VC + IzwDgfpU20BQjTcaa4pm8F0HwSeApTxHZT97O634J6lOMcgOiCVf/Prrt99884kUob5ZdEdQW0VgwoFx + 2GDhb7//6Tefv+MNKt9titnsl+8+O6qeQkenwijs00IjGrqYzc3V58/2TYdPLfC2tcZvrFs3Ye0BbdKY + FIsOg7eyCtjLgW7IN/FkEBaaVPgOw3njr4quoiZ96QIVnYVb0LdoLMMCsPL5WRTMdiA20ximGvOJEfXp + 0zd86pxm8GZSWMPKmZaJ3kc432W7Xrm1NNjwr9FAzoQme0Stam97i9qhlscmk9HdXnkpsbgibqvhhV6G + vBAstLzQb2fAQrr4cddbMKGlzR28RO7orjSwnTGqdoKFWuhmVmJxpAhHLZs0nPK5CHxsC3fDWeaIxZs3 + TexRwYwnQKQ/2N5GVDB5Muh6jgEc7TgscHEjMUCIB222wQdV2o6NLye8F/s6q+3xn/I3siUtPpMQ4aDD + KJiXd23bynym30Ki3gQOJ4lg+2emfDpXkx3tJ7GCuzjXC1+aZz/BKVQh5pmqok+UMgdhYU0KW7ga8tFe + 3nC1m8zVWAuwv3n39oWrWuzCVzg8em2fAwL5YHPJqFiYwryqGvWKYKxQZRhTziMMOETRbh7c2VPhCeKE + DbMp9q2tIse3tnZs6ztsWsTQZdTWi+pyAqGHrmfhnk/Ii6GGkpWGKxucKiiyu71OKiaOVEDY5jCUtgoX + lJYZ7n28O/nc9uZK9CDq6Y2KzLKip4OhwUlgM1/TPiPe0Q7x5/qimbptLtMR4a6nhnA1Q402xyWGRoXa + pe0w4Fy2cAAhWMWA4t/88ru3r56I4LU5St4sEYoYT5Sjd9AfH6UxYdMzqQg+ffLgmy8/AVmpAooIVTNo + +xZiAK++QTVL0CdTckGr/yUjau2k1yzi8TabjoX02AgXeRxsZoNWLxQQ9qYdzuGqGrVzsg0OK+mgkG/q + sp2qaXMcdDVpCGQCC2cmLrkqm/3worM6NQtMm+P23Ku1JoJsed6dZ/JBrSBaJYADHPGJWAsEzomtcy1q + /JQJYVw+KgWNDZ03LPReQ2Dv9Cl4vjMnya/OXgQdsdK2DSyPNO2M7y2zwOkiWv/qbCooCKGI0pWujDNU + CEGo9bWDvUbr/jzuMIlRPsinsIIh4r17kyIZr7q8iEHt4mymaBmoNQJ2oxY1Pf4QEGKH9qF3PtCKiDtb + G69ePOPt/ZA9/16fm+9aR062g4fKQcklqRALsKKQ2RxxNheMtK/DoCRV9bf9ezxTY+uCir3cPbIcdsYr + Gyt5oZDSawmjZLSCoqrx+XsuOSMmp2WEzX3bL29WDby2GVFdKoWxRsSQtiBIbSppenAcnBSavjQhUKH6 + BAi1wLVSEIvmtdoxPQChsaNKByFCDeeuS2fhEpvaml11+ZmLDMIZ1a48F8yO+9le+88+ffknv/wp2aTS + PgFh+K2ou7z1F9q0ppDSGCICUZsbyxTzgKsHu5vct6e3KmPrXu8CzpBuaidq248dlhnxS3eATNuts6Oy + /55MiojSYBs+3Brkh4omx0yHIijIHrR94UWja9Ah8DYe3Gwm552mF42GE31WHQUb4WwcKS7nd26aFmZs + GRzaYFq/hDL7DoTXXAXjvRBXgycPVhw3ma6OcZkx29Cls7uznsLRohoNmcxk3NIkYnPJTEhGJ0A400Sf + NUKkJYoaa7+Ehp3ZjVOULlsOSZeeygfZMph3JljYLuGgQ7mIrap+7kLjP0MfkFjIUtNywZ4p5iMpmena + mbb2NCsZKUgd6gLtcCW1LsMTpy9Alsoghh5EjNM8j6SUSGoIZWqdFblCToClrJxsZrobe6LdsRU4WimO + XPSHNMS35pG5UMcbprNkfWWFj2fubiET9TgrM4k+tyNf/ZANOIYKhLyogcoVAjcmNPYDUK5z/BeKstmc + wUfH38dxt+SwOGY40rlP4FOCE7DS7kyCW75ygzkliJM0MT/rRMci3Aos9C9Xn1DvomindSBjS/7szF5d + WXz35gUhc6aJDf8GaXUGjL2Jog05GyCwDdtUHTGLGfViVk+haW3cjyYNNRL/mvVohs8CyIEarZXCSpMW + CIzSYIbwjfLqHpL1kZEU9UZ7a6O+Ti8jbWStatjGUyQckoJUP5riU5oKjmEdd6Y0uwwlA2HpBwnIn9Jp + zLHQO+sX7uxtb2xv0t+pRvvCeZonyx3IWPr/aHhvg20j5VJCGaKVxo6qJT/RMe8Ymm7a+N+WR8bUixTa + NNSMFsCKrw6Q5UV5XTeLUYYHlCLhUbtIOOn4+8qM0MYKLt5B4stbaLxx08tkL2Zz7QmBjGZKFNUu5Vie + q5YJ+eQZFup7iRn0Q78EtD+EB98vfDXVWcp1fiaIFcBNJgSi9mDzKtJuywDebi4z1AVVzL44Jx1UqifJ + TG2iL40THQIbceLsaAPCKpPRhaPyuS60FKAdXuDPZokge/Dd5pq1OqCywCoaGPgkBa/8LiiYSvXo2cpw + XWyUe3D7NCVmR5Aanr6CU6j/09Qx1kd4+mzHQuAQE1GjSb1Z3qqG3AwURZlW4YzDcxjF+R+kQeVGgmh0 + 1/HX62MjyZiLzl/fXUEDm31QSe+4h1W2U4QyA3gnFxdx04gZGhN2d+6rsNguONfyh5ASHfU+eVPLi+jB + 70Ckz2xbkr6xa34ChxYuXECF3GUyM+GYNM0JjcK/xmmkUQQ0xJnT21sMT9jgQqpAWMgT3a0EaW8iFCiO + NcL4Z+rZ8urlQuVCGhsq0l8mB1BEW0WtnSiUTsXd2E2RA2663YxWK+ndFbmzisFrscylfBRdIcMjDgRC + 66Ow7IEy1draklkwey7IqoqOEZKzD7IXd1qm+CpHVFIoIpTEZWBKbaK9lwytN9w2AIQe72+DZJn5JZAA + dU8e7O3vbjtlKk2p6oghSLH+BC/gpay060vbPAcQUR36iYLstmlwwEtDU3CI5K8inAlEnSbVHf/TdF5S + T/L88JKPzaSWnRvmNaOAkubmxPnIAsNwwOliywupnpax8pOaa50EYl/ubRvS6wXC8MkLpWhk8EriAwu5 + j0uDt2rc+t2f/uof/OWfcZ+m+O461OjQ4thXKFA/u5JvSMfRCS9aM8LaO9io0Yjtejoo/qM5q6VAZiYj + 7G4VTbA9KEUVYs6mg7UuWLCwXejhqqFK4dBnlVQThwroak3O9URclCLvXGEyEPc/aKaSKoXmPsONMb/g + b/Ba9Px5Xgh36qmhY6EbivLbENTgLQqBJT0w5T+8JkflC6k1FzbHGdUaD/7hYE2TAKQzHeI0qAUJeWzk + PGqJn80yj3rGYX+nm/DBntnFTjZiDWakgx7Xx2+fAbJVk57OV+ugRqbogHHS3DfLc9VA+kOO9vjPVebd + Ur2e1DrVqfyvsgEBjRUIOVERj2ytrytHbyeiTsdsw7ehyvVPhSPNU9bP5jZ7M8/+CQTWOb1Gqoyd9ZV1 + maVG85p0LDwLIYw2vSlFAwJL11TWCJvdYteO9tRwhnHqbVtp/Diabhu1hSnzgwdbrIBNQXqZHmdrcx5H + VYSUtExnJe0gY2bF9ATRpvuuLC0g6M88o82yT5/SdGgLIExZozueGFSwN8xEuQGHrge5zhSn1y+foDep + s5nut446lQznAGGBQwMYT7PYGNBiV6BXRUSUOAmElXoN6GraVPBSstKmfOm6U6GgK2hs55vry4a+RflS + ej/MNYa/fvLu+aefvuRZmOmkaY6OMwuE6idRuVQZoX6nwraWBq1ZAhO14iYqHZNwsTKiilTYOZQmfyr9 + Er01kC/3m68++dHXn1ETInaZnAyla9A9bL0E2DQyfQx9a6s3sejAjh4gGZ2oY1p10NuNTH8haUxaL0VB + vXRQhLmohlHkRafEUZa/IloOqg4W4WinfNrlH0Co5aJJ6hwXvTPN/5yAVymoYbUZ80Jb806eumC+oC6Z + OXeBNPsaB6slim5A6Wg0gN6bDjMvdESUm5phobLDvlZzRC0XyqRQ28O7nj6Nzb/ZN8/88PmSjiA84S80 + P5AOvwe9ePzF/tAteevAuA3+OHUabR19rnOPgXMCwKPtfbKzmQTR/s5bZlVhr3NfWaKeyRP5J6eO0+XG + MMzd7Ud6x0fvprx6ZUQTE/O8sg357hfu3EU/whnAwZe88JRdFp5H2wd80aYsZVI4AqE9ztsnerBRTe2k + bxLq4EaKorp7yggm515jk3phlXeL5zGVqLXeixfNruHaONWs92sHhXdZtW7C4JTGSqF1UKSnjFCwBexh + JUM3If1naY5VCK5On2KvXBsqBIqslQwiUEO9VQev46RlrdlRKQy/ymDhmrg0tDODAZuL77/5+pNnTx9Y + +nLvDhmhql8d/JrFmkjFNtre6otePAtqMZPCJjy5AxplNZHnAoQ7W2sMoEgGMjSornaZTRwrLnpjvpUG + pTVVXbDdMSC0eqHvf39vSy7htZbJK1rqGenpnefPHzJnkW3SOE1Q3YBQAhm3z66uoZZG24jjbB9sWDhn + 1u76xhIjRDjCHChRlKJXmLH16OGOf32DVUJ2ynOHuurXn7xbX1lKXUybVdIZBUe76JoodejJJN42lVeT + 6Nsw+jE1rGx/Bny9cTD96CvyKY60W+uaIHZnusXSwj2uXzEuPs/henpczK0LNmqnNkv0iz2RL7UCkeG5 + agZCF1cDkLqAXFScZukoCUrHH3jMc7CgeJOeYwLpWStJel/XOW+riFESBodKDV0+46VEoWAiotmqifzE + TYzLMIHQHWoAy7YxL0CX9VwgtIzwIg6NN+mu+pta+lmsYQY5q/hkH23vrS0u60hqJnQ0dMxscWyeN57J + R0HS+XuCwOO/F+Vw9d2U1DBFpLFNnlhKEGlFgiXmi9bjgCIj1LhaAMHtjXWskmZQUHM4I6yj0r6+tsw1 + L0Y0Y8B6tUyM1hrU2R7qlcaLsjcWiLnCGT5k9CY+6bc7y3TXKHdZs1uLgrNk2CqFQ1uheiqs3HLBuFAN + qWjmMs19uw2Ky/idzSBCnTZIUssh0LlTfrc+QvUXRrlIWOiMmYkG662pZtRcYZRp6kstL2mD0VNWCqAC + AMyIAGOy196xzRJEb7TXtMJgEatDt5zYeo3NCdL8ZxTeimO18k727HgTqWRynrPPdUrToLQwrtbUr7qg + tKCJdmwDCu7tbMgd1DoOV+7bPt0Zh12tLt1fowJnr94t0wLaW79gSQflMDDHPhTwE/ZrDGTNAlvyZ9Oy + qI++ffvM7fFifkhtcSFTdGtk+Yu6TNRlUFkPRiazsrz4YHuTNRMgTAgsvHpONQmX0ewdHCvTU8nMhLpo + wZwBoajLsTTYsBC088uhAaF535tqOiZOBAvKg1hKYQsM3CopFDHrF+DUSiaJ0HInuwaz8OH5X1sIxgXB + gJAj4hU8A+uJYFfKTFBvzj/d+srmvdFUdQ5tDrHu2XNm2C3ws1tBxHgE+YyXDKPK6DY0ygjv3bvNeF3M + WHz99MzS6FApSIWah/7wTh7sYfC5am/ogC3ZqyZUfQAgHfkUy2M8EyUjJGZKI5jjg8eRL3HMDf7Ar1gB + r760HvehDzGdy4VPQxbYQoVUihobfPPm9fX1Fa5qoWkmiFxnlP7dyihep3H3BpbEHzYwmYzQzV9EhZTz + frgwFBs67tnjXpDvsrTEQi5aKctTIFNpUtXYeWICoS7yKhC3i78DoZooZEM6ZzCF5Ab8RinA9cDrsq7V + OD1LOLlmsa7du2tUaCntJBBa1thXxqmfSDBpDQWNIC3VprRvHoBQMxDqDKA23dB4PJF75II+L9B412I6 + Gu6jTplGSkQ6WPvNE8mK/ET1tuQb1ZYgBjLdakK0qWxszAvhDzuyCo/ZAPwz7aiPkm9AaGBJX7yB3z0f + o2gdGpYXqgpoj1B99G7IBD/15ts/G6Lnn4qhWveLkbaIpBDGGKGmgFBurpMeQfMx8I2zNCimulmpmdA3 + vRHSUK1OlshYp/KiaUjbaM86dEnKZL/Jz69byWgqbxKkE4vtYDWkcOGYvUdCSWG7Fhr+tQKhIRz03vLC + fTIH5YV5ZWmbST3CL8k5pGgSOVUZLlyc3JI6Sj1deyRkB1pTSpA9JH/+eMwJr81guZzxgrzLiwzevnDl + zIXrJ89fs157VQdbXlhLhjaDN+QzjfOEzTx5ChfvjfW1S5d4MPIoB0IywqRSj2ImvY/5HHnpQUmhJY4X + KIr+XoAwj46vC6vIDxt4e0yo+4DNFATw9o9TPWVjOF4CpdrX74A056OrkqdyYPYt8n3QSECGl4+PSNkr + fxUe+YK4knxyRvxwTiT46SHIFHYu+nSWHbVccOBFJ0XyfpHUoDLxT3mhskARoRPtTBe5nbP4F8x2OBzk + 4Bn86k5bFDr+TdUETXrXgPAWee3Dne2Fe3eFhVe8caLc+vJU+FLlhSEOnO2hLgrSGFLh3RQxnUdd9kOC + 2KSJpV41jHPyx0NBk1MMhRY5V68Poe0thsGd3rs/9JtXalFMo5AvsfA+2/PPho6W6s1wmEmcJjSCatwH + t5i4BELDi8qSzTNCXsVu7YWC1czKX8O2yGjzCHlTsgvPORLJ8doj3VnUmwWLOpT7Nsh3kdEFw2QJTwdF + PpMy4jEIU10bWvTV9BET+tZaLtg99mroI3WoskBHxBok5bnU6XelX/mb585qmPWIWhpE7AvzOOy//nf/ + 7r/+V/8MQ4DRdD7qAhkm+h7CaKK5yUQfxWw9fn5RcGRuRPaoejIXAgspqqpKhsiGFj3/a6tM8p+6M0OH + xjJWVi0tZTbw+zT5H0B4gfGB16gOAoc+ZZcRgxfouLdpSqoX8iBY6DRpATkyP9mNcpM3m+VWhRr9SO4u + B2Hke0GL1t+DnsIifvvmTdbO99pn7pA7Vy5eohj0vqTo4S/HV085afm+maoceWCQq88e7a/cXaqOPtS7 + 4Z+PfG5lg8nhyGxyoFVDQWMs2RUXxpw+ij6kqSePA2vhe6GdUdXEkSaNc5orwouKVmjMa0CYZ1PE7uEX + hbgrKgpOkw4GpBOCNHnRqiPN2gZUOIU6FhqJZRIjyQUd/4a4eAb8EheHGiGMK22IiCo/e/F6Y2lZUoUy + gML/2YL0zA4LX6oKYjcTGeY0NW/Joa2iZxhhOuOFwz7lzlOWmHs36WabBcKsgclXU/KQxhNaSpQd9wFa + Pee7eX/h1uOHO6+ePYacbO13vQmvYWrmhZbzOe4akgVKtfZEHtnaXPn5T796/eoJWPjJu2e/+zu/hMWl + f6PLbXxqktI+8bet4S/yy8p2JsSC3xxbNE2Gn5zNlBdz296vct/eZ5nqGH1iyp5bUqgGCWNBecQ9CmyI + bjMRHUYs1WAlZVD122wBkLfTtLEkfn8yaClNZFqM1XQxnEtU5vjSE/BGSXOgYGIhp/q9e3f+/l/+6T/+ + R3+JGjkjP0msJ4JqziuEWrT5CwXbJaORFP7PMpW+AGHNCON+SkarUsa50IC6CQSOcfOQ/+lPKkZmaqgl + q8Dh4A2SYb3d8ZURKDwJ1JEOOhDKgE3j5n02k0/ZPX0hU0NTnNKDn7QnI3m5AY2t0aKBYq0mHmcNdi7u + 6pWrR+IQx31IbhQ6lHn9eaySlIVyAvvxDuqIrZxWDZkQGEvjEC7zHwWz9cK8U04w4jYCuLl2ObwW7ytf + kfORY7h8jm+o4/1B8D/vOIfHCsbrZDFLHc3xGs4kP5vqmZcB1xCROZXvFcFB7pw0qYOfKM9WIfRcVp31 + YPze7pYqiK18aFseIJMZ2ZhhWn23RrSI2MdUlGlqrWrYSiOtWCgdeeBfuUOdvQfaHB6x/+rC4s7aBlXI + Vim01YpzLx2QCwQOyWLOo8ju6QaE1kymByfrZuHZekbYWymarcmk4773TkRbRVCjXgiMIlmBwEiM1Gvo + 8wuDL3Ucih47EsGvPn3z65//BF8x9RuIX5WyhpiDW+SIal1Qe77rVgyolD7GqKMbz588/Ms//+3bN89A + Ssy4UXuury8FCiaP2tLBSP4cvWoamhltvSOztGogIOO00MiE82rqYjz5cwloIh93lDSrd9CszvxZhEH2 + Obexyen4M6nmHpQL6stNRrQIZKJyLEXVwC4MYZYnhV6lFvM/e9ME6dR5tbyQ+fWWs2qCoDOll7jMOeUm + QEgQDEvETtyqMHwKqXMj+6ocadIw7c4ci7V65aYIju1NqnFeQ5fsKvffLmGxe9kj0ZsleJBnUZQhStbw + uGlSGA6kQ2knF6iI/n1xMyykoZ5EsIlFT+Ayg4nZmWilP8E4CxeaOkCSWgCQdGLQce8JIspSsaZdR1Oz + xqNqhAk1lJF21jdJ8Q8BHwjn+zfv4KrRlDnTbdng4tmLc2de8BS+vI+IUvoQjdFtR6Fv6qNAbOckPceW + c+fsnlnvOXv1p8Pz3eMfFYkWfSzum9oVQ7wEtnZ2pTQnvDEpnG8uw1ED4Zcv2FzNMUCb8KL5z1RCz2FB + Jatx2tOU2VFmOFgyquuQi9kL+1HVn3A4ShCbCq4PF61lkpIdphl3JIIL9+8wiZfVQYuOkA/Mm3Q024No + /EzvHgliM52papp0DwkRBITYRECf/5QBzaS5otSc0o90WJotO/Qbzmk762sqZaVSRthAW/cqJaA2lam6 + qDQgdKVMm9OUgAeQwBySyUlOIkxtKBigqI2zh88reQFdDmA9g9zZXH31/DGVP0BXe0sCs1cimyOanqst + qxw0M7yWLCbGh0dag8MYR5UNEtk7ka0miYJ8XMvL91F+Qs9KIwPM42LKe29ZYHz4XSMzQ1xPohkpfmWl + xtfaTWTcQWa4DRx7iEIz3mrVQRdtcbJ5vTDhcHQKHFrpdXXIU5vNULw/fbqPCrQAYVwavbjgyR8bMF8a + HJ1XGhzaeWcD1kKKKva1PjwkdSbg79GwcUi/+fVPX79+1rBwQEFWIabNf/XFO4AQnKYZFwSprGli3rw7 + fVHs0OgN9SEcdRTkE7FVnYzQ2VGlifyTKunq2hLeKjaVHhSMP5EaRl5oshpDR88UTVZzvB/vf7fqUceA + maWfVZXSAGHTBBMc5NxfwAZvWOnyeK/5R7GVAp+5IJd0aOb5k80yM2MnBItuINATxLlvLwHV+ITxAxe0 + oyS+euEyrSzRSOh74du5ZEoR93RtKaBvP1WQ1hOO7wMUZLqLgFBYKEyMfwVHmkypkr346YGhfUYRIRK6 + PtzbXrh7J3nRg/JCXZwEWLStz61hdDo0kkI5RYVGrk+faUwpehl1Gaq+wiqzvb62u72pANyXoZ4d1jWo + 6BfY4DyCQBrFWO9EnPZEsIwRaCMFaq3IHEY8NRxsSCW1qNoZlQxFhObqDAqStBmnd+v67sbG1tqKO6GY + 4kNd9roZ5BQ6tPfMNcFIA5tBUNPyyJYyCgWbc2lVnAqoDMzUtKBehcwdW65pyR8JXwE2k4AGm9oJUlU0 + Q+HSIFPoqzQxj0FvKqFRoC4JTHnvGsTBrEH7EDg2UaBCwdTFQA9iHcdmyS2TtrKNmlVGOBzH7RYr0YqF + PAW9ZXXQDgIgzodxuERn10cgLKcfUddNBFvWFNaLgrU0ONNQb8IZ3iAXF6c35CeVEc8Iu1g0S+m6avKC + qnRo1iBqbf4AzmburInUkEcczCrBkPo/+zu/YoKuh+BWzWs/kfyZ8/ONa/hfUJXfWV+/fumqgWpZpmbu + R9Qua5hsEfC0UHpPMO8Co32vXLu+ubO9uLzMu7Up8x0FbWDFzt7mV9+8I9I0ylRAqHyR31ZB5Hemj8oU + 3/+HtwpzbXYnY4KVkxfrLtnm7p3bGxsrfIXv/1LW8wd+HKcC9wE7P/IpHDwhD+frZEuyFGzkOJH1OK0A + CDIJ8Q7aIV+fay/tFDjyRbUBkMk5NEk0HauMokyI1caN+0zYqylgnE8FAucQEVnZHiGwp4BZDC+S0UTE + 08i6Lp+/BDxzfTMtEpwQo6JKe/5OlVoRs4U6nHzS2nub41q7niMdjKkUYR81dA13RBzm9FpMbZnfxQi6 + J1WZEQh7vsjjXLfwhCltaO32MWHc/hnCmcGSrZrOsE30UbSZFak8jP5CyzACHb2zwrSLvqCbywxcllBQ + Ko/aIR5w2Ow0I190YhA88w68SN3EBwZwWpfh9PHizOIJYlq0qCuj9CamVrPkl0MSmdiW7YlNBRpT47Oc + mcOSYp+MjOgTlBpkWqe8IDBkLyr7WVKLex1dsXeug22ui3H+0yZYuUxUKXURGelBgd/N0MhEB0v7IjoW + Jvh5y8Qgk9EevE/GYp3WOy/9VE8KOWcEt+JIi0BGHTsWZum0FCcxsqNzCtulI/YCBKPoUDkOjqRI2qoJ + Ai13tNZg04kOXMtEnlZRMAPWyQXbUsNOAumyr+uAe4y4ntz/lCF1LnjcQcYjCXoJuGtYnhF8X53qUtmg + U9G9vdStO7efPH++srEBFwa8NaXMee8DP2F+sFg0w5HKnjRZU2869FsBQv55yA8fNx/l7AYCQvqsJsv0 + 3F3xAQGZJMh8PsfEgNyM94PIi4ZdAv33fe5H2d6+P7o5Z3w+Wa85KzMOYAwK7o5zP6uPchjDTjzhqx+R + A53D4eg1o+2KKHmQyUxSwxEIg9/IPcSp7yd5XgblSjh9+fzF6xevEonqsoEGMXa0a2oCDqtS1OPTKCLO + zQgzsA0n7uY4miXDqiAdmwhjxves3ahSQ2JqOK6MwXNJKqlhVAfnFH5ink516I42fGGhTCb7SloKh7n4 + OtppBnoR0XiLYazani/ayHU8sWlpbPLIaBXwVEmZkGGA/1X+nykrBYpssoTBhiqLVVnT88usNWauKWY1 + Oxa0gROb0aExKell5bIpP6s1aOdgi9KnmaLRcd3SXKV62pXSQc2IyJyPO9v46bx+wu9SQRwEohY3jH4x + 2YXS0sGwQZ/V8U5Lg2K2505ZajKZAofRKQ9I//i7z5mRwt6q8GqkHCb4lyyojCCsUjDTBRR2o6oRtmaJ + 9JpIWXUnSEFBfMvv3UJSF/YxeYk18AMgrXdiZh59t49J4Zuo0HorWGiLhFogcnFILBwwr+WBkzLhCIae + 8rl7Cdym6/6GH6WFLVmkNnmGMmFKRq002CcLsiqedllpA7zScVFaL0gWfYODfjgaWlIOMoN+r/X9OHh5 + 0A6JI1zq+d4g+l5H+AM3tnPrGKrRw18l36PSvgZCKgX2p/Ja9lenQ+sfZllQnS/+M6SAVSMze7+FdPY0 + oy6vWZVeh1R+Qio9Xh5xtXDlwfpQsScywHXYLkSb3Nv7JUoc6l1Mbf5n6khD80Yw6+q4ppfpNUKPiGu7 + fWdE05sxPYtr3K1KDPo6gmt1aCwv3XeJQSaO6UHaCoTTwo89XvQyHRFBTUDrm68+ffJoL4tJVUGT6y8v + Sh1r9OZ2HX/HQksEN9aWX+zvr68sVjFkrYdl9nP7jqWDXv8L7zG8QHGlQW/ZpKQ3GH9ngNqSLcEJmLey + dH9rfYUmceVYoY5pfRpssLay2PZsKEUvf6CjvxbeMUyu7/rS0e8mjycLe3qkEbwN9twmLbC28cBdDur5 + rgYWUvyzIx9stYMabbLbtNKmwuo+rgBkczAYZ0p406e465ICTkRPTQkViWDpnZcnkSeFnuEtLtz76su3 + T58+FK8+3FqJuo2enzrCq9u1dU1MRk/Xx8vEwbnD6E0yCpl0lh5Y0FglduBO19SEHZ3wopn8uTY8/BGL + NCYucNYBVfelrWt6mTSgqaqZQR1jWx6ja4I98lFgKCZhfFv9YilrwX0AokjR5jtqQMgrnD/Pl3Xj3Hk6 + KwImgzhVOnj6YqsaApMtO5xbAHO2zWjJWQRS5fQHIoeergX/o+zq4+6Edz2XjE2w+SgvdxC6+3nWJhvP + RAA8i+Dg9dNnj/cejJblDfRayFSPdhJYTaBxzA5TOHNibXX5t3/y86VFm1qZp7uzIjKXiSGFM3AY+d/d + 27coj3PNcHmjGue3rrQKhDNJYa/hN+Vbi3M7KLbxTL2VYtpHb3oEn83brLejN4vukrbi2OKyvHj/+eP9 + VNPwJ0Lpaovc+qBTPhp3gFJUiMmM+eJoiLi8eI+JiXR2CwhFpk1UM/yTdIf58vxOJ7Zq8az0hVQP30sy + QvLCo4Ewxha2VO8OZU668e42W86QWZK0MUgBjjGyLucbt9dXH+/u7m1tWpHyrkGOsFB1RDbgTekpSbdm + HknqtrGxtLu74UCYE5H8jqqAGhzfHEEzmWuGcNEFwUcRklfZhxac86zXEmgpTnua2OYrYSjamgWDTO79 + 8jI0b+XYMRG8DATyCDukqQb7sVlGdL4YqnUQdragTdz1crLhpdLBBEL8XGo5kHOD8ye0o6XPtcVwHfYS + F7P4rUKAOQ52giQyQkGdO4hGK33in9cdSuduiz6TofHihWns405cpNVQphqt2ePWk+GWjeJDqRPRSGYd + 1cW+X1F1SxAZAGiXfhMgzKxJJWr3RaajT4vmuy7Cw3vrq2BUb5fJkNudvoCa8Aqjl28jJoImJV09Gzmf + FRFhUC9eunrz7MXrAYHWWeFYOLd0x3HwGc1FQWz4+K4no94/ABh4n3inMV/uw2qHx3xFPndOgPdNKGH2 + sB8zrrxJNJVduVMfLq4/9IdzbnVl6fbtmx+2oxvXrv3062+ePtzPrDGDpiQNgj7o5cM87Y4gSH276KDg + C2JwB19QSQi7KiypUT9r7XJQXdAD2wvmSgPsGNBZ8EhTx1gpnG9pMUkKk89hn1SacfuTO0ZxX+t2o40d + tXWEtQagMlTzUkkuMZpTmDeWLVgPpYPUb9j21rXriBKEhSWi74PspY9XliANfRYRhXkyNAmpvfIMuZKm + N7enIDOa0lHN6ECI5mjBh+eldjRTwJCYtnqY4GFyywfFjm5trHz7xaefvX3V4MRkOKCU2ZsZzsmxU85t + g27Fnt4zts5hBrwJ6qoExrUwdG40GA5f7Cp+yWJhHPPM8Uc6GJbZE28BO/L8WFIpk42YqYtpE68CIGun + INuQKfItIMR99+o59lkkhdkDM2mWmDQONiui6iAT/IGfS9E7P00KqRHalMFzqLHWl5dhI4Rz2T5f5w76 + yRyTVbprRGkQEk3aNDISV9uF9mh/95e/+HZleUGlh7iCBGwORB5fzoybKBBYq/sTOnT8Z1kKTp26fpWA + w/q8CxAKAX1BcThUa3F39JgDhaK/BHMhjmmrt/23Bfc16Oe+yWdKze8iVUPequCzAyF1xDMXnjx59Od/ + /tt7i0umJvVJ9yYZ5Q7HN7scg6Wk/LP4YWDAV/cxwICP7BGtzW/esGh+GB7ks7zHkbnB0157jlaEHFty + GrC4ze2DFONXj8HjHZO5Xjhz/ur5K3QmeEp03LkTR0YJ7HxzYxXm+ZhkaUugI3s2sIEZDIs15db6CZFV + R8Guu5ojkGknaD1Zp81AvqtaAOitFLMXiZ3rp0/p4lRoWSvtY7A5tBiOvM2QFOpPQBQxE8lRBrxNLxAe + 3DV2bosL57Cld2rAanUXEVBDGSabK3iV63TLNjlfLGTqux97wiQlFeBVuQT/RF6I6BShObsKgvQa/Yth + vTZtty+WpNnZZuv4LYDw2t3bIJCZoWSfXFNIxrD7To3WqqFnV5nz6Q7g92R/96vP3m5vWWOGYVJmXeME + 4KwI9j3Yxh1la5JXoTdFpIGmXd0a1T5tnIRnsqaIg0oRNBE9/ULllxY3jRK0g9fHIplMKQ3WpsxsnJeJ + q7ogNBUEf2382OzzxN+ccMNHDJZOwd4y6AazahYMGlwBECuknWC03Dg1mu2nI/7ZSciZwOCSVC9zBxRk + s1ILNEfcelrWXtg2aykEMnKc6e67XjvQ0HjCzV99/x3d95yByYJmcJkoaC+FM8WMuZrXAiMpnBQF85+K + epXqNV603k/leZYMc3npCNgAMhYlnm9DZK9edR5O69jAFCaDVda6EEDE2niKUYXBkboHNx0UNnQ3MFJV + wNMA5PnHjx988skrrn8f59vaCg0O5/3MYsMPxKrZp3OMLDjMMpmF2/d9LT4+EvO5iN6mFdnw2/u3784l + PGkGn/Uc194MKg72lpt7nJSurp2/CoIeAocf/JYD7toLz/wzxaL90BztzBGiIWWcZw07+3/HemEQpAo8 + 9SedFSkfzUuipoaTgoGyQMWYNdKsBGnlZyaqtp4RnifJw3HNfHNYL7SIZKTcFAQDQVqWErlVDeA3Ua7X + xYuGkvZPn2KfKHjpgqd3MV5HupgkRfkTSKYHIYQxMIlcsKWD9Z8lI7Tq1MR9zdoHVdnSnVEGWQxo+jhZ + AQmDIBjYSzY2D1dueEfEbZtMNAHCcfavVQ0X7xuBim7F8bL1b/AS4dtS5Sq63wWlpREioTReUT0e8XIB + eHmoVRCkJzrq6zZ8CL12WB63jyUKgaELTS2SHNRkMSP+k98UaGGn2VXL3YPELkmheSwY5pmDmn5XIBxG + LKlM2FyKxuqgdw2y0HMi9a7BxkxM6FD7p05UN87NE7s0y2aaqAFM/cbFAmTSXwjTe1DvYFxf84y2O2HT + sTCv3Lij6z+rhk0dY5iXxcLWJpjaUXtAMfck8u4P4ml1xX56CulAGMvNTJGwhfeRA0TcD03aRhVGNyHQ + aO5rTSxziln2pIkurbAZv4xe8oxQHfcf9sO++NznYs9BO5ys2h/2uh/8LP965pc2xXTXPRMrsdB+AFzx + lMvnLt2+dPOiWRsc+MM5gdtgGohPtsvXnXsAhzyoP9m37HvU+QMdcfU8gx7UNV9FpPGFJBJWcl8Pcvob + c8jopUZuVCzM7TNalF7U6NAOfpEXJgrqUlSlfRYOJyX9BEJyNRI1e9I5Y1wJr1lTcgxb82CsC4e6j6uI + ZhhSqEJOdjH3cg6zwpvMfQjtL9tUNLjKmwCXOZT2qRTKO5m+RPmt4aIbUY5eM2JTp83aQkH73bopYmCe + xqYPAFBcuSMjdBdpeMjbiGVAjq++evujbz8DwJJKrcJLpU2zwFMRCLaTouT+xvaDtU03JOvSTfYvX7SO + fJaZGQqitdnd2shGCOGiSnpF9tl7IewVm5N4zRHrkSj3tWMeRnNommBgeSsN2iP6cMZ0cLB4bXJc67jn + wJKaLvrekgX2WbvZIzGMlajmtOnDoAdrFFUFybNWMnb62a0rRe2kDWlojhvrStGJ3faYFHpe6PV45mOg + 0h9I0ebxWwPNevXNi1ZrUdCu4hEFh7C46EUT8NSPrLh5IplJl+1cgiKCrwkfixX5CYjOcZYVcioejIww + l7woGaKCISk859ZrZIreO2jNgprK5OmjANKMSQ9VjR4OOVYBUkv/oT+xwckTLHqsDB9xHv0HI+Jxnqjs + 5zhbzm5jOhKUSzYBC6bi0ly0s9FXt2+mWehRL6Qcbs5WFTIbCkbqFn86eQJvnUvnLpKnIksKzqGKSEuq + p7OyMvge6OkSiN0WIOw60hYhnqSwir5GJ0a7tLrjqHJDSoYEx1T7RJ+KrrHfB8tHVfzPikjXCxSCqMGe + KKPp8EIWlwKKMYxi1uYxi4XtjmqHCvB96AT8VgT+vb/CH4m5S61eGC2G6S9TOLc5Tmzi65QXjmWtKRD2 + 6pcv+qDFq1dPNFeI+xo9X2uKPXlyRUkKTwJmqvay5YXKCJfoeSqMJU9cXrr3l3/vt7/9k5+pPZ8REyld + AQhRlkpN43VBMzlD5PnlZ2+ePNwzYM4XKhjWIdlBUYfEizJ5sbbDqxewdVXG7MYGk0ZsRsRgzKdl5ErN + u/iIj9RVo/qQNzdWmPJI6jxGJB6gNNeYqpERB565YIin5giJ7QxRRjghG+I08w7CuM0RyAzugOUcrhPH + rCLoWeBgseSmo71HgvtWCwjJzBk3k4AF5fqyC8310gYtM7fs+p1cuRHIJv0zZoRtPehLRCwLETqX5aQS + TrHU9LUmAveWLEVwrny3JIRZI4zFcF5W4L6jZy6cZmYTriOWD5g3W3pwY7p24qSrRg0I1WLo7fYf9qMV + 8/DnckqgI6KIamucT9P4gBzrww7vj+FZEDLPnuzPKmK8L+W6OYK+51Ee/ullYgcsccXwW/jpSeL8AqEV + /4ygvszsWM73nhoOaBiiLwUH+aMMb3J5cAVCAGV1cEZNKid7K7VqXMnkaswccTYvrBd/pYNKN31CoDUX + l9jZIutSQazCmeijr6G6xA6IGuzWOVJb4ODoyOouxbSKdOu2P02stpQO5lKbC2uTkk6NSRMIY1RhI/FY + voseMo1RfK6v04D8lTYJuhcAISV8NVsKpJk0mPe62rTMpvRxUsnTTtgz+e4/+Ks/+9lPvjK4Iuebsb1O + IGR72jZ+8fOv/+W/+Cd/8oufgKxzjmqeAsg3MwqXnStrzKTQ35ryYBeCDqRopIPAJ/rVtbXFiSjG98ZY + VgNCGFFKg3JmmV8R9FxQPYJ84w8ebIHofNRSRfFNybRsNKQdZ82X0fMZSA09PG2+RJHJWCKYJcPCiPaT + uZ726SPT3LfP+qimm25Snx30JnTQJE4POmG5zq8uLSIim1x6EaCWKUvAKO+QS0HhbMa1fvknEZqLQV0Z + EginorxZIMwFZ3Jn0jBWwv22nvkTlD7OW0RZ064u3LvfGrvZhnph9dd2lzXDP7Gm3mtYf4xl9qaxyd55 + xPRHp5gLeNzVm6fw8aMvxVHvg7Or90SKP67N+TDBwtm0D3Pin3779d27dz7W4U6+LyFWQ8AU0ijm6kKs + rD9zupsBYKMv7Kkt/9OektyPKM/TRNNkXrZvNiPELBJ0/Iu8MAAvMkL/j3E4hR2d1POzzp9zJ5QUWkQ8 + z1ZDjYZuwN3hUElk3oxx6kxpdNzP9bVK7UylRgn2Wf5cHD9VkMqGbRYL04k7FtZoxJ4z2UeQWWg9K2ih + dxCEcOvGmDEzCCC01vtKnyaXOFtTnDwyW3KLZLElhVJ7RmbZ0jVgRscjuK3saxYd1Qso9SnN73/x579+ + /uxhbtxS0hgWqH/mC9WjEnGqAwhC2LE/+c92DIbQuvEh08z+P/0P/81Pvvvc3dXdMsaZZ3168U//qFUp + DLJ6TASrkRB4+flnr16+fMT2YgLwWnvx7BEubh4PiRW4YPfHfgk/c8JBO9nRycnmki4JZDAgi6FLBQtz + xErUAlsf/dRWTZcGzlYvnj2+eeN61ciYyuzyJY6Z3wo6hYgZgFZE9KvS6g5atzeXVgmuPIWpRUFvnHAF + ol/mqYipFKgtH6mSq9TohCYVnE0gLR9s2WFP/oRLBRfngxEbcPzV8MTnLiGNqVjYSoNZQczlmLcCZ8W3 + MneBRnl77vS54wPhx1rl/wD7+QO/Kdz5tjc3atNI/cqPSrP75zGeQHFO1Kfn/XZu1bwwZTWtrOgb1TJh + oUMLy9/iQRMPu7C2BYwRNvqkT4WRIlWGH12BPG4J1s3ryY7mldmSQrO9kPhbHcETOkgygeosgxMxGgET + 0xQsLGqamhRGc6EaCrOtcNJZkWuZLWQuc2DdZBQOC7etcVoHfcicJho2SX1vtw+phXNrc2+VONX83tB3 + XLu8ubny/S++e/H80dbmKgiUQFj6DufkRpE/leIiZtPMiGBYYEPNYczhRIljDRuMyfUefAMhY1NNq9LL + dV5ipIN+EQJ2HslZs0lrRlyI3g+h5gB1pf+hAd78d2QuPJ4aJi2sTyM65VtpEGDDQOCv/u5v93Y2rCsm + RDGXzWorbjl0N4jo0MWkj7YLnawKTPuM53/SAKdlmtSeJgm+c9Mp0AiJyDVtYL1XnWdvk9JgV4q6drOI + mRt732h85YUR//Ux9IOtREaKSNBJVQ3EYmbZWRhRqvtoZ/ALzAtN42Pscmt8jHK+hEn2w/vimsNRjreo + 6Davce5wRMiGGBmvXnrHQqFgEp0nSMW21te319ep69cwumR+NKmbvFzEVS6ADRcTIHNZ0yOxguUieNBq + mQjZUHOSFDZEJC+kj1A0admpveHmYTMFIIH3HwCW3vcl+AIITz446Yz86W/urXG6M1Sl9nXUkIeTdCY7 + r19ZhksZK5WTajhN+vlW0sKUL0f5ehSO1lzQcc7nitnp69sVzVhcCVyDXN30O1RSNOlQs5txKwpFpgfp + ZWpIa6tADJQZsLBQQyYcB88YW7qysljkA0LEKjTo606BwOjiKnA4zMeJYqGRpZb2MdSGxXGSKbaqYcdC + rbC13X4Ewmm/mnKUaJ+4brkLvfBGyu1tMTXJMSAwsg6VzcwsAKYRhvn4zZtX3r55+he/+w3QxWLdxai3 + gnGdpIYg7v7DbdwAMhecZGnsAZj8za9/8ubNU8vDZvLCCoRzUz3boR8nLgGicxv12lsg8kW1AduzlBu3 + 2d1h5B0awplsnxfV6RRopIPsHK+fwfEuMsJAx3SNUSGQ3pJPP3klp1l9fTmuUpmi4x8dES0XNEXoBVAQ + EHJzmcG0di4vyoOgaXN7iJYJnaghEx3k0GkxX+eRDVioMFHGFBk4gojmp3/BZq2wZ8e5sJUhO+RkDiws + 5QlFrIpEQxrjl6qu08RCXscP8FxTz3QgzNWDKx0gxFjTK3zxM1KjpghVJF3QcbJGzfKSB3GhBz7edmHt + hD6SF7HMAXlhTuybRSCOkY8k1+X3hagjt58kv0duP3cDog8itPT55Htcc1mYWDsW0j9yhQ6L+Pb2+sL9 + u7Ofs3VzXpp2c46JYOcNRBqMsZViqCkjWrecnIWzEmedqfrNoS4vLRAzZnEgo0WlhnzUqHJ6jbDM74Vx + IX8qnEy35K78THKkqRetSWFYbzeatCSLtqBk7CwGdVSch4i0qdV7z9ZQvCkqBq1iQZOalLSbd3OftUzm + IE0xGESZtBU+spy5TtZ8lgUnlZ1mb0LBAMKAw6s3XDuTiv/aX5GQaXCCRoZJe45JadJd0QtApWbWCcas + scXQ9vBkCZby7g0ySNzUqOzPsqlKy6wf8dGu2eLcuYFAZm15EXlLbqwqY9QmrQfffEonu6JFUlM1kmUt + GaE3hCCFvXsTPQtHoopgymWzL1DDjbNkKCyspVZ9YvsPdt69eU6bYM8Lx/FYhp1hpW2wh06HT8CBqhtq + 8xVztPsPtvET9upgH+askEiPpEamcqFVOKPkj3MGPyOAcygQttRwtNKeuIkOzRI6+Y+8TbgWC7tv27zr + iYpbeWH7HeV/nsv1vrOzwbsoutCIeusjWiKST1IcfADC2cNsCvS7UKDnkTN54VQaU4o787HiKKjSSHoN + XeJOIqI31CO0ndtmzodCkx/H+mH4dOSzEC+tLC+xemnLg0CRw8BR5Ma16wftkA1AQc9l7QfN3LdffL62 + smwfN6ZzAOHxhtpzWsEi0NVw5JHPbsAx3Lx54/BB82aL1N5s3QPnxLOn+0+ePJhNav0tVHJg0mQ67Tmd + YOHsBzuempYFTxoqJvFZKxDGKc61Z9ajmrfSf7rRmuGiMsfmMlOuLksjxZrmgzPSNV3YYX7Bd4HmraFd + Dt3ud1QadHQc7GYaO5om/dl0P2tnPPh6zNX1tbi+B/useowC4MJJiaATpGqo6IngbOFQj0ywcAS5khqG + 72hvfcstlReqFyLbDZXwJXIol3LZyGV7sBXYKnhkibHd6R0OE0GKoFSQph3u723/8rtvP3nxnFW9Vg0j + jfOcb3tjFYs4JY7RBRH9kYltdgeWVaCYNxpCmPTLrkYIBOqiFzAqfx4rtIzw2p1bTO0wK/P8oMinkcaw + n2Shs2s+K4X8Keyzr6op/nyWCZPxBtG/ePcaNz5PCmeNY1JaHAGTxFZ5OvESd28bmyoq3tJQThfzeRia + fEroNmkEmkJgQ8FuPSHi5CBc1IVWK/G6EtsFmCWMKAcq/+Ov9+7ephlDU04Fb+3HrnRWb6neGgTGQuHr + TJJMI8ixgCUAABxFSURBVCL6v2xMzSVaoExkUCt/BQtrTH8EEzmLfwcgIvsBbkA0ftvY3gKHl4zPnfs0 + PjWC4NnV+SCcsLYPC5yPCyTkOpDxov6EWKxps++YJY6ricjwSHySxgOwYQEth31cOhcYe/po/86tW0e+ + 0OwGYC2dA5ydBz2XdXp3Z4tYbHYDZVqT52YSNm/7iBvqn2o5MB/P3LHemdzXKTsvdovCgB9JC/iaZ26S + oq1CEEFirRfqyhkRMVSjugKzMlGD1rySWRRuuZlfPtJgL652/bPdsmRorJHpYqZzagZJnjcsT8ozhpGT + MmFVzbT759Vur1yQZZFcgZU3/9n4tOwy7GN6yA6vWwO+mboBEkR3WpQ7EJb7lvoExdc2GP4aApAGewUC + hzxpQBd1Eegp+IpZc31LEPWgyoEp1wzkU8XRUVCP2AZ3bjx9tPd3//Zv3rx4ikBmBMKoKQIeMkoVVvlr + 9bQ172e+2IGwiYBilERIZFsBtWTPSpoFhLzO6v3FZRxOiZr7R9d1MZMOltrTObHKExBm14TiGxJi/6Jb + OqhcMIqCw5xLywIbCsaeGc903adDR+bnARnzmJxrTUnzBAhrdbD0zts5z4oha8AZ5BtcmRL86p3Gdsr7 + KX8GE6gMVf36zeBVWNiDYI4AP0KW6FIl8b82tcHswiLIZDcaS+erjyirjnxjXtTRiXsoY5eXF5XbzBYI + 5yHiZAUlX7LyHz9UdCl3YJXWcsR5izfHxXfOdKHjDFVgFZfWVFz5AWjcX4Z9YucAXAkFreXu1GlihIP6 + MY4DZewKffRhnXla8g/+4W+cGccHfu2JTwkLjiMNSHnLXAkHddBPDkpwXuW7Bx25zh2dNy3/q//qmJjZ + Yckas/g8Bwi5CJeXF0CihoGDPKyd37Jem6BgXCe63rzgkJ25ygXjkjM9WilRZO9E1ggVH8wGuRURZ2dT + 8CROcLdV62PbiiqhNxSm9UwzXcv+wu4AORCkTQoBpIkKA9UcCBHQRjpYVPV9ur28uNgSWy/Vq2SclkDY + spOxsz69SYvcw9sNpS9N1WgkUoUqrKlh7zFPzADVmNkEDVifIjCrWs1GqAJ++pM6NGyAMNMzYC/XVhZA + 0wQwQVruITG1ZXWd4Yyn3Aj9i54oPLND0ltrihieHhqiNkq+dUcUCwI3Dr2HrwBrlhVZhX99rGDxixnY + aeloGhBG1MKXxSuiiEmxqEqDXh28KPArntpJFehOZ9TZZun+/ft3Gc4uXWj6qNnJyWr55PEetW0TakZH + rPxFh1srh+esJbsiUDUiDePESzfR1jUxTfsyF8zrS128HI8i0RaVEpsmNRrXaWF9+l2PbkM9x32D00IO + NQ6pdtDXNDHC7lysShSeq9C0mpMrGjtivgdEt4DjsMX8KMzgU/32m89//cuf3rqJep8E8YAxf3w+Tx4+ + fPn06ZHUKAznz3/6zf7DHQ5LH8jhh8hfUaFvra1trePQf/XIjY+5Aa/LCXIIYAC9sCbH12Qe83VZS7Y3 + NshAjrN94tbcjTkTOav0Dc6a3czFN941PqhGTPBlmqwk3FYLQNrpJYddsaAFCAe96CQvBILu3r0tMPaf + UMfEP06ddBQxRrqwIm0up8vMuLwJTfhdhTN+7VlKNzcpnFsgFBBWBc0EGo0UKqMKSxOFLShyYqt+bK2z + fra5sKtJSQ2Fcyx8ky5D0244zTVKZqSU6ZL6NJ8UHaq1FWzQdAInSMNoRvpGx0Kt7D0FrE3f+lOR1TRK + MJK8yBElpxwFli19bGKTRMTcLJK27uGSFGugLETlg71N1SOtEHj7hgOVErKed6YdmuWO+LF5ijmmer7D + ciTayQCE3SAmGODaF6gS6UzRNGqE+hh9rERpU7GPeuoaI/CjQKjGFTXG5JfFg7wXfrfIxtskphXBGUbU + uybqCUNJ0a3VhpknOgM5kfZ2N9DyVIK02kFUhl9neMqnebr1ybuMZXLz68vEaBrDVKoPppYxno+GNnfA + 163EqZ0XzWu28To13lUfIYhrBlJuHtMWiSags6e3vLD/raSJHDcrjDLCDOXzbq51dT3X2uVL3Uf4Yc9k + li+fP+E7dn3oAbvlzaFAuXPr9pHAhgPkZ5++QqR7/KPj4wNfOfUm6SafLOvmka94/BfKLdknPBsl8IOe + yxKOOyjFqffdOR/okeGJ9skxcOYeVLBkP1BIdFbUb3oW15X++Yni++TV3c0dVpnVT4lpObHsvuXK1685 + pLU/acCztQ0Ncy+V3pUTNzWl07YKtmJ6BrdWM5hcJxYPcUmzAnBI2YfExhzJ9uY6MWnNBSdBa1zkkQv2 + CPdQHU3abeTwwrkWMxFra4mZ6bIPslQKUlbAxXt3OWmcMo3VzdCR1XMUyte1svRUtLaKobPC2NRk3khT + NAYvh+FpfW986dBxWPAy4aHlhYU8bORnwGQDDGVaEweyloE58CS96WKW6Q0qFYagYl7VsDi29f5Cck0m + WmBMqgQxM8sbZbdd9tLQNFtEclhxhfMJ8pVPSTqjFMuYmpRkS5MldGtymI6FzS/GskO2h79lJ7Wmq+qg + Ipiuh2qUwMCIhvdQTwRbv2BO3E1o1AlmvCiW19k7WJt8ajpYwzv5riUQzq0FtmDRBKI81/XNAXhNC9o7 + eisKFo50YitjF/JYGrQVgkeAUvJRiUK99n8Ghk8qULu0+V9bScqKEusJG9Ai+2BzG3KyxeWx7k6Ufbka + d8YLHvMS1wueAEdnXO+7mP/g7T8GSPNWN5iL9uhBymd+8GG9xw7cKfvKRZyy5+WMfLukR9S332OP46Z+ + utgpclDOyua8cZBSG+hcOU5lVK9j3PKZs6zPaNom9UJ2qPxSGSEnEMOV7t+9h6QAOgo6RIFYcho6s2ei + vI6RyvsBM0UtjR2FJLGGXPEks9VB8TAQV0w3lPHNqJSJJl+uWLGRdqk3wXeyOoUIsjYpZ06zZBiqmbFq + mA31vT2Z/bP2sQIWarT1NZfJqGymaauTjND/2a3XUl4/Gk5aanjlSugJ23paXZsvYt4dyzRSUk9K0CtC + +7Aiwzdy01o/sSetlqQVS8ZxhgYGPEJOY7JS78DLRKrNuEhQDFjNpLBTlBM47NXHngUWkjYeJAsECHnd + Jq7xjLCpe8Y+kOwJiTRR4Br7bPCWHSOzqqIaQNhmHkbA2jJecW0J4+keSTg12kQxfXKWFf/UdN86XoZ+ + UIU4Kgnn76FTsEqLx1NFotA8eQSBapMQ2eCnVnD4wj+dzNI8g5QK19wp4pyGX0oaZtscQxoTQ5fOMKHQ + rhN+k7RwDBOFmgqAwYtG728Hv46CrTSoS9s8pK5c5ki0UPAKS3cXSP61ICRvpMVk/DE4ZO24cxM3VLNP + q5G3VrN5CUDXDMIjQn/rZSbM2c72xrdff85fP3ihPtYT7YX9Yzhka3vnuIB/0A+KRFbJHzKVicZjElkO + sb4+B3zGPHEO+/Hqrplxzt0Iiu/Xv/rJ3t7W5K86jz/ovU6fxId2BkP09sOpiQENXO7BO59zqJSuoD3q + UwR+7q4UqTbX4oO9nZXFRa5TbuNpaqfgCIFxWus/eY6Xcz2AkCvt5pXrsEdFVzaHaXGglHa0A2GSn5X/ + zPJ+lbrlllzZLCMJhM4apXami0XTv9+D6+i1Z53d2V6nV0yrz1g+ND8qHtFip4WsLmcpn0kpaUrnM29o + Upo+l6ekjDG+IOFNd0BKjorJXCReS0v38Q6liTBQMDi9YYQhK37VRgohDAai3TDSI9Dowe6mwFW6EjUz + lHlPQ3tiE5oKIzvXalKUuzdpmVBrfyKlF9JsVGHU9pr5mYlc1PA+Fv8y5zPruJuhd9UL2aTilcX1FcbP + W2Wu62PHbK9mzIlzkR02ILx/9/bOxjpyxzEd7KXBKoQJmjo6W5LfzkQwgXBSF8zwaGALCuzVenOYNhgK + ct5eRHJ8DSdXM0VD2HP1qjQyrCRYwPDtW75YqH5VwZMIzVN9hhEdR+9GQcFrCh5QgsJ0waqc4VgYBcIJ + NZopYKt6pFLUFn9f/0MukBv4mn+SC4WrsELgBAAVcOu38K6tJyGWmYuC2kmuafWfAsIk5Lj/4x999df/ + 4O9RAf0oa/KBOzFEOT1nWm99Ah+6iz8/JEnk/ZIxUHQ8ztuwMMTXSG3MsbEsbq6urS4uT4CQLYlmjrPP + g7ZhaeO6mmAeVCvQSJD1Q/acz4WV5YSffG6TyOhwlVSyCpPziRNXnRuKYDx8s6vOvHfPninx2BzJTI3v + BIQ1BWy5oLiR01cukMdZqld/SoFw0J5NwtLZf3YitOSFg3ameyqqoXjacc/6SAGG726ivmPts/bnK2SE + fcBbhUPWqcePd2H7azg/mxdKFpGlo0wUUl6fbdcVCMW5BRCWpDCX9dXVBV6dvvXWZTGbFBZH6bFalmbT + ShChBxG2kBcKP2QKk0hz44Z72TSkyWqfEZgzJCoZKl6jrpysAHmF6w2AbAgX4JcM6gwQBn5LiuKmLYHK + i/fv7hIILBn72lHQ30XCZxZQa6pX4XD+Bt04prcGVruDxoIWD4RinJYK4TpxXt+793LgwzJwBmMKKBO1 + uHHWff7pm5fPHpsHjcfQPvnSPLEFda9ePvnss9csKfILrHAYp3dLGUE1WTslHGYQmZeSt9gH0VKvr5YC + RnWwlQm7kG32ErYU8Oz5Gxev8Vuxcr0ZU3rxIvn2LB2am1VRDKsQx337Jov9DckaJvKF2RU11p0DJB6t + fIguAXq29+PN7mc21/zw1Vs530FQpzz4g/eudfaQpyPA43oB8/iGTYepqpjziia94ss/hlrngw+vPpHr + h2ayw/Pjj/JCB+1kBiaHz62w7akOtdNXe+Pg8VE0bU78VMnWXF70JOnvtWtYp06k0vPQER8mGdA0jWiJ + OpOHGSSjh+DikAXaqpF0aGmiUh+FNxQGoXT2LKJBMKCaVFX1weDl4SF5MqWspza99s4NPZJJYaaGFfNy + HUyH7qqq0IrZmiuip2JWwTihQL1eVcWNkzH32XExDDKMvLAMXlD1sWpwrFznNKmaJXrm53hTRTQdU6/j + 5nzdjHuW7yfgJTgJ6jLFbMVFe5VWEYyhiYbN3hPSeNrgZsXZ8qDvp7cAJqoJC5X2TW6TpsDMFzvnPDhr + D3Y/WQVs3ni9AbRIf6f98v7VG5fCs169ePKzH3/NdcTJU+Mk/qoyc3FvsMuB0s/f+tXPnuzvzRQFY7Im + ZCNfiodu06iusaYe8J09y1dHfz/rT6+vO+hVXJx/TWXnUtChk+4Ig8NJUqiL9/L5i9cvXgWdbZktY+iV + lpHF37hqPhsTSqkmhTVAZ3lAbE872VyBxSQL5InEHE+f7uOn+je43g7rMBDIpD1ulf8UXAvnDxKD8HgW + wA5a2Y0e9MEZB25w6uTW1vqb18+tg/7UaUIxIqT++f4AAP6BiKVsyWvU53yA1mHv4r1ea25UUd/oQffb + q3RBFCcfPgNqieGL0inY+IoIyuqJm6GfpdSnT8G8UyjN8vgQFXZfCTsT2DmhLqvAeFF1OlTkjP/4ndLb + KxHNKKUJyagnslZiqQzqsEAMnYVpUjq4NQqhqzavW1uN9v8tkJ9So+qJ7oWiej/FFJcv0mzAOhXamRjt + OwBhFKUsKWxzKnzVhn60BnCvDk5uDmxJG3Y4bOKaRpAOipupwaZwZWdrnWbzmnvR5+cKz45GDk4mEFVm + yZ2GjpU49fS09f4nEFonlStWAlydtk1Iy4Jll8hG5lfkoM0aeywNBhyWYCKGSAj8EgsbRtog5ZyvVNok + XLLUpimlLsYa+0IgE6rg2Yw/fdSIyN+9fUGW3MlzwM+59Lk3ckpTkPpfyxnYBVxZIxxzwamVBNcu+1lc + uA9g57UA65qXxpF0S2kgVC9TNjgNDfVCxCR+uIvRDEpLAuK2OESqxp+K7eJkFbE1jP9zeIqk9VwrYbpm + gsi2tYrFYpVAaK/u1jOECMhHtrfWj1wP32t1/fCNEeszeNbct5PoPXnSRlxdpjPxkD68YOcOTxZBQaNV + D04IebqKvXoDhEW3btAR8eEJ6Id/EDPPJExT5Ztz9Jg60vd69QPOgP6w7vHSiH3T1kAqGD4x7tjJ9ODB + ztYmp/Lq6pI+RpESLS1MyUwCZOdAJEVrtH7Vl+pSydTQLy2vJvjttHF0t1C0NpdRlwMIBQPwhImtajii + YOjcah1xFghbgXCiHa2T2zTRsIxqGru1cmGq+Jf9hUoKJ/LRyAXLqKaSKV5kTi/kKqtq09xPnUgD5Czz + E+bZbz6rp0/2mNhARjXXki3TOy36hRisaWLIUG2D1KD2fnwT5tCFBm9cpDdXoGRpcwS6KvDAXkJacjB6 + uZKxSX3TELG1NKTclA6ThTtE/G7/5lOlMsXMzLW8kO9cO8kh8kXzWREuAS9jBSKJxMWD6oKNC+3DdVvr + Z0pDmwdCqHxj3mTtk7EAyM327kDqYbFUtDBNKaqTZLArSlCsnn/eL2jQxY+CM93mYaG6JvpfLd1ozqK+ + PXNPLfASLmaOOBcO47rryNcvwxn+JlPDWATYYHV1ERssqiqJdSmsm8jrRjC0pY6sbm1thQ+wxd+2XrGq + kBli0qQm8rqWs16R9vBXLV96oRK7/40u+xyMdY6UEiCH4/q9wzQjs6nue2HA7MZ8LnCk1vF97aN1Iv7A + Q/oDP53zlxanbORPPOSCWVy8n92fik64dIU6iM22Ntd+8uOvYLoItXoy3X1K51QKZ9NEPVKZkEwQMwtU + rMg/QcGlpQUvUlpUuL+7+2hvjzCw5YVBzrREsItoJohYqoaDfUbo6LyPkkDk7q1bt2/CalYUdL60rTV1 + PSrQ2F2PC6PVo/uqmpmVkg5KQs8LlXxwhxxL89BdR0p1MPQytYmiZn7gE1658mVuUsa20EefeDCECWOB + DcV6ZkIhOiLmQIbo0BjyyBtXaXhgypIs2XqmKPArlcgiT43sbbbJLxoZoyN+0sihZ/WDCf7WMl2rWU7o + Tdb3laWFqqBRuMCwEcqWB+XNAYfF6DU/4dIsmIMkE/O6YSyble90MI4hqYMduW4KzCE2anSoeNHslIj7 + SbwL/9pJGKQoGtFWKTQpqcNeNAJNRDHGi0gGWjoIeYprSkXJzQ7d7SxLiz6rkC3C0MaIRrEwK/21ZMh9 + XoWXUA0rUbAtCLkmZMDc6yy+/2It6qsPD3huA4UWa1hiIUCICpQclDd10Or6w5MgQzRXzn+cBdw/oJBj + TPbY9bEfpKCZe3zEY198/vb162ekXwe9gZWVpZcvnmb6+HHe5x/NXhzewponD0q53WhPajIizr/8orkC + +fS46hIFJ7Fb/WdRh8bD7fLITDG4kSKcSZlZZIReuogUEIR+tLe7u7mpBFE3Xbr1fr2Y517bdRXIuTM8 + SNF++f4CPnkCwgylW8QdGoTSrdXHUzSJabeemRBctQ4U8lHvo0gpqQByAooIQcm0WLtTlNGKUhp9PqgZ + W1d+tyQVdmqK7Cy8QWYCVAXSDhx2WJ+bzeYzmDdHjDphJmeb2Wc3sAJhM0KTxLTC23C/859hsppprgBv + f3fnuy8+31pfGdtI6DC5w8SoWfZ4Un+NaMPdtHHD8XBkSAFL90v0C6bodza4se+3SGPEcJZcsJKiQ4Ew + TqQoRXc7+F7SduQj+nn0cBcCkBdKzr+e3mAQGRVMGM3ychYVOzJoYUCpclm1i0ujl+YIue3Ca10TjQuN + ELZSo40jjQi4rANo8k/Rfobcr6PfHIu17G/ubJPgJ6UuqcRsj1sPtK9dvXeiZpM/fDHmgC+do/Z57fzp + kNj80H1yuG7MWnSuDfbMRxTK832G+h55NKzm0C6H+5qCgj/98dcfsVx35FEdZwN322Im5HG2nbPNMSOX + ZDvbLvL1hhe2umY4/nV2FJZ7a3WNIlVBxJ4mViZkJEPmEKSzZEu7YiV77ijoj3u5sBtezJlfnwTpCIQ9 + OraFybu1AvlG05kkoBwmVSyc32gI+SOTNg/kh7xwgMMYZzjV0Nc1tDaoKR2h2PbyxROMBRwI3YM7Otus + akVs15ru0/HSwHIKhFcvIbwEZYEcOUpXgJmz/RwclZQmiojSv3jyd5mUmsTavcpitm2mcRU77X6t5NVh + UlER7O0ZjdIMz5cEvFmCt77TtZWl/d1tPjHVR5sKJocoTZPm/EiVLMYnefUSLfNgp7w9RwOE/s+J7nci + E40op1hpk/gS4vD56wwpApluY1sSwVlaPs5SO80cCFH/vXj6eG9niwwvZKIzFoNsTI8UJ3ktFiQWcl5D + Q3iFPtskBgcZSRny6pu9QusjLUdshcAmCHc2SCG3/Z+AE0Hp1fOXlVq1n2kvlj/eUVAQqAd5AeprdZSu + Hm/Buv1Xu/3AdfOAp4FNACFHDlU8f5O0D/2AFyZSuXGFduWLAewnThoKfuz3cOSB/T4+uCNf9PANWPh/ + 9M3nP/vpt7PwrBLjkZ9S3WCy8eT95j/b+deoBz9E/RUUYGVQIKbvh1P9webOb376s+2NNWPAxx+lfdVu + jSuKU8WDSrs2MmzM0HK80uxKgvGAmCXFySKi+BaWJ0l4jBEtkplGkEbY2wnSwVzKWF+LnVHS9Bb7wZWb + tYN1MJu0mmpmgEP377AYn6IFLa3aPm+DMrDUh7SwTlLDzA4x2WKcLzye5SKuyyc1+erzdw92t7JwxaoN + CPFPtvGhslYglJpD2FmBLdMgapB0LygjnL3VstnhuCjpSqUlad++jRCw1BcdaHmViovpDGeunp1NVevF + 7HT4Yns24T9LpXMqDc13ASwDzzqkLK9aPq3bVeaw32bgVOtoNFsZgWIIZMp4yGYWE82CNl+3t8G0mm74 + qndHhcqHc0rwlr/88u2Pf/wF4QjnUuSFVAdL2FR1WHTZZR1aRH2hJYK35xGuDnK+HEMtOJywo+ZcUXLB + ioJrC0u//f4X//yf/PXPvvuGdroaVnKVETCuLi7tb+/y3bYR88GLThBRVzoPgqw0gLT2QQW7/rvp41gh + uKpJdc6fMT05PxO+tC4hvkFSUbEQkRWwR+sG8RaAXJ1yURJe/sC1d+7TTZxzuCaFtjkusw96eeusvH3t + Jt/77+PQ/63eJ2fM7vYmYyjK6RDueXbNnP/wT4xlmAieE/fw0KmCpc5gO8X7qWpam7Wl5Yd7OwSVejii + wbZNKQwYv8/k2K++fIc8sl0ATqo0Zxk9V9dY0iz0d7948ZjlXsCZeSEXfP1nIGIbKFolALkuVGnAJEdU + vaSngADtJaJWs/Mokjz1WtThvUFbbawuf/PFZ0uLC9llMaoh0j3rHGkTkHYPfmKkSZMj5VJ69/YljdJh + 2WxTzg3q2jJtMwuZGshMSiSaLIPWYHf3ZvzV5x5Uui8FkGIOZ1HQN66K02hDTCycgGJ4vDW1y4RBHSnN + yDvnkbRduSNYNUdWDLBdeiOUHfY8D7nrBmnEmqh/8/o1PuqWEQb4ZWs8m1FY3dkxn4StrbXlpXuzibjS + wXT5meSFpJs+YNK6I1LflDnihBVn0WYK9OvXT3m5WjxO8qBAYHdsmBDytZknqfvCiIbLdjxy6IglYSEn + 90+//frf/K//8//7//zf/8v/+N+/fvFUV6IEMlxu9G3+6c++/8vf/OnexpZMt/XXMfNr16wvDiRMDKN3 + 61BDOMXrcnVO2BNiTQ1kxoHyLlY4g4EP1HLN85QXZuo3izj1EW2Yi9gHwdOBAPL/AbYzCLUOCazNAAAA + AElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/Step12.csproj b/Source Code updated 08-12-05/Spacewar3D/Step12/Step12.csproj new file mode 100644 index 0000000..d418527 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/Step12.csproj @@ -0,0 +1,380 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/Step12.sln b/Source Code updated 08-12-05/Spacewar3D/Step12/Step12.sln new file mode 100644 index 0000000..f9ead39 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/Step12.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Step12", "Step12.csproj", "{DE8FEF2E-6E28-4456-9712-68437802A747}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.ActiveCfg = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Debug.Build.0 = Debug|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.ActiveCfg = Release|.NET + {DE8FEF2E-6E28-4456-9712-68437802A747}.Release.Build.0 = Release|.NET + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/WorldPosition.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/WorldPosition.cs new file mode 100644 index 0000000..35c2919 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/WorldPosition.cs @@ -0,0 +1,210 @@ +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + +[Serializable] +public class WorldPosition { + public float XPos {get { return xPos; } set { xPos = value; } } + public float YPos {get { return yPos; } set { yPos = value; } } + public float ZPos {get { return zPos; } set { zPos = value; } } + + public float XRotation { get { return xRotation; } set { xRotation = value; } } + public float YRotation { get { return yRotation; } set { yRotation = value; } } + public float ZRotation { get { return zRotation; } set { zRotation = value; } } + + public float XScale { get { return xScale; } set { xScale = value; } } + public float YScale { get { return yScale; } set { yScale = value; } } + public float ZScale { get { return zScale; } set { zScale = value; } } + + + public Matrix WorldMatrix { get { Update(); return worldMatrix; } + set { + worldMatrix = value; + Location = Vector3.TransformCoordinate(new Vector3(0,0,0), worldMatrix); + Point(Location, Location+Direction); + Roll(Location, Location+Up); + } + } + + public Vector3 Direction { + get { + Vector3 directionVector= new Vector3(0,0,1); + return Vector3.TransformNormal(directionVector, worldMatrix); + } + } + + public Vector3 Up { + get { + Vector3 upVector = new Vector3(0,1,0); + return Vector3.TransformNormal(upVector,worldMatrix); + } + } + public Vector3 Right { + get { + Vector3 rightVector = new Vector3(1,0,0); + return Vector3.TransformNormal(rightVector,worldMatrix); + } + } + + public Vector3 Location { + get { + return new Vector3( xPos, yPos, zPos ); + } + set { + Move(value); + } + } + + public Vector3 Rotation { + get { + return new Vector3( xRotation, yRotation, zRotation); + } + set { + Rotate(value); + } + } + + + + private float xPos, yPos, zPos = 0.0f; + private float xRotation, yRotation, zRotation = 0.0f; + private float xScale, yScale, zScale = 0.0f; + + private Matrix worldMatrix, scaleMatrix, rotationMatrix = Matrix.Identity; + private Matrix translationMatrix = Matrix.Identity; + private Matrix combineMatrix1, combineMatrix2; + + public Matrix CombineMatrix1 { get { return combineMatrix1; } set { combineMatrix1 = value; } } + public Matrix CombineMatrix2 { get { return combineMatrix2; } set { combineMatrix2 = value; } } + + + public WorldPosition() { + + Move(0.0f, 0.0f, 0.0f); + Rotate(0.0f, 0.0f, 0.0f); + Scale(1.0f, 1.0f, 1.0f); + combineMatrix1 = combineMatrix2 = Matrix.Zero; + + Update(); + + } + + public Vector3 CombinedLocation { + get { + Update(); + return new Vector3(worldMatrix.M41,worldMatrix.M42,worldMatrix.M43); + } + } + + public void Move( Vector3 newPosition ) { + Move( newPosition.X, newPosition.Y, newPosition.Z ); + } + + public void Move( float x, float y, float z ) { + xPos = x; + yPos = y; + zPos = z; + + translationMatrix = Matrix.Translation( xPos, yPos, zPos ); + } + + public void MoveRel( float x, float y, float z ) { + Move(xPos + x, yPos + y, zPos + z ); + } + + public void Rotate( Vector3 newDirection ) { + Rotate(newDirection.X, newDirection.Y, newDirection.Z); + } + + public void Point(Vector3 pointAtLocation) { + Point(xPos, yPos, zPos, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(Vector3 currentLocation, Vector3 pointAtLocation) { + Point(currentLocation.X, currentLocation.Y, currentLocation.Z, pointAtLocation.X, pointAtLocation.Y, pointAtLocation.Z); + } + + public void Point(float XEye, float YEye, float ZEye, float XAt, float YAt, float ZAt) { + + float XRot, YRot, XDiff, YDiff, ZDiff; + + //Calculate angle between points + XDiff = XAt - XEye; + YDiff = YAt - YEye; + ZDiff = ZAt - ZEye; + XRot = (float) Math.Atan2(-YDiff, Math.Sqrt(XDiff*XDiff+ZDiff*ZDiff)); + YRot = (float) Math.Atan2(XDiff, ZDiff); + + Move(XEye, YEye, ZEye); + Rotate(XRot, YRot, 0.0f); + + } + + public void Roll(Vector3 Location, Vector3 UpVector) { + float xDiff, yDiff; + xDiff = Location.X - UpVector.X; + yDiff = Location.Y - UpVector.Y; + zRotation = (float) Math.Atan2(xDiff, yDiff); + } + + + + + public void Rotate( float x, float y, float z ) { + xRotation = x; + yRotation = y; + zRotation = z; + + rotationMatrix = Matrix.RotationYawPitchRoll( yRotation, xRotation, zRotation ); + } + + public void RotateRel( float x, float y, float z ) { + Rotate( xRotation + x, yRotation + y, zRotation + z ); + } + + //YawPitchRoll rotates an object relative to its own orthonormal basis vectors + public void YawPitchRoll( float yaw, float pitch, float roll) { + + Matrix yawMatrix = Matrix.RotationAxis(this.Up, yaw); + Matrix pitchMatrix = Matrix.RotationAxis(this.Right, pitch); + Matrix rollMatrix = Matrix.RotationAxis(this.Direction, roll); + + Matrix ypr = yawMatrix * pitchMatrix * rollMatrix; + rotationMatrix *= ypr; + + + } + + public void Scale( float x, float y, float z ) { + xScale = x; + yScale = y; + zScale = z; + + scaleMatrix = Matrix.Scaling( xScale, yScale, zScale ); + + } + + public void ScaleRel( float x, float y, float z ) { + Scale( xScale + x, yScale + y, zScale + z ); + } + + + public void Update() { + + Matrix m; + + + + m = scaleMatrix; + m *= rotationMatrix; + m *= translationMatrix; + if (combineMatrix1 != Matrix.Zero) + m *= combineMatrix1; + if (combineMatrix2 != Matrix.Zero) + m *= combineMatrix2; + + worldMatrix = m; + } + +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/d3dapp.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/d3dapp.cs new file mode 100644 index 0000000..9384434 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/d3dapp.cs @@ -0,0 +1,1517 @@ +//----------------------------------------------------------------------------- +// File: D3DApp.cs +// +// Desc: Application class for the Direct3D samples framework library. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + +/// +/// The base class for all the graphics (D3D) samples, it derives from windows forms +/// +public class GraphicsSample : System.Windows.Forms.Form { + #region Menu Information + // The menu items that *all* samples will need + protected System.Windows.Forms.MainMenu mnuMain; + protected System.Windows.Forms.MenuItem mnuFile; + private System.Windows.Forms.MenuItem mnuGo; + private System.Windows.Forms.MenuItem mnuSingle; + private System.Windows.Forms.MenuItem mnuBreak1; + private System.Windows.Forms.MenuItem mnuChange; + private System.Windows.Forms.MenuItem mnuBreak2; + protected System.Windows.Forms.MenuItem mnuExit; + #endregion + + // The window we will render too + private System.Windows.Forms.Control ourRenderTarget; + // Should we use the default windows + protected bool isUsingMenus = true; + + // We need to keep track of our enumeration settings + protected D3DEnumeration enumerationSettings = new D3DEnumeration(); + protected D3DSettings graphicsSettings = new D3DSettings(); + private bool isMaximized = false; // Are we maximized? + private bool isHandlingSizeChanges = true; // Are we handling size changes? + private bool isClosing = false; // Are we closing? + private bool isChangingFormStyle = false; // Are we changing the forms style? + private bool isWindowActive = true; // Are we waiting for got focus? + + private float lastTime = 0.0f; // The last time + private int frames = 0; // Number of frames since our last update + private int appPausedCount = 0; // How many times has the app been paused (and when can it resume)? + + // Internal variables for the state of the app + protected bool windowed; + protected bool active; + protected bool ready; + protected bool hasFocus; + protected bool isMultiThreaded = false; + + // Internal variables used for timing + protected bool frameMoving; + protected bool singleStep; + // Main objects used for creating and rendering the 3D scene + protected PresentParameters presentParams = new PresentParameters(); // Parameters for CreateDevice/Reset + protected Device device; // The rendering device + protected RenderStateManager renderState; + protected SamplerStateManagerCollection sampleState; + protected TextureStateManagerCollection textureStates; + private Caps graphicsCaps; // Caps for the device + protected Caps Caps { get { return graphicsCaps; } } + private CreateFlags behavior; // Indicate sw or hw vertex processing + protected BehaviorFlags BehaviorFlags { get { return new BehaviorFlags(behavior); } } + protected System.Windows.Forms.Control RenderTarget { get { return ourRenderTarget; } set { ourRenderTarget = value; } } + + // Variables for timing + protected float appTime; // Current time in seconds + protected float elapsedTime; // Time elapsed since last frame + protected float framePerSecond; // Instanteous frame rate + protected string deviceStats;// String to hold D3D device stats + protected string frameStats; // String to hold frame stats + + private bool deviceLost = false; + + // Overridable variables for the app + private int minDepthBits; // Minimum number of bits needed in depth buffer + protected int MinDepthBits { get { return minDepthBits; } set { minDepthBits = value; enumerationSettings.AppMinDepthBits = value;} } + private int minStencilBits; // Minimum number of bits needed in stencil buffer + protected int MinStencilBits { get { return minStencilBits; } set { minStencilBits = value; enumerationSettings.AppMinStencilBits = value;} } + protected bool showCursorWhenFullscreen; // Whether to show cursor when fullscreen + protected bool clipCursorWhenFullscreen; // Whether to limit cursor pos when fullscreen + protected bool startFullscreen; // Whether to start up the app in fullscreen mode + + private System.Drawing.Size storedSize; + private System.Drawing.Point storedLocation; + + // Overridable functions for the 3D scene created by the app + protected virtual bool ConfirmDevice(Caps caps, VertexProcessingType vertexProcessingType, + Format adapterFormat, Format backBufferFormat) { return true; } + protected virtual void OneTimeSceneInitialization() { /* Do Nothing */ } + protected virtual void InitializeDeviceObjects() { /* Do Nothing */ } + protected virtual void RestoreDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void FrameMove() { /* Do Nothing */ } + protected virtual void Render() { /* Do Nothing */ } + protected virtual void InvalidateDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + protected virtual void DeleteDeviceObjects(System.Object sender, System.EventArgs e) { /* Do Nothing */ } + + + + + /// + /// Constructor + /// + public GraphicsSample() { + device = null; + active = false; + ready = false; + hasFocus = false; + behavior = 0; + + ourRenderTarget = this; + frameMoving = true; + singleStep = false; + framePerSecond = 0.0f; + deviceStats = null; + frameStats = null; + + this.Text = "D3D9 Sample"; + this.ClientSize = new System.Drawing.Size(400,300); + this.KeyPreview = true; + + minDepthBits = 16; + minStencilBits = 0; + showCursorWhenFullscreen = false; + startFullscreen = false; + + // When clipCursorWhenFullscreen is TRUE, the cursor is limited to + // the device window when the app goes fullscreen. This prevents users + // from accidentally clicking outside the app window on a multimon system. + // This flag is turned off by default for debug builds, since it makes + // multimon debugging difficult. +#if (DEBUG) + clipCursorWhenFullscreen = false; +#else + clipCursorWhenFullscreen = true; +#endif + InitializeComponent(); + } + + + + + /// + /// Picks the best graphics device, and initializes it + /// + /// true if a good device was found, false otherwise + public bool CreateGraphicsSample() { + enumerationSettings.ConfirmDeviceCallback = new D3DEnumeration.ConfirmDeviceCallbackType(this.ConfirmDevice); + enumerationSettings.Enumerate(); + + if (ourRenderTarget.Cursor == null) { + // Set up a default cursor + ourRenderTarget.Cursor = System.Windows.Forms.Cursors.Default; + } + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + + try { + ChooseInitialSettings(); + + // Initialize the application timer + DXUtil.Timer(DirectXTimer.Start); + // Initialize the app's custom scene stuff + OneTimeSceneInitialization(); + // Initialize the 3D environment for the app + InitializeEnvironment(); + } + catch (SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + return false; + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + return false; + } + + // The app is ready to go + ready = true; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available windowed mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestWindowedMode(bool doesRequireHardware, bool doesRequireReference) { + // Get display mode of primary adapter (which is assumed to be where the window + // will appear) + DisplayMode primaryDesktopDisplayMode = Manager.Adapters[0].CurrentDisplayMode; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + if (!deviceCombo.IsWindowed) + continue; + if (deviceCombo.AdapterFormat != primaryDesktopDisplayMode.Format) + continue; + + // If we haven't found a compatible DeviceCombo yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + deviceCombo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesBackBuffer) { + // This windowed device combo looks great -- take it + goto EndWindowedDeviceComboSearch; + } + // Otherwise keep looking for a better windowed device combo + } + } + } + } + + EndWindowedDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + graphicsSettings.WindowedAdapterInfo = bestAdapterInfo; + graphicsSettings.WindowedDeviceInfo = bestDeviceInfo; + graphicsSettings.WindowedDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = true; + graphicsSettings.WindowedDisplayMode = primaryDesktopDisplayMode; + graphicsSettings.WindowedWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + graphicsSettings.WindowedHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.WindowedDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.WindowedMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.WindowedMultisampleQuality = 0; + graphicsSettings.WindowedVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.WindowedPresentInterval = (PresentInterval)bestDeviceCombo.PresentIntervalList[0]; + + return true; + } + + + + + /// + /// Sets up graphicsSettings with best available fullscreen mode, subject to + /// the doesRequireHardware and doesRequireReference constraints. + /// + /// Does the device require hardware support + /// Does the device require the ref device + /// true if a mode is found, false otherwise + public bool FindBestFullscreenMode(bool doesRequireHardware, bool doesRequireReference) { + // For fullscreen, default to first HAL DeviceCombo that supports the current desktop + // display mode, or any display mode if HAL is not compatible with the desktop mode, or + // non-HAL if no HAL is available + DisplayMode adapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestAdapterDesktopDisplayMode = new DisplayMode(); + DisplayMode bestDisplayMode = new DisplayMode(); + bestAdapterDesktopDisplayMode.Width = 0; + bestAdapterDesktopDisplayMode.Height = 0; + bestAdapterDesktopDisplayMode.Format = 0; + bestAdapterDesktopDisplayMode.RefreshRate = 0; + + GraphicsAdapterInfo bestAdapterInfo = null; + GraphicsDeviceInfo bestDeviceInfo = null; + DeviceCombo bestDeviceCombo = null; + + foreach (GraphicsAdapterInfo adapterInfo in enumerationSettings.AdapterInfoList) { + adapterDesktopDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) { + if (doesRequireHardware && deviceInfo.DevType != DeviceType.Hardware) + continue; + if (doesRequireReference && deviceInfo.DevType != DeviceType.Reference) + continue; + + foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) { + bool adapterMatchesBackBuffer = (deviceCombo.BackBufferFormat == deviceCombo.AdapterFormat); + bool adapterMatchesDesktop = (deviceCombo.AdapterFormat == adapterDesktopDisplayMode.Format); + if (deviceCombo.IsWindowed) + continue; + + // If we haven't found a compatible set yet, or if this set + // is better (because it's a HAL, and/or because formats match better), + // save it + if (bestDeviceCombo == null || + bestDeviceCombo.DevType != DeviceType.Hardware && deviceInfo.DevType == DeviceType.Hardware || + bestDeviceCombo.DevType == DeviceType.Hardware && bestDeviceCombo.AdapterFormat != adapterDesktopDisplayMode.Format && adapterMatchesDesktop || + bestDeviceCombo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + bestAdapterDesktopDisplayMode = adapterDesktopDisplayMode; + bestAdapterInfo = adapterInfo; + bestDeviceInfo = deviceInfo; + bestDeviceCombo = deviceCombo; + if (deviceInfo.DevType == DeviceType.Hardware && adapterMatchesDesktop && adapterMatchesBackBuffer) { + // This fullscreen device combo looks great -- take it + goto EndFullscreenDeviceComboSearch; + } + // Otherwise keep looking for a better fullscreen device combo + } + } + } + } + + EndFullscreenDeviceComboSearch: + if (bestDeviceCombo == null) + return false; + + // Need to find a display mode on the best adapter that uses pBestDeviceCombo->AdapterFormat + // and is as close to bestAdapterDesktopDisplayMode's res as possible + bestDisplayMode.Width = 0; + bestDisplayMode.Height = 0; + bestDisplayMode.Format = 0; + bestDisplayMode.RefreshRate = 0; + foreach (DisplayMode displayMode in bestAdapterInfo.DisplayModeList) { + if (displayMode.Format != bestDeviceCombo.AdapterFormat) + continue; + if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate == bestAdapterDesktopDisplayMode.RefreshRate) { + // found a perfect match, so stop + bestDisplayMode = displayMode; + break; + } + else if (displayMode.Width == bestAdapterDesktopDisplayMode.Width && + displayMode.Height == bestAdapterDesktopDisplayMode.Height && + displayMode.RefreshRate > bestDisplayMode.RefreshRate) { + // refresh rate doesn't match, but width/height match, so keep this + // and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == bestAdapterDesktopDisplayMode.Width) { + // width matches, so keep this and keep looking + bestDisplayMode = displayMode; + } + else if (bestDisplayMode.Width == 0) { + // we don't have anything better yet, so keep this and keep looking + bestDisplayMode = displayMode; + } + } + + graphicsSettings.FullscreenAdapterInfo = bestAdapterInfo; + graphicsSettings.FullscreenDeviceInfo = bestDeviceInfo; + graphicsSettings.FullscreenDeviceCombo = bestDeviceCombo; + graphicsSettings.IsWindowed = false; + graphicsSettings.FullscreenDisplayMode = bestDisplayMode; + if (enumerationSettings.AppUsesDepthBuffer) + graphicsSettings.FullscreenDepthStencilBufferFormat = (DepthFormat)bestDeviceCombo.DepthStencilFormatList[0]; + graphicsSettings.FullscreenMultisampleType = (MultiSampleType)bestDeviceCombo.MultiSampleTypeList[0]; + graphicsSettings.FullscreenMultisampleQuality = 0; + graphicsSettings.FullscreenVertexProcessingType = (VertexProcessingType)bestDeviceCombo.VertexProcessingTypeList[0]; + graphicsSettings.FullscreenPresentInterval = PresentInterval.Default; + + return true; + } + + + + + /// + /// Choose the initial settings for the application + /// + /// true if the settings were initialized + public bool ChooseInitialSettings() { + bool foundFullscreenMode = FindBestFullscreenMode(false, false); + bool foundWindowedMode = FindBestWindowedMode(false, false); + if (startFullscreen && foundFullscreenMode) + graphicsSettings.IsWindowed = false; + + if (!foundFullscreenMode && !foundWindowedMode) + throw new NoCompatibleDevicesException(); + + return (foundFullscreenMode || foundWindowedMode); + } + + + + + /// + /// Build presentation parameters from the current settings + /// + public void BuildPresentParamsFromSettings() { + presentParams.Windowed = graphicsSettings.IsWindowed; + presentParams.BackBufferCount = 1; + presentParams.MultiSample = graphicsSettings.MultisampleType; + presentParams.MultiSampleQuality = graphicsSettings.MultisampleQuality; + presentParams.SwapEffect = SwapEffect.Discard; + presentParams.EnableAutoDepthStencil = enumerationSettings.AppUsesDepthBuffer; + presentParams.AutoDepthStencilFormat = graphicsSettings.DepthStencilBufferFormat; + presentParams.PresentFlag = PresentFlag.None; + + if (windowed) { + presentParams.BackBufferWidth = ourRenderTarget.ClientRectangle.Right - ourRenderTarget.ClientRectangle.Left; + presentParams.BackBufferHeight = ourRenderTarget.ClientRectangle.Bottom - ourRenderTarget.ClientRectangle.Top; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = 0; + presentParams.PresentationInterval = PresentInterval.Immediate; + presentParams.DeviceWindow = ourRenderTarget; + } + else { + presentParams.BackBufferWidth = graphicsSettings.DisplayMode.Width; + presentParams.BackBufferHeight = graphicsSettings.DisplayMode.Height; + presentParams.BackBufferFormat = graphicsSettings.DeviceCombo.BackBufferFormat; + presentParams.FullScreenRefreshRateInHz = graphicsSettings.DisplayMode.RefreshRate; + presentParams.PresentationInterval = graphicsSettings.PresentInterval; + presentParams.DeviceWindow = this; + } + } + + + + + /// + /// Initialize the graphics environment + /// + public void InitializeEnvironment() { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + GraphicsDeviceInfo deviceInfo = graphicsSettings.DeviceInfo; + + windowed = graphicsSettings.IsWindowed; + + // Set up the presentation parameters + BuildPresentParamsFromSettings(); + + if (deviceInfo.Caps.PrimitiveMiscCaps.IsNullReference) { + // Warn user about null ref device that can't render anything + HandleSampleException(new NullReferenceDeviceException(), ApplicationMessage.None); + } + + CreateFlags createFlags = new CreateFlags(); + if (graphicsSettings.VertexProcessingType == VertexProcessingType.Software) + createFlags = CreateFlags.SoftwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Mixed) + createFlags = CreateFlags.MixedVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.Hardware) + createFlags = CreateFlags.HardwareVertexProcessing; + else if (graphicsSettings.VertexProcessingType == VertexProcessingType.PureHardware) { + createFlags = CreateFlags.HardwareVertexProcessing; + } + else + throw new ApplicationException(); +#if (DX9) +#else + // Make sure to allow multithreaded apps if we need them + presentParams.ForceNoMultiThreadedFlag = !isMultiThreaded; +#endif + try { + // Create the device + device = new Device(graphicsSettings.AdapterOrdinal, graphicsSettings.DevType, + windowed ? ourRenderTarget : this , createFlags, presentParams); + + // Cache our local objects + renderState = device.RenderState; + sampleState = device.SamplerState; + textureStates = device.TextureState; + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after recreating the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + if (windowed) { + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + } + + // Store device Caps + graphicsCaps = device.DeviceCaps; + behavior = createFlags; + + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + // Store device description + if (deviceInfo.DevType == DeviceType.Reference) + sb.Append("REF"); + else if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append("HAL"); + else if (deviceInfo.DevType == DeviceType.Software) + sb.Append("SW"); + + BehaviorFlags behaviorFlags = new BehaviorFlags(createFlags); + if ((behaviorFlags.HardwareVertexProcessing) && + (behaviorFlags.PureDevice)) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (pure hw vp)"); + else + sb.Append(" (simulated pure hw vp)"); + } + else if (behaviorFlags.HardwareVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (hw vp)"); + else + sb.Append(" (simulated hw vp)"); + } + else if (behaviorFlags.MixedVertexProcessing) { + if (deviceInfo.DevType == DeviceType.Hardware) + sb.Append(" (mixed vp)"); + else + sb.Append(" (simulated mixed vp)"); + } + else if (behaviorFlags.SoftwareVertexProcessing) { + sb.Append(" (sw vp)"); + } + + if (deviceInfo.DevType == DeviceType.Hardware) { + sb.Append(": "); + sb.Append(adapterInfo.AdapterDetails.Description); + } + + // Set device stats string + deviceStats = sb.ToString(); + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // Confine cursor to fullscreen window + if (clipCursorWhenFullscreen) { + if (!windowed) { + System.Drawing.Rectangle rcWindow = this.ClientRectangle; + } + } + + // Setup the event handlers for our device + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + device.Disposing += new System.EventHandler(this.DeleteDeviceObjects); + device.DeviceResizing += new System.ComponentModel.CancelEventHandler(this.EnvironmentResized); + + // Initialize the app's device-dependent objects + try { + InitializeDeviceObjects(); + RestoreDeviceObjects(null, null); + active = true; + return; + } + catch { + // Cleanup before we try again + InvalidateDeviceObjects(null, null); + DeleteDeviceObjects(null, null); + device.Dispose(); + device = null; + if (this.Disposing) + return; + } + } + catch { + // If that failed, fall back to the reference rasterizer + if (deviceInfo.DevType == DeviceType.Hardware) { + if (FindBestWindowedMode(false, true)) { + windowed = true; + + // Make sure main window isn't topmost, so error message is visible + System.Drawing.Size currentClientSize = this.ClientSize; + this.Size = this.ClientSize; + this.SendToBack(); + this.BringToFront(); + this.ClientSize = currentClientSize; + + // Let the user know we are switching from HAL to the reference rasterizer + HandleSampleException(null, ApplicationMessage.WarnSwitchToRef); + + InitializeEnvironment(); + } + } + } + } + + + + + /// + /// Displays sample exceptions to the user + /// + /// The exception that was thrown + /// Extra information on how to handle the exception + public void HandleSampleException(SampleException e, ApplicationMessage Type) { + // Build a message to display to the user + string strMsg = string.Empty; + if (e != null) + strMsg = e.Message; + + if (ApplicationMessage.ApplicationMustExit == Type) { + strMsg += "\n\nThis sample will now exit."; + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); + + // Close the window, which shuts down the app + if (this.IsHandleCreated) + this.Close(); + } + else { + if (ApplicationMessage.WarnSwitchToRef == Type) + strMsg = "\n\nSwitching to the reference rasterizer,\n"; + strMsg += "a software device that implements the entire\n"; + strMsg += "Direct3D feature set, but runs very slowly."; + + System.Windows.Forms.MessageBox.Show(strMsg, this.Text, + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + } + } + + + + + /// + /// Fired when our environment was resized + /// + /// the device that's resizing our environment + /// Set the cancel member to true to turn off automatic device reset + public void EnvironmentResized(object sender, System.ComponentModel.CancelEventArgs e) { + // Check to see if we're closing or changing the form style + if ((isClosing) || (isChangingFormStyle)) { + // We are, cancel our reset, and exit + e.Cancel = true; + return; + } + + // Check to see if we're minimizing and our rendering object + // is not the form, if so, cancel the resize + if ((ourRenderTarget != this) && (this.WindowState == System.Windows.Forms.FormWindowState.Minimized)) + e.Cancel = true; + + if (!isWindowActive) + e.Cancel = true; + + // Set up the fullscreen cursor + if (showCursorWhenFullscreen && !windowed) { + System.Windows.Forms.Cursor ourCursor = this.Cursor; + device.SetCursor(ourCursor, true); + device.ShowCursor(true); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + } + + + + + /// + /// Called when user toggles between fullscreen mode and windowed mode + /// + public void ToggleFullscreen() { + int AdapterOrdinalOld = graphicsSettings.AdapterOrdinal; + DeviceType DevTypeOld = graphicsSettings.DevType; + + isHandlingSizeChanges = false; + isChangingFormStyle = true; + ready = false; + + // Toggle the windowed state + windowed = !windowed; + + // Save our maximized settings.. + if (!windowed && isMaximized) + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + + graphicsSettings.IsWindowed = windowed; + + // If AdapterOrdinal and DevType are the same, we can just do a Reset(). + // If they've changed, we need to do a complete device teardown/rebuild. + if (graphicsSettings.AdapterOrdinal == AdapterOrdinalOld && + graphicsSettings.DevType == DevTypeOld) { + BuildPresentParamsFromSettings(); + // Resize the 3D device + RETRY: + try { + device.Reset(presentParams); + } + catch { + if (windowed) + ForceWindowed(); + else { + // Sit in a loop until the device passes Reset() + try { + device.TestCooperativeLevel(); + } + catch(DeviceNotResetException) { + // Device still needs to be Reset. Try again. + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + goto RETRY; + } + } + } + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + else { + device.Dispose(); + device = null; + InitializeEnvironment(); + } + + // When moving from fullscreen to windowed mode, it is important to + // adjust the window size after resetting the device rather than + // beforehand to ensure that you get the window size you want. For + // example, when switching from 640x480 fullscreen to windowed with + // a 1000x600 window on a 1024x768 desktop, it is impossible to set + // the window size to 1000x600 until after the display mode has + // changed to 1024x768, because windows cannot be larger than the + // desktop. + + if (windowed) { + // if our render target is the main window and we haven't said + // ignore the menus, add our menu + if ((ourRenderTarget == this) && (isUsingMenus)) + this.Menu = mnuMain; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; + isChangingFormStyle = false; + + // We were maximized, restore that state + if (isMaximized) { + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + } + this.SendToBack(); + this.BringToFront(); + this.ClientSize = storedSize; + this.Location = storedLocation; + } + else { + if (this.Menu != null) + this.Menu = null; + + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + isChangingFormStyle = false; + } + isHandlingSizeChanges = true; + ready = true; + } + + + + + /// + /// Switch to a windowed mode, even if that means picking a new device and/or adapter + /// + public void ForceWindowed() { + if (windowed) + return; + + if (!FindBestWindowedMode(false, false)) { + return; + } + windowed = true; + + // Now destroy the current 3D device objects, then reinitialize + + ready = false; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Create the new device + try { + InitializeEnvironment(); + } + catch (SampleException e) { + HandleSampleException(e,ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(),ApplicationMessage.ApplicationMustExit); + } + ready = true; + } + + + + + /// + /// Called when our sample has nothing else to do, and it's time to render + /// + private void FullRender() { + // Render a frame during idle time (no messages are waiting) + if (active && ready) { + try { + if ((deviceLost) || (System.Windows.Forms.Form.ActiveForm != this)) { + // Yield some CPU time to other processes + System.Threading.Thread.Sleep(100); // 100 milliseconds + } + // Render a frame during idle time + if (active) { + Render3DEnvironment(); + } + } + catch (Exception ee) { + System.Windows.Forms.MessageBox.Show("An exception has occurred. This sample must exit.\r\n\r\n" + ee.ToString(), "Exception", + System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); + this.Close(); + } + } + } + + + + + /// + /// Run the simulation + /// + public void Run() { + // Now we're ready to recieve and process Windows messages. + System.Windows.Forms.Control mainWindow = this; + + // If the render target is a form and *not* this form, use that form instead, + // otherwise, use the main form. + if ((ourRenderTarget is System.Windows.Forms.Form) && (ourRenderTarget != this)) + mainWindow = ourRenderTarget; + + mainWindow.Show(); + while (mainWindow.Created) { + FullRender(); + System.Windows.Forms.Application.DoEvents(); + } + } + + + + + /// + /// Draws the scene + /// + public void Render3DEnvironment() { + if (deviceLost) { + try { + // Test the cooperative level to see if it's okay to render + device.TestCooperativeLevel(); + } + catch (DeviceLostException) { + // If the device was lost, do not render until we get it back + isHandlingSizeChanges = false; + isWindowActive = false; + return; + } + catch (DeviceNotResetException) { + // Check if the device needs to be resized. + + // If we are windowed, read the desktop mode and use the same format for + // the back buffer + if (windowed) { + GraphicsAdapterInfo adapterInfo = graphicsSettings.AdapterInfo; + graphicsSettings.WindowedDisplayMode = Manager.Adapters[adapterInfo.AdapterOrdinal].CurrentDisplayMode; + presentParams.BackBufferFormat = graphicsSettings.WindowedDisplayMode.Format; + } + + // Reset the device and resize it + device.Reset(device.PresentationParameters); + EnvironmentResized(device, new System.ComponentModel.CancelEventArgs()); + } + deviceLost = false; + } + + // Get the app's time, in seconds. Skip rendering if no time elapsed + float fAppTime = DXUtil.Timer(DirectXTimer.GetApplicationTime); + float fElapsedAppTime = DXUtil.Timer(DirectXTimer.GetElapsedTime); + if ((0.0f == fElapsedAppTime) && frameMoving) + return; + + // FrameMove (animate) the scene + if (frameMoving || singleStep) { + // Store the time for the app + appTime = fAppTime; + elapsedTime = fElapsedAppTime; + + // Frame move the scene + FrameMove(); + + singleStep = false; + } + + // Render the scene as normal + Render(); + + UpdateStats(); + + try { + // Show the frame on the primary surface. + device.Present(); + } + catch(DeviceLostException) { + deviceLost = true; + } + } + + + + + /// + /// Update the various statistics the simulation keeps track of + /// + public void UpdateStats() { + // Keep track of the frame count + float time = DXUtil.Timer(DirectXTimer.GetAbsoluteTime); + ++frames; + + // Update the scene stats once per second + if (time - lastTime > 1.0f) { + framePerSecond = frames / (time - lastTime); + lastTime = time; + frames = 0; + + string strFmt; + Format fmtAdapter = graphicsSettings.DisplayMode.Format; + if (fmtAdapter == device.PresentationParameters.BackBufferFormat) { + strFmt = fmtAdapter.ToString(); + } + else { + strFmt = String.Format("backbuf {0}, adapter {1}", + device.PresentationParameters.BackBufferFormat.ToString(), fmtAdapter.ToString()); + } + + string strDepthFmt; + if (enumerationSettings.AppUsesDepthBuffer) { + strDepthFmt = String.Format(" ({0})", + graphicsSettings.DepthStencilBufferFormat.ToString()); + } + else { + // No depth buffer + strDepthFmt = ""; + } + + string strMultiSample; + switch (graphicsSettings.MultisampleType) { + case Direct3D.MultiSampleType.NonMaskable: strMultiSample = " (NonMaskable Multisample)"; break; + case Direct3D.MultiSampleType.TwoSamples: strMultiSample = " (2x Multisample)"; break; + case Direct3D.MultiSampleType.ThreeSamples: strMultiSample = " (3x Multisample)"; break; + case Direct3D.MultiSampleType.FourSamples: strMultiSample = " (4x Multisample)"; break; + case Direct3D.MultiSampleType.FiveSamples: strMultiSample = " (5x Multisample)"; break; + case Direct3D.MultiSampleType.SixSamples: strMultiSample = " (6x Multisample)"; break; + case Direct3D.MultiSampleType.SevenSamples: strMultiSample = " (7x Multisample)"; break; + case Direct3D.MultiSampleType.EightSamples: strMultiSample = " (8x Multisample)"; break; + case Direct3D.MultiSampleType.NineSamples: strMultiSample = " (9x Multisample)"; break; + case Direct3D.MultiSampleType.TenSamples: strMultiSample = " (10x Multisample)"; break; + case Direct3D.MultiSampleType.ElevenSamples: strMultiSample = " (11x Multisample)"; break; + case Direct3D.MultiSampleType.TwelveSamples: strMultiSample = " (12x Multisample)"; break; + case Direct3D.MultiSampleType.ThirteenSamples: strMultiSample = " (13x Multisample)"; break; + case Direct3D.MultiSampleType.FourteenSamples: strMultiSample = " (14x Multisample)"; break; + case Direct3D.MultiSampleType.FifteenSamples: strMultiSample = " (15x Multisample)"; break; + case Direct3D.MultiSampleType.SixteenSamples: strMultiSample = " (16x Multisample)"; break; + default: strMultiSample = string.Empty; break; + } + frameStats = String.Format("{0} fps ({1}x{2}), {3}{4}{5}", framePerSecond.ToString("f2"), + device.PresentationParameters.BackBufferWidth, device.PresentationParameters.BackBufferHeight, + strFmt, strDepthFmt, strMultiSample); + } + } + + + + + /// + /// Called in to toggle the pause state of the app. + /// + /// true if the simulation should pause + public void Pause(bool pause) { + appPausedCount += (int)(pause ? +1 : -1); + ready = ((appPausedCount > 0) ? false : true); + + // Handle the first pause request (of many, nestable pause requests) + if (pause && (1 == appPausedCount)) { + // Stop the scene from animating + if (frameMoving) + DXUtil.Timer(DirectXTimer.Stop); + } + + if (0 == appPausedCount) { + // Restart the timers + if (frameMoving) + DXUtil.Timer(DirectXTimer.Start); + } + } + + + + + /// + /// Set our variables to not active and not ready + /// + public void CleanupEnvironment() { + active = false; + ready = false; + if (device != null) + device.Dispose(); + + device = null; + } + #region Menu EventHandlers + + + + + /// + /// Prepares the simulation for a new device being selected + /// + public void UserSelectNewDevice(object sender, EventArgs e) { + // Prompt the user to select a new device or mode + if (active && ready) { + Pause(true); + DoSelectNewDevice(); + Pause(false); + } + } + + + + + /// + /// Displays a dialog so the user can select a new adapter, device, or + /// display mode, and then recreates the 3D environment if needed + /// + private void DoSelectNewDevice() { + isHandlingSizeChanges = false; + // Can't display dialogs in fullscreen mode + if (windowed == false) { + try { + ToggleFullscreen(); + isHandlingSizeChanges = false; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + return; + } + } + + // Make sure the main form is in the background + this.SendToBack(); + D3DSettingsForm settingsForm = new D3DSettingsForm(enumerationSettings, graphicsSettings); + System.Windows.Forms.DialogResult result = settingsForm.ShowDialog(null); + if (result != System.Windows.Forms.DialogResult.OK) { + isHandlingSizeChanges = true; + return; + } + graphicsSettings = settingsForm.settings; + + windowed = graphicsSettings.IsWindowed; + + // Release display objects, so a new device can be created + device.Dispose(); + device = null; + + // Inform the display class of the change. It will internally + // re-create valid surfaces, a d3ddevice, etc. + try { + InitializeEnvironment(); + } + catch(SampleException d3de) { + HandleSampleException(d3de, ApplicationMessage.ApplicationMustExit); + } + catch { + HandleSampleException(new SampleException(), ApplicationMessage.ApplicationMustExit); + } + + // If the app is paused, trigger the rendering of the current frame + if (false == frameMoving) { + singleStep = true; + DXUtil.Timer(DirectXTimer.Start); + DXUtil.Timer(DirectXTimer.Stop); + } + isHandlingSizeChanges = true; + } + + + + + /// + /// Will start (or stop) simulation + /// + private void ToggleStart(object sender, EventArgs e) { + //Toggle frame movement + frameMoving = !frameMoving; + DXUtil.Timer(frameMoving ? DirectXTimer.Start : DirectXTimer.Stop); + } + + + + + /// + /// Will single step the simulation + /// + private void SingleStep(object sender, EventArgs e) { + // Single-step frame movement + if (false == frameMoving) + DXUtil.Timer(DirectXTimer.Advance); + else + DXUtil.Timer(DirectXTimer.Stop); + frameMoving = false; + singleStep = true; + } + + + + + /// + /// Will end the simulation + /// + private void ExitSample(object sender, EventArgs e) { + this.Close(); + } + #endregion + + + + + #region WinForms Overrides + /// + /// Clean up any resources + /// + protected override void Dispose(bool disposing) { + CleanupEnvironment(); + mnuMain.Dispose(); + base.Dispose(disposing); + } + + + + + /// + /// Handle any key presses + /// + protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e) { + // Check for our shortcut keys (Return to start or stop) + if (e.KeyChar == '\r') { + mnuGo.PerformClick(); + e.Handled = true; + } + + // Check for our shortcut keys (Escape to quit) + if ((byte)e.KeyChar == (byte)(int)System.Windows.Forms.Keys.Escape) { + mnuExit.PerformClick(); + e.Handled = true; + } + + // Allow the control to handle the keystroke now + base.OnKeyPress(e); + } + + + + + /// + /// Handle system keystrokes (ie, alt-enter) + /// + protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e) { + if ((e.Alt) && (e.KeyCode == System.Windows.Forms.Keys.Return)) { + // Toggle the fullscreen/window mode + if (active && ready) { + Pause(true); + + try { + ToggleFullscreen(); + Pause(false); + return; + } + catch { + HandleSampleException(new ResetFailedException(), ApplicationMessage.ApplicationMustExit); + } + finally { + e.Handled = true; + } + } + } + // Allow the control to handle the keystroke now + base.OnKeyDown(e); + } + + + + + /// + /// Winforms generated code for initializing the form + /// + private void InitializeComponent() { + // + // GraphicsSample + // + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.MinimumSize = new System.Drawing.Size(100, 100); + #region MenuCreation/etc + this.mnuMain = new System.Windows.Forms.MainMenu(); + this.mnuFile = new System.Windows.Forms.MenuItem(); + this.mnuGo = new System.Windows.Forms.MenuItem(); + this.mnuSingle = new System.Windows.Forms.MenuItem(); + this.mnuBreak1 = new System.Windows.Forms.MenuItem(); + this.mnuChange = new System.Windows.Forms.MenuItem(); + this.mnuBreak2 = new System.Windows.Forms.MenuItem(); + this.mnuExit = new System.Windows.Forms.MenuItem(); + // + // mainMenu1 + // + this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuFile}); + // + // mnuFile + // + this.mnuFile.Index = 0; + this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.mnuGo, + this.mnuSingle, + this.mnuBreak1, + this.mnuChange, + this.mnuBreak2, + this.mnuExit}); + this.mnuFile.Text = "&File"; + // + // mnuGo + // + this.mnuGo.Index = 0; + this.mnuGo.Text = "&Go/stop\tEnter"; + this.mnuGo.Click += new System.EventHandler(this.ToggleStart); + // + // mnuSingle + // + this.mnuSingle.Index = 1; + this.mnuSingle.Text = "&Single step\tSpace"; + this.mnuSingle.Click += new System.EventHandler(this.SingleStep); + // + // mnuBreak1 + // + this.mnuBreak1.Index = 2; + this.mnuBreak1.Text = "-"; + // + // mnuChange + // + this.mnuChange.Index = 3; + this.mnuChange.Shortcut = System.Windows.Forms.Shortcut.F2; + this.mnuChange.ShowShortcut = true; + this.mnuChange.Text = "&Change Device..."; + this.mnuChange.Click += new System.EventHandler(this.UserSelectNewDevice); + // + // mnuBreak2 + // + this.mnuBreak2.Index = 4; + this.mnuBreak2.Text = "-"; + // + // mnuExit + // + this.mnuExit.Index = 5; + this.mnuExit.Text = "E&xit\tESC"; + this.mnuExit.Click += new System.EventHandler(this.ExitSample); + #endregion + } + + + + + /// + /// When the menu is starting pause our simulation + /// + protected override void OnMenuStart(System.EventArgs e) { + Pause(true); // Pause the simulation while the menu starts + } + + + + + /// + /// When the menu is complete our simulation can continue + /// + protected override void OnMenuComplete(System.EventArgs e) { + Pause(false); // Unpause the simulation + } + + + + + /// + /// Make sure our graphics cursor (if available) moves with the cursor + /// + protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e) { + if ((device != null) && (!device.Disposed)) { + // Move the D3D cursor + device.SetCursorPosition(e.X, e.Y, false); + } + // Let the control handle the mouse now + base.OnMouseMove(e); + } + + + + + /// + /// Handle size changed events + /// + protected override void OnSizeChanged(System.EventArgs e) { + this.OnResize(e); + base.OnSizeChanged(e); + } + + + + + /// + /// Handle resize events + /// + protected override void OnResize(System.EventArgs e) { + if (isHandlingSizeChanges) { + // Are we maximized? + isMaximized = (this.WindowState == System.Windows.Forms.FormWindowState.Maximized); + if (!isMaximized) { + storedSize = this.ClientSize; + storedLocation = this.Location; + } + } + active = !(this.WindowState == System.Windows.Forms.FormWindowState.Minimized || this.Visible == false); + base.OnResize(e); + } + + + + + /// + /// Once the form has focus again, we can continue to handle our resize + /// and resets.. + /// + protected override void OnGotFocus(System.EventArgs e) { + isHandlingSizeChanges = true; + isWindowActive = true; + base.OnGotFocus (e); + } + + + + + /// + /// Handle move events + /// + protected override void OnMove(System.EventArgs e) { + if (isHandlingSizeChanges) { + storedLocation = this.Location; + } + base.OnMove(e); + } + + + + + /// + /// Handle closing event + /// + protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { + isClosing = true; + base.OnClosing(e); + } + #endregion + + +} + +#region Enums for D3D Applications +/// +/// Messages that can be used when displaying an error +/// +public enum ApplicationMessage { + None, + ApplicationMustExit, + WarnSwitchToRef +}; +#endregion + + + + +#region Various SampleExceptions +/// +/// The default sample exception type +/// +public class SampleException : System.ApplicationException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + + strMsg = "Generic application error. Enable\n"; + strMsg += "debug output for detailed information."; + + return strMsg; + } + } +} + + + + +/// +/// Exception informing user no compatible devices were found +/// +public class NoCompatibleDevicesException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "This sample cannot run in a desktop\n"; + strMsg += "window with the current display settings.\n"; + strMsg += "Please change your desktop settings to a\n"; + strMsg += "16- or 32-bit display mode and re-run this\n"; + strMsg += "sample."; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when the ReferenceDevice is null +/// +public class NullReferenceDeviceException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Warning: Nothing will be rendered.\n"; + strMsg += "The reference rendering device was selected, but your\n"; + strMsg += "computer only has a reduced-functionality reference device\n"; + strMsg += "installed. Install the DirectX SDK to get the full\n"; + strMsg += "reference device.\n"; + + return strMsg; + } + } +} + + + + +/// +/// An exception for when reset fails +/// +public class ResetFailedException : SampleException { + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not reset the Direct3D device."; + + return strMsg; + } + } +} + + + + +/// +/// The exception thrown when media couldn't be found +/// +public class MediaNotFoundException : SampleException { + private string mediaFile; + public MediaNotFoundException(string filename) : base() { + mediaFile = filename; + } + public MediaNotFoundException() : base() { + mediaFile = string.Empty; + } + + + + + /// + /// Return information about the exception + /// + public override string Message { + get { + string strMsg = string.Empty; + strMsg = "Could not load required media."; + if (mediaFile.Length > 0) + strMsg += string.Format("\r\nFile: {0}", mediaFile); + + return strMsg; + } + } +} +#endregion + + + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/d3dapp.resx b/Source Code updated 08-12-05/Spacewar3D/Step12/d3dapp.resx new file mode 100644 index 0000000..3f337e0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/d3dapp.resx @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.0.0.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/d3denumeration.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/d3denumeration.cs new file mode 100644 index 0000000..47c1c6a --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/d3denumeration.cs @@ -0,0 +1,449 @@ +//----------------------------------------------------------------------------- +// File: D3DEnumeration.cs +// +// Desc: Enumerates D3D adapters, devices, modes, etc. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------------- +using System; +using System.Collections; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; + + + + +/// +/// Enumeration of all possible D3D vertex processing types +/// +public enum VertexProcessingType { + Software, + Mixed, + Hardware, + PureHardware +} + + + + +/// +/// Info about a display adapter +/// +public class GraphicsAdapterInfo { + public int AdapterOrdinal; + public AdapterDetails AdapterDetails; + public ArrayList DisplayModeList = new ArrayList(); // List of D3DDISPLAYMODEs + public ArrayList DeviceInfoList = new ArrayList(); // List of D3DDeviceInfos + public override string ToString() { return AdapterDetails.Description; } +} + + + + +/// +/// Info about a D3D device, including a list of DeviceCombos (see below) +/// that work with the device +/// +public class GraphicsDeviceInfo { + public int AdapterOrdinal; + public DeviceType DevType; + public Caps Caps; + public ArrayList DeviceComboList = new ArrayList(); // List of D3DDeviceCombos + public override string ToString() { return DevType.ToString(); } +} + + + + +/// +/// Info about a depth/stencil buffer format that is incompatible with a +/// multisample type +/// +public class DepthStencilMultiSampleConflict { + public DepthFormat DepthStencilFormat; + public MultiSampleType MultiSampleType; +} + + + + +/// +/// A combination of adapter format, back buffer format, and windowed/fullscreen +/// that is compatible with a particular D3D device (and the app) +/// +public class DeviceCombo { + public int AdapterOrdinal; + public DeviceType DevType; + public Format AdapterFormat; + public Format BackBufferFormat; + public bool IsWindowed; + public ArrayList DepthStencilFormatList = new ArrayList(); // List of D3DFORMATs + public ArrayList MultiSampleTypeList = new ArrayList(); // List of D3DMULTISAMPLE_TYPEs + public ArrayList MultiSampleQualityList = new ArrayList(); // List of ints (maxQuality per multisample type) + public ArrayList DepthStencilMultiSampleConflictList = new ArrayList(); // List of DepthStencilMultiSampleConflicts + public ArrayList VertexProcessingTypeList = new ArrayList(); // List of VertexProcessingTypes + public ArrayList PresentIntervalList = new ArrayList(); // List of D3DPRESENT_INTERVALs +} + + + + +/// +/// Used to sort Displaymodes +/// +class DisplayModeComparer : System.Collections.IComparer { + /// + /// Compare two display modes + /// + public int Compare(object x, object y) { + DisplayMode dx = (DisplayMode)x; + DisplayMode dy = (DisplayMode)y; + + if (dx.Width > dy.Width) + return 1; + if (dx.Width < dy.Width) + return -1; + if (dx.Height > dy.Height) + return 1; + if (dx.Height < dy.Height) + return -1; + if (dx.Format > dy.Format) + return 1; + if (dx.Format < dy.Format) + return -1; + if (dx.RefreshRate > dy.RefreshRate) + return 1; + if (dx.RefreshRate < dy.RefreshRate) + return -1; + return 0; + } +} + + + + +/// +/// Enumerates available adapters, devices, modes, etc. +/// +public class D3DEnumeration { + /// + /// The confirm device delegate which is used to determine if a device + /// meets the needs of the simulation + /// + public delegate bool ConfirmDeviceCallbackType(Caps caps, + VertexProcessingType vertexProcessingType, Format adapterFormat, + Format backBufferFormat); + + public ConfirmDeviceCallbackType ConfirmDeviceCallback; + public ArrayList AdapterInfoList = new ArrayList(); // List of D3DAdapterInfos + + // The following variables can be used to limit what modes, formats, + // etc. are enumerated. Set them to the values you want before calling + // Enumerate(). + public int AppMinFullscreenWidth = 640; + public int AppMinFullscreenHeight = 480; + public int AppMinColorChannelBits = 5; // min color bits per channel in adapter format + public int AppMinAlphaChannelBits = 0; // min alpha bits per pixel in back buffer format + public int AppMinDepthBits = 15; + public int AppMinStencilBits = 0; + public bool AppUsesDepthBuffer = true; + public bool AppUsesMixedVP = false; // whether app can take advantage of mixed vp mode + public bool AppRequiresWindowed = false; + public bool AppRequiresFullscreen = false; + + + + + /// + /// Enumerates available D3D adapters, devices, modes, etc. + /// + public void Enumerate() { + foreach (AdapterInformation ai in Manager.Adapters) { + ArrayList adapterFormatList = new ArrayList(); + GraphicsAdapterInfo adapterInfo = new GraphicsAdapterInfo(); + adapterInfo.AdapterOrdinal = ai.Adapter; + adapterInfo.AdapterDetails = ai.Information; + + // Get list of all display modes on this adapter. + // Also build a temporary list of all display adapter formats. + foreach (DisplayMode displayMode in ai.SupportedDisplayModes) { + if (displayMode.Width < AppMinFullscreenWidth) + continue; + if (displayMode.Height < AppMinFullscreenHeight) + continue; + if (GraphicsUtility.GetColorChannelBits(displayMode.Format) < AppMinColorChannelBits) + continue; + adapterInfo.DisplayModeList.Add(displayMode); + if (!adapterFormatList.Contains(displayMode.Format)) + adapterFormatList.Add(displayMode.Format); + } + + // Sort displaymode list + DisplayModeComparer dmc = new DisplayModeComparer(); + adapterInfo.DisplayModeList.Sort(dmc); + + // Get info for each device on this adapter + EnumerateDevices(adapterInfo, adapterFormatList); + + // If at least one device on this adapter is available and compatible + // with the app, add the adapterInfo to the list + if (adapterInfo.DeviceInfoList.Count == 0) + continue; + AdapterInfoList.Add(adapterInfo); + } + } + + + + + /// + /// Enumerates D3D devices for a particular adapter + /// + protected void EnumerateDevices(GraphicsAdapterInfo adapterInfo, ArrayList adapterFormatList) { + DeviceType[] devTypeArray = new DeviceType[] { + DeviceType.Hardware, DeviceType.Software, DeviceType.Reference }; + + foreach (DeviceType devType in devTypeArray) { + GraphicsDeviceInfo deviceInfo = new GraphicsDeviceInfo(); + deviceInfo.AdapterOrdinal = adapterInfo.AdapterOrdinal; + deviceInfo.DevType = devType; + try { + deviceInfo.Caps = Manager.GetDeviceCaps(adapterInfo.AdapterOrdinal, devType); + } + catch (DirectXException) { + continue; + } + + // Get info for each devicecombo on this device + EnumerateDeviceCombos(deviceInfo, adapterFormatList); + + // If at least one devicecombo for this device is found, + // add the deviceInfo to the list + if (deviceInfo.DeviceComboList.Count == 0) + continue; + adapterInfo.DeviceInfoList.Add(deviceInfo); + } + } + + + + + /// + /// Enumerates DeviceCombos for a particular device + /// + protected void EnumerateDeviceCombos(GraphicsDeviceInfo deviceInfo, ArrayList adapterFormatList) { + Format[] backBufferFormatArray = new Format[] { + Format.A8R8G8B8, Format.X8R8G8B8, Format.A2R10G10B10, + Format.R5G6B5, Format.A1R5G5B5, Format.X1R5G5B5, + }; + bool[] isWindowedArray = new bool[] { false, true }; + + // See which adapter formats are supported by this device + foreach (Format adapterFormat in adapterFormatList) { + foreach (Format backBufferFormat in backBufferFormatArray) { + if (GraphicsUtility.GetAlphaChannelBits(backBufferFormat) < AppMinAlphaChannelBits) + continue; + foreach (bool isWindowed in isWindowedArray) { + if (!isWindowed && AppRequiresWindowed) + continue; + if (isWindowed && AppRequiresFullscreen) + continue; + if (!Manager.CheckDeviceType(deviceInfo.AdapterOrdinal, deviceInfo.DevType, adapterFormat, backBufferFormat, isWindowed)) { + continue; + } + + // At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed + // DeviceCombo that is supported by the system. We still need to confirm that it's + // compatible with the app, and find one or more suitable depth/stencil buffer format, + // multisample type, vertex processing type, and present interval. + DeviceCombo deviceCombo = new DeviceCombo(); + deviceCombo.AdapterOrdinal = deviceInfo.AdapterOrdinal; + deviceCombo.DevType = deviceInfo.DevType; + deviceCombo.AdapterFormat = adapterFormat; + deviceCombo.BackBufferFormat = backBufferFormat; + deviceCombo.IsWindowed = isWindowed; + if (AppUsesDepthBuffer) { + BuildDepthStencilFormatList(deviceCombo); + if (deviceCombo.DepthStencilFormatList.Count == 0) + continue; + } + BuildMultiSampleTypeList(deviceCombo); + if (deviceCombo.MultiSampleTypeList.Count == 0) + continue; + BuildDepthStencilMultiSampleConflictList(deviceCombo); + BuildVertexProcessingTypeList(deviceInfo, deviceCombo); + if (deviceCombo.VertexProcessingTypeList.Count == 0) + continue; + BuildPresentIntervalList(deviceInfo, deviceCombo); + if (deviceCombo.PresentIntervalList.Count == 0) + continue; + + deviceInfo.DeviceComboList.Add(deviceCombo); + } + } + } + } + + + + + /// + /// Adds all depth/stencil formats that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildDepthStencilFormatList(DeviceCombo deviceCombo) { + DepthFormat[] depthStencilFormatArray = { + DepthFormat.D16, + DepthFormat.D15S1, + DepthFormat.D24X8, + DepthFormat.D24S8, + DepthFormat.D24X4S4, + DepthFormat.D32, + }; + + foreach (DepthFormat depthStencilFmt in depthStencilFormatArray) { + if (GraphicsUtility.GetDepthBits(depthStencilFmt) < AppMinDepthBits) + continue; + if (GraphicsUtility.GetStencilBits(depthStencilFmt) < AppMinStencilBits) + continue; + if (Manager.CheckDeviceFormat(deviceCombo.AdapterOrdinal, deviceCombo.DevType, deviceCombo.AdapterFormat, + Usage.DepthStencil, ResourceType.Surface, depthStencilFmt)) { + if (Manager.CheckDepthStencilMatch(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat, depthStencilFmt)) { + deviceCombo.DepthStencilFormatList.Add(depthStencilFmt); + } + } + } + } + + + + + /// + /// Adds all multisample types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildMultiSampleTypeList(DeviceCombo deviceCombo) { + MultiSampleType[] msTypeArray = { + MultiSampleType.None, + MultiSampleType.NonMaskable, + MultiSampleType.TwoSamples, + MultiSampleType.ThreeSamples, + MultiSampleType.FourSamples, + MultiSampleType.FiveSamples, + MultiSampleType.SixSamples, + MultiSampleType.SevenSamples, + MultiSampleType.EightSamples, + MultiSampleType.NineSamples, + MultiSampleType.TenSamples, + MultiSampleType.ElevenSamples, + MultiSampleType.TwelveSamples, + MultiSampleType.ThirteenSamples, + MultiSampleType.FourteenSamples, + MultiSampleType.FifteenSamples, + MultiSampleType.SixteenSamples, + }; + + foreach (MultiSampleType msType in msTypeArray) { + int result; + int qualityLevels = 0; + if (Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, deviceCombo.DevType, + deviceCombo.BackBufferFormat, deviceCombo.IsWindowed, msType, out result, out qualityLevels)) { + deviceCombo.MultiSampleTypeList.Add(msType); + deviceCombo.MultiSampleQualityList.Add(qualityLevels); + } + } + } + + + + + /// + /// Finds any depthstencil formats that are incompatible with multisample types and + /// builds a list of them. + /// + public void BuildDepthStencilMultiSampleConflictList(DeviceCombo deviceCombo) { + DepthStencilMultiSampleConflict DSMSConflict; + + foreach (DepthFormat dsFmt in deviceCombo.DepthStencilFormatList) { + foreach (MultiSampleType msType in deviceCombo.MultiSampleTypeList) { + if (!Manager.CheckDeviceMultiSampleType(deviceCombo.AdapterOrdinal, + deviceCombo.DevType, (Format)dsFmt, deviceCombo.IsWindowed, msType)) { + DSMSConflict = new DepthStencilMultiSampleConflict(); + DSMSConflict.DepthStencilFormat = dsFmt; + DSMSConflict.MultiSampleType = msType; + deviceCombo.DepthStencilMultiSampleConflictList.Add(DSMSConflict); + } + } + } + } + + + + + /// + /// Adds all vertex processing types that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildVertexProcessingTypeList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + if (deviceInfo.Caps.DeviceCaps.SupportsHardwareTransformAndLight) { + if (deviceInfo.Caps.DeviceCaps.SupportsPureDevice) { + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.PureHardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.PureHardware); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Hardware, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Hardware); + } + if (AppUsesMixedVP && (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Mixed, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat))) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Mixed); + } + } + if (ConfirmDeviceCallback == null || + ConfirmDeviceCallback(deviceInfo.Caps, VertexProcessingType.Software, + deviceCombo.AdapterFormat, deviceCombo.BackBufferFormat)) { + deviceCombo.VertexProcessingTypeList.Add(VertexProcessingType.Software); + } + } + + + + + /// + /// Adds all present intervals that are compatible with the device and app to + /// the given deviceCombo + /// + public void BuildPresentIntervalList(GraphicsDeviceInfo deviceInfo, DeviceCombo deviceCombo) { + PresentInterval[] piArray = { + PresentInterval.Immediate, + PresentInterval.Default, + PresentInterval.One, + PresentInterval.Two, + PresentInterval.Three, + PresentInterval.Four, + }; + + foreach (PresentInterval pi in piArray) { + if (deviceCombo.IsWindowed) { + if (pi == PresentInterval.Two || + pi == PresentInterval.Three || + pi == PresentInterval.Four) { + // These intervals are not supported in windowed mode. + continue; + } + } + // Note that PresentInterval.Default is zero, so you + // can't do a caps check for it -- it is always available. + if (pi == PresentInterval.Default || + (deviceInfo.Caps.PresentationIntervals & pi) != (PresentInterval)0) { + deviceCombo.PresentIntervalList.Add(pi); + } + } + } +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/d3dfont.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/d3dfont.cs new file mode 100644 index 0000000..2b374eb --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/d3dfont.cs @@ -0,0 +1,666 @@ +//----------------------------------------------------------------------------- +// File: D3DFont.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// A generic font class +/// +public class GraphicsFont { + public const int MaxNumfontVertices = 50*6; + + // Font rendering flags + [System.Flags] + public enum RenderFlags { + Centered = 0x0001, + TwoSided = 0x0002, + Filtered = 0x0004, + } + private System.Drawing.Font systemFont; + + private bool isZEnable = false; + public bool ZBufferEnable { get { return isZEnable; } set { isZEnable = value; } } + string ourFontName; // Font properties + int ourFontHeight; + + private Direct3D.Device device; + private TextureStateManager textureState0; + private TextureStateManager textureState1; + private SamplerStateManager samplerState0; + private RenderStateManager renderState; + private Direct3D.Texture fontTexture; + private Direct3D.VertexBuffer vertexBuffer; + private CustomVertex.TransformedColoredTextured[] fontVertices = new CustomVertex.TransformedColoredTextured[MaxNumfontVertices]; + + private int textureWidth; // Texture dimensions + private int textureHeight; + private float textureScale; + private int spacingPerChar; + private float[,] textureCoords = new float[128-32,4]; + + // Stateblocks for setting and restoring render states + private StateBlock savedStateBlock; + private StateBlock drawTextStateBlock; + + + + + /// + /// Create a new font object + /// + /// The font to use + public GraphicsFont(System.Drawing.Font f) { + ourFontName = f.Name; + ourFontHeight = (int)f.Size; + systemFont = f; + } + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName) : this(fontName, FontStyle.Regular, 12) { + } + + + + + /// + /// Create a new font object + /// + public GraphicsFont(string fontName, FontStyle style) : this(fontName, style, 12) { + } + + + + + /// + /// Create a new font object + /// + /// The name of the font + /// The style + /// Size of the font + public GraphicsFont(string fontName, FontStyle style, int size) { + ourFontName = fontName; + ourFontHeight = size; + systemFont = new System.Drawing.Font(fontName, ourFontHeight, style); + } + + + + + /// + /// Attempt to draw the systemFont alphabet onto the provided texture + /// graphics. + /// + /// Graphics object on which to draw and measure the letters + /// If set, the method will test to see if the alphabet will fit without actually drawing + public void PaintAlphabet(Graphics g, bool measureOnly) { + string str; + float x = 0; + float y = 0; + Point p = new Point(0, 0); + Size size = new Size(0,0); + + // Calculate the spacing between characters based on line height + size = g.MeasureString(" ", systemFont).ToSize(); + x = spacingPerChar = (int) Math.Ceiling(size.Height * 0.3); + + for (char c = (char)32; c < (char)127; c++) { + str = c.ToString(); + // We need to do some things here to get the right sizes. The default implemententation of MeasureString + // will return a resolution independant size. For our height, this is what we want. However, for our width, we + // want a resolution dependant size. + Size resSize = g.MeasureString(str, systemFont).ToSize(); + size.Height = resSize.Height + 1; + + // Now the Resolution independent width + if (c != ' ') { // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + resSize = g.MeasureString(str, systemFont, p, StringFormat.GenericTypographic).ToSize(); + size.Width = resSize.Width; + } + else + size.Width = resSize.Width; + + if ((x + size.Width + spacingPerChar) > textureWidth) { + x = spacingPerChar; + y += size.Height; + } + + // Make sure we have room for the current character + if ((y + size.Height) > textureHeight) + throw new System.InvalidOperationException("Texture too small for alphabet"); + + if (!measureOnly) { + if (c != ' ') // We need the special case here because a space has a 0 width in GenericTypoGraphic stringformats + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y), StringFormat.GenericTypographic); + else + g.DrawString(str, systemFont, Brushes.White, new Point((int)x, (int)y)); + textureCoords[c-32,0] = ((float) (x + 0 - spacingPerChar)) / textureWidth; + textureCoords[c-32,1] = ((float) (y + 0 + 0)) / textureHeight; + textureCoords[c-32,2] = ((float) (x + size.Width + spacingPerChar)) / textureWidth; + textureCoords[c-32,3] = ((float) (y + size.Height + 0)) / textureHeight; + } + + x += size.Width + (2 * spacingPerChar); + } + + } + + + + + /// + /// Initialize the device objects + /// + /// The grpahics device used to initialize + public void InitializeDeviceObjects(Device dev) { + if (dev != null) { + // Set up our events + dev.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Keep a local copy of the device + device = dev; + textureState0 = device.TextureState[0]; + textureState1 = device.TextureState[1]; + samplerState0 = device.SamplerState[0]; + renderState = device.RenderState; + + // Create a bitmap on which to measure the alphabet + Bitmap bmp = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + Graphics g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Establish the font and texture size + textureScale = 1.0f; // Draw fonts into texture without scaling + + // Calculate the dimensions for the smallest power-of-two texture which + // can hold all the printable characters + textureWidth = textureHeight = 128; + for (;;) { + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // Scale up the texture size and try again + textureWidth *= 2; + textureHeight *= 2; + continue; + } + + break; + } + + // If requested texture is too big, use a smaller texture and smaller font, + // and scale up when rendering. + Direct3D.Caps d3dCaps = device.DeviceCaps; + + // If the needed texture is too large for the video card... + if (textureWidth > d3dCaps.MaxTextureWidth) { + // Scale the font size down to fit on the largest possible texture + textureScale = (float)d3dCaps.MaxTextureWidth / (float)textureWidth; + textureWidth = textureHeight = d3dCaps.MaxTextureWidth; + + for(;;) { + // Create a new, smaller font + ourFontHeight = (int) Math.Floor(ourFontHeight * textureScale); + systemFont = new System.Drawing.Font(systemFont.Name, ourFontHeight, systemFont.Style); + + try { + // Measure the alphabet + PaintAlphabet(g, true); + } + catch (System.InvalidOperationException) { + // If that still doesn't fit, scale down again and continue + textureScale *= 0.9F; + continue; + } + + break; + } + } + + // Release the bitmap used for measuring and create one for drawing + bmp.Dispose(); + bmp = new Bitmap(textureWidth, textureHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + g = Graphics.FromImage(bmp); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; + g.TextContrast = 0; + + // Draw the alphabet + PaintAlphabet(g, false); + + // Create a new texture for the font from the bitmap we just created + fontTexture = Texture.FromBitmap(device, bmp, 0, Pool.Managed); + RestoreDeviceObjects(null, null); + } + + + + + /// + /// Restore the font after a device has been reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColoredTextured), MaxNumfontVertices, + device, Usage.WriteOnly | Usage.Dynamic, 0, Pool.Default); + + Surface surf = device.GetRenderTarget( 0 ); + bool bSupportsAlphaBlend = Manager.CheckDeviceFormat(device.DeviceCaps.AdapterOrdinal, + device.DeviceCaps.DeviceType, device.DisplayMode.Format, + Usage.RenderTarget | Usage.QueryPostPixelShaderBlending, ResourceType.Surface, + surf.Description.Format ); + + // Create the state blocks for rendering text + for (int which=0; which < 2; which++) { + device.BeginStateBlock(); + device.SetTexture(0, fontTexture); + + if (isZEnable) + renderState.ZBufferEnable = true; + else + renderState.ZBufferEnable = false; + + if( bSupportsAlphaBlend ) { + renderState.AlphaBlendEnable = true; + renderState.SourceBlend = Blend.SourceAlpha; + renderState.DestinationBlend = Blend.InvSourceAlpha; + } + else { + renderState.AlphaBlendEnable = false; + } + renderState.AlphaTestEnable = true; + renderState.ReferenceAlpha = 0x08; + renderState.AlphaFunction = Compare.GreaterEqual; + renderState.FillMode = FillMode.Solid; + renderState.CullMode = Cull.CounterClockwise; + renderState.StencilEnable = false; + renderState.Clipping = true; + device.ClipPlanes.DisableAll(); + renderState.VertexBlend = VertexBlend.Disable; + renderState.IndexedVertexBlendEnable = false; + renderState.FogEnable = false; + renderState.ColorWriteEnable = ColorWriteEnable.RedGreenBlueAlpha; + textureState0.ColorOperation = TextureOperation.Modulate; + textureState0.ColorArgument1 = TextureArgument.TextureColor; + textureState0.ColorArgument2 = TextureArgument.Diffuse; + textureState0.AlphaOperation = TextureOperation.Modulate; + textureState0.AlphaArgument1 = TextureArgument.TextureColor; + textureState0.AlphaArgument2 = TextureArgument.Diffuse; + textureState0.TextureCoordinateIndex = 0; + textureState0.TextureTransform = TextureTransform.Disable; // REVIEW + textureState1.ColorOperation = TextureOperation.Disable; + textureState1.AlphaOperation = TextureOperation.Disable; + samplerState0.MinFilter = TextureFilter.Point; + samplerState0.MagFilter = TextureFilter.Point; + samplerState0.MipFilter = TextureFilter.None; + + if (which==0) + savedStateBlock = device.EndStateBlock(); + else + drawTextStateBlock = device.EndStateBlock(); + } + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text) { + DrawText(xpos, ypos, color, text, RenderFlags.Filtered); + } + + + + + /// + /// Draw some text on the screen + /// + public void DrawText(float xpos, float ypos, Color color, string text, RenderFlags flags) { + if (text == null) + return; + + // Setup renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.SetTexture(0, fontTexture); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Adjust for character spacing + xpos -= spacingPerChar; + float fStartX = xpos; + + // Fill vertex buffer + int iv = 0; + int dwNumTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / textureScale; + float h = (ty2-ty1) * textureHeight / textureScale; + + int intColor = color.ToArgb(); + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,0.9f,1.0f), intColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,0.9f,1.0f), intColor, tx1, ty1); + dwNumTriangles += 2; + + if (dwNumTriangles*3 > (MaxNumfontVertices-6)) { + // Set the data for the vertexbuffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + dwNumTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar); + } + + // Set the data for the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (dwNumTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList, 0, dwNumTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.TransformedColoredTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + Viewport vp = device.Viewport; + float xpos = (x+1.0f)*vp.Width/2; + float ypos = (y+1.0f)*vp.Height/2; + float sz = z; + float rhw = 1.0f; + float fLineHeight = (textureCoords[0,3] - textureCoords[0,1]) * textureHeight; + + // Adjust for character spacing + xpos -= spacingPerChar * (fXScale*vp.Height)/fLineHeight; + float fStartX = xpos; + + // Fill vertex buffer + int numTriangles = 0; + int realColor = color.ToArgb(); + int iv = 0; + + foreach (char c in text) { + if (c == '\n') { + xpos = fStartX; + ypos += fYScale*vp.Height; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1)*textureWidth; + float h = (ty2-ty1)*textureHeight; + + w *= (fXScale*vp.Height)/fLineHeight; + h *= (fYScale*vp.Height)/fLineHeight; + + if (c != ' ') { + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx1, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx2, ty1); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+w-0.5f,ypos+h-0.5f,sz,rhw), realColor, tx2, ty2); + fontVertices[iv++] = new CustomVertex.TransformedColoredTextured(new Vector4(xpos+0-0.5f,ypos+0-0.5f,sz,rhw), realColor, tx1, ty1); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + numTriangles = 0; + iv = 0; + } + } + + xpos += w - (2 * spacingPerChar) * (fXScale*vp.Height)/fLineHeight; + } + + // Unlock and render the vertex buffer + vertexBuffer.SetData(fontVertices, 0, LockFlags.Discard); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Draws scaled 2D text. Note that x and y are in viewport coordinates + /// (ranging from -1 to +1). fXScale and fYScale are the size fraction + /// relative to the entire viewport. For example, a fXScale of 0.25 is + /// 1/8th of the screen width. This allows you to output text at a fixed + /// fraction of the viewport, even if the screen or window size changes. + /// + public void DrawTextScaled(float x, float y, float z, + float fXScale, float fYScale, + System.Drawing.Color color, + string text) { + this.DrawTextScaled(x,y,z,fXScale, fYScale, color, text, 0); + } + + + + + /// + /// Renders 3D text + /// + public void Render3DText(string text, RenderFlags flags) { + if (device == null) + throw new System.ArgumentNullException(); + + // Set up renderstate + savedStateBlock.Capture(); + drawTextStateBlock.Apply(); + device.VertexFormat = CustomVertex.PositionNormalTextured.Format; + device.PixelShader = null; + device.SetStreamSource(0, vertexBuffer, 0, VertexInformation.GetFormatSize(CustomVertex.PositionNormalTextured.Format)); + + // Set filter states + if ((flags & RenderFlags.Filtered) != 0) { + samplerState0.MinFilter = TextureFilter.Linear; + samplerState0.MagFilter = TextureFilter.Linear; + } + + // Position for each text element + float x = 0.0f; + float y = 0.0f; + + // Center the text block at the origin + if ((flags & RenderFlags.Centered) != 0) { + System.Drawing.SizeF sz = GetTextExtent(text); + x = -(((float)sz.Width)/10.0f)/2.0f; + y = -(((float)sz.Height)/10.0f)/2.0f; + } + + // Turn off culling for two-sided text + if ((flags & RenderFlags.TwoSided) != 0) + renderState.CullMode = Cull.None; + + // Adjust for character spacing + x -= spacingPerChar / 10.0f; + float fStartX = x; + + // Fill vertex buffer + GraphicsStream strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + int numTriangles = 0; + + foreach (char c in text) { + if (c == '\n') { + x = fStartX; + y -= (textureCoords[0,3]-textureCoords[0,1])*textureHeight/10.0f; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float ty1 = textureCoords[c-32,1]; + float tx2 = textureCoords[c-32,2]; + float ty2 = textureCoords[c-32,3]; + + float w = (tx2-tx1) * textureWidth / (10.0f * textureScale); + float h = (ty2-ty1) * textureHeight / (10.0f * textureScale); + + if (c != ' ') { + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+0,0), new Vector3(0,0,-1), tx1, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+h,0), new Vector3(0,0,-1), tx2, ty1)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+w,y+0,0), new Vector3(0,0,-1), tx2, ty2)); + strm.Write(new CustomVertex.PositionNormalTextured(new Vector3(x+0,y+h,0), new Vector3(0,0,-1), tx1, ty1)); + numTriangles += 2; + + if (numTriangles*3 > (MaxNumfontVertices-6)) { + // Unlock, render, and relock the vertex buffer + vertexBuffer.Unlock(); + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + strm = vertexBuffer.Lock(0, 0, LockFlags.Discard); + numTriangles = 0; + } + } + + x += w - (2 * spacingPerChar) / 10.0f; + } + + // Unlock and render the vertex buffer + vertexBuffer.Unlock(); + if (numTriangles > 0) + device.DrawPrimitives(PrimitiveType.TriangleList , 0, numTriangles); + + // Restore the modified renderstates + savedStateBlock.Apply(); + } + + + + + /// + /// Get the dimensions of a text string + /// + private System.Drawing.SizeF GetTextExtent(string text) { + if (null == text || text == string.Empty) + throw new System.ArgumentNullException(); + + float fRowWidth = 0.0f; + float fRowHeight = (textureCoords[0,3]-textureCoords[0,1])*textureHeight; + float fWidth = 0.0f; + float fHeight = fRowHeight; + + foreach (char c in text) { + if (c == '\n') { + fRowWidth = 0.0f; + fHeight += fRowHeight; + } + + if ((c-32) < 0 || (c-32) >= 128-32) + continue; + + float tx1 = textureCoords[c-32,0]; + float tx2 = textureCoords[c-32,2]; + + fRowWidth += (tx2-tx1)*textureWidth - 2*spacingPerChar; + + if (fRowWidth > fWidth) + fWidth = fRowWidth; + } + + return new System.Drawing.SizeF(fWidth, fHeight); + } + + + + + /// + /// Cleanup any resources being used + /// + public void Dispose(object sender, EventArgs e) { + if (systemFont != null) + systemFont.Dispose(); + + systemFont = null; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/d3dspy_settings.ini b/Source Code updated 08-12-05/Spacewar3D/Step12/d3dspy_settings.ini new file mode 100644 index 0000000..dddb07c --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/d3dspy_settings.ini @@ -0,0 +1,2 @@ +SessionName=D3DSpy/musculus/1:16:50 PM +SessionIP= diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/d3dutil.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/d3dutil.cs new file mode 100644 index 0000000..ea2d5a3 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/d3dutil.cs @@ -0,0 +1,928 @@ +//----------------------------------------------------------------------------- +// File: D3DUtil.cs +// +// Desc: Shortcut functions for using DX objects +// +// Copyright (c) Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +using System; +using System.Windows.Forms; +using System.Drawing; +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using Direct3D = Microsoft.DirectX.Direct3D; + + + + +/// +/// Various helper functions for graphics samples +/// +public class GraphicsUtility { + /// + /// Private Constructor + /// + private GraphicsUtility() { + } + + + + /// + /// Initializes a Material structure, setting the diffuse and ambient + /// colors. It does not set emissive or specular colors. + /// + /// The ambient and diffuse color + /// A defined material + public static Direct3D.Material InitMaterial(System.Drawing.Color c) { + Material mtrl = new Material(); + mtrl.Ambient = mtrl.Diffuse = c; + return mtrl; + } + + + + + /// + /// Initializes a light, setting the light position. The + /// diffuse color is set to white; specular and ambient are left as black. + /// + /// Which light to initialize + /// The type + public static void InitLight(Light light, LightType ltType, float x, float y, float z) { + light.Type = ltType; + light.Diffuse = System.Drawing.Color.White; + light.Position = new Vector3(x,y,z); + light.Direction = Vector3.Normalize(light.Position); + light.Range = 1000.0f; + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename, Format format) { + // Get the path to the texture + string path = DXUtil.FindMediaFile(null, textureFilename); + + // Create the texture using D3DX + return TextureLoader.FromFile(device, path, D3DX.Default, D3DX.Default, D3DX.Default, 0, format, + Pool.Managed, Filter.Triangle|Filter.Mirror, + Filter.Triangle|Filter.Mirror, 0); + } + + + + + /// + /// Helper function to create a texture. It checks the root path first, + /// then tries the DXSDK media path (as specified in the system registry). + /// + public static Texture CreateTexture(Device device, string textureFilename) { + return GraphicsUtility.CreateTexture(device, textureFilename, Format.Unknown); + } + + + + + + /// + /// Returns a view matrix for rendering to a face of a cubemap. + /// + public static Matrix GetCubeMapViewMatrix(CubeMapFace face) { + Vector3 vEyePt = new Vector3(0.0f, 0.0f, 0.0f); + Vector3 vLookDir = new Vector3(); + Vector3 vUpDir = new Vector3(); + + switch (face) { + case CubeMapFace.PositiveX: + vLookDir = new Vector3(1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeX: + vLookDir = new Vector3(-1.0f, 0.0f, 0.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.PositiveY: + vLookDir = new Vector3(0.0f, 1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f,-1.0f); + break; + case CubeMapFace.NegativeY: + vLookDir = new Vector3(0.0f,-1.0f, 0.0f); + vUpDir = new Vector3(0.0f, 0.0f, 1.0f); + break; + case CubeMapFace.PositiveZ: + vLookDir = new Vector3(0.0f, 0.0f, 1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + case CubeMapFace.NegativeZ: + vLookDir = new Vector3(0.0f, 0.0f,-1.0f); + vUpDir = new Vector3(0.0f, 1.0f, 0.0f); + break; + } + + // Set the view transform for this cubemap surface + Matrix matView = Matrix.LookAtLH(vEyePt, vLookDir, vUpDir); + return matView; + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control, float fTrackBallRadius) { + System.Drawing.Point pt = System.Windows.Forms.Cursor.Position; + System.Drawing.Rectangle rc = control.ClientRectangle; + pt = control.PointToClient(pt); + float xpos = (((2.0f * pt.X) / (rc.Right-rc.Left)) - 1); + float ypos = (((2.0f * pt.Y) / (rc.Bottom-rc.Top)) - 1); + float sz; + + if (xpos == 0.0f && ypos == 0.0f) + return new Quaternion(0.0f, 0.0f, 0.0f, 1.0f); + + float d2 = (float)Math.Sqrt(xpos*xpos + ypos*ypos); + + if (d2 < fTrackBallRadius * 0.70710678118654752440) // Inside sphere + sz = (float)Math.Sqrt(fTrackBallRadius*fTrackBallRadius - d2*d2); + else // On hyperbola + sz = (fTrackBallRadius*fTrackBallRadius) / (2.0f*d2); + + // Get two points on trackball's sphere + Vector3 p1 = new Vector3(xpos, ypos, sz); + Vector3 p2 = new Vector3(0.0f, 0.0f, fTrackBallRadius); + + // Get axis of rotation, which is cross product of p1 and p2 + Vector3 axis = Vector3.Cross(p1,p2); + + // Calculate angle for the rotation about that axis + float t = Vector3.Length(Vector3.Subtract(p2,p1)) / (2.0f*fTrackBallRadius); + if (t > +1.0f) t = +1.0f; + if (t < -1.0f) t = -1.0f; + float fAngle = (float)(2.0f * Math.Asin(t)); + + // Convert axis to quaternion + return Quaternion.RotationAxis(axis, fAngle); + } + + + + + /// + /// Returns a quaternion for the rotation implied by the window's cursor position + /// + public static Quaternion GetRotationFromCursor(System.Windows.Forms.Form control) { + return GetRotationFromCursor(control, 1.0f); + } + + + + + /// + /// Axis to axis quaternion double angle (no normalization) + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by 2*THETA. + /// + public static Quaternion D3DXQuaternionUnitAxisToUnitAxis2(Vector3 fromVector, Vector3 toVector) { + Vector3 axis = Vector3.Cross(fromVector, toVector); // proportional to sin(theta) + return new Quaternion(axis.X, axis.Y, axis.Z, Vector3.Dot(fromVector, toVector)); + } + + + + + /// + /// Axis to axis quaternion + /// Takes two points on unit sphere an angle THETA apart, returns + /// quaternion that represents a rotation around cross product by theta. + /// + public static Quaternion D3DXQuaternionAxisToAxis(Vector3 fromVector, Vector3 toVector) { + Vector3 vA = Vector3.Normalize(fromVector), vB = Vector3.Normalize(toVector); + Vector3 vHalf = Vector3.Add(vA,vB); + vHalf = Vector3.Normalize(vHalf); + return GraphicsUtility.D3DXQuaternionUnitAxisToUnitAxis2(vA, vHalf); + } + + + + + /// + /// Gets the number of ColorChanelBits from a format + /// + static public int GetColorChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 8; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 8; + case Format.R5G6B5: + return 5; + case Format.X1R5G5B5: + return 5; + case Format.A1R5G5B5: + return 5; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 2; + case Format.A8R3G3B2: + return 2; + case Format.X4R4G4B4: + return 4; + case Format.A2B10G10R10: + return 10; + case Format.A2R10G10B10: + return 10; + default: + return 0; + } + } + + + + + /// + /// Gets the number of alpha channel bits + /// + static public int GetAlphaChannelBits(Format format) { + switch (format) { + case Format.R8G8B8: + return 0; + case Format.A8R8G8B8: + return 8; + case Format.X8R8G8B8: + return 0; + case Format.R5G6B5: + return 0; + case Format.X1R5G5B5: + return 0; + case Format.A1R5G5B5: + return 1; + case Format.A4R4G4B4: + return 4; + case Format.R3G3B2: + return 0; + case Format.A8R3G3B2: + return 8; + case Format.X4R4G4B4: + return 0; + case Format.A2B10G10R10: + return 2; + case Format.A2R10G10B10: + return 2; + default: + return 0; + } + } + + + + + /// + /// Gets the number of depth bits + /// + static public int GetDepthBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 16; + case DepthFormat.D15S1: + return 15; + case DepthFormat.D24X8: + return 24; + case DepthFormat.D24S8: + return 24; + case DepthFormat.D24X4S4: + return 24; + case DepthFormat.D32: + return 32; + default: + return 0; + } + } + + + + + /// + /// Gets the number of stencil bits + /// + static public int GetStencilBits(DepthFormat format) { + switch (format) { + case DepthFormat.D16: + return 0; + case DepthFormat.D15S1: + return 1; + case DepthFormat.D24X8: + return 0; + case DepthFormat.D24S8: + return 8; + case DepthFormat.D24X4S4: + return 4; + case DepthFormat.D32: + return 0; + default: + return 0; + } + } + + + + + /// + /// Assembles and creates a file-based vertex shader + /// + public static VertexShader CreateVertexShader(Device device, string filename) { + GraphicsStream code = null; + string path = null; + + // Get the path to the vertex shader file + path = DXUtil.FindMediaFile(null, filename); + + // Assemble the vertex shader file + code = ShaderLoader.FromFile(path, null, 0); + + // Create the vertex shader + return new VertexShader(device, code); + } + +} + + + + +/// +/// An arc ball class +/// +public class GraphicsArcBall { + private int internalWidth; // ArcBall's window width + private int internalHeight; // ArcBall's window height + private float internalradius; // ArcBall's radius in screen coords + private float internalradiusTranslation; // ArcBall's radius for translating the target + + private Quaternion internaldownQuat; // Quaternion before button down + private Quaternion internalnowQuat; // Composite quaternion for current drag + private Matrix internalrotationMatrix; // Matrix for arcball's orientation + private Matrix internalrotationDelta; // Matrix for arcball's orientation + private Matrix internaltranslationMatrix; // Matrix for arcball's position + private Matrix internaltranslationDelta; // Matrix for arcball's position + private bool internaldragging; // Whether user is dragging arcball + private bool internaluseRightHanded; // Whether to use RH coordinate system + private int saveMouseX = 0; // Saved mouse position + private int saveMouseY = 0; + private Vector3 internalvectorDown; // Button down vector + System.Windows.Forms.Control parent; // parent + + + + + /// + /// Constructor + /// + public GraphicsArcBall(System.Windows.Forms.Control p) { + internaldownQuat = Quaternion.Identity; + internalnowQuat = Quaternion.Identity; + internalrotationMatrix = Matrix.Identity; + internalrotationDelta = Matrix.Identity; + internaltranslationMatrix = Matrix.Identity; + internaltranslationDelta = Matrix.Identity; + internaldragging = false; + internalradiusTranslation = 1.0f; + internaluseRightHanded = false; + + parent = p; + // Hook the events + p.MouseDown += new MouseEventHandler(this.OnContainerMouseDown); + p.MouseUp += new MouseEventHandler(this.OnContainerMouseUp); + p.MouseMove += new MouseEventHandler(this.OnContainerMouseMove); + } + + + + + /// + /// Set the window dimensions + /// + public void SetWindow(int width, int height, float radius) { + // Set ArcBall info + internalWidth = width; + internalHeight = height; + internalradius = radius; + } + + + + + /// + /// Screen coords to a vector + /// + private Vector3 ScreenToVector(int xpos, int ypos) { + // Scale to screen + float x = -(xpos - internalWidth/2) / (internalradius*internalWidth/2); + float y = (ypos - internalHeight/2) / (internalradius*internalHeight/2); + + if (internaluseRightHanded) { + x = -x; + y = -y; + } + + float z = 0.0f; + float mag = x*x + y*y; + + if (mag > 1.0f) { + float scale = 1.0f/(float)Math.Sqrt(mag); + x *= scale; + y *= scale; + } + else + z = (float)Math.Sqrt(1.0f - mag); + + // Return vector + return new Vector3(x, y, z); + } + + + + + /// + /// Fired when the containers mouse button is down + /// + private void OnContainerMouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { + // Store off the position of the cursor when the button is pressed + saveMouseX = e.X; + saveMouseY = e.Y; + + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // Start drag mode + internaldragging = true; + internalvectorDown = ScreenToVector(e.X, e.Y); + internaldownQuat = internalnowQuat; + } + } + + + + + /// + /// Fired when the containers mouse button has been released + /// + private void OnContainerMouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + // End drag mode + internaldragging = false; + } + } + + + + + /// + /// Fired when the containers mouse is moving + /// + private void OnContainerMouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { + if (e.Button == System.Windows.Forms.MouseButtons.Left) { + if (internaldragging) { + // recompute nowQuat + Vector3 vCur = ScreenToVector(e.X, e.Y); + Quaternion qAxisToAxis = GraphicsUtility.D3DXQuaternionAxisToAxis(internalvectorDown, vCur); + internalnowQuat = internaldownQuat; + internalnowQuat = Quaternion.Multiply(internalnowQuat,qAxisToAxis); + internalrotationDelta = Matrix.RotationQuaternion(qAxisToAxis); + } + else + internalrotationDelta = Matrix.Identity; + + internalrotationMatrix = Matrix.RotationQuaternion(internalnowQuat); + internaldragging = true; + } + + if ((e.Button == System.Windows.Forms.MouseButtons.Right) || (e.Button == System.Windows.Forms.MouseButtons.Middle)) { + // Normalize based on size of window and bounding sphere radius + float fDeltaX = (saveMouseX-e.X) * internalradiusTranslation / internalWidth; + float fDeltaY = (saveMouseY-e.Y) * internalradiusTranslation / internalHeight; + + if (e.Button == System.Windows.Forms.MouseButtons.Right) { + internaltranslationDelta = Matrix.Translation(-2 * fDeltaX, 2 * fDeltaY, 0.0f); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + if (e.Button == System.Windows.Forms.MouseButtons.Middle) { + internaltranslationDelta = Matrix.Translation(0.0f, 0.0f, 5 * fDeltaY); + internaltranslationMatrix = Matrix.Multiply(internaltranslationMatrix, internaltranslationDelta); + } + + // Store mouse coordinate + saveMouseX = e.X; + saveMouseY = e.Y; + } + } + + #region Various properties of the class + public float Radius { + set { + internalradiusTranslation = value; } + } + public bool RightHanded { + get { return internaluseRightHanded; } + set { internaluseRightHanded = value; } + } + public Matrix RotationMatrix { + get { return internalrotationMatrix; } + } + public Matrix RotationDeltaMatrix { + get { return internalrotationDelta; } + } + public Matrix TranslationMatrix { + get { return internaltranslationMatrix; } + } + public Matrix TranslationDeltaMatrix { + get { return internaltranslationDelta; } + } + public bool IsBeingDragged { + get { return internaldragging; } + } + #endregion +} + + + + +/// +/// Handles our meshes +/// +public class GraphicsMesh : IDisposable { + private string fileName = null; + private Mesh systemMemoryMesh = null; // SysMem mesh, lives through resize + private Mesh localMemoryMesh = null; // Local mesh, rebuilt on resize + private Direct3D.Material[] materials = null; + private Texture[] textures = null; + private bool isUsingMeshMaterials = true; + private VertexBuffer systemMemoryVertexBuffer = null; + private VertexBuffer localMemoryVertexBuffer = null; + private IndexBuffer systemMemoryIndexBuffer = null; + private IndexBuffer localMemoryIndexBuffer = null; + + + + + /// + /// Constructor + /// + /// The initial filename + public GraphicsMesh(string filename) { + fileName = filename; + } + public GraphicsMesh() : this ("CD3DFile_Mesh") {} + + + + + /// + /// The system memory mesh + /// + public Mesh SystemMesh { + get { return systemMemoryMesh; } + } + + + + + /// + /// The local memory mesh + /// + public Mesh LocalMesh { + get { return localMemoryMesh; } + } + + + + + /// + /// Should we use the mesh materials + /// + public bool IsUsingMaterials { + set { isUsingMeshMaterials = value; } + } + + + + + /// + /// Creates a new mesh + /// + /// The device used to create the mesh + /// the file to load + public void Create(Device device, string filename) { + string strPath = null; + GraphicsStream adjacencyBuffer; + ExtendedMaterial[] Mat; + + if (device != null) { + device.DeviceLost += new System.EventHandler(this.InvalidateDeviceObjects); + device.Disposing += new System.EventHandler(this.InvalidateDeviceObjects); + device.DeviceReset += new System.EventHandler(this.RestoreDeviceObjects); + } + + // Find the path for the file, and convert it to ANSI (for the D3DX API) + strPath = DXUtil.FindMediaFile(null, filename); + + // Load the mesh + systemMemoryMesh = Mesh.FromFile(strPath, MeshFlags.SystemMemory, device, out adjacencyBuffer, out Mat); + + // Optimize the mesh for performance + systemMemoryMesh.OptimizeInPlace(MeshFlags.OptimizeCompact | MeshFlags.OptimizeAttributeSort | MeshFlags.OptimizeVertexCache, adjacencyBuffer); + + textures = new Texture[Mat.Length]; + materials = new Direct3D.Material[Mat.Length]; + + for (int i=0; i + /// Set the flexible vertex format + /// + public void SetVertexFormat(Device device, VertexFormats format) { + Mesh pTempSysMemMesh = null; + Mesh pTempLocalMesh = null; + + if (systemMemoryMesh != null) { + pTempSysMemMesh = systemMemoryMesh.Clone(MeshFlags.SystemMemory, format, device); + } + if (localMemoryMesh != null) { + try { + pTempLocalMesh = localMemoryMesh.Clone(0, format, device); + } + catch (Exception e) { + pTempSysMemMesh.Dispose(); + pTempSysMemMesh = null; + throw e; + } + } + + if (systemMemoryMesh != null) + systemMemoryMesh.Dispose(); + systemMemoryMesh = null; + + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + + // Clean up any vertex/index buffers + DisposeLocalBuffers(true, true); + + if (pTempSysMemMesh != null) systemMemoryMesh = pTempSysMemMesh; + if (pTempLocalMesh != null) localMemoryMesh = pTempLocalMesh; + + // Compute normals in case the meshes have them + if (systemMemoryMesh != null) + systemMemoryMesh.ComputeNormals(); + if (localMemoryMesh != null) + localMemoryMesh.ComputeNormals(); + } + + + + + /// + /// Restore the device objects after the device was reset + /// + public void RestoreDeviceObjects(object sender, EventArgs e) { + if (null == systemMemoryMesh) + throw new ArgumentException(); + + Device device = (Device)sender; + // Make a local memory version of the mesh. Note: because we are passing in + // no flags, the default behavior is to clone into local memory. + localMemoryMesh = systemMemoryMesh.Clone(0, systemMemoryMesh.VertexFormat, device); + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + + } + + + + + /// + /// Invalidate our local mesh + /// + public void InvalidateDeviceObjects(object sender, EventArgs e) { + if (localMemoryMesh != null) + localMemoryMesh.Dispose(); + localMemoryMesh = null; + // Clean up any vertex/index buffers + DisposeLocalBuffers(false, true); + } + + + + + /// + /// Get the vertex buffer assigned to the system mesh + /// + public VertexBuffer SystemVertexBuffer { + get { + if (systemMemoryVertexBuffer != null) + return systemMemoryVertexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryVertexBuffer = systemMemoryMesh.VertexBuffer; + return systemMemoryVertexBuffer; + } + } + + + + + /// + /// Get the vertex buffer assigned to the Local mesh + /// + public VertexBuffer LocalVertexBuffer { + get { + if (localMemoryVertexBuffer != null) + return localMemoryVertexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryVertexBuffer = localMemoryMesh.VertexBuffer; + return localMemoryVertexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the system mesh + /// + public IndexBuffer SystemIndexBuffer { + get { + if (systemMemoryIndexBuffer != null) + return systemMemoryIndexBuffer; + + if (systemMemoryMesh == null) + return null; + + systemMemoryIndexBuffer = systemMemoryMesh.IndexBuffer; + return systemMemoryIndexBuffer; + } + } + + + + + /// + /// Get the Index buffer assigned to the Local mesh + /// + public IndexBuffer LocalIndexBuffer { + get { + if (localMemoryIndexBuffer != null) + return localMemoryIndexBuffer; + + if (localMemoryMesh == null) + return null; + + localMemoryIndexBuffer = localMemoryMesh.IndexBuffer; + return localMemoryIndexBuffer; + } + } + + + + + /// + /// Clean up any resources + /// + public void Dispose() { + if (textures != null) { + for (int i = 0; i + /// Actually draw the mesh + /// + /// The device used to draw + /// Can draw the opaque parts of the mesh + /// Can draw the alpha parts of the mesh + public void Render(Device device, bool canDrawOpaque, bool canDrawAlpha) { + if (null == localMemoryMesh) + throw new ArgumentException(); + + RenderStateManager rs = device.RenderState; + // Frist, draw the subsets without alpha + if (canDrawOpaque) { + for (int i=0; i + /// Draw the mesh with opaque and alpha + /// + public void Render(Device device) { + Render(device, true, true); + } + + + + + /// + /// Cleans up the local vertex buffers/index buffers + /// + /// + /// + private void DisposeLocalBuffers(bool systemBuffers, bool localBuffers) { + if (systemBuffers) { + if (systemMemoryIndexBuffer != null) + systemMemoryIndexBuffer.Dispose(); + systemMemoryIndexBuffer = null; + + if (systemMemoryVertexBuffer != null) + systemMemoryVertexBuffer.Dispose(); + systemMemoryVertexBuffer = null; + } + if (localBuffers) { + if (localMemoryIndexBuffer != null) + localMemoryIndexBuffer.Dispose(); + localMemoryIndexBuffer = null; + + if (localMemoryVertexBuffer != null) + localMemoryVertexBuffer.Dispose(); + localMemoryVertexBuffer = null; + } + } +} + diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/dinput.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/dinput.cs new file mode 100644 index 0000000..f0829a0 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/dinput.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectInput; + +/// +/// This class is where the DirectInput routines +/// for the application resides. +/// +public class InputClass { + + private Control owner = null; + private Device localDevice = null; + + public InputClass(Control owner) { + this.owner = owner; + + localDevice = new Device(SystemGuid.Keyboard); + localDevice.SetDataFormat(DeviceDataFormat.Keyboard); + localDevice.SetCooperativeLevel(owner, CooperativeLevelFlags.Foreground | CooperativeLevelFlags.NonExclusive); + } + + public KeyboardState GetInputState() { + KeyboardState kbState = null; + + try { + kbState = localDevice.GetCurrentKeyboardState(); + } + catch(InputException) { + do { + Application.DoEvents(); + try{ localDevice.Acquire(); } + catch (InputLostException) { + continue; } + catch(OtherApplicationHasPriorityException) { + continue; } + + break; + + }while( true ); + } + return kbState; + } +} \ No newline at end of file diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/dplay.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/dplay.cs new file mode 100644 index 0000000..5004530 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/dplay.cs @@ -0,0 +1,165 @@ +using System; +using System.Collections; +using System.Windows.Forms; +using Microsoft.DirectX; +using Microsoft.DirectX.DirectPlay; + + + +public struct Players { + public bool Active; + public int dpnID; + public string Name; + public Players(int id, string n, bool active) { + dpnID = id; Name = n; Active = active;} +} + + /// + /// The class that houses DirectPlay code for the application. + /// +public class PlayClass { + #region Fields and Properties + private GameClass game = null; + + private Peer peerObject = null; + + private bool isHost = false; + public bool IsHost { get { return isHost; } } + + private bool inSession = false; + public bool InSession { get { return inSession; } } + + private int localPlayerID = 0; + + + private Players remotePlayer; + public Players RemotePlayer { get {return remotePlayer; } } + + private ConnectWizard Connect = null; + + #endregion + + #region About Application Guids + // This guid allows DirectPlay to find other instances of the same game on + // the network, so it must be unique for every game, and the same for + // every instance of that game. You can use the guidgen.exe program to + // generate a new guid. + #endregion + private Guid AppGuid = new Guid( 0xc134dcd4, 0xff30, 0x4c86, 0x9a, 0x2e, 0xe0, 0x46, 0xa2, 0x21, 0xe3, 0x86 ); + + #region Constructor + + public PlayClass(GameClass Game) { + this.game = Game; + + //Initialize our peer to peer network object + peerObject = new Peer(); + + + // Set up our event handlers (We only need events for the ones we care about) + peerObject.PlayerCreated += new PlayerCreatedEventHandler(PlayerCreated); + peerObject.PlayerDestroyed += new PlayerDestroyedEventHandler(PlayerDestroyed); + peerObject.Receive += new ReceiveEventHandler(game.DataReceived); + peerObject.SessionTerminated += new SessionTerminatedEventHandler(SessionTerminated); + + // use the DirectPlay connection wizard to create our join sessions + Connect = new ConnectWizard(peerObject, AppGuid, "Spacewar3D"); + Connect.StartWizard(); + + inSession = Connect.InSession; + + if (inSession) { + isHost = Connect.IsHost; + } + + } + #endregion //Constructor + + #region Network Message functions + // These routines handle the communication between the game peers. + + + private void PlayerCreated(object sender, PlayerCreatedEventArgs dpMessage) { + // Get the PlayerInformation and store it + int playerID = dpMessage.Message.PlayerID; + PlayerInformation dpPeer = peerObject.GetPeerInformation(playerID); + Players oPlayer = new Players(playerID, dpPeer.Name.ToUpper(), true); + // Save this player id if it's ourselves + if (dpPeer.Local) + localPlayerID = dpMessage.Message.PlayerID; + else { + // We lock the data here since it is shared across multiple threads. + lock (this) { + remotePlayer = oPlayer; + } + game.RemotePlayerJoined(oPlayer.Name); + } + + + } + private void PlayerDestroyed(object sender, PlayerDestroyedEventArgs dpMessage) { + // Remove this player from our list + // We lock the data here since it is shared across multiple threads. + lock (this) { + remotePlayer.Active = false; + } + game.RemotePlayerLeft(remotePlayer.Name); + } + + + public void SendPlayerUpdate(PlayerUpdate update, ShotUpdate shotUpdate) { + if (inSession) { + NetworkPacket packet = new NetworkPacket(); + packet.Write((byte)MessageType.PlayerUpdateID); + packet.Write(update); + + for (int i = 0; i < Constants.NumShots; i++) { + packet.Write(shotUpdate.ShotPosition[i]); + packet.Write(shotUpdate.ShotAge[i]); + packet.Write(shotUpdate.ShotAlive[i]); + } + + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.NoComplete | SendFlags.NoLoopback); + } + } + + public void SendGameState(GameStates gameState) { + if (inSession) { + byte messageType; + switch (gameState) { + case GameStates.Paused: { + messageType = (byte)MessageType.GamePaused; + break; + } + case GameStates.Running: { + messageType = (byte)MessageType.GameRunning; + break; + } + default: { + return; + } + } + NetworkPacket packet = new NetworkPacket(); + packet.Write(messageType); + peerObject.SendTo((int)PlayerID.AllPlayers, packet, 0, SendFlags.Guaranteed | SendFlags.NoLoopback); + } + } + + public void SendScorePoint() { + if (inSession) { + NetworkPacket packet = new NetworkPacket(); + packet.Write((byte)MessageType.Add1ToScore); + peerObject.SendTo(remotePlayer.dpnID, packet, 0, SendFlags.Guaranteed | SendFlags.NoLoopback); + } + } + + #endregion // Network message functions + + #region Cleanup + private void SessionTerminated(object sender, SessionTerminatedEventArgs stea) { + inSession = false; + isHost = false; + } + + #endregion //Cleanup +} diff --git a/Source Code updated 08-12-05/Spacewar3D/Step12/main.cs b/Source Code updated 08-12-05/Spacewar3D/Step12/main.cs new file mode 100644 index 0000000..1ed0210 --- /dev/null +++ b/Source Code updated 08-12-05/Spacewar3D/Step12/main.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using Microsoft.DirectX; +using Container = System.ComponentModel.Container; + + + /// + /// The main windows form for the application. + /// +public class MainClass { + + private GameClass game = null; + private SplashScreen splash = null; + private bool enableNetwork = false; + public bool EnableNetwork { get { return enableNetwork; } set { enableNetwork = value; } } + + private Size gameFormSize; + public Size GameFormSize { get { return gameFormSize; } set { gameFormSize = value; } } + + private bool fullScreen = false; + public bool FullScreen { get { return fullScreen; } set { fullScreen = value; } } + + /// + // Main entry point of the application. + /// + public static void Main() { + MainClass m = new MainClass(); + } + + public MainClass() { + + //display the splash screen and determine network status + splash = new SplashScreen(this); + splash.ShowDialog(); + + try { + game = new GameClass(fullScreen, gameFormSize, enableNetwork); + } + catch(DirectXException) { + return; + } + if( game.CreateGraphicsSample() ) + game.Run(); + } +} diff --git a/contributing.md b/contributing.md new file mode 100644 index 0000000..f6005ad --- /dev/null +++ b/contributing.md @@ -0,0 +1,14 @@ +# Contributing to Apress Source Code + +Copyright for Apress source code belongs to the author(s). However, under fair use you are encouraged to fork and contribute minor corrections and updates for the benefit of the author(s) and other readers. + +## How to Contribute + +1. Make sure you have a GitHub account. +2. Fork the repository for the relevant book. +3. Create a new branch on which to make your change, e.g. +`git checkout -b my_code_contribution` +4. Commit your change. Include a commit message describing the correction. Please note that if your commit message is not clear, the correction will not be accepted. +5. Submit a pull request. + +Thank you for your contribution! \ No newline at end of file